Render dynamic tool activity and preserve TUI history ordering (#46731)

## Why

The TUI ignored dynamic tool items, and replayed tool activity could differ from live output. Concurrent tool completion also needs to preserve transcript order when writing to terminal scrollback.

## What changed

- Retain dynamic tool rows, update them when calls finish out of order, and mark unfinished calls interrupted when a turn ends.
- Queue terminal output behind unfinished dynamic tools and drain settled rows in bounded batches. Preserve queued output through stream consolidation, resize, and rollback without emitting it twice.
- Align replayed file changes, MCP results, and exploration groups with live rendering. Keep hidden reasoning and terminal interaction details within compatible activity groups, and preserve finalized plan fragments.
- Ignore stale history-page responses, bound turn metadata requests to missing turns, and insert older history after session headers. Keep hidden review prompts as activity-group boundaries.

## Testing

Add regression tests and snapshots for out-of-order tool completion, interruption, ordered scrollback emission, rollback, deferred usage updates, replay consistency, overlapping history, and repeated hidden prompts.

GitOrigin-RevId: a3636cfcf4c9c43a0a5bc52a842b80a7834f1409
This commit is contained in:
Eric Traut
2026-09-20 00:03:43 +00:00
committed by copyberry
parent 392f56a611
commit 6ba6b73657
43 changed files with 1384 additions and 259 deletions
+1 -1
View File
@@ -221,7 +221,7 @@ impl McpHistory {
meta: None,
})
}
(None, None) => return None,
(None, None) => Err("MCP tool call completed without a result".to_string()),
};
Some(Self {
id,