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
package/install.sh ADDED
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env bash
2
+ # ═══════════════════════════════════════════════════════════════════
3
+ # Hermes Dashboard — Universal Installer
4
+ # Works on Linux (x86_64/aarch64) and macOS (Intel/Apple Silicon)
5
+ # ═══════════════════════════════════════════════════════════════════
6
+ set -euo pipefail
7
+
8
+ DASHBOARD_DIR="$(cd "$(dirname "$0")" && pwd)"
9
+ BACKEND_DIR="$DASHBOARD_DIR/backend"
10
+ PYTHON=""
11
+
12
+ # ── Colors ──────────────────────────────────────────────────────────
13
+ RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
14
+ CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
15
+
16
+ info() { echo -e "${CYAN}▸${NC} $*"; }
17
+ ok() { echo -e "${GREEN}✓${NC} $*"; }
18
+ warn() { echo -e "${YELLOW}⚠${NC} $*"; }
19
+ err() { echo -e "${RED}✗${NC} $*" >&2; }
20
+ banner(){ echo -e "\n${BOLD}${CYAN}$*${NC}\n"; }
21
+
22
+ # ── Detect OS ───────────────────────────────────────────────────────
23
+ detect_os() {
24
+ case "$(uname -s)" in
25
+ Linux*) OS="linux";;
26
+ Darwin*) OS="macos";;
27
+ *) err "Unsupported OS: $(uname -s)"; exit 1;;
28
+ esac
29
+ ARCH="$(uname -m)"
30
+ ok "Detected: $OS ($ARCH)"
31
+ }
32
+
33
+ # ── Find Python ─────────────────────────────────────────────────────
34
+ find_python() {
35
+ for candidate in python3.12 python3.11 python3; do
36
+ if command -v "$candidate" &>/dev/null; then
37
+ local ver
38
+ ver=$("$candidate" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>/dev/null || echo "0.0")
39
+ local major=${ver%%.*}
40
+ local minor=${ver#*.}
41
+ if [[ "$major" -ge 3 && "$minor" -ge 10 ]]; then
42
+ PYTHON="$candidate"
43
+ ok "Python: $PYTHON ($ver)"
44
+ return 0
45
+ fi
46
+ fi
47
+ done
48
+ err "Python 3.10+ not found. Install it first."
49
+ exit 1
50
+ }
51
+
52
+ # ── Find hermes-agent ───────────────────────────────────────────────
53
+ find_hermes() {
54
+ local candidates=(
55
+ "${HERMES_AGENT_REPO:-}"
56
+ "$HOME/.hermes/hermes-agent"
57
+ "$HOME/.local/share/hermes/hermes-agent"
58
+ "/usr/local/share/hermes/hermes-agent"
59
+ "$DASHBOARD_DIR/../hermes-agent"
60
+ )
61
+ for p in "${candidates[@]}"; do
62
+ [[ -z "$p" ]] && continue
63
+ if [[ -d "$p/skills" ]]; then
64
+ HERMES_REPO="$p"
65
+ ok "hermes-agent: $HERMES_REPO"
66
+ return 0
67
+ fi
68
+ done
69
+ err "hermes-agent not found. Set HERMES_AGENT_REPO or install to ~/.hermes/hermes-agent"
70
+ exit 1
71
+ }
72
+
73
+ # ── Find hermes-agent-self-evolution ────────────────────────────────
74
+ find_evolution() {
75
+ local candidates=(
76
+ "$HOME/.hermes/hermes-agent-self-evolution"
77
+ "$DASHBOARD_DIR/../hermes-agent-self-evolution"
78
+ "$HOME/dev/hermes-agent-self-evolution"
79
+ )
80
+ for p in "${candidates[@]}"; do
81
+ if [[ -d "$p/evolution" ]]; then
82
+ EVOLUTION_DIR="$p"
83
+ ok "self-evolution: $EVOLUTION_DIR"
84
+ return 0
85
+ fi
86
+ done
87
+ warn "hermes-agent-self-evolution not found (evolution features will be limited)"
88
+ EVOLUTION_DIR=""
89
+ }
90
+
91
+ # ── Setup Python venv ───────────────────────────────────────────────
92
+ setup_python_deps() {
93
+ banner "Setting up Python backend"
94
+
95
+ if [[ ! -d "$BACKEND_DIR/venv" ]]; then
96
+ info "Creating venv..."
97
+ "$PYTHON" -m venv "$BACKEND_DIR/venv"
98
+ fi
99
+
100
+ # Activate venv
101
+ source "$BACKEND_DIR/venv/bin/activate"
102
+
103
+ info "Installing Python deps..."
104
+ pip install -q --upgrade pip
105
+ pip install -q -r "$BACKEND_DIR/requirements.txt"
106
+
107
+ # Also install evolution deps if available
108
+ if [[ -n "$EVOLUTION_DIR" && -f "$EVOLUTION_DIR/pyproject.toml" ]]; then
109
+ info "Installing evolution deps..."
110
+ pip install -q dspy click rich pyyaml openai 2>/dev/null || warn "Some evolution deps failed (non-critical)"
111
+ fi
112
+
113
+ ok "Python deps installed"
114
+ }
115
+
116
+ # ── Setup Node deps ─────────────────────────────────────────────────
117
+ setup_node_deps() {
118
+ banner "Setting up Node.js frontend"
119
+
120
+ if ! command -v node &>/dev/null; then
121
+ err "Node.js not found. Install from https://nodejs.org"
122
+ exit 1
123
+ fi
124
+
125
+ local node_ver
126
+ node_ver=$(node -v | tr -d 'v' | cut -d. -f1)
127
+ if [[ "$node_ver" -lt 18 ]]; then
128
+ err "Node.js 18+ required (found $(node -v))"
129
+ exit 1
130
+ fi
131
+ ok "Node.js: $(node -v)"
132
+
133
+ if [[ ! -d "$DASHBOARD_DIR/node_modules" ]]; then
134
+ info "Installing npm deps..."
135
+ cd "$DASHBOARD_DIR"
136
+ npm install --silent
137
+ fi
138
+ ok "Node deps installed"
139
+ }
140
+
141
+ # ── Generate .env ───────────────────────────────────────────────────
142
+ generate_env() {
143
+ banner "Generating configuration"
144
+
145
+ local env_file="$DASHBOARD_DIR/.env.local"
146
+ cat > "$env_file" << EOF
147
+ # Auto-generated by install.sh — $(date -u +%Y-%m-%dT%H:%M:%SZ)
148
+ NEXT_PUBLIC_API_URL=http://localhost:8787
149
+ HERMES_AGENT_REPO=$HERMES_REPO
150
+ EVOLUTION_DIR=$EVOLUTION_DIR
151
+ PYTHON=$(which "$PYTHON" 2>/dev/null || echo "$PYTHON")
152
+ EOF
153
+ ok "Config: $env_file"
154
+ }
155
+
156
+ # ── Create start script ─────────────────────────────────────────────
157
+ create_start_script() {
158
+ local start_script="$DASHBOARD_DIR/start.sh"
159
+ cat > "$start_script" << 'STARTEOF'
160
+ #!/usr/bin/env bash
161
+ # Hermes Dashboard — Start script
162
+ set -euo pipefail
163
+ DIR="$(cd "$(dirname "$0")" && pwd)"
164
+
165
+ # Load env
166
+ [[ -f "$DIR/.env.local" ]] && set -a && source "$DIR/.env.local" && set +a
167
+
168
+ echo "╔══════════════════════════════════════════╗"
169
+ echo "║ Hermes Evolution Dashboard ║"
170
+ echo "╚══════════════════════════════════════════╝"
171
+ echo ""
172
+
173
+ # Start backend
174
+ echo "▸ Starting backend (port 8787)..."
175
+ source "$DIR/backend/venv/bin/activate"
176
+ export HERMES_AGENT_REPO="${HERMES_AGENT_REPO:-$HOME/.hermes/hermes-agent}"
177
+ export PYTHONPATH="${EVOLUTION_DIR:-$HOME/.hermes/hermes-agent-self-evolution}"
178
+ uvicorn backend.main:app --host 0.0.0.0 --port 8787 &
179
+ BACKEND_PID=$!
180
+
181
+ # Wait for backend
182
+ for i in $(seq 1 15); do
183
+ curl -sf http://localhost:8787/api/health >/dev/null 2>&1 && break
184
+ sleep 0.5
185
+ done
186
+ echo "✓ Backend online (PID $BACKEND_PID)"
187
+
188
+ # Start frontend
189
+ echo "▸ Starting frontend (port 3001)..."
190
+ PORT=3001 npm run dev --prefix "$DIR" &
191
+ FRONTEND_PID=$!
192
+ echo "✓ Frontend starting..."
193
+ echo ""
194
+ echo " Dashboard: http://localhost:3001"
195
+ echo " API: http://localhost:8787"
196
+ echo ""
197
+ echo " Press Ctrl+C to stop"
198
+ echo ""
199
+
200
+ # Cleanup on exit
201
+ cleanup() {
202
+ echo ""
203
+ echo "Stopping..."
204
+ kill $BACKEND_PID 2>/dev/null || true
205
+ kill $FRONTEND_PID 2>/dev/null || true
206
+ exit 0
207
+ }
208
+ trap cleanup INT TERM
209
+
210
+ wait
211
+ STARTEOF
212
+ chmod +x "$start_script"
213
+ ok "Start script: $start_script"
214
+ }
215
+
216
+ # ── Count skills (for verification) ─────────────────────────────────
217
+ count_skills() {
218
+ if [[ -d "$HERMES_REPO/skills" ]]; then
219
+ local md_count desc_count total
220
+ md_count=$(find "$HERMES_REPO/skills" -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
221
+ desc_count=$(find "$HERMES_REPO/skills" -name "DESCRIPTION.md" 2>/dev/null | wc -l | tr -d ' ')
222
+ total=$((md_count + desc_count))
223
+ ok "Skills found: $total ($md_count SKILL.md + $desc_count DESCRIPTION.md)"
224
+ fi
225
+ }
226
+
227
+ # ═══════════════════════════════════════════════════════════════════
228
+ # Main
229
+ # ═══════════════════════════════════════════════════════════════════
230
+ banner "Hermes Dashboard Installer"
231
+
232
+ detect_os
233
+ find_python
234
+ find_hermes
235
+ find_evolution
236
+ count_skills
237
+ setup_python_deps
238
+ setup_node_deps
239
+ generate_env
240
+ create_start_script
241
+
242
+ banner "Installation complete!"
243
+ echo " Start with: ./start.sh"
244
+ echo " Dashboard: http://localhost:3001"
245
+ echo ""
package/next-env.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /// <reference types="next" />
2
+ /// <reference types="next/image-types/global" />
3
+ import "./.next/dev/types/routes.d.ts";
4
+
5
+ // NOTE: This file should not be edited
6
+ // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
package/next.config.ts ADDED
@@ -0,0 +1,32 @@
1
+ import type { NextConfig } from "next";
2
+
3
+ const nextConfig: NextConfig = {
4
+ // Standalone output — reduces node_modules in production
5
+ output: "standalone",
6
+
7
+
8
+ // Proxy API calls to FastAPI backend (:8000)
9
+ async rewrites() {
10
+ return [
11
+ {
12
+ source: "/api/:path*",
13
+ destination: "http://localhost:8000/api/:path*",
14
+ },
15
+ ];
16
+ },
17
+
18
+ // Bundle optimization: tree-shake unused deps
19
+ experimental: {
20
+ optimizePackageImports: [
21
+ "lucide-react",
22
+ "framer-motion",
23
+ "radix-ui",
24
+ "react-bits",
25
+ ],
26
+ },
27
+
28
+ // Keep source maps manageable
29
+ productionBrowserSourceMaps: false,
30
+ };
31
+
32
+ export default nextConfig;
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "genoma-evolution",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "bin": {
6
+ "genoma": "./bin/genoma.js"
7
+ },
8
+ "postinstall": "node scripts/postinstall.js",
9
+ "prepublishOnly": "pnpm build",
10
+ "dependencies": {
11
+ "@chenglou/pretext": "^0.0.6",
12
+ "@tanstack/react-query": "^5.99.2",
13
+ "class-variance-authority": "^0.7.1",
14
+ "clsx": "^2.1.1",
15
+ "framer-motion": "^12.38.0",
16
+ "lucide-react": "^1.8.0",
17
+ "next": "^16.2.6",
18
+ "next-themes": "^0.4.6",
19
+ "radix-ui": "^1.4.3",
20
+ "react": "19.2.4",
21
+ "react-bits": "^1.0.5",
22
+ "react-dom": "19.2.4",
23
+ "shadcn": "^4.4.0",
24
+ "tailwind-merge": "^3.5.0",
25
+ "tw-animate-css": "^1.4.0",
26
+ "vis-data": "^8.0.3",
27
+ "vis-network": "^10.0.2"
28
+ },
29
+ "devDependencies": {
30
+ "@next/bundle-analyzer": "^16.2.4",
31
+ "@tailwindcss/postcss": "^4",
32
+ "@types/node": "^20",
33
+ "@types/react": "^19",
34
+ "@types/react-dom": "^19",
35
+ "eslint": "^9",
36
+ "eslint-config-next": "16.2.4",
37
+ "tailwindcss": "^4",
38
+ "typescript": "^5"
39
+ },
40
+ "scripts": {
41
+ "dev": "next dev",
42
+ "build": "next build",
43
+ "start": "next start",
44
+ "lint": "eslint"
45
+ }
46
+ }
@@ -0,0 +1,4 @@
1
+ allowBuilds:
2
+ msw: set this to true or false
3
+ sharp: set this to true or false
4
+ unrs-resolver: set this to true or false
@@ -0,0 +1,7 @@
1
+ const config = {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
6
+
7
+ export default config;
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -0,0 +1,257 @@
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Genoma — Light Theme Preview</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script>
9
+ tailwind.config = {
10
+ theme: {
11
+ extend: {
12
+ colors: {
13
+ base: '#F4F7FA',
14
+ surface: '#FFFFFF',
15
+ 'surface-hover': '#F0F4F8',
16
+ primary: {
17
+ 50: '#ECFEFF', 100: '#CFFAFE', 200: '#A5F3FC',
18
+ 300: '#67E8F9', 400: '#22D3EE', 500: '#06B6D4',
19
+ 600: '#0891B2', 700: '#0E7490', 800: '#155E75', 900: '#164E63',
20
+ },
21
+ semantic: {
22
+ success: '#2DD4BF', warning: '#FBBF24',
23
+ error: '#E11D48', info: '#0EA5E9',
24
+ },
25
+ txt: {
26
+ primary: '#0F172A', secondary: '#475569',
27
+ tertiary: '#94A3B8', inverse: '#F8FAFC',
28
+ }
29
+ },
30
+ boxShadow: {
31
+ 'evo-sm': '0 1px 2px 0 rgba(15, 23, 42, 0.05)',
32
+ 'evo-md': '0 4px 6px -1px rgba(15, 23, 42, 0.08), 0 2px 4px -2px rgba(15, 23, 42, 0.04)',
33
+ 'evo-lg': '0 10px 15px -3px rgba(15, 23, 42, 0.08), 0 4px 6px -4px rgba(15, 23, 42, 0.04)',
34
+ 'evo-glow': '0 0 0 3px rgba(6, 182, 212, 0.15)',
35
+ }
36
+ }
37
+ }
38
+ }
39
+ </script>
40
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
41
+ <style>body { font-family: 'Inter', sans-serif; }</style>
42
+ </head>
43
+ <body class="bg-base min-h-screen">
44
+ <!-- Sidebar -->
45
+ <div class="fixed left-0 top-0 h-full w-16 bg-surface border-r border-gray-200 flex flex-col items-center py-6 gap-4 z-50">
46
+ <div class="w-10 h-10 rounded-xl bg-primary-600 flex items-center justify-center text-white font-bold text-lg">G</div>
47
+ <div class="w-8 h-8 rounded-lg bg-primary-50 text-primary-700 flex items-center justify-center text-sm">🏠</div>
48
+ <div class="w-8 h-8 rounded-lg bg-primary-600 text-white flex items-center justify-center text-sm shadow-evo-md">⚡</div>
49
+ <div class="w-8 h-8 rounded-lg hover:bg-surface-hover text-txt-secondary flex items-center justify-center text-sm transition-colors">📊</div>
50
+ <div class="w-8 h-8 rounded-lg hover:bg-surface-hover text-txt-secondary flex items-center justify-center text-sm transition-colors">🧠</div>
51
+ </div>
52
+
53
+ <!-- Main Content -->
54
+ <div class="ml-16 p-8">
55
+ <!-- Header -->
56
+ <div class="flex items-center justify-between mb-8">
57
+ <div class="flex items-center gap-3">
58
+ <div class="w-10 h-10 rounded-xl bg-primary-100 flex items-center justify-center">
59
+ <span class="text-xl">⚡</span>
60
+ </div>
61
+ <div>
62
+ <h1 class="text-2xl font-bold text-txt-primary">Skill Hub</h1>
63
+ <p class="text-sm text-txt-secondary">Tus skills locales, organizadas por proveedor y categoría</p>
64
+ </div>
65
+ </div>
66
+ <div class="flex items-center gap-3">
67
+ <button class="px-4 py-2 bg-primary-600 text-white rounded-lg text-sm font-medium hover:bg-primary-700 transition-colors shadow-evo-md">
68
+ 🎨 Aplicar Tema
69
+ </button>
70
+ <button class="px-4 py-2 bg-surface border border-gray-200 text-txt-secondary rounded-lg text-sm hover:bg-surface-hover transition-colors">
71
+ 🔄 Refresh
72
+ </button>
73
+ </div>
74
+ </div>
75
+
76
+ <!-- Search + Filters -->
77
+ <div class="flex gap-4 mb-6">
78
+ <div class="relative flex-1">
79
+ <span class="absolute left-3 top-1/2 -translate-y-1/2 text-txt-tertiary">🔍</span>
80
+ <input type="text" placeholder="Buscar skills por nombre, descripción o categoría..."
81
+ class="w-full pl-10 pr-4 py-3 bg-surface border border-gray-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-primary-500/30 focus:border-primary-400 text-txt-primary shadow-evo-sm"
82
+ />
83
+ </div>
84
+ <select class="px-4 py-3 bg-surface border border-gray-200 rounded-xl text-txt-secondary focus:outline-none focus:ring-2 focus:ring-primary-500/30 shadow-evo-sm">
85
+ <option>Todos los providers</option>
86
+ <option>Agency</option>
87
+ <option>Hermes</option>
88
+ </select>
89
+ <select class="px-4 py-3 bg-surface border border-gray-200 rounded-xl text-txt-secondary focus:outline-none focus:ring-2 focus:ring-primary-500/30 shadow-evo-sm">
90
+ <option>Todas las categorías</option>
91
+ <option>software-development</option>
92
+ <option>devops</option>
93
+ </select>
94
+ </div>
95
+
96
+ <!-- Stats Cards -->
97
+ <div class="grid grid-cols-4 gap-4 mb-8">
98
+ <div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
99
+ <div class="text-2xl mb-2">🏢</div>
100
+ <div class="text-sm font-medium text-txt-secondary capitalize">Agency</div>
101
+ <div class="text-3xl font-bold text-primary-700 mt-1">1173/1185</div>
102
+ <div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
103
+ </div>
104
+ <div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
105
+ <div class="text-2xl mb-2">🪽</div>
106
+ <div class="text-sm font-medium text-txt-secondary capitalize">Hermes</div>
107
+ <div class="text-3xl font-bold text-primary-700 mt-1">127/127</div>
108
+ <div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
109
+ </div>
110
+ <div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
111
+ <div class="text-2xl mb-2">🤖</div>
112
+ <div class="text-sm font-medium text-txt-secondary capitalize">Claude-Code</div>
113
+ <div class="text-3xl font-bold text-primary-700 mt-1">99/99</div>
114
+ <div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
115
+ </div>
116
+ <div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
117
+ <div class="text-2xl mb-2">⚡</div>
118
+ <div class="text-sm font-medium text-txt-secondary capitalize">Kilocode</div>
119
+ <div class="text-3xl font-bold text-primary-700 mt-1">27/27</div>
120
+ <div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
121
+ </div>
122
+ </div>
123
+
124
+ <!-- Provider: Hermes (Expanded) -->
125
+ <div class="bg-surface rounded-2xl border border-gray-100 shadow-evo-md overflow-hidden mb-6">
126
+ <div class="flex items-center justify-between p-5 cursor-pointer hover:bg-surface-hover transition-colors">
127
+ <div class="flex items-center gap-3">
128
+ <span class="text-2xl">🪽</span>
129
+ <div>
130
+ <h2 class="text-lg font-bold text-txt-primary capitalize">Hermes</h2>
131
+ <p class="text-xs text-txt-tertiary">25 categorías</p>
132
+ </div>
133
+ </div>
134
+ <div class="flex items-center gap-4">
135
+ <span class="text-sm text-txt-secondary">127/127 activas</span>
136
+ <span class="text-txt-tertiary">▼</span>
137
+ </div>
138
+ </div>
139
+
140
+ <div class="px-5 pb-5 space-y-3">
141
+ <!-- Category: software-development -->
142
+ <div class="border border-gray-100 rounded-xl overflow-hidden">
143
+ <div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
144
+ <div class="flex items-center gap-2">
145
+ <span class="text-gray-400">📁</span>
146
+ <span class="text-sm font-semibold text-primary-700 bg-primary-50 px-2 py-0.5 rounded-lg border border-primary-200">
147
+ software-development
148
+ </span>
149
+ <span class="text-xs text-txt-tertiary">32 skills</span>
150
+ </div>
151
+ <span class="text-txt-tertiary text-sm">▼</span>
152
+ </div>
153
+ <div class="p-3 pt-0 grid grid-cols-3 gap-2">
154
+ <div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
155
+ <div class="flex items-start justify-between">
156
+ <div>
157
+ <h3 class="font-medium text-txt-primary text-sm">python-cli-to-dashboard</h3>
158
+ <p class="text-xs text-txt-secondary mt-1">Wrap Python CLI in FastAPI</p>
159
+ </div>
160
+ <div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
161
+ </div>
162
+ </div>
163
+ <div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
164
+ <div class="flex items-start justify-between">
165
+ <div>
166
+ <h3 class="font-medium text-txt-primary text-sm">tauri-linux-compat</h3>
167
+ <p class="text-xs text-txt-secondary mt-1">Port Tauri to Linux</p>
168
+ </div>
169
+ <div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
170
+ </div>
171
+ </div>
172
+ <div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
173
+ <div class="flex items-start justify-between">
174
+ <div>
175
+ <h3 class="font-medium text-txt-primary text-sm">test-driven-dev</h3>
176
+ <p class="text-xs text-txt-secondary mt-1">TDD workflow</p>
177
+ </div>
178
+ <div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ <button class="w-full py-2 text-sm text-primary-600 hover:text-primary-700 hover:bg-primary-50 transition-colors border-t border-dashed border-gray-200">
183
+ Mostrar más (29 restantes)
184
+ </button>
185
+ </div>
186
+
187
+ <!-- Category: devops -->
188
+ <div class="border border-gray-100 rounded-xl overflow-hidden">
189
+ <div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
190
+ <div class="flex items-center gap-2">
191
+ <span class="text-gray-400">📁</span>
192
+ <span class="text-sm font-semibold text-semantic-info bg-sky-50 px-2 py-0.5 rounded-lg border border-sky-200">
193
+ devops
194
+ </span>
195
+ <span class="text-xs text-txt-tertiary">16 skills</span>
196
+ </div>
197
+ <span class="text-txt-tertiary text-sm">▼</span>
198
+ </div>
199
+ </div>
200
+
201
+ <!-- Category: github -->
202
+ <div class="border border-gray-100 rounded-xl overflow-hidden">
203
+ <div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
204
+ <div class="flex items-center gap-2">
205
+ <span class="text-gray-400">📁</span>
206
+ <span class="text-sm font-semibold text-orange-600 bg-orange-50 px-2 py-0.5 rounded-lg border border-orange-200">
207
+ github
208
+ </span>
209
+ <span class="text-xs text-txt-tertiary">6 skills</span>
210
+ </div>
211
+ <span class="text-txt-tertiary text-sm">▼</span>
212
+ </div>
213
+ </div>
214
+
215
+ <!-- Category: creative -->
216
+ <div class="border border-gray-100 rounded-xl overflow-hidden">
217
+ <div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
218
+ <div class="flex items-center gap-2">
219
+ <span class="text-gray-400">📁</span>
220
+ <span class="text-sm font-semibold text-purple-600 bg-purple-50 px-2 py-0.5 rounded-lg border border-purple-200">
221
+ creative
222
+ </span>
223
+ <span class="text-xs text-txt-tertiary">13 skills</span>
224
+ </div>
225
+ <span class="text-txt-tertiary text-sm">▼</span>
226
+ </div>
227
+ </div>
228
+ </div>
229
+ </div>
230
+
231
+ <!-- Provider: Claude-Code (Collapsed) -->
232
+ <div class="bg-surface rounded-2xl border border-gray-100 shadow-evo-sm overflow-hidden mb-6">
233
+ <div class="flex items-center justify-between p-5 cursor-pointer hover:bg-surface-hover transition-colors">
234
+ <div class="flex items-center gap-3">
235
+ <span class="text-2xl">🤖</span>
236
+ <div>
237
+ <h2 class="text-lg font-bold text-txt-primary capitalize">Claude-Code</h2>
238
+ <p class="text-xs text-txt-tertiary">1 categoría</p>
239
+ </div>
240
+ </div>
241
+ <div class="flex items-center gap-4">
242
+ <span class="text-sm text-txt-secondary">99/99 activas</span>
243
+ <span class="text-txt-tertiary">▶</span>
244
+ </div>
245
+ </div>
246
+ </div>
247
+ </div>
248
+
249
+ <!-- Floating Theme Toggle -->
250
+ <div class="fixed bottom-6 right-6 flex gap-2">
251
+ <div class="bg-surface border border-gray-200 rounded-xl p-1 shadow-evo-lg flex gap-1">
252
+ <button class="px-3 py-1.5 rounded-lg bg-primary-600 text-white text-sm font-medium">☀️ Light</button>
253
+ <button class="px-3 py-1.5 rounded-lg hover:bg-gray-100 text-txt-secondary text-sm transition-colors">🌙 Dark</button>
254
+ </div>
255
+ </div>
256
+ </body>
257
+ </html>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>