diff --git a/ui/web/src/pages/teams/event-sections/agent-event-cards.tsx b/ui/web/src/pages/teams/event-sections/agent-event-cards.tsx
index 65acaf66..22ad603c 100644
--- a/ui/web/src/pages/teams/event-sections/agent-event-cards.tsx
+++ b/ui/web/src/pages/teams/event-sections/agent-event-cards.tsx
@@ -11,44 +11,35 @@ export function AgentEventCard({ entry, resolveAgent }: Props) {
const p = entry.payload as EnrichedAgentEventPayload;
const subtype = p.type;
- const subtypeBadgeVariant =
+ if (subtype === "tool.call" || subtype === "tool.result") {
+ return ;
+ }
+
+ return ;
+}
+
+/** run.started / run.completed / run.failed / run.retrying */
+function RunEventCard({ p, resolveAgent }: { p: EnrichedAgentEventPayload; resolveAgent: Props["resolveAgent"] }) {
+ const subtype = p.type;
+ const variant =
subtype === "run.completed"
? ("success" as const)
: subtype === "run.failed"
? ("destructive" as const)
- : subtype === "run.started" || subtype === "run.retrying"
- ? ("info" as const)
- : ("secondary" as const);
+ : subtype === "run.retrying"
+ ? ("warning" as const)
+ : ("info" as const);
return (
-
+
{subtype}
{resolveAgent(p.agentId)}
- {p.delegationId && (
-
- deleg: {p.delegationId.slice(0, 8)}
-
- )}
- {p.parentAgentId && (
-
- parent: {resolveAgent(p.parentAgentId)}
-
- )}
- {(subtype === "tool.call" || subtype === "tool.result") && p.payload && (
-
- {p.payload.name && (
- {p.payload.name}
- )}
- {p.payload.is_error && (
- error
- )}
-
- )}
+
{subtype === "run.failed" && p.payload?.error && (
{p.payload.error}
@@ -56,3 +47,76 @@ export function AgentEventCard({ entry, resolveAgent }: Props) {
);
}
+
+/** tool.call / tool.result */
+function ToolEventCard({ p, resolveAgent }: { p: EnrichedAgentEventPayload; resolveAgent: Props["resolveAgent"] }) {
+ const isResult = p.type === "tool.result";
+ const toolName = p.payload?.name;
+ const isError = isResult && p.payload?.is_error;
+
+ return (
+
+
+
+ {p.type}
+
+ {toolName && (
+ {toolName}
+ )}
+ {isResult && (
+
+ {isError ? "error" : "ok"}
+
+ )}
+ →
+ {resolveAgent(p.agentId)}
+
+
+
+
+ );
+}
+
+/** Shared context row: channel, delegation, parent, team task, call ID */
+function ContextRow({
+ p,
+ resolveAgent,
+ showCallId,
+}: {
+ p: EnrichedAgentEventPayload;
+ resolveAgent: Props["resolveAgent"];
+ showCallId?: boolean;
+}) {
+ const hasContext = p.channel || p.delegationId || p.parentAgentId || p.teamTaskId || (showCallId && p.payload?.id);
+ if (!hasContext) return null;
+
+ return (
+
+ {p.channel && (
+ {p.channel}
+ )}
+ {p.delegationId && (
+
+ )}
+ {p.parentAgentId && (
+
+ parent: {resolveAgent(p.parentAgentId)}
+
+ )}
+ {p.teamTaskId && (
+
+ )}
+ {showCallId && p.payload?.id && (
+
+ )}
+
+ );
+}
+
+function ShortId({ label, id }: { label: string; id: string }) {
+ return (
+
+ {label}: {id.slice(0, 8)}
+
+ );
+}
diff --git a/ui/web/src/pages/teams/event-sections/delegation-event-cards.tsx b/ui/web/src/pages/teams/event-sections/delegation-event-cards.tsx
index b54e143c..d5841ee6 100644
--- a/ui/web/src/pages/teams/event-sections/delegation-event-cards.tsx
+++ b/ui/web/src/pages/teams/event-sections/delegation-event-cards.tsx
@@ -49,11 +49,19 @@ function DelegationLifecycleCard({ entry, resolveAgent }: Props) {
{p.mode}
)}
+ {p.channel && (
+ {p.channel}
+ )}
{p.task && {p.task}
}
+ {p.delegation_id && (
+
+ deleg: {p.delegation_id.slice(0, 8)}
+
+ )}
{p.elapsed_ms != null && p.elapsed_ms > 0 && {formatDuration(p.elapsed_ms)}}
- {p.error && {p.error}}
+ {p.error && {p.error}}
);
@@ -97,11 +105,19 @@ function DelegationAccumulatedCard({ payload: p, resolveAgent }: { payload: Dele
function DelegationAnnounceCard({ payload: p, resolveAgent }: { payload: DelegationAnnouncePayload } & ResolverProp) {
return (
-
- {p.source_display_name || resolveAgent(p.source_agent_key)}
- {" "}announcing {p.results.length} result(s)
- ({formatDuration(p.total_elapsed_ms)})
-
+
+ {p.source_display_name || resolveAgent(p.source_agent_key)}
+ announcing {p.results.length} result(s)
+ ({formatDuration(p.total_elapsed_ms)})
+ {p.has_media && (
+ media
+ )}
+ {p.completed_task_ids && p.completed_task_ids.length > 0 && (
+
+ {p.completed_task_ids.length} task(s) auto-completed
+
+ )}
+
{p.results.map((r) => (
diff --git a/ui/web/src/pages/teams/event-sections/message-event-card.tsx b/ui/web/src/pages/teams/event-sections/message-event-card.tsx
index f99020df..c3bdb83d 100644
--- a/ui/web/src/pages/teams/event-sections/message-event-card.tsx
+++ b/ui/web/src/pages/teams/event-sections/message-event-card.tsx
@@ -27,6 +27,11 @@ export function MessageEventCard({ entry, resolveAgent }: Props) {
{p.preview && (
{p.preview}
)}
+ {p.task_id && (
+
+ task: {p.task_id.slice(0, 8)}
+
+ )}
);
}
diff --git a/ui/web/src/pages/teams/event-sections/task-event-cards.tsx b/ui/web/src/pages/teams/event-sections/task-event-cards.tsx
index 4cea4adb..d685e269 100644
--- a/ui/web/src/pages/teams/event-sections/task-event-cards.tsx
+++ b/ui/web/src/pages/teams/event-sections/task-event-cards.tsx
@@ -18,8 +18,16 @@ export function TaskEventCard({ entry, resolveAgent }: Props) {
{p.status}
+ {p.channel && (
+
{p.channel}
+ )}
+ {p.task_id && (
+
+ task: {p.task_id.slice(0, 8)}
+
+ )}
{p.owner_agent_key && Owner: {owner}}
{p.reason && Reason: {p.reason}}