rich message component#13777
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
10098dd to
6c51ab5
Compare
665b765 to
5511f60
Compare
6c51ab5 to
5a63033
Compare
5511f60 to
589ec22
Compare
589ec22 to
c4eb571
Compare
5a63033 to
417292b
Compare
c4eb571 to
e1b93b0
Compare
522bbcd to
f92bfe3
Compare
e1b93b0 to
94f69eb
Compare
f92bfe3 to
1e4f5c6
Compare
94f69eb to
626fa04
Compare
1e4f5c6 to
ca64994
Compare
90c65aa to
a548617
Compare
9d9504c to
b66beaa
Compare
a548617 to
e38c4a2
Compare
b66beaa to
b054916
Compare
e38c4a2 to
1519f99
Compare
b054916 to
7480600
Compare
|
I'm starting a first review of this pull request. You can view the conversation on Warp. I completed the review and no human review was requested for this pull request. Comment Powered by Oz |
48871bc to
4835202
Compare
There was a problem hiding this comment.
Overview
This PR updates the TUI orchestration transcript to render received agent messages as rich collapsed participant rows, factors participant resolution into shared history/topology helpers, removes placeholder lifecycle-event transcript rows, and consolidates TUI tool-call state styling helpers. It includes TUI render tests, topology tests, and linked visual evidence for the user-facing behavior.
Concerns
- No blocking correctness, security, or spec-alignment concerns found in the reviewed diff.
Verdict
Found: 0 critical, 0 important, 0 suggestions
Approve
Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
4835202 to
fced1e8
Compare
| pub struct ResolvedOrchestrationParticipant { | ||
| pub kind: OrchestrationParticipantKind, | ||
| pub conversation_id: Option<AIConversationId>, | ||
| pub display_name: String, |
There was a problem hiding this comment.
Should display_name be a method on OrchestrationParticipantKind?
It could be
pub enum OrchestrationParticipantKind {
Orchestrator { name: String },
Agent,
Unknown,
}
impl OrchestrationParticipantKind {
fn display_name() { ... }
}fced1e8 to
87dd32b
Compare
34e7925 to
8179fca
Compare
87dd32b to
3b7f113
Compare
8179fca to
1e409af
Compare

Description
Renders
MessagesReceivedFromAgentsin the Warp TUI as rich, collapsed-by-default participant rows. Each row shows the sender's conversation-status glyph, deterministic orchestration identity, and display name; expanding it reveals the message body with hanging indentation and falls back to the subject when the body is blank. OpaqueEventsFromAgentsids no longer produce placeholder transcript rows, and exchanges containing only intentionally hidden orchestration output now render at zero height instead of leaving blank transcript blocks.Why participant resolution lives in history/topology
An incoming
ReceivedMessageDisplaycontains a server-sidesender_agent_id, but not the sender's display name, status, or local conversation id. The current transcript block supplies a localAIConversationId, so rendering needs two small semantic lookups:This is not a second graph traversal.
BlocklistAIHistoryModelis already the canonical owner of run-id indexing, loaded conversations, immediate-parent links, sibling ordering, names, andConversationStatus. The shared helpers inapp/src/ai/blocklist/orchestration_topology.rsexpose that identity discovery to both GUI and TUI.TuiOrchestrationModelintentionally remains an ephemeral session materializer. It owns only child-conversation → background-session and session → event-consumer mappings. Mirroring participant metadata there would create a second source of truth and would not cover restored, remote, or otherwise pre-existing conversations that did not pass through the current TUI coordinator.After semantic resolution, each frontend owns presentation: the GUI chooses avatars/navigation behavior, while the TUI chooses terminal glyph/color identities. The TUI reads
ConversationStatusdirectly for participant rows; tool calls retain a separateToolCallDisplayStatebecause constructing and pending are tool-call states, not conversation lifecycle states.Testing
./script/run-tuihttps://www.loom.com/share/d4108705287743fba6797c4b93599122
Agent Mode