From 4a2abc74cac93e17ee12fab3fcf8fc0693552347 Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Tue, 27 Jan 2026 21:02:34 -0500 Subject: [PATCH] fix: add claude provider to statsProviderMap, UI types, and provider arrays Fixes remaining edge cases from #382: - Add anthropic/claude mapping to statsProviderMap in cliproxy-auth-routes - Add 'claude' case to provider-refreshers switch statement - Add 'claude' to 4 UI type definitions in api-client.ts - Add 'claude' to cliproxy-dialog providers array and options - Add 'claude' to use-cliproxy-auth-flow VALID_PROVIDERS - Fix wizard index.tsx type cast to include all 8 providers --- src/cliproxy/auth/provider-refreshers/index.ts | 1 + src/web-server/routes/cliproxy-auth-routes.ts | 2 ++ ui/src/components/cliproxy/cliproxy-dialog.tsx | 3 ++- ui/src/components/setup/wizard/index.tsx | 10 +++++++++- ui/src/hooks/use-cliproxy-auth-flow.ts | 2 +- ui/src/lib/api-client.ts | 8 ++++---- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/cliproxy/auth/provider-refreshers/index.ts b/src/cliproxy/auth/provider-refreshers/index.ts index 232fe8c9..89df2ab2 100644 --- a/src/cliproxy/auth/provider-refreshers/index.ts +++ b/src/cliproxy/auth/provider-refreshers/index.ts @@ -35,6 +35,7 @@ export async function refreshToken( case 'iflow': case 'kiro': case 'ghcp': + case 'claude': return { success: false, error: `Token refresh not yet implemented for ${provider}`, diff --git a/src/web-server/routes/cliproxy-auth-routes.ts b/src/web-server/routes/cliproxy-auth-routes.ts index b72418d3..295d7070 100644 --- a/src/web-server/routes/cliproxy-auth-routes.ts +++ b/src/web-server/routes/cliproxy-auth-routes.ts @@ -71,6 +71,8 @@ router.get('/', async (_req: Request, res: Response): Promise => { iflow: 'iflow', kiro: 'kiro', copilot: 'ghcp', // CLIProxyAPI returns 'copilot', we map to 'ghcp' + anthropic: 'claude', // CLIProxyAPI returns 'anthropic', we map to 'claude' + claude: 'claude', }; // Update lastUsedAt for providers with recent activity diff --git a/ui/src/components/cliproxy/cliproxy-dialog.tsx b/ui/src/components/cliproxy/cliproxy-dialog.tsx index fa8fc3fb..3a848e0b 100644 --- a/ui/src/components/cliproxy/cliproxy-dialog.tsx +++ b/ui/src/components/cliproxy/cliproxy-dialog.tsx @@ -14,7 +14,7 @@ import { Label } from '@/components/ui/label'; import { useCreateVariant, useCliproxyAuth } from '@/hooks/use-cliproxy'; import { usePrivacy } from '@/contexts/privacy-context'; -const providers = ['gemini', 'codex', 'agy', 'qwen', 'iflow', 'kiro', 'ghcp'] as const; +const providers = ['gemini', 'codex', 'agy', 'qwen', 'iflow', 'kiro', 'ghcp', 'claude'] as const; const schema = z.object({ name: z @@ -41,6 +41,7 @@ const providerOptions = [ { value: 'iflow', label: 'iFlow' }, { value: 'kiro', label: 'Kiro (AWS)' }, { value: 'ghcp', label: 'GitHub Copilot (OAuth)' }, + { value: 'claude', label: 'Claude (Anthropic)' }, ]; export function CliproxyDialog({ open, onClose }: CliproxyDialogProps) { diff --git a/ui/src/components/setup/wizard/index.tsx b/ui/src/components/setup/wizard/index.tsx index 29e98e76..6c21af05 100644 --- a/ui/src/components/setup/wizard/index.tsx +++ b/ui/src/components/setup/wizard/index.tsx @@ -136,7 +136,15 @@ export function QuickSetupWizard({ open, onClose }: QuickSetupWizardProps) { try { await createMutation.mutateAsync({ name: variantName, - provider: selectedProvider as 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow', + provider: selectedProvider as + | 'gemini' + | 'codex' + | 'agy' + | 'qwen' + | 'iflow' + | 'kiro' + | 'ghcp' + | 'claude', model: modelName || undefined, account: selectedAccount?.id, }); diff --git a/ui/src/hooks/use-cliproxy-auth-flow.ts b/ui/src/hooks/use-cliproxy-auth-flow.ts index a91a05c3..4867c3a8 100644 --- a/ui/src/hooks/use-cliproxy-auth-flow.ts +++ b/ui/src/hooks/use-cliproxy-auth-flow.ts @@ -14,7 +14,7 @@ interface AuthFlowState { error: string | null; } -const VALID_PROVIDERS = ['gemini', 'codex', 'agy', 'qwen', 'iflow', 'kiro', 'ghcp']; +const VALID_PROVIDERS = ['gemini', 'codex', 'agy', 'qwen', 'iflow', 'kiro', 'ghcp', 'claude']; export function useCliproxyAuthFlow() { const [state, setState] = useState({ diff --git a/ui/src/lib/api-client.ts b/ui/src/lib/api-client.ts index 6f052997..db85b48e 100644 --- a/ui/src/lib/api-client.ts +++ b/ui/src/lib/api-client.ts @@ -47,7 +47,7 @@ export interface UpdateProfile { export interface Variant { name: string; - provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp'; + provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude'; settings: string; account?: string; port?: number; @@ -56,13 +56,13 @@ export interface Variant { export interface CreateVariant { name: string; - provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp'; + provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude'; model?: string; account?: string; } export interface UpdateVariant { - provider?: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp'; + provider?: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude'; model?: string; account?: string; } @@ -72,7 +72,7 @@ export interface OAuthAccount { id: string; email?: string; nickname?: string; - provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp'; + provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude'; isDefault: boolean; tokenFile: string; createdAt: string;