"use client"; import { useState } from "react"; import { CheckCircle2, ChevronDown, ChevronRight, Circle, Loader2, XCircle } from "lucide-react"; import type { AgentStatus } from "@/hooks/use-pipeline-progress"; const AGENT_LABELS: Record = { "trend-scout": "Trend Scout", "marketing-research-agent": "Research Agent", "script-writer": "Script Writer", "ad-creative-designer": "Ad Creative Designer", "video-ad-producer": "Video Ad Producer", "copywriter-agent": "Copywriter", "distribution-agent": "Distribution Agent", }; function formatDuration(ms?: number) { if (!ms) return ""; if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${Math.round(ms / 1000)}s`; return `${Math.round(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`; } function StatusIcon({ status }: { status: AgentStatus["status"] }) { switch (status) { case "completed": return ; case "running": return ; case "failed": return ; default: return ; } } function AgentRow({ agent }: { agent: AgentStatus }) { const [expanded, setExpanded] = useState(false); const hasDetails = agent.outputSummary || agent.error; return (
hasDetails && setExpanded(!expanded)} >
{AGENT_LABELS[agent.agentName] || agent.agentName}
{!expanded && agent.outputSummary && (

{agent.outputSummary}

)} {!expanded && agent.error && (

{agent.error}

)}
{agent.durationMs && ( {formatDuration(agent.durationMs)} )} {hasDetails && ( expanded ? : )}
{expanded && (
{agent.error && (
Error

{agent.error}

)} {agent.outputSummary && (
Output

{agent.outputSummary}

)} {agent.durationMs && (
Duration

{formatDuration(agent.durationMs)}

)}
)}
); } export function PipelineProgress({ agents }: { agents: AgentStatus[] }) { return (
{agents.map((agent) => ( ))}
); }