-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Capture terminal output when thread is interrupted #46306
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
When the user presses Esc or the Stop button to interrupt a thread, terminal tools now capture their output and include it in the tool result. This allows the model to see what was happening in the terminal when the user interrupted, so it can answer questions about the output. Changes: - Thread::cancel() now returns a Task that waits for tools to respond to cancellation before flushing pending messages - Terminal tool uses select! to detect cancellation signal and immediately kills the terminal and captures output - run_turn_internal uses select! to break out of event loop on cancel - Added test for terminal tool cancellation output capture Release Notes: - Interrupting the agent now captures terminal output so the model can see what was running when you stopped it
- Fix race condition in run_turn where detached cancel task could flush the new turn's pending message instead of the old one - Improve test_terminal_tool_cancellation_captures_output with helper functions and recovery verification - Add test_truncate_while_terminal_tool_running - Add test_terminal_tool_cancellation_with_timeout_configured - Add test_cancel_multiple_concurrent_terminal_tools with MultiTerminalEnvironment helper
- Fix assertion strings to match actual output format ('The user stopped this command')
- Add test for terminal-card stop button (was_stopped_by_user path)
- Add test for timeout actually expiring
- Make FakeTerminalHandle deterministic using channels instead of polling
- Add verify_thread_recovery helper to reduce test duplication
- Use GPUI executor timer instead of smol::Timer for deterministic testing
baldwindavid
added a commit
to baldwindavid/zed
that referenced
this pull request
Jan 8, 2026
* main: (349 commits) component_preview: Fix license symlink (zed-industries#46379) Do not react on already observed buffer edits' versions (zed-industries#46308) Fix EP CLI output flicker (zed-industries#46313) vim: Fix bug where repeat operator could lead to unrecoverable replaying state (zed-industries#46376) vim: Implement text-based matching bracket logic for Vim '%' motion to correctly find pairs within comments (zed-industries#45559) Improve LSP button error message (zed-industries#46377) agent: Make reject/accept keybindings consistent with restore/stage (zed-industries#46373) Enable test-support features for some dev dependencies (zed-industries#46370) Capture terminal output when thread is interrupted (zed-industries#46306) Inline assistant tools: no more feature flag (zed-industries#46107) Add `ep split` subcommand for dataset splitting (zed-industries#46364) lsp_button: Fix long LSP version label (zed-industries#46359) remote: Introduce a proper mock remote connection (zed-industries#46337) ep: Allow matching patches against files without trailing newlines (zed-industries#46357) docs: Update "Custom Keybindings for Extension-Based Agents section" to include a troubleshooting note for defining an agent name (zed-industries#46144) Fail early if clangd is downloaded on aarch Linux (zed-industries#46346) ep: Handle errored requests in Anthropic batches (zed-industries#46351) settings_ui: Fix settings search missing results when BM25 finds partial matches (zed-industries#46349) workspace: Unpreview active tab when closing other tabs (zed-industries#46294) terminal: Skip SHLVL when loading login shell environment (zed-industries#46273) ...
rtfeldman
added a commit
that referenced
this pull request
Jan 8, 2026
<img width="707" height="778" alt="Screenshot 2026-01-07 at 8 34 00 PM" src="https://github.com/user-attachments/assets/59842820-079b-4d47-9bdd-f77300f8a60e" /> When the user presses Esc or the Stop button to interrupt a thread, terminal tools now capture their output and include it in the tool result. This allows the model to see what was happening in the terminal when the user interrupted, so it can answer questions about the output. ## Changes - `Thread::cancel()` now returns a `Task` that waits for tools to respond to cancellation before flushing pending messages - Terminal tool uses `select!` to detect cancellation signal and immediately kills the terminal and captures output - `run_turn_internal` uses `select!` to break out of event loop on cancel - Added test for terminal tool cancellation output capture This is a follow-up to #46218 which added similar functionality for the "Stop" button on individual terminal tool cards. Release Notes: - Interrupting the agent now captures terminal output so the model can see what was running when you stopped it
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When the user presses Esc or the Stop button to interrupt a thread, terminal tools now capture their output and include it in the tool result. This allows the model to see what was happening in the terminal when the user interrupted, so it can answer questions about the output.
Changes
Thread::cancel()now returns aTaskthat waits for tools to respond to cancellation before flushing pending messagesselect!to detect cancellation signal and immediately kills the terminal and captures outputrun_turn_internalusesselect!to break out of event loop on cancelThis is a follow-up to #46218 which added similar functionality for the "Stop" button on individual terminal tool cards.
Release Notes: