From 425ca6bb19eb653fce8a734d1a4a8e444fda26e1 Mon Sep 17 00:00:00 2001 From: Askhz <1361267452@qq.com> Date: Mon, 20 Apr 2026 21:08:25 +0800 Subject: [PATCH] feat: cleanup CLAUDE_CODE_USE_COSTRICT env var after provider switch - Remove env var in provider.ts unset/anthropic/openai/gemini/grok handlers - Remove env var after OAuth login and model save success in ConsoleOAuthFlow - Fix modelOptions.ts to only show CoStrict models when provider IS costrict - Remove unused hasCoStrictCredentialsSync import and getCoStrictLoginOption --- src/commands/provider.ts | 2 ++ src/components/ConsoleOAuthFlow.tsx | 8 ++++++ src/utils/model/modelOptions.ts | 44 ++++++++++++++--------------- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/commands/provider.ts b/src/commands/provider.ts index 19b19c021..8a3066e50 100644 --- a/src/commands/provider.ts +++ b/src/commands/provider.ts @@ -53,6 +53,7 @@ const call: LocalCommandCall = async (args, context) => { delete process.env.CLAUDE_CODE_USE_OPENAI delete process.env.CLAUDE_CODE_USE_GEMINI delete process.env.CLAUDE_CODE_USE_GROK + delete process.env.CLAUDE_CODE_USE_COSTRICT return { type: 'text', value: 'API provider cleared (will use environment variables).', @@ -131,6 +132,7 @@ const call: LocalCommandCall = async (args, context) => { delete process.env.CLAUDE_CODE_USE_OPENAI delete process.env.CLAUDE_CODE_USE_GEMINI delete process.env.CLAUDE_CODE_USE_GROK + delete process.env.CLAUDE_CODE_USE_COSTRICT // Update settings.json updateSettingsForSource('userSettings', { modelType: arg }) // Ensure settings.env gets applied to process.env diff --git a/src/components/ConsoleOAuthFlow.tsx b/src/components/ConsoleOAuthFlow.tsx index 512230293..73bb98ae8 100644 --- a/src/components/ConsoleOAuthFlow.tsx +++ b/src/components/ConsoleOAuthFlow.tsx @@ -283,6 +283,8 @@ export function ConsoleOAuthFlow({ } // Reset modelType to anthropic when using OAuth login updateSettingsForSource('userSettings', { modelType: 'anthropic' } as any) + // Clear costrict env var to prevent conflicts + delete process.env.CLAUDE_CODE_USE_COSTRICT setOAuthStatus({ state: 'success' }) void sendNotification( @@ -725,6 +727,8 @@ function OAuthStatusMessage({ }) } else { for (const [k, v] of Object.entries(env)) process.env[k] = v + // Clear costrict env var to prevent conflicts when using custom platform + delete process.env.CLAUDE_CODE_USE_COSTRICT setOAuthStatus({ state: 'success' }) void onDone() } @@ -945,6 +949,8 @@ function OAuthStatusMessage({ }) } else { for (const [k, v] of Object.entries(env)) process.env[k] = v + // Clear costrict env var to prevent conflicts when using OpenAI + delete process.env.CLAUDE_CODE_USE_COSTRICT setOAuthStatus({ state: 'success' }) void onDone() } @@ -1178,6 +1184,8 @@ function OAuthStatusMessage({ }) } else { for (const [k, v] of Object.entries(env)) process.env[k] = v + // Clear costrict env var to prevent conflicts when using Gemini + delete process.env.CLAUDE_CODE_USE_COSTRICT setOAuthStatus({ state: 'success' }) void onDone() } diff --git a/src/utils/model/modelOptions.ts b/src/utils/model/modelOptions.ts index 16798ef84..55a5c2fde 100644 --- a/src/utils/model/modelOptions.ts +++ b/src/utils/model/modelOptions.ts @@ -33,7 +33,6 @@ import { } from './model.js' import { has1mContext } from '../context.js' import { getGlobalConfig } from '../config.js' -import { hasCoStrictCredentialsSync } from '../../costrict/provider/credentials.js' // @[MODEL LAUNCH]: Update all the available and default model option strings below. @@ -380,10 +379,8 @@ function getModelOptionsBase(fastMode = false): ModelOption[] { } // CoStrict provider: 从缓存中动态展示 CoStrict 可用模型 - // 也覆盖其他 provider 但用户已有 CoStrict 凭证的场景(modelType 丢失/竞态) const isCoStrictProvider = getAPIProvider() === 'costrict' - const hasCoStrictCreds = hasCoStrictCredentialsSync() - if (isCoStrictProvider || hasCoStrictCreds) { + if (isCoStrictProvider) { // 延迟 require 避免循环依赖,且该模块只在 costrict provider 下加载 // eslint-disable-next-line @typescript-eslint/no-require-imports const { getCachedCoStrictModels } = @@ -414,21 +411,27 @@ function getModelOptionsBase(fastMode = false): ModelOption[] { ] } - // 用户没有 CoStrict 凭证,显示推荐登录选项 - return [getCoStrictLoginOption()] -} - -/** - * CoStrict 登录推荐选项 - * 当用户未登录 CoStrict 时显示,提示用户可以登录以使用 CoStrict 模型 - */ -function getCoStrictLoginOption(): ModelOption { - return { - value: 'costrict-login', - label: 'CoStrict (Recommended)', - description: - 'Sign in to CoStrict for more models and better pricing · Run /login and select CoStrict', + // PAYG 用户:展示标准模型选项(Sonnet, Opus, Haiku 等) + const paygOptions = [getDefaultOptionForUser(fastMode)] + const customSonnet = getCustomSonnetOption() + if (customSonnet) { + paygOptions.push(customSonnet) + } else { + paygOptions.push(getSonnet46Option()) } + const customOpus = getCustomOpusOption() + if (customOpus) { + paygOptions.push(customOpus) + } else { + paygOptions.push(getOpus46Option(fastMode)) + } + const customHaiku = getCustomHaikuOption() + if (customHaiku) { + paygOptions.push(customHaiku) + } else { + paygOptions.push(getHaikuOption()) + } + return paygOptions } // @[MODEL LAUNCH]: Add the new model ID to the appropriate family pattern below @@ -549,11 +552,6 @@ export function getModelOptions(fastMode = false): ModelOption[] { } else if (initialMainLoopModel !== null) { customModel = initialMainLoopModel } - // 忽略 costrict-login 伪模型值(用户点击了推荐登录选项但未完成登录) - if (customModel === 'costrict-login') { - return filterModelOptionsByAllowlist(options) - } - if (customModel === null || options.some(opt => opt.value === customModel)) { return filterModelOptionsByAllowlist(options) } else if (customModel === 'opusplan') {