'use client' import { useState } from 'react' import { AGENT_STEPS, STEP_PHASE } from '@/lib/types/run' import type { AgentStep } from '@/lib/types/run' import type { StepStatus } from '@/lib/types/agents' import AnalystReports from './AnalystReports' type Phase = 'analysts' | 'researchers' | 'trader' | 'risk' const TABS: { label: string; phase: Phase; count: string }[] = [ { label: 'Analysts', phase: 'analysts', count: '4' }, { label: 'Researchers', phase: 'researchers', count: '3' }, { label: 'Trader', phase: 'trader', count: '1' }, { label: 'Risk', phase: 'risk', count: '4' }, ] type Props = { steps: Record reports: Record tokensByStep: Record } function getPhaseCompletion(phase: Phase, steps: Record): number { const phaseSteps = AGENT_STEPS.filter((s) => STEP_PHASE[s] === phase) const done = phaseSteps.filter((s) => steps[s as AgentStep] === 'done').length return phaseSteps.length > 0 ? Math.round((done / phaseSteps.length) * 100) : 0 } function getPhaseStatus(phase: Phase, steps: Record): 'done' | 'running' | 'pending' { const phaseSteps = AGENT_STEPS.filter((s) => STEP_PHASE[s] === phase) if (phaseSteps.every((s) => steps[s as AgentStep] === 'done')) return 'done' if (phaseSteps.some((s) => steps[s as AgentStep] === 'running')) return 'running' return 'pending' } export default function PhaseTabs({ steps, reports, tokensByStep }: Props) { const [active, setActive] = useState('analysts') return (
{/* Section header */}
Agent Reports
{TABS.filter((t) => getPhaseCompletion(t.phase, steps) === 100).length} / {TABS.length} COMPLETE
{/* Tab bar */}
{TABS.map(({ label, phase, count }) => { const isActive = active === phase const status = getPhaseStatus(phase, steps) const isDone = status === 'done' const isRunning = status === 'running' return ( ) })}
{/* Reports */}
) }