尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CC Switch Codex 切换:第三方供应商改为仅配置写入与官方登录保留
CC Switch Codex 切换第三方供应商改为仅配置写入与官方登录保留【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switchCC Switch v3.20.1 将 Codex 第三方切换改为仅配置写入——密钥随 config.toml 的 provider 表走Codex 0.149 的凭据继承切断不再导致 401。本文基于 codex_config.rs 与 services 源码拆解设计不变量、行为对照、影响面与测试契约。问题还原——Codex 第三方切换为什么在 0.149 上 401升级 Codex CLI 到 0.149 后用户在 CC Switch 中点击第三方供应商Kimi、GLM、DeepSeek 等切换UI 显示切换成功但 Codex 启动后所有请求返回 401回滚到 0.148 立即正常。故障与 Codex 版本强绑定指向 0.149 内部对自定义 provider 的凭据查找路径做了调整上游相关变更为 openai/codex#39214。旧版 CC Switch 把 API 密钥写入 auth.json、config.toml 只写 base_url这一密钥与路由解耦的默认假设在 0.149 之后不再成立。对应 issue 编号为 #6744修复 PR 为 #6746。auth.json 混装官方 ChatGPT 登录与第三方 API 密钥共用同一文件第三方切换会覆盖官方凭据密钥位置依赖版本Codex 0.149 起自定义 provider 不再从 auth.json 继承 ambient 凭据密钥必须落在 config.toml 内成功判断失真旧路径只校验文件写入成功无法感知 Codex 加载时的实际拒绝下面从写入契约切入逐层拆解新实现。设计总览——新写入契约的 3 个不变量不变量一密钥随表走Key Travels With The Table第三方 API 密钥必须写入当前活跃的model_providers.表内部而非 auth.json这是 Codex 0.149 唯一会读取自定义 provider 凭据的位置。set_codex_experimental_bearer_token 通过 toml_edit 定位活跃表并写入遇到已声明 auth 的表则不覆盖// src-tauri/src/codex_config.rs (L3378-3388) if let Some(provider_table) doc .get_mut(model_providers) .and_then(|item| item.as_table_like_mut()) // …… 省略 2 行table.get_mut / as_table_like_mut 链 { if codex_provider_table_declares_auth(*provider_table) { return Ok(config_text.to_string()); } provider_table.insert(experimental_bearer_token, toml_edit::value(token)); }实现刻意使用 as_table_like_mut 而非 as_table_mut内联表若被误判会静默把密钥丢到顶层而 Codex 0.149 顶层没有该字段401 会持续存在。不变量二auth.json 只归属官方登录plan_codex_live_write 是每次 Codex 直连切换的唯一写入计划器官方卡片official category按登录材料写入 auth.json第三方卡片则把 write_full_auth 固定为 false并按保留开关决定是否删除 auth.json// src-tauri/src/codex_config.rs (L3910-3953, 节选) let remove_auth_file !preserve_official_login; // …… 省略 2 行prepare_codex_provider_live_config 调用 let live_config prepare_codex_provider_live_config(auth, text)?; // …… 省略 1 行align_codex_requires_openai_auth 调用 Ok(CodexLiveWritePlan { write_full_auth: false, // 第三方切换永不写 auth.json config_text: Some(live_config), remove_auth_file, })保留开关 OFF 时 auth.json 会被物理删除不是清空为{}避免残留登录成为下一次切换的回退源ON 时官方登录完整保留。不变量三先预检后提交写入层的所有拒绝必须发生在 current 指针移动 之前否则下一次切换会把旧配置回填到被拒绝卡片的 DB 行。preflight_codex_live_write 复用 plan 内的两道安全闸专门校验密钥无处安放与无密钥却允许回退两种危险形状// src-tauri/src/codex_config.rs (L3918-3933) if carried_key.is_some() codex_config_routes_third_party_without_token_slot(text) { return Err(AppError::localized(provider.codex.config.no_custom_provider, …)); } // …… 省略 1 行 if carried_key.is_none() codex_config_falls_back_to_official_auth_for_third_party(text) { return Err(AppError::localized(provider.codex.config.official_auth_fallback, …)); }行为对照——变更前后差异矩阵操作场景旧行为≤ v3.20.0新行为≥ v3.20.1用户感知第三方卡片带密钥切换密钥写入 auth.jsonconfig.toml 只写 base_url密钥写入 config.toml 的 provider 表experimental_bearer_tokenCodex ≥ 0.149 不再 401auth.json 保持官方登录保留开关 OFF 时切换覆盖 auth.json 为第三方密钥物理删除 auth.json官方登录被清除需重新登录才能回官方卡片无 model_providers 表但带密钥静默写入顶层Codex 忽略 → 401预检拒绝报 no_custom_provider切换被明确拒绝而非假成功卡片无密钥但 requires_openai_authtrue允许切换Codex 用 auth.json 登录访问第三方预检拒绝报 official_auth_fallback明确提示补密钥或移除回退指令requires_openai_auth 字段不维护每次直连切换按保留开关重打Codex 登录界面与磁盘状态一致官方卡片official category切换写 auth.json 登录材料行为不变官方卡片仍写 auth.json无变化边界条件Codex 0.48 不支持 experimental_bearer_token 字段仅配置写入模式对其不生效此类用户需保留 auth.json 密钥。旧形状顶层 experimental_bearer_token、遗留 openai_base_url 重定向表在 normalize_codex_legacy_openai_reroute 中被自动重写为自定义表无需用户手动迁移。对不同用户的影响普通用户升级后无需手动操作下一次切换自动写新位置migrate_stale_reserved_provider_tables 与 normalize_codex_legacy_openai_reroute 负责旧形状自愈保留官方登录开关含义收窄现在仅决定auth.json 是否保留ON 保留官方 ChatGPT 登录OFF 删除文件第三方密钥不再出现在 auth.json审计或备份 auth.json 时不再泄露第三方 token旧卡片无需重新导入预设与卡片本身不变只是切换时的写入路径变了Agent / 自动化用户依赖 auth.json 读取第三方密钥的脚本会失效Codex ≥ 0.149 的自动化流程应从 config.toml 的 model_providers. .experimental_bearer_token 读取CI 环境的 Codex 版本锁定0.149 才能安全使用仅配置写入0.48–0.148 之间仍可写 auth.json 但新代码不再走该路径代理接管takeover场景不受影响apply_codex_official_proxy_route 与 neutralize_codex_official_auth_fallback_for_proxy_oauth 保持原有行为代理注入 token 走独立通道Release 维护者新增两个拒绝错误键需要在 zh/en/ja 四个 locale 中补文案provider.codex.config.no_custom_provider 与 provider.codex.config.official_auth_fallback预检必须在 current 移动前调用任何新写入路径都应通过 preflight_codex_live_write 走同一拒绝逻辑不要旁路数据库 schema 未变v3.20.1 无迁移升级说明需提示已被覆盖的 auth.json 不会自动恢复A Codex third-party config must define a custom model_providers entry to carry the API key (Codex ignores a top-level experimental_bearer_token)Codex 第三方配置必须定义一个自定义 model_providers 表来承载 API 密钥Codex 会忽略顶层的 experimental_bearer_token配置与调试速查键 / 文件类型默认说明~/.codex/auth.json文件存在官方 ChatGPT 登录凭据第三方切换不再写入~/.codex/config.tomlTOML存在Codex 主配置含 model_providers 表model_providers. .experimental_bearer_tokenstring无第三方 API 密钥Codex ≥ 0.48 生效model_providers. .requires_openai_authboolfalse是否允许回退到 auth.json 登录直连切换时按保留开关重打设置项 preserve_official_loginbooloff第三方切换时是否保留 auth.json 官方登录config.toml 顶层 experimental_bearer_tokenstring无内置 provider如 openai路由时的兜底位自定义表存在时优先进表调试建议切换被拒绝时按错误键定位no_custom_provider 说明卡片缺 model_providers 表official_auth_fallback 说明无密钥但配置了回退指令两者都不该通过预检磁盘验证cat ~/.codex/config.toml确认密钥进入model_providers.且 auth.json 未含第三方 tokenCodex 端codex --version需 ≥ 0.149 才能正确解析新形状回归保障——测试如何锁住行为契约switch_from_managed_codex_official_to_unbound_clears_live_without_backfilling_token从官方托管切到无密钥第三方时不得把旧 token 回填进 auth.jsonswitch_to_managed_codex_official_with_unresolvable_account_keeps_current_unchanged目标账号不可解析时 current 指针不得移动deleted_codex_account_can_rebind_or_switch_in_every_takeover_state删除账号后任意接管状态下都能重新绑定或切换codexProviderPresets.test.ts预设快照保证 requires_openai_auth 形状在安全闸下被拒绝tests/provider_commands.rsTauri 命令层的切换契约与错误键序列化延伸阅读codex_config.rsCodex 配置读写主模块含写入计划、预检与安全闸services/provider/mod.rs供应商切换服务与 current 指针提交services/proxy.rs代理接管投影与官方登录保留的交互【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

n8n 连接 ETL 工具实战指南:3 条数据管道方案 + 避坑清单与选型速查

n8n 连接 ETL 工具实战指南:3 条数据管道方案 + 避坑清单与选型速查

n8n 连接 ETL 工具实战指南:3 条数据管道方案 避坑清单与选型速查 【免费下载链接】n8n-workflows all of the workflows of n8n i could find (also from the site itself) 项目地址: https://gitcode.com/GitHub_Trending/n8nworkflo/n8n-workflows 如果你…

📅 2026/9/20 10:14:36
从ChatBI到Data Agent:BI技术路线演变与主流厂商横评

从ChatBI到Data Agent:BI技术路线演变与主流厂商横评

1. 为什么2026年还要聊BI:ChatBI 的喧闹与冷静1.1 从“看报表”到“问数据”:BI 这几年到底变了什么我进入BI这个圈子差不多有十年了,从传统报表工具一路用到现代自助分析平台,再到前两年铺天盖地的 ChatBI(对话式BI&a…

📅 2026/9/20 10:09:36
2026年AI设计工具横评:生图与视频创作七大方向选型指南

2026年AI设计工具横评:生图与视频创作七大方向选型指南

2026 年刚开年,我身边做设计的朋友几乎都在干同一件事:把过去一年攒下的 AI 工具订阅清单翻出来,一个个重新评估。原因很简单,去年还能靠"能出图"就让人眼前一亮的工具,今年已经卷到拼工作流、拼可控性、拼出…

📅 2026/9/20 10:09:36
MORE NEWS

更多资讯

📰

BrewUI 使用指南:给 macOS 的 Homebrew 配一个好用的图形界面

1. 为什么我给 Homebrew 配了一个图形界面用 macOS 开发的同学,几乎绕不开 Homebrew 这个包管理器。日常装个 nginx、redis、ffmpeg,一条brew install xxx就搞定,数据基本都沉淀在/opt/homebrew(Apple Silicon)或者/us…

📰

Codex CLI 接入智谱 GLM-5.1 实战:配置、避坑与性能优化

1. 为什么要在 Codex CLI 里接智谱 GLM-5.1Codex CLI 是 OpenAI 推出的一个终端里的编码助手,它本身默认走的是 OpenAI 自家的模型接口。但实际用下来,很多人会遇到两个现实问题:一是网络访问不稳定,二是调用成本不低。智谱 GLM-5…

📰

DeepFM在CTR预估中的PyTorch实现与工程实践

简介:面向推荐系统算法工程师和CTR入门学习者,这份PyTorch实现DeepFM的代码包完整覆盖了数据预处理、FM与DNN双分支构建、模型训练和效果评估等关键环节,可帮助读者理解特征二阶交互与高阶非线性组合在点击率预测中的联合建模方式。压缩包共3…

📰

实测Codex安全盲区:AI编程助手会默认生成漏洞代码吗?

如果你和我一样,已经把 Codex 当成日常写代码的搭子,那你大概率也经历过这种场景:需求丢下去,代码哗哗出来,看起来逻辑完整、注释齐全,你甚至懒得逐行读就直接提交了。我前段时间专门做了一轮 Codex 安全盲…

📰

iPhone与Windows局域网无线传输:SMB共享方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OpenClaw 多 Agent 编译 LLM Wiki,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬