genoma-evolution 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.brv/.obsidian/app.json +1 -0
- package/.brv/.obsidian/appearance.json +1 -0
- package/.brv/.obsidian/core-plugins.json +33 -0
- package/.brv/.obsidian/graph.json +22 -0
- package/.brv/.obsidian/workspace.json +195 -0
- package/.brv/Sin ti/314/201tulo 1.canvas" +1 -0
- package/.brv/Sin ti/314/201tulo 2.canvas" +1 -0
- package/.brv/Sin ti/314/201tulo.canvas" +1 -0
- package/.brv/_queue_status.json +1 -0
- package/.brv/config.json +5 -0
- package/.brv/context-tree/_index.md +60 -0
- package/.brv/context-tree/_manifest.json +165 -0
- package/.brv/context-tree/backend/_index.md +24 -0
- package/.brv/context-tree/backend/backend/_index.md +40 -0
- package/.brv/context-tree/backend/backend/init.abstract.md +0 -0
- package/.brv/context-tree/backend/backend/init.md +27 -0
- package/.brv/context-tree/backend/backend/init.overview.md +29 -0
- package/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
- package/.brv/context-tree/backend/backend/job_tracker.md +273 -0
- package/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
- package/.brv/context-tree/backend/backend/main.abstract.md +0 -0
- package/.brv/context-tree/backend/backend/main.md +1292 -0
- package/.brv/context-tree/backend/backend/main.overview.md +30 -0
- package/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
- package/.brv/context-tree/backend/backend/requirements.md +37 -0
- package/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
- package/.brv/context-tree/docs/_index.md +37 -0
- package/.brv/context-tree/docs/api/_index.md +54 -0
- package/.brv/context-tree/docs/api/context.md +11 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
- package/.brv/context-tree/frontend/_index.md +48 -0
- package/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
- package/.brv/context-tree/frontend/src/_index.md +53 -0
- package/.brv/context-tree/frontend/src/components/_index.md +52 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
- package/.brv/context-tree/frontend/src/context.md +10 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
- package/.brv/context-tree/frontend/src/lib/_index.md +48 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
- package/.brv/context-tree/frontend/src/page.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/page.md +103 -0
- package/.brv/context-tree/frontend/src/page.overview.md +7 -0
- package/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/settingspage.md +124 -0
- package/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
- package/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/sidebar.md +170 -0
- package/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
- package/.brv/context-tree/meta/_index.md +24 -0
- package/.brv/context-tree/meta/curation_context/_index.md +24 -0
- package/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
- package/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
- package/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
- package/.brv/dream-log/drm-1777341062653.json +33 -0
- package/.brv/dream-state.json +8 -0
- package/.brv/dream.lock +0 -0
- package/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/settings.local.json +7 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/app.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/appearance.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/core-plugins.json +33 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/graph.json +22 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/workspace.json +195 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 1.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 2.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/_queue_status.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/config.json +5 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_index.md +60 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_manifest.json +165 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/_index.md +40 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.md +27 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.overview.md +29 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.md +273 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.md +1292 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.overview.md +30 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.md +37 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/_index.md +37 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/_index.md +54 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/context.md +11 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/_index.md +48 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/_index.md +53 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/_index.md +52 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/context.md +10 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/_index.md +48 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.md +103 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.overview.md +7 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.md +124 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.md +170 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream-log/drm-1777341062653.json +33 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream-state.json +8 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream.lock +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/worktrees/phase-2-mcp/.claude/settings.local.json +13 -0
- package/.claude/worktrees/phase-2-mcp/.kilocode/package-lock.json +378 -0
- package/.claude/worktrees/phase-2-mcp/.kilocode/package.json +5 -0
- package/.claude/worktrees/phase-2-mcp/AGENTS.md +5 -0
- package/.claude/worktrees/phase-2-mcp/CLAUDE.md +29 -0
- package/.claude/worktrees/phase-2-mcp/QA_AUDIT_PLAN.md +156 -0
- package/.claude/worktrees/phase-2-mcp/README.md +316 -0
- package/.claude/worktrees/phase-2-mcp/agent-agnostic-evolution-dashboard.md +405 -0
- package/.claude/worktrees/phase-2-mcp/backend/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/claude_code_collector.py +277 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/hermes_collector.py +68 -0
- package/.claude/worktrees/phase-2-mcp/backend/curator.py +512 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/__init__.py +19 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/engine.py +116 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/scorers.py +201 -0
- package/.claude/worktrees/phase-2-mcp/backend/generate_dataset.py +86 -0
- package/.claude/worktrees/phase-2-mcp/backend/job_tracker.py +232 -0
- package/.claude/worktrees/phase-2-mcp/backend/main.py +1746 -0
- package/.claude/worktrees/phase-2-mcp/backend/mcp_server.py +250 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/__init__.py +24 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/cycle_orchestrator.py +270 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/delta_validator.py +191 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/dspy_compiler.py +315 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/gepa_strategist.py +213 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/models.py +260 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/skill_deployer.py +195 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/trace_ingestion.py +142 -0
- package/.claude/worktrees/phase-2-mcp/backend/requirements.txt +6 -0
- package/.claude/worktrees/phase-2-mcp/backend/sdd_evolve.py +459 -0
- package/.claude/worktrees/phase-2-mcp/backend/skill_detector.py +227 -0
- package/.claude/worktrees/phase-2-mcp/backend/skill_registry.py +289 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/__init__.py +5 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/run_store.py +393 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/schema.sql +99 -0
- package/.claude/worktrees/phase-2-mcp/backend/validate_evolution.py +267 -0
- package/.claude/worktrees/phase-2-mcp/components.json +28 -0
- package/.claude/worktrees/phase-2-mcp/docs/api/hermes-api.openapi.yaml +438 -0
- package/.claude/worktrees/phase-2-mcp/docs/hero.svg +148 -0
- package/.claude/worktrees/phase-2-mcp/eslint.config.mjs +18 -0
- package/.claude/worktrees/phase-2-mcp/install.sh +245 -0
- package/.claude/worktrees/phase-2-mcp/next-env.d.ts +6 -0
- package/.claude/worktrees/phase-2-mcp/next.config.ts +32 -0
- package/.claude/worktrees/phase-2-mcp/package-lock.json +11936 -0
- package/.claude/worktrees/phase-2-mcp/package.json +41 -0
- package/.claude/worktrees/phase-2-mcp/pnpm-workspace.yaml +4 -0
- package/.claude/worktrees/phase-2-mcp/postcss.config.mjs +7 -0
- package/.claude/worktrees/phase-2-mcp/public/file.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Bold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Medium.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Regular.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/globe.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/next.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/theme-preview.html +257 -0
- package/.claude/worktrees/phase-2-mcp/public/vercel.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/window.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/run.sh +26 -0
- package/.claude/worktrees/phase-2-mcp/skills-lock.json +10 -0
- package/.claude/worktrees/phase-2-mcp/specs/event-schema.md +223 -0
- package/.claude/worktrees/phase-2-mcp/specs/examples/run.jsonl +3 -0
- package/.claude/worktrees/phase-2-mcp/src/app/api/[...path]/route.ts +55 -0
- package/.claude/worktrees/phase-2-mcp/src/app/api/auth/token/route.ts +22 -0
- package/.claude/worktrees/phase-2-mcp/src/app/evolution/page.tsx +589 -0
- package/.claude/worktrees/phase-2-mcp/src/app/favicon.ico +0 -0
- package/.claude/worktrees/phase-2-mcp/src/app/globals.css +321 -0
- package/.claude/worktrees/phase-2-mcp/src/app/layout.tsx +63 -0
- package/.claude/worktrees/phase-2-mcp/src/app/page.tsx +70 -0
- package/.claude/worktrees/phase-2-mcp/src/app/skills/page.tsx +369 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ApiConfigCard.tsx +199 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.css +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.d.ts +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.jsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/CoreLoopToggle.tsx +111 -0
- package/.claude/worktrees/phase-2-mcp/src/components/EnvironmentStatus.tsx +176 -0
- package/.claude/worktrees/phase-2-mcp/src/components/EvolutionBackground.tsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ReactQueryProvider.tsx +24 -0
- package/.claude/worktrees/phase-2-mcp/src/components/Sidebar.tsx +247 -0
- package/.claude/worktrees/phase-2-mcp/src/components/SkillDiffViewer.tsx +154 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ThemeAwareBackground.tsx +67 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ThemeToggle.tsx +54 -0
- package/.claude/worktrees/phase-2-mcp/src/components/WelcomeHero.tsx +77 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ClickSpark.tsx +116 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/CountUp.tsx +98 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/DarkSelect.tsx +95 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/DecryptedText.tsx +161 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ElectricBorder.tsx +184 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/GlitchText.tsx +34 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ShinyText.tsx +55 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/SpotlightCard.tsx +42 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/TextType.tsx +95 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/index.ts +9 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/CuratorPage.tsx +632 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/DatasetPage.tsx +271 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/EvolutionPage.tsx +676 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/FunctionCallingPage.tsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/LogsPage.tsx +272 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/MetricsPage.tsx +246 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/OverviewPage.tsx +420 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/SettingsPage.tsx +88 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/SkillStudioPage.tsx +376 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/animated-theme-toggler.tsx +97 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/button.tsx +67 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/card.tsx +103 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/input.tsx +19 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/separator.tsx +28 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/sheet.tsx +147 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/sidebar.tsx +702 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/skeleton.tsx +13 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/theme-toggle.tsx +272 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/tooltip.tsx +57 -0
- package/.claude/worktrees/phase-2-mcp/src/hooks/use-mobile.ts +19 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/api.ts +455 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/queryClient.ts +12 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/utils.ts +6 -0
- package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
- package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/prototype.html +676 -0
- package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/code.html +448 -0
- package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/datasets/code.html +479 -0
- package/.claude/worktrees/phase-2-mcp/stitch/datasets/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/code.html +461 -0
- package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN.md +192 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/code.html +399 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/live_logs/code.html +324 -0
- package/.claude/worktrees/phase-2-mcp/stitch/live_logs/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/code.html +596 -0
- package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/code.html +527 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_settings/code.html +257 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_settings/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/test_dashboard.py +201 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/fixtures/sample_session.jsonl +7 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/test_claude_code_collector.py +171 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/test_hermes_collector.py +167 -0
- package/.claude/worktrees/phase-2-mcp/tests/eval/test_engine.py +234 -0
- package/.claude/worktrees/phase-2-mcp/tests/eval/test_scorers.py +249 -0
- package/.claude/worktrees/phase-2-mcp/tests/storage/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/tests/storage/test_run_store.py +359 -0
- package/.claude/worktrees/phase-2-mcp/tests/test_curator.py +559 -0
- package/.claude/worktrees/phase-2-mcp/tests/test_mcp_server.py +114 -0
- package/.claude/worktrees/phase-2-mcp/tsconfig.json +34 -0
- package/.env.example +72 -0
- package/.kilocode/package-lock.json +378 -0
- package/.kilocode/package.json +5 -0
- package/AGENTS.md +5 -0
- package/CLAUDE.md +29 -0
- package/QA_AUDIT_PLAN.md +156 -0
- package/README.md +355 -0
- package/agent-agnostic-evolution-dashboard.md +405 -0
- package/backend/__init__.py +0 -0
- package/backend/collectors/__init__.py +0 -0
- package/backend/collectors/claude_code_collector.py +277 -0
- package/backend/collectors/hermes_collector.py +68 -0
- package/backend/curator.py +512 -0
- package/backend/eval/__init__.py +19 -0
- package/backend/eval/engine.py +116 -0
- package/backend/eval/scorers.py +201 -0
- package/backend/generate_dataset.py +86 -0
- package/backend/job_tracker.py +232 -0
- package/backend/main.py +1746 -0
- package/backend/mcp_server.py +250 -0
- package/backend/promethean/__init__.py +24 -0
- package/backend/promethean/cycle_orchestrator.py +270 -0
- package/backend/promethean/delta_validator.py +191 -0
- package/backend/promethean/dspy_compiler.py +315 -0
- package/backend/promethean/gepa_strategist.py +213 -0
- package/backend/promethean/models.py +260 -0
- package/backend/promethean/skill_deployer.py +195 -0
- package/backend/promethean/trace_ingestion.py +142 -0
- package/backend/requirements.txt +6 -0
- package/backend/sdd_evolve.py +459 -0
- package/backend/skill_detector.py +227 -0
- package/backend/skill_registry.py +289 -0
- package/backend/storage/__init__.py +5 -0
- package/backend/storage/run_store.py +393 -0
- package/backend/storage/schema.sql +99 -0
- package/backend/validate_evolution.py +267 -0
- package/bin/genoma.js +250 -0
- package/components.json +28 -0
- package/docs/api/hermes-api.openapi.yaml +438 -0
- package/docs/hero.svg +148 -0
- package/eslint.config.mjs +18 -0
- package/install.sh +245 -0
- package/next-env.d.ts +6 -0
- package/next.config.ts +32 -0
- package/package.json +46 -0
- package/pnpm-workspace.yaml +4 -0
- package/postcss.config.mjs +7 -0
- package/public/file.svg +1 -0
- package/public/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/public/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/public/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/public/fonts/SF-Pro-Text-Bold.otf +0 -0
- package/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
- package/public/fonts/SF-Pro-Text-Medium.otf +0 -0
- package/public/fonts/SF-Pro-Text-Regular.otf +0 -0
- package/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/theme-preview.html +257 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/run.sh +26 -0
- package/scripts/postinstall.js +50 -0
- package/skills-lock.json +10 -0
- package/specs/event-schema.md +223 -0
- package/specs/examples/run.jsonl +3 -0
- package/src/app/api/[...path]/route.ts +55 -0
- package/src/app/api/auth/token/route.ts +22 -0
- package/src/app/evolution/page.tsx +589 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +321 -0
- package/src/app/layout.tsx +63 -0
- package/src/app/page.tsx +70 -0
- package/src/app/skills/page.tsx +369 -0
- package/src/components/ApiConfigCard.tsx +199 -0
- package/src/components/ColorBends.css +1 -0
- package/src/components/ColorBends.d.ts +1 -0
- package/src/components/ColorBends.jsx +1 -0
- package/src/components/CoreLoopToggle.tsx +111 -0
- package/src/components/EnvironmentStatus.tsx +176 -0
- package/src/components/EvolutionBackground.tsx +1 -0
- package/src/components/ReactQueryProvider.tsx +24 -0
- package/src/components/Sidebar.tsx +247 -0
- package/src/components/SkillDiffViewer.tsx +154 -0
- package/src/components/ThemeAwareBackground.tsx +67 -0
- package/src/components/ThemeToggle.tsx +54 -0
- package/src/components/WelcomeHero.tsx +77 -0
- package/src/components/bits/ClickSpark.tsx +116 -0
- package/src/components/bits/CountUp.tsx +98 -0
- package/src/components/bits/DarkSelect.tsx +95 -0
- package/src/components/bits/DecryptedText.tsx +161 -0
- package/src/components/bits/ElectricBorder.tsx +184 -0
- package/src/components/bits/GlitchText.tsx +34 -0
- package/src/components/bits/ShinyText.tsx +55 -0
- package/src/components/bits/SpotlightCard.tsx +42 -0
- package/src/components/bits/TextType.tsx +95 -0
- package/src/components/bits/index.ts +9 -0
- package/src/components/pages/CuratorPage.tsx +632 -0
- package/src/components/pages/DatasetPage.tsx +271 -0
- package/src/components/pages/EvolutionPage.tsx +676 -0
- package/src/components/pages/FunctionCallingPage.tsx +1 -0
- package/src/components/pages/LogsPage.tsx +272 -0
- package/src/components/pages/MetricsPage.tsx +246 -0
- package/src/components/pages/OverviewPage.tsx +420 -0
- package/src/components/pages/SettingsPage.tsx +88 -0
- package/src/components/pages/SkillStudioPage.tsx +376 -0
- package/src/components/ui/animated-theme-toggler.tsx +97 -0
- package/src/components/ui/button.tsx +67 -0
- package/src/components/ui/card.tsx +103 -0
- package/src/components/ui/input.tsx +19 -0
- package/src/components/ui/separator.tsx +28 -0
- package/src/components/ui/sheet.tsx +147 -0
- package/src/components/ui/sidebar.tsx +702 -0
- package/src/components/ui/skeleton.tsx +13 -0
- package/src/components/ui/theme-toggle.tsx +272 -0
- package/src/components/ui/tooltip.tsx +57 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/lib/api.ts +455 -0
- package/src/lib/queryClient.ts +12 -0
- package/src/lib/utils.ts +6 -0
- package/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
- package/stitch/agent_dashboard/prototype.html +676 -0
- package/stitch/curator_workspace/code.html +448 -0
- package/stitch/curator_workspace/screen.png +0 -0
- package/stitch/datasets/code.html +479 -0
- package/stitch/datasets/screen.png +0 -0
- package/stitch/evolution_history/code.html +461 -0
- package/stitch/evolution_history/screen.png +0 -0
- package/stitch/hermes_dashboard/DESIGN.md +192 -0
- package/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
- package/stitch/hermes_overview/code.html +399 -0
- package/stitch/hermes_overview/screen.png +0 -0
- package/stitch/live_logs/code.html +324 -0
- package/stitch/live_logs/screen.png +0 -0
- package/stitch/skill_hub/code.html +596 -0
- package/stitch/skill_hub/screen.png +0 -0
- package/stitch/system_metrics/code.html +527 -0
- package/stitch/system_metrics/screen.png +0 -0
- package/stitch/system_settings/code.html +257 -0
- package/stitch/system_settings/screen.png +0 -0
- package/test_dashboard.py +201 -0
- package/tests/collectors/__init__.py +0 -0
- package/tests/collectors/fixtures/sample_session.jsonl +7 -0
- package/tests/collectors/test_claude_code_collector.py +171 -0
- package/tests/collectors/test_hermes_collector.py +167 -0
- package/tests/eval/test_engine.py +234 -0
- package/tests/eval/test_scorers.py +249 -0
- package/tests/storage/__init__.py +0 -0
- package/tests/storage/test_run_store.py +359 -0
- package/tests/test_curator.py +559 -0
- package/tests/test_e2e_npm.py +621 -0
- package/tests/test_mcp_server.py +114 -0
- package/tsconfig.json +34 -0
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html class="light" lang="en"><head>
|
|
4
|
+
<meta charset="utf-8"/>
|
|
5
|
+
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
|
6
|
+
<title>Hermes Control - Metrics</title>
|
|
7
|
+
<!-- Google Fonts -->
|
|
8
|
+
<link href="https://fonts.googleapis.com" rel="preconnect"/>
|
|
9
|
+
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"/>
|
|
11
|
+
<!-- Material Symbols -->
|
|
12
|
+
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
13
|
+
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
14
|
+
<style>
|
|
15
|
+
.material-symbols-outlined {
|
|
16
|
+
font-family: 'Material Symbols Outlined';
|
|
17
|
+
font-weight: normal;
|
|
18
|
+
font-style: normal;
|
|
19
|
+
font-size: 20px; /* Default sizing, adjusted by utility classes if needed */
|
|
20
|
+
line-height: 1;
|
|
21
|
+
letter-spacing: normal;
|
|
22
|
+
text-transform: none;
|
|
23
|
+
display: inline-block;
|
|
24
|
+
white-space: nowrap;
|
|
25
|
+
word-wrap: normal;
|
|
26
|
+
direction: ltr;
|
|
27
|
+
-webkit-font-feature-settings: 'liga';
|
|
28
|
+
-webkit-font-smoothing: antialiased;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Shimmer effect for skeleton loaders or generic live data simulation */
|
|
32
|
+
@keyframes shimmer {
|
|
33
|
+
0% { background-position: -1000px 0; }
|
|
34
|
+
100% { background-position: 1000px 0; }
|
|
35
|
+
}
|
|
36
|
+
.animate-shimmer {
|
|
37
|
+
background: linear-gradient(to right, #f4f3f6 4%, #e9e8eb 25%, #f4f3f6 36%);
|
|
38
|
+
background-size: 1000px 100%;
|
|
39
|
+
animation: shimmer 2s infinite linear;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Subtle grid background for chart areas */
|
|
43
|
+
.bg-chart-grid {
|
|
44
|
+
background-image: linear-gradient(to right, rgba(195, 198, 207, 0.1) 1px, transparent 1px),
|
|
45
|
+
linear-gradient(to bottom, rgba(195, 198, 207, 0.1) 1px, transparent 1px);
|
|
46
|
+
background-size: 24px 24px;
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
49
|
+
<!-- Tailwind CSS -->
|
|
50
|
+
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
|
51
|
+
<!-- Tailwind Configuration -->
|
|
52
|
+
<script id="tailwind-config">
|
|
53
|
+
tailwind.config = {
|
|
54
|
+
darkMode: "class",
|
|
55
|
+
theme: {
|
|
56
|
+
extend: {
|
|
57
|
+
"colors": {
|
|
58
|
+
"on-background": "#1a1c1e",
|
|
59
|
+
"surface-tint": "#446083",
|
|
60
|
+
"on-tertiary-container": "#8b8a89",
|
|
61
|
+
"surface-container": "#eeedf1",
|
|
62
|
+
"inverse-surface": "#2f3033",
|
|
63
|
+
"tertiary-container": "#232323",
|
|
64
|
+
"on-surface": "#1a1c1e",
|
|
65
|
+
"on-primary-fixed-variant": "#2c486a",
|
|
66
|
+
"outline": "#73777f",
|
|
67
|
+
"surface-container-high": "#e9e8eb",
|
|
68
|
+
"surface-bright": "#faf9fc",
|
|
69
|
+
"on-tertiary-fixed-variant": "#474746",
|
|
70
|
+
"on-secondary-fixed": "#380d00",
|
|
71
|
+
"tertiary": "#0d0d0d",
|
|
72
|
+
"surface": "#faf9fc",
|
|
73
|
+
"outline-variant": "#c3c6cf",
|
|
74
|
+
"on-primary-fixed": "#001c37",
|
|
75
|
+
"surface-container-highest": "#e3e2e5",
|
|
76
|
+
"primary-fixed-dim": "#acc9f1",
|
|
77
|
+
"primary-fixed": "#d2e4ff",
|
|
78
|
+
"on-secondary": "#ffffff",
|
|
79
|
+
"on-primary": "#ffffff",
|
|
80
|
+
"surface-container-lowest": "#ffffff",
|
|
81
|
+
"surface-dim": "#dad9dd",
|
|
82
|
+
"primary-container": "#002444",
|
|
83
|
+
"error-container": "#ffdad6",
|
|
84
|
+
"secondary-fixed-dim": "#ffb59b",
|
|
85
|
+
"secondary-fixed": "#ffdbcf",
|
|
86
|
+
"on-surface-variant": "#43474e",
|
|
87
|
+
"inverse-on-surface": "#f1f0f3",
|
|
88
|
+
"secondary-container": "#fe753f",
|
|
89
|
+
"on-tertiary": "#ffffff",
|
|
90
|
+
"primary": "#000e20",
|
|
91
|
+
"on-secondary-container": "#631d00",
|
|
92
|
+
"on-error": "#ffffff",
|
|
93
|
+
"secondary": "#a93800",
|
|
94
|
+
"error": "#ba1a1a",
|
|
95
|
+
"surface-variant": "#e3e2e5",
|
|
96
|
+
"on-primary-container": "#708cb2",
|
|
97
|
+
"tertiary-fixed-dim": "#c8c6c5",
|
|
98
|
+
"tertiary-fixed": "#e4e2e1",
|
|
99
|
+
"on-tertiary-fixed": "#1b1c1b",
|
|
100
|
+
"surface-container-low": "#f4f3f6",
|
|
101
|
+
"on-secondary-fixed-variant": "#812900",
|
|
102
|
+
"on-error-container": "#93000a",
|
|
103
|
+
"background": "#faf9fc",
|
|
104
|
+
"inverse-primary": "#acc9f1"
|
|
105
|
+
},
|
|
106
|
+
"borderRadius": {
|
|
107
|
+
"DEFAULT": "0.125rem",
|
|
108
|
+
"lg": "0.25rem",
|
|
109
|
+
"xl": "0.5rem",
|
|
110
|
+
"full": "0.75rem"
|
|
111
|
+
},
|
|
112
|
+
"spacing": {
|
|
113
|
+
"unit": "8px",
|
|
114
|
+
"stack-tight": "4px",
|
|
115
|
+
"container-padding": "24px",
|
|
116
|
+
"max-width": "1440px",
|
|
117
|
+
"gutter": "16px",
|
|
118
|
+
"component-gap": "8px"
|
|
119
|
+
},
|
|
120
|
+
"fontFamily": {
|
|
121
|
+
"body-sm": ["Inter"],
|
|
122
|
+
"body-md": ["Inter"],
|
|
123
|
+
"body-lg": ["Inter"],
|
|
124
|
+
"mono-data": ["JetBrains Mono"],
|
|
125
|
+
"headline-sm": ["Inter"],
|
|
126
|
+
"label-caps": ["Inter"],
|
|
127
|
+
"headline-lg": ["Inter"],
|
|
128
|
+
"mono-label": ["JetBrains Mono"],
|
|
129
|
+
"headline-md": ["Inter"]
|
|
130
|
+
},
|
|
131
|
+
"fontSize": {
|
|
132
|
+
"body-sm": ["12px", { "lineHeight": "16px", "fontWeight": "400" }],
|
|
133
|
+
"body-md": ["14px", { "lineHeight": "20px", "fontWeight": "400" }],
|
|
134
|
+
"body-lg": ["16px", { "lineHeight": "24px", "fontWeight": "400" }],
|
|
135
|
+
"mono-data": ["12px", { "lineHeight": "18px", "fontWeight": "400" }],
|
|
136
|
+
"headline-sm": ["20px", { "lineHeight": "28px", "fontWeight": "600" }],
|
|
137
|
+
"label-caps": ["11px", { "lineHeight": "16px", "letterSpacing": "0.05em", "fontWeight": "700" }],
|
|
138
|
+
"headline-lg": ["32px", { "lineHeight": "40px", "letterSpacing": "-0.02em", "fontWeight": "600" }],
|
|
139
|
+
"mono-label": ["13px", { "lineHeight": "16px", "letterSpacing": "0.02em", "fontWeight": "500" }],
|
|
140
|
+
"headline-md": ["24px", { "lineHeight": "32px", "letterSpacing": "-0.01em", "fontWeight": "600" }]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
</script>
|
|
146
|
+
</head>
|
|
147
|
+
<body class="bg-background text-on-background flex h-screen w-full overflow-hidden antialiased selection:bg-primary-container selection:text-on-primary">
|
|
148
|
+
<!-- SideNavBar (Shared Component) -->
|
|
149
|
+
<aside class="hidden md:flex flex-col h-full py-container-padding gap-component-gap bg-surface-container-low dark:bg-primary-container docked left-0 w-64 h-screen border-r border-outline-variant/30 dark:border-outline/20 z-40 shrink-0">
|
|
150
|
+
<!-- Header -->
|
|
151
|
+
<div class="px-container-padding mb-gutter flex items-center gap-unit">
|
|
152
|
+
<div aria-label="Hermes System Logo" class="w-8 h-8 rounded-DEFAULT bg-primary flex items-center justify-center shrink-0">
|
|
153
|
+
<span class="material-symbols-outlined text-on-primary" style="font-variation-settings: 'FILL' 1; font-size: 16px;">hexagon</span>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="flex flex-col">
|
|
156
|
+
<span class="font-headline-sm text-headline-sm font-black text-primary dark:text-primary-fixed-dim tracking-tighter leading-none">Hermes Control</span>
|
|
157
|
+
<span class="font-mono-data text-mono-data text-on-surface-variant opacity-70">v4.2.0-Alpha</span>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
<!-- Navigation Links -->
|
|
161
|
+
<nav class="flex-1 flex flex-col gap-1 px-unit overflow-y-auto">
|
|
162
|
+
<!-- Inactive -->
|
|
163
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
164
|
+
<span class="material-symbols-outlined" data-icon="dashboard">dashboard</span>
|
|
165
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Overview</span>
|
|
166
|
+
</a>
|
|
167
|
+
<!-- Inactive -->
|
|
168
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
169
|
+
<span class="material-symbols-outlined" data-icon="extension">extension</span>
|
|
170
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Skill Hub</span>
|
|
171
|
+
</a>
|
|
172
|
+
<!-- Inactive -->
|
|
173
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
174
|
+
<span class="material-symbols-outlined" data-icon="auto_awesome">auto_awesome</span>
|
|
175
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Evolution</span>
|
|
176
|
+
</a>
|
|
177
|
+
<!-- Inactive -->
|
|
178
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
179
|
+
<span class="material-symbols-outlined" data-icon="database">database</span>
|
|
180
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Datasets</span>
|
|
181
|
+
</a>
|
|
182
|
+
<!-- ACTIVE TAB: Metrics -->
|
|
183
|
+
<a class="flex items-center gap-3 px-3 py-2 text-primary dark:text-on-primary border-r-4 border-secondary dark:border-secondary-fixed bg-surface-container-highest dark:bg-primary-fixed-dim/10 Active: scale-98 duration-150" href="#">
|
|
184
|
+
<span class="material-symbols-outlined" data-icon="monitoring" style="font-variation-settings: 'FILL' 1;">monitoring</span>
|
|
185
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase font-bold">Metrics</span>
|
|
186
|
+
</a>
|
|
187
|
+
<!-- Inactive -->
|
|
188
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
189
|
+
<span class="material-symbols-outlined" data-icon="terminal">terminal</span>
|
|
190
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Live Logs</span>
|
|
191
|
+
</a>
|
|
192
|
+
<!-- Inactive -->
|
|
193
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
194
|
+
<span class="material-symbols-outlined" data-icon="inventory_2">inventory_2</span>
|
|
195
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Curator</span>
|
|
196
|
+
</a>
|
|
197
|
+
<!-- Inactive -->
|
|
198
|
+
<a class="flex items-center gap-3 px-3 py-2 rounded-DEFAULT text-on-surface-variant dark:text-on-tertiary-fixed-variant hover:text-primary dark:hover:text-primary-fixed hover:bg-surface-container dark:hover:bg-tertiary-container transition-all" href="#">
|
|
199
|
+
<span class="material-symbols-outlined" data-icon="settings">settings</span>
|
|
200
|
+
<span class="font-label-caps text-label-caps tracking-widest uppercase">Settings</span>
|
|
201
|
+
</a>
|
|
202
|
+
</nav>
|
|
203
|
+
<!-- CTA -->
|
|
204
|
+
<div class="px-gutter mt-auto pt-gutter">
|
|
205
|
+
<button class="w-full flex items-center justify-center gap-2 bg-primary-container text-on-primary rounded-DEFAULT py-2 px-4 font-mono-label text-mono-label hover:opacity-90 transition-opacity">
|
|
206
|
+
<span class="material-symbols-outlined" style="font-size: 16px;">add</span>
|
|
207
|
+
New Experiment
|
|
208
|
+
</button>
|
|
209
|
+
</div>
|
|
210
|
+
</aside>
|
|
211
|
+
<!-- Main Viewport Area -->
|
|
212
|
+
<div class="flex flex-col flex-1 h-full min-w-0">
|
|
213
|
+
<!-- TopAppBar (Shared Component) -->
|
|
214
|
+
<header class="bg-surface dark:bg-on-background border-b border-outline-variant/30 dark:border-outline/20 docked full-width top-0 flex justify-between items-center w-full px-gutter h-16 z-50 shrink-0">
|
|
215
|
+
<!-- Left: Search (Responsive logic: icon on mobile, input on desktop) -->
|
|
216
|
+
<div class="flex items-center flex-1 max-w-md">
|
|
217
|
+
<div class="relative w-full hidden md:block">
|
|
218
|
+
<span class="material-symbols-outlined absolute left-3 top-1/2 -translate-y-1/2 text-on-surface-variant" style="font-size: 18px;">search</span>
|
|
219
|
+
<input class="w-full bg-surface-container-low border border-outline-variant/50 rounded-DEFAULT pl-9 pr-3 py-1.5 font-body-sm text-body-sm text-on-surface focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-shadow placeholder:text-on-surface-variant/60" placeholder="Search systems, metrics, or logs..." type="text"/>
|
|
220
|
+
</div>
|
|
221
|
+
<!-- Mobile brand fallback -->
|
|
222
|
+
<span class="md:hidden font-headline-sm text-headline-sm font-bold tracking-tighter text-primary dark:text-primary-fixed">Hermes</span>
|
|
223
|
+
</div>
|
|
224
|
+
<!-- Right: Actions & Profile -->
|
|
225
|
+
<div class="flex items-center gap-gutter shrink-0">
|
|
226
|
+
<!-- Trailing Primary Action -->
|
|
227
|
+
<div class="hidden sm:flex items-center gap-2 text-primary dark:text-primary-fixed font-mono-data text-mono-data bg-surface-container px-2 py-1 rounded-DEFAULT border border-outline-variant/20">
|
|
228
|
+
<div class="w-2 h-2 rounded-full bg-emerald-500 animate-pulse"></div>
|
|
229
|
+
Syncing
|
|
230
|
+
</div>
|
|
231
|
+
<!-- Trailing Icon Actions -->
|
|
232
|
+
<div class="flex items-center gap-1">
|
|
233
|
+
<button class="p-2 text-on-surface-variant dark:text-on-tertiary-container hover:bg-surface-container-high dark:hover:bg-tertiary-container transition-colors rounded-DEFAULT Active: opacity-80 scale-95 transition-all">
|
|
234
|
+
<span class="material-symbols-outlined" data-icon="sync">sync</span>
|
|
235
|
+
</button>
|
|
236
|
+
<button class="p-2 text-on-surface-variant dark:text-on-tertiary-container hover:bg-surface-container-high dark:hover:bg-tertiary-container transition-colors rounded-DEFAULT relative Active: opacity-80 scale-95 transition-all">
|
|
237
|
+
<span class="material-symbols-outlined" data-icon="notifications">notifications</span>
|
|
238
|
+
<!-- Notification dot -->
|
|
239
|
+
<span class="absolute top-2 right-2 w-2 h-2 bg-secondary rounded-full border border-surface"></span>
|
|
240
|
+
</button>
|
|
241
|
+
</div>
|
|
242
|
+
<!-- Profile -->
|
|
243
|
+
<div class="w-8 h-8 rounded-DEFAULT bg-surface-variant border border-outline-variant/50 overflow-hidden shrink-0 cursor-pointer">
|
|
244
|
+
<!-- Placeholder using styling since no external image allowed -->
|
|
245
|
+
<div class="w-full h-full bg-gradient-to-br from-primary-container to-surface-tint flex items-center justify-center text-on-primary font-mono-label text-mono-label">
|
|
246
|
+
OP
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
</header>
|
|
251
|
+
<!-- Main Canvas (Scrollable Data Area) -->
|
|
252
|
+
<main class="flex-1 overflow-y-auto bg-background p-4 md:p-container-padding">
|
|
253
|
+
<div class="max-w-max-width mx-auto flex flex-col gap-6">
|
|
254
|
+
<!-- Page Header & Controls -->
|
|
255
|
+
<div class="flex flex-col md:flex-row md:items-end justify-between gap-4 border-b border-outline-variant/20 pb-4">
|
|
256
|
+
<div>
|
|
257
|
+
<h1 class="font-headline-md text-headline-md text-primary-container tracking-tight">System Performance Metrics</h1>
|
|
258
|
+
<p class="font-body-sm text-body-sm text-on-surface-variant mt-1">Aggregated telemetry for core processing modules. Data refreshed every 15s.</p>
|
|
259
|
+
</div>
|
|
260
|
+
<!-- Timeframe Selector -->
|
|
261
|
+
<div class="flex items-center gap-2 bg-surface-container-low border border-outline-variant/30 rounded-DEFAULT p-1">
|
|
262
|
+
<button class="px-3 py-1 font-mono-label text-mono-label text-on-surface-variant hover:text-primary transition-colors">1H</button>
|
|
263
|
+
<button class="px-3 py-1 font-mono-label text-mono-label text-on-surface-variant hover:text-primary transition-colors">24H</button>
|
|
264
|
+
<button class="px-3 py-1 font-mono-label text-mono-label bg-surface border border-outline-variant/50 shadow-sm rounded-DEFAULT text-primary">7D</button>
|
|
265
|
+
<button class="px-3 py-1 font-mono-label text-mono-label text-on-surface-variant hover:text-primary transition-colors">30D</button>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
<!-- LEVEL 1: Dense Stat Cards Grid (Bento style top row) -->
|
|
269
|
+
<div class="grid grid-cols-2 lg:grid-cols-4 gap-4">
|
|
270
|
+
<!-- Stat Card 1: Success Rate -->
|
|
271
|
+
<div class="bg-surface border border-outline-variant/30 rounded-lg p-4 flex flex-col justify-between">
|
|
272
|
+
<div class="flex justify-between items-start mb-2">
|
|
273
|
+
<span class="font-label-caps text-label-caps text-on-surface-variant uppercase tracking-wider">Success Rate</span>
|
|
274
|
+
<span class="material-symbols-outlined text-outline" style="font-size: 16px;">check_circle</span>
|
|
275
|
+
</div>
|
|
276
|
+
<div class="flex items-baseline gap-2">
|
|
277
|
+
<span class="font-headline-lg text-headline-lg text-primary-container font-mono">99.98%</span>
|
|
278
|
+
</div>
|
|
279
|
+
<div class="flex items-center gap-1 mt-2">
|
|
280
|
+
<span class="material-symbols-outlined text-emerald-600" style="font-size: 14px;">arrow_upward</span>
|
|
281
|
+
<span class="font-mono-data text-mono-data text-emerald-600">+0.02%</span>
|
|
282
|
+
<span class="font-body-sm text-body-sm text-outline ml-1">vs last 7d</span>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
<!-- Stat Card 2: Avg Latency -->
|
|
286
|
+
<div class="bg-surface border border-outline-variant/30 rounded-lg p-4 flex flex-col justify-between">
|
|
287
|
+
<div class="flex justify-between items-start mb-2">
|
|
288
|
+
<span class="font-label-caps text-label-caps text-on-surface-variant uppercase tracking-wider">Avg P95 Latency</span>
|
|
289
|
+
<span class="material-symbols-outlined text-outline" style="font-size: 16px;">speed</span>
|
|
290
|
+
</div>
|
|
291
|
+
<div class="flex items-baseline gap-2">
|
|
292
|
+
<span class="font-headline-lg text-headline-lg text-primary-container font-mono">142<span class="text-headline-sm text-on-surface-variant ml-1">ms</span></span>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="flex items-center gap-1 mt-2">
|
|
295
|
+
<span class="material-symbols-outlined text-emerald-600" style="font-size: 14px;">arrow_downward</span>
|
|
296
|
+
<span class="font-mono-data text-mono-data text-emerald-600">-12ms</span>
|
|
297
|
+
<span class="font-body-sm text-body-sm text-outline ml-1">vs last 7d</span>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
<!-- Stat Card 3: Regression Rate (Alert State) -->
|
|
301
|
+
<div class="bg-surface border border-secondary/40 shadow-[0_0_0_1px_rgba(169,56,0,0.1)_inset] rounded-lg p-4 flex flex-col justify-between relative overflow-hidden">
|
|
302
|
+
<!-- Alert accent strip -->
|
|
303
|
+
<div class="absolute left-0 top-0 bottom-0 w-1 bg-secondary"></div>
|
|
304
|
+
<div class="flex justify-between items-start mb-2 pl-2">
|
|
305
|
+
<span class="font-label-caps text-label-caps text-secondary uppercase tracking-wider">Regression Rate</span>
|
|
306
|
+
<span class="material-symbols-outlined text-secondary" style="font-size: 16px;">warning</span>
|
|
307
|
+
</div>
|
|
308
|
+
<div class="flex items-baseline gap-2 pl-2">
|
|
309
|
+
<span class="font-headline-lg text-headline-lg text-secondary font-mono">1.24%</span>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="flex items-center gap-1 mt-2 pl-2">
|
|
312
|
+
<span class="material-symbols-outlined text-secondary" style="font-size: 14px;">arrow_upward</span>
|
|
313
|
+
<span class="font-mono-data text-mono-data text-secondary">+0.4%</span>
|
|
314
|
+
<span class="font-body-sm text-body-sm text-outline ml-1">Requires review</span>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
<!-- Stat Card 4: Improvement Velocity -->
|
|
318
|
+
<div class="bg-surface border border-outline-variant/30 rounded-lg p-4 flex flex-col justify-between">
|
|
319
|
+
<div class="flex justify-between items-start mb-2">
|
|
320
|
+
<span class="font-label-caps text-label-caps text-on-surface-variant uppercase tracking-wider">Velocity Score</span>
|
|
321
|
+
<span class="material-symbols-outlined text-outline" style="font-size: 16px;">trending_up</span>
|
|
322
|
+
</div>
|
|
323
|
+
<div class="flex items-baseline gap-2">
|
|
324
|
+
<span class="font-headline-lg text-headline-lg text-primary-container font-mono">84.5</span>
|
|
325
|
+
</div>
|
|
326
|
+
<!-- Mini sparkline representation -->
|
|
327
|
+
<div class="w-full h-8 mt-2 flex items-end gap-[2px]">
|
|
328
|
+
<div class="flex-1 bg-primary-container/20 h-[30%] rounded-t-sm"></div>
|
|
329
|
+
<div class="flex-1 bg-primary-container/30 h-[45%] rounded-t-sm"></div>
|
|
330
|
+
<div class="flex-1 bg-primary-container/40 h-[40%] rounded-t-sm"></div>
|
|
331
|
+
<div class="flex-1 bg-primary-container/50 h-[60%] rounded-t-sm"></div>
|
|
332
|
+
<div class="flex-1 bg-primary-container/60 h-[55%] rounded-t-sm"></div>
|
|
333
|
+
<div class="flex-1 bg-primary-container/80 h-[80%] rounded-t-sm"></div>
|
|
334
|
+
<div class="flex-1 bg-primary-container h-[100%] rounded-t-sm"></div>
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
<!-- LEVEL 2: High-Density Charts Area -->
|
|
339
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
340
|
+
<!-- Main Line Chart: Success Rate w/ Confidence Intervals -->
|
|
341
|
+
<div class="lg:col-span-2 bg-surface border border-outline-variant/30 rounded-lg flex flex-col min-h-[320px]">
|
|
342
|
+
<div class="p-4 border-b border-outline-variant/20 flex justify-between items-center">
|
|
343
|
+
<h3 class="font-mono-label text-mono-label text-primary-container">Execution Success Rate (7D Trend)</h3>
|
|
344
|
+
<button class="text-on-surface-variant hover:text-primary transition-colors">
|
|
345
|
+
<span class="material-symbols-outlined" style="font-size: 18px;">more_horiz</span>
|
|
346
|
+
</button>
|
|
347
|
+
</div>
|
|
348
|
+
<div class="flex-1 p-4 bg-chart-grid relative overflow-hidden flex flex-col justify-end">
|
|
349
|
+
<!-- Y-Axis Labels -->
|
|
350
|
+
<div class="absolute left-4 top-4 bottom-8 flex flex-col justify-between font-mono-data text-[10px] text-outline z-10">
|
|
351
|
+
<span>100%</span>
|
|
352
|
+
<span>99%</span>
|
|
353
|
+
<span>98%</span>
|
|
354
|
+
<span>97%</span>
|
|
355
|
+
</div>
|
|
356
|
+
<!-- Simulated Line Chart with Confidence Interval Band -->
|
|
357
|
+
<!-- Band (Confidence Interval) -->
|
|
358
|
+
<div class="absolute inset-x-12 bottom-8 top-12 opacity-10">
|
|
359
|
+
<svg class="w-full h-full" preserveaspectratio="none" viewbox="0 0 100 100">
|
|
360
|
+
<path d="M0,40 Q25,35 50,50 T100,20 L100,70 Q75,80 50,60 T0,80 Z" fill="#002444"></path>
|
|
361
|
+
</svg>
|
|
362
|
+
</div>
|
|
363
|
+
<!-- Main Line -->
|
|
364
|
+
<div class="absolute inset-x-12 bottom-8 top-12">
|
|
365
|
+
<svg class="w-full h-full" preserveaspectratio="none" viewbox="0 0 100 100">
|
|
366
|
+
<path d="M0,60 Q25,50 50,55 T100,45" fill="none" stroke="#002444" stroke-linecap="round" stroke-width="2" vector-effect="non-scaling-stroke"></path>
|
|
367
|
+
<!-- Data Points -->
|
|
368
|
+
<circle cx="0" cy="60" fill="#ffffff" r="3" stroke="#002444" stroke-width="1.5" vector-effect="non-scaling-stroke"></circle>
|
|
369
|
+
<circle cx="25" cy="53" fill="#ffffff" r="3" stroke="#002444" stroke-width="1.5" vector-effect="non-scaling-stroke"></circle>
|
|
370
|
+
<circle cx="50" cy="55" fill="#ffffff" r="3" stroke="#002444" stroke-width="1.5" vector-effect="non-scaling-stroke"></circle>
|
|
371
|
+
<circle cx="75" cy="48" fill="#ffffff" r="3" stroke="#002444" stroke-width="1.5" vector-effect="non-scaling-stroke"></circle>
|
|
372
|
+
<circle cx="100" cy="45" fill="#002444" r="4" stroke="#ffffff" stroke-width="1.5" vector-effect="non-scaling-stroke"></circle>
|
|
373
|
+
</svg>
|
|
374
|
+
</div>
|
|
375
|
+
<!-- X-Axis Labels -->
|
|
376
|
+
<div class="w-full flex justify-between px-8 mt-2 font-mono-data text-[10px] text-outline border-t border-outline-variant/30 pt-2">
|
|
377
|
+
<span>Mon</span>
|
|
378
|
+
<span>Tue</span>
|
|
379
|
+
<span>Wed</span>
|
|
380
|
+
<span>Thu</span>
|
|
381
|
+
<span>Fri</span>
|
|
382
|
+
<span>Sat</span>
|
|
383
|
+
<span>Today</span>
|
|
384
|
+
</div>
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
<!-- Side Chart: Latency Heatmap -->
|
|
388
|
+
<div class="bg-surface border border-outline-variant/30 rounded-lg flex flex-col min-h-[320px]">
|
|
389
|
+
<div class="p-4 border-b border-outline-variant/20 flex justify-between items-center">
|
|
390
|
+
<h3 class="font-mono-label text-mono-label text-primary-container">Latency Distribution</h3>
|
|
391
|
+
<span class="material-symbols-outlined text-outline" style="font-size: 16px;">info</span>
|
|
392
|
+
</div>
|
|
393
|
+
<div class="flex-1 p-4 flex flex-col gap-1">
|
|
394
|
+
<!-- Simulated Heatmap Rows -->
|
|
395
|
+
<div class="flex items-center gap-2 text-[10px] font-mono-data text-outline">
|
|
396
|
+
<span class="w-8 text-right">>500ms</span>
|
|
397
|
+
<div class="flex-1 flex gap-[2px] h-4">
|
|
398
|
+
<div class="flex-1 bg-secondary opacity-10"></div>
|
|
399
|
+
<div class="flex-1 bg-secondary opacity-20"></div>
|
|
400
|
+
<div class="flex-1 bg-secondary opacity-40"></div>
|
|
401
|
+
<div class="flex-1 bg-secondary opacity-10"></div>
|
|
402
|
+
<div class="flex-1 bg-secondary opacity-0"></div>
|
|
403
|
+
</div>
|
|
404
|
+
</div>
|
|
405
|
+
<div class="flex items-center gap-2 text-[10px] font-mono-data text-outline">
|
|
406
|
+
<span class="w-8 text-right">300ms</span>
|
|
407
|
+
<div class="flex-1 flex gap-[2px] h-4">
|
|
408
|
+
<div class="flex-1 bg-secondary opacity-20"></div>
|
|
409
|
+
<div class="flex-1 bg-secondary opacity-50"></div>
|
|
410
|
+
<div class="flex-1 bg-secondary opacity-80"></div>
|
|
411
|
+
<div class="flex-1 bg-secondary opacity-30"></div>
|
|
412
|
+
<div class="flex-1 bg-secondary opacity-10"></div>
|
|
413
|
+
</div>
|
|
414
|
+
</div>
|
|
415
|
+
<div class="flex items-center gap-2 text-[10px] font-mono-data text-outline">
|
|
416
|
+
<span class="w-8 text-right">200ms</span>
|
|
417
|
+
<div class="flex-1 flex gap-[2px] h-4">
|
|
418
|
+
<div class="flex-1 bg-primary-container opacity-30"></div>
|
|
419
|
+
<div class="flex-1 bg-primary-container opacity-60"></div>
|
|
420
|
+
<div class="flex-1 bg-secondary opacity-40"></div>
|
|
421
|
+
<div class="flex-1 bg-primary-container opacity-50"></div>
|
|
422
|
+
<div class="flex-1 bg-primary-container opacity-20"></div>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
<div class="flex items-center gap-2 text-[10px] font-mono-data text-outline">
|
|
426
|
+
<span class="w-8 text-right">100ms</span>
|
|
427
|
+
<div class="flex-1 flex gap-[2px] h-4">
|
|
428
|
+
<div class="flex-1 bg-primary-container opacity-80"></div>
|
|
429
|
+
<div class="flex-1 bg-primary-container opacity-100"></div>
|
|
430
|
+
<div class="flex-1 bg-primary-container opacity-70"></div>
|
|
431
|
+
<div class="flex-1 bg-primary-container opacity-90"></div>
|
|
432
|
+
<div class="flex-1 bg-primary-container opacity-60"></div>
|
|
433
|
+
</div>
|
|
434
|
+
</div>
|
|
435
|
+
<div class="flex items-center gap-2 text-[10px] font-mono-data text-outline">
|
|
436
|
+
<span class="w-8 text-right"><50ms</span>
|
|
437
|
+
<div class="flex-1 flex gap-[2px] h-4">
|
|
438
|
+
<div class="flex-1 bg-primary-container opacity-20"></div>
|
|
439
|
+
<div class="flex-1 bg-primary-container opacity-40"></div>
|
|
440
|
+
<div class="flex-1 bg-primary-container opacity-30"></div>
|
|
441
|
+
<div class="flex-1 bg-primary-container opacity-20"></div>
|
|
442
|
+
<div class="flex-1 bg-primary-container opacity-50"></div>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
<!-- Legend -->
|
|
446
|
+
<div class="mt-auto pt-4 flex justify-between items-center text-[10px] font-mono-data text-outline">
|
|
447
|
+
<span>Low Volume</span>
|
|
448
|
+
<div class="w-24 h-1.5 bg-gradient-to-r from-primary-container/10 via-primary-container/50 to-secondary/80 rounded-full"></div>
|
|
449
|
+
<span>High Volume</span>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
<!-- LEVEL 3: Data Table (Module Breakdown) -->
|
|
455
|
+
<div class="bg-surface border border-outline-variant/30 rounded-lg overflow-hidden flex flex-col">
|
|
456
|
+
<div class="p-3 border-b border-outline-variant/20 bg-surface-container-low flex justify-between items-center">
|
|
457
|
+
<h3 class="font-label-caps text-label-caps text-on-surface-variant uppercase">Module Performance Breakdown</h3>
|
|
458
|
+
<button class="font-mono-label text-[10px] text-primary hover:underline">Export CSV</button>
|
|
459
|
+
</div>
|
|
460
|
+
<div class="overflow-x-auto">
|
|
461
|
+
<table class="w-full text-left border-collapse whitespace-nowrap">
|
|
462
|
+
<thead>
|
|
463
|
+
<tr class="bg-surface-container-lowest border-b border-outline-variant/30 font-label-caps text-label-caps text-on-surface-variant">
|
|
464
|
+
<th class="py-2 px-4 font-normal">Module ID</th>
|
|
465
|
+
<th class="py-2 px-4 font-normal">Status</th>
|
|
466
|
+
<th class="py-2 px-4 font-normal text-right">Throughput (req/s)</th>
|
|
467
|
+
<th class="py-2 px-4 font-normal text-right">Error Rate</th>
|
|
468
|
+
<th class="py-2 px-4 font-normal text-right">P99 Latency</th>
|
|
469
|
+
</tr>
|
|
470
|
+
</thead>
|
|
471
|
+
<tbody class="font-mono-data text-mono-data text-on-surface divide-y divide-outline-variant/20">
|
|
472
|
+
<tr class="hover:bg-surface-container-low transition-colors group">
|
|
473
|
+
<td class="py-2.5 px-4 font-medium text-primary-container">auth_service_v2</td>
|
|
474
|
+
<td class="py-2.5 px-4">
|
|
475
|
+
<div class="flex items-center gap-1.5">
|
|
476
|
+
<div class="w-1.5 h-1.5 rounded-full bg-emerald-500"></div>
|
|
477
|
+
<span>Healthy</span>
|
|
478
|
+
</div>
|
|
479
|
+
</td>
|
|
480
|
+
<td class="py-2.5 px-4 text-right">4,205</td>
|
|
481
|
+
<td class="py-2.5 px-4 text-right">0.01%</td>
|
|
482
|
+
<td class="py-2.5 px-4 text-right">42ms</td>
|
|
483
|
+
</tr>
|
|
484
|
+
<tr class="hover:bg-surface-container-low transition-colors group bg-error-container/10">
|
|
485
|
+
<td class="py-2.5 px-4 font-medium text-primary-container">data_pipeline_ingest</td>
|
|
486
|
+
<td class="py-2.5 px-4">
|
|
487
|
+
<div class="flex items-center gap-1.5">
|
|
488
|
+
<div class="w-1.5 h-1.5 bg-secondary"></div>
|
|
489
|
+
<span class="text-secondary">Degraded</span>
|
|
490
|
+
</div>
|
|
491
|
+
</td>
|
|
492
|
+
<td class="py-2.5 px-4 text-right">12,850</td>
|
|
493
|
+
<td class="py-2.5 px-4 text-right text-secondary font-bold">1.45%</td>
|
|
494
|
+
<td class="py-2.5 px-4 text-right">385ms</td>
|
|
495
|
+
</tr>
|
|
496
|
+
<tr class="hover:bg-surface-container-low transition-colors group">
|
|
497
|
+
<td class="py-2.5 px-4 font-medium text-primary-container">ml_inference_engine</td>
|
|
498
|
+
<td class="py-2.5 px-4">
|
|
499
|
+
<div class="flex items-center gap-1.5">
|
|
500
|
+
<div class="w-1.5 h-1.5 rounded-full bg-emerald-500"></div>
|
|
501
|
+
<span>Healthy</span>
|
|
502
|
+
</div>
|
|
503
|
+
</td>
|
|
504
|
+
<td class="py-2.5 px-4 text-right">842</td>
|
|
505
|
+
<td class="py-2.5 px-4 text-right">0.05%</td>
|
|
506
|
+
<td class="py-2.5 px-4 text-right">180ms</td>
|
|
507
|
+
</tr>
|
|
508
|
+
<tr class="hover:bg-surface-container-low transition-colors group">
|
|
509
|
+
<td class="py-2.5 px-4 font-medium text-primary-container">cache_layer_redis</td>
|
|
510
|
+
<td class="py-2.5 px-4">
|
|
511
|
+
<div class="flex items-center gap-1.5">
|
|
512
|
+
<div class="w-0 h-0 border-l-[4px] border-l-transparent border-r-[4px] border-r-transparent border-b-[7px] border-b-yellow-500"></div>
|
|
513
|
+
<span>Warning</span>
|
|
514
|
+
</div>
|
|
515
|
+
</td>
|
|
516
|
+
<td class="py-2.5 px-4 text-right">45,110</td>
|
|
517
|
+
<td class="py-2.5 px-4 text-right">0.00%</td>
|
|
518
|
+
<td class="py-2.5 px-4 text-right text-yellow-600">8ms</td>
|
|
519
|
+
</tr>
|
|
520
|
+
</tbody>
|
|
521
|
+
</table>
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
524
|
+
</div>
|
|
525
|
+
</main>
|
|
526
|
+
</div>
|
|
527
|
+
</body></html>
|
|
Binary file
|