Skip to content

fix(cli): prevent Escape from clearing input buffer (#17083)#26339

Merged
cocosheng-g merged 1 commit intomainfrom
fix/17083-escape-clear-buffer
May 1, 2026
Merged

fix(cli): prevent Escape from clearing input buffer (#17083)#26339
cocosheng-g merged 1 commit intomainfrom
fix/17083-escape-clear-buffer

Conversation

@cocosheng-g
Copy link
Copy Markdown
Contributor

@cocosheng-g cocosheng-g commented May 1, 2026

Summary

Fixes the input buffer being cleared unexpectedly when hitting Escape during tool executions. Ctrl+C will still clear the buffer as expected.

Details

The cancellation flow in AppContainer.tsx triggered by cancelOngoingRequest() inside useGeminiStream unconditionally cleared the input buffer when a tool was executing. This caused Escape (which uses the same flow) to erase user-typed text.

This PR introduces a clearBuffer flag in onCancelSubmit to properly distinguish between explicit interrupts (like Ctrl+C, which defaults to clearing the buffer) and soft dismissals (like Escape, which only stops the streaming/execution and leaves the buffer intact). It also hardens the internal cancellation logic in useGeminiStream to be resilient to transitionary UI states so that Ctrl+C correctly aborts active tools even if the UI flashes into an Idle state momentarily.

Related Issues

Closes #17083

How to Validate

  1. Run the CLI: npm run build && ./packages/cli/dist/index.js
  2. Execute a long-running tool: run "sleep 10"
  3. While the tool is running, type some text: Don't clear me
  4. Press Escape.
    • Expected: The tool is cancelled, and Don't clear me remains in the input buffer.
  5. Execute the long-running tool again: run "sleep 10"
  6. Type some text: Clear me
  7. Press Ctrl+C.
    • Expected: The tool is cancelled, and the input buffer is fully cleared.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@cocosheng-g cocosheng-g requested a review from a team as a code owner May 1, 2026 17:03
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses an issue where pressing the Escape key would inadvertently clear the CLI input buffer. The changes introduce a more granular cancellation mechanism that distinguishes between different cancellation triggers, ensuring that user-typed content is preserved during an Escape-based cancellation while maintaining the expected buffer-clearing behavior for Ctrl+C interruptions.

Highlights

  • Escape Key Behavior: Modified the cancellation logic to preserve the input buffer when the Escape key is pressed, preventing accidental loss of user input.
  • Ctrl+C Behavior: Maintained the existing behavior for Ctrl+C, which continues to clear the input buffer upon cancellation.
  • Cancellation Logic Hardening: Refactored cancellation handlers to be more resilient to transitionary UI states and improved the robustness of the cancelOngoingRequest function.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 1, 2026

Size Change: +1.02 kB (0%)

Total Size: 33.9 MB

Filename Size Change
./bundle/chunk-62ICKLPO.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-ECDAK7QL.js 0 B -2.72 MB (removed) 🏆
./bundle/chunk-GQK7HVG6.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-GVUQNPTX.js 0 B -12.5 kB (removed) 🏆
./bundle/chunk-NUCFBLSC.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-O7WZYQWW.js 0 B -657 kB (removed) 🏆
./bundle/chunk-UI7FRBD6.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-XIPRRQHN.js 0 B -14.7 MB (removed) 🏆
./bundle/core-BO6OPTEC.js 0 B -48.2 kB (removed) 🏆
./bundle/devtoolsService-7B6EVKF2.js 0 B -28 kB (removed) 🏆
./bundle/gemini-LJZB2GBU.js 0 B -582 kB (removed) 🏆
./bundle/interactiveCli-CFUVDSZM.js 0 B -1.32 MB (removed) 🏆
./bundle/liteRtServerManager-53EVOD3F.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-HZM5QUHZ.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-3OQALUPA.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-5WCGYLYV.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-6MHFYQFA.js 2.72 MB +2.72 MB (new file) 🆕
./bundle/chunk-6R33CON4.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-ETLHV37B.js 14.7 MB +14.7 MB (new file) 🆕
./bundle/chunk-OZVPQIIE.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-UHERSYJK.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-YFXIGIKK.js 657 kB +657 kB (new file) 🆕
./bundle/core-3KZPIG25.js 48.2 kB +48.2 kB (new file) 🆕
./bundle/devtoolsService-U53ZCYPD.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-XOXCU32V.js 582 kB +582 kB (new file) 🆕
./bundle/interactiveCli-TUMVNXTG.js 1.32 MB +1.32 MB (new file) 🆕
./bundle/liteRtServerManager-I35Z6YCE.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-KGZGKWK2.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IBHWQ36L.js 1.97 MB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-MVRUXXIW.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.14 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-KH2QDS2N.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-E24R7CGO.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-ZCO7UKGE.js 932 B +932 B (new file) 🆕
./bundle/start-L2OEKNLW.js 652 B +652 B (new file) 🆕

compressed-size-action

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a clearBuffer parameter to the cancellation logic within the Gemini CLI UI, enabling more granular control over whether the input buffer is cleared during different types of cancellations (e.g., Escape vs. Ctrl+C). The changes span AppContainer, useAgentStream, and useGeminiStream, along with corresponding test updates. Feedback focuses on ensuring the buffer is correctly cleared even when tools are awaiting confirmation or when a cancellation is already in progress, to maintain consistent terminal behavior.

Comment thread packages/cli/src/ui/AppContainer.tsx Outdated
Comment thread packages/cli/src/ui/hooks/useGeminiStream.ts
@gemini-cli gemini-cli Bot added priority/p2 Important but can be addressed in a future release. area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item. labels May 1, 2026
@cocosheng-g cocosheng-g force-pushed the fix/17083-escape-clear-buffer branch from a738136 to 5fed122 Compare May 1, 2026 17:25
@cocosheng-g cocosheng-g force-pushed the fix/17083-escape-clear-buffer branch from 5fed122 to 584e802 Compare May 1, 2026 17:38
@cocosheng-g
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a clearBuffer parameter to the cancellation logic within AppContainer, useAgentStream, and useGeminiStream. This enhancement allows the system to differentiate between cancellation actions, specifically preserving the input buffer when the 'Escape' key is pressed while clearing it for other cancellation events like 'Ctrl+C'. The update includes refactored hooks, improved state handling for idle cancellations, and updated unit tests to accommodate the new function signatures. I have no feedback to provide as there are no review comments.

Copy link
Copy Markdown
Contributor

@devr0306 devr0306 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary

This pull request correctly implements the intended logic to prevent the Escape key from unexpectedly clearing the input buffer during tool executions, while maintaining the buffer-clearing behavior for Ctrl+C.

Review Notes

  • Correctness: The change effectively addresses the issue by introducing a clearBuffer parameter to cancelOngoingRequest() and passing it down to onCancelSubmit().
  • Maintainability: The modification is clean and isolated. Extending the existing cancellation flow with a boolean flag is a straightforward and appropriate solution.
  • Testing: The corresponding useGeminiStream and useAgentStream tests pass successfully locally, indicating that the core cancellation logic remains sound.

Overall, the logic is sound and addresses the bug cleanly. Approved!

@cocosheng-g cocosheng-g added this pull request to the merge queue May 1, 2026
Merged via the queue into main with commit 997f461 May 1, 2026
27 checks passed
@cocosheng-g cocosheng-g deleted the fix/17083-escape-clear-buffer branch May 1, 2026 19:13
TirthNaik-99 pushed a commit to TirthNaik-99/gemini-cli that referenced this pull request May 4, 2026
kimjune01 pushed a commit to kimjune01/gemini-cli-claude that referenced this pull request May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item. priority/p2 Important but can be addressed in a future release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Please stop clearing input field on hitting esc

2 participants