From e192b2a7744895d9ee0c7693b0049fee64ddd482 Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:39:51 -0700 Subject: [PATCH] fix(settings): show "Up to date" for current skills in sidebar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Orchestration and Computer Use showed a green "Installed" badge in the settings sidebar even when freshness tracking knows the copy is current. Add an "up-to-date" nav status so a present, no-update skill reads "Up to date" (pairing with the existing "Update available" state), while Voice — which tracks model readiness, not skill freshness — keeps "Installed". --- src/renderer/src/components/settings/Settings.tsx | 4 +++- src/renderer/src/components/settings/SettingsSidebar.tsx | 4 +++- src/renderer/src/lib/settings-navigation-types.ts | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/components/settings/Settings.tsx b/src/renderer/src/components/settings/Settings.tsx index 0d4c2d5d537..f2bdf9b74cd 100644 --- a/src/renderer/src/components/settings/Settings.tsx +++ b/src/renderer/src/components/settings/Settings.tsx @@ -216,7 +216,9 @@ function getSkillNavInstallStatus(skill: { if (!skill.installed) { return 'install' } - return skill.updateAvailable ? 'update-available' : 'installed' + // A freshness-tracked skill that's present with no eligible update is current, so it + // reads "Up to date" (pairs with "Update available"). Voice sets 'installed' directly. + return skill.updateAvailable ? 'update-available' : 'up-to-date' } function hasReadyVoiceModel( diff --git a/src/renderer/src/components/settings/SettingsSidebar.tsx b/src/renderer/src/components/settings/SettingsSidebar.tsx index 8029eabda1a..54908713bc6 100644 --- a/src/renderer/src/components/settings/SettingsSidebar.tsx +++ b/src/renderer/src/components/settings/SettingsSidebar.tsx @@ -155,6 +155,8 @@ export function SettingsSidebar({ ) case 'installed': return translate('auto.components.settings.AgentSkillSetupPanel.9fcebceb2a', 'Installed') + case 'up-to-date': + return translate('auto.components.skills.SkillFreshnessStatusPill.upToDate', 'Up to date') case 'update-available': return translate( 'auto.components.skills.SkillFreshnessStatusPill.updateAvailable', @@ -167,7 +169,7 @@ export function SettingsSidebar({ const installStatusClassName = (status: SettingsNavInstallStatus): string => cn( 'ml-auto shrink-0 rounded-full border px-1.5 py-0.5 text-[10px] font-medium leading-none', - status === 'installed' + status === 'installed' || status === 'up-to-date' ? 'border-status-success-border bg-status-success-background text-status-success' : status === 'update-available' ? 'border-amber-500/40 bg-amber-500/10 text-amber-700 dark:text-amber-300' diff --git a/src/renderer/src/lib/settings-navigation-types.ts b/src/renderer/src/lib/settings-navigation-types.ts index 3541c0e3f2a..b59ed0f6768 100644 --- a/src/renderer/src/lib/settings-navigation-types.ts +++ b/src/renderer/src/lib/settings-navigation-types.ts @@ -3,7 +3,12 @@ import type { LucideProps } from 'lucide-react' import type { SettingsSearchEntry } from '@/components/settings/settings-search' export type SettingsNavIcon = ComponentType -export type SettingsNavInstallStatus = 'install' | 'installed' | 'update-available' | 'checking' +export type SettingsNavInstallStatus = + | 'install' + | 'installed' + | 'up-to-date' + | 'update-available' + | 'checking' export type SettingsNavTarget = | 'general'