Conversation
…on ToolOutput (#2126) After #2116 fixed duplicate tool entries, the content within each entry was still duplicated: ToolStart wrote "$ cmd\n", OutputChunks appended raw output, then ToolOutput appended the full body_display again. handle_tool_output_event now truncates the message to the header line ("$ cmd\n") before writing body_display, discarding accumulated chunks. Streaming chunks remain a live preview; ToolOutput is the ground truth.
b9815ef to
4ef7e2e
Compare
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.
Summary
handle_tool_output_event, truncate the streaming message to its header line ("$ cmd\n") before writingbody_display, replacing accumulated chunks rather than appending to themToolOutputevent is the canonical ground truthRoot Cause
Three paths wrote into the same streaming message:
"$ cmd\n"body_display(raw output) again, doubling the contentFix
handle_tool_output_eventnow:find('\n').map_or(0, |i| i+1))"$ cmd\n"body_display— exactly one copy of the outputWorks correctly for both cases: chunks streamed (discards them, writes canonical) and no chunks (no-op truncate, then writes).
Test Plan
cargo +nightly fmt --check— cleancargo clippy --workspace --features full -- -D warnings— cleancargo nextest run --config-file .github/nextest.toml --workspace --features full --lib --bins— 6377 passed (+2 vs baseline)