feat(tui): Task 3.5 — decode + render router.narration as bright narration_llm lines

Add TypeRouterNarration constant, mark it event-bearing, decode golden test,
applyServer case appending RouterEntry{Role:"narration_llm"} with metrics, and
routerRows render branch showing bright ◆ prefix with FgStrong content + metrics suffix.
This commit is contained in:
2026-06-03 19:09:28 +04:00
parent da1aca411a
commit 2bef4b96a5
4 changed files with 33 additions and 1 deletions
@@ -99,6 +99,17 @@ func TestDecodeGoldenServerFrames(t *testing.T) {
}
},
},
{
name: "router.narration carries content + metrics",
json: `{"type":"router.narration","sessionId":"s1","content":"moving on","stageId":"validate","latencyMs":2000,"totalTokens":120,"sequence":10,"sessionSequence":5}`,
wantType: TypeRouterNarration,
eventBear: true,
check: func(t *testing.T, m ServerMessage) {
if m.Content != "moving on" || m.LatencyMs == nil || *m.LatencyMs != 2000 || m.TotalTokens == nil || *m.TotalTokens != 120 {
t.Fatalf("router.narration: %+v", m)
}
},
},
{
name: "snapshot_complete (non-event control frame)",
json: `{"type":"snapshot_complete"}`,