Gemini CLI 修复会话恢复时工具响应被重复回放的 bug
Pcmhacker-piro · ghdev · 2026-09-25
google-gemini/gemini-cli PR #29490 修复了用 -r 恢复会话时工具响应被重复写入历史的问题:
- 根因:geminiChat.ts 把工具执行结果记为合成 user 消息,而 convertSessionToClientHistory 又为每条消息再生成一次合成响应 turn,导致同一 function call 对应多个 function response,违反 Gemini API 的“一一对应”要求,恢复后的 turn 直接被 API 拒绝。
- 雪上加霜:重复的合成 turn 会被 checkpoint 成新 user 消息,每次恢复都继续累积;且 updateMessagesFromHistory 会把整个 user turn 的 parts 同步进每个匹配的 tool call,导致并行工具调用的结果互相污染。
- 修复:sessionUtils.ts 预扫描已被记录消息回答的 tool call ID、跳过重复合成并去重;chatRecordingService.ts 按 callId 过滤 parts。附单元测试。
对做 agent 会话持久化/恢复的工程师是个有参考价值的案例。
「编程与Agent」频道最新
- Plurai 推出 Agent 仿真测试:让 agent 在数字孪生世界里先失败再修复 — PrajwalTomar_ · 2026-11-11
- PlayCanvas 引擎仓库突破第 10000 个 issue/PR 里程碑 — willeastcott · 2026-11-11
- AI 做的游戏太难:Claude 6 分钟通关,作者砍 40% 难度 — builderjaydub · 2026-11-11
- Anthropic 推出 Claude Tag,65% 产品代码由内部 AI 生成 — nikola_mr64990 · 2026-11-11
- 评测工作流核心:最大化专家每单位注意力的信息增益 — danshipper · 2026-11-11
- 开源 Node 把 ComfyUI 工作流变一键模型,内置 19 个工作流 — jefoce · 2026-11-11