Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Expandable File Change and Command activity boxes - #3005

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

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

@QuicksaverQuicksaver 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 06Screenshot 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

coderabbitaiBot 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-actionsgithub-actionsBot 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

@cursorcursorBot 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 threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/session-logic.ts Outdated
Comment threadapps/web/src/session-logic.ts
@macroscopeapp

macroscopeappBot 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
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of an open-PR triage — this area is being reworked in the in-flight #3022 (part of the #2451 UI split) and the two would collide. Happy to revisit after that lands if there's still a gap. Thanks!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Quicksaver@juliusmarminge