/** Agent outputs, each clearly labeled as advisory AI analysis with its * epistemic status, confidence basis and escalation triggers. */ import Accordion from '@mui/material/Accordion'; import AccordionDetails from '@mui/material/AccordionDetails'; import AccordionSummary from '@mui/material/AccordionSummary'; import Box from '@mui/material/Box'; import Chip from '@mui/material/Chip'; import Paper from '@mui/material/Paper'; import Typography from '@mui/material/Typography'; import { ChevronDown } from 'lucide-react'; import type { AgentResult } from '../../types/agentic'; import { EvidenceStatusChip, KV, OriginBadge, PanelTitle } from './common'; const AGENT_LABELS: Record = { failure_detection: 'Failure Detection Agent', vlm_scene_analysis: 'VLM Scene Analysis Agent', sensor_fusion_verification: 'Sensor Fusion Verification Agent', scenario_mining: 'Scenario Mining Agent', statistical_regression: 'Statistical Regression Agent', safety_impact: 'Safety Impact Agent', launch_decision: 'Launch Decision Agent (narrative only)', eval_flywheel: 'Eval Flywheel Agent', }; function summarize(agent: AgentResult): string { const o = agent.output; switch (agent.agent) { case 'vlm_scene_analysis': { const hyps = (o.hypotheses as { hypothesis: string }[] | undefined) ?? []; return hyps.map((h) => h.hypothesis).slice(0, 2).join(' · ') || 'no hypotheses'; } case 'sensor_fusion_verification': return `verdict: ${String(o.overall_verdict)}`; case 'scenario_mining': return `novelty: ${String(o.novelty)} · ${String((o.clusters as unknown[] | undefined)?.length ?? 0)} cluster(s)`; case 'safety_impact': return String(o.assessment ?? ''); case 'launch_decision': return `restates policy outcome ${String(o.restated_outcome)} (cannot change it)`; case 'eval_flywheel': return o.proposal ? `proposes suite ${String((o.proposal as Record).suite_name)}` : String(o.reason ?? ''); default: return ''; } } export default function AgentOutputsPanel({ agents }: { agents: AgentResult[] }) { return ( {agents.map((a) => ( }> {AGENT_LABELS[a.agent] ?? a.agent} {a.escalation.required ? ( ) : null} {summarize(a)} {a.escalation.required ? ( ) : null} {a.llm_rationale ? : null} {JSON.stringify(a.output, null, 2)} ))} ); }