mission-control/src/lib/dashboard-widgets.ts

136 lines
3.4 KiB
TypeScript

export interface DashboardWidget {
id: string
label: string
description: string
category: 'health' | 'sessions' | 'tasks' | 'metrics' | 'integrations' | 'events'
modes: ('local' | 'full')[]
defaultSize: 'sm' | 'md' | 'lg' | 'full'
component: string
}
export const WIDGET_CATALOG: DashboardWidget[] = [
{
id: 'metric-cards',
label: 'Key Metrics',
description: 'Top-line stats — sessions, load, tokens, cost',
category: 'metrics',
modes: ['local', 'full'],
defaultSize: 'full',
component: 'MetricCardsWidget',
},
{
id: 'runtime-health',
label: 'Runtime Health',
description: 'Local OS, Claude, Codex, and MC core health',
category: 'health',
modes: ['local'],
defaultSize: 'md',
component: 'RuntimeHealthWidget',
},
{
id: 'gateway-health',
label: 'Gateway Health',
description: 'Gateway golden signals — traffic, errors, saturation',
category: 'health',
modes: ['full'],
defaultSize: 'md',
component: 'GatewayHealthWidget',
},
{
id: 'session-workbench',
label: 'Session Workbench',
description: 'Live session list with activity indicators',
category: 'sessions',
modes: ['local', 'full'],
defaultSize: 'md',
component: 'SessionWorkbenchWidget',
},
{
id: 'event-stream',
label: 'Event Stream',
description: 'Merged log stream from all sources',
category: 'events',
modes: ['local', 'full'],
defaultSize: 'md',
component: 'EventStreamWidget',
},
{
id: 'task-flow',
label: 'Task Flow',
description: 'Task status counts — inbox, assigned, in progress, review, done',
category: 'tasks',
modes: ['local', 'full'],
defaultSize: 'sm',
component: 'TaskFlowWidget',
},
{
id: 'github-signal',
label: 'GitHub Signal',
description: 'GitHub repo stats — issues, stars, repos',
category: 'integrations',
modes: ['local'],
defaultSize: 'sm',
component: 'GithubSignalWidget',
},
{
id: 'security-audit',
label: 'Security & Audit',
description: 'Audit events, login failures, notifications',
category: 'events',
modes: ['full'],
defaultSize: 'sm',
component: 'SecurityAuditWidget',
},
{
id: 'maintenance',
label: 'Maintenance & Backup',
description: 'Backup status, pipeline health',
category: 'health',
modes: ['full'],
defaultSize: 'sm',
component: 'MaintenanceWidget',
},
{
id: 'quick-actions',
label: 'Quick Actions',
description: 'Navigation shortcuts to key panels',
category: 'sessions',
modes: ['local', 'full'],
defaultSize: 'full',
component: 'QuickActionsWidget',
},
]
export const LOCAL_DEFAULT_LAYOUT = [
'metric-cards',
'runtime-health',
'session-workbench',
'event-stream',
'task-flow',
'github-signal',
'quick-actions',
]
export const GATEWAY_DEFAULT_LAYOUT = [
'metric-cards',
'gateway-health',
'session-workbench',
'event-stream',
'task-flow',
'security-audit',
'maintenance',
'quick-actions',
]
export function getDefaultLayout(mode: 'local' | 'full'): string[] {
return mode === 'local' ? LOCAL_DEFAULT_LAYOUT : GATEWAY_DEFAULT_LAYOUT
}
export function getWidgetById(id: string): DashboardWidget | undefined {
return WIDGET_CATALOG.find((w) => w.id === id)
}
export function getAvailableWidgets(mode: 'local' | 'full'): DashboardWidget[] {
return WIDGET_CATALOG.filter((w) => w.modes.includes(mode))
}