feat(web): subagent side panel with a live call-graph, compact chips in the stream (#78)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Yaowei ZhengandClaude Fable 5 authored and GitHub committed 2026-07-28 00:17:18 +08:00
1 parent d3c8f1da7b
commit 08f59baa70
22 files changed
+2330 -175

No files matched your search

@@ -17,7 +17,7 @@ import { ZoomableImage } from "../../components/ui/image-zoom";
import { MessageFilesCard } from "./message-files-card";
import { ThinkingBlock } from "./thinking-block";
import { ToolCallCard } from "./tool-call-card";
import { SubagentCard } from "./subagent-card";
import { SubagentChip } from "./subagent-chip";
import { CompactionBanner } from "./compaction-banner";
import { GoalRoundBanner } from "./goal-banner";
import { HandoffBanner, ModelSwitchBanner } from "./handoff-banner";
@@ -315,9 +315,11 @@ export function MessageItem({ item, ctx }: { item: ChatItem; ctx: StreamRenderCo
case "tool_call":
return <ToolCallCard item={item} ctx={ctx} />;
case "subagent":
// Standalone child session (no run_subagent card to bind to): same full-width shortcut
// bar as the bound site — the conversation itself lives in the subagents panel.
return (
<div className="anim-msg my-2">
<SubagentCard sessionId={item.sessionId} model={item.model} running={false} ctx={ctx} />
<SubagentChip sessionId={item.sessionId} model={item.model} running={false} ctx={ctx} />
</div>
);
case "abort":