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
package/run.sh
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
cd /Users/leandrothomas/Desktop/Projects/genoma
|
|
5
|
+
|
|
6
|
+
# Install deps once (silent)
|
|
7
|
+
echo "Installing dependencies..."
|
|
8
|
+
python3 -m pip install fastapi uvicorn pydantic python-dotenv --break-system-packages -q 2>/dev/null || true
|
|
9
|
+
pnpm install --ignore-scripts -q 2>/dev/null || true
|
|
10
|
+
|
|
11
|
+
echo "Starting backend on :8000..."
|
|
12
|
+
python3 -m uvicorn backend.main:app --reload --port 8000 &
|
|
13
|
+
BACKEND_PID=$!
|
|
14
|
+
|
|
15
|
+
echo "Starting MCP server (stdio)..."
|
|
16
|
+
python3 -m backend.mcp_server &
|
|
17
|
+
MCP_PID=$!
|
|
18
|
+
|
|
19
|
+
echo "Starting frontend on :3000..."
|
|
20
|
+
sleep 2
|
|
21
|
+
|
|
22
|
+
# Kill backend + MCP if script exits
|
|
23
|
+
trap "kill $BACKEND_PID $MCP_PID 2>/dev/null || true" EXIT
|
|
24
|
+
|
|
25
|
+
# Run frontend (foreground — Ctrl+C kills both)
|
|
26
|
+
pnpm dev
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
const ROOT_DIR = path.resolve(__dirname, '..');
|
|
9
|
+
const REQUIREMENTS_FILE = path.join(ROOT_DIR, 'backend', 'requirements.txt');
|
|
10
|
+
|
|
11
|
+
function getPythonVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const output = execSync('python3 --version', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
14
|
+
const match = output.match(/Python (\d+)\.(\d+)/);
|
|
15
|
+
if (!match) return null;
|
|
16
|
+
return { major: parseInt(match[1], 10), minor: parseInt(match[2], 10) };
|
|
17
|
+
} catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function main() {
|
|
23
|
+
const version = getPythonVersion();
|
|
24
|
+
|
|
25
|
+
if (!version) {
|
|
26
|
+
console.warn('Warning: Python not found, skipping backend deps');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (version.major < 3 || (version.major === 3 && version.minor < 10)) {
|
|
31
|
+
console.warn(
|
|
32
|
+
`Warning: Python 3.10+ required (found ${version.major}.${version.minor}), skipping backend deps`
|
|
33
|
+
);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
console.log('Installing Python dependencies...');
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
execSync(`pip install -r "${REQUIREMENTS_FILE}"`, {
|
|
41
|
+
cwd: ROOT_DIR,
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
});
|
|
44
|
+
console.log('Python dependencies installed');
|
|
45
|
+
} catch (err) {
|
|
46
|
+
console.warn(`Warning: Failed to install Python dependencies — ${err.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
main();
|
package/skills-lock.json
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Canonical Run Event Schema v0.1
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Define a vendor-neutral event format for agent execution telemetry. Any agent (Hermes, Claude Code, Codex, OpenCode) can emit runs in this schema. The schema is the single source of truth for cross-agent comparison, evaluation, and regression detection.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Design Principles
|
|
10
|
+
|
|
11
|
+
1. **Agent-agnostic:** No special cases for any single agent. Required fields are minimal; optional fields capture agent-specific context.
|
|
12
|
+
2. **Append-only:** New fields may be added to optional sections. Removing or renaming required fields is breaking.
|
|
13
|
+
3. **Graceful degradation:** Missing optional fields never break ingestion. Unknown fields go into `context{}` dict.
|
|
14
|
+
4. **Deterministic evaluation:** The same run, evaluated twice, always produces identical scores.
|
|
15
|
+
5. **Cross-comparable:** Two runs from different agents can be compared on: outcome, token usage, tool calls, errors, improvement delta.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Root Object: `CanonicalRun`
|
|
20
|
+
|
|
21
|
+
### Required Fields
|
|
22
|
+
|
|
23
|
+
These fields MUST be present and non-null for a valid run event. Collectors must fail fast if unable to provide them.
|
|
24
|
+
|
|
25
|
+
| Field | Type | Example | Notes |
|
|
26
|
+
|-------|------|---------|-------|
|
|
27
|
+
| `run_id` | string (UUID) | `"a1b2c3d4-e5f6-..."` | Unique run identifier. Collectors assign via trace_id or session_id. |
|
|
28
|
+
| `agent_name` | string | `"hermes"`, `"claude-code"`, `"codex"`, `"opencode"` | Which agent ran this. |
|
|
29
|
+
| `collector` | string | `"hermes-trace-ingestor"`, `"claude-code-session-collector"` | Which collector produced this event. Enables audit trail. |
|
|
30
|
+
| `started_at` | ISO 8601 string | `"2026-05-19T14:32:00Z"` | When the run began. |
|
|
31
|
+
| `task_name` | string | `"Implement user authentication"` | What the agent was asked to do. Max 500 chars; first sentence only. |
|
|
32
|
+
| `task_name` | string | (max 500 chars) | Task description (first sentence). |
|
|
33
|
+
| `outcome` | enum string | `"success"`, `"failure"`, `"partial"`, `"unknown"` | Did the agent succeed? `success`: no errors, completed. `failure`: critical error. `partial`: partial success with non-critical errors. `unknown`: insufficient info. |
|
|
34
|
+
|
|
35
|
+
### Optional Fields
|
|
36
|
+
|
|
37
|
+
These fields MAY be absent or null. Collectors should populate them when available. Evaluators must handle missing values gracefully.
|
|
38
|
+
|
|
39
|
+
| Field | Type | Default | Notes |
|
|
40
|
+
|-------|------|---------|-------|
|
|
41
|
+
| `agent_version` | string | null | Agent version at run time. E.g., `"2.1.143"`. |
|
|
42
|
+
| `provider` | string | null | AI provider: `"anthropic"`, `"openai"`, `"hermes"`, `"ollama"`, etc. |
|
|
43
|
+
| `model` | string | null | Model ID. E.g., `"claude-opus-4-7"`, `"gpt-4-turbo"`. |
|
|
44
|
+
| `repo` | string | null | Source code repo (git remote URL or local path). Used for run grouping. |
|
|
45
|
+
| `session_id` | string | null | Unique session UUID from the agent. Links multiple runs to one session. |
|
|
46
|
+
| `ended_at` | ISO 8601 string | null | When the run completed. If null, use current time. |
|
|
47
|
+
| `tool_calls` | array of objects | `[]` | All tool invocations in sequence. See schema below. |
|
|
48
|
+
| `files_touched` | array of objects | `[]` | All files read/written/deleted. See schema below. |
|
|
49
|
+
| `artifacts` | array of objects | `[]` | Output artifacts (code, docs, reports). See schema below. |
|
|
50
|
+
| `errors` | array of objects | `[]` | Exceptions and error signatures. See schema below. |
|
|
51
|
+
| `metrics` | object | null | Aggregated execution metrics. See schema below. |
|
|
52
|
+
| `eval_scores` | array of objects | `[]` | Scores from Phase 5 evaluation. Written post-run. See schema below. |
|
|
53
|
+
| `improvement_candidates` | array of objects | `[]` | Proposed improvements (Phase 8+). |
|
|
54
|
+
| `context` | object | `{}` | Catch-all for agent-specific or collector-specific fields. Never fails ingestion. |
|
|
55
|
+
| `resolution` | string | null | How the run was resolved (if outcome == `"failure"`). Diagnostic text. |
|
|
56
|
+
| `collector_version` | string | `"0.1.0"` | Version of the collector that produced this event. For forward compatibility. |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Nested Object Schemas
|
|
61
|
+
|
|
62
|
+
### `ToolCallRecord` (items in `tool_calls[]`)
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"id": "tool-call-uuid",
|
|
67
|
+
"name": "Read",
|
|
68
|
+
"input_summary": "Read /path/to/file.ts",
|
|
69
|
+
"duration_ms": 245,
|
|
70
|
+
"result_summary": "Returned 1240 chars",
|
|
71
|
+
"error": null
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| Field | Type | Notes |
|
|
76
|
+
|-------|------|-------|
|
|
77
|
+
| `id` | string | Unique ID for this tool call. E.g., UUID or sequential counter. |
|
|
78
|
+
| `name` | string | Tool name. E.g., `"Read"`, `"Bash"`, `"Edit"`, `"Write"`, `"Grep"`, `"Agent"`. |
|
|
79
|
+
| `input_summary` | string | First 200 chars of input. Omit secrets. |
|
|
80
|
+
| `duration_ms` | integer | Execution time in milliseconds. Omit if not available. |
|
|
81
|
+
| `result_summary` | string | First 200 chars of result/output. |
|
|
82
|
+
| `error` | string or null | Error message if tool failed. Otherwise null. |
|
|
83
|
+
|
|
84
|
+
### `FileTouchRecord` (items in `files_touched[]`)
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"path": "src/components/Button.tsx",
|
|
89
|
+
"action": "write",
|
|
90
|
+
"size_bytes": 2048
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
| Field | Type | Notes |
|
|
95
|
+
|-------|------|-------|
|
|
96
|
+
| `path` | string | File path. May be relative or absolute. |
|
|
97
|
+
| `action` | string | One of: `"read"`, `"write"`, `"delete"`. |
|
|
98
|
+
| `size_bytes` | integer or null | Final file size. Omit for deletes. |
|
|
99
|
+
|
|
100
|
+
### `RunMetrics` (the `metrics` field)
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"input_tokens": 4200,
|
|
105
|
+
"output_tokens": 1850,
|
|
106
|
+
"cache_tokens": 512,
|
|
107
|
+
"latency_ms": 8500,
|
|
108
|
+
"cost_usd": 0.082,
|
|
109
|
+
"tool_call_count": 12
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
| Field | Type | Notes |
|
|
114
|
+
|-------|------|-------|
|
|
115
|
+
| `input_tokens` | integer or null | Tokens sent to model. |
|
|
116
|
+
| `output_tokens` | integer or null | Tokens generated by model. |
|
|
117
|
+
| `cache_tokens` | integer or null | Cached input tokens (prompt caching). |
|
|
118
|
+
| `latency_ms` | integer or null | Total run duration in ms. |
|
|
119
|
+
| `cost_usd` | float or null | Estimated cost in USD. |
|
|
120
|
+
| `tool_call_count` | integer | Total tool calls made. Defaults to 0. |
|
|
121
|
+
|
|
122
|
+
### `ErrorRecord` (items in `errors[]`)
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"signature": "TypeError: Cannot read property 'foo' of undefined",
|
|
127
|
+
"message": "TypeError: Cannot read property 'foo' of undefined at line 42",
|
|
128
|
+
"stack_excerpt": "at Object.<anonymous> (file.js:42:10)",
|
|
129
|
+
"count": 3
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
| Field | Type | Notes |
|
|
134
|
+
|-------|------|-------|
|
|
135
|
+
| `signature` | string | Error class + first line. Used for deduplication. E.g., `"TypeError: Cannot read property..."`. |
|
|
136
|
+
| `message` | string | Full error message. |
|
|
137
|
+
| `stack_excerpt` | string | First few stack frames (first 300 chars). |
|
|
138
|
+
| `count` | integer | How many times this error occurred. Default 1. |
|
|
139
|
+
|
|
140
|
+
### `EvalScore` (items in `eval_scores[]`)
|
|
141
|
+
|
|
142
|
+
Written by Phase 5 evaluation engine. Not set by collectors.
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"scorer": "outcome_scorer",
|
|
147
|
+
"score": 1.0,
|
|
148
|
+
"passed": true,
|
|
149
|
+
"details": {
|
|
150
|
+
"outcome": "success",
|
|
151
|
+
"reason": "Run completed without errors"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
| Field | Type | Notes |
|
|
157
|
+
|-------|------|-------|
|
|
158
|
+
| `scorer` | string | Name of the scorer that produced this. E.g., `"outcome_scorer"`, `"token_cost_scorer"`. |
|
|
159
|
+
| `score` | float | Score in range [0.0, 1.0]. |
|
|
160
|
+
| `passed` | boolean | Did this scorer report success? |
|
|
161
|
+
| `details` | object | Scorer-specific metadata. Free-form. |
|
|
162
|
+
|
|
163
|
+
### `Artifact` (items in `artifacts[]`)
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"path": "output/evolved_skill.md",
|
|
168
|
+
"type": "markdown",
|
|
169
|
+
"size_bytes": 4096
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
| Field | Type | Notes |
|
|
174
|
+
|-------|------|-------|
|
|
175
|
+
| `path` | string | Path to artifact. |
|
|
176
|
+
| `type` | string | MIME-like type. E.g., `"markdown"`, `"json"`, `"python"`, `"typescript"`. |
|
|
177
|
+
| `size_bytes` | integer | Size in bytes. |
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Backward Compatibility
|
|
182
|
+
|
|
183
|
+
### Mapping from `TraceRecord` (Hermes legacy)
|
|
184
|
+
|
|
185
|
+
The existing `TraceRecord` dataclass in `backend/promethean/models.py` maps to `CanonicalRun` as follows:
|
|
186
|
+
|
|
187
|
+
| TraceRecord | CanonicalRun | Mapping rule |
|
|
188
|
+
|-------------|--------------|--------------|
|
|
189
|
+
| `trace_id` | `run_id` | Direct copy. |
|
|
190
|
+
| `agent` | `agent_name` | Direct copy. |
|
|
191
|
+
| `agent_version` | `agent_version` | Direct copy. |
|
|
192
|
+
| `timestamp` | `started_at` | Direct copy (ISO 8601). |
|
|
193
|
+
| — | `ended_at` | Set to `started_at` if missing. |
|
|
194
|
+
| `task` | `task_name` | Direct copy. |
|
|
195
|
+
| `outcome` | `outcome` | Direct copy (`"success"`, `"failure"`, `"partial"`). |
|
|
196
|
+
| `error_signature` | `errors[0].signature` | Wrap in array. If empty, set `errors = []`. |
|
|
197
|
+
| `context` | `context` | Direct copy (dict). |
|
|
198
|
+
| `resolution` | `resolution` | Direct copy. |
|
|
199
|
+
| — | `collector` | Set to `"hermes-trace-ingestor"` (constant). |
|
|
200
|
+
| — | `provider` | Set to `"hermes"` (constant). |
|
|
201
|
+
|
|
202
|
+
All other `CanonicalRun` fields default to null/empty if not present in `TraceRecord`.
|
|
203
|
+
|
|
204
|
+
### Unknown Fields
|
|
205
|
+
|
|
206
|
+
If a collector encounters a field not in this schema:
|
|
207
|
+
- If it's non-sensitive: include it in `context{}`
|
|
208
|
+
- If it's sensitive (API key, secret): omit it
|
|
209
|
+
- Never reject the run due to unknown fields
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Version History
|
|
214
|
+
|
|
215
|
+
### v0.1 (current)
|
|
216
|
+
- Initial schema
|
|
217
|
+
- Maps `TraceRecord` to `CanonicalRun`
|
|
218
|
+
- Defines required fields: `run_id`, `agent_name`, `collector`, `started_at`, `task_name`, `outcome`
|
|
219
|
+
- Defines optional fields for tools, files, metrics, errors, and scores
|
|
220
|
+
|
|
221
|
+
### Future versions
|
|
222
|
+
- v0.2: Add `parent_run_id` for nested agent calls
|
|
223
|
+
- v0.3: Add `reproducibility_hash` for deterministic replay
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{"run_id": "hermes-trace-001", "agent_name": "hermes", "collector": "hermes-trace-ingestor", "collector_version": "0.1.0", "started_at": "2026-05-19T14:32:00Z", "ended_at": "2026-05-19T14:35:42Z", "task_name": "Implement user authentication middleware", "outcome": "success", "agent_version": "2.1.143", "provider": "hermes", "model": null, "repo": "https://github.com/org/genoma.git", "session_id": null, "tool_calls": [{"id": "call-001", "name": "Read", "input_summary": "Read backend/main.py", "duration_ms": 145, "result_summary": "Returned 3240 chars", "error": null}, {"id": "call-002", "name": "Edit", "input_summary": "Add JWT middleware to FastAPI", "duration_ms": 320, "result_summary": "Edited 5 lines", "error": null}, {"id": "call-003", "name": "Bash", "input_summary": "pytest tests/test_auth.py", "duration_ms": 2100, "result_summary": "All 8 tests passed", "error": null}], "files_touched": [{"path": "backend/main.py", "action": "write", "size_bytes": 3240}, {"path": "backend/auth_middleware.py", "action": "write", "size_bytes": 1847}, {"path": "tests/test_auth.py", "action": "read", "size_bytes": 2156}], "artifacts": [{"path": "backend/auth_middleware.py", "type": "python", "size_bytes": 1847}], "errors": [], "metrics": {"input_tokens": 4200, "output_tokens": 1850, "cache_tokens": 512, "latency_ms": 8500, "cost_usd": 0.082, "tool_call_count": 3}, "eval_scores": [], "improvement_candidates": [], "context": {"skill_name": "auth-middleware", "commands": ["read backend/main.py", "edit backend/main.py", "bash pytest"], "files_touched": ["backend/main.py", "backend/auth_middleware.py", "tests/test_auth.py"]}, "resolution": null}
|
|
2
|
+
{"run_id": "cc-session-e8f7a9d3", "agent_name": "claude-code", "collector": "claude-code-session-collector", "collector_version": "0.1.0", "started_at": "2026-05-19T11:22:00Z", "ended_at": "2026-05-19T11:28:15Z", "task_name": "Add dark mode toggle to React dashboard", "outcome": "success", "agent_version": "2.0.5", "provider": "anthropic", "model": "claude-opus-4-7", "repo": "main", "session_id": "e8f7a9d3-2bc1-4f8e-9a2b-5c7e9f1d3a4b", "tool_calls": [{"id": "tool-read-1", "name": "Read", "input_summary": "Read src/components/Sidebar.tsx", "duration_ms": 234, "result_summary": "Returned 1240 chars", "error": null}, {"id": "tool-edit-1", "name": "Edit", "input_summary": "Add theme state to Sidebar", "duration_ms": 412, "result_summary": "Edited 8 lines", "error": null}, {"id": "tool-write-1", "name": "Write", "input_summary": "Create src/hooks/useTheme.ts", "duration_ms": 178, "result_summary": "Created new file 745 bytes", "error": null}], "files_touched": [{"path": "src/components/Sidebar.tsx", "action": "write", "size_bytes": 1512}, {"path": "src/hooks/useTheme.ts", "action": "write", "size_bytes": 745}, {"path": "src/lib/theme.ts", "action": "write", "size_bytes": 892}], "artifacts": [{"path": "src/hooks/useTheme.ts", "type": "typescript", "size_bytes": 745}, {"path": "src/lib/theme.ts", "type": "typescript", "size_bytes": 892}], "errors": [], "metrics": {"input_tokens": 3450, "output_tokens": 1220, "cache_tokens": 340, "latency_ms": 5820, "cost_usd": 0.067, "tool_call_count": 3}, "eval_scores": [], "improvement_candidates": [], "context": {"cwd": "/Users/leandrothomas/Desktop/Projects/genoma", "gitBranch": "feature/dark-mode", "version": "2.0.5", "usage": {"input_tokens": 3450, "output_tokens": 1220, "cache_read_input_tokens": 340}}, "resolution": null}
|
|
3
|
+
{"run_id": "unknown-run-abc123", "agent_name": "unknown-agent", "collector": "generic-json-ingestor", "started_at": "2026-05-19T10:00:00Z", "task_name": "Fix database query", "outcome": "partial"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from "next/server";
|
|
2
|
+
|
|
3
|
+
const HERMES_SERVER = "http://127.0.0.1:8000";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Catch-all proxy for Hermes web server endpoints.
|
|
7
|
+
*
|
|
8
|
+
* Routes with specific files at src/app/api/* take precedence.
|
|
9
|
+
* This handler catches everything else (e.g., /api/skills, /api/status, etc.)
|
|
10
|
+
* and proxies requests to the Hermes FastAPI backend (:9119).
|
|
11
|
+
*/
|
|
12
|
+
async function handler(request: NextRequest): Promise<NextResponse> {
|
|
13
|
+
const { pathname, search } = new URL(request.url);
|
|
14
|
+
const targetUrl = `${HERMES_SERVER}${pathname}${search}`;
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
const headers = new Headers(request.headers);
|
|
18
|
+
// Remove host header (Next.js sets it to localhost:3000)
|
|
19
|
+
headers.delete("host");
|
|
20
|
+
|
|
21
|
+
// Forward the session token if present
|
|
22
|
+
const token = request.headers.get("x-hermes-session-token");
|
|
23
|
+
if (!token) {
|
|
24
|
+
// Try to extract from referer or cookie (browser will have set it)
|
|
25
|
+
headers.set("x-hermes-session-token", "");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const proxyResponse = await fetch(targetUrl, {
|
|
29
|
+
method: request.method,
|
|
30
|
+
headers,
|
|
31
|
+
body: request.method !== "GET" && request.method !== "HEAD"
|
|
32
|
+
? await request.text().catch(() => null)
|
|
33
|
+
: undefined,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const contentType = proxyResponse.headers.get("content-type") || "";
|
|
37
|
+
const body = contentType.includes("application/json")
|
|
38
|
+
? await proxyResponse.json()
|
|
39
|
+
: await proxyResponse.text();
|
|
40
|
+
|
|
41
|
+
return NextResponse.json(body, {
|
|
42
|
+
status: proxyResponse.status,
|
|
43
|
+
headers: {
|
|
44
|
+
"content-type": contentType || "application/json",
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
return NextResponse.json(
|
|
49
|
+
{ detail: `Backend unreachable: ${err instanceof Error ? err.message : "unknown"}` },
|
|
50
|
+
{ status: 503 },
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { handler as GET, handler as POST, handler as PUT, handler as DELETE, handler as PATCH };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
|
|
3
|
+
const HERMES_SERVER = "http://127.0.0.1:8000";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Proxy the Hermes session token from the web server's HTML.
|
|
7
|
+
* The browser calls this to avoid CORS issues when fetching the token directly.
|
|
8
|
+
*/
|
|
9
|
+
export async function GET() {
|
|
10
|
+
try {
|
|
11
|
+
const html = await fetch(`${HERMES_SERVER}/`, {
|
|
12
|
+
signal: AbortSignal.timeout(5_000),
|
|
13
|
+
}).then((r) => r.text());
|
|
14
|
+
|
|
15
|
+
const match = html.match(/__HERMES_SESSION_TOKEN__\s*=\s*"([^"]+)"/);
|
|
16
|
+
const token = match?.[1] ?? null;
|
|
17
|
+
|
|
18
|
+
return NextResponse.json({ token });
|
|
19
|
+
} catch {
|
|
20
|
+
return NextResponse.json({ token: null }, { status: 503 });
|
|
21
|
+
}
|
|
22
|
+
}
|