Gemini CLI 修复快速 Ctrl+C 导致会话污染、resume 报 400 的竞态
villahernandez-coder · ghdev · 2026-10-13
google-gemini/gemini-cli 的一个 P1 修复 PR 解决了会话污染(session poisoning)竞态问题:
- 触发条件:在工具执行或流式输出期间快速连按两次 Ctrl+C。原先取消请求是未 await 的分离操作,第二次 Ctrl+C 会在取消的工具调用写入会话日志前直接退出,导致 session-.l 中留下没有配对 functionResponse 的悬空 functionCall 轮次,gemini --resume 时报 HTTP 400 Requests ending with a model turn are not supported。
- 修复方式:
- 将 useGeminiStream.ts 与 useAgentStream.ts 中的 cancelOngoingRequest 改为返回 Promise<void>,await abort 与在途工具调度,并以 1 秒 Promise.race() 限时;
- 新增 createCancelledToolCall,abort 时立即合成带 [Operation Cancelled] 占位 functionResponse 的已完成工具调用并写入会话日志,保证 Model (functionCall) -> User (functionResponse) 的合法交替;
- 在 AppContainer.tsx 中用 cancelPromiseRef 保存取消 Promise,退出前 await(同样限时 1 秒)。
修复思路对其他构建 CLI agent 会话持久化的开发者有参考价值。
「编程与Agent」频道最新
- Decisions API 正式 GA,agent 反馈循环全自动剪辑云视频 — dkundel · 2026-10-23
- 50+ 免费 AI Agent 学习资源合集:视频与仓库一站打包 — ifioknkem · 2026-10-23
- 自封「全网最佳」的免费 AI Agent 资源库引围观 — ifioknkem · 2026-10-23
- Vercel 推出免注册部署:拖拽文件到首页即得线上 URL — steren · 2026-10-23
- 5 个 Claude Code 会话经 MCP 互发邮件,组队攻破多品牌网络摄像头 — doodlestein · 2026-10-23
- Vercel 上线 vercel deploy --temporary,可临时部署后自动清理 — cramforce · 2026-10-23