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,30 @@
1
+ # Hermes Evolution Dashboard — Backend Overview
2
+
3
+ ## Key Points
4
+
5
+ - **FastAPI Backend**: Bridges Next.js frontend to hermes-agent-self-evolution Python modules with REST + WebSocket support
6
+ - **Skill Registry Integration**: Manages skill providers, tracks global/provider-level skills, handles enable/disable and deletion
7
+ - **Evolution Run Tracking**: Lists runs from `metrics.json` files and job tracker, normalizes metrics across different evolve script versions (`evolve_skill.py` vs `evolve_now.py`)
8
+ - **Python Version Detection**: `_find_python()` locates suitable Python executable (prefers 3.12 with dspy installed)
9
+ - **8 API Endpoints** for skill management and evolution monitoring
10
+ - **6 Pydantic Models**: `SkillInfo`, `EvolveRequest`, `MemoryEntry`, `RunMetrics`, `ToggleSkillRequest`, `ConnectionManager`
11
+
12
+ ## Structure / Sections Summary
13
+
14
+ | Section | Description |
15
+ |---------|-------------|
16
+ | **Imports & Dependencies** | FastAPI, Pydantic, asyncio, JSON, pathlib, subprocess, dotenv |
17
+ | **Paths** | `HERMES_REPO`, `EVOLUTION_DIR`, `SKILLS_DIR`, `MEMORY_DIR` — resolves via env vars or conventional locations |
18
+ | **Classes** | `ConnectionManager` (WebSocket), 5 Pydantic request/response models |
19
+ | **Helper Functions** | `_find_python()`, `_normalize_metrics()`, `_find_skill_file()`, `_parse_skill_content()` |
20
+ | **SKILLS Endpoints** | Provider listing, skill toggling, global/provider skill deletion, skill content retrieval |
21
+ | **EVOLUTION Endpoints** | List all runs, skill-specific history, baseline vs evolved diff |
22
+
23
+ ## Notable Entities & Patterns
24
+
25
+ - **Environment Variables**: `HERMES_AGENT_REPO`, `EVOLUTION_DIR`, `PYTHON`
26
+ - **Path Resolution Pattern**: Env var → sibling directory → home directory fallback
27
+ - **Metrics Normalization**: Supports multiple evolve script output formats (unifies `skill`/`skill_name`, `original_size`/`baseline_score`, etc.)
28
+ - **WebSocket Broadcasting**: `ConnectionManager` class manages real-time client connections
29
+ - **Job Tracker Integration**: Imports `tracker`, `EvolutionJob`, `JobStatus` from `.job_tracker`
30
+ - **Skill Registry**: Imports `get_registry` from `.skill_registry` for provider/skill management
@@ -0,0 +1 @@
1
+ This document preserves the backend/requirements.txt file from the hermes-dashboard project, containing Python dependencies: fastapi>=0.115.0, uvicorn[standard]>=0.34.0, websockets>=13.0, and pyyaml>=6.0.
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: requirements
3
+ summary: ''
4
+ tags: []
5
+ related: []
6
+ keywords: []
7
+ createdAt: '2026-04-28T01:33:30.561Z'
8
+ updatedAt: '2026-04-28T01:33:30.562Z'
9
+ ---
10
+ ## Reason
11
+ Preserving complete backend/requirements.txt from hermes-dashboard project
12
+
13
+ ## Raw Concept
14
+ **Task:**
15
+ Preserve backend/requirements.txt
16
+
17
+ **Files:**
18
+ - backend/requirements.txt
19
+
20
+ **Timestamp:** 2026-04-28
21
+
22
+ ## Narrative
23
+ ### Structure
24
+ File: backend/requirements.txt, 5 lines
25
+
26
+ ### Highlights
27
+ Source: hermes-dashboard/backend/requirements.txt
28
+
29
+ ---
30
+
31
+
32
+ fastapi>=0.115.0
33
+ uvicorn[standard]>=0.34.0
34
+ websockets>=13.0
35
+ pyyaml>=6.0
36
+
37
+
@@ -0,0 +1,28 @@
1
+ # Requirements Document Overview
2
+
3
+ ## Key Points
4
+
5
+ - Preserves `backend/requirements.txt` from the hermes-dashboard project
6
+ - Contains 4 Python dependencies with minimum version constraints
7
+ - Timestamp: 2026-04-28
8
+ - Source location: `hermes-dashboard/backend/requirements.txt`
9
+ - All dependencies are version-pinned with `>=` operators for minimum compatibility
10
+
11
+ ## Structure / Sections Summary
12
+
13
+ - **Reason**: Documentation metadata noting preservation of the requirements file
14
+ - **Raw Concept**: Task description saving the backend requirements file
15
+ - **Narrative**: Actual file content showing the 4 dependencies
16
+
17
+ ## Notable Entities, Patterns, and Decisions
18
+
19
+ | Entity | Type | Details |
20
+ |--------|------|---------|
21
+ | `fastapi>=0.115.0` | Dependency | Web framework |
22
+ | `uvicorn[standard]>=0.34.0` | Dependency | ASGI server with standard extras |
23
+ | `websockets>=13.0` | Dependency | WebSocket protocol support |
24
+ | `pyyaml>=6.0` | Dependency | YAML parsing library |
25
+
26
+ **Pattern**: All dependencies use `>=` minimum version pinning, allowing patch updates without breaking changes.
27
+
28
+ **Decision**: The file was preserved intact from the hermes-dashboard project, capturing a specific backend dependency snapshot.
@@ -0,0 +1,37 @@
1
+ ---
2
+ children_hash: a71d4119e388f6f696c270fd1202587c41019b22b842e94859adf7c2d81eff99
3
+ compression_ratio: 0.5456349206349206
4
+ condensation_order: 2
5
+ covers: [api/_index.md]
6
+ covers_token_total: 504
7
+ summary_level: d2
8
+ token_count: 275
9
+ type: summary
10
+ ---
11
+ # docs/api — Hermes API Specification
12
+
13
+ ## Architecture
14
+ OpenAPI 3.0 contract between Next.js frontend and FastAPI backend. Backend runs at `http://127.0.0.1:8000` (configurable via `NEXT_PUBLIC_API_BASE`).
15
+
16
+ ## Endpoints
17
+
18
+ | Group | Methods |
19
+ |-------|---------|
20
+ | Skills | `GET /api/skills`, `GET /api/skills/{name}`, `GET /api/skills/{name}/evolution-history` |
21
+ | Evolution | `GET /api/evolution/runs`, `POST /api/evolution/start` |
22
+ | Jobs | `GET /api/jobs`, `GET /api/jobs/{jobId}`, `DELETE /api/jobs/{jobId}`, `GET /api/jobs/{jobId}/logs` |
23
+ | Health | `GET /api/health` |
24
+ | Realtime | `/ws` |
25
+
26
+ ## Key Schemas
27
+
28
+ **EvolutionJob lifecycle:** `queued → loading_skill → building_dataset → validating → configuring → optimizing → evaluating → saving → completed/failed`
29
+
30
+ **ApiError kinds:** `network`, `timeout`, `server` (5xx), `client` (4xx)
31
+
32
+ **EvolutionRun:** tracks `baseline_score`, `evolved_score`, `improvement`, `constraints_passed`
33
+
34
+ ## Drill-down
35
+ - Full spec: `hermes_api_openapi_specification.md`
36
+ - Backend: `backend/main.py`, `backend/job_tracker.py`
37
+ - Frontend client: `frontend/src/lib/api.ts`
@@ -0,0 +1,54 @@
1
+ ---
2
+ children_hash: 50c773b90f6937381a937265ca7c7ce8090632fd257e370e2bd838288f3232dd
3
+ compression_ratio: 0.12634643377001456
4
+ condensation_order: 1
5
+ covers: [context.md, hermes_api_openapi_specification.md]
6
+ covers_token_total: 3435
7
+ summary_level: d1
8
+ token_count: 434
9
+ type: summary
10
+ ---
11
+ # docs/api — API Specification Domain
12
+
13
+ ## Overview
14
+ OpenAPI 3.0 specification documenting the Hermes backend API contract. Next.js frontend consumes these endpoints; FastAPI/Python backend exposes them at `http://127.0.0.1:8000` (overridable via `NEXT_PUBLIC_API_BASE`).
15
+
16
+ ## Endpoint Groups
17
+
18
+ ### Skills
19
+ - `GET /api/skills` — List all installed skills
20
+ - `GET /api/skills/{name}` — Get skill detail (frontmatter + body)
21
+ - `GET /api/skills/{name}/evolution-history` — Get evolution history for skill
22
+
23
+ ### Evolution
24
+ - `GET /api/evolution/runs` — List all evolution runs
25
+ - `POST /api/evolution/start` — Start evolution job (`skill_name`, `iterations` 1-20, `eval_source`)
26
+
27
+ ### Jobs
28
+ - `GET /api/jobs` — List jobs (optional `active_only` filter)
29
+ - `GET /api/jobs/{jobId}` — Get job detail
30
+ - `DELETE /api/jobs/{jobId}` — Cancel active job
31
+ - `GET /api/jobs/{jobId}/logs` — Get paginated logs (`since` param)
32
+
33
+ ### Health
34
+ - `GET /api/health` — Returns `status`, `hermes_repo_exists`, `evolution_dir_exists`, `skills_count`, `categories`
35
+
36
+ ### WebSocket
37
+ - `/ws` — Real-time job progress streaming
38
+
39
+ ## Key Schemas
40
+
41
+ **EvolutionJob status flow:** `queued → loading_skill → building_dataset → validating → configuring → optimizing → evaluating → saving → completed/failed`
42
+
43
+ **ApiError** — Typed error contract with `kind` enum:
44
+ - `network` — Service unreachable
45
+ - `timeout` — Request timeout exceeded
46
+ - `server` — HTTP 5xx
47
+ - `client` — HTTP 4xx
48
+
49
+ **EvolutionRun** — Records `baseline_score`, `evolved_score`, `improvement`, `constraints_passed` per run
50
+
51
+ ## Related Entries
52
+ - See `hermes_api_openapi_specification.md` for full OpenAPI YAML
53
+ - Backend implementation: `backend/main.py`, `backend/job_tracker.py`
54
+ - Frontend client: `frontend/src/lib/api.ts`
@@ -0,0 +1,11 @@
1
+ # Topic: api
2
+
3
+ ## Overview
4
+ OpenAPI 3.0 specification for Hermes agent self-evolution backend
5
+
6
+ ## Key Concepts
7
+ - Job management API
8
+ - Skills registry
9
+ - Evolution endpoints
10
+ - WebSocket streaming
11
+ - Configuration management
@@ -0,0 +1,468 @@
1
+ ---
2
+ title: Hermes API OpenAPI Specification
3
+ summary: Complete OpenAPI 3.0 specification defining all Hermes backend endpoints including job management, skills, evolution, and WebSocket streaming
4
+ tags: []
5
+ related: []
6
+ keywords: []
7
+ createdAt: '2026-04-28T03:39:56.018Z'
8
+ updatedAt: '2026-04-28T03:46:41.133Z'
9
+ ---
10
+ ## Reason
11
+ Preserving complete OpenAPI 3.0 spec for Hermes backend API
12
+
13
+ ## Raw Concept
14
+ **Task:**
15
+ Document Hermes backend API specification
16
+
17
+ **Files:**
18
+ - docs/api/hermes-api.openapi.yaml
19
+
20
+ **Timestamp:** 2026-04-28
21
+
22
+ ## Narrative
23
+ ### Structure
24
+ OpenAPI 3.0 specification with paths for /jobs, /skills, /evolve, /config, and WebSocket /ws endpoint
25
+
26
+ ---
27
+
28
+
29
+ openapi: "3.1.0"
30
+ info:
31
+ title: Hermes Agent API
32
+ description: |
33
+ API del backend de Hermes (FastAPI/Python) expuesta por el gateway de hermes-cli.
34
+ El frontend Next.js consume estos endpoints y espera este contrato de respuesta.
35
+ version: "1.0.0"
36
+ contact:
37
+ name: Hermes Dashboard
38
+
39
+ servers:
40
+ - url: "http://127.0.0.1:8000"
41
+ description: Backend local (default). NEXT_PUBLIC_API_BASE sobreescribe esta URL.
42
+
43
+ paths:
44
+ ## ── Skills ──────────────────────────────────────────────────────────
45
+ /api/skills:
46
+ get:
47
+ operationId: listSkills
48
+ summary: Listar todos los skills instalados
49
+ description: Retorna la lista completa de skills detectados en los directorios configurados.
50
+ responses:
51
+ "200":
52
+ description: Lista de skills
53
+ content:
54
+ application/json:
55
+ schema:
56
+ type: array
57
+ items:
58
+ $ref: "#/components/schemas/SkillInfo"
59
+ "503":
60
+ $ref: "#/components/responses/ServiceUnavailable"
61
+
62
+ /api/skills/{name}:
63
+ get:
64
+ operationId: getSkill
65
+ summary: Obtener detalle de un skill
66
+ description: Retorna el contenido completo de un skill incluyendo frontmatter y body.
67
+ parameters:
68
+ - name: name
69
+ in: path
70
+ required: true
71
+ schema:
72
+ type: string
73
+ responses:
74
+ "200":
75
+ description: Detalle del skill
76
+ content:
77
+ application/json:
78
+ schema:
79
+ $ref: "#/components/schemas/SkillDetail"
80
+ "503":
81
+ $ref: "#/components/responses/ServiceUnavailable"
82
+
83
+ /api/skills/{name}/evolution-history:
84
+ get:
85
+ operationId: getSkillHistory
86
+ summary: Historial de evolución de un skill
87
+ parameters:
88
+ - name: name
89
+ in: path
90
+ required: true
91
+ schema:
92
+ type: string
93
+ responses:
94
+ "200":
95
+ description: Lista de ejecuciones de evolución para este skill
96
+ content:
97
+ application/json:
98
+ schema:
99
+ type: array
100
+ items:
101
+ $ref: "#/components/schemas/EvolutionRun"
102
+ "503":
103
+ $ref: "#/components/responses/ServiceUnavailable"
104
+
105
+ ## ── Evolution ───────────────────────────────────────────────────────
106
+ /api/evolution/runs:
107
+ get:
108
+ operationId: listEvolutionRuns
109
+ summary: Listar todas las ejecuciones de evolución
110
+ description: Retorna el historial completo de ejecuciones de evolución.
111
+ responses:
112
+ "200":
113
+ description: Lista de runs de evolución
114
+ content:
115
+ application/json:
116
+ schema:
117
+ type: array
118
+ items:
119
+ $ref: "#/components/schemas/EvolutionRun"
120
+ "503":
121
+ $ref: "#/components/responses/ServiceUnavailable"
122
+
123
+ /api/evolution/start:
124
+ post:
125
+ operationId: startEvolution
126
+ summary: Iniciar una evolución
127
+ requestBody:
128
+ required: true
129
+ content:
130
+ application/json:
131
+ schema:
132
+ type: object
133
+ required: [skill_name, iterations]
134
+ properties:
135
+ skill_name:
136
+ type: string
137
+ description: Nombre del skill a evolucionar
138
+ iterations:
139
+ type: integer
140
+ minimum: 1
141
+ maximum: 20
142
+ default: 3
143
+ eval_source:
144
+ type: string
145
+ default: synthetic
146
+ responses:
147
+ "200":
148
+ description: Job de evolución creado
149
+ content:
150
+ application/json:
151
+ schema:
152
+ type: object
153
+ properties:
154
+ job_id:
155
+ type: string
156
+ skill:
157
+ type: string
158
+ status:
159
+ type: string
160
+ error:
161
+ type: string
162
+ "503":
163
+ $ref: "#/components/responses/ServiceUnavailable"
164
+
165
+ ## ── Jobs ───────────────────────────────────────────────────────────
166
+ /api/jobs:
167
+ get:
168
+ operationId: listJobs
169
+ summary: Listar jobs activos o todos
170
+ parameters:
171
+ - name: active_only
172
+ in: query
173
+ schema:
174
+ type: boolean
175
+ default: false
176
+ responses:
177
+ "200":
178
+ description: Lista de jobs
179
+ content:
180
+ application/json:
181
+ schema:
182
+ type: array
183
+ items:
184
+ $ref: "#/components/schemas/EvolutionJob"
185
+ "503":
186
+ $ref: "#/components/responses/ServiceUnavailable"
187
+
188
+ /api/jobs/{jobId}:
189
+ get:
190
+ operationId: getJob
191
+ summary: Obtener detalle de un job
192
+ parameters:
193
+ - name: jobId
194
+ in: path
195
+ required: true
196
+ schema:
197
+ type: string
198
+ responses:
199
+ "200":
200
+ description: Detalle del job
201
+ content:
202
+ application/json:
203
+ schema:
204
+ $ref: "#/components/schemas/EvolutionJob"
205
+ "503":
206
+ $ref: "#/components/responses/ServiceUnavailable"
207
+ delete:
208
+ operationId: cancelJob
209
+ summary: Cancelar un job activo
210
+ parameters:
211
+ - name: jobId
212
+ in: path
213
+ required: true
214
+ schema:
215
+ type: string
216
+ responses:
217
+ "200":
218
+ description: Job cancelado
219
+ "503":
220
+ $ref: "#/components/responses/ServiceUnavailable"
221
+
222
+ /api/jobs/{jobId}/logs:
223
+ get:
224
+ operationId: getJobLogs
225
+ summary: Obtener logs de un job
226
+ parameters:
227
+ - name: jobId
228
+ in: path
229
+ required: true
230
+ schema:
231
+ type: string
232
+ - name: since
233
+ in: query
234
+ schema:
235
+ type: integer
236
+ default: 0
237
+ responses:
238
+ "200":
239
+ description: Logs del job (streaming paginado)
240
+ content:
241
+ application/json:
242
+ schema:
243
+ type: object
244
+ properties:
245
+ job_id:
246
+ type: string
247
+ total_lines:
248
+ type: integer
249
+ logs:
250
+ type: array
251
+ items:
252
+ type: string
253
+ status:
254
+ type: string
255
+ progress:
256
+ type: number
257
+ "503":
258
+ $ref: "#/components/responses/ServiceUnavailable"
259
+
260
+ ## ── Health ─────────────────────────────────────────────────────────
261
+ /api/health:
262
+ get:
263
+ operationId: healthCheck
264
+ summary: Health check del backend
265
+ responses:
266
+ "200":
267
+ description: Estado del sistema
268
+ content:
269
+ application/json:
270
+ schema:
271
+ type: object
272
+ properties:
273
+ status:
274
+ type: string
275
+ example: ok
276
+ hermes_repo:
277
+ type: string
278
+ hermes_repo_exists:
279
+ type: boolean
280
+ evolution_dir:
281
+ type: string
282
+ evolution_dir_exists:
283
+ type: boolean
284
+ skills_count:
285
+ type: integer
286
+ categories:
287
+ type: object
288
+ additionalProperties:
289
+ type: integer
290
+ "503":
291
+ $ref: "#/components/responses/ServiceUnavailable"
292
+
293
+ ## ── Componentes ─────────────────────────────────────────────────────
294
+ components:
295
+ schemas:
296
+ SkillInfo:
297
+ type: object
298
+ required: [name, path, description, size, last_modified, providers, provider_count, category]
299
+ properties:
300
+ name:
301
+ type: string
302
+ example: accessibility
303
+ path:
304
+ type: string
305
+ example: /home/user/.agents/skills/accessibility
306
+ description:
307
+ type: string
308
+ size:
309
+ type: number
310
+ last_modified:
311
+ type: string
312
+ format: date-time
313
+ providers:
314
+ type: array
315
+ items:
316
+ type: string
317
+ provider_count:
318
+ type: integer
319
+ category:
320
+ type: string
321
+
322
+ SkillDetail:
323
+ type: object
324
+ required: [name, path, frontmatter, body, raw, size]
325
+ properties:
326
+ name:
327
+ type: string
328
+ path:
329
+ type: string
330
+ frontmatter:
331
+ type: object
332
+ additionalProperties: true
333
+ description: YAML frontmatter parseado
334
+ body:
335
+ type: string
336
+ description: Contenido Markdown sin frontmatter
337
+ raw:
338
+ type: string
339
+ description: Archivo completo sin procesar
340
+ size:
341
+ type: number
342
+
343
+ EvolutionRun:
344
+ type: object
345
+ required:
346
+ [skill_name, timestamp, baseline_score, evolved_score, improvement,
347
+ elapsed_seconds, constraints_passed, iterations, optimizer_model]
348
+ properties:
349
+ skill_name:
350
+ type: string
351
+ timestamp:
352
+ type: string
353
+ baseline_score:
354
+ type: number
355
+ description: Score pre-evolución (0-1)
356
+ evolved_score:
357
+ type: number
358
+ description: Score post-evolución (0-1)
359
+ improvement:
360
+ type: number
361
+ description: Diferencia (positivo = mejoró)
362
+ elapsed_seconds:
363
+ type: number
364
+ constraints_passed:
365
+ type: boolean
366
+ iterations:
367
+ type: integer
368
+ optimizer_model:
369
+ type: string
370
+
371
+ EvolutionJob:
372
+ type: object
373
+ properties:
374
+ id:
375
+ type: string
376
+ skill_name:
377
+ type: string
378
+ status:
379
+ type: string
380
+ enum:
381
+ [queued, loading_skill, building_dataset, validating,
382
+ configuring, optimizing, evaluating, saving, completed, failed]
383
+ iterations:
384
+ type: integer
385
+ current_iteration:
386
+ type: integer
387
+ pid:
388
+ type: integer
389
+ nullable: true
390
+ started_at:
391
+ type: string
392
+ completed_at:
393
+ type: string
394
+ baseline_score:
395
+ type: number
396
+ nullable: true
397
+ current_best_score:
398
+ type: number
399
+ nullable: true
400
+ evolved_score:
401
+ type: number
402
+ nullable: true
403
+ improvement:
404
+ type: number
405
+ nullable: true
406
+ error:
407
+ type: string
408
+ progress:
409
+ type: number
410
+ logs:
411
+ type: array
412
+ items:
413
+ type: string
414
+
415
+ ## ── Error tipado ─────────────────────────────────────────────────
416
+ ApiError:
417
+ type: object
418
+ description: |
419
+ Contrato de error que el frontend debe interpretar.
420
+ Cualquier respuesta != 2xx o error de red se mapea a esta estructura.
421
+ required: [kind, message]
422
+ properties:
423
+ kind:
424
+ type: string
425
+ enum: [network, timeout, server, client]
426
+ description: |
427
+ network → fetch() rechazó (servicio no alcanzable)
428
+ timeout → AbortController superó el límite
429
+ server → HTTP 5xx
430
+ client → HTTP 4xx
431
+ message:
432
+ type: string
433
+ description: Texto legible para UI
434
+ status:
435
+ type: integer
436
+ description: Código HTTP (solo en server y client)
437
+ endpoint:
438
+ type: string
439
+ description: Ruta que falló (para diagnóstico)
440
+
441
+ ## ── Health fallback ──────────────────────────────────────────────
442
+ HealthStatus:
443
+ type: object
444
+ properties:
445
+ status:
446
+ type: string
447
+ enum: [ok, disconnected]
448
+ lastSeen:
449
+ type: string
450
+ format: date-time
451
+ description: Última vez que /api/health respondió 200
452
+
453
+ ## ── Respuesta 503 estandarizada ───────────────────────────────────
454
+ responses:
455
+ ServiceUnavailable:
456
+ description: >
457
+ El backend no está alcanzable. El frontend debe interpretar esto como señal
458
+ para mostrar estado "Desconectado" con opción de reintento.
459
+ content:
460
+ application/json:
461
+ schema:
462
+ $ref: "#/components/schemas/ApiError"
463
+ example:
464
+ kind: network
465
+ message: "El servicio de Hermes no está disponible"
466
+ endpoint: "/api/skills"
467
+
468
+