136 lines
3.4 KiB
TypeScript
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))
|
|
}
|