import type { ParallelAgentState } from '@/lib/types'; interface ParallelBlockViewProps { agents: ParallelAgentState[]; stepName: string; } function StatusIcon({ status }: { status: string }): React.ReactElement { switch (status) { case 'completed': return ; case 'running': return ( ); case 'failed': return ; default: return ; } } function formatDuration(ms: number): string { if (ms < 1000) return `${String(ms)}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${(ms / 60000).toFixed(1)}m`; } function overallStatus(agents: ParallelAgentState[]): string { if (agents.some(a => a.status === 'failed')) return 'failed'; if (agents.some(a => a.status === 'running')) return 'running'; if (agents.every(a => a.status === 'completed')) return 'completed'; return 'pending'; } export function ParallelBlockView({ agents, stepName, }: ParallelBlockViewProps): React.ReactElement { const status = overallStatus(agents); const completed = agents.filter(a => a.status === 'completed').length; return (
{/* Parent row */}
{stepName} ({String(completed)}/{String(agents.length)} agents)
{/* Nested agent list */}
{agents.map(agent => (
{agent.name} {agent.duration !== undefined && ( {formatDuration(agent.duration)} )} {agent.error && ( {agent.error} )}
))}
); }