#7732·cc-switch

切换 Codex provider 后 CLI 模型列表不更新:app-server daemon 缓存旧 model catalog,需手动杀进程重启

Author: Dean-opCreated Sep 28, 2026Updated Sep 28, 2026
Labelsbug

Self Checks / 自检

CC Switch Version / 版本号

v3.20.4

Operating System / 操作系统

Windows

Related App / 涉及应用

Codex

Steps to Reproduce / 重现步骤

  1. 多个 Codex provider 各自配置了不同的模型列表(通过 model_catalog_json 指向相对路径 cc-switch-model-catalog.json,CC Switch 每次切换时覆写该文件)。
  2. 启动 Codex CLI(此时后台会拉起常驻的 codex.exe app-server --managed-daemon 进程)。
  3. 在 CC Switch 里切换到另一个 provider(例如从 provider A 切到 provider B)。
  4. 重新打开 Codex CLI 的 Select Model 菜单。

Expected Behavior / 期望行为

Select Model 菜单显示当前所选 provider(B)配置的模型列表。

Actual Behavior / 实际行为

Select Model 菜单仍然显示切换前 provider(A)的模型列表,重开 TUI 窗口也无效。只有彻底杀掉所有 codex 进程后重开,才会显示新 provider 的模型。

Additional Context / 补充信息

经排查,根因是 Codex 新架构的 app-server daemon 缓存了 model catalog,而 CC Switch 切换 provider 时只改写了磁盘上的 config.toml 与 cc-switch-model-catalog.json,没有通知/重启这个常驻 daemon,导致其内存中仍是旧 provider 的模型目录。

验证过程(Windows):

  • 切换 provider 后,磁盘配置是正确的:用全新进程执行 codex debug models 读到的正是新 provider 的模型列表。
  • 但正在运行的 codex.exe app-server --managed-daemon / app-server daemon pid-update-loop 两个后台进程从首次启动时就常驻,缓存旧目录不重读,所以 TUI(连到该 daemon)一直显示旧模型。
  • 执行 Get-Process codex | Stop-Process -Force 杀掉全部 codex 进程后重开,模型列表立即变为新 provider 的正确列表。

建议的修复方向

CC Switch 在切换 Codex provider 时,除了改写配置文件外,主动重启(或通知 reload)Codex 的 app-server daemon,例如切换后执行等价于 taskkill /F /IM codex.exe 的操作,或调用 daemon 的 reload 接口,使新配置对 CLI 立即生效。目前用户只能手动杀进程重启作为 workaround。