Skip to content

Expandable File Change and Command activity boxes#3005

Open
Quicksaver wants to merge 10 commits into
pingdotgg:mainfrom
Quicksaver:file-change-command-activity-boxes
Open

Expandable File Change and Command activity boxes#3005
Quicksaver wants to merge 10 commits into
pingdotgg:mainfrom
Quicksaver:file-change-command-activity-boxes

Conversation

@Quicksaver

@Quicksaver Quicksaver commented Jun 9, 2026

Copy link
Copy Markdown

Summary

Adds inline expandable work-log details for file-change and command activities in the conversation timeline.

What Changed

  • Render command activity rows as clickable expandable rows.

    • Goal: keep the collapsed Ran command - <command> preview compact while making command details available inline.
    • Expanded rows show command, differing raw command, exit code, duration, and any stdout/stderr/output streams.
  • Add command output rendering helpers.

    • Goal: hide empty output blocks and keep long command output readable.
    • Output streams trim only outer empty lines, preserve intentional blank lines inside output, show the last 40 lines by default, and toggle to the full stream when clicked.
  • Render file-change activity rows as clickable expandable rows.

    • Goal: keep the collapsed Changed files - <path> preview compact while avoiding a jump to the full turn diff panel.
    • Expanded rows render available patches through the existing FileDiff viewer.
    • If no patch is available, expanded rows list changed paths inline.
  • Extract richer command and patch metadata from tool activity payloads.

    • Goal: support Codex/provider payload shapes that include stdout, stderr, exit code, duration, shell-wrapped raw commands, hunk-only diffs, content-only add diffs, nested patch data, and gitignored file patches when the provider emits patch data.
  • Add coverage for timeline rendering and session activity derivation.

    • Goal: lock in expandable command/file-change behavior, output trimming/toggling rules, command metadata extraction, and inline patch normalization.

Why

Individual command and diff events are mostly opaque currently. We can somewhat see what the agent is doing, but we don't have a clear picture of what each command actually outputs, or what each file change actually produced.

Usually that's fine, most times we inspect the end result and trust the agent. Sometimes it's good to inspect a little deeper. For commands we can help steer by debugging their output, or just compare the results with manual runs. For diffs we can see better follow along the multiple changes an agent makes, or even inspect changes to git-ignored files (which don't appear on the main diff panel).

UI Changes

Screenshot 2026-06-09 at 09 34 06 Screenshot 2026-06-09 at 09 32 11

Note

Medium Risk
Large UI and payload-parsing changes in the chat timeline and session-logic derivation; behavior is heavily tested but provider payload edge cases and rendering large diffs/output could affect performance or display correctness.

Overview
Adds inline expandable details for command and file-change work-log rows in the messages timeline, so collapsed previews stay compact while stdout/stderr, exit metadata, and patches are available without opening the turn diff panel.

Timeline UISimpleWorkEntryRow gains expand/collapse (keyboard + chevron, aria-expanded). Expanded command rows show command/raw command, exit code, duration, and output streams via new helpers that hide whitespace-only output, preserve intentional blank lines, and default long stdout/stderr to the last 40 lines with expand/collapse. File-change rows render inline FileDiff when a patch exists, otherwise changed-file chips.

Activity derivationWorkLogEntry and deriveWorkLogEntries now populate stdout, stderr, output, exitCode, durationMs, and patch from varied provider payloads (including incremental tool.updated merging, Codex command/file shapes, hunk-only diffs normalized to unified patches, and bounded patch extraction with size limits). Expandability is gated by item type so non-command tools (e.g. web search) do not pick up stray stdout as command UI.

Reviewed by Cursor Bugbot for commit 8883b90. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add expandable command output and file diff sections to work entry rows in the chat timeline

  • SimpleWorkEntryRow in MessagesTimeline.tsx now supports expand/collapse with chevron icons, keyboard handling (Enter/Space), and aria attributes for accessibility.
  • New CommandEntryDetails component renders command metadata, stdout/stderr (truncated to last 40 lines with an expand toggle), exit code, and duration; FileChangeEntryDetails renders inline unified diffs with a path/stats header or falls back to file badges and raw patch text.
  • session-logic.ts adds output, stdout, stderr, exitCode, durationMs, and patch fields to WorkLogEntry, extracted and normalized from heterogeneous provider payloads (including Codex and legacy shapes) via new extractCommandResult and extractToolPatch helpers.
  • Streaming tool updates are coalesced via mergeTextOutput, which handles prefix/suffix overlap and newline boundaries across tool.updated and tool.completed events.
  • Behavioral Change: partial or non-unified diffs in payloads are now synthesized into proper unified patch format before rendering; patch extraction is bounded by depth and total size guards to prevent excessive traversal.

Macroscope summarized 8883b90.

- Preserve command output, exit code, duration, and patches
- Add expandable timeline detail rows for command and file changes
- Document debug browser launch workflow
- Preserve command output whitespace and accessible toggles
- Tighten work entry guards and patch extraction behavior
- Add regression coverage for reviewed edge cases
- Preserve command stdout stripping across fallback payloads
- Keep dynamic and MCP tool details classified by actual metadata
- Preserve top-level and nested patch extraction coverage
- Keep changed-file chips only when no inline diff exists
- Render inline file diffs expanded so the patch body stays visible
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 516da489-6779-4576-a7cd-5bbd68d7124f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jun 9, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d7df3f5. Configure here.

Comment thread apps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment thread apps/web/src/session-logic.ts Outdated
Comment thread apps/web/src/session-logic.ts
@macroscopeapp

macroscopeapp Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature with substantial new UI components and data processing logic for expandable activity boxes. The scope of new functionality (1500+ lines of new code, multiple new components, new state management) warrants human review.

You can customize Macroscope's approvability policy. Learn more.

- Merge cumulative command output instead of reappending it
- Keep file change details from showing alongside command details
- Stop nested patch extraction from overriding the top-level patch
- Keep cumulative output de-dupe without arbitrary overlap trimming

- Cover overlapping delta chunks in session logic tests
- Restore command and file detail precedence

- Cover incremental output merge edge cases
- Render command and file-change details together

- Preserve distinct overlapping command-output chunks
- Render command and file-change details independently
- Cover dynamic output-only and command-patch rows
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant