import { Shield, Zap } from "lucide-react"; type NodeState = "ready" | "waiting" | "pending"; interface BarrierNode { id: string; name: string; gradient: string; state: NodeState; waitingFor?: string; } const nodes: BarrierNode[] = [ { id: "n1", name: "CLA", gradient: "linear-gradient(135deg,#8b5cf6,#6366f1)", state: "ready", }, { id: "n2", name: "KIM", gradient: "linear-gradient(135deg,#f59e0b,#d97706)", state: "waiting", waitingFor: "架构设计完成", }, { id: "n3", name: "OPC", gradient: "linear-gradient(135deg,#10b981,#059669)", state: "ready", }, { id: "n4", name: "USR", gradient: "linear-gradient(135deg,#f59e0b,#b45309)", state: "pending", }, ]; const stateColors: Record = { ready: "#00ff9d", waiting: "#ff9500", pending: "#374151", }; const stateLabels: Record = { ready: "READY", waiting: "WAIT", pending: "IDLE", }; const syncPoints = [ { name: "INIT", completed: true }, { name: "REVIEW", completed: true }, { name: "DESIGN", completed: false, active: true }, { name: "IMPL", completed: false }, { name: "DEPLOY", completed: false }, ]; export function BarrierSyncCard() { const readyCount = nodes.filter(n => n.state === "ready").length; return (
{/* Header */}
栅栏同步
{readyCount}/{nodes.length} 就绪
等待触发
{/* Left: Agent nodes */}
{nodes.map(node => (
{node.name}
{node.name === "CLA" ? "Claude Code" : node.name === "KIM" ? "Kimi CLI" : node.name === "OPC" ? "OpenCode" : "Tech Lead"}
{node.waitingFor && (
等待: {node.waitingFor}
)}
{node.state === "ready" ? ( ) : node.state === "waiting" ? ( ) : ( )}
))}
{/* Right: Sync points */}
同步检查点
{/* Progress line */}
{/* Completed portion */}
{/* Active flowing portion */}
{/* Dots */} {syncPoints.map((sp, i) => { const left = `${(i / (syncPoints.length - 1)) * 100}%`; return (
); })}
{/* Labels */}
{syncPoints.map(sp => (
{sp.name}
))}
{/* Status panel */}
⏸ 等待 DESIGN 检查点同步
触发条件:所有 Agent 调用 wait_for_meeting("design_review") · 已就绪 {readyCount}/{nodes.length}
); }