Skip to content

fix(cli): restore paused stdin after capability detection - #28889

Open
sylvesterkaczmarek wants to merge 3 commits into
google-gemini:mainfrom
sylvesterkaczmarek:fix/terminal-capability-stdin-flow-28799
Open

fix(cli): restore paused stdin after capability detection#28889
sylvesterkaczmarek wants to merge 3 commits into
google-gemini:mainfrom
sylvesterkaczmarek:fix/terminal-capability-stdin-flow-28799

Conversation

@sylvesterkaczmarek

@sylvesterkaczmarek sylvesterkaczmarek commented Aug 18, 2026

Copy link
Copy Markdown

Fixes #28799

Summary

  • restore stdin to paused mode after terminal capability detection when it was not already flowing
  • preserve an already-flowing stdin stream
  • add focused regression coverage for both flow-state cases

Why

detectCapabilities() temporarily attaches a data listener to process.stdin. In Node.js, adding a data listener switches a readable stream into flowing mode, and removing that listener does not automatically pause the stream again. With no consumer attached, subsequent input can be discarded before Ink installs its readable consumer.

This matches #28799's observed state: terminal capability detection completes, the TUI renders, but the tty is never subsequently consumed and keyboard input is lost.

The cleanup now restores the pre-detection non-flowing state by calling pause() only when stdin was not already flowing.

Validation

Added focused tests in packages/cli/src/ui/utils/terminalCapabilityManager.stdin-flow.test.ts covering:

  • non-flowing stdin is paused after detection
  • already-flowing stdin is preserved

@sylvesterkaczmarek
sylvesterkaczmarek requested a review from a team as a code owner August 18, 2026 16:42
@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 terminal capability detection inadvertently leaves stdin in a flowing mode, causing subsequent keyboard input to be lost. By tracking the stream's state before detection and conditionally calling pause, the fix ensures that the terminal remains responsive for subsequent consumers like Ink.

Highlights

  • Stdin Flow State Management: Updated terminal capability detection to track the initial flow state of stdin, ensuring it is restored to a paused state only if it was not already flowing.
  • Regression Testing: Added a new test suite to verify that stdin is correctly paused after detection when idle, and remains in flowing mode if it was already active.
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 the 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 counterproductive. 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 github-actions Bot added the size/m A medium sized PR label Aug 18, 2026
@github-actions

Copy link
Copy Markdown

📊 PR Size: size/M

  • Lines changed: 105
  • Additions: +105
  • Deletions: -0
  • Files changed: 2

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

Copy link
Copy Markdown
Contributor

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 ensures that process.stdin is paused after temporary terminal capability detection if it was not already flowing. This prevents keyboard input from being discarded before Ink attaches its consumer. A new test file has been added to verify this behavior. I have no feedback to provide as the implementation is correct and there are no review comments.

@gemini-cli gemini-cli Bot added priority/p1 Important and should be addressed in the near term. area/core Issues related to User Interface, OS Support, Core Functionality labels Aug 18, 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 priority/p1 Important and should be addressed in the near term. size/m A medium sized PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Interactive TUI renders but never subscribes to stdin — all keyboard input is ignored

1 participant