
codex-proxy 今天 46 分钟把 7 张单并进 dev:省略 stream 的请求以后回 JSON、字符串 input 不再被丢,但四个仓今天都没有新版;另附 CLIProxyAPI 新报的一条 Claude→Gemini 工具结果图片缺陷与今天的处置顺序。
stream 的请求以后回 JSON,字符串输入不再被丢成空数组。| 仓库 | 当前版本 | 发布时间(北京) | 窗口内发版 |
|---|---|---|---|
| codex-proxy | v2.1.22 | 11-03 07:23 | 否 |
| CLIProxyAPI | v8.0.52 | 11-03 03:20 | 否 |
| sub2api | 0.2.19 | 10-28 18:16 | 否 |
| codex2api | v3.1.2 | 10-28 04:40 | 否 |
| PR | 并入时刻(北京) | 做了什么 |
|---|---|---|
| #889 | 16:19:44 | 删掉模型表里过期的引用 |
| #890 | 16:20:07 | 官方模型目录改成自动刷新 |
| #891 | 16:20:57 | 给带 client_version 的请求回 Codex 目录形状(5 文件 +317/−87) |
| #883 | 16:26:21 | 归一化字符串 input,翻转 stream 缺省(5 文件 +216/−4) |
| #882 | 16:42:47 | Antigravity 支持列表加 gemini-2.5-pro(3 文件 +23/−1) |
| #892 | 16:49:41 | 加 countTokens 与思考段对齐(11 文件 +743/−40) |
| #893 | 17:05:27 | 透传 store / metadata / truncation(9 文件 +392/−4) |
8e4e856,也就是 #893 的合并提交,比 main 多 9 笔提交。发行版 v2.1.22 对应的是 7ae8044,这 7 笔一笔都没进去。
codex-proxy dev 分支 src/routes/responses.ts 第 330–345 行:第 337 行 const clientWantsStream = body.stream === true;,第 341 行把它写进 proxyReq.isStreaming。6stream: true 是发给 Codex 上游的内部字段,恒为真;决定回给客户端什么格式的,只有第 337 行这一处。7codex.response.metadata 和 response.completed 两个事件名,说明上游其实已经跑完了。8 这张单在 #883 合并后 3 秒被关掉,状态 completed。input,写成字符串会被当成空数组。dev 补了归一化:字符串包成一条 user 消息,数组照旧走清洗。7
codex-proxy dev 分支 src/routes/responses.ts 第 187–202 行:第 193–195 行把字符串 input 包成 [{role:"user",content:[{type:"input_text",...}]}],第 196 行是对上游的 stream: true。7"input": "一段话",在 v2.1.22 上等于没发内容。要么改成标准的数组写法,要么等这一版发出来。store 只在是布尔值时采用,truncation 只收 auto 与 disabled,metadata 过一遍清洗,service_tier 没写就落到配置里的默认档。9
codex-proxy dev 分支 src/proxy/codex-api.ts 第 409–434 行:第 416–419 行把 store、truncation、safety_identifier、metadata 解构出来(所以不进 bodyFields),第 427–429 行注释写明 Codex 后端只接受 store: false,只有第三方 Responses 适配器才认 store: true。10service_tier 的取值从 fast / flex 扩到了 auto / default / fast / flex / priority,不认识的值原样透传。这条只在 PR 描述里,我没逐行核。POST /v1beta/models/{model}:countTokens,完全本地估算,不打上游,返回 { totalTokens }。它和 Anthropic 的 /v1/messages/count_tokens 共用新模块 src/utils/token-estimate.ts,这个文件在 v2.1.22 里是 404 —— 想确认这批改动有没有发版,比读 CHANGELOG 快。11thought: true 的 part,非流式同样。之前这些块在翻译里被抹平,客户端只看到最终答案。error.message 里是 "PERMISSION_DENIED",而那句「某模型不允许」落在 error.status。dev 已换回来。12 今天的日志按字段 grep 会读反,先按 status 找模型名。gemini-2.5-pro。13functionResponse 平级的兄弟 part 发出去。14 作者 xuliefeng,北京时间 16:38:53 开单,现在没有评论,也没有对应的补丁。
CLIProxyAPI v8.0.52 标签 internal/translator/gemini/claude/gemini_claude_request.go 第 185–198 行:第 190 行先把这个 functionResponse 推进 partItems,第 191–195 行再为每张图单独造一个 inline_data part 追加在后面 —— 两者是兄弟关系,不是嵌套。15
CLIProxyAPI v8.0.52 标签 internal/translator/antigravity/gemini/antigravity_gemini_request.go 第 914–932 行:第 921 行用 functionResponse.parts.-1 把图片塞进 functionResponse 内部,第 926–929 行的 collectFunctionResponsesWithSiblingInlineData 就是那个搬家函数。16gemini_claude_request_test.go 里有一条注释写着「图片必须是独立的 inline_data part,不能塞进 result」,断言直接取 contents.1.parts.1.inline_data。17 光改实现,这条测试会红。inlineData / mimeType)。这一点我没当成结论——protobuf 的 JSON 映射两种写法都收,真正要改的是兄弟与嵌套的差别。signal.active 是 false;今天唯一变新的是 newest_post_at,那是被一条标记为只看不承诺的闲聊帖顶上去的。19git ls-remote 看 dev 头是不是 8e4e856。"stream": true 或 false。依赖缺省值的,在 v2.1.22 上按 SSE 处理、在新版上按 JSON 处理,行为会随升级翻转。store: false,要这些字段生效只能走第三方 Responses 上游。[Unreleased] 写着「暂无已记录的变更」,而 #866 那条说明被归到 [v2.1.x] 2026-09-01 至 2026-09-07 段里了。20github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
codex-reset.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.