Skip to content

[Feature]: Group native-chat activity and reported file changes #8755

Description

@slashdevcorpse

Problem or use case

Long native-chat turns interleave assistant explanations, tool calls, tool results, and file diffs. Orca already collapses tool runs, but completed work still expands into separate call and result rows, and users must inspect individual edits to understand which files were affected.

The practical use cases are:

  • Follow the agent's explanation without completed commands dominating the transcript.
  • See the current or failed operation immediately during a long turn.
  • Review the files reported as changed without opening every edit operation.
  • Expand exact inputs, outputs, and diffs when debugging requires them.

This is a bounded presentation and correctness follow-up to #1447. Native chat, transcript transport, raw terminal access, and remote-session support already exist; this issue does not propose a second transcript architecture.

Proposed solution

Improve the existing provider-neutral native-chat activity disclosure:

  • Pair each tool call with its matching result and render one lifecycle row per operation.
  • Correlate provider-owned call identifiers when available, with a safe fallback for transcripts that do not provide identifiers.
  • Keep completed activity collapsed by default while leaving active and failed work easy to identify.
  • Keep the assistant's final response outside the collapsed activity details.
  • Aggregate file changes reported by successful edit operations, grouped by path, with independently expandable diffs.
  • Reuse Orca's existing Markdown renderer, diff view, worktree-aware file routing, pagination, autoscroll, and raw terminal view.

This changes presentation and transcript correlation only. It must not change prompts, command execution, approval behavior, transcript ordering, terminal transport, or filesystem permissions.

Acceptance criteria

  • A tool call and its result render as one ordered lifecycle row.
  • Explicit provider call identifiers are matched exactly; mismatched identifiers are never paired.
  • Transcripts without identifiers retain a safe ordered fallback.
  • Completed activity is collapsed by default and keyboard-expandable.
  • Active and failed operations remain visually distinct.
  • Final assistant text is never hidden inside the activity disclosure.
  • Expanded activity preserves bounded command inputs, outputs, and diffs.
  • Only successful operations contribute reported file changes.
  • Reported file changes are grouped by path and can open through the existing worktree-aware route.
  • Existing approvals, questions, paging, streaming, autoscroll, and raw terminal behavior do not regress.
  • Local, WSL, and SSH-backed sessions use the same provider-neutral behavior.
  • Disclosure controls expose keyboard focus and accurate aria-expanded state.

Alternatives or additional context

Keeping separate call and result rows preserves detail but makes long turns harder to scan. Hiding tool output entirely would make failures and audit details difficult to inspect. A compact lifecycle summary keeps the normal reading path quiet while retaining the complete bounded detail on demand.

Related to #1447.

Metadata

Metadata

Assignees

Labels

P2Normal priority: nice-to-have or lower urgencyenhancementNew feature or request

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions