diff --git a/src/renderer/components/team/dialogs/TeamModelSelector.tsx b/src/renderer/components/team/dialogs/TeamModelSelector.tsx index f8ae46ac..668d90d3 100644 --- a/src/renderer/components/team/dialogs/TeamModelSelector.tsx +++ b/src/renderer/components/team/dialogs/TeamModelSelector.tsx @@ -134,9 +134,14 @@ export function formatTeamModelSummary( (providerId === 'codex' && normalizedModel.startsWith('gpt')) || (providerId === 'gemini' && normalizedModel.startsWith('gemini'))); + const providerActsAsBackendOnly = + providerId !== 'anthropic' && modelLabel !== 'Default' && !modelAlreadyCarriesProviderBrand; + const parts = modelAlreadyCarriesProviderBrand ? [modelLabel, effortLabel] - : [providerLabel, modelLabel, effortLabel]; + : providerActsAsBackendOnly + ? [modelLabel, `via ${providerLabel}`, effortLabel] + : [providerLabel, modelLabel, effortLabel]; return parts.filter(Boolean).join(' · '); } diff --git a/src/renderer/utils/bootstrapPromptSanitizer.ts b/src/renderer/utils/bootstrapPromptSanitizer.ts index 6fa03a42..458996aa 100644 --- a/src/renderer/utils/bootstrapPromptSanitizer.ts +++ b/src/renderer/utils/bootstrapPromptSanitizer.ts @@ -118,9 +118,14 @@ function buildRuntimeSummary( (normalizedModel.startsWith('codex') || normalizedModel.startsWith('gpt'))) || (providerId === 'gemini' && normalizedModel.startsWith('gemini'))); + const providerActsAsBackendOnly = + providerId !== 'anthropic' && modelLabel !== 'Default' && !modelAlreadyCarriesProviderBrand; + const parts = modelAlreadyCarriesProviderBrand ? [modelLabel, effortLabel] - : [providerLabel, modelLabel, effortLabel]; + : providerActsAsBackendOnly + ? [modelLabel, `via ${providerLabel}`, effortLabel] + : [providerLabel, modelLabel, effortLabel]; return parts.filter(Boolean).join(' · '); } diff --git a/test/renderer/components/team/TeamModelSelector.test.ts b/test/renderer/components/team/TeamModelSelector.test.ts new file mode 100644 index 00000000..b6a5078a --- /dev/null +++ b/test/renderer/components/team/TeamModelSelector.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'vitest'; + +import { formatTeamModelSummary } from '@renderer/components/team/dialogs/TeamModelSelector'; + +describe('formatTeamModelSummary', () => { + it('shows cross-provider Anthropic models as backend-routed instead of brand-mismatched', () => { + expect(formatTeamModelSummary('codex', 'claude-opus-4-6', 'medium')).toBe( + 'Opus 4.6 · via Codex · Medium' + ); + }); + + it('keeps native Codex-family models branded normally', () => { + expect(formatTeamModelSummary('codex', 'gpt-5.4', 'medium')).toBe('GPT-5.4 · Medium'); + }); +});