fix: prevent stderr bleed on session cancel#19856
Open
sjawhar wants to merge 1 commit intoanomalyco:devfrom
Open
fix: prevent stderr bleed on session cancel#19856sjawhar wants to merge 1 commit intoanomalyco:devfrom
sjawhar wants to merge 1 commit intoanomalyco:devfrom
Conversation
Contributor
|
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
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
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.
Issue for this PR
Closes #19855
Type of change
What does this PR do?
When you press Escape during active LLM generation,
SessionPrompt.cancel()rejects pending callback promises. The abort endpoint atsession.ts:384callscancel()withoutawaitor.catch()— it fires the async function and immediately returnsc.json(true). The rejected promise has no handler, so Bun writes the stack trace to stderr. Since the TUI process has stderr pointed at the terminal (fd 2 → pts), the raw text renders over the TUI display.Two additional SDK calls in the TUI prompt component also lack
.catch():sdk.client.session.abort()on double-Escapesdk.client.session.command()on slash commandsThe fix adds
await+.catch(() => {})to the abort endpoint handler, and.catch(() => {})to the two SDK calls. The cancel rejection is expected behavior (it's how the prompt loop knows to stop), so swallowing it is correct.How did you verify your code works?
test/session/cancel.test.tsthat creates a session, starts the prompt loop, calls cancel, and asserts nounhandledRejectionevent firesat cancel(worker.js:231904)) through source maps back toSessionPrompt.cancelinprompt.tsScreenshots / recordings
Stack trace observed in TUI:
Checklist