fold sub-agent prompt into the Agent card; relabel you → agent prompt (T-263)
A sidechain sub-agent prompt was rendered with the blue "you" label, falsely implying the user typed it. Now: - transcript_reader parses parentUuid (was dropped) onto every ConversationItem. - conversation_view resolves each sidechain prompt to its spawning Agent/Task card via parentUuid (nearest-preceding Agent as fallback), folds the prompt into that card as a collapsed "prompt" segment, and suppresses the standalone block. Layered order when expanded: call → prompt → result (note E). - A sidechain UserMessage never gets the "you" treatment: folded into its card, or — when orphaned — rendered as a muted standalone "agent prompt". Tests: parentUuid parse, fold + suppression, parallel-agent attachment (would fail under a nearest-preceding heuristic), orphan relabel, and a golden for the Agent card's call → prompt → result layering. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -361,6 +361,23 @@ void main() {
|
||||
final items = parseAll([raw]);
|
||||
expect(items.first.isSidechain, isTrue);
|
||||
});
|
||||
|
||||
test('parentUuid is parsed; empty parentUuid normalises to null (T-263)', () {
|
||||
final withParent = envelope(
|
||||
type: 'user',
|
||||
uuid: 'u8',
|
||||
parentUuid: 'msg-A',
|
||||
message: {'role': 'user', 'content': 'a sidechain prompt'},
|
||||
);
|
||||
final withoutParent = envelope(
|
||||
type: 'user',
|
||||
uuid: 'u9',
|
||||
message: {'role': 'user', 'content': 'top-level'}, // parentUuid defaults to ''
|
||||
);
|
||||
final items = parseAll([withParent, withoutParent]);
|
||||
expect(items[0].parentUuid, 'msg-A');
|
||||
expect(items[1].parentUuid, isNull); // '' → null
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user