From d77963fb3f539bc6210a1353cbc78e0cf9526f3e Mon Sep 17 00:00:00 2001 From: Askhz <1361267452@qq.com> Date: Tue, 7 Apr 2026 20:32:32 +0800 Subject: [PATCH] feat: add costrict login provider --- src/components/ConsoleOAuthFlow.tsx | 140 +++++++++++++++- src/costrict/provider/auth.ts | 191 ++++++++++++++++++++++ src/costrict/provider/credentials.ts | 104 ++++++++++++ src/costrict/provider/fetch.ts | 122 ++++++++++++++ src/costrict/provider/index.ts | 225 ++++++++++++++++++++++++++ src/costrict/provider/modelMapping.ts | 48 ++++++ src/costrict/provider/models.ts | 83 ++++++++++ src/costrict/provider/oauth-params.ts | 58 +++++++ src/costrict/provider/token.ts | 119 ++++++++++++++ src/services/api/claude.ts | 6 + src/setup.ts | 63 ++++++++ src/utils/model/modelOptions.ts | 30 ++++ src/utils/model/providers.ts | 3 + src/utils/settings/types.ts | 4 +- 14 files changed, 1189 insertions(+), 7 deletions(-) create mode 100644 src/costrict/provider/auth.ts create mode 100644 src/costrict/provider/credentials.ts create mode 100644 src/costrict/provider/fetch.ts create mode 100644 src/costrict/provider/index.ts create mode 100644 src/costrict/provider/modelMapping.ts create mode 100644 src/costrict/provider/models.ts create mode 100644 src/costrict/provider/oauth-params.ts create mode 100644 src/costrict/provider/token.ts diff --git a/src/components/ConsoleOAuthFlow.tsx b/src/components/ConsoleOAuthFlow.tsx index 5264b32b3..4ce66cabe 100644 --- a/src/components/ConsoleOAuthFlow.tsx +++ b/src/components/ConsoleOAuthFlow.tsx @@ -16,7 +16,8 @@ import { getSettings_DEPRECATED, updateSettingsForSource } from '../utils/settin import { Select } from './CustomSelect/select.js' import { Spinner } from './Spinner.js' import TextInput from './TextInput.js' -import { fi } from 'zod/v4/locales' +import { ModelPicker } from './ModelPicker.js' +import { useSetAppState } from '../state/AppState.js' type Props = { onDone(): void @@ -28,6 +29,14 @@ type Props = { type OAuthStatus = | { state: 'idle' } // Initial state, waiting to select login method | { state: 'platform_setup' } // Show platform setup info (Bedrock/Vertex/Foundry) + | { + state: 'costrict_waiting' + url: string + } // CoStrict OAuth: browser opened, waiting for user to login + | { + state: 'costrict_model_select' + models: Array<{ id: string; name?: string }> + } // CoStrict: login done, select a model | { state: 'custom_platform' baseUrl: string @@ -73,6 +82,7 @@ export function ConsoleOAuthFlow({ mode = 'login', forceLoginMethod: forceLoginMethodProp, }: Props): React.ReactNode { + const setAppState = useSetAppState() const settings = getSettings_DEPRECATED() || {} const forceLoginMethod = forceLoginMethodProp ?? settings.forceLoginMethod const orgUUID = settings.forceLoginOrgUUID @@ -273,6 +283,8 @@ export function ConsoleOAuthFlow({ } // Reset modelType to anthropic when using OAuth login updateSettingsForSource('userSettings', { modelType: 'anthropic' } as any) + delete process.env.CLAUDE_CODE_USE_COSTRICT + setAppState(prev => ({ ...prev, mainLoopModel: null, mainLoopModelForSession: null })) setOAuthStatus({ state: 'success' }) void sendNotification( @@ -438,6 +450,7 @@ function OAuthStatusMessage({ setLoginWithClaudeAi, onDone, }: OAuthStatusMessageProps): React.ReactNode { + const setAppState = useSetAppState() switch (oauthStatus.state) { case 'idle': return ( @@ -453,6 +466,16 @@ function OAuthStatusMessage({