feat(web): show full tool output with copy actions - #1
Merged
Merged
Conversation
Tool results were captured by every provider adapter and persisted, but projectActivityPayload stripped them at the wire boundary, so expanded rows had nothing to show. Retain result/input/rawOutput/state in the projected payload under a 50k-per-field cap with a truncation flag, and render the extracted output text in the expanded timeline row for all tool types. Claude Fable 5 (Claude Code) + GPT-5.6 (Codex CLI)
Expanded tool rows repeated the command as both raw-command and detail blocks under an Output label, the copy button lived inside the scroll container (spawning a phantom scrollbar on short output and scrolling out of reach on long output), and copied commands carried the Bash: detail prefix. Dedupe blocks against the row text, scroll the pre itself with copy buttons anchored outside it, extract the copy button from ChatMarkdown into a shared CopyTextButton used for output and, on command rows, the raw command, and prefer the structured input.command over the prefixed detail string. Claude Fable 5 (Claude Code) + GPT-5.6 (Codex CLI)
Copy buttons crowded the output block's corner and revealed inconsistently, long commands were ellipsized with no way to read them in full, and the CSS ellipsis floated detached from the clipped text at most zoom levels. Limit expanded bodies to output only with a "(No output)" placeholder, unfurl the full header command while a row is expanded, reveal both copy actions on row hover with the copy button below the output box, and fade truncated previews with a mask instead of text-overflow ellipsis. Claude Fable 5 (Claude Code) + GPT-5.6 (Codex CLI)
# Conflicts: # apps/web/src/index.css
Composite-key separators were written as literal NUL and unit-separator bytes inside string literals, which made the source files register as binary to grep, ripgrep, and file(1) while still parsing fine. Use the backslash-u0000 and backslash-u001f escapes for identical runtime strings in searchable source. Claude Fable 5 (Claude Code)
The Codex adapter carries command output in item.aggregatedOutput with exitCode/status alongside, but projectCommandData stripped everything except toolName/input/result/command at the wire boundary and the web extractor never consulted the item, so Codex rows always rendered the (No output) placeholder. Retain aggregatedOutput under the existing 50k cap with the truncation flag plus exitCode/status, and let the web extractor fall back to the item with error state derived from status/exitCode while Claude-shaped result fields keep precedence. Claude Fable 5 (Claude Code) + GPT-5.6 (Codex CLI)
…ange The client hydrates threads from an IndexedDB snapshot cache and resumes via afterSequence, so activities cached before the projection retained tool output kept rendering as (No output) through server restarts and page reloads. Bump the stored thread snapshot schema to v4 so pre-fix entries fail to decode and threads re-download once with full payloads. Claude Fable 5 (Claude Code)
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.
What Changed
Why
Tool results were previously summarized or dropped, making expanded work-log rows less useful for inspecting agent activity. This change preserves the available output while keeping projected payloads bounded, improves readability by avoiding duplicate command text, and provides convenient copy actions.
UI Changes
Expanded tool rows now show full available output, indicate errors and truncation, and offer copy actions for output and command text. Code block copy behavior now uses the shared copy button component.
Checklist
Base branch: main
Head branch: tool-output-review