
这一小时里 CLIProxyAPI 的 gemini→Claude 流会在正文之后多开一个空 thinking 块,Claude Code 因此拿到空 result;另附工具失败语义丢失、sub2api 桥接请求身份未收口,以及 codex-proxy 那个预发布版真正改动了什么。
claude -p --output-format json 拿回来的 result 是空字符串,stop_reason 却是 end_turn,会话 .jsonl 里最后一条 assistant 消息明明有完整正文。五次复现,五次都空。[text, thinking("")]——正文在前、空 thinking 在后,正好违反 Anthropic 对块顺序的要求。(CLIProxyAPI #6835)result 自然就是空字符串。content_block_start,看第二个块的 index 是不是 1、type 是不是 thinking、内容是不是空。同样的请求改成 stream: false,块的顺序是对的;同款模型走 antigravity 路(模型名带 -high 那种),也只有一个 text 块。internal/translator/gemini/claude/gemini_claude_response.go 第 330–336 行:只有「当前正在 thinking 块里」才追加签名,其它情况一律调 appendCarrierThinkingBlock 开新块——它没判断「当前正在 text 块里」。(源码)
TestConvertGeminiResponseToClaudeStream_Issue6409_SplitTrailingSignature 仍在断言尾块存在——两条路现在是故意不一致的。has_unresolved_findings: true)。tool_result 带 is_error: true 时,转成 Gemini 请求会把失败标记整个丢掉,内容写成 functionResponse.response.result——上游读到的是「工具正常返回」,不是「工具失败了」。(#6838)gemini_claude_request.go 第 176–184 行的 tool_result 分支只读 content,写出口只有 functionResponse.response.result 一个,全文没有读 is_error。(源码)
is_error 为真时写 functionResponse.response.error,否则照旧写 result。作者自述 32 条回归用例通过,也说清了仓库的 translator-path-guard 工作流会对这类改动报红,属预期。is_error,只有 interactions 与 claude→responses 两个翻译器在读写它,gemini→claude 这条一次都没有。也就是说,走 Gemini 上来的工具结果,失败语义从来就没过去过。response.incomplete 的截断原因翻成 Anthropic 的 stop_reason」。end_turn,客户端以为模型自己说完了。现在新增终局分支,max_output_tokens 映射成 max_tokens,content_filter 映射成 refusal。
src/routes/shared/stream-error-response.ts,v2.1.17、v2.1.18、v2.1.19 与这个 beta 四个版本逐字节相同,c.status(status) 从至少 v2.1.17 起就在;「WebSocket 断连后永久 502」这条,在本版的八个改动文件里找不到任何对应实现。originator 删掉之后,后面的统一收口直接跳过了,身份根本没被改写过。buildUpstreamRequest 在桥接分支里 Del("originator"),非桥接分支才 Set;函数末尾调用 enforceCodexIdentityHeadersWithUA;而这个函数的第一句就是 originator == "" 直接 return。三步连起来,桥接请求带着客户端原始 User-Agent 出站,没有 originator、没有 version。/v1/messages 这条路不受影响,因为 ForwardAsAnthropic 在构建之后又补了一次身份。会被请求体识别成桥接的 /v1/responses 与 /v1/chat/completions 没有这一步——它们靠 prompt_cache_key 的前缀(anthropic-metadata- / anthropic-cache- / anthropic-digest-)或 todo-guard 标记被认出来,然后就走上了缺身份的那条。
/v1/messages 不再发 OpenAI-Beta: responses=experimental;账号级自定义 User-Agent 现在对这些请求同样生效。follow-redirects 升到 1.16.1。后者上一期还挂在 open,现在已经进 main,等下一个版本带出。composite 平台在 resolveCcSwitchImportConfig 里落进 default 分支,生成 app=claude;前端也只有 antigravity 会弹客户端选择框。修复单 #8272 已在 09:26Z 跟上,加出 codex 与 gemini 两个选项。要注意的是它的 codex 分支沿用常量 gpt-5.5——这正是 10-16 那期报过、已在 2026-10-14 从 ChatGPT 登录的 Codex 退役的名字,导入后按账号类型可能直接选不到。This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.