Skip to content

DSCodex v1.3.0 — Live Model List

Choose a tag to compare

@fish2lab fish2lab released this 23 Sep 05:46
· 3 commits to main since this release

DSCodex v1.3.0 — Live Model List

v1.2.2 及更早版本安装后,Codex 的模型选择器停在安装那一刻:OpenAI 之后上线的 GPT 模型不出现,已经下架的模型也一直留着。这一版改成实时读取 ChatGPT 的模型列表,并修好了 Codex 重写配置后卸载删不干净的问题。

Highlights

  • 🔄 模型选择器跟着 ChatGPT 实时更新。 旧版在 config.toml 里写入 model_catalog_json,Codex 对这个键只在启动时读一次,之后再也不去 ChatGPT 刷新。本机实测:旧快照停在 2026-09-10,其中 GPT-6 只有已下架的 gpt-6-astra;而上游对桌面端 0.155 下发的是新的 gpt-6-luna。现在 DSCodex 只写 openai_base_url,Codex 按自己的刷新规则(5 分钟 TTL,加上每次响应带回的 ETag)经路由器请求 /models。路由器带着客户端原有的 OAuth 请求头和 client_version 转发给 ChatGPT,插入 🐳 DeepSeek Flash 后返回,并保留上游 etag。上游不同版本号返回的列表不同,路由器照原样透传。
  • 🛟 ChatGPT 连不上时不丢 DeepSeek。 每次成功拉到的列表写进 ~/.codex/dscodex-models.json。遇到网络错误或 5xx 时返回这份列表;遇到 401 这类 4xx 时原样透传,让 Codex 自己刷新登录。
  • 🧹 卸载不再依赖标记注释。 Codex 桌面端重写 config.toml 时会丢掉 # DSCodex managed 注释,旧版 uninstall 因此认不出自己的行:命令报成功,配置里却留下指向已关闭端口的 openai_base_url 和已删除文件的 model_catalog_json,Codex 随之连不上。现在按值认领:带 43 位令牌的回环 openai_base_url,以及指向 dscodex-models.json 的 model_catalog_json,只可能是 DSCodex 写的。start 会把它们补回标记并原位重写,uninstall 会把它们删掉。用户自己写的 openai_base_url 和目录路径不受影响。
  • ⬆️ 自动迁移。 升级后第一次 start 会删掉旧的 model_catalog_json,令牌和端口保持不变,不需要重新 install。

升级

git pull --ff-only
npm install
node src/cli.mjs stop && node src/cli.mjs start
node src/cli.mjs doctor

随后完全退出(⌘Q)并重开 ChatGPT 桌面端。选择器会在 Codex 下一次刷新时换成 ChatGPT 当前的模型列表。

验收

  • 版本号在 package.json、src/constants.mjs、CITATION.cff、node src/cli.mjs --version 四处对齐 1.3.0。
  • 本机测试:138 项,132 通过,0 失败,6 项 Windows 原生测试在 macOS 上跳过。git diff --check 干净。
  • 端到端(隔离的 CODEX_HOME,真实 ChatGPT 登录,真实 chatgpt.com):
    • 按实际用户机器的状态构造旧配置(model_catalog_json 存在、标记注释丢失),start 后该键被删、标记补回、令牌沿用。doctor 其余五项 ok,catalog_present 在 Codex 第一次经路由器拉取列表后转为 ok(这个隔离目录之前没有备用列表)。
    • codex debug models 经路由器返回的列表与直连上游逐项一致,另加 DeepSeek Flash:桌面端 0.155.0 看到 gpt-6-luna,CLI 0.154.0 看不到(上游按版本下发)。npm run smoke:picker 通过。
    • 真实请求:gpt-6-luna 回复正确;deepseek/deepseek-flash 工具循环通过(WS 握手 426 后两次 HTTP 200)。
    • 测试中碰到一次 chatgpt.com fetch failed,路由器返回上一份 7 个模型的列表,Codex 未受影响。
    • stop + uninstall 后 config.toml 只剩用户自己的行。

未验收

  • npm run smoke:state 需要真实 ~/.codex 下已安装的 DSCodex,发布机当时处于卸载状态,未运行。
  • Windows 实机(桌面端 + 自启动)未在发布机上跑过,仅有 CI 覆盖。