import { useQuery } from '@tanstack/react-query'; import { Activity, AlertTriangle, CheckCircle, ChevronRight, Cpu, ExternalLink, GitBranch, GitMerge, Globe, Layers, Network, RefreshCw, Shield, Zap, } from 'lucide-react'; import { Link } from 'wouter'; const BASE = import.meta.env.BASE_URL?.replace(/\/$/, '') || ''; interface DomainTwinSummary { domain: string; label: string; color: string; twinCount: number; stableCount: number; degradedCount: number; awaitingCount: number; driftAvg: number; pendingActions: number; worldline: string; appPath: string; atlasRuntimePath?: string; icon: typeof Globe; } const DOMAIN_CONFIG: Omit< DomainTwinSummary, | 'twinCount' | 'stableCount' | 'degradedCount' | 'awaitingCount' | 'driftAvg' | 'pendingActions' | 'worldline' >[] = [ { domain: 'aegis', label: 'Sentra — Cyber Resilience', color: '#c9b787', appPath: '/sentra', icon: Shield }, { domain: 'terra', label: "DOMAINE — Real Estate", color: '#10b981', appPath: '/terra', atlasRuntimePath: '/terra/atlas-runtime', icon: Globe, }, { domain: 'vessels', label: 'SEXTANT — Maritime', color: '#06b6d4', appPath: '/vessels', atlasRuntimePath: '/vessels/atlas-runtime', icon: Network, }, { domain: 'continuum', label: 'Counsel — Execution', color: '#4B8BDB', appPath: `${BASE}/operations`, icon: Zap, }, { domain: 'prism', label: 'Prism — Counsel', color: '#f59e0b', appPath: `${BASE}/operations/prism`, icon: Activity, }, { domain: 'lyte', label: "KORA — AIOps", color: '#d4a054', appPath: `${BASE}/operations`, icon: Activity, }, ]; const DEMO_SUMMARIES: DomainTwinSummary[] = [ { ...DOMAIN_CONFIG[0], twinCount: 8, stableCount: 5, degradedCount: 2, awaitingCount: 1, driftAvg: 12, pendingActions: 4, worldline: 'WL-BETA', }, { ...DOMAIN_CONFIG[1], twinCount: 4, stableCount: 4, degradedCount: 0, awaitingCount: 0, driftAvg: 4, pendingActions: 0, worldline: 'WL-ALPHA', }, { ...DOMAIN_CONFIG[2], twinCount: 6, stableCount: 5, degradedCount: 0, awaitingCount: 1, driftAvg: 8, pendingActions: 2, worldline: 'WL-DELTA', }, { ...DOMAIN_CONFIG[3], twinCount: 3, stableCount: 3, degradedCount: 0, awaitingCount: 0, driftAvg: 2, pendingActions: 0, worldline: 'WL-ALPHA', }, { ...DOMAIN_CONFIG[4], twinCount: 2, stableCount: 2, degradedCount: 0, awaitingCount: 0, driftAvg: 3, pendingActions: 0, worldline: 'WL-ALPHA', }, { ...DOMAIN_CONFIG[5], twinCount: 4, stableCount: 2, degradedCount: 2, awaitingCount: 0, driftAvg: 18, pendingActions: 4, worldline: 'WL-BETA', }, ]; interface AtlasBranchEvent { id: string; domain: 'vessels' | 'terra'; domainLabel: string; domainColor: string; type: 'branch_activated' | 'scenario_simulation' | 'drift_spike' | 'worldline_merge'; title: string; description: string; severity: 'info' | 'warning' | 'critical'; ts: string; atlasPath: string; } const EVENT_TYPE_META: Record< AtlasBranchEvent['type'], { label: string; icon: typeof GitBranch; color: string } > = { branch_activated: { label: 'Branch Activated', icon: GitBranch, color: '#8b7ac8' }, scenario_simulation: { label: 'Scenario Sim', icon: Cpu, color: '#06b6d4' }, drift_spike: { label: 'Drift Spike', icon: AlertTriangle, color: '#f59e0b' }, worldline_merge: { label: 'Worldline Merge', icon: GitMerge, color: '#10b981' }, }; const SEV_STYLE: Record< AtlasBranchEvent['severity'], { bg: string; border: string; badgeText: string } > = { info: { bg: 'rgba(255,255,255,0.01)', border: 'rgba(255,255,255,0.06)', badgeText: 'rgba(255,255,255,0.35)', }, warning: { bg: 'rgba(192,138,44,0.04)', border: 'rgba(192,138,44,0.2)', badgeText: '#f59e0b' }, critical: { bg: 'rgba(239,68,68,0.05)', border: 'rgba(239,68,68,0.22)', badgeText: '#f87171' }, }; function relTime(iso: string) { const diff = Date.now() - new Date(iso).getTime(); const m = Math.floor(diff / 60000); if (m < 60) return `${m}m ago`; const h = Math.floor(m / 60); if (h < 24) return `${h}h ago`; return `${Math.floor(h / 24)}d ago`; } interface ApiRunSummary { domain: string; runCount: number; successCount: number; pendingCount: number; } function useAtlasRunSummary() { return useQuery<{ data: ApiRunSummary[] }>({ queryKey: ['atlas-run-summary'], queryFn: async () => { const domains = ['aegis', 'vessels', 'terra']; const results = await Promise.all( domains.map(async (d) => { try { const r = await fetch(`/api/${d}/atlas/runs?limit=5`); if (!r.ok) return null; const body = await r.json(); const runs: { status?: string }[] = body?.data?.runs ?? body?.runs ?? []; return { domain: d, runCount: runs.length, successCount: runs.filter((r) => r.status === 'completed').length, pendingCount: runs.filter((r) => r.status === 'pending' || r.status === 'running') .length, } as ApiRunSummary; } catch { return null; } }), ); return { data: results.filter(Boolean) as ApiRunSummary[] }; }, staleTime: 60_000, retry: 1, }); } interface CrossDomainSummaryResponse { domains: Array<{ domain: string; twinCount: number; stableCount: number; degradedCount: number; avgDriftScore: number; activeBranches: number; lastSync: string; }>; totals: { totalTwins: number; stableTotal: number; degradedTotal: number; activeBranchesTotal: number; avgDriftScore: number; }; generatedAt: string; } function useCrossDomainSummary() { return useQuery({ queryKey: ['atlas-cross-domain-summary'], queryFn: () => fetch('/api/atlas/spatial/cross-domain/summary') .then((r) => (r.ok ? r.json() : Promise.reject(r.status))) .then((r) => r.data ?? r), staleTime: 60_000, retry: 1, }); } interface ApiAtlasBranch { id?: number; branchId: string; name: string; description?: string | null; twinId: string; entityId: string; twinCategory: string; status: 'pending' | 'running' | 'completed' | 'failed' | 'archived'; riskAssessment?: string | null; recommendedActions?: string[]; parameters?: Record; deltaMetrics?: Record; confidenceScore?: number; metadata?: Record | null; completedAt?: string | null; createdAt?: string | null; } interface AtlasBranchesResponse { data: { branches: ApiAtlasBranch[]; count: number }; } function useAtlasBranches(twinCategory: 'vessel' | 'property') { return useQuery({ queryKey: ['atlas-branches', twinCategory], queryFn: () => fetch(`/api/atlas/spatial/branches?twinCategory=${twinCategory}&limit=25`).then((r) => r.ok ? r.json() : Promise.reject(r.status), ), staleTime: 60_000, retry: 1, }); } function branchToEvent(b: ApiAtlasBranch): AtlasBranchEvent { const isVessel = b.twinCategory === 'vessel'; const domain: AtlasBranchEvent['domain'] = isVessel ? 'vessels' : 'terra'; const domainLabel = isVessel ? 'SEXTANT' : 'DOMAINE'; const domainColor = isVessel ? '#06b6d4' : '#10b981'; const atlasPath = isVessel ? '/vessels/atlas-runtime' : '/terra/atlas-runtime'; let type: AtlasBranchEvent['type'] = 'scenario_simulation'; if (b.status === 'completed') type = 'branch_activated'; else if (b.status === 'archived') type = 'worldline_merge'; else if (b.status === 'failed') type = 'drift_spike'; else type = 'scenario_simulation'; let severity: AtlasBranchEvent['severity'] = 'info'; const risk = (b.riskAssessment ?? '').toLowerCase(); if (b.status === 'failed' || risk.includes('critical') || risk.includes('high')) { severity = 'critical'; } else if ( b.status === 'pending' || b.status === 'running' || risk.includes('warn') || risk.includes('medium') ) { severity = 'warning'; } const description = b.description ?? b.riskAssessment ?? (b.recommendedActions && b.recommendedActions.length > 0 ? b.recommendedActions.join(' • ') : `${b.twinCategory} twin ${b.entityId} — status ${b.status}`); const ts = b.completedAt ?? b.createdAt ?? new Date(0).toISOString(); return { id: b.branchId, domain, domainLabel, domainColor, type, title: b.name, description, severity, ts, atlasPath, }; } export function AtlasKpiSection() { const { data: runData, isLoading } = useAtlasRunSummary(); const { data: crossDomain } = useCrossDomainSummary(); const { data: vesselBranches, isLoading: vesselsLoading, isError: vesselsError, } = useAtlasBranches('vessel'); const { data: propertyBranches, isLoading: propertyLoading, isError: propertyError, } = useAtlasBranches('property'); const runSummaries: ApiRunSummary[] = runData?.data ?? []; const liveBranches = [ ...(vesselBranches?.data?.branches ?? []), ...(propertyBranches?.data?.branches ?? []), ]; const liveEvents = liveBranches .map(branchToEvent) .sort((a, b) => new Date(b.ts).getTime() - new Date(a.ts).getTime()) .slice(0, 8); const branchesLoading = vesselsLoading || propertyLoading; const branchesPartialError = (vesselsError || propertyError) && !(vesselsError && propertyError); const branchesAllError = vesselsError && propertyError; const totalTwins = crossDomain?.totals.totalTwins ?? DEMO_SUMMARIES.reduce((s, d) => s + d.twinCount, 0); const totalDegraded = crossDomain?.totals.degradedTotal ?? DEMO_SUMMARIES.reduce((s, d) => s + d.degradedCount + d.awaitingCount, 0); const totalPending = DEMO_SUMMARIES.reduce((s, d) => s + d.pendingActions, 0); const stableTotal = crossDomain?.totals.stableTotal ?? DEMO_SUMMARIES.reduce((s, d) => s + d.stableCount, 0); const stablePercent = totalTwins > 0 ? Math.round((stableTotal / totalTwins) * 100) : 0; const isActiveBranch = (s: ApiAtlasBranch['status']) => s === 'completed' || s === 'running'; const activeBranchesVessels = vesselBranches?.data?.branches?.filter((b) => isActiveBranch(b.status)).length ?? crossDomain?.domains?.find((d) => d.domain === 'vessels')?.activeBranches ?? 0; const activeBranchesTerra = propertyBranches?.data?.branches?.filter((b) => isActiveBranch(b.status)).length ?? crossDomain?.domains?.find((d) => d.domain === 'terra')?.activeBranches ?? 0; return (
ATLAS Spatial Runtime — Cross-Domain Health
{totalDegraded > 0 && ( {totalDegraded} twin{totalDegraded !== 1 ? 's' : ''} need attention )} Twin View Worldlines →
{[ { label: 'Total Twins', value: totalTwins, color: '#8b7ac8' }, { label: 'Stable', value: `${stablePercent}%`, color: '#10b981' }, { label: 'Need Attention', value: totalDegraded, color: totalDegraded > 0 ? '#f59e0b' : '#10b981', pulse: totalDegraded > 0, }, { label: 'Pending Actions', value: totalPending, color: totalPending > 0 ? '#ef4444' : '#10b981', pulse: totalPending > 0, }, ].map((c) => (
{c.label}
{c.pulse && ( )}
{c.value}
))}
{DEMO_SUMMARIES.map((d) => { const DIcon = d.icon; const isHealthy = d.degradedCount === 0 && d.awaitingCount === 0; const statusColor = isHealthy ? '#10b981' : d.degradedCount > 0 ? '#f59e0b' : '#8b7ac8'; const runInfo = runSummaries.find((r) => r.domain === d.domain); const activeBranches = d.domain === 'vessels' ? activeBranchesVessels : d.domain === 'terra' ? activeBranchesTerra : undefined; return (
{d.label}
{isHealthy ? ( ) : ( )}
{[ { label: 'Twins', value: d.twinCount, color: 'rgba(255,255,255,0.6)' }, { label: 'Stable', value: d.stableCount, color: '#10b981' }, { label: 'Drift Avg', value: `Δ${d.driftAvg}%`, color: d.driftAvg <= 5 ? '#10b981' : d.driftAvg <= 15 ? '#f59e0b' : '#ef4444', }, ].map((m) => (
{m.label}
{m.value}
))}
{activeBranches !== undefined && (
{activeBranches} {' '} active branch{activeBranches !== 1 ? 'es' : ''}
)}
{d.worldline} {d.pendingActions > 0 && ( {d.pendingActions} pending )}
{runInfo && ( {runInfo.runCount} run{runInfo.runCount !== 1 ? 's' : ''} {runInfo.pendingCount > 0 && ( ({runInfo.pendingCount} active) )} )} {isLoading && !runInfo && ( )} {d.atlasRuntimePath && ( ATLAS )}
); })}
What Changed — ATLAS Branch Activations & Scenarios
{branchesPartialError && (
{vesselsError ? 'SEXTANT' : 'DOMAINE'} ATLAS branch feed temporarily unavailable — showing partial results.
)} {liveEvents.length === 0 && (
{branchesLoading ? 'Loading recent ATLAS branch activity…' : branchesAllError ? 'ATLAS branch feed temporarily unavailable.' : 'No recent ATLAS branch activations or scenario simulations.'}
)}
{liveEvents.map((ev) => { const meta = EVENT_TYPE_META[ev.type]; const MetaIcon = meta.icon; const sev = SEV_STYLE[ev.severity]; return (
{ev.domainLabel} {meta.label} {ev.severity !== 'info' && ( {ev.severity} )} {relTime(ev.ts)}
{ev.title}
{ev.description}
); })}
); }