import React, { useMemo } from 'react'; import { RefreshCw, Activity, MessageSquare, Wrench, Sparkles, AlertTriangle, Workflow } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { useAppContext } from '../context/AppContext'; import StatCard from '../components/StatCard'; const Dashboard: React.FC = () => { const { t } = useTranslation(); const { isGatewayOnline, sessions, refreshAll, gatewayVersion, webuiVersion, skills, cfg, taskQueueItems, ekgSummary, } = useAppContext(); const subagentCount = useMemo(() => { const subagents = (cfg as any)?.agents?.subagents || {}; return Object.keys(subagents).length; }, [cfg]); const recentTasks = useMemo(() => { return [...taskQueueItems] .sort((a: any, b: any) => String(b.time || '').localeCompare(String(a.time || ''))) .slice(0, 8); }, [taskQueueItems]); const recentFailures = useMemo(() => { return recentTasks.filter((item: any) => String(item.status || '').toLowerCase() === 'error').slice(0, 5); }, [recentTasks]); const ekgEscalationCount = Number(ekgSummary?.escalation_count || 0); const ekgTopProvider = (Array.isArray(ekgSummary?.provider_top_workload) ? ekgSummary.provider_top_workload[0]?.key : '') || '-'; const ekgTopErrSig = (Array.isArray(ekgSummary?.errsig_top_workload) ? ekgSummary.errsig_top_workload[0]?.key : '') || '-'; return (

{t('dashboard')}

{t('gateway')}: {gatewayVersion} {' · '} {t('webui')}: {webuiVersion}
} /> } /> } /> } /> } />
{t('ekgEscalations')}
{ekgEscalationCount}
{t('dashboardTopErrorSignature')}: {ekgTopErrSig}
{t('ekgTopProvidersWorkload')}
{ekgTopProvider}
{t('dashboardWorkloadSnapshot')}
{t('taskAudit')}
{recentFailures.length}
{t('dashboardRecentFailedTasks')}

{t('taskAudit')}

{recentTasks.length === 0 ? (
-
) : recentTasks.map((task: any, index: number) => (
{task.task_id || `task-${index + 1}`}
{task.channel || '-'} · {task.source || '-'}
{task.status || '-'}
))}

{t('statusError')}

{recentFailures.length === 0 ? (
-
) : recentFailures.map((task: any, index: number) => (
{task.task_id || `task-${index + 1}`}
{task.source || '-'} · {task.channel || '-'}
{task.error || task.block_reason || '-'}
))}
); }; export default Dashboard;