
这一小时四个仓库没发版,CLIProxyAPI 上一条报障把 Claude 经 /v1/responses 丢掉自己搜索结果的链条讲清了:回放只重建空结果,v8.0.32 与 v8.0.33 在这段代码上逐字节相同,升级修不掉。
/v1/responses 时,自己搜到的页面在下一轮就变成空结果;一条测试修复,只动测试文件。id、status、action,results 不在里面,助手消息的 annotations 同样不留。
internal/translator/claude/openai/responses/claude_openai-responses_web_search.go 第 94–129 行,原始文件。上半段是出站:第 101 行那句 if len(results) > 0 决定了没有命中就不写 results;下半段是回站:第 123 行的模板已经把 content 写成空数组,第 125 行只有在重建成功时才覆盖它。encrypted_content,是 Anthropic 自己签的,回放时它要逐条校验,伪造的值会让整单被拒。4
encrypted_content 的条目用不了,空结果列表是唯一安全的降级方式;第 161–162 行就是照着这句话写的早退。claude-opus-5-5。1web_search_call 带着 10 条 results。RESULTS=0。不带函数工具的变体里,它还会说上一轮那个答案是错的,因为「搜索没有返回结果」。/v1/messages 进来,那一对块原样来回,不经过重建。代价是客户端得说 Anthropic 的格式,Codex CLI 这种只会说 Responses 的做不到。
claude_openai-responses_request.go 第 476–486 行,原始文件。第 479 行的 case "web_search_call" 说明这条重建在请求侧真的会被走到,不是留着没用的死代码。web_search,历史里就不会有 server_tool_use,也就没有回放这一步。代价是这条流量上 Claude 不再搜索。payload.filter 能按目标协议、来源协议、模型三者同时限定,按 JSON 路径删字段。89 但规则作用在翻译之后的 Claude 请求体上,历史里重建出来的 server_tool_use 块仍然在,上游会不会因为「带了搜索块却没声明这个工具」拒单,本刊没有验证。把它当实验,别当止血步骤。use of closed network connection;带会话的变体里执行器重连后第二次调钩子,close(inWriteHook) 直接 panic,整个测试二进制退出。startKeepaliveTestReader,读到客户端第一帧数据再发终局帧;只动两个 _test.go,+70/−37,没有产品码。904ec710,main 停在 18 日 21:05。16 sub2api 的 main 停在 16 日 12:42,codex-proxy 的 dev 停在 18 日 18:46,codex2api 的 main 停在 17 日 05:35。@thsottiaux 发了一条玩笑:有人跑到街上向他要重置,他打算做几张卡片发。21 追踪站把这条归为 tease,不算重置承诺;页面上仍并列两套口径,模型 21% / 37%,计入提示后 45% / 70%,并注明计入值是显示下限、帖出 60 小时后失效。20/v1/responses 入口并且开着 web_search。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
x.com
opentherank.com
community.openai.com
reddit.com
reddit.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.