mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-27 00:04:32 +00:00
生产环境真实报错:客户端走 /v1/messages(Anthropic Messages 格式)入站, OAuth 账号转发上游 OpenAI /v1/responses 时(PreserveToolCallIDs=true), 客户端历史中出现超长工具 ID(如嵌套代理拼接产生的 78 字符 srvtoolu_ ID) 会被原样透传,上游 400 拒绝: "Invalid 'input[614].call_id': string too long. Expected a string with maximum length 64, but got a string with length 78 instead." #4612 为非 preserve 路径增加了 call_id 归一化与压缩,但有意将 PreserveToolCallIDs=true 的路径排除在外。本次在 preserve 路径补上长度护栏: - len(id) <= 64 时仍原样透传,保持 #4612 承诺的"保持原样"语义; - 超过 64 时复用已有的 compactCodexCallID 做确定性 SHA-256 压缩。 由于压缩是确定性的,同一逻辑 ID 在 function_call 与 function_call_output 两侧结果一致,tool_use/tool_result 配对不破坏;OAuth 路径 store=false 每轮全量重放历史,跨轮结果亦一致。改写点 fixCallIDPrefix 是 filterCodexInputWithOptions 内所有 call_id 修正的单一入口(含 item_reference 的 call_* 引用),同时覆盖 Messages 桥接(openai_gateway_messages.go)与 /v1/responses 透传(openai_gateway_forward.go)两条 preserve 路径。 Co-authored-by: Cursor <cursoragent@cursor.com>