Codex 重装后三大故障修复全记录:CC Switch 报错、走官方通道、聊天记录丢失
Codex 重装后三大故障修复全记录:CC Switch 报错、走官方通道、聊天记录丢失
环境:Windows 11 · Node v24.19.0 · npm 全局 Codex CLI 0.160.0 · Codex Desktop(ChatGPT 桌面版)26.928 · CC Switch(供应商切换工具)
一次「Codex 包名有问题,删了重装」的操作,引发了三个看似独立、实则环环相扣的故障。本文完整记录排查与修复过程,供遇到同类问题的朋友参考。
故障现象
重装 Codex 之后,出现了三个问题:
- CC Switch 设置页报错:Codex 卡片显示「已安装 · 无法运行」,错误信息为
requireStack: [] } Node.js v24.19.0,底部提示「请检查运行环境」。 - Codex 启动走的还是官方通道:打开 Codex 桌面版直接进 ChatGPT 登录页;CLI 调用则返回
401 Unauthorized ... url: https://api.openai.com/v1/responses,完全没有走 CC Switch 配置的 MiMo 中转。 - 历史聊天记录消失:旧的会话记录在桌面版里一条都看不到。
三个问题各有一个根因,下面逐个拆解。
问题一:CC Switch 报「无法运行」
根因
CC Switch 检测 Codex 是否可用的方式,是执行 npm 全局目录下的 codex.cmd。而重装过程中,npm 全局目录里 @openai/codex 的包体被删空了,只留下了启动壳:
%APPDATA%\npm\node_modules\@openai\ ← 目录还在,里面 0 个文件%APPDATA%\npm\codex.cmd ← 启动壳还在,指向不存在的包执行 codex.cmd 时报:
Error: Cannot find module '...\node_modules\@openai\codex\bin\codex.js' code: 'MODULE_NOT_FOUND', requireStack: []Node.js v24.19.0requireStack: [] 就是截图里那行报错的来源——不是 Node 环境坏了,是包没了。
修复
npm install -g @openai/codex⚠️ 关键坑:Codex 的 npm 包采用「主包 + 平台二进制」分离结构,主包 @openai/codex 很小,真正的可执行文件在 optionalDependencies 里(如 @openai/codex-win32-x64)。国内直连官方 registry 经常在下载平台包时超时,结果是主包装上了但运行仍报错:
Error: Missing optional dependency @openai/codex-win32-x64.Reinstall Codex: npm install -g @openai/codex@latest解决办法是换国内镜像单独补装平台包:
npm install -g "@openai/codex-win32-x64@npm:@openai/codex@0.160.0-win32-x64" --registry=https://registry.npmmirror.com验证:
codex --version # codex-cli 0.160.0codex doctor # 应全部通过问题二:Codex 走回官方通道(401)
根因
CC Switch 的工作原理是把供应商配置写进 ~/.codex/config.toml。正常应写入:
model_provider = "custom"
[model_providers.custom]name = "xiaomi_mimo"base_url = "https://api.xiaomimimo.com/v1"wire_api = "responses"requires_openai_auth = true但实际打开 config.toml 发现:model_provider 和整个 [model_providers.custom] 表丢失了,取而代之的是一堆无效的顶层键(base_url、wire_api、experimental_bearer_token 写在了顶层——TOML 里这些键 Codex 根本不认,启动时会警告 unrecognized configuration settings)。
没有 model_provider 指示,Codex 就用默认的 OpenAI 官方 provider,于是打到 api.openai.com 返回 401;桌面版则因为没有有效凭证直接弹登录页。
为什么会被写坏? 时间线是:
- 今早 Codex 桌面版启动时重写了
config.toml(9<35>35>); - CC Switch 把这份已经不含 provider 段的 config 回读成了自己的供应商模板(双向同步的副作用);
- 之后每次切换供应商,CC Switch 用坏模板写回
config.toml——越修越坏,切换一次覆盖一次。
证据:CC Switch 数据库(~/.cc-switch/cc-switch.db 的 providers 表)里存的模板已经是坏的,而当天早些时候的数据库备份(9<29>29>)里配置还是完整的。
修复(三处一起改)
改任何一处之前,先备份 CC Switch 数据库:
Copy-Item ~\.cc-switch\cc-switch.db ~\.cc-switch\backups\db_backup_manual.db- 修模板(根因):用 SQLite 打开
~/.cc-switch/cc-switch.db,找到providers表中当前 Codex 供应商的settings_configJSON 字段,删掉无效顶层键,补回model_provider = "custom"和[model_providers.custom]表。 - 修
~/.codex/config.toml:同样处理。 - 重建
~/.codex/auth.json(如果也丢了):
{ "OPENAI_API_KEY": "你的中转 Key" }教训:只修 config.toml 不修数据库模板是没用的,下次切换就会被覆盖回去。必须修源头。
问题三:恢复的聊天记录不显示
背景
Codex 的会话记录是 JSONL 文件,按日期存放在:
~/.codex/sessions/YYYY/MM/DD/rollout-<时间>-<uuid>.jsonl把旧的 2026/ 文件夹整个复制回 ~/.codex/sessions/ 后,文件明明在,桌面版侧边栏却一条都不显示。
根因
桌面版的会话列表不是实时扫描文件夹的,而是读本地索引库 ~/.codex/state_5.sqlite 的 threads 表。首次启动时有一个 backfill 扫描流程负责把 rollout 文件导入这张表,扫完后在 backfill_state 表里记:
(1, 'complete', NULL, <时间戳>, <时间戳>)新装的 Codex 在 9<09>09> 第一次启动时扫过一次——当时 sessions 目录还是空的(聊天记录是之后才复制进去的),扫描结果标记为 complete,之后永远不会再扫。
修复
- 完全退出 ChatGPT 桌面版(托盘也要退出,避免写库冲突);
- 备份后清空
backfill_state表,强制下次启动重扫:
import sqlite3, shutilshutil.copy2(r"C:\Users\<你>\.codex\state_5.sqlite", r"C:\Users\<你>\.codex\state_5.sqlite.bak")con = sqlite3.connect(r"C:\Users\<你>\.codex\state_5.sqlite")con.execute("DELETE FROM backfill_state")con.commit()- 重新打开桌面版,启动时自动重扫,历史记录全部回来了。
修复顺序建议
如果你同时遇到这三个问题,按这个顺序修,避免互相干扰:
① npm 包(codex --version 能跑) ↓② CC Switch 数据库模板 + config.toml + auth.json(走通中转) ↓③ 退出桌面版 → 重置 backfill_state → 重启(恢复列表)验证清单
-
codex --version输出版本号 -
codex doctor无致命错误 - CC Switch 设置页 Codex 卡片无警告
-
codex exec "你好"走中转正常回复(不应出现api.openai.com的 401) - 桌面版侧边栏能看到历史会话
经验教训
requireStack: []≠ 环境坏了:十有八九是包文件缺失,先ls看包目录是不是空的。- npm 装 Codex 国内务必配镜像:平台二进制包体积大,官方 registry 容易半途超时,留下「装了一半」的残局。
- 双向同步类工具有「污染源头」风险:CC Switch 会把 app 重写过的 config 回读成模板,坏一次就循环放大。修的时候一定要连它的数据库模板一起修。
- 文件在 ≠ 能显示:现代客户端基本都有本地索引库,恢复数据文件后要找到对应的「重扫/重建索引」开关。
- 改数据库前先备份:本文所有数据库操作都留了备份,出问题可随时回滚。
本文基于一次真实排障记录整理,涉及的具体厂商(CC Switch / MiMo 中转)仅为实例,同类「供应商切换工具 + Codex」组合的排查思路通用。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!




