import { useEffect, useState } from "react"; import { Cpu, Shield, Activity, BookText, Check, Loader2 } from "lucide-react"; import { cn } from "@/lib/utils"; const AGENTS = [ { key: "event", label: "Event Extraction", icon: Cpu, task: "Parsing timeline & sensor events…" }, { key: "safety", label: "Safety", icon: Shield, task: "Cross-checking NHTSA / ISO 26262…" }, { key: "risk", label: "Risk", icon: Activity, task: "Inferring probable root causes…" }, { key: "docs", label: "Documentation", icon: BookText, task: "Drafting safety report…" }, ] as const; const STEP_MS = 1400; export function AgentPipeline() { const [active, setActive] = useState(0); const [tick, setTick] = useState(0); useEffect(() => { const id = setInterval(() => { setTick((t) => t + 1); setActive((a) => (a + 1) % AGENTS.length); }, STEP_MS); return () => clearInterval(id); }, []); // Smooth progress within current step const [progress, setProgress] = useState(0); useEffect(() => { setProgress(0); const start = Date.now(); const id = setInterval(() => { const p = Math.min(100, ((Date.now() - start) / STEP_MS) * 100); setProgress(p); if (p >= 100) clearInterval(id); }, 40); return () => clearInterval(id); }, [tick]); return (
{/* Scanline */}

Multi-agent analysis in progress

{String(active + 1).padStart(2, "0")} / {String(AGENTS.length).padStart(2, "0")}
{AGENTS.map((agent, i) => { const Icon = agent.icon; const state = i < active ? "done" : i === active ? "active" : "pending"; return (
{state === "done" ? ( ) : state === "active" ? ( ) : ( )}
Agent {i + 1}
{agent.label}
); })}
{AGENTS[active].task}
); }