Skip to content
Source
Sign inSign up
Open History to see the last commit

subagent-card-presentation.ts

21 lines1011 Bytes

1import { isActiveSubagentStatus } from "@t3tools/client-runtime/state/subagentRuntime";
2import type { OrchestrationV2Subagent } from "@t3tools/contracts";
3import { formatDuration } from "@t3tools/shared/orchestrationTiming";
4import * as DateTime from "effect/DateTime";
5​
6export function subagentCardElapsed(
7 agents: ReadonlyArray<Pick<OrchestrationV2Subagent, "status" | "startedAt" | "completedAt">>,
8 nowMs: number,
9): string | null {
10 const starts = agents.flatMap((agent) =>
11 agent.startedAt ? [DateTime.toEpochMillis(agent.startedAt)] : [],
12 );
13 if (starts.length === 0) return null;
14 const live = agents.some((agent) => isActiveSubagentStatus(agent.status));
15 if (!live && agents.some((agent) => agent.completedAt === null)) return null;
16 const ends = agents.flatMap((agent) =>
17 agent.completedAt ? [DateTime.toEpochMillis(agent.completedAt)] : [],
18 );
19 const duration = (live ? nowMs : Math.max(...ends)) - Math.min(...starts);
20 return duration > 0 ? formatDuration(duration) : null;