Frontend (17 items): - Virtualized message list with batch loading - CSS split with skeleton, drawer, search filter, message action styles - Code splitting via React.lazy + Suspense for Admin/Ethics/Settings pages - Skeleton loading components (Skeleton, SkeletonCard, SkeletonGrid) - Debounced search/filter component (SearchFilter) - Error boundary with fallback UI - Keyboard shortcuts (Ctrl+K search, Ctrl+Enter send, Escape dismiss) - Page transition animations (fade-in) - PWA support (manifest.json + service worker) - WebSocket auto-reconnect with exponential backoff (10 retries) - Chat history persistence to localStorage (500 msg limit) - Message edit/delete on hover - Copy-to-clipboard on code blocks - Mobile drawer (bottom-sheet for consensus panel) - File upload support - User preferences sync to backend Testing (8 items): - Component tests: Toast, Markdown, ChatMessage, Avatar, ErrorBoundary, Skeleton - Hook tests: useChatHistory - E2E smoke tests (5 tests) - Accessibility audit utility Backend (12 items): - Vector memory with cosine similarity search - TTS/STT adapter factory wiring - Geometry kernel with orphan detection - Tenant registry with CRUD operations - Response cache with TTL - Connection pool (async) - Background task queue - Health check endpoints (/health, /ready) - Request tracing middleware (X-Request-ID) - API key rotation mechanism - Environment-based config (settings.py) - API route documentation improvements Infrastructure (4 items): - Grafana dashboard template - Database migration system - Storybook configuration Documentation (3 items): - ADR-001: Advisory Governance Model - ADR-002: Twelve-Head Architecture - ADR-003: Consequence Engine 552 Python tests + 45 frontend tests passing, 0 ruff errors. Co-Authored-By: Nakamoto, S <defi@defi-oracle.io>
75 lines
2.8 KiB
JSON
75 lines
2.8 KiB
JSON
{
|
|
"dashboard": {
|
|
"title": "FusionAGI Dvādaśa",
|
|
"description": "Performance monitoring for the 12-headed AGI orchestrator",
|
|
"tags": ["fusionagi", "ai", "orchestration"],
|
|
"timezone": "browser",
|
|
"panels": [
|
|
{
|
|
"title": "HTTP Request Rate",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0},
|
|
"targets": [{"expr": "rate(http_requests_total[5m])", "legendFormat": "{{method}} {{path}}"}]
|
|
},
|
|
{
|
|
"title": "Response Latency (p50/p95/p99)",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 0},
|
|
"targets": [
|
|
{"expr": "histogram_quantile(0.50, rate(http_request_duration_seconds_bucket[5m]))", "legendFormat": "p50"},
|
|
{"expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))", "legendFormat": "p95"},
|
|
{"expr": "histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))", "legendFormat": "p99"}
|
|
]
|
|
},
|
|
{
|
|
"title": "Error Rate",
|
|
"type": "stat",
|
|
"gridPos": {"h": 4, "w": 6, "x": 0, "y": 8},
|
|
"targets": [{"expr": "sum(rate(http_responses_total{status=~\"5..\"}[5m])) / sum(rate(http_responses_total[5m]))"}]
|
|
},
|
|
{
|
|
"title": "Active Sessions",
|
|
"type": "stat",
|
|
"gridPos": {"h": 4, "w": 6, "x": 6, "y": 8},
|
|
"targets": [{"expr": "fusionagi_active_sessions"}]
|
|
},
|
|
{
|
|
"title": "Head Analysis Duration",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 8},
|
|
"targets": [{"expr": "histogram_quantile(0.95, rate(head_analysis_duration_seconds_bucket[5m]))", "legendFormat": "{{head}}"}]
|
|
},
|
|
{
|
|
"title": "Consequence Engine Activity",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 16},
|
|
"targets": [
|
|
{"expr": "rate(consequence_choices_total[5m])", "legendFormat": "Choices"},
|
|
{"expr": "rate(consequence_surprises_total[5m])", "legendFormat": "Surprises"}
|
|
]
|
|
},
|
|
{
|
|
"title": "Cache Hit Rate",
|
|
"type": "gauge",
|
|
"gridPos": {"h": 4, "w": 6, "x": 12, "y": 16},
|
|
"targets": [{"expr": "sum(rate(cache_hits_total[5m])) / (sum(rate(cache_hits_total[5m])) + sum(rate(cache_misses_total[5m])))"}]
|
|
},
|
|
{
|
|
"title": "Connection Pool",
|
|
"type": "stat",
|
|
"gridPos": {"h": 4, "w": 6, "x": 18, "y": 16},
|
|
"targets": [
|
|
{"expr": "connection_pool_in_use", "legendFormat": "In Use"},
|
|
{"expr": "connection_pool_available", "legendFormat": "Available"}
|
|
]
|
|
}
|
|
],
|
|
"templating": {
|
|
"list": [
|
|
{"name": "datasource", "type": "datasource", "query": "prometheus"},
|
|
{"name": "instance", "type": "query", "query": "label_values(up{job=\"fusionagi\"}, instance)"}
|
|
]
|
|
}
|
|
}
|
|
}
|