
四个仓今天零发版,但 codex-proxy 在 63 秒里把模型目录从「静态兜底」改成了「只服实时目录」——附两处今天就碰得到的不一致、一台实例该怎么自查,以及三张还开着的跟进单。
/v1/models 只列实时探测到的模型,静态兜底表不再补位。这批改动全部停在 dev,今天不会有任何自动升级把它推到你机器上。| 仓库 | 当前版本 | 发布时间(北京) | 窗口内发版 |
|---|---|---|---|
| codex-proxy | v2.1.22 | 11-03 07:23 | 否 |
| CLIProxyAPI | v8.0.52 | 11-03 03:20 | 否 |
| sub2api | v0.2.19 | 10-28 18:16 | 否 |
| codex2api | v3.1.2 | 10-28 04:40 | 否 |
#885 是主刀的那一笔(15:45:14):/v1/models、/v1/models/catalog、/v1/models/catalog/codex 只服务实时目录,不再追加 KNOWN_OFFICIAL_MODELS;/v1/models/:modelId/info 改成只查实时目录,查不到直接 4045。#887(15:45:30)加进第三个模型源:从 openai/codex 同步官方目录快照,落在新文件 src/models/official-model-catalog.ts,只在前两个源都给不出模型时才用6。src/routes/models.ts。注释写着 live catalog only、no KNOWN_OFFICIAL_MODELS fallback,取数就是一行过滤10。
dev 分支 src/routes/models.ts 第 139–147 行:注释写明只服实时目录、不回落静态表,getLiveCatalog() 用 liveIds 过滤整个目录。这四个路由(/v1/models、/v1/models/catalog、/v1/models/catalog/codex、去掉静态项的 Gemini 侧)共享这一个函数。10/v1beta/models 同理11。client_version 的请求,返回形状对不上#891(16:13 提交,仍开着)自述的现象值得单独拎出来:Codex CLI 的 GET /v1/models?client_version= 只解析 {models:[ModelInfo]},而现在返回的是 OpenAI 的 {object:"list",data:[...]}。curl -s "http://127.0.0.1:<端口>/v1/models?client_version=<你的 CLI 版本>" -H "Authorization: Bearer <客户端密钥>"。返回里第一层是 models 还是 object + data,一眼能分。#885 之后它只在「实时目录里没有这个 id」时才起作用——恰好是新模型最容易命中的情形。#891 里那句话是把它改回 272000/872000/默认 low。getModelInfo() 仍然是「先查实时目录,查不到再查静态表」14。
dev 分支 src/models/model-store.ts 第 624–637 行:getModelInfo() 找不到实时目录项时仍回退 KNOWN_OFFICIAL_MODELS.get(key),getModelCatalog() 也把 static 补在 catalog 后面。列表路由已不再用它,但翻译层还在用。14#887 的官方快照有两个入口:启动时的 seed,和模型拉取失败时的兜底。data/models-cache.yaml 不存在时才执行15。兜底那条更窄:tryOfficialCatalogFallback() 第一行就判 officialSyncAttempted,跑过一次就再也不会跑第二次16。
dev 分支 src/models/model-fetcher.ts 第 126–142 行:tryOfficialCatalogFallback() 开头的 if (!this.officialSync || this.officialSyncAttempted) return; 之后立刻把标志置真。这个标志是进程级的,POST /admin/refresh-models 也不会把它清零。16loadCached() 没有 TTL17,结论就很硬:只要你有过至少一个能报模型的账号,官方快照就停在那一刻,新模型上线也不会自己进来。#890 是修这个的(16:06 提交,open)。改法给快照加 maxAgeMs(默认 6 小时)、isStale() / getFreshSnapshot() / refreshIfStale(),刷新失败保留旧快照并冷却 60 秒,并发共享同一份 in-flight;官方快照用一个伪 plan 代号,被 rebuildPlanIndex() 跳过以免账号生命周期误判18。data/official-model-catalog.json 与 data/models-cache.yaml,再起。缓存在,#887 那条路就永远走不到。#889(16:01,open):pricing、Ollama 桥、设置里还引用着 gpt-5、gpt-5.1、gpt-5.2、gpt-5.3-codex、gpt-5.4 系列这批已退役的 slug。命中的结果是估算静默返回 0,而不是报错19。#7226(14:52 开,open):xAI 用 response.done 收尾时被当成流断开。v8.0.52 里没等到 response.completed / response.incomplete 就直接回 408,文案是 stream disconnected before response.completed or response.incomplete20。response.done 只被当作 output_item 的收集终局,没有提升成完成事件,于是下游丢了 message_stop 和用量。PR 的改法是按 response.status 分类处理21。#8495(15:36 开,open,改一行):ccswitchImport.ts 里导出的默认模型从 gpt-5.5 换成 gpt-5.6-sol22。原文在 v0.2.19 是第 3 行的常量23。#8496(15:37)要的 Gemini Interactions API(/v1beta/interactions)在 v0.2.19 里没有对应路由,Antigravity 仍走 v1internal:streamGenerateContent24。12ccb9cd0、main 停在 11-0130。client_version 参数打一次,看第一层是 models 还是 object+data;是后者就是 #891 那条,别去改配置。POST /admin/refresh-models 带 Authorization: Bearer <proxy_api_key>。还是空,说明这台没有任何后端在报模型——静态表已经不兜底了。data/official-model-catalog.json 与 data/models-cache.yaml 两个都删。#7226,别花时间查网络。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.anthropic.com
status.cloud.google.com
codex-reset.com
community.openai.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.