diff --git a/src/components/ConsoleOAuthFlow.tsx b/src/components/ConsoleOAuthFlow.tsx index 73ba8d0a5..d66cc58f7 100644 --- a/src/components/ConsoleOAuthFlow.tsx +++ b/src/components/ConsoleOAuthFlow.tsx @@ -17,7 +17,6 @@ import { getSettings_DEPRECATED, updateSettingsForSource } from '../utils/settin import { Select } from './CustomSelect/select.js'; import { Spinner } from './Spinner.js'; import TextInput from './TextInput.js'; -import { ModelPicker } from './ModelPicker.js'; import { useSetAppState } from '../state/AppState.js'; type Props = { @@ -1260,25 +1259,43 @@ function OAuthStatusMessage({ case 'costrict_model_select': { const sortedModels = [...oauthStatus.models].sort((a, b) => a.id.localeCompare(b.id)); + // 直接使用已获取的模型列表渲染选项,避免通用 ModelPicker 因 getAPIProvider() 竞态 + // 导致显示标准 Anthropic 模型列表而非 CoStrict 动态模型 + const costrictOptions = sortedModels.map(m => ({ + value: m.id, + label: m.name ?? m.id, + description: + m.id === 'Auto' + ? `${Math.round(((m as any).creditDiscount ?? 0) * 100)}% discount` + : `${(m as any).creditConsumption ?? '?'}x credit`, + })); return ( - { - const selected = model ?? sortedModels[0]?.id ?? ''; - process.env.COSTRICT_MODEL = selected; - setAppState(prev => ({ ...prev, mainLoopModel: selected, mainLoopModelForSession: null })); - setOAuthStatus({ state: 'success' }); - void onDone(); - }} - onCancel={() => { - const selected = sortedModels[0]?.id ?? ''; - process.env.COSTRICT_MODEL = selected; - setAppState(prev => ({ ...prev, mainLoopModel: selected, mainLoopModelForSession: null })); - setOAuthStatus({ state: 'success' }); - void onDone(); - }} - /> + + + + Select model + + Login successful. Select a CoStrict model to use: + + +