From f2f2ecf9d83224778e5fc38cfcc4a1edddf9f7d4 Mon Sep 17 00:00:00 2001
From: Taylor Mullen <ntaylormullen@google.com>
Date: Tue, 27 May 2025 23:40:25 -0700
Subject: feat: Allow cancellation of in-progress Gemini requests and
 pre-execution checks

- Implements cancellation for Gemini requests while they are actively being processed by the model.
- Extends cancellation support to the  logic within tools. This allows users to cancel operations during the phase where the system is determining if a tool execution requires user confirmation, which can include potentially long-running pre-flight checks or LLM-based corrections.
- Underlying LLM calls for edit corrections (within  and ) and next speaker checks can now also be cancelled.
- Previously, cancellation of the main request was not possible until text started streaming, and pre-execution checks were not cancellable.
- This change leverages the updated SDK's ability to accept an abort token and threads s throughout the request, tool execution, and pre-execution check lifecycle.

Fixes https://github.com/google-gemini/gemini-cli/issues/531
---
 packages/cli/src/gemini.tsx | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'packages/cli/src/gemini.tsx')

diff --git a/packages/cli/src/gemini.tsx b/packages/cli/src/gemini.tsx
index 11875593..9cfaef37 100644
--- a/packages/cli/src/gemini.tsx
+++ b/packages/cli/src/gemini.tsx
@@ -95,9 +95,11 @@ async function main() {
   const geminiClient = new GeminiClient(config);
   const chat = await geminiClient.startChat();
   try {
-    for await (const event of geminiClient.sendMessageStream(chat, [
-      { text: input },
-    ])) {
+    for await (const event of geminiClient.sendMessageStream(
+      chat,
+      [{ text: input }],
+      new AbortController().signal,
+    )) {
       if (event.type === 'content') {
         process.stdout.write(event.value);
       }
-- 
cgit v1.2.3

