Codex 供应商 API Key 重启或切换后互相覆盖 - CC Switch
Quick fix
开启 CC Switch 本地代理接管模式,或在 config.toml 使用 experimental_bearer_token 绕过 auth.json 同步缺陷。
Symptom
Section titled “Symptom”供应商 A 和 B 的 API Key 在重启/切换后互相覆盖。CC Switch 在数据库 (DB) 和 Codex 的 Live 配置文件(~/.codex/auth.json)之间维护 API Key 时存在双向同步缺陷。由于 auth.json 是全局单例,当切换供应商、重启应用或新建配置时,CC Switch 的 backfill/autosync 逻辑会错误地读取 auth.json 中的陈旧值或官方登录态,并反向覆盖 DB 中当前供应商的正确配置。此外,直接写文件路径在某些版本下会失效,导致 UI 显示与底层实际生效的 Key 不一致。该同步缺陷会导致多种变体问题,包括:第三方 Key 被官方 OAuth 登录态覆盖、新建空供应商被旧 Live 数据污染、切换官方供应商后遗留第三方 Key 导致 OAuth 失效,以及 UI 编辑页显示陈年旧值。此外,集群中还混入了一个独立的翻译器 Bug:在 wire_api=responses 下,流式 tool_call 的 call_id 会被后续空 delta 覆盖导致工具调用假死。
开启本地代理接管模式(推荐)。在 CC Switch UI 中开启“路由”开关,让请求走本地代理(如 127.0.0.1:15721)。此模式走独立的内存配置路径,可避免直接读写 auth.json 触发的覆盖 Bug。
使用 experimental_bearer_token 绕过。若必须使用直接写文件模式,在 Codex 配置中为自定义供应商硬编码 Token,并关闭 requires_openai_auth,从而绕过 auth.json 的全局单例限制。
~/.codex/config.toml [model_providers.custom]requires_openai_auth = falseexperimental_bearer_token = "YOUR_API_KEY"手动清理与重建。若已发生官方 OAuth 登录态丢失,需手动删除 ~/.codex/auth.json 中的 OPENAI_API_KEY 字段,并在终端重新运行 codex login 恢复官方登录。切换供应商时,务必先禁用路由再切换。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 7 个真实 issue
- #3646Bug: 编辑第三方 Codex provider 时 API Key 字段显示陈年旧值(来自 auth.json)
- #4671[Bug] Codex(wire_api=responses)工具调用假死:function_call 的 call_id 在 output_item.done/response.completed 中被清空
- #4849供应商 API Key 保存后不写 auth.json,重启时被反向覆盖
- #5691Codex: 启用自定义供应商时,Live 配置被回填到新供应商的 DB 记录,覆盖已保存的 API Key 和参数
- #5946供应商切换时第三方 Key 被官方登录态覆盖的问题
- #6236[macOS] v3.19.2 切换 Codex 供应商不写入 ~/.codex/config.toml 与 auth.json,配置不生效
- #6384Switching from routing-enabled provider to official provider leaves stale API key in auth.json
- 为什么在 UI 里保存了正确的 API Key,重启后又变回了旧的?
- 因为 CC Switch 重启时会读取 ~/.codex/auth.json 的全局值并反向同步到数据库。如果 auth.json 未被正确更新,旧值就会覆盖你在 UI 中保存的新值。建议开启代理接管模式来绕过此文件同步逻辑。
- 切换到官方供应商后,Codex 右下角显示 "OpenAI" 且无法使用 ChatGPT 账号怎么办?
- 这是因为 auth.json 中残留了第三方的 OPENAI_API_KEY,导致 Codex 优先使用 API Key 认证而忽略了 OAuth token。请手动清空 auth.json 中的 OPENAI_API_KEY 字段,然后重新运行 codex login。
- 使用第三方模型时,Codex 发起工具调用后假死且报 unsupported call: 是怎么回事?
- 这是一个独立的流式翻译器 Bug。在 wire_api=responses 下,CC Switch 累积逻辑会将后续空 delta 覆盖首个 chunk 的 call_id。目前无配置可绕过,建议改用官方直连或等待上游修复。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。