= {
}
}
-function SidebarRowDot({ dotState, className }: { dotState: SessionDotState; className?: string }) {
+function SidebarRowDot({
+ dotState,
+ className,
+ projectColor
+}: {
+ dotState: SessionDotState
+ className?: string
+ projectColor?: null | string
+}) {
const { t } = useI18n()
const r = t.sidebar.row
+
+ // An idle session inherits its project's color (a quiet marker matching the
+ // project row's own color dot). The active states (working / needs-input /
+ // background / unread) own the dot and keep their semantic color, so the
+ // inherited tint never competes with an attention cue.
+ if (dotState === 'idle' && projectColor) {
+ return (
+
+ )
+ }
+
const variant = DOT_VARIANTS[dotState]
return (
diff --git a/apps/desktop/src/app/settings/model-settings.tsx b/apps/desktop/src/app/settings/model-settings.tsx
index 8b18b65b5fc7..c0f76175e49b 100644
--- a/apps/desktop/src/app/settings/model-settings.tsx
+++ b/apps/desktop/src/app/settings/model-settings.tsx
@@ -888,86 +888,86 @@ export function ModelSettings({ onMainModelChanged }: ModelSettingsProps) {
return (
-
-
-
- )
- }
- below={
- isEditing && (
-
-
-
-
-
-
- )
- }
- description={
-
- {isAuto ? m.autoUseMain : `${current.provider} · ${current.model || m.providerDefault}`}
-
- }
- title={
-
- {copy.label}
- {copy.hint}
-
- }
- />
+ action={
+ !isEditing && (
+
+
+
+
+ )
+ }
+ below={
+ isEditing && (
+
+
+
+
+
+
+ )
+ }
+ description={
+
+ {isAuto ? m.autoUseMain : `${current.provider} · ${current.model || m.providerDefault}`}
+
+ }
+ title={
+
+ {copy.label}
+ {copy.hint}
+
+ }
+ />
)
})}
diff --git a/apps/desktop/src/app/settings/toolset-config-panel.test.tsx b/apps/desktop/src/app/settings/toolset-config-panel.test.tsx
index c63e516541ec..e51d83c2a33e 100644
--- a/apps/desktop/src/app/settings/toolset-config-panel.test.tsx
+++ b/apps/desktop/src/app/settings/toolset-config-panel.test.tsx
@@ -34,7 +34,9 @@ vi.mock('@/hermes', () => ({
getToolsetModels: (name: string, provider?: string) => getToolsetModels(name, provider),
selectToolsetModel: (name: string, model: string, provider?: string) => selectToolsetModel(name, model, provider),
selectToolsetProvider: (name: string, provider: string, capability?: string) =>
- capability === undefined ? selectToolsetProvider(name, provider) : selectToolsetProvider(name, provider, capability),
+ capability === undefined
+ ? selectToolsetProvider(name, provider)
+ : selectToolsetProvider(name, provider, capability),
setEnvVar: (key: string, value: string) => setEnvVar(key, value),
deleteEnvVar: (key: string) => deleteEnvVar(key),
revealEnvVar: (key: string) => revealEnvVar(key),
@@ -378,7 +380,6 @@ describe('ToolsetConfigPanel', () => {
})
})
-
it('swaps the install hint for the installed one-liner when the provider is ready', async () => {
// Server says the post_setup install is already satisfied (status ready) —
// the "needs a one-time install" copy would contradict the Ready pill.
@@ -825,9 +826,7 @@ describe('ToolsetConfigPanel', () => {
fireEvent.pointerDown(trigger, { button: 0, ctrlKey: false, pointerType: 'mouse' })
fireEvent.click(await screen.findByRole('menuitem', { name: 'Manage in API Keys' }))
- await waitFor(() =>
- expect(navigateSpy).toHaveBeenCalledWith('/settings?tab=keys&key=ELEVENLABS_API_KEY')
- )
+ await waitFor(() => expect(navigateSpy).toHaveBeenCalledWith('/settings?tab=keys&key=ELEVENLABS_API_KEY'))
})
it('hides "Manage in API Keys" while the key is unset', async () => {