@monoes/monomindcli 1.11.14 → 1.13.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 (434) hide show
  1. package/.claude/agents/generated/channel-intelligence-director.md +87 -0
  2. package/.claude/agents/generated/chief-growth-officer.md +88 -0
  3. package/.claude/agents/generated/content-seo-strategist.md +90 -0
  4. package/.claude/agents/generated/developer-community-strategist.md +91 -0
  5. package/.claude/agents/generated/outreach-partnership-strategist.md +90 -0
  6. package/.claude/agents/generated/social-media-strategist.md +91 -0
  7. package/.claude/agents/generated/video-visual-strategist.md +90 -0
  8. package/.claude/commands/mastermind/master.md +1 -1
  9. package/.claude/helpers/auto-memory-hook.mjs +13 -4
  10. package/.claude/helpers/control-start.cjs +5 -0
  11. package/.claude/helpers/event-logger.cjs +114 -0
  12. package/.claude/helpers/handlers/adr-draft-handler.cjs +19 -5
  13. package/.claude/helpers/handlers/agent-start-handler.cjs +13 -4
  14. package/.claude/helpers/handlers/compact-handler.cjs +2 -0
  15. package/.claude/helpers/handlers/edit-handler.cjs +1 -1
  16. package/.claude/helpers/handlers/gates-handler.cjs +3 -0
  17. package/.claude/helpers/handlers/graph-status-handler.cjs +14 -8
  18. package/.claude/helpers/handlers/loops-status-handler.cjs +5 -2
  19. package/.claude/helpers/handlers/route-handler.cjs +24 -10
  20. package/.claude/helpers/handlers/session-handler.cjs +11 -4
  21. package/.claude/helpers/handlers/session-restore-handler.cjs +35 -19
  22. package/.claude/helpers/handlers/task-handler.cjs +13 -5
  23. package/.claude/helpers/hook-handler.cjs +40 -0
  24. package/.claude/helpers/intelligence.cjs +130 -53
  25. package/.claude/helpers/loop-tracker.cjs +15 -3
  26. package/.claude/helpers/memory-palace.cjs +461 -0
  27. package/.claude/helpers/memory.cjs +138 -14
  28. package/.claude/helpers/metrics-db.mjs +87 -0
  29. package/.claude/helpers/router.cjs +300 -42
  30. package/.claude/helpers/session.cjs +89 -30
  31. package/.claude/helpers/statusline.cjs +148 -4
  32. package/.claude/helpers/toggle-statusline.cjs +73 -0
  33. package/.claude/helpers/token-tracker.cjs +934 -0
  34. package/.claude/helpers/utils/micro-agents.cjs +20 -4
  35. package/.claude/helpers/utils/monograph.cjs +39 -4
  36. package/.claude/helpers/utils/telemetry.cjs +3 -3
  37. package/.claude/skills/mastermind/_protocol.md +25 -15
  38. package/.claude/skills/mastermind/architect.md +3 -3
  39. package/.claude/skills/mastermind/autodev.md +4 -2
  40. package/.claude/skills/mastermind/idea.md +10 -0
  41. package/.claude/skills/mastermind/ops.md +3 -3
  42. package/.claude/skills/mastermind/runorg.md +153 -86
  43. package/dist/src/agents/registry-builder.d.ts.map +1 -1
  44. package/dist/src/agents/registry-builder.js +2 -0
  45. package/dist/src/agents/registry-builder.js.map +1 -1
  46. package/dist/src/autopilot-state.d.ts.map +1 -1
  47. package/dist/src/autopilot-state.js +10 -5
  48. package/dist/src/autopilot-state.js.map +1 -1
  49. package/dist/src/benchmarks/benchmark-runner.d.ts.map +1 -1
  50. package/dist/src/benchmarks/benchmark-runner.js +13 -0
  51. package/dist/src/benchmarks/benchmark-runner.js.map +1 -1
  52. package/dist/src/benchmarks/metric-evaluators.d.ts.map +1 -1
  53. package/dist/src/benchmarks/metric-evaluators.js +20 -9
  54. package/dist/src/benchmarks/metric-evaluators.js.map +1 -1
  55. package/dist/src/browser/actions.d.ts.map +1 -1
  56. package/dist/src/browser/actions.js +10 -3
  57. package/dist/src/browser/actions.js.map +1 -1
  58. package/dist/src/browser/browser.d.ts.map +1 -1
  59. package/dist/src/browser/browser.js +12 -2
  60. package/dist/src/browser/browser.js.map +1 -1
  61. package/dist/src/browser/cdp.d.ts.map +1 -1
  62. package/dist/src/browser/cdp.js +21 -3
  63. package/dist/src/browser/cdp.js.map +1 -1
  64. package/dist/src/browser/har.d.ts.map +1 -1
  65. package/dist/src/browser/har.js +27 -5
  66. package/dist/src/browser/har.js.map +1 -1
  67. package/dist/src/commands/agent.d.ts.map +1 -1
  68. package/dist/src/commands/agent.js +11 -8
  69. package/dist/src/commands/agent.js.map +1 -1
  70. package/dist/src/commands/analyze.d.ts.map +1 -1
  71. package/dist/src/commands/analyze.js +36 -21
  72. package/dist/src/commands/analyze.js.map +1 -1
  73. package/dist/src/commands/autopilot.d.ts.map +1 -1
  74. package/dist/src/commands/autopilot.js +12 -4
  75. package/dist/src/commands/autopilot.js.map +1 -1
  76. package/dist/src/commands/benchmark.d.ts.map +1 -1
  77. package/dist/src/commands/benchmark.js +51 -8
  78. package/dist/src/commands/benchmark.js.map +1 -1
  79. package/dist/src/commands/browse.d.ts.map +1 -1
  80. package/dist/src/commands/browse.js +5 -2
  81. package/dist/src/commands/browse.js.map +1 -1
  82. package/dist/src/commands/claims.d.ts.map +1 -1
  83. package/dist/src/commands/claims.js +29 -11
  84. package/dist/src/commands/claims.js.map +1 -1
  85. package/dist/src/commands/cleanup.d.ts.map +1 -1
  86. package/dist/src/commands/cleanup.js +25 -5
  87. package/dist/src/commands/cleanup.js.map +1 -1
  88. package/dist/src/commands/config.d.ts.map +1 -1
  89. package/dist/src/commands/config.js +15 -7
  90. package/dist/src/commands/config.js.map +1 -1
  91. package/dist/src/commands/daemon.d.ts.map +1 -1
  92. package/dist/src/commands/daemon.js +6 -0
  93. package/dist/src/commands/daemon.js.map +1 -1
  94. package/dist/src/commands/deployment.d.ts.map +1 -1
  95. package/dist/src/commands/deployment.js +34 -19
  96. package/dist/src/commands/deployment.js.map +1 -1
  97. package/dist/src/commands/doctor.d.ts.map +1 -1
  98. package/dist/src/commands/doctor.js +133 -15
  99. package/dist/src/commands/doctor.js.map +1 -1
  100. package/dist/src/commands/guidance.d.ts.map +1 -1
  101. package/dist/src/commands/guidance.js +15 -2
  102. package/dist/src/commands/guidance.js.map +1 -1
  103. package/dist/src/commands/hive-mind.d.ts.map +1 -1
  104. package/dist/src/commands/hive-mind.js +37 -14
  105. package/dist/src/commands/hive-mind.js.map +1 -1
  106. package/dist/src/commands/hooks.d.ts.map +1 -1
  107. package/dist/src/commands/hooks.js +42 -25
  108. package/dist/src/commands/hooks.js.map +1 -1
  109. package/dist/src/commands/init.d.ts.map +1 -1
  110. package/dist/src/commands/init.js +9 -4
  111. package/dist/src/commands/init.js.map +1 -1
  112. package/dist/src/commands/issues.d.ts.map +1 -1
  113. package/dist/src/commands/issues.js +29 -26
  114. package/dist/src/commands/issues.js.map +1 -1
  115. package/dist/src/commands/mcp.d.ts.map +1 -1
  116. package/dist/src/commands/mcp.js +11 -5
  117. package/dist/src/commands/mcp.js.map +1 -1
  118. package/dist/src/commands/memory.d.ts.map +1 -1
  119. package/dist/src/commands/memory.js +10 -0
  120. package/dist/src/commands/memory.js.map +1 -1
  121. package/dist/src/commands/migrate.js +5 -5
  122. package/dist/src/commands/migrate.js.map +1 -1
  123. package/dist/src/commands/monograph.d.ts.map +1 -1
  124. package/dist/src/commands/monograph.js +18 -5
  125. package/dist/src/commands/monograph.js.map +1 -1
  126. package/dist/src/commands/monovector/backup.d.ts.map +1 -1
  127. package/dist/src/commands/monovector/backup.js +8 -2
  128. package/dist/src/commands/monovector/backup.js.map +1 -1
  129. package/dist/src/commands/monovector/benchmark.d.ts.map +1 -1
  130. package/dist/src/commands/monovector/benchmark.js +20 -7
  131. package/dist/src/commands/monovector/benchmark.js.map +1 -1
  132. package/dist/src/commands/monovector/import.d.ts.map +1 -1
  133. package/dist/src/commands/monovector/import.js +15 -0
  134. package/dist/src/commands/monovector/import.js.map +1 -1
  135. package/dist/src/commands/monovector/migrate.d.ts.map +1 -1
  136. package/dist/src/commands/monovector/migrate.js +4 -1
  137. package/dist/src/commands/monovector/migrate.js.map +1 -1
  138. package/dist/src/commands/monovector/optimize.d.ts.map +1 -1
  139. package/dist/src/commands/monovector/optimize.js +11 -0
  140. package/dist/src/commands/monovector/optimize.js.map +1 -1
  141. package/dist/src/commands/monovector/setup.d.ts.map +1 -1
  142. package/dist/src/commands/monovector/setup.js +11 -1
  143. package/dist/src/commands/monovector/setup.js.map +1 -1
  144. package/dist/src/commands/neural.js +1 -1
  145. package/dist/src/commands/neural.js.map +1 -1
  146. package/dist/src/commands/performance.d.ts.map +1 -1
  147. package/dist/src/commands/performance.js +20 -7
  148. package/dist/src/commands/performance.js.map +1 -1
  149. package/dist/src/commands/platforms.d.ts.map +1 -1
  150. package/dist/src/commands/platforms.js +90 -8
  151. package/dist/src/commands/platforms.js.map +1 -1
  152. package/dist/src/commands/plugins.d.ts.map +1 -1
  153. package/dist/src/commands/plugins.js +12 -5
  154. package/dist/src/commands/plugins.js.map +1 -1
  155. package/dist/src/commands/process.d.ts.map +1 -1
  156. package/dist/src/commands/process.js +33 -10
  157. package/dist/src/commands/process.js.map +1 -1
  158. package/dist/src/commands/progress.d.ts.map +1 -1
  159. package/dist/src/commands/progress.js +5 -3
  160. package/dist/src/commands/progress.js.map +1 -1
  161. package/dist/src/commands/providers.js +5 -5
  162. package/dist/src/commands/providers.js.map +1 -1
  163. package/dist/src/commands/replay.d.ts.map +1 -1
  164. package/dist/src/commands/replay.js +8 -2
  165. package/dist/src/commands/replay.js.map +1 -1
  166. package/dist/src/commands/route.d.ts.map +1 -1
  167. package/dist/src/commands/route.js +27 -7
  168. package/dist/src/commands/route.js.map +1 -1
  169. package/dist/src/commands/security.d.ts.map +1 -1
  170. package/dist/src/commands/security.js +4 -0
  171. package/dist/src/commands/security.js.map +1 -1
  172. package/dist/src/commands/session.d.ts.map +1 -1
  173. package/dist/src/commands/session.js +12 -1
  174. package/dist/src/commands/session.js.map +1 -1
  175. package/dist/src/commands/start.d.ts.map +1 -1
  176. package/dist/src/commands/start.js +11 -4
  177. package/dist/src/commands/start.js.map +1 -1
  178. package/dist/src/commands/status.d.ts.map +1 -1
  179. package/dist/src/commands/status.js +7 -4
  180. package/dist/src/commands/status.js.map +1 -1
  181. package/dist/src/commands/swarm.d.ts.map +1 -1
  182. package/dist/src/commands/swarm.js +27 -13
  183. package/dist/src/commands/swarm.js.map +1 -1
  184. package/dist/src/commands/task.d.ts.map +1 -1
  185. package/dist/src/commands/task.js +26 -11
  186. package/dist/src/commands/task.js.map +1 -1
  187. package/dist/src/commands/tokens.d.ts.map +1 -1
  188. package/dist/src/commands/tokens.js +7 -2
  189. package/dist/src/commands/tokens.js.map +1 -1
  190. package/dist/src/commands/transfer-store.d.ts.map +1 -1
  191. package/dist/src/commands/transfer-store.js +36 -22
  192. package/dist/src/commands/transfer-store.js.map +1 -1
  193. package/dist/src/commands/update.d.ts.map +1 -1
  194. package/dist/src/commands/update.js +15 -3
  195. package/dist/src/commands/update.js.map +1 -1
  196. package/dist/src/commands/workflow.d.ts.map +1 -1
  197. package/dist/src/commands/workflow.js +39 -6
  198. package/dist/src/commands/workflow.js.map +1 -1
  199. package/dist/src/consensus/audit-writer.d.ts.map +1 -1
  200. package/dist/src/consensus/audit-writer.js +18 -7
  201. package/dist/src/consensus/audit-writer.js.map +1 -1
  202. package/dist/src/consensus/vote-signer.d.ts.map +1 -1
  203. package/dist/src/consensus/vote-signer.js +25 -8
  204. package/dist/src/consensus/vote-signer.js.map +1 -1
  205. package/dist/src/index.d.ts.map +1 -1
  206. package/dist/src/index.js +7 -3
  207. package/dist/src/index.js.map +1 -1
  208. package/dist/src/init/executor.d.ts.map +1 -1
  209. package/dist/src/init/executor.js +14 -11
  210. package/dist/src/init/executor.js.map +1 -1
  211. package/dist/src/init/shared-instructions-generator.d.ts.map +1 -1
  212. package/dist/src/init/shared-instructions-generator.js +20 -4
  213. package/dist/src/init/shared-instructions-generator.js.map +1 -1
  214. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  215. package/dist/src/init/statusline-generator.js +36 -15
  216. package/dist/src/init/statusline-generator.js.map +1 -1
  217. package/dist/src/mcp-tools/a2a-tools.d.ts.map +1 -1
  218. package/dist/src/mcp-tools/a2a-tools.js +98 -13
  219. package/dist/src/mcp-tools/a2a-tools.js.map +1 -1
  220. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  221. package/dist/src/mcp-tools/agent-tools.js +16 -3
  222. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
  224. package/dist/src/mcp-tools/analyze-tools.js +80 -17
  225. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  226. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  227. package/dist/src/mcp-tools/browser-tools.js +84 -22
  228. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  229. package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -1
  230. package/dist/src/mcp-tools/claims-tools.js +35 -7
  231. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  232. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  233. package/dist/src/mcp-tools/config-tools.js +82 -17
  234. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  235. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  236. package/dist/src/mcp-tools/coordination-tools.js +37 -4
  237. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  238. package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -1
  239. package/dist/src/mcp-tools/daa-tools.js +49 -7
  240. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  241. package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
  242. package/dist/src/mcp-tools/embeddings-tools.js +45 -18
  243. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  244. package/dist/src/mcp-tools/github-tools.d.ts.map +1 -1
  245. package/dist/src/mcp-tools/github-tools.js +75 -25
  246. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
  248. package/dist/src/mcp-tools/guidance-tools.js +32 -10
  249. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  250. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  251. package/dist/src/mcp-tools/hive-mind-tools.js +91 -20
  252. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  254. package/dist/src/mcp-tools/hooks-tools.js +188 -29
  255. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  256. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/memory-tools.js +25 -7
  258. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/monograph-compat.js +11 -2
  261. package/dist/src/mcp-tools/monograph-compat.js.map +1 -1
  262. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/monograph-tools.js +476 -62
  264. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  266. package/dist/src/mcp-tools/neural-tools.js +44 -9
  267. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  268. package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
  269. package/dist/src/mcp-tools/performance-tools.js +45 -10
  270. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  271. package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -1
  272. package/dist/src/mcp-tools/progress-tools.js +7 -4
  273. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  274. package/dist/src/mcp-tools/request-tracker.d.ts.map +1 -1
  275. package/dist/src/mcp-tools/request-tracker.js +15 -1
  276. package/dist/src/mcp-tools/request-tracker.js.map +1 -1
  277. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
  278. package/dist/src/mcp-tools/security-tools.js +61 -9
  279. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  280. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
  281. package/dist/src/mcp-tools/session-tools.js +45 -14
  282. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  283. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  284. package/dist/src/mcp-tools/swarm-tools.js +15 -3
  285. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  286. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  287. package/dist/src/mcp-tools/system-tools.js +14 -7
  288. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  289. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  290. package/dist/src/mcp-tools/task-tools.js +52 -10
  291. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  292. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
  293. package/dist/src/mcp-tools/terminal-tools.js +40 -6
  294. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  295. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
  296. package/dist/src/mcp-tools/transfer-tools.js +37 -4
  297. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  298. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  299. package/dist/src/mcp-tools/workflow-tools.js +29 -6
  300. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  301. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  302. package/dist/src/memory/ewc-consolidation.js +26 -10
  303. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  304. package/dist/src/memory/intelligence.d.ts.map +1 -1
  305. package/dist/src/memory/intelligence.js +80 -19
  306. package/dist/src/memory/intelligence.js.map +1 -1
  307. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  308. package/dist/src/memory/memory-bridge.js +21 -2
  309. package/dist/src/memory/memory-bridge.js.map +1 -1
  310. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  311. package/dist/src/memory/memory-initializer.js +67 -3
  312. package/dist/src/memory/memory-initializer.js.map +1 -1
  313. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  314. package/dist/src/memory/sona-optimizer.js +14 -4
  315. package/dist/src/memory/sona-optimizer.js.map +1 -1
  316. package/dist/src/monovector/command-outcomes.d.ts.map +1 -1
  317. package/dist/src/monovector/command-outcomes.js +43 -7
  318. package/dist/src/monovector/command-outcomes.js.map +1 -1
  319. package/dist/src/monovector/coverage-router.d.ts.map +1 -1
  320. package/dist/src/monovector/coverage-router.js +8 -4
  321. package/dist/src/monovector/coverage-router.js.map +1 -1
  322. package/dist/src/monovector/coverage-tools.d.ts.map +1 -1
  323. package/dist/src/monovector/coverage-tools.js +6 -3
  324. package/dist/src/monovector/coverage-tools.js.map +1 -1
  325. package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
  326. package/dist/src/monovector/diff-classifier.js +13 -0
  327. package/dist/src/monovector/diff-classifier.js.map +1 -1
  328. package/dist/src/monovector/route-outcomes.d.ts +2 -1
  329. package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
  330. package/dist/src/monovector/route-outcomes.js +46 -4
  331. package/dist/src/monovector/route-outcomes.js.map +1 -1
  332. package/dist/src/plugins/manager.d.ts.map +1 -1
  333. package/dist/src/plugins/manager.js +8 -3
  334. package/dist/src/plugins/manager.js.map +1 -1
  335. package/dist/src/plugins/store/discovery.d.ts.map +1 -1
  336. package/dist/src/plugins/store/discovery.js +46 -2
  337. package/dist/src/plugins/store/discovery.js.map +1 -1
  338. package/dist/src/plugins/store/search.d.ts.map +1 -1
  339. package/dist/src/plugins/store/search.js +5 -4
  340. package/dist/src/plugins/store/search.js.map +1 -1
  341. package/dist/src/production/circuit-breaker.d.ts.map +1 -1
  342. package/dist/src/production/circuit-breaker.js +17 -3
  343. package/dist/src/production/circuit-breaker.js.map +1 -1
  344. package/dist/src/production/error-handler.d.ts.map +1 -1
  345. package/dist/src/production/error-handler.js +3 -0
  346. package/dist/src/production/error-handler.js.map +1 -1
  347. package/dist/src/production/monitoring.d.ts.map +1 -1
  348. package/dist/src/production/monitoring.js +20 -3
  349. package/dist/src/production/monitoring.js.map +1 -1
  350. package/dist/src/production/rate-limiter.d.ts.map +1 -1
  351. package/dist/src/production/rate-limiter.js +13 -4
  352. package/dist/src/production/rate-limiter.js.map +1 -1
  353. package/dist/src/production/retry.d.ts.map +1 -1
  354. package/dist/src/production/retry.js +17 -9
  355. package/dist/src/production/retry.js.map +1 -1
  356. package/dist/src/routing/embed-worker.js +6 -2
  357. package/dist/src/routing/embed-worker.js.map +1 -1
  358. package/dist/src/routing/embedder.d.ts.map +1 -1
  359. package/dist/src/routing/embedder.js +0 -0
  360. package/dist/src/routing/embedder.js.map +1 -1
  361. package/dist/src/routing/llm-caller.d.ts.map +1 -1
  362. package/dist/src/routing/llm-caller.js +13 -2
  363. package/dist/src/routing/llm-caller.js.map +1 -1
  364. package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
  365. package/dist/src/routing/route-layer-factory.js +18 -3
  366. package/dist/src/routing/route-layer-factory.js.map +1 -1
  367. package/dist/src/services/claim-service.d.ts +1 -0
  368. package/dist/src/services/claim-service.d.ts.map +1 -1
  369. package/dist/src/services/claim-service.js +8 -0
  370. package/dist/src/services/claim-service.js.map +1 -1
  371. package/dist/src/services/config-file-manager.d.ts.map +1 -1
  372. package/dist/src/services/config-file-manager.js +14 -2
  373. package/dist/src/services/config-file-manager.js.map +1 -1
  374. package/dist/src/services/headless-worker-executor.d.ts.map +1 -1
  375. package/dist/src/services/headless-worker-executor.js +18 -2
  376. package/dist/src/services/headless-worker-executor.js.map +1 -1
  377. package/dist/src/services/worker-daemon.d.ts.map +1 -1
  378. package/dist/src/services/worker-daemon.js +348 -17
  379. package/dist/src/services/worker-daemon.js.map +1 -1
  380. package/dist/src/transfer/anonymization/index.d.ts +0 -3
  381. package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
  382. package/dist/src/transfer/anonymization/index.js +16 -1
  383. package/dist/src/transfer/anonymization/index.js.map +1 -1
  384. package/dist/src/transfer/export.d.ts.map +1 -1
  385. package/dist/src/transfer/export.js +8 -0
  386. package/dist/src/transfer/export.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -1
  388. package/dist/src/transfer/ipfs/upload.js +33 -3
  389. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  390. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +8 -2
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.d.ts.map +1 -1
  394. package/dist/src/transfer/storage/gcs.js +37 -3
  395. package/dist/src/transfer/storage/gcs.js.map +1 -1
  396. package/dist/src/transfer/store/discovery.d.ts.map +1 -1
  397. package/dist/src/transfer/store/discovery.js +45 -3
  398. package/dist/src/transfer/store/discovery.js.map +1 -1
  399. package/dist/src/transfer/store/download.d.ts.map +1 -1
  400. package/dist/src/transfer/store/download.js +5 -0
  401. package/dist/src/transfer/store/download.js.map +1 -1
  402. package/dist/src/transfer/store/publish.d.ts.map +1 -1
  403. package/dist/src/transfer/store/publish.js +13 -1
  404. package/dist/src/transfer/store/publish.js.map +1 -1
  405. package/dist/src/transfer/store/registry.d.ts +8 -0
  406. package/dist/src/transfer/store/registry.d.ts.map +1 -1
  407. package/dist/src/transfer/store/registry.js +30 -5
  408. package/dist/src/transfer/store/registry.js.map +1 -1
  409. package/dist/src/transfer/store/search.d.ts.map +1 -1
  410. package/dist/src/transfer/store/search.js +20 -5
  411. package/dist/src/transfer/store/search.js.map +1 -1
  412. package/dist/src/ui/collector.mjs +39 -5
  413. package/dist/src/ui/dashboard.html +1603 -1284
  414. package/dist/src/ui/orgs.html +722 -12
  415. package/dist/src/ui/server.mjs +717 -136
  416. package/dist/src/update/checker.d.ts.map +1 -1
  417. package/dist/src/update/checker.js +59 -7
  418. package/dist/src/update/checker.js.map +1 -1
  419. package/dist/src/update/executor.d.ts.map +1 -1
  420. package/dist/src/update/executor.js +50 -3
  421. package/dist/src/update/executor.js.map +1 -1
  422. package/dist/src/update/index.d.ts.map +1 -1
  423. package/dist/src/update/index.js +18 -1
  424. package/dist/src/update/index.js.map +1 -1
  425. package/dist/src/update/rate-limiter.d.ts +6 -0
  426. package/dist/src/update/rate-limiter.d.ts.map +1 -1
  427. package/dist/src/update/rate-limiter.js +79 -7
  428. package/dist/src/update/rate-limiter.js.map +1 -1
  429. package/dist/src/update/validator.d.ts.map +1 -1
  430. package/dist/src/update/validator.js +52 -1
  431. package/dist/src/update/validator.js.map +1 -1
  432. package/dist/tsconfig.tsbuildinfo +1 -1
  433. package/package.json +2 -3
  434. package/dist/src/ui/data/mastermind-events.jsonl +0 -59
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * metrics-db.mjs — Lightweight metrics aggregation helper.
4
+ * Reads .monomind/metrics/*.json files and produces summary output.
5
+ *
6
+ * Commands:
7
+ * sync — aggregate metrics files → JSON summary (default)
8
+ * status — print current metrics status as JSON
9
+ * export — export metrics to timestamped file
10
+ * (other) — print usage hint, exit 0
11
+ */
12
+
13
+ import path from 'path';
14
+ import fs from 'fs';
15
+ import { fileURLToPath } from 'url';
16
+
17
+ const CWD = process.env.CLAUDE_PROJECT_DIR || process.cwd();
18
+ const METRICS_DIR = path.join(CWD, '.monomind', 'metrics');
19
+
20
+ function safeRead(filePath) {
21
+ try {
22
+ if (!fs.existsSync(filePath)) return null;
23
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
24
+ } catch (_) {
25
+ return null;
26
+ }
27
+ }
28
+
29
+ function aggregate() {
30
+ const recentEdits = safeRead(path.join(METRICS_DIR, 'recent-edits.json'));
31
+ const toolCalls = safeRead(path.join(METRICS_DIR, 'tool-calls.json'));
32
+ const hookLatency = safeRead(path.join(METRICS_DIR, 'hook-latency.json'));
33
+ const tokenSummary = safeRead(path.join(METRICS_DIR, 'token-summary.json'));
34
+
35
+ return {
36
+ aggregatedAt: new Date().toISOString(),
37
+ recentEdits: recentEdits ? (recentEdits.edits || []).length : 0,
38
+ toolCalls: toolCalls ? Object.keys(toolCalls.calls || {}).length : 0,
39
+ hookLatency: hookLatency ? Object.keys(hookLatency).filter(k => k !== 'lastUpdated').length : 0,
40
+ tokenSummary: tokenSummary ? { todayCost: tokenSummary.todayCost, monthCost: tokenSummary.monthCost } : null,
41
+ };
42
+ }
43
+
44
+ function cmdSync() {
45
+ const summary = aggregate();
46
+ process.stdout.write(JSON.stringify(summary) + '\n');
47
+ process.exit(0);
48
+ }
49
+
50
+ function cmdStatus() {
51
+ const summary = aggregate();
52
+ process.stdout.write(JSON.stringify({ status: 'ok', metrics: summary }) + '\n');
53
+ process.exit(0);
54
+ }
55
+
56
+ function cmdExport() {
57
+ const summary = aggregate();
58
+ const ts = new Date().toISOString().replace(/[:.]/g, '-');
59
+ const exportPath = path.join(METRICS_DIR, `export-${ts}.json`);
60
+ try {
61
+ fs.mkdirSync(METRICS_DIR, { recursive: true });
62
+ fs.writeFileSync(exportPath, JSON.stringify(summary, null, 2));
63
+ process.stdout.write(`Exported metrics to ${exportPath}\n`);
64
+ } catch (e) {
65
+ process.stdout.write(`Exported metrics (in-memory only): ${JSON.stringify(summary)}\n`);
66
+ }
67
+ process.exit(0);
68
+ }
69
+
70
+ function cmdUsage(unknownCmd) {
71
+ process.stdout.write(
72
+ `Usage: metrics-db.mjs [sync|status|export]\n` +
73
+ (unknownCmd ? ` Unknown command: ${unknownCmd}\n` : '')
74
+ );
75
+ process.exit(0);
76
+ }
77
+
78
+ // ── main ──────────────────────────────────────────────────────────────────────
79
+
80
+ const cmd = process.argv[2] || 'sync';
81
+
82
+ switch (cmd) {
83
+ case 'sync': cmdSync(); break;
84
+ case 'status': cmdStatus(); break;
85
+ case 'export': cmdExport(); break;
86
+ default: cmdUsage(cmd); break;
87
+ }
@@ -2,59 +2,234 @@
2
2
  /**
3
3
  * Keyword-based task router for hook-handler.cjs
4
4
  * Returns: { agent, agentSlug, confidence, reason, semanticRouting, specificAgents, skillMatches, extrasMatches }
5
+ *
6
+ * Exports:
7
+ * routeTask(prompt) → routing result object
8
+ * routeTaskSemantic(prompt) → alias for routeTask
9
+ * matchSkills(prompt, topN) → array of { skill, invoke, score }
10
+ * matchExtras(prompt, topN) → array of { slug, name, category, score }
11
+ * buildCategoryList() → array of { name, count, examples }
12
+ * getAgentsInCategory(cat) → array of { slug, name }
13
+ * AGENT_CAPABILITIES → { [slug]: string[] }
14
+ * TASK_PATTERNS → { [agentSlug]: RegExp }
5
15
  */
6
16
 
7
- const KEYWORD_ROUTES = [
8
- { pattern: /\b(bug|fix|error|exception|crash|broken|fail|regression|null pointer|undefined)\b/i, agent: 'coder', confidence: 0.85 },
9
- { pattern: /\b(test|spec|coverage|vitest|jest|mocha|unit test|integration test|e2e)\b/i, agent: 'tester', confidence: 0.85 },
10
- { pattern: /\b(review|audit|code quality|lint|smell|refactor|clean up|cleanup)\b/i, agent: 'reviewer', confidence: 0.82 },
11
- { pattern: /\b(architect|design|system design|ADR|domain|bounded context|microservice|pattern)\b/i, agent: 'system-architect', confidence: 0.85 },
12
- { pattern: /\b(security|vulnerability|CVE|injection|XSS|CSRF|auth|permissions|OWASP)\b/i, agent: 'Security Engineer', confidence: 0.90 },
13
- { pattern: /\b(performance|optimiz|slow|bottleneck|profil|benchmark|latency|throughput)\b/i, agent: 'coder', confidence: 0.80 },
14
- { pattern: /\b(deploy|CI\/CD|pipeline|docker|kubernetes|infra|devops|helm|terraform)\b/i, agent: 'DevOps Automator', confidence: 0.85 },
15
- { pattern: /\b(document|readme|docs|api reference|jsdoc|write up)\b/i, agent: 'Technical Writer', confidence: 0.82 },
16
- { pattern: /\b(feature|implement|add|build|create|develop|new)\b/i, agent: 'coder', confidence: 0.75 },
17
- { pattern: /\b(research|investigate|explore|analyze|survey|compare)\b/i, agent: 'researcher', confidence: 0.78 },
18
- { pattern: /\b(plan|roadmap|strategy|prioritize|breakdown|estimate)\b/i, agent: 'planner', confidence: 0.80 },
19
- { pattern: /\b(memory|vector|embedding|HNSW|sqlite|database|query)\b/i, agent: 'coder', confidence: 0.82 },
20
- { pattern: /\b(hook|swarm|agent|mcp|cli|routing|monomind)\b/i, agent: 'coder', confidence: 0.80 },
21
- { pattern: /\b(mobile|ios|android|react native|flutter)\b/i, agent: 'mobile-dev', confidence: 0.88 },
22
- { pattern: /\b(ml|machine learning|AI|model|training|inference|neural)\b/i, agent: 'AI Engineer', confidence: 0.85 },
23
- { pattern: /\b(api|rest|graphql|endpoint|http|websocket|grpc)\b/i, agent: 'backend-dev', confidence: 0.80 },
24
- { pattern: /\b(ui|frontend|react|vue|component|css|layout|design)\b/i, agent: 'Frontend Developer', confidence: 0.80 },
17
+ // ── Dev patterns (slug-correct) ─────────────────────────────────────────────
18
+ // TASK_PATTERNS: { keywords: agentSlug } exported for introspection
19
+ // Values are agent slugs; keys describe what keywords trigger that agent.
20
+
21
+ var TASK_PATTERNS = {
22
+ 'test|spec|coverage|vitest|jest|mocha|e2e': 'tester',
23
+ 'review|audit|code quality|lint|refactor|cleanup': 'reviewer',
24
+ 'architect|system design|ADR|bounded context|architecture': 'architect',
25
+ 'security|vulnerability|CVE|injection|XSS|CSRF|OWASP': 'security-engineer',
26
+ 'deploy|CI/CD|docker|kubernetes|infra|devops|helm|terraform': 'devops',
27
+ 'document|readme|docs|api reference|jsdoc': 'technical-writer',
28
+ 'research|investigate|explore|analyze|survey|compare': 'researcher',
29
+ 'plan|roadmap|prioritize|breakdown|estimate': 'planner',
30
+ 'mobile|ios|android|react native|flutter': 'mobile-dev',
31
+ 'ml|machine learning|neural network|model training': 'ai-engineer',
32
+ 'api|rest|graphql|endpoint|http|websocket|grpc|optimize': 'backend-dev',
33
+ 'ui|frontend|react|vue|component|css|layout|style': 'frontend-dev',
34
+ 'bug|fix|error|feature|implement|build|create|develop': 'coder',
35
+ };
36
+
37
+ // Internal routing patterns (regex per slug for routeTask)
38
+ var _ROUTING_PATTERNS = {
39
+ 'tester': /\b(test|tests|spec|coverage|vitest|jest|mocha|e2e)\b/i,
40
+ 'reviewer': /\b(review|audit|code quality|lint|smell|refactor|clean up|cleanup)\b/i,
41
+ 'architect': /\b(architect|system design|ADR|domain|bounded context|microservice|architecture)\b/i,
42
+ 'security-engineer': /\b(security|vulnerability|CVE|injection|XSS|CSRF|OWASP)\b/i,
43
+ 'devops': /\b(deploy|CI\/CD|docker|kubernetes|infra|devops|helm|terraform)\b/i,
44
+ 'technical-writer': /\b(document|readme|docs|api reference|jsdoc|write up)\b/i,
45
+ 'researcher': /\b(research|investigate|explore|analyze|survey|compare)\b/i,
46
+ 'planner': /\b(plan|roadmap|prioritize|breakdown|estimate)\b/i,
47
+ 'mobile-dev': /\b(mobile|ios|android|react native|flutter)\b/i,
48
+ 'ai-engineer': /\b(ml|machine learning|neural network|model training|inference)\b/i,
49
+ 'backend-dev': /\b(api|rest|graphql|endpoint|http|websocket|grpc|optimize)\b/i,
50
+ 'frontend-dev': /\b(ui|frontend|react|vue|component|css|layout|style)\b/i,
51
+ 'coder': /\b(bug|fix|error|exception|crash|broken|fail|regression|feature|implement|add|build|create|develop|new|memory|vector|embedding|hook|swarm|agent|mcp|cli|routing|monomind)\b/i,
52
+ };
53
+
54
+ var TASK_CONFIDENCES = {
55
+ 'tester': 0.85,
56
+ 'reviewer': 0.82,
57
+ 'architect': 0.85,
58
+ 'security-engineer': 0.90,
59
+ 'devops': 0.85,
60
+ 'technical-writer': 0.82,
61
+ 'researcher': 0.78,
62
+ 'planner': 0.80,
63
+ 'mobile-dev': 0.88,
64
+ 'ai-engineer': 0.85,
65
+ 'backend-dev': 0.80,
66
+ 'frontend-dev': 0.80,
67
+ 'coder': 0.80,
68
+ };
69
+
70
+ var TASK_AGENTS = {
71
+ 'tester': 'Tester',
72
+ 'reviewer': 'Reviewer',
73
+ 'architect': 'Architect',
74
+ 'security-engineer': 'Security Engineer',
75
+ 'devops': 'DevOps',
76
+ 'technical-writer': 'Technical Writer',
77
+ 'researcher': 'Researcher',
78
+ 'planner': 'Planner',
79
+ 'mobile-dev': 'Mobile Developer',
80
+ 'ai-engineer': 'AI Engineer',
81
+ 'backend-dev': 'Backend Developer',
82
+ 'frontend-dev': 'Frontend Developer',
83
+ 'coder': 'Coder',
84
+ };
85
+
86
+ // Priority order: higher-priority slugs checked first
87
+ var DEV_PRIORITY = [
88
+ 'tester', 'reviewer', 'architect', 'security-engineer', 'devops',
89
+ 'mobile-dev', 'ai-engineer', 'frontend-dev', 'backend-dev',
90
+ 'researcher', 'planner', 'technical-writer', 'coder',
25
91
  ];
26
92
 
27
- const DEFAULT_RESULT = {
28
- agent: 'coder',
29
- agentSlug: 'coder',
30
- confidence: 0.60,
31
- reason: 'Default routing no strong keyword match',
32
- semanticRouting: false,
33
- specificAgents: [],
34
- skillMatches: [],
35
- extrasMatches: [],
93
+ // ── AGENT_CAPABILITIES ────────────────────────────────────────────────────────
94
+
95
+ var AGENT_CAPABILITIES = {
96
+ 'coder': ['implement', 'fix', 'build', 'develop', 'create'],
97
+ 'tester': ['test', 'spec', 'coverage', 'vitest', 'jest', 'e2e'],
98
+ 'reviewer': ['review', 'audit', 'refactor', 'code quality', 'lint'],
99
+ 'researcher': ['research', 'investigate', 'analyze', 'survey', 'compare'],
100
+ 'architect': ['design', 'architecture', 'ADR', 'domain', 'microservice'],
101
+ 'planner': ['plan', 'roadmap', 'strategy', 'prioritize', 'estimate'],
102
+ 'security-engineer': ['security', 'vulnerability', 'CVE', 'XSS', 'CSRF'],
103
+ 'backend-dev': ['api', 'rest', 'graphql', 'endpoint', 'http', 'grpc'],
104
+ 'frontend-dev': ['ui', 'frontend', 'react', 'css', 'component', 'layout'],
105
+ 'devops': ['deploy', 'docker', 'kubernetes', 'CI/CD', 'terraform'],
106
+ 'mobile-dev': ['mobile', 'ios', 'android', 'react native', 'flutter'],
107
+ 'ai-engineer': ['ml', 'machine learning', 'model', 'neural', 'inference'],
108
+ 'technical-writer': ['docs', 'readme', 'document', 'jsdoc', 'api reference'],
36
109
  };
37
110
 
111
+ // ── Non-dev domain agent registry ─────────────────────────────────────────────
112
+
113
+ var DOMAIN_AGENTS = [
114
+ // Marketing
115
+ { slug: 'content-strategist', name: 'Content Strategist', category: 'marketing',
116
+ keywords: /\b(content|brand|blogging|copywriting|content strategy)\b/i },
117
+ { slug: 'seo-specialist', name: 'SEO Specialist', category: 'marketing',
118
+ keywords: /\b(seo|search engine|keyword research|backlink|organic traffic)\b/i },
119
+ { slug: 'social-media-manager', name: 'Social Media Manager', category: 'marketing',
120
+ keywords: /\b(social media|instagram|tiktok|twitter|linkedin|facebook|campaign)\b/i },
121
+ { slug: 'marketing-analyst', name: 'Marketing Analyst', category: 'marketing',
122
+ keywords: /\b(marketing|advertising|analytics|conversion|funnel|cpm|cpa)\b/i },
123
+
124
+ // Sales
125
+ { slug: 'sales-strategist', name: 'Sales Strategist', category: 'sales',
126
+ keywords: /\b(sales|crm|lead generation|prospect|quota|sales revenue)\b/i },
127
+ { slug: 'account-manager', name: 'Account Manager', category: 'sales',
128
+ keywords: /\b(account management|client relationship|upsell|renewal|b2b)\b/i },
129
+
130
+ // Academic
131
+ { slug: 'academic-researcher', name: 'Academic Researcher', category: 'academic',
132
+ keywords: /\b(anthropolog|ethnograph|kinship|cultural ritual|qualitative study|thesis|dissertation|peer review|academic)\b/i },
133
+ { slug: 'data-scientist', name: 'Data Scientist', category: 'academic',
134
+ keywords: /\b(statistical analysis|regression|hypothesis|p-value|dataset|R studio)\b/i },
135
+
136
+ // Game development
137
+ { slug: 'game-developer', name: 'Game Developer', category: 'game-development',
138
+ keywords: /\b(unity|unreal|godot|game engine|shader|sprite|tilemap|game jam)\b/i },
139
+ { slug: 'game-designer', name: 'Game Designer', category: 'game-development',
140
+ keywords: /\b(game design|game mechanic|level design|player experience|narrative design)\b/i },
141
+
142
+ // Legal / Finance
143
+ { slug: 'legal-advisor', name: 'Legal Advisor', category: 'legal',
144
+ keywords: /\b(legal|contract|compliance|regulation|gdpr|liability|intellectual property)\b/i },
145
+ { slug: 'financial-analyst', name: 'Financial Analyst', category: 'finance',
146
+ keywords: /\b(finance|investment|portfolio|valuation|balance sheet|ROI|P&L)\b/i },
147
+
148
+ // HR / Operations
149
+ { slug: 'hr-specialist', name: 'HR Specialist', category: 'hr',
150
+ keywords: /\b(hiring|recruitment|onboarding|performance review|employee|hr|human resources)\b/i },
151
+ ];
152
+
153
+ // Categories that are opt-in (only returned when keywords match)
154
+ var OPT_IN_CATEGORIES = new Set(['academic', 'game-development', 'legal', 'finance', 'hr']);
155
+
156
+ // Marketing is also opt-in — keywords must match
157
+ var MARKETING_OPTIN = /\b(marketing|seo|social media|advertising|campaign|content strategy|tiktok|instagram|brand)\b/i;
158
+
159
+ // ── Skills registry ────────────────────────────────────────────────────────────
160
+
161
+ var SKILLS = [
162
+ { skill: 'mastermind', invoke: '/mastermind', description: 'Select swarm topology', keywords: /\b(swarm|topology|hive|mastermind|multi.agent)\b/i },
163
+ { skill: 'monodesign', invoke: '/monodesign', description: 'Frontend design and UI', keywords: /\b(design|ui|ux|component|visual|layout|css|theme)\b/i },
164
+ { skill: 'monomotion', invoke: '/monomotion', description: 'Web animations and motion', keywords: /\b(animate|animation|motion|gsap|transition|scroll)\b/i },
165
+ { skill: 'graphify', invoke: '/graphify', description: 'Input to knowledge graph', keywords: /\b(graph|knowledge|monograph|node|edge|visualize)\b/i },
166
+ ];
167
+
168
+ // ── Utilities ─────────────────────────────────────────────────────────────────
169
+
170
+ var MAX_PROMPT = 2000;
171
+
172
+ // ── routeTask ─────────────────────────────────────────────────────────────────
173
+
38
174
  function routeTask(prompt) {
39
- if (!prompt || typeof prompt !== 'string') return DEFAULT_RESULT;
40
-
41
- var best = null;
42
- for (var i = 0; i < KEYWORD_ROUTES.length; i++) {
43
- var rule = KEYWORD_ROUTES[i];
44
- if (rule.pattern.test(prompt)) {
45
- if (!best || rule.confidence > best.confidence) {
46
- best = rule;
47
- }
48
- }
175
+ // Empty / null confidence 0
176
+ if (!prompt || typeof prompt !== 'string' || prompt.trim() === '') {
177
+ return {
178
+ agent: 'coder',
179
+ agentSlug: 'coder',
180
+ confidence: 0,
181
+ reason: 'Default routing empty input',
182
+ semanticRouting: false,
183
+ specificAgents: [],
184
+ skillMatches: [],
185
+ extrasMatches: [],
186
+ };
187
+ }
188
+
189
+ var safePrompt = prompt.slice(0, MAX_PROMPT);
190
+
191
+ // Check non-dev domain agents first (only if opt-in keywords match)
192
+ var extras = matchExtras(safePrompt);
193
+ if (extras.length > 0) {
194
+ var topExtra = extras[0];
195
+ return {
196
+ agent: topExtra.name,
197
+ agentSlug: topExtra.slug,
198
+ confidence: 0.80,
199
+ reason: 'Domain: ' + topExtra.category,
200
+ semanticRouting: false,
201
+ specificAgents: extras,
202
+ skillMatches: [],
203
+ extrasMatches: extras,
204
+ };
49
205
  }
50
206
 
51
- if (!best) return DEFAULT_RESULT;
207
+ // Check dev patterns in priority order
208
+ for (var i = 0; i < DEV_PRIORITY.length; i++) {
209
+ var slug = DEV_PRIORITY[i];
210
+ var pattern = _ROUTING_PATTERNS[slug];
211
+ if (pattern && pattern.test(safePrompt)) {
212
+ var confidence = TASK_CONFIDENCES[slug] || 0.75;
213
+ var skills = matchSkills(safePrompt);
214
+ return {
215
+ agent: TASK_AGENTS[slug],
216
+ agentSlug: slug,
217
+ confidence: confidence,
218
+ reason: ('Keyword match: ' + slug).slice(0, 80),
219
+ semanticRouting: false,
220
+ specificAgents: [{ slug: slug, name: TASK_AGENTS[slug], confidence: confidence }],
221
+ skillMatches: skills,
222
+ extrasMatches: [],
223
+ };
224
+ }
225
+ }
52
226
 
227
+ // No match → default
53
228
  return {
54
- agent: best.agent,
55
- agentSlug: best.agent.toLowerCase().replace(/\s+/g, '-'),
56
- confidence: best.confidence,
57
- reason: 'Keyword match: ' + best.pattern.toString().slice(1, 40),
229
+ agent: 'coder',
230
+ agentSlug: 'coder',
231
+ confidence: 0.5,
232
+ reason: 'Default routing no strong keyword match',
58
233
  semanticRouting: false,
59
234
  specificAgents: [],
60
235
  skillMatches: [],
@@ -62,7 +237,90 @@ function routeTask(prompt) {
62
237
  };
63
238
  }
64
239
 
240
+ // ── matchSkills ────────────────────────────────────────────────────────────────
241
+
242
+ function matchSkills(prompt, topN) {
243
+ if (!prompt || typeof prompt !== 'string') return [];
244
+ topN = topN || 5;
245
+ var safePrompt = prompt.slice(0, MAX_PROMPT);
246
+
247
+ var scored = [];
248
+ for (var i = 0; i < SKILLS.length; i++) {
249
+ var s = SKILLS[i];
250
+ if (s.keywords.test(safePrompt)) {
251
+ scored.push({ skill: s.skill, invoke: s.invoke, description: s.description, score: 1.0 });
252
+ }
253
+ }
254
+
255
+ scored.sort(function(a, b) { return b.score - a.score; });
256
+ return scored.slice(0, topN);
257
+ }
258
+
259
+ // ── matchExtras ────────────────────────────────────────────────────────────────
260
+
261
+ function matchExtras(prompt, topN) {
262
+ if (!prompt || typeof prompt !== 'string') return [];
263
+ topN = topN || 8;
264
+ var safePrompt = prompt.slice(0, MAX_PROMPT);
265
+
266
+ var scored = [];
267
+ for (var i = 0; i < DOMAIN_AGENTS.length; i++) {
268
+ var a = DOMAIN_AGENTS[i];
269
+ if (!a.keywords.test(safePrompt)) continue;
270
+
271
+ // Opt-in categories: only include if keywords explicitly match
272
+ if (OPT_IN_CATEGORIES.has(a.category)) {
273
+ scored.push({ slug: a.slug, name: a.name, category: a.category, score: 1.0 });
274
+ continue;
275
+ }
276
+
277
+ // Marketing is opt-in too
278
+ if (a.category === 'marketing') {
279
+ if (MARKETING_OPTIN.test(safePrompt)) {
280
+ scored.push({ slug: a.slug, name: a.name, category: a.category, score: 1.0 });
281
+ }
282
+ continue;
283
+ }
284
+
285
+ // Sales: only include when sales keywords match
286
+ scored.push({ slug: a.slug, name: a.name, category: a.category, score: 1.0 });
287
+ }
288
+
289
+ scored.sort(function(a, b) { return b.score - a.score; });
290
+ return scored.slice(0, topN);
291
+ }
292
+
293
+ // ── buildCategoryList ─────────────────────────────────────────────────────────
294
+
295
+ function buildCategoryList() {
296
+ var catMap = {};
297
+ for (var i = 0; i < DOMAIN_AGENTS.length; i++) {
298
+ var a = DOMAIN_AGENTS[i];
299
+ if (!catMap[a.category]) catMap[a.category] = { name: a.category, count: 0, examples: [] };
300
+ catMap[a.category].count++;
301
+ if (catMap[a.category].examples.length < 3) catMap[a.category].examples.push(a.slug);
302
+ }
303
+ return Object.values(catMap);
304
+ }
305
+
306
+ // ── getAgentsInCategory ────────────────────────────────────────────────────────
307
+
308
+ function getAgentsInCategory(category) {
309
+ if (!category || typeof category !== 'string') return [];
310
+ return DOMAIN_AGENTS
311
+ .filter(function(a) { return a.category === category; })
312
+ .map(function(a) { return { slug: a.slug, name: a.name }; });
313
+ }
314
+
315
+ // ── exports ────────────────────────────────────────────────────────────────────
316
+
65
317
  module.exports = {
66
318
  routeTask: routeTask,
67
319
  routeTaskSemantic: routeTask,
320
+ matchSkills: matchSkills,
321
+ matchExtras: matchExtras,
322
+ buildCategoryList: buildCategoryList,
323
+ getAgentsInCategory: getAgentsInCategory,
324
+ AGENT_CAPABILITIES: AGENT_CAPABILITIES,
325
+ TASK_PATTERNS: TASK_PATTERNS,
68
326
  };
@@ -1,63 +1,122 @@
1
1
  'use strict';
2
2
  /**
3
3
  * Session state management for hook-handler.cjs
4
- * Persists session data to .monomind/session-state.json
4
+ * Persists session data to .monomind/sessions/current.json
5
+ *
6
+ * API: start(), restore(), end(), status(), metric(key), update(patch)
5
7
  */
6
8
 
7
9
  const path = require('path');
8
10
  const fs = require('fs');
9
11
 
10
12
  const CWD = process.env.CLAUDE_PROJECT_DIR || process.cwd();
11
- const SESSION_FILE = path.join(CWD, '.monomind', 'session-state.json');
13
+ const SESSIONS_DIR = path.join(CWD, '.monomind', 'sessions');
14
+ const CURRENT_FILE = path.join(SESSIONS_DIR, 'current.json');
15
+
16
+ var KNOWN_METRICS = new Set(['edits', 'commands', 'tasks', 'errors']);
12
17
 
13
18
  function ensureDir() {
14
- try { fs.mkdirSync(path.dirname(SESSION_FILE), { recursive: true }); } catch (_) {}
19
+ try { fs.mkdirSync(SESSIONS_DIR, { recursive: true }); } catch (_) {}
15
20
  }
16
21
 
17
- function restore() {
22
+ function readCurrent() {
18
23
  try {
19
- if (!fs.existsSync(SESSION_FILE)) return null;
20
- var raw = fs.readFileSync(SESSION_FILE, 'utf-8');
24
+ if (!fs.existsSync(CURRENT_FILE)) return null;
25
+ var st = fs.statSync(CURRENT_FILE);
26
+ if (st.size > 1 * 1024 * 1024) return null;
27
+ var raw = fs.readFileSync(CURRENT_FILE, 'utf-8');
21
28
  var data = JSON.parse(raw);
22
- if (!data || !data.sessionId) return null;
23
- console.log('[OK] Session restored: ' + data.sessionId);
29
+ if (!data || !data.id) return null;
24
30
  return data;
25
31
  } catch (_) {
26
32
  return null;
27
33
  }
28
34
  }
29
35
 
30
- function start() {
36
+ function writeCurrent(data) {
31
37
  ensureDir();
32
- var sessionId = 'session-' + Date.now();
33
- var data = { sessionId: sessionId, startedAt: new Date().toISOString(), editCount: 0, taskCount: 0 };
34
38
  try {
35
- fs.writeFileSync(SESSION_FILE, JSON.stringify(data, null, 2), 'utf-8');
36
- console.log('[OK] Session started: ' + sessionId);
39
+ fs.writeFileSync(CURRENT_FILE, JSON.stringify(data, null, 2), 'utf-8');
37
40
  } catch (_) {}
38
- return data;
39
41
  }
40
42
 
41
- function update(patch) {
42
- ensureDir();
43
- try {
44
- var existing = restore() || start();
45
- var merged = Object.assign({}, existing, patch, { updatedAt: new Date().toISOString() });
46
- fs.writeFileSync(SESSION_FILE, JSON.stringify(merged, null, 2), 'utf-8');
47
- return merged;
48
- } catch (_) {
49
- return null;
50
- }
43
+ // ── start ──────────────────────────────────────────────────────────────────────
44
+
45
+ function start() {
46
+ var sessionId = 'session-' + Date.now();
47
+ var sess = {
48
+ id: sessionId,
49
+ startedAt: new Date().toISOString(),
50
+ context: {},
51
+ metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 },
52
+ };
53
+ writeCurrent(sess);
54
+ return sess;
55
+ }
56
+
57
+ // ── restore ────────────────────────────────────────────────────────────────────
58
+
59
+ function restore() {
60
+ var data = readCurrent();
61
+ if (!data) return null;
62
+ data.restoredAt = new Date().toISOString();
63
+ writeCurrent(data);
64
+ return data;
51
65
  }
52
66
 
67
+ // ── end ────────────────────────────────────────────────────────────────────────
68
+
53
69
  function end() {
70
+ var data = readCurrent();
71
+ if (!data) return null;
72
+
73
+ var startTs = new Date(data.startedAt).getTime();
74
+ var endTs = Date.now();
75
+ var duration = endTs - startTs;
76
+
77
+ var archived = Object.assign({}, data, {
78
+ endedAt: new Date(endTs).toISOString(),
79
+ duration: duration,
80
+ });
81
+
82
+ // Archive to <session-id>.json
54
83
  try {
55
- var data = restore();
56
- if (data) {
57
- update({ endedAt: new Date().toISOString() });
58
- console.log('[OK] Session ended: ' + data.sessionId);
59
- }
84
+ var archivePath = path.join(SESSIONS_DIR, data.id + '.json');
85
+ fs.writeFileSync(archivePath, JSON.stringify(archived, null, 2), 'utf-8');
60
86
  } catch (_) {}
87
+
88
+ // Remove current.json
89
+ try { fs.unlinkSync(CURRENT_FILE); } catch (_) {}
90
+
91
+ return archived;
92
+ }
93
+
94
+ // ── status ─────────────────────────────────────────────────────────────────────
95
+
96
+ function status() {
97
+ return readCurrent();
98
+ }
99
+
100
+ // ── metric ─────────────────────────────────────────────────────────────────────
101
+
102
+ function metric(key) {
103
+ var data = readCurrent();
104
+ if (!data) return null;
105
+ if (!KNOWN_METRICS.has(key)) return data;
106
+
107
+ data.metrics[key] = (data.metrics[key] || 0) + 1;
108
+ writeCurrent(data);
109
+ return data;
110
+ }
111
+
112
+ // ── update ─────────────────────────────────────────────────────────────────────
113
+
114
+ function update(patch) {
115
+ var existing = readCurrent();
116
+ if (!existing) return null;
117
+ var merged = Object.assign({}, existing, patch, { updatedAt: new Date().toISOString() });
118
+ writeCurrent(merged);
119
+ return merged;
61
120
  }
62
121
 
63
- module.exports = { restore, start, update, end };
122
+ module.exports = { start, restore, end, status, metric, update };