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.
Files changed (445) hide show
  1. package/.brv/.obsidian/app.json +1 -0
  2. package/.brv/.obsidian/appearance.json +1 -0
  3. package/.brv/.obsidian/core-plugins.json +33 -0
  4. package/.brv/.obsidian/graph.json +22 -0
  5. package/.brv/.obsidian/workspace.json +195 -0
  6. package/.brv/Sin ti/314/201tulo 1.canvas" +1 -0
  7. package/.brv/Sin ti/314/201tulo 2.canvas" +1 -0
  8. package/.brv/Sin ti/314/201tulo.canvas" +1 -0
  9. package/.brv/_queue_status.json +1 -0
  10. package/.brv/config.json +5 -0
  11. package/.brv/context-tree/_index.md +60 -0
  12. package/.brv/context-tree/_manifest.json +165 -0
  13. package/.brv/context-tree/backend/_index.md +24 -0
  14. package/.brv/context-tree/backend/backend/_index.md +40 -0
  15. package/.brv/context-tree/backend/backend/init.abstract.md +0 -0
  16. package/.brv/context-tree/backend/backend/init.md +27 -0
  17. package/.brv/context-tree/backend/backend/init.overview.md +29 -0
  18. package/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
  19. package/.brv/context-tree/backend/backend/job_tracker.md +273 -0
  20. package/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
  21. package/.brv/context-tree/backend/backend/main.abstract.md +0 -0
  22. package/.brv/context-tree/backend/backend/main.md +1292 -0
  23. package/.brv/context-tree/backend/backend/main.overview.md +30 -0
  24. package/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
  25. package/.brv/context-tree/backend/backend/requirements.md +37 -0
  26. package/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
  27. package/.brv/context-tree/docs/_index.md +37 -0
  28. package/.brv/context-tree/docs/api/_index.md +54 -0
  29. package/.brv/context-tree/docs/api/context.md +11 -0
  30. package/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
  31. package/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
  32. package/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
  33. package/.brv/context-tree/frontend/_index.md +48 -0
  34. package/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
  35. package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
  36. package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
  37. package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
  38. package/.brv/context-tree/frontend/src/_index.md +53 -0
  39. package/.brv/context-tree/frontend/src/components/_index.md +52 -0
  40. package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
  41. package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
  42. package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
  43. package/.brv/context-tree/frontend/src/context.md +10 -0
  44. package/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
  45. package/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
  46. package/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
  47. package/.brv/context-tree/frontend/src/lib/_index.md +48 -0
  48. package/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
  49. package/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
  50. package/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
  51. package/.brv/context-tree/frontend/src/page.abstract.md +0 -0
  52. package/.brv/context-tree/frontend/src/page.md +103 -0
  53. package/.brv/context-tree/frontend/src/page.overview.md +7 -0
  54. package/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
  55. package/.brv/context-tree/frontend/src/settingspage.md +124 -0
  56. package/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
  57. package/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
  58. package/.brv/context-tree/frontend/src/sidebar.md +170 -0
  59. package/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
  60. package/.brv/context-tree/meta/_index.md +24 -0
  61. package/.brv/context-tree/meta/curation_context/_index.md +24 -0
  62. package/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
  63. package/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
  64. package/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
  65. package/.brv/dream-log/drm-1777341062653.json +33 -0
  66. package/.brv/dream-state.json +8 -0
  67. package/.brv/dream.lock +0 -0
  68. package/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
  69. package/.claude/settings.local.json +7 -0
  70. package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/app.json +1 -0
  71. package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/appearance.json +1 -0
  72. package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/core-plugins.json +33 -0
  73. package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/graph.json +22 -0
  74. package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/workspace.json +195 -0
  75. package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 1.canvas" +1 -0
  76. package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 2.canvas" +1 -0
  77. package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo.canvas" +1 -0
  78. package/.claude/worktrees/phase-2-mcp/.brv/_queue_status.json +1 -0
  79. package/.claude/worktrees/phase-2-mcp/.brv/config.json +5 -0
  80. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_index.md +60 -0
  81. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_manifest.json +165 -0
  82. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/_index.md +24 -0
  83. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/_index.md +40 -0
  84. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.abstract.md +0 -0
  85. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.md +27 -0
  86. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.overview.md +29 -0
  87. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
  88. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.md +273 -0
  89. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
  90. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.abstract.md +0 -0
  91. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.md +1292 -0
  92. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.overview.md +30 -0
  93. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
  94. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.md +37 -0
  95. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
  96. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/_index.md +37 -0
  97. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/_index.md +54 -0
  98. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/context.md +11 -0
  99. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
  100. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
  101. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
  102. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/_index.md +48 -0
  103. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
  104. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
  105. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
  106. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
  107. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/_index.md +53 -0
  108. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/_index.md +52 -0
  109. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
  110. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
  111. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
  112. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/context.md +10 -0
  113. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
  114. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
  115. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
  116. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/_index.md +48 -0
  117. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
  118. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
  119. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
  120. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.abstract.md +0 -0
  121. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.md +103 -0
  122. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.overview.md +7 -0
  123. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
  124. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.md +124 -0
  125. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
  126. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
  127. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.md +170 -0
  128. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
  129. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/_index.md +24 -0
  130. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/_index.md +24 -0
  131. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
  132. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
  133. package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
  134. package/.claude/worktrees/phase-2-mcp/.brv/dream-log/drm-1777341062653.json +33 -0
  135. package/.claude/worktrees/phase-2-mcp/.brv/dream-state.json +8 -0
  136. package/.claude/worktrees/phase-2-mcp/.brv/dream.lock +0 -0
  137. package/.claude/worktrees/phase-2-mcp/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
  138. package/.claude/worktrees/phase-2-mcp/.claude/settings.local.json +13 -0
  139. package/.claude/worktrees/phase-2-mcp/.kilocode/package-lock.json +378 -0
  140. package/.claude/worktrees/phase-2-mcp/.kilocode/package.json +5 -0
  141. package/.claude/worktrees/phase-2-mcp/AGENTS.md +5 -0
  142. package/.claude/worktrees/phase-2-mcp/CLAUDE.md +29 -0
  143. package/.claude/worktrees/phase-2-mcp/QA_AUDIT_PLAN.md +156 -0
  144. package/.claude/worktrees/phase-2-mcp/README.md +316 -0
  145. package/.claude/worktrees/phase-2-mcp/agent-agnostic-evolution-dashboard.md +405 -0
  146. package/.claude/worktrees/phase-2-mcp/backend/__init__.py +0 -0
  147. package/.claude/worktrees/phase-2-mcp/backend/collectors/__init__.py +0 -0
  148. package/.claude/worktrees/phase-2-mcp/backend/collectors/claude_code_collector.py +277 -0
  149. package/.claude/worktrees/phase-2-mcp/backend/collectors/hermes_collector.py +68 -0
  150. package/.claude/worktrees/phase-2-mcp/backend/curator.py +512 -0
  151. package/.claude/worktrees/phase-2-mcp/backend/eval/__init__.py +19 -0
  152. package/.claude/worktrees/phase-2-mcp/backend/eval/engine.py +116 -0
  153. package/.claude/worktrees/phase-2-mcp/backend/eval/scorers.py +201 -0
  154. package/.claude/worktrees/phase-2-mcp/backend/generate_dataset.py +86 -0
  155. package/.claude/worktrees/phase-2-mcp/backend/job_tracker.py +232 -0
  156. package/.claude/worktrees/phase-2-mcp/backend/main.py +1746 -0
  157. package/.claude/worktrees/phase-2-mcp/backend/mcp_server.py +250 -0
  158. package/.claude/worktrees/phase-2-mcp/backend/promethean/__init__.py +24 -0
  159. package/.claude/worktrees/phase-2-mcp/backend/promethean/cycle_orchestrator.py +270 -0
  160. package/.claude/worktrees/phase-2-mcp/backend/promethean/delta_validator.py +191 -0
  161. package/.claude/worktrees/phase-2-mcp/backend/promethean/dspy_compiler.py +315 -0
  162. package/.claude/worktrees/phase-2-mcp/backend/promethean/gepa_strategist.py +213 -0
  163. package/.claude/worktrees/phase-2-mcp/backend/promethean/models.py +260 -0
  164. package/.claude/worktrees/phase-2-mcp/backend/promethean/skill_deployer.py +195 -0
  165. package/.claude/worktrees/phase-2-mcp/backend/promethean/trace_ingestion.py +142 -0
  166. package/.claude/worktrees/phase-2-mcp/backend/requirements.txt +6 -0
  167. package/.claude/worktrees/phase-2-mcp/backend/sdd_evolve.py +459 -0
  168. package/.claude/worktrees/phase-2-mcp/backend/skill_detector.py +227 -0
  169. package/.claude/worktrees/phase-2-mcp/backend/skill_registry.py +289 -0
  170. package/.claude/worktrees/phase-2-mcp/backend/storage/__init__.py +5 -0
  171. package/.claude/worktrees/phase-2-mcp/backend/storage/run_store.py +393 -0
  172. package/.claude/worktrees/phase-2-mcp/backend/storage/schema.sql +99 -0
  173. package/.claude/worktrees/phase-2-mcp/backend/validate_evolution.py +267 -0
  174. package/.claude/worktrees/phase-2-mcp/components.json +28 -0
  175. package/.claude/worktrees/phase-2-mcp/docs/api/hermes-api.openapi.yaml +438 -0
  176. package/.claude/worktrees/phase-2-mcp/docs/hero.svg +148 -0
  177. package/.claude/worktrees/phase-2-mcp/eslint.config.mjs +18 -0
  178. package/.claude/worktrees/phase-2-mcp/install.sh +245 -0
  179. package/.claude/worktrees/phase-2-mcp/next-env.d.ts +6 -0
  180. package/.claude/worktrees/phase-2-mcp/next.config.ts +32 -0
  181. package/.claude/worktrees/phase-2-mcp/package-lock.json +11936 -0
  182. package/.claude/worktrees/phase-2-mcp/package.json +41 -0
  183. package/.claude/worktrees/phase-2-mcp/pnpm-workspace.yaml +4 -0
  184. package/.claude/worktrees/phase-2-mcp/postcss.config.mjs +7 -0
  185. package/.claude/worktrees/phase-2-mcp/public/file.svg +1 -0
  186. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Bold.otf +0 -0
  187. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
  188. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Medium.otf +0 -0
  189. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Regular.otf +0 -0
  190. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
  191. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Bold.otf +0 -0
  192. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
  193. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Medium.otf +0 -0
  194. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Regular.otf +0 -0
  195. package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
  196. package/.claude/worktrees/phase-2-mcp/public/globe.svg +1 -0
  197. package/.claude/worktrees/phase-2-mcp/public/next.svg +1 -0
  198. package/.claude/worktrees/phase-2-mcp/public/theme-preview.html +257 -0
  199. package/.claude/worktrees/phase-2-mcp/public/vercel.svg +1 -0
  200. package/.claude/worktrees/phase-2-mcp/public/window.svg +1 -0
  201. package/.claude/worktrees/phase-2-mcp/run.sh +26 -0
  202. package/.claude/worktrees/phase-2-mcp/skills-lock.json +10 -0
  203. package/.claude/worktrees/phase-2-mcp/specs/event-schema.md +223 -0
  204. package/.claude/worktrees/phase-2-mcp/specs/examples/run.jsonl +3 -0
  205. package/.claude/worktrees/phase-2-mcp/src/app/api/[...path]/route.ts +55 -0
  206. package/.claude/worktrees/phase-2-mcp/src/app/api/auth/token/route.ts +22 -0
  207. package/.claude/worktrees/phase-2-mcp/src/app/evolution/page.tsx +589 -0
  208. package/.claude/worktrees/phase-2-mcp/src/app/favicon.ico +0 -0
  209. package/.claude/worktrees/phase-2-mcp/src/app/globals.css +321 -0
  210. package/.claude/worktrees/phase-2-mcp/src/app/layout.tsx +63 -0
  211. package/.claude/worktrees/phase-2-mcp/src/app/page.tsx +70 -0
  212. package/.claude/worktrees/phase-2-mcp/src/app/skills/page.tsx +369 -0
  213. package/.claude/worktrees/phase-2-mcp/src/components/ApiConfigCard.tsx +199 -0
  214. package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.css +1 -0
  215. package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.d.ts +1 -0
  216. package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.jsx +1 -0
  217. package/.claude/worktrees/phase-2-mcp/src/components/CoreLoopToggle.tsx +111 -0
  218. package/.claude/worktrees/phase-2-mcp/src/components/EnvironmentStatus.tsx +176 -0
  219. package/.claude/worktrees/phase-2-mcp/src/components/EvolutionBackground.tsx +1 -0
  220. package/.claude/worktrees/phase-2-mcp/src/components/ReactQueryProvider.tsx +24 -0
  221. package/.claude/worktrees/phase-2-mcp/src/components/Sidebar.tsx +247 -0
  222. package/.claude/worktrees/phase-2-mcp/src/components/SkillDiffViewer.tsx +154 -0
  223. package/.claude/worktrees/phase-2-mcp/src/components/ThemeAwareBackground.tsx +67 -0
  224. package/.claude/worktrees/phase-2-mcp/src/components/ThemeToggle.tsx +54 -0
  225. package/.claude/worktrees/phase-2-mcp/src/components/WelcomeHero.tsx +77 -0
  226. package/.claude/worktrees/phase-2-mcp/src/components/bits/ClickSpark.tsx +116 -0
  227. package/.claude/worktrees/phase-2-mcp/src/components/bits/CountUp.tsx +98 -0
  228. package/.claude/worktrees/phase-2-mcp/src/components/bits/DarkSelect.tsx +95 -0
  229. package/.claude/worktrees/phase-2-mcp/src/components/bits/DecryptedText.tsx +161 -0
  230. package/.claude/worktrees/phase-2-mcp/src/components/bits/ElectricBorder.tsx +184 -0
  231. package/.claude/worktrees/phase-2-mcp/src/components/bits/GlitchText.tsx +34 -0
  232. package/.claude/worktrees/phase-2-mcp/src/components/bits/ShinyText.tsx +55 -0
  233. package/.claude/worktrees/phase-2-mcp/src/components/bits/SpotlightCard.tsx +42 -0
  234. package/.claude/worktrees/phase-2-mcp/src/components/bits/TextType.tsx +95 -0
  235. package/.claude/worktrees/phase-2-mcp/src/components/bits/index.ts +9 -0
  236. package/.claude/worktrees/phase-2-mcp/src/components/pages/CuratorPage.tsx +632 -0
  237. package/.claude/worktrees/phase-2-mcp/src/components/pages/DatasetPage.tsx +271 -0
  238. package/.claude/worktrees/phase-2-mcp/src/components/pages/EvolutionPage.tsx +676 -0
  239. package/.claude/worktrees/phase-2-mcp/src/components/pages/FunctionCallingPage.tsx +1 -0
  240. package/.claude/worktrees/phase-2-mcp/src/components/pages/LogsPage.tsx +272 -0
  241. package/.claude/worktrees/phase-2-mcp/src/components/pages/MetricsPage.tsx +246 -0
  242. package/.claude/worktrees/phase-2-mcp/src/components/pages/OverviewPage.tsx +420 -0
  243. package/.claude/worktrees/phase-2-mcp/src/components/pages/SettingsPage.tsx +88 -0
  244. package/.claude/worktrees/phase-2-mcp/src/components/pages/SkillStudioPage.tsx +376 -0
  245. package/.claude/worktrees/phase-2-mcp/src/components/ui/animated-theme-toggler.tsx +97 -0
  246. package/.claude/worktrees/phase-2-mcp/src/components/ui/button.tsx +67 -0
  247. package/.claude/worktrees/phase-2-mcp/src/components/ui/card.tsx +103 -0
  248. package/.claude/worktrees/phase-2-mcp/src/components/ui/input.tsx +19 -0
  249. package/.claude/worktrees/phase-2-mcp/src/components/ui/separator.tsx +28 -0
  250. package/.claude/worktrees/phase-2-mcp/src/components/ui/sheet.tsx +147 -0
  251. package/.claude/worktrees/phase-2-mcp/src/components/ui/sidebar.tsx +702 -0
  252. package/.claude/worktrees/phase-2-mcp/src/components/ui/skeleton.tsx +13 -0
  253. package/.claude/worktrees/phase-2-mcp/src/components/ui/theme-toggle.tsx +272 -0
  254. package/.claude/worktrees/phase-2-mcp/src/components/ui/tooltip.tsx +57 -0
  255. package/.claude/worktrees/phase-2-mcp/src/hooks/use-mobile.ts +19 -0
  256. package/.claude/worktrees/phase-2-mcp/src/lib/api.ts +455 -0
  257. package/.claude/worktrees/phase-2-mcp/src/lib/queryClient.ts +12 -0
  258. package/.claude/worktrees/phase-2-mcp/src/lib/utils.ts +6 -0
  259. package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
  260. package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/prototype.html +676 -0
  261. package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/code.html +448 -0
  262. package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/screen.png +0 -0
  263. package/.claude/worktrees/phase-2-mcp/stitch/datasets/code.html +479 -0
  264. package/.claude/worktrees/phase-2-mcp/stitch/datasets/screen.png +0 -0
  265. package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/code.html +461 -0
  266. package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/screen.png +0 -0
  267. package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN.md +192 -0
  268. package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
  269. package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/code.html +399 -0
  270. package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/screen.png +0 -0
  271. package/.claude/worktrees/phase-2-mcp/stitch/live_logs/code.html +324 -0
  272. package/.claude/worktrees/phase-2-mcp/stitch/live_logs/screen.png +0 -0
  273. package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/code.html +596 -0
  274. package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/screen.png +0 -0
  275. package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/code.html +527 -0
  276. package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/screen.png +0 -0
  277. package/.claude/worktrees/phase-2-mcp/stitch/system_settings/code.html +257 -0
  278. package/.claude/worktrees/phase-2-mcp/stitch/system_settings/screen.png +0 -0
  279. package/.claude/worktrees/phase-2-mcp/test_dashboard.py +201 -0
  280. package/.claude/worktrees/phase-2-mcp/tests/collectors/__init__.py +0 -0
  281. package/.claude/worktrees/phase-2-mcp/tests/collectors/fixtures/sample_session.jsonl +7 -0
  282. package/.claude/worktrees/phase-2-mcp/tests/collectors/test_claude_code_collector.py +171 -0
  283. package/.claude/worktrees/phase-2-mcp/tests/collectors/test_hermes_collector.py +167 -0
  284. package/.claude/worktrees/phase-2-mcp/tests/eval/test_engine.py +234 -0
  285. package/.claude/worktrees/phase-2-mcp/tests/eval/test_scorers.py +249 -0
  286. package/.claude/worktrees/phase-2-mcp/tests/storage/__init__.py +0 -0
  287. package/.claude/worktrees/phase-2-mcp/tests/storage/test_run_store.py +359 -0
  288. package/.claude/worktrees/phase-2-mcp/tests/test_curator.py +559 -0
  289. package/.claude/worktrees/phase-2-mcp/tests/test_mcp_server.py +114 -0
  290. package/.claude/worktrees/phase-2-mcp/tsconfig.json +34 -0
  291. package/.env.example +72 -0
  292. package/.kilocode/package-lock.json +378 -0
  293. package/.kilocode/package.json +5 -0
  294. package/AGENTS.md +5 -0
  295. package/CLAUDE.md +29 -0
  296. package/QA_AUDIT_PLAN.md +156 -0
  297. package/README.md +355 -0
  298. package/agent-agnostic-evolution-dashboard.md +405 -0
  299. package/backend/__init__.py +0 -0
  300. package/backend/collectors/__init__.py +0 -0
  301. package/backend/collectors/claude_code_collector.py +277 -0
  302. package/backend/collectors/hermes_collector.py +68 -0
  303. package/backend/curator.py +512 -0
  304. package/backend/eval/__init__.py +19 -0
  305. package/backend/eval/engine.py +116 -0
  306. package/backend/eval/scorers.py +201 -0
  307. package/backend/generate_dataset.py +86 -0
  308. package/backend/job_tracker.py +232 -0
  309. package/backend/main.py +1746 -0
  310. package/backend/mcp_server.py +250 -0
  311. package/backend/promethean/__init__.py +24 -0
  312. package/backend/promethean/cycle_orchestrator.py +270 -0
  313. package/backend/promethean/delta_validator.py +191 -0
  314. package/backend/promethean/dspy_compiler.py +315 -0
  315. package/backend/promethean/gepa_strategist.py +213 -0
  316. package/backend/promethean/models.py +260 -0
  317. package/backend/promethean/skill_deployer.py +195 -0
  318. package/backend/promethean/trace_ingestion.py +142 -0
  319. package/backend/requirements.txt +6 -0
  320. package/backend/sdd_evolve.py +459 -0
  321. package/backend/skill_detector.py +227 -0
  322. package/backend/skill_registry.py +289 -0
  323. package/backend/storage/__init__.py +5 -0
  324. package/backend/storage/run_store.py +393 -0
  325. package/backend/storage/schema.sql +99 -0
  326. package/backend/validate_evolution.py +267 -0
  327. package/bin/genoma.js +250 -0
  328. package/components.json +28 -0
  329. package/docs/api/hermes-api.openapi.yaml +438 -0
  330. package/docs/hero.svg +148 -0
  331. package/eslint.config.mjs +18 -0
  332. package/install.sh +245 -0
  333. package/next-env.d.ts +6 -0
  334. package/next.config.ts +32 -0
  335. package/package.json +46 -0
  336. package/pnpm-workspace.yaml +4 -0
  337. package/postcss.config.mjs +7 -0
  338. package/public/file.svg +1 -0
  339. package/public/fonts/SF-Pro-Display-Bold.otf +0 -0
  340. package/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
  341. package/public/fonts/SF-Pro-Display-Medium.otf +0 -0
  342. package/public/fonts/SF-Pro-Display-Regular.otf +0 -0
  343. package/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
  344. package/public/fonts/SF-Pro-Text-Bold.otf +0 -0
  345. package/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
  346. package/public/fonts/SF-Pro-Text-Medium.otf +0 -0
  347. package/public/fonts/SF-Pro-Text-Regular.otf +0 -0
  348. package/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
  349. package/public/globe.svg +1 -0
  350. package/public/next.svg +1 -0
  351. package/public/theme-preview.html +257 -0
  352. package/public/vercel.svg +1 -0
  353. package/public/window.svg +1 -0
  354. package/run.sh +26 -0
  355. package/scripts/postinstall.js +50 -0
  356. package/skills-lock.json +10 -0
  357. package/specs/event-schema.md +223 -0
  358. package/specs/examples/run.jsonl +3 -0
  359. package/src/app/api/[...path]/route.ts +55 -0
  360. package/src/app/api/auth/token/route.ts +22 -0
  361. package/src/app/evolution/page.tsx +589 -0
  362. package/src/app/favicon.ico +0 -0
  363. package/src/app/globals.css +321 -0
  364. package/src/app/layout.tsx +63 -0
  365. package/src/app/page.tsx +70 -0
  366. package/src/app/skills/page.tsx +369 -0
  367. package/src/components/ApiConfigCard.tsx +199 -0
  368. package/src/components/ColorBends.css +1 -0
  369. package/src/components/ColorBends.d.ts +1 -0
  370. package/src/components/ColorBends.jsx +1 -0
  371. package/src/components/CoreLoopToggle.tsx +111 -0
  372. package/src/components/EnvironmentStatus.tsx +176 -0
  373. package/src/components/EvolutionBackground.tsx +1 -0
  374. package/src/components/ReactQueryProvider.tsx +24 -0
  375. package/src/components/Sidebar.tsx +247 -0
  376. package/src/components/SkillDiffViewer.tsx +154 -0
  377. package/src/components/ThemeAwareBackground.tsx +67 -0
  378. package/src/components/ThemeToggle.tsx +54 -0
  379. package/src/components/WelcomeHero.tsx +77 -0
  380. package/src/components/bits/ClickSpark.tsx +116 -0
  381. package/src/components/bits/CountUp.tsx +98 -0
  382. package/src/components/bits/DarkSelect.tsx +95 -0
  383. package/src/components/bits/DecryptedText.tsx +161 -0
  384. package/src/components/bits/ElectricBorder.tsx +184 -0
  385. package/src/components/bits/GlitchText.tsx +34 -0
  386. package/src/components/bits/ShinyText.tsx +55 -0
  387. package/src/components/bits/SpotlightCard.tsx +42 -0
  388. package/src/components/bits/TextType.tsx +95 -0
  389. package/src/components/bits/index.ts +9 -0
  390. package/src/components/pages/CuratorPage.tsx +632 -0
  391. package/src/components/pages/DatasetPage.tsx +271 -0
  392. package/src/components/pages/EvolutionPage.tsx +676 -0
  393. package/src/components/pages/FunctionCallingPage.tsx +1 -0
  394. package/src/components/pages/LogsPage.tsx +272 -0
  395. package/src/components/pages/MetricsPage.tsx +246 -0
  396. package/src/components/pages/OverviewPage.tsx +420 -0
  397. package/src/components/pages/SettingsPage.tsx +88 -0
  398. package/src/components/pages/SkillStudioPage.tsx +376 -0
  399. package/src/components/ui/animated-theme-toggler.tsx +97 -0
  400. package/src/components/ui/button.tsx +67 -0
  401. package/src/components/ui/card.tsx +103 -0
  402. package/src/components/ui/input.tsx +19 -0
  403. package/src/components/ui/separator.tsx +28 -0
  404. package/src/components/ui/sheet.tsx +147 -0
  405. package/src/components/ui/sidebar.tsx +702 -0
  406. package/src/components/ui/skeleton.tsx +13 -0
  407. package/src/components/ui/theme-toggle.tsx +272 -0
  408. package/src/components/ui/tooltip.tsx +57 -0
  409. package/src/hooks/use-mobile.ts +19 -0
  410. package/src/lib/api.ts +455 -0
  411. package/src/lib/queryClient.ts +12 -0
  412. package/src/lib/utils.ts +6 -0
  413. package/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
  414. package/stitch/agent_dashboard/prototype.html +676 -0
  415. package/stitch/curator_workspace/code.html +448 -0
  416. package/stitch/curator_workspace/screen.png +0 -0
  417. package/stitch/datasets/code.html +479 -0
  418. package/stitch/datasets/screen.png +0 -0
  419. package/stitch/evolution_history/code.html +461 -0
  420. package/stitch/evolution_history/screen.png +0 -0
  421. package/stitch/hermes_dashboard/DESIGN.md +192 -0
  422. package/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
  423. package/stitch/hermes_overview/code.html +399 -0
  424. package/stitch/hermes_overview/screen.png +0 -0
  425. package/stitch/live_logs/code.html +324 -0
  426. package/stitch/live_logs/screen.png +0 -0
  427. package/stitch/skill_hub/code.html +596 -0
  428. package/stitch/skill_hub/screen.png +0 -0
  429. package/stitch/system_metrics/code.html +527 -0
  430. package/stitch/system_metrics/screen.png +0 -0
  431. package/stitch/system_settings/code.html +257 -0
  432. package/stitch/system_settings/screen.png +0 -0
  433. package/test_dashboard.py +201 -0
  434. package/tests/collectors/__init__.py +0 -0
  435. package/tests/collectors/fixtures/sample_session.jsonl +7 -0
  436. package/tests/collectors/test_claude_code_collector.py +171 -0
  437. package/tests/collectors/test_hermes_collector.py +167 -0
  438. package/tests/eval/test_engine.py +234 -0
  439. package/tests/eval/test_scorers.py +249 -0
  440. package/tests/storage/__init__.py +0 -0
  441. package/tests/storage/test_run_store.py +359 -0
  442. package/tests/test_curator.py +559 -0
  443. package/tests/test_e2e_npm.py +621 -0
  444. package/tests/test_mcp_server.py +114 -0
  445. package/tsconfig.json +34 -0
@@ -0,0 +1,156 @@
1
+ # Auditoría de Funcionalidad - Hermes Dashboard
2
+
3
+ ## Contexto del Sistema
4
+
5
+ | Campo | Descripción |
6
+ |-------|-------------|
7
+ | **Propósito** | Dashboard de monitoreo y evolución autónoma de agentes IA |
8
+ | **Stack** | Next.js / React, TypeScript, Framer Motion |
9
+ | **Módulo auditado** | Varias páginas y componentes |
10
+
11
+ ---
12
+
13
+ ## Plan de Auditoría
14
+
15
+ ### 1. Caminos Felices (Happy Path)
16
+
17
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
18
+ |--------------------|--------------------|--------------------|--------------------|
19
+ | Carga inicial del dashboard | Página Overview carga con todas las métricas visibles | Bajo | - |
20
+ | Navegación entre páginas via Sidebar | Transición suave entre Overview, Evolution, Metrics, etc. | Bajo | Verificar lazy loading de páginas |
21
+ | Inicio de evolución de skill | Modal de Launch Evolution abre correctamente | Medio | Agregar validación de campos requeridos |
22
+ | Colapso/expansión del Sidebar | Animación fluida, estado persiste | Bajo | Guardar estado en localStorage |
23
+
24
+ ---
25
+
26
+ ### 2. Casos de Borde (Edge Cases)
27
+
28
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
29
+ |--------------------|--------------------|--------------------|--------------------|
30
+ | API no responde (timeout) | Mostrar mensaje de error con opción de reintentar | Alto | Implementar retry con backoff exponencial |
31
+ | Métricas con valores nulos/undefined | Mostrar "N/A" o "-" en lugar de crash | Alto | Agregar default values en fetchMetrics |
32
+ | Strings excesivamente largos en logs | Truncar con "..." y tooltip completo | Medio | Implementar ellipsis con hover expandable |
33
+ | Sidebar en viewport muy pequeño (<320px) | Ocultar texto, mostrar solo iconos | Medio | Testear en viewport iPhone SE |
34
+ | Navegación durante carga de datos | Mostrar loader sin duplicar requests | Medio | Cancelar requests pendientes con AbortController |
35
+
36
+ ---
37
+
38
+ ### 3. Lógica de Negocio
39
+
40
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
41
+ |--------------------|--------------------|--------------------|--------------------|
42
+ | Skill sin nombre | Rechazar con mensaje de validación | Alto | Validación en frontend + backend |
43
+ | Permisos insuficientes para acción | Mostrar error 403, deshabilitar botón | Alto | Verificar RBAC en API routes |
44
+ | Evolución ya en proceso | Deshabilitar botón "Launch", mostrar estado | Medio | Poll estado hasta completarse |
45
+ | Cálculo de métricas (uptime, success rate) | Fórmulas correctas con edge cases (div/0) | Medio | Manejar división por cero |
46
+
47
+ ---
48
+
49
+ ### 4. Consistencia de UI/UX
50
+
51
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
52
+ |--------------------|--------------------|--------------------|--------------------|
53
+ | Tema claro/oscuro (si aplica) | Colores consistentes en todos los componentes | Medio | Crear constantes de tema centralizadas |
54
+ | Indicadores de carga | Spinner/skeleton visible durante fetches | Medio | Implementar loading states globales |
55
+ | Notificaciones toast | Aparece y desaparece sin romper layout | Bajo | Usar portal para toasts |
56
+ | Scroll en listas largas | Performance aceptable sin jank | Medio | Implementar virtualización si >100 items |
57
+
58
+ ---
59
+
60
+ ### 5. Negative Testing
61
+
62
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
63
+ |--------------------|--------------------|--------------------|--------------------|
64
+ | Inyección de código en inputs | Sanitizar output, no ejecutar | Alto | Escapar caracteres especiales |
65
+ | Requests malformados a API | Retornar error 400 con mensaje claro | Alto | Validación Zod en API |
66
+ | Manipulación de estado via DevTools | Revertir a estado válido | Alto | Verificaciones en backend |
67
+ | Carga de archivos binarios como logs | Ignorar o mostrar error | Medio | Validar content-type |
68
+
69
+ ---
70
+
71
+ ### 6. Validación de Estado
72
+
73
+ | Escenario de Prueba | Resultado Esperado | Riesgo Potencial | Sugerencia de Mejora |
74
+ |--------------------|--------------------|--------------------|--------------------|
75
+ | Refresco de página | Estado de sidebar persiste, no reinicia | Medio | Sincronizar con URL params o Context |
76
+ | Browser back/forward | Historial de navegación funcional | Bajo | - |
77
+ | Desconexión de red durante operación | Estado local preservado, sync al reconectar | Alto | Implementar offline queue |
78
+
79
+ ---
80
+
81
+ ## Casos de Prueba - Formato Gherkin
82
+
83
+ ### Feature: Navegación del Dashboard
84
+
85
+ ```gherkin
86
+ Feature: Navegación entre páginas
87
+ Scenario: Usuario navega a página de Evolution
88
+ Given Usuario está en OverviewPage
89
+ When Usuario hace click en "Evolution" en el sidebar
90
+ Then URL cambia a /evolution
91
+ And EvolutionPage se muestra con animación de entrada
92
+
93
+ Scenario: Usuario colapsa el sidebar
94
+ Given Sidebar está expandido
95
+ When Usuario hace click en botón de colapsar
96
+ Then Sidebar se reduce a iconos
97
+ And Iconos permanecen visibles
98
+ ```
99
+
100
+ ### Feature: Evolución de Skills
101
+
102
+ ```gherkin
103
+ Feature: Launch Evolution
104
+ Scenario: Evolución exitosa
105
+ Given Campos de skill están completos
106
+ When Usuario clickea "Launch Evolution"
107
+ Then Modal muestra loading spinner
108
+ And Botón se deshabilita
109
+ And Después de éxito, mostrar toast "Evolution started"
110
+
111
+ Scenario: Campo requerido faltante
112
+ Given Campo "Skill" está vacío
113
+ When Usuario clickea "Launch Evolution"
114
+ Then Mostrar error "Skill es requerido"
115
+ And Modal permanece abierto
116
+ ```
117
+
118
+ ### Feature: Manejo de Errores
119
+
120
+ ```gherkin
121
+ Feature: Respuestas de API
122
+ Scenario: API timeout
123
+ Given API no responde en 10 segundos
124
+ When Usuario está esperando datos
125
+ Then Mostrar "Connection timeout. Retry?"
126
+ And Botón de reintentar visible
127
+
128
+ Scenario: Error 500 del servidor
129
+ Given API retorna 500 Internal Server Error
130
+ When Usuario recibe respuesta
131
+ Then Mostrar "Something went wrong"
132
+ And Log error para debugging
133
+ ```
134
+
135
+ ---
136
+
137
+ ## Priorización de Pruebas
138
+
139
+ | Prioridad | Tipo de Prueba | Tiempo Estimado |
140
+ |----------|--------------|---------------|
141
+ | P0 - Crítico | Happy path básico, manejo de errores API | 2h |
142
+ | P1 - Alto | Edge cases, validación de estado | 3h |
143
+ | P2 - Medio | Negative testing, consistencia UI | 2h |
144
+ | P3 - Bajo | Edge cases visuales, optimizaciones | 1h |
145
+
146
+ ---
147
+
148
+ ## Checklist de Ejecución
149
+
150
+ - [ ] Verificar build pasa sin errores
151
+ - [ ] Verificar TypeScript sin errors
152
+ - [ ] Probar en viewport móvil (375px, 768px, 1440px)
153
+ - [ ] Probar sin conexión de red (Network throttling)
154
+ - [ ] Verificar consola sin errores en producción
155
+ - [ ] Audit accessibility (contraste, keyboard nav)
156
+ - [ ] Verificar performance (LCP < 2.5s)
package/README.md ADDED
@@ -0,0 +1,355 @@
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
+ ### NPM CLI (Recomendado — usuarios)
37
+
38
+ Instala Genoma globalmente desde npm registry:
39
+
40
+ ```bash
41
+ npx genoma@latest serve
42
+ ```
43
+
44
+ Esto:
45
+ - ✅ Instala dependencias (Node.js, Python 3.10+, pnpm)
46
+ - ✅ Inicia backend en `http://localhost:8000`
47
+ - ✅ Inicia frontend en `http://localhost:3000`
48
+ - ✅ Inicia MCP server en stdio (para agents)
49
+ - ✅ Maneja shutdown graceful en Ctrl+C
50
+
51
+ **Requisitos:**
52
+ - Node.js 18+
53
+ - Python 3.10+
54
+ - `ANTHROPIC_API_KEY` (u otras API keys para evolution)
55
+
56
+ ### Local Development (./run.sh)
57
+
58
+ ```bash
59
+ ./run.sh
60
+ ```
61
+
62
+ Inicia backend (:8000) + frontend (:3000) + MCP en paralelo. Ctrl+C kills todos.
63
+
64
+ ### Manual setup
65
+
66
+ ```bash
67
+ # Terminal 1: Backend
68
+ python3 -m pip install fastapi uvicorn pydantic python-dotenv --break-system-packages -q
69
+ python3 -m uvicorn backend.main:app --reload --port 8000
70
+
71
+ # Terminal 2: Frontend
72
+ pnpm install --ignore-scripts
73
+ pnpm dev # → http://localhost:3000
74
+ ```
75
+
76
+ ### Build para producción
77
+
78
+ ```bash
79
+ pnpm build # TypeScript + Turbopack, 0 errores
80
+ pnpm start # Production server
81
+ ```
82
+
83
+ ### Configuración requerida (para evolución de skills)
84
+
85
+ ```bash
86
+ export ANTHROPIC_API_KEY="sk-ant-..."
87
+ # O OPENROUTER_API_KEY, OPENAI_API_KEY, etc.
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 🔌 MCP / Comunicación
93
+
94
+ Genoma expone 3 canales de comunicación:
95
+
96
+ ### MCP Server (stdio) — Para Agents
97
+
98
+ Agents (Claude Code, Codex, etc.) se conectan via MCP protocol (stdio transport). 4 tools disponibles:
99
+
100
+ | Tool | Input | Output |
101
+ |---|---|---|
102
+ | `ingest_run` | `run_id`, `agent_name`, `started_at`, `task_name`, `outcome` + optionals | Inserted/updated run ID |
103
+ | `ingest_trace` | `agent`, `agent_version`, `timestamp`, `task`, `outcome` + optionals | Trace ID + canonical run ID |
104
+ | `query_runs` | `agent_name`, `outcome`, `repo`, `since`, `until`, `limit` (optional) | Array of past runs |
105
+ | `get_agent_stats` | `agent_name` (optional) | Per-agent performance summary |
106
+
107
+ Ejemplo (Claude Code):
108
+ ```bash
109
+ # Genoma MCP server runs automatically when you do: npx genoma serve
110
+ # Claude Code agent can then invoke tools via stdio
111
+ ```
112
+
113
+ El dashboard se comunica con el backend por 2 canales adicionales:
114
+
115
+ ### REST API (`http://localhost:8000`)
116
+
117
+ | Endpoint | Verbo | Descripción |
118
+ |---|---|---|
119
+ | `/api/health` | `GET` | Health check (skills count, categorías) |
120
+ | `/api/metrics` | `GET` | Métricas agregadas (runs, tasa éxito, avg improvement) |
121
+ | `/api/skills` | `GET` | Lista plana de skills |
122
+ | `/api/skills/providers` | `GET` | Skills agrupadas por provider |
123
+ | `/api/skills/{name}` | `GET` | Detalle completo (frontmatter + body) |
124
+ | `/api/skills/toggle` | `POST` | Enable/disable skill por provider |
125
+ | `/api/skills/refresh` | `GET` | Re-scan del filesystem |
126
+ | `/api/evolution/start` | `POST` | Lanzar evolución (`skill_name`, `iterations`) |
127
+ | `/api/evolution/runs` | `GET` | Historial de runs |
128
+ | `/api/evolution/validate/{name}` | `POST` | Validar constraints pre-evolución |
129
+ | `/api/jobs` | `GET` | Jobs activos/completados |
130
+ | `/api/jobs/{id}` | `DELETE` | Cancelar job |
131
+ | `/api/jobs/{id}/logs` | `GET` | Logs live de un job |
132
+ | `/api/datasets` | `GET` | Datasets disponibles |
133
+ | `/api/datasets/{skill}` | `GET` | Splits (train/holdout) de un dataset |
134
+ | `/api/curator/status` | `GET` | Estado del curator (active/stale/archived counts) |
135
+ | `/api/curator/skills` | `GET` | Skills con metadata de uso |
136
+ | `/api/curator/run` | `POST` | Ejecutar curator (clasifica + archiva) |
137
+ | `/api/curator/pin/{skill}` | `POST` | Pinear skill (inmune a archive) |
138
+ | `/api/curator/restore/{skill}` | `POST` | Restaurar skill archivada |
139
+ | `/api/memory` | `GET` | Memoria persistente del agente |
140
+ | `/api/graph` | `GET` | Knowledge graph |
141
+ | `/api/promethean/traces` | `POST` | Enviar trace de ejecución |
142
+ | `/api/promethean/status` | `GET` | Estado del ciclo Promethean |
143
+ | `/api/runs` | `GET` | Lista canonical runs (agent, outcome, repo, limit) |
144
+ | `/api/runs/{id}` | `GET` | Run detallado con métricas + errors |
145
+ | `/api/agents` | `GET` | Resumen por agente (count, success_rate, tokens) |
146
+ | `/api/runs/migrate` | `POST` | Migrar runs Hermes + Claude Code a SQLite |
147
+ | `/api/runs/{id}/evaluate` | `POST` | Evaluar run con scorers composables |
148
+ | `/api/runs/{id}/scores` | `GET` | Scores de evaluación guardados |
149
+ | `/api/runs/compare` | `POST` | Regression detection (baseline vs evolved) |
150
+ | `/api/skills/{name}/evolve` | `POST` | Evolucionar skill con SDD optimizer |
151
+
152
+ ### WebSocket (`ws://localhost:8000/ws/stream`)
153
+
154
+ Streaming en tiempo real de eventos del backend. El dashboard se auto-reconecta cada 3s si se cae.
155
+
156
+ ### Next.js Proxy (`/api/*`)
157
+
158
+ 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.
159
+
160
+ ---
161
+
162
+ ## ✨ Características
163
+
164
+ - 🧬 **Genoma Design System** — `#002444` (Navy), `#a93800` (Orange), `#fcf9f8` (Warm White)
165
+ - 🔤 **Inter** (rsms/inter, variable font) + Geist Mono
166
+ - 🧩 **shadcn/ui v4** — Sidebar colapsable a iconos, tooltips, sheets, cards
167
+ - 🌓 **Dark mode** — Script inline anti-FOUC + animated toggler
168
+ - 📐 **Pretext.js** — Text layout measurement sin DOM
169
+ - ⚡ **CountUp** — Animaciones de números con `useState`
170
+ - 🎯 **SpotlightCard** — Efecto hover con gradiente radial
171
+ - 📡 **WebSocket** — Auto-reconnect con token de sesión
172
+ - 🛡️ **Circuit Breaker** — Health check + banner "Backend Unavailable" + retry
173
+ - 📱 **Responsive** — Sidebar drawer en mobile (vía shadcn Sheet)
174
+
175
+ ---
176
+
177
+ ## 📦 Stack
178
+
179
+ | Capa | Tecnología |
180
+ |---|---|
181
+ | Framework | Next.js 16.2.4 (Turbopack) |
182
+ | Estilos | Tailwind CSS v4 + `tw-animate-css` |
183
+ | Componentes | shadcn/ui v4 (`radix-nova`) |
184
+ | Fuente | Inter variable (`next/font/google`) |
185
+ | Animaciones | Framer Motion 12.x |
186
+ | Datos | TanStack React Query 5 |
187
+ | Iconos | Lucide React |
188
+ | Medición texto | Pretext.js 0.0.6 |
189
+ | Tema | next-themes (`genoma-theme`) |
190
+
191
+ ---
192
+
193
+ ## 🎨 Design Rules (GENOMA.md)
194
+
195
+ 1. **No-Line Rule** — Sin bordes `1px`. Separación por shifts de background + espaciado
196
+ 2. **Glass & Gradient** — Headers `backdrop-blur-xl`, CTAs gradiente `135deg`
197
+ 3. **Shadow Rule** — `editorial-shadow`: `0px 20px 40px rgba(28,27,27,0.06)`
198
+ 4. **No-Divider Rule** — Ítems separados solo por espaciado vertical
199
+
200
+ ---
201
+
202
+ ## Agent-Agnostic Evolution Layer
203
+
204
+ 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.
205
+
206
+ ### Cómo genera las evaluaciones: Promethean + GEPA + DSPy
207
+
208
+ #### 1. Promethean (Sistema base)
209
+
210
+ Promethean es la capa de evaluación de Hermes. Define el contrato entre ejecución y validación:
211
+
212
+ - `TraceRecord`: Modelo canónico de una traza de ejecución
213
+ - `TraceIngestor`: Recolecta trazas desde `~/.hermes/traces/ingested/`
214
+ - `DeltaValidator`: Valida skills usando un dataset con split holdout
215
+
216
+ #### 2. GEPA (Modelo matemático de evaluación)
217
+
218
+ GEPA (Generic Evolutionary Pattern Analyzer) implementa un ciclo de mejora iterativa basado en **holdout validation con comparación delta**:
219
+
220
+ ```
221
+ Dataset = train_set + holdout_set (holdout ≈ 30% por defecto)
222
+
223
+ Baseline:
224
+ success_rate_baseline = count(resolved) / count(holdout)
225
+
226
+ Evolved (post-compilación DSPy):
227
+ success_rate_evolved = baseline + compilation.delta
228
+
229
+ Delta:
230
+ Δ[metric] = evolved[metric] - baseline[metric]
231
+
232
+ Gate de aceptación:
233
+ passed = |Δ[primary_metric]| ≥ threshold
234
+ ```
235
+
236
+ **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.
237
+
238
+ #### 3. DSPy (Optimizer de prompts)
239
+
240
+ DSPy optimiza las instrucciones del skill usando métodos que no requieren gradientes (LLMs son non-differentiable):
241
+
242
+ - **Bootstrap Few-Shot**: Muestrea ejemplos del dataset, los ejecuta, filtra por métrica, usa top-k como demonstrations
243
+ - **MIPRO**: Bayesian optimization sobre el espacio de instrucciones del prompt
244
+ - `compilation.delta` = mejora de métrica que el optimizer reportó
245
+
246
+ 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].
247
+
248
+ #### 4. DeltaScorer (Integración en evaluation engine)
249
+
250
+ El `DeltaScorer` del evaluation engine es el puente entre DSPy/GEPA y el sistema de scoring agnóstico:
251
+
252
+ ```python
253
+ # Solo aplica a Hermes runs con context.skill_name
254
+ def applies_to(run: CanonicalRun) -> bool:
255
+ return run.agent_name == "hermes" and "skill_name" in run.context
256
+
257
+ # Wraps DeltaValidator.validate()
258
+ def score(run: CanonicalRun) -> EvalScore:
259
+ result = validator.validate(skill_name, baseline)
260
+ score = 1.0 if result["passed"] else 0.0
261
+ return EvalScore(scorer="delta", score=score, passed=result["passed"])
262
+ ```
263
+
264
+ ---
265
+
266
+ ### Agent-Agnostic Architecture
267
+
268
+ ```
269
+ COLLECTORS (normalizan trazas propias de cada agente)
270
+ HermesCollector ── TraceRecord → CanonicalRun
271
+ ClaudeCodeCollector ── JSONL session events → CanonicalRun
272
+ (extensible)
273
+
274
+
275
+ ▼ CanonicalRun (schema canónico)
276
+ │ run_id, agent_name, collector, outcome,
277
+ │ tool_calls[], metrics{}, errors[], context{}
278
+
279
+
280
+
281
+ STORAGE (SQLite, WAL mode)
282
+ runs / tool_calls / run_metrics / run_errors / eval_scores
283
+
284
+
285
+
286
+
287
+ EVALUATION ENGINE (scorers composables)
288
+ OutcomeScorer success=1.0, partial=0.5, failure=0.0
289
+ ToolEfficiencyScorer unique_tools / total_calls (threshold > 0.3)
290
+ TokenCostScorer max(0, 1 - tokens/50000)
291
+ ErrorRecoveryScorer success_no_errors=1.0, success_with_errors=0.8
292
+ DeltaScorer wraps DeltaValidator (solo Hermes)
293
+
294
+ aggregate_score = mean(scores aplicables)
295
+
296
+ detect_regression:
297
+ delta = evolved_aggregate - baseline_aggregate
298
+ regression = delta < -threshold
299
+ improvement = delta > threshold
300
+ neutral = |delta| ≤ threshold
301
+ ```
302
+
303
+ ### Nuevos API Endpoints
304
+
305
+ | Endpoint | Verbo | Descripción |
306
+ |---|---|---|
307
+ | `/api/runs` | `GET` | Lista runs con filtros: agent, outcome, repo, since, until, limit |
308
+ | `/api/runs/{id}` | `GET` | Run detallado con metrics, tool_calls, errors |
309
+ | `/api/runs/{id}/evaluate` | `POST` | Corre scorers sobre el run, devuelve scores + aggregate |
310
+ | `/api/runs/{id}/scores` | `GET` | Scores de evaluación guardados en DB |
311
+ | `/api/runs/compare` | `POST` | Regression detection: baseline vs evolved (threshold configurable) |
312
+ | `/api/agents` | `GET` | Stats por agente: count, success_rate, avg_tokens |
313
+ | `/api/runs/migrate` | `POST` | Migra traces existentes (Hermes + Claude Code) a SQLite |
314
+
315
+ ### Adding a New Collector
316
+
317
+ ```python
318
+ # 1. Crear backend/collectors/my_collector.py
319
+ class MyCollector:
320
+ AGENT_NAME = "my-agent"
321
+ VERSION = "0.1.0"
322
+
323
+ def collect_session(self, source: Path) -> Optional[CanonicalRun]:
324
+ # Parsear source, extraer campos requeridos
325
+ return CanonicalRun(
326
+ run_id=...,
327
+ agent_name=self.AGENT_NAME,
328
+ collector=f"{self.AGENT_NAME}-collector",
329
+ started_at=...,
330
+ task_name=...,
331
+ outcome=...,
332
+ # campos opcionales: tool_calls, metrics, errors, etc.
333
+ )
334
+
335
+ # 2. Agregar tests en tests/collectors/test_my_collector.py
336
+ # 3. Agregar endpoint en backend/main.py
337
+ ```
338
+
339
+ ### Adding a New Scorer
340
+
341
+ ```python
342
+ # Agregar en backend/eval/scorers.py
343
+ class MyScorer:
344
+ name = "my_scorer"
345
+
346
+ def score(self, run: CanonicalRun) -> EvalScore:
347
+ score = ... # 0.0 a 1.0
348
+ return EvalScore(scorer=self.name, score=score, passed=score > 0.5)
349
+
350
+ def applies_to(self, run: CanonicalRun) -> bool:
351
+ return True # o condición específica
352
+
353
+ # Pasar custom scorers al engine:
354
+ engine = EvaluationEngine(store=store, scorers=[MyScorer(), OutcomeScorer()])
355
+ ```