Skip to content

feat(web): show full tool output with copy actions - #1

Merged
asfires merged 7 commits into
mainfrom
tool-output-review
Aug 10, 2026
Merged

asfires merged 7 commits into
mainfrom
tool-output-review

Conversation

@asfires

@asfires asfires commented Aug 10, 2026

Copy link
Copy Markdown
Owner

What Changed

  • Retain and display full provider tool output in expanded work-log rows.
  • Add copy actions for tool output, commands, and code blocks.
  • Cap projected tool results at 50,000 characters and mark truncated output.
  • Refine command visibility and remove duplicate expanded content.
  • Add focused server and web coverage for projection, rendering, truncation, and copy behavior.

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

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Base branch: main
Head branch: tool-output-review

asfires added 4 commits August 8, 2026 17:59
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
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 10, 2026
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)
@asfires
asfires merged commit 19d7110 into main Aug 10, 2026
7 of 11 checks passed
@asfires
asfires deleted the tool-output-review branch August 10, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant