Gemini CLI fixes session poisoning race that broke --resume after rapid double Ctrl-C
villahernandez-coder · ghdev · 2026-10-13
A P1 PR in google-gemini/gemini-cli fixes a session poisoning race condition:
- Trigger: pressing Ctrl-C twice rapidly during tool execution or streaming. The cancel call was fire-and-forget, so the second Ctrl-C quit before cancelled tool calls were logged, leaving dangling functionCall turns in session-.l without matching functionResponse turns — causing gemini --resume to fail with HTTP 400 Requests ending with a model turn are not supported.
- Fix approach:
- cancelOngoingRequest in useGeminiStream.ts and useAgentStream.ts now returns a Promise<void> that awaits abort and in-flight tool scheduling, bounded by a 1-second Promise.race() timeout;
- A new createCancelledToolCall synthesizes cancelled CompletedToolCalls with a [Operation Cancelled] filler functionResponse, written immediately on abort to keep valid model/user turn alternation;
- AppContainer.tsx stores the cancel promise and awaits it (bounded to 1 second) before exiting on rapid double Ctrl-C.
The pattern is a useful reference for anyone building session persistence in CLI coding agents.
More from coding & agent
- Claude Code Pushes Urgent Security Update Across All Installations — umeshonai · 2026-10-23
- Claude cut a 2.6-hour video export to 20 minutes — but only after being told to rebuild the server — byhewar · 2026-10-23
- 3 flight-booking rules my AI agent checks that I'd never do by hand — Efistoffeles · 2026-10-23
- OpenJet claims Qwen3.8-27B coding runs 1.9x faster than llama.cpp on one RTX 3090 — JeremyCMorgan · 2026-10-23
- Building an autonomous SEO agent in Hermes with three skills: programmatic pages, Keywords Everywhere, DataForSEO — EXM7777 · 2026-10-23
- Building a sports betting AI agent with onchain execution and human approval by default: architecture and lessons — Dry-Comfortable-2678 · 2026-10-23