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,316 @@
|
|
|
1
|
+
# 🧬 Genoma — Agent-Agnostic Evolution Dashboard
|
|
2
|
+
|
|
3
|
+
**Autonomous Evolution Interface** — Cross-agent observability, evaluation, and evolution dashboard for any AI coding agent (Claude Code, Hermes, Codex, OpenCode, etc.).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ❓ ¿Qué es?
|
|
8
|
+
|
|
9
|
+
Genoma es la interfaz web que permite **monitorear, evaluar y evolucionar** runs de cualquier agente AI en tiempo real. Agnóstico a provider: funciona con Claude Code, Hermes, Codex, o cualquier agente que genere traces. Conecta con el backend FastAPI (:8000) y expone:
|
|
10
|
+
|
|
11
|
+
- **Overview** — Métricas globales, estado del backend, últimos evolution runs
|
|
12
|
+
- **Skill Hub** — Catálogo multi-provider de 229+ skills, toggle enable/disable
|
|
13
|
+
- **Evolution** — Lanzar y monitorear evoluciones DSPy+GEPA con约束es de seguridad
|
|
14
|
+
- **Datasets** — Gestión de datasets de prueba y holdout para validación
|
|
15
|
+
- **Metrics** — Scores, tasas de éxito, tiempos, deltas before/after
|
|
16
|
+
- **Live Logs** — Streaming en tiempo real vía WebSocket
|
|
17
|
+
- **Curator** — Lifecycle management (active → stale → archive) con pin/restore
|
|
18
|
+
- **Settings** — Configuración del ecosistema
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 🎯 ¿Qué resuelve?
|
|
23
|
+
|
|
24
|
+
| Problema | Solución |
|
|
25
|
+
|---|---|
|
|
26
|
+
| Skills estancadas sin mejora medible | Evolution automatizada con DSPy — mide delta (before → after) no scores absolutos |
|
|
27
|
+
| Catálogo caótico (229+ skills) | Curator: clasifica active/stale/archived, detecta skills sin uso, consolida duplicados |
|
|
28
|
+
| Zero observabilidad de agentes | Métricas en tiempo real, WebSocket streaming, Promethean traces |
|
|
29
|
+
| Validación débil (sin holdout) | Datasets con splits train/test, LLM Judge para evaluar evoluciones |
|
|
30
|
+
| Setup frágil | Health check automático, Circuit Breaker, auto-reconnect |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 🚀 Instalación & Startup
|
|
35
|
+
|
|
36
|
+
### One-liner (recomendado)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
./run.sh
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Inicia backend (:8000) + frontend (:3000) simultáneamente. Ctrl+C stops ambos.
|
|
43
|
+
|
|
44
|
+
### Manual setup
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Terminal 1: Backend
|
|
48
|
+
python3 -m pip install fastapi uvicorn pydantic python-dotenv --break-system-packages -q
|
|
49
|
+
python3 -m uvicorn backend.main:app --reload --port 8000
|
|
50
|
+
|
|
51
|
+
# Terminal 2: Frontend
|
|
52
|
+
pnpm install --ignore-scripts
|
|
53
|
+
pnpm dev # → http://localhost:3000
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Build para producción
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pnpm build # TypeScript + Turbopack, 0 errores
|
|
60
|
+
pnpm start # Production server
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Configuración requerida (para evolución de skills)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
67
|
+
# O OPENROUTER_API_KEY, OPENAI_API_KEY, etc.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 🔌 MCP / Comunicación
|
|
73
|
+
|
|
74
|
+
El dashboard se comunica con el backend por 3 canales:
|
|
75
|
+
|
|
76
|
+
### REST API (`http://localhost:8000`)
|
|
77
|
+
|
|
78
|
+
| Endpoint | Verbo | Descripción |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `/api/health` | `GET` | Health check (skills count, categorías) |
|
|
81
|
+
| `/api/metrics` | `GET` | Métricas agregadas (runs, tasa éxito, avg improvement) |
|
|
82
|
+
| `/api/skills` | `GET` | Lista plana de skills |
|
|
83
|
+
| `/api/skills/providers` | `GET` | Skills agrupadas por provider |
|
|
84
|
+
| `/api/skills/{name}` | `GET` | Detalle completo (frontmatter + body) |
|
|
85
|
+
| `/api/skills/toggle` | `POST` | Enable/disable skill por provider |
|
|
86
|
+
| `/api/skills/refresh` | `GET` | Re-scan del filesystem |
|
|
87
|
+
| `/api/evolution/start` | `POST` | Lanzar evolución (`skill_name`, `iterations`) |
|
|
88
|
+
| `/api/evolution/runs` | `GET` | Historial de runs |
|
|
89
|
+
| `/api/evolution/validate/{name}` | `POST` | Validar constraints pre-evolución |
|
|
90
|
+
| `/api/jobs` | `GET` | Jobs activos/completados |
|
|
91
|
+
| `/api/jobs/{id}` | `DELETE` | Cancelar job |
|
|
92
|
+
| `/api/jobs/{id}/logs` | `GET` | Logs live de un job |
|
|
93
|
+
| `/api/datasets` | `GET` | Datasets disponibles |
|
|
94
|
+
| `/api/datasets/{skill}` | `GET` | Splits (train/holdout) de un dataset |
|
|
95
|
+
| `/api/curator/status` | `GET` | Estado del curator (active/stale/archived counts) |
|
|
96
|
+
| `/api/curator/skills` | `GET` | Skills con metadata de uso |
|
|
97
|
+
| `/api/curator/run` | `POST` | Ejecutar curator (clasifica + archiva) |
|
|
98
|
+
| `/api/curator/pin/{skill}` | `POST` | Pinear skill (inmune a archive) |
|
|
99
|
+
| `/api/curator/restore/{skill}` | `POST` | Restaurar skill archivada |
|
|
100
|
+
| `/api/memory` | `GET` | Memoria persistente del agente |
|
|
101
|
+
| `/api/graph` | `GET` | Knowledge graph |
|
|
102
|
+
| `/api/promethean/traces` | `POST` | Enviar trace de ejecución |
|
|
103
|
+
| `/api/promethean/status` | `GET` | Estado del ciclo Promethean |
|
|
104
|
+
| `/api/runs` | `GET` | Lista canonical runs (agent, outcome, repo, limit) |
|
|
105
|
+
| `/api/runs/{id}` | `GET` | Run detallado con métricas + errors |
|
|
106
|
+
| `/api/agents` | `GET` | Resumen por agente (count, success_rate, tokens) |
|
|
107
|
+
| `/api/runs/migrate` | `POST` | Migrar runs Hermes + Claude Code a SQLite |
|
|
108
|
+
| `/api/runs/{id}/evaluate` | `POST` | Evaluar run con scorers composables |
|
|
109
|
+
| `/api/runs/{id}/scores` | `GET` | Scores de evaluación guardados |
|
|
110
|
+
| `/api/runs/compare` | `POST` | Regression detection (baseline vs evolved) |
|
|
111
|
+
| `/api/skills/{name}/evolve` | `POST` | Evolucionar skill con SDD optimizer |
|
|
112
|
+
|
|
113
|
+
### WebSocket (`ws://localhost:8000/ws/stream`)
|
|
114
|
+
|
|
115
|
+
Streaming en tiempo real de eventos del backend. El dashboard se auto-reconecta cada 3s si se cae.
|
|
116
|
+
|
|
117
|
+
### Next.js Proxy (`/api/*`)
|
|
118
|
+
|
|
119
|
+
El `app/api/[...path]/route.ts` actúa como catch-all proxy hacia `http://localhost:8000/api/*`, permitiendo llamadas relativas desde el frontend sin CORS.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## ✨ Características
|
|
124
|
+
|
|
125
|
+
- 🧬 **Genoma Design System** — `#002444` (Navy), `#a93800` (Orange), `#fcf9f8` (Warm White)
|
|
126
|
+
- 🔤 **Inter** (rsms/inter, variable font) + Geist Mono
|
|
127
|
+
- 🧩 **shadcn/ui v4** — Sidebar colapsable a iconos, tooltips, sheets, cards
|
|
128
|
+
- 🌓 **Dark mode** — Script inline anti-FOUC + animated toggler
|
|
129
|
+
- 📐 **Pretext.js** — Text layout measurement sin DOM
|
|
130
|
+
- ⚡ **CountUp** — Animaciones de números con `useState`
|
|
131
|
+
- 🎯 **SpotlightCard** — Efecto hover con gradiente radial
|
|
132
|
+
- 📡 **WebSocket** — Auto-reconnect con token de sesión
|
|
133
|
+
- 🛡️ **Circuit Breaker** — Health check + banner "Backend Unavailable" + retry
|
|
134
|
+
- 📱 **Responsive** — Sidebar drawer en mobile (vía shadcn Sheet)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 📦 Stack
|
|
139
|
+
|
|
140
|
+
| Capa | Tecnología |
|
|
141
|
+
|---|---|
|
|
142
|
+
| Framework | Next.js 16.2.4 (Turbopack) |
|
|
143
|
+
| Estilos | Tailwind CSS v4 + `tw-animate-css` |
|
|
144
|
+
| Componentes | shadcn/ui v4 (`radix-nova`) |
|
|
145
|
+
| Fuente | Inter variable (`next/font/google`) |
|
|
146
|
+
| Animaciones | Framer Motion 12.x |
|
|
147
|
+
| Datos | TanStack React Query 5 |
|
|
148
|
+
| Iconos | Lucide React |
|
|
149
|
+
| Medición texto | Pretext.js 0.0.6 |
|
|
150
|
+
| Tema | next-themes (`genoma-theme`) |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 🎨 Design Rules (GENOMA.md)
|
|
155
|
+
|
|
156
|
+
1. **No-Line Rule** — Sin bordes `1px`. Separación por shifts de background + espaciado
|
|
157
|
+
2. **Glass & Gradient** — Headers `backdrop-blur-xl`, CTAs gradiente `135deg`
|
|
158
|
+
3. **Shadow Rule** — `editorial-shadow`: `0px 20px 40px rgba(28,27,27,0.06)`
|
|
159
|
+
4. **No-Divider Rule** — Ítems separados solo por espaciado vertical
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Agent-Agnostic Evolution Layer
|
|
164
|
+
|
|
165
|
+
Extensión del sistema original para soportar cualquier agente (Claude Code, Codex, OpenCode) usando el mismo motor de evaluación que Hermes. Los datos de cualquier agente se normalizan a `CanonicalRun` y se evalúan con los mismos scorers.
|
|
166
|
+
|
|
167
|
+
### Cómo genera las evaluaciones: Promethean + GEPA + DSPy
|
|
168
|
+
|
|
169
|
+
#### 1. Promethean (Sistema base)
|
|
170
|
+
|
|
171
|
+
Promethean es la capa de evaluación de Hermes. Define el contrato entre ejecución y validación:
|
|
172
|
+
|
|
173
|
+
- `TraceRecord`: Modelo canónico de una traza de ejecución
|
|
174
|
+
- `TraceIngestor`: Recolecta trazas desde `~/.hermes/traces/ingested/`
|
|
175
|
+
- `DeltaValidator`: Valida skills usando un dataset con split holdout
|
|
176
|
+
|
|
177
|
+
#### 2. GEPA (Modelo matemático de evaluación)
|
|
178
|
+
|
|
179
|
+
GEPA (Generic Evolutionary Pattern Analyzer) implementa un ciclo de mejora iterativa basado en **holdout validation con comparación delta**:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Dataset = train_set + holdout_set (holdout ≈ 30% por defecto)
|
|
183
|
+
|
|
184
|
+
Baseline:
|
|
185
|
+
success_rate_baseline = count(resolved) / count(holdout)
|
|
186
|
+
|
|
187
|
+
Evolved (post-compilación DSPy):
|
|
188
|
+
success_rate_evolved = baseline + compilation.delta
|
|
189
|
+
|
|
190
|
+
Delta:
|
|
191
|
+
Δ[metric] = evolved[metric] - baseline[metric]
|
|
192
|
+
|
|
193
|
+
Gate de aceptación:
|
|
194
|
+
passed = |Δ[primary_metric]| ≥ threshold
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Nota importante:** La simulación actual es aritmética — usa el `compilation.delta` que reporta DSPy sobre el baseline. No ejecuta el skill real contra el holdout. En producción esto debería ejecutar el skill compilado directamente.
|
|
198
|
+
|
|
199
|
+
#### 3. DSPy (Optimizer de prompts)
|
|
200
|
+
|
|
201
|
+
DSPy optimiza las instrucciones del skill usando métodos que no requieren gradientes (LLMs son non-differentiable):
|
|
202
|
+
|
|
203
|
+
- **Bootstrap Few-Shot**: Muestrea ejemplos del dataset, los ejecuta, filtra por métrica, usa top-k como demonstrations
|
|
204
|
+
- **MIPRO**: Bayesian optimization sobre el espacio de instrucciones del prompt
|
|
205
|
+
- `compilation.delta` = mejora de métrica que el optimizer reportó
|
|
206
|
+
|
|
207
|
+
DSPy no ejecuta el modelo directamente — compila el programa de prompts para maximizar una función de métrica M(ejemplo, predicción) ∈ [0, 1].
|
|
208
|
+
|
|
209
|
+
#### 4. DeltaScorer (Integración en evaluation engine)
|
|
210
|
+
|
|
211
|
+
El `DeltaScorer` del evaluation engine es el puente entre DSPy/GEPA y el sistema de scoring agnóstico:
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# Solo aplica a Hermes runs con context.skill_name
|
|
215
|
+
def applies_to(run: CanonicalRun) -> bool:
|
|
216
|
+
return run.agent_name == "hermes" and "skill_name" in run.context
|
|
217
|
+
|
|
218
|
+
# Wraps DeltaValidator.validate()
|
|
219
|
+
def score(run: CanonicalRun) -> EvalScore:
|
|
220
|
+
result = validator.validate(skill_name, baseline)
|
|
221
|
+
score = 1.0 if result["passed"] else 0.0
|
|
222
|
+
return EvalScore(scorer="delta", score=score, passed=result["passed"])
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### Agent-Agnostic Architecture
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
COLLECTORS (normalizan trazas propias de cada agente)
|
|
231
|
+
HermesCollector ── TraceRecord → CanonicalRun
|
|
232
|
+
ClaudeCodeCollector ── JSONL session events → CanonicalRun
|
|
233
|
+
(extensible)
|
|
234
|
+
|
|
235
|
+
│
|
|
236
|
+
▼ CanonicalRun (schema canónico)
|
|
237
|
+
│ run_id, agent_name, collector, outcome,
|
|
238
|
+
│ tool_calls[], metrics{}, errors[], context{}
|
|
239
|
+
│
|
|
240
|
+
▼
|
|
241
|
+
|
|
242
|
+
STORAGE (SQLite, WAL mode)
|
|
243
|
+
runs / tool_calls / run_metrics / run_errors / eval_scores
|
|
244
|
+
|
|
245
|
+
│
|
|
246
|
+
▼
|
|
247
|
+
|
|
248
|
+
EVALUATION ENGINE (scorers composables)
|
|
249
|
+
OutcomeScorer success=1.0, partial=0.5, failure=0.0
|
|
250
|
+
ToolEfficiencyScorer unique_tools / total_calls (threshold > 0.3)
|
|
251
|
+
TokenCostScorer max(0, 1 - tokens/50000)
|
|
252
|
+
ErrorRecoveryScorer success_no_errors=1.0, success_with_errors=0.8
|
|
253
|
+
DeltaScorer wraps DeltaValidator (solo Hermes)
|
|
254
|
+
|
|
255
|
+
aggregate_score = mean(scores aplicables)
|
|
256
|
+
|
|
257
|
+
detect_regression:
|
|
258
|
+
delta = evolved_aggregate - baseline_aggregate
|
|
259
|
+
regression = delta < -threshold
|
|
260
|
+
improvement = delta > threshold
|
|
261
|
+
neutral = |delta| ≤ threshold
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Nuevos API Endpoints
|
|
265
|
+
|
|
266
|
+
| Endpoint | Verbo | Descripción |
|
|
267
|
+
|---|---|---|
|
|
268
|
+
| `/api/runs` | `GET` | Lista runs con filtros: agent, outcome, repo, since, until, limit |
|
|
269
|
+
| `/api/runs/{id}` | `GET` | Run detallado con metrics, tool_calls, errors |
|
|
270
|
+
| `/api/runs/{id}/evaluate` | `POST` | Corre scorers sobre el run, devuelve scores + aggregate |
|
|
271
|
+
| `/api/runs/{id}/scores` | `GET` | Scores de evaluación guardados en DB |
|
|
272
|
+
| `/api/runs/compare` | `POST` | Regression detection: baseline vs evolved (threshold configurable) |
|
|
273
|
+
| `/api/agents` | `GET` | Stats por agente: count, success_rate, avg_tokens |
|
|
274
|
+
| `/api/runs/migrate` | `POST` | Migra traces existentes (Hermes + Claude Code) a SQLite |
|
|
275
|
+
|
|
276
|
+
### Adding a New Collector
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
# 1. Crear backend/collectors/my_collector.py
|
|
280
|
+
class MyCollector:
|
|
281
|
+
AGENT_NAME = "my-agent"
|
|
282
|
+
VERSION = "0.1.0"
|
|
283
|
+
|
|
284
|
+
def collect_session(self, source: Path) -> Optional[CanonicalRun]:
|
|
285
|
+
# Parsear source, extraer campos requeridos
|
|
286
|
+
return CanonicalRun(
|
|
287
|
+
run_id=...,
|
|
288
|
+
agent_name=self.AGENT_NAME,
|
|
289
|
+
collector=f"{self.AGENT_NAME}-collector",
|
|
290
|
+
started_at=...,
|
|
291
|
+
task_name=...,
|
|
292
|
+
outcome=...,
|
|
293
|
+
# campos opcionales: tool_calls, metrics, errors, etc.
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
# 2. Agregar tests en tests/collectors/test_my_collector.py
|
|
297
|
+
# 3. Agregar endpoint en backend/main.py
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Adding a New Scorer
|
|
301
|
+
|
|
302
|
+
```python
|
|
303
|
+
# Agregar en backend/eval/scorers.py
|
|
304
|
+
class MyScorer:
|
|
305
|
+
name = "my_scorer"
|
|
306
|
+
|
|
307
|
+
def score(self, run: CanonicalRun) -> EvalScore:
|
|
308
|
+
score = ... # 0.0 a 1.0
|
|
309
|
+
return EvalScore(scorer=self.name, score=score, passed=score > 0.5)
|
|
310
|
+
|
|
311
|
+
def applies_to(self, run: CanonicalRun) -> bool:
|
|
312
|
+
return True # o condición específica
|
|
313
|
+
|
|
314
|
+
# Pasar custom scorers al engine:
|
|
315
|
+
engine = EvaluationEngine(store=store, scorers=[MyScorer(), OutcomeScorer()])
|
|
316
|
+
```
|