docs/fix_claude_code_tool_use.md
在使用 Claude Code CLI 并通过 Antigravity-Manager 代理时,经常会出现以下报错:
messages.X.content.0.text.text: Field required
根本原因:
Claude Code 在进行工具调用(Tool Use)时,发送或接收的消息块中可能包含空的 text 字段(例如 {"text": ""} 或 {"text": " "})。
parts 中包含空的文本块。trim() 和有效性校验,就会导致上游 API 拒绝请求。本次修复主要涉及 src-tauri/src/proxy/mappers/claude/ 目录下的两个核心文件:
修改说明:在将 Claude 消息转换为 Google 格式时,对所有 ContentBlock::Text 和降级的思维块(Thinking)进行严格过滤。
build_contents 函数):
(no content) 占位符。!text.trim().is_empty(),确保所有发送给 Google 的文本块都包含实际内容。text 块。trim() 处理。修改说明:优化流式响应转换逻辑,防止向客户端发送诱发状态机异常的空块。
emit_finish 函数):
text 块。grounding_text.trim() 确实非空时,才允许发送该内容块分片。process_text 处理器):
trailing_signature(签名暂存)场景下的逻辑鲁棒性,确保不会产生无意义的“幽灵”文本块。// 修复前
if text != "(no content)" { ... }
// 修复后
if text != "(no content)" && !text.trim().is_empty() { ... }
// 修复前
if !grounding_text.is_empty() { ... }
// 修复后
let trimmed_grounding = grounding_text.trim();
if !trimmed_grounding.is_empty() { ... }
messages.X.text: Field required 的 HTTP 400 警告。claude fix bug),确认在 tool_use 返回后,Claude Code 能正常发送下一轮请求。npm run tauri dev
文档由 Antigravity AI 助手生成,用于记录 fix/claude-code-tool-use-empty-text 分支的变更细节。