"use client"; import { motion } from "framer-motion"; import { trustColor } from "../lib/theme"; import type { Observation } from "../lib/types"; const POS: [number, number][] = [ [50, 10], [88, 35], [76, 80], [24, 80], [12, 35], ]; const CENTER: [number, number] = [50, 50]; export default function SpecialistNetwork({ observation, trustDeltas, activeSpec, }: { observation: Observation | null; trustDeltas: Record; activeSpec: string | null; }) { const ids = observation?.available_specialists || observation?.available_workers || ["S0", "S1", "S2", "S3", "S4"]; return (
{ids.map((id, i) => { const [x, y] = POS[i]; const isActive = id === activeSpec; return ( ); })} {/* orchestrator */}
Orchestrator
{observation ? `Step ${observation.step_count}/${observation.max_steps}` : "—"}
{/* specialists */} {ids.map((id, i) => { const [x, y] = POS[i]; const trust = observation?.trust_snapshot[id] ?? 0.5; const delta = trustDeltas[id] ?? 0; const isActive = id === activeSpec; const isDanger = trust < 0.3; return (
{id}
{trust.toFixed(2)}
{delta !== 0 && (
0 ? "delta-up" : "delta-down"}`}> {delta > 0 ? "▲" : "▼"} {Math.abs(delta).toFixed(2)}
)}
); })}
); }