diff --git a/frontend/src/components/keys/UseKeyModal.vue b/frontend/src/components/keys/UseKeyModal.vue index 242817d1cc..5966aa582b 100644 --- a/frontend/src/components/keys/UseKeyModal.vue +++ b/frontend/src/components/keys/UseKeyModal.vue @@ -275,6 +275,7 @@ interface Props { apiKey: string baseUrl: string platform: GroupPlatform | null + claudeCodeOnly?: boolean allowMessagesDispatch?: boolean } @@ -336,6 +337,7 @@ const codexManifestContext = computed(() => { // Reset tabs when platform changes const defaultClientTab = computed(() => { + if (props.claudeCodeOnly) return 'claude' switch (props.platform) { case 'openai': return 'codex' @@ -350,7 +352,7 @@ const defaultClientTab = computed(() => { } }) -watch(() => props.platform, () => { +watch(() => [props.platform, props.claudeCodeOnly], () => { activeTab.value = 'unix' activeClientTab.value = defaultClientTab.value codexAuthMode.value = 'legacy' @@ -440,6 +442,9 @@ const SparkleIcon = { const clientTabs = computed((): TabConfig[] => { if (!props.platform) return [] + if (props.claudeCodeOnly) { + return [{ id: 'claude', label: t('keys.useKeyModal.cliTabs.claudeCode'), icon: TerminalIcon }] + } switch (props.platform) { case 'openai': { const tabs: TabConfig[] = [ diff --git a/frontend/src/components/keys/__tests__/UseKeyModal.spec.ts b/frontend/src/components/keys/__tests__/UseKeyModal.spec.ts index 7d2a939ed1..e02cc53152 100644 --- a/frontend/src/components/keys/__tests__/UseKeyModal.spec.ts +++ b/frontend/src/components/keys/__tests__/UseKeyModal.spec.ts @@ -40,6 +40,44 @@ describe('UseKeyModal', () => { saveAsMock.mockClear() }) + it('shows only Claude Code for Claude Code-only groups', async () => { + const wrapper = mount(UseKeyModal, { + props: { + show: true, + apiKey: 'sk-anthropic-test', + baseUrl: 'https://example.com/v1', + platform: 'anthropic' + }, + global: { + stubs: { + BaseDialog: { template: '