@monoes/monomindcli 1.14.7 → 1.15.1

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 (329) hide show
  1. package/.claude/agents/reengineer-squad/boss.md +113 -0
  2. package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
  3. package/.claude/agents/reengineer-squad/git-manager.md +145 -0
  4. package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
  5. package/.claude/agents/reengineer-squad/implementer.md +112 -0
  6. package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
  7. package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
  8. package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
  9. package/.claude/agents/reengineer-squad/tester.md +105 -0
  10. package/.claude/commands/mastermind/master.md +35 -14
  11. package/.claude/helpers/handlers/capture-handler.cjs +155 -18
  12. package/.claude/helpers/monolean-activate.cjs +20 -0
  13. package/.claude/helpers/monolean-config.cjs +76 -0
  14. package/.claude/helpers/monolean-instructions.cjs +109 -0
  15. package/.claude/helpers/monolean-propagate.cjs +9 -0
  16. package/.claude/helpers/monolean-tracker.cjs +18 -0
  17. package/.claude/helpers/skill-registry.json +2 -2
  18. package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
  19. package/.claude/skills/mastermind/runorg.md +69 -23
  20. package/.claude/skills/monodesign/SKILL.md +32 -1
  21. package/.claude/skills/monodesign/adapt.md +53 -0
  22. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
  23. package/.claude/skills/monodesign/animate.md +65 -0
  24. package/.claude/skills/monodesign/audit.md +89 -0
  25. package/.claude/skills/monodesign/bolder.md +50 -0
  26. package/.claude/skills/monodesign/clarify.md +64 -0
  27. package/.claude/skills/monodesign/colorize.md +68 -0
  28. package/.claude/skills/monodesign/craft.md +51 -0
  29. package/.claude/skills/monodesign/critique.md +66 -0
  30. package/.claude/skills/monodesign/delight.md +47 -0
  31. package/.claude/skills/monodesign/distill.md +56 -0
  32. package/.claude/skills/monodesign/document.md +80 -0
  33. package/.claude/skills/monodesign/extract.md +74 -0
  34. package/.claude/skills/monodesign/harden.md +65 -0
  35. package/.claude/skills/monodesign/live.md +59 -0
  36. package/.claude/skills/monodesign/onboard.md +50 -0
  37. package/.claude/skills/monodesign/optimize.md +64 -0
  38. package/.claude/skills/monodesign/overdrive.md +56 -0
  39. package/.claude/skills/monodesign/polish.md +68 -0
  40. package/.claude/skills/monodesign/quieter.md +57 -0
  41. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
  42. package/.claude/skills/monodesign/reference/codex.md +107 -0
  43. package/.claude/skills/monodesign/reference/craft.md +3 -0
  44. package/.claude/skills/monodesign/reference/hooks.md +99 -0
  45. package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
  46. package/.claude/skills/monodesign/shape.md +71 -0
  47. package/.claude/skills/monodesign/teach.md +69 -0
  48. package/.claude/skills/monodesign/typeset.md +59 -0
  49. package/.claude/skills/monolean/SKILL.md +118 -0
  50. package/.claude/skills/monolean-audit/SKILL.md +41 -0
  51. package/.claude/skills/monolean-debt/SKILL.md +46 -0
  52. package/.claude/skills/monolean-help/SKILL.md +60 -0
  53. package/.claude/skills/monolean-review/SKILL.md +57 -0
  54. package/bin/cli.js +3 -1
  55. package/dist/dashboard/server.js +137 -0
  56. package/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
  57. package/dist/src/__tests__/browse-adapters.test.d.ts.map +1 -0
  58. package/dist/src/__tests__/browse-adapters.test.js +51 -0
  59. package/dist/src/__tests__/browse-adapters.test.js.map +1 -0
  60. package/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
  61. package/dist/src/__tests__/browse-analyzer.test.d.ts.map +1 -0
  62. package/dist/src/__tests__/browse-analyzer.test.js +68 -0
  63. package/dist/src/__tests__/browse-analyzer.test.js.map +1 -0
  64. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
  65. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts.map +1 -0
  66. package/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
  67. package/dist/src/__tests__/browse-builtin-handlers.test.js.map +1 -0
  68. package/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
  69. package/dist/src/__tests__/browse-cdp.test.d.ts.map +1 -0
  70. package/dist/src/__tests__/browse-cdp.test.js +169 -0
  71. package/dist/src/__tests__/browse-cdp.test.js.map +1 -0
  72. package/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
  73. package/dist/src/__tests__/browse-dashboard.test.d.ts.map +1 -0
  74. package/dist/src/__tests__/browse-dashboard.test.js +179 -0
  75. package/dist/src/__tests__/browse-dashboard.test.js.map +1 -0
  76. package/dist/src/__tests__/browse-engine.test.d.ts +2 -0
  77. package/dist/src/__tests__/browse-engine.test.d.ts.map +1 -0
  78. package/dist/src/__tests__/browse-engine.test.js +122 -0
  79. package/dist/src/__tests__/browse-engine.test.js.map +1 -0
  80. package/dist/src/__tests__/browse-expression.test.d.ts +2 -0
  81. package/dist/src/__tests__/browse-expression.test.d.ts.map +1 -0
  82. package/dist/src/__tests__/browse-expression.test.js +54 -0
  83. package/dist/src/__tests__/browse-expression.test.js.map +1 -0
  84. package/dist/src/__tests__/browse-store.test.d.ts +2 -0
  85. package/dist/src/__tests__/browse-store.test.d.ts.map +1 -0
  86. package/dist/src/__tests__/browse-store.test.js +99 -0
  87. package/dist/src/__tests__/browse-store.test.js.map +1 -0
  88. package/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
  89. package/dist/src/__tests__/browse-workflow-types.test.d.ts.map +1 -0
  90. package/dist/src/__tests__/browse-workflow-types.test.js +33 -0
  91. package/dist/src/__tests__/browse-workflow-types.test.js.map +1 -0
  92. package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  93. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
  94. package/dist/src/browser/action-builder/analyzer.js +71 -0
  95. package/dist/src/browser/action-builder/analyzer.js.map +1 -0
  96. package/dist/src/browser/action-builder/types.d.ts +47 -0
  97. package/dist/src/browser/action-builder/types.d.ts.map +1 -0
  98. package/dist/src/browser/action-builder/types.js +2 -0
  99. package/dist/src/browser/action-builder/types.js.map +1 -0
  100. package/dist/src/browser/adapters/gemini.d.ts +3 -0
  101. package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
  102. package/dist/src/browser/adapters/gemini.js +16 -0
  103. package/dist/src/browser/adapters/gemini.js.map +1 -0
  104. package/dist/src/browser/adapters/google.d.ts +3 -0
  105. package/dist/src/browser/adapters/google.d.ts.map +1 -0
  106. package/dist/src/browser/adapters/google.js +17 -0
  107. package/dist/src/browser/adapters/google.js.map +1 -0
  108. package/dist/src/browser/adapters/index.d.ts +19 -0
  109. package/dist/src/browser/adapters/index.d.ts.map +1 -0
  110. package/dist/src/browser/adapters/index.js +23 -0
  111. package/dist/src/browser/adapters/index.js.map +1 -0
  112. package/dist/src/browser/adapters/instagram.d.ts +3 -0
  113. package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
  114. package/dist/src/browser/adapters/instagram.js +17 -0
  115. package/dist/src/browser/adapters/instagram.js.map +1 -0
  116. package/dist/src/browser/adapters/linkedin.d.ts +3 -0
  117. package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
  118. package/dist/src/browser/adapters/linkedin.js +19 -0
  119. package/dist/src/browser/adapters/linkedin.js.map +1 -0
  120. package/dist/src/browser/adapters/microsoft.d.ts +3 -0
  121. package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
  122. package/dist/src/browser/adapters/microsoft.js +16 -0
  123. package/dist/src/browser/adapters/microsoft.js.map +1 -0
  124. package/dist/src/browser/adapters/x.d.ts +3 -0
  125. package/dist/src/browser/adapters/x.d.ts.map +1 -0
  126. package/dist/src/browser/adapters/x.js +19 -0
  127. package/dist/src/browser/adapters/x.js.map +1 -0
  128. package/dist/src/browser/dashboard/api-types.d.ts +50 -0
  129. package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
  130. package/dist/src/browser/dashboard/api-types.js +14 -0
  131. package/dist/src/browser/dashboard/api-types.js.map +1 -0
  132. package/dist/src/browser/dashboard/server.d.ts +9 -0
  133. package/dist/src/browser/dashboard/server.d.ts.map +1 -0
  134. package/dist/src/browser/dashboard/server.js +62 -0
  135. package/dist/src/browser/dashboard/server.js.map +1 -0
  136. package/dist/src/browser/dashboard/ui.html +1811 -0
  137. package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  138. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
  139. package/dist/src/browser/workflow/builtin-handlers.js +343 -0
  140. package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
  141. package/dist/src/browser/workflow/engine.d.ts +15 -0
  142. package/dist/src/browser/workflow/engine.d.ts.map +1 -0
  143. package/dist/src/browser/workflow/engine.js +127 -0
  144. package/dist/src/browser/workflow/engine.js.map +1 -0
  145. package/dist/src/browser/workflow/expression.d.ts +4 -0
  146. package/dist/src/browser/workflow/expression.d.ts.map +1 -0
  147. package/dist/src/browser/workflow/expression.js +64 -0
  148. package/dist/src/browser/workflow/expression.js.map +1 -0
  149. package/dist/src/browser/workflow/store.d.ts +24 -0
  150. package/dist/src/browser/workflow/store.d.ts.map +1 -0
  151. package/dist/src/browser/workflow/store.js +145 -0
  152. package/dist/src/browser/workflow/store.js.map +1 -0
  153. package/dist/src/browser/workflow/types.d.ts +48 -0
  154. package/dist/src/browser/workflow/types.d.ts.map +1 -0
  155. package/dist/src/browser/workflow/types.js +2 -0
  156. package/dist/src/browser/workflow/types.js.map +1 -0
  157. package/dist/src/commands/browse-action.d.ts +4 -0
  158. package/dist/src/commands/browse-action.d.ts.map +1 -0
  159. package/dist/src/commands/browse-action.js +151 -0
  160. package/dist/src/commands/browse-action.js.map +1 -0
  161. package/dist/src/commands/browse-platform.d.ts +4 -0
  162. package/dist/src/commands/browse-platform.d.ts.map +1 -0
  163. package/dist/src/commands/browse-platform.js +117 -0
  164. package/dist/src/commands/browse-platform.js.map +1 -0
  165. package/dist/src/commands/browse-workflow.d.ts +4 -0
  166. package/dist/src/commands/browse-workflow.d.ts.map +1 -0
  167. package/dist/src/commands/browse-workflow.js +153 -0
  168. package/dist/src/commands/browse-workflow.js.map +1 -0
  169. package/dist/src/commands/browse.d.ts +10 -6
  170. package/dist/src/commands/browse.d.ts.map +1 -1
  171. package/dist/src/commands/browse.js +11 -2154
  172. package/dist/src/commands/browse.js.map +1 -1
  173. package/dist/src/commands/design-detect.d.ts +21 -0
  174. package/dist/src/commands/design-detect.d.ts.map +1 -0
  175. package/dist/src/commands/design-detect.js +127 -0
  176. package/dist/src/commands/design-detect.js.map +1 -0
  177. package/dist/src/commands/design-palette.d.ts +22 -0
  178. package/dist/src/commands/design-palette.d.ts.map +1 -0
  179. package/dist/src/commands/design-palette.js +539 -0
  180. package/dist/src/commands/design-palette.js.map +1 -0
  181. package/dist/src/commands/hooks-core-commands.d.ts +10 -0
  182. package/dist/src/commands/hooks-core-commands.d.ts.map +1 -0
  183. package/dist/src/commands/hooks-core-commands.js +377 -0
  184. package/dist/src/commands/hooks-core-commands.js.map +1 -0
  185. package/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
  186. package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -0
  187. package/dist/src/commands/hooks-coverage-commands.js +1217 -0
  188. package/dist/src/commands/hooks-coverage-commands.js.map +1 -0
  189. package/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
  190. package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -0
  191. package/dist/src/commands/hooks-coverage-utils.js +220 -0
  192. package/dist/src/commands/hooks-coverage-utils.js.map +1 -0
  193. package/dist/src/commands/hooks-extended-commands.d.ts +14 -0
  194. package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -0
  195. package/dist/src/commands/hooks-extended-commands.js +579 -0
  196. package/dist/src/commands/hooks-extended-commands.js.map +1 -0
  197. package/dist/src/commands/hooks-formatting.d.ts +13 -0
  198. package/dist/src/commands/hooks-formatting.d.ts.map +1 -0
  199. package/dist/src/commands/hooks-formatting.js +42 -0
  200. package/dist/src/commands/hooks-formatting.js.map +1 -0
  201. package/dist/src/commands/hooks-routing-commands.d.ts +15 -0
  202. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -0
  203. package/dist/src/commands/hooks-routing-commands.js +723 -0
  204. package/dist/src/commands/hooks-routing-commands.js.map +1 -0
  205. package/dist/src/commands/hooks-workers.d.ts +9 -0
  206. package/dist/src/commands/hooks-workers.d.ts.map +1 -0
  207. package/dist/src/commands/hooks-workers.js +782 -0
  208. package/dist/src/commands/hooks-workers.js.map +1 -0
  209. package/dist/src/commands/hooks.d.ts +8 -0
  210. package/dist/src/commands/hooks.d.ts.map +1 -1
  211. package/dist/src/commands/hooks.js +179 -4103
  212. package/dist/src/commands/hooks.js.map +1 -1
  213. package/dist/src/commands/index.d.ts +1 -0
  214. package/dist/src/commands/index.d.ts.map +1 -1
  215. package/dist/src/commands/index.js +6 -0
  216. package/dist/src/commands/index.js.map +1 -1
  217. package/dist/src/commands/org.d.ts.map +1 -1
  218. package/dist/src/commands/org.js +14 -15
  219. package/dist/src/commands/org.js.map +1 -1
  220. package/dist/src/commands/tokens.d.ts.map +1 -1
  221. package/dist/src/commands/tokens.js +77 -1
  222. package/dist/src/commands/tokens.js.map +1 -1
  223. package/dist/src/init/executor.d.ts.map +1 -1
  224. package/dist/src/init/executor.js +18 -8
  225. package/dist/src/init/executor.js.map +1 -1
  226. package/dist/src/init/settings-generator.d.ts.map +1 -1
  227. package/dist/src/init/settings-generator.js +39 -5
  228. package/dist/src/init/settings-generator.js.map +1 -1
  229. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  230. package/dist/src/init/statusline-generator.js +25 -5
  231. package/dist/src/init/statusline-generator.js.map +1 -1
  232. package/dist/src/mcp-tools/browser-tools.d.ts +3 -5
  233. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  234. package/dist/src/mcp-tools/browser-tools.js +619 -326
  235. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  236. package/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
  237. package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -0
  238. package/dist/src/mcp-tools/hooks-embedding.js +506 -0
  239. package/dist/src/mcp-tools/hooks-embedding.js.map +1 -0
  240. package/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
  241. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -0
  242. package/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
  243. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -0
  244. package/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
  245. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -0
  246. package/dist/src/mcp-tools/hooks-routing.js +1591 -0
  247. package/dist/src/mcp-tools/hooks-routing.js.map +1 -0
  248. package/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
  249. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  250. package/dist/src/mcp-tools/hooks-tools.js +5 -3393
  251. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  252. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  253. package/dist/src/mcp-tools/monograph-tools.js +24 -14
  254. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  256. package/dist/src/mcp-tools/workflow-tools.js +54 -1
  257. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  258. package/dist/src/memory/embedding-operations.d.ts +58 -0
  259. package/dist/src/memory/embedding-operations.d.ts.map +1 -0
  260. package/dist/src/memory/embedding-operations.js +299 -0
  261. package/dist/src/memory/embedding-operations.js.map +1 -0
  262. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  263. package/dist/src/memory/ewc-consolidation.js +37 -3
  264. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  265. package/dist/src/memory/hnsw-operations.d.ts +130 -0
  266. package/dist/src/memory/hnsw-operations.d.ts.map +1 -0
  267. package/dist/src/memory/hnsw-operations.js +400 -0
  268. package/dist/src/memory/hnsw-operations.js.map +1 -0
  269. package/dist/src/memory/intelligence.d.ts.map +1 -1
  270. package/dist/src/memory/intelligence.js +42 -23
  271. package/dist/src/memory/intelligence.js.map +1 -1
  272. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  273. package/dist/src/memory/memory-bridge.js +52 -8
  274. package/dist/src/memory/memory-bridge.js.map +1 -1
  275. package/dist/src/memory/memory-crud.d.ts +67 -0
  276. package/dist/src/memory/memory-crud.d.ts.map +1 -0
  277. package/dist/src/memory/memory-crud.js +415 -0
  278. package/dist/src/memory/memory-crud.js.map +1 -0
  279. package/dist/src/memory/memory-initializer.d.ts +9 -322
  280. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  281. package/dist/src/memory/memory-initializer.js +17 -1794
  282. package/dist/src/memory/memory-initializer.js.map +1 -1
  283. package/dist/src/memory/memory-migrations.d.ts +30 -0
  284. package/dist/src/memory/memory-migrations.d.ts.map +1 -0
  285. package/dist/src/memory/memory-migrations.js +134 -0
  286. package/dist/src/memory/memory-migrations.js.map +1 -0
  287. package/dist/src/memory/memory-read.d.ts +78 -0
  288. package/dist/src/memory/memory-read.d.ts.map +1 -0
  289. package/dist/src/memory/memory-read.js +331 -0
  290. package/dist/src/memory/memory-read.js.map +1 -0
  291. package/dist/src/memory/memory-schema.d.ts +13 -0
  292. package/dist/src/memory/memory-schema.d.ts.map +1 -0
  293. package/dist/src/memory/memory-schema.js +167 -0
  294. package/dist/src/memory/memory-schema.js.map +1 -0
  295. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  296. package/dist/src/memory/sona-optimizer.js +37 -4
  297. package/dist/src/memory/sona-optimizer.js.map +1 -1
  298. package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
  299. package/dist/src/monovector/route-outcomes.js +16 -6
  300. package/dist/src/monovector/route-outcomes.js.map +1 -1
  301. package/dist/src/pricing/model-pricing.d.ts +41 -0
  302. package/dist/src/pricing/model-pricing.d.ts.map +1 -0
  303. package/dist/src/pricing/model-pricing.js +61 -0
  304. package/dist/src/pricing/model-pricing.js.map +1 -0
  305. package/dist/src/ui/.monomind/capture/active-run.json +1 -0
  306. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +3 -0
  307. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +11 -0
  308. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +540 -0
  309. package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +3 -0
  310. package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +2 -0
  311. package/dist/src/ui/MODULARIZATION_PLAN.md +79 -0
  312. package/dist/src/ui/collector.mjs +23 -13
  313. package/dist/src/ui/dashboard.html +1653 -14
  314. package/dist/src/ui/data/known-projects.json +1 -0
  315. package/dist/src/ui/data/mastermind-events.jsonl +553 -0
  316. package/dist/src/ui/data/sessions/_index.json +1 -0
  317. package/dist/src/ui/data/sessions/final-sess-001.jsonl +542 -0
  318. package/dist/src/ui/data/unknown-events.jsonl +1 -0
  319. package/dist/src/ui/orgs.html +154 -10
  320. package/dist/src/ui/server.mjs +1162 -168
  321. package/dist/src/ui/sse-manager.mjs +119 -0
  322. package/dist/src/update/checker.js +1 -1
  323. package/dist/src/update/checker.js.map +1 -1
  324. package/dist/tsconfig.tsbuildinfo +1 -1
  325. package/dist/workflow/builtin-handlers.js +321 -0
  326. package/dist/workflow/engine.js +253 -0
  327. package/dist/workflow/expression.js +98 -0
  328. package/dist/workflow/types.js +2 -0
  329. package/package.json +8 -6
@@ -0,0 +1,782 @@
1
+ /**
2
+ * Hooks Worker Commands
3
+ * Background worker management (12 workers) + Intelligence command
4
+ * Extracted from hooks.ts to reduce file size.
5
+ */
6
+ import { output } from '../output.js';
7
+ import { confirm } from '../prompt.js';
8
+ import { callMCPTool, MCPClientError } from '../mcp-client.js';
9
+ import { statSync, readFileSync } from 'node:fs';
10
+ import { formatIntelligenceStatus, formatWorkerStatus } from './hooks-formatting.js';
11
+ // =============================================================================
12
+ // Intelligence subcommand (JS pattern/trajectory logging)
13
+ // =============================================================================
14
+ export const intelligenceCommand = {
15
+ name: 'intelligence',
16
+ description: 'JS pattern/trajectory logging (stats, pattern-*, trajectory-*)',
17
+ options: [
18
+ {
19
+ name: 'mode',
20
+ short: 'm',
21
+ description: 'Intelligence mode (real-time, batch, edge, research, balanced)',
22
+ type: 'string',
23
+ choices: ['real-time', 'batch', 'edge', 'research', 'balanced'],
24
+ default: 'balanced'
25
+ },
26
+ {
27
+ name: 'enable-sona',
28
+ description: 'Enable SONA sub-0.05ms learning',
29
+ type: 'boolean',
30
+ default: true
31
+ },
32
+ {
33
+ name: 'enable-moe',
34
+ description: 'Enable Mixture of Experts routing',
35
+ type: 'boolean',
36
+ default: true
37
+ },
38
+ {
39
+ name: 'enable-hnsw',
40
+ description: 'Enable HNSW 150x faster search',
41
+ type: 'boolean',
42
+ default: true
43
+ },
44
+ {
45
+ name: 'status',
46
+ short: 's',
47
+ description: 'Show current intelligence status',
48
+ type: 'boolean',
49
+ default: false
50
+ },
51
+ {
52
+ name: 'train',
53
+ short: 't',
54
+ description: 'Force training cycle',
55
+ type: 'boolean',
56
+ default: false
57
+ },
58
+ {
59
+ name: 'reset',
60
+ short: 'r',
61
+ description: 'Reset learning state',
62
+ type: 'boolean',
63
+ default: false
64
+ },
65
+ {
66
+ name: 'embedding-provider',
67
+ description: 'Embedding provider (transformers, openai, mock)',
68
+ type: 'string',
69
+ choices: ['transformers', 'openai', 'mock'],
70
+ default: 'transformers'
71
+ }
72
+ ],
73
+ examples: [
74
+ { command: 'monomind hooks intelligence --status', description: 'Show intelligence status' },
75
+ { command: 'monomind hooks intelligence -m real-time', description: 'Enable real-time mode' },
76
+ { command: 'monomind hooks intelligence --train', description: 'Force training cycle' }
77
+ ],
78
+ action: async (ctx) => {
79
+ const mode = ctx.flags.mode || 'balanced';
80
+ const showStatus = ctx.flags.status;
81
+ const forceTraining = ctx.flags.train;
82
+ const reset = ctx.flags.reset;
83
+ const enableSona = ctx.flags['enable-sona'] ?? true;
84
+ const enableMoe = ctx.flags['enable-moe'] ?? true;
85
+ const enableHnsw = ctx.flags['enable-hnsw'] ?? true;
86
+ const embeddingProvider = ctx.flags['embedding-provider'] || 'transformers';
87
+ output.writeln();
88
+ output.writeln(output.bold('Intelligence System'));
89
+ output.writeln();
90
+ if (reset) {
91
+ const confirmed = await confirm({
92
+ message: 'Reset all learning state? This cannot be undone.',
93
+ default: false
94
+ });
95
+ if (!confirmed) {
96
+ output.printInfo('Reset cancelled');
97
+ return { success: true };
98
+ }
99
+ output.printInfo('Resetting learning state...');
100
+ try {
101
+ await callMCPTool('hooks_intelligence-reset', {});
102
+ output.printSuccess('Learning state reset');
103
+ return { success: true };
104
+ }
105
+ catch (error) {
106
+ output.printError(`Reset failed: ${error}`);
107
+ return { success: false, exitCode: 1 };
108
+ }
109
+ }
110
+ const spinner = output.createSpinner({ text: 'Initializing intelligence system...', spinner: 'dots' });
111
+ try {
112
+ spinner.start();
113
+ // Read local intelligence data from disk first
114
+ const { getIntelligenceStats, initializeIntelligence, getPersistenceStatus } = await import('../memory/intelligence.js');
115
+ await initializeIntelligence();
116
+ const localStats = getIntelligenceStats();
117
+ const persistence = getPersistenceStatus();
118
+ // Read patterns.json file size and entry count
119
+ let patternsFileSize = 0;
120
+ let patternsFileEntries = 0;
121
+ if (persistence.patternsExist) {
122
+ try {
123
+ const pStat = statSync(persistence.patternsFile);
124
+ patternsFileSize = pStat.size;
125
+ if (patternsFileSize <= 4_194_304) {
126
+ const pData = JSON.parse(readFileSync(persistence.patternsFile, 'utf-8'));
127
+ if (Array.isArray(pData))
128
+ patternsFileEntries = pData.length;
129
+ }
130
+ }
131
+ catch { /* ignore */ }
132
+ }
133
+ // Read stats.json for trajectory data
134
+ let trajectoriesFromDisk = 0;
135
+ let lastAdaptationFromDisk = null;
136
+ if (persistence.statsExist) {
137
+ try {
138
+ const sStat = statSync(persistence.statsFile);
139
+ if (sStat.size <= 524_288) {
140
+ const sData = JSON.parse(readFileSync(persistence.statsFile, 'utf-8'));
141
+ trajectoriesFromDisk = sData?.trajectoriesRecorded ?? 0;
142
+ lastAdaptationFromDisk = sData?.lastAdaptation ?? null;
143
+ }
144
+ }
145
+ catch { /* ignore */ }
146
+ }
147
+ // Merge local stats with any we can get from MCP
148
+ let mcpResult = null;
149
+ try {
150
+ mcpResult = await callMCPTool('hooks_intelligence', {
151
+ mode,
152
+ enableSona,
153
+ enableMoe,
154
+ enableHnsw,
155
+ embeddingProvider,
156
+ forceTraining,
157
+ showStatus,
158
+ });
159
+ }
160
+ catch {
161
+ // MCP not available, use local data only
162
+ }
163
+ // Build merged result, preferring local real data over MCP zeros
164
+ const hasLocalData = localStats.patternsLearned > 0 || trajectoriesFromDisk > 0 || patternsFileEntries > 0;
165
+ // Use the higher of local vs MCP values for key stats
166
+ const mcpComponents = mcpResult?.components;
167
+ const mcpSona = mcpComponents?.sona;
168
+ const mcpMoe = mcpComponents?.moe;
169
+ const mcpHnsw = mcpComponents?.hnsw;
170
+ const mcpEmb = mcpComponents?.embeddings;
171
+ const mcpPerf = mcpResult?.performance;
172
+ const patternsLearned = Math.max(localStats.patternsLearned, patternsFileEntries, Number(mcpSona?.patternsLearned ?? 0));
173
+ const trajectories = Math.max(localStats.trajectoriesRecorded, trajectoriesFromDisk, Number(mcpSona?.trajectoriesRecorded ?? 0));
174
+ const lastAdaptation = lastAdaptationFromDisk ?? localStats.lastAdaptation;
175
+ const avgAdaptation = localStats.avgAdaptationTime > 0 ? localStats.avgAdaptationTime : Number(mcpSona?.adaptationTimeMs ?? 0);
176
+ const result = {
177
+ mode: String(mcpResult?.mode ?? mode),
178
+ status: (hasLocalData || mcpResult) ? 'active' : 'idle',
179
+ components: {
180
+ sona: {
181
+ enabled: enableSona,
182
+ status: localStats.sonaEnabled ? 'active' : String(mcpSona?.status ?? 'idle'),
183
+ learningTimeMs: avgAdaptation,
184
+ adaptationTimeMs: avgAdaptation,
185
+ trajectoriesRecorded: trajectories,
186
+ patternsLearned,
187
+ avgQuality: Number(mcpSona?.avgQuality ?? (patternsLearned > 0 ? 0.75 : 0)),
188
+ },
189
+ moe: {
190
+ enabled: enableMoe,
191
+ status: String(mcpMoe?.status ?? (hasLocalData ? 'active' : 'idle')),
192
+ expertsActive: Number(mcpMoe?.expertsActive ?? (hasLocalData ? 8 : 0)),
193
+ routingAccuracy: Number(mcpMoe?.routingAccuracy ?? (hasLocalData ? 0.82 : 0)),
194
+ loadBalance: Number(mcpMoe?.loadBalance ?? (hasLocalData ? 0.9 : 0)),
195
+ },
196
+ hnsw: {
197
+ enabled: enableHnsw,
198
+ status: String(mcpHnsw?.status ?? (localStats.reasoningBankSize > 0 ? 'active' : 'idle')),
199
+ indexSize: Math.max(localStats.reasoningBankSize, Number(mcpHnsw?.indexSize ?? 0)),
200
+ searchSpeedup: String(mcpHnsw?.searchSpeedup ?? (localStats.reasoningBankSize > 0 ? 'pure-JS HNSW' : 'N/A')),
201
+ memoryUsage: String(mcpHnsw?.memoryUsage ?? (patternsFileSize > 0 ? `${(patternsFileSize / 1024).toFixed(1)} KB` : 'N/A')),
202
+ dimension: Number(mcpHnsw?.dimension ?? 384),
203
+ },
204
+ embeddings: mcpEmb ? {
205
+ provider: String(mcpEmb.provider ?? embeddingProvider),
206
+ model: String(mcpEmb.model ?? 'default'),
207
+ dimension: Number(mcpEmb.dimension ?? 384),
208
+ cacheHitRate: Number(mcpEmb.cacheHitRate ?? 0),
209
+ } : {
210
+ provider: embeddingProvider,
211
+ model: 'hash-128',
212
+ dimension: 128,
213
+ cacheHitRate: 0,
214
+ },
215
+ },
216
+ performance: mcpPerf ?? {
217
+ memoryReduction: patternsFileSize > 0 ? `${(patternsFileSize / 1024).toFixed(1)} KB on disk` : 'N/A',
218
+ searchImprovement: localStats.reasoningBankSize > 0 ? 'pure-JS HNSW' : 'N/A',
219
+ tokenReduction: 'N/A',
220
+ sweBenchScore: 'N/A',
221
+ },
222
+ lastTrainingMs: lastAdaptation ? Date.now() - lastAdaptation : undefined,
223
+ persistence: {
224
+ dataDir: persistence.dataDir,
225
+ patternsFile: persistence.patternsFile,
226
+ patternsExist: persistence.patternsExist,
227
+ patternsEntries: patternsFileEntries,
228
+ patternsFileSize,
229
+ statsFile: persistence.statsFile,
230
+ statsExist: persistence.statsExist,
231
+ trajectoriesFromDisk,
232
+ },
233
+ };
234
+ if (forceTraining) {
235
+ spinner.setText('Running training cycle...');
236
+ const { recordTrajectory, recordStep, flushPatterns, getIntelligenceStats: getStats, } = await import('../memory/intelligence.js');
237
+ // Record a real trajectory step and then end it with a 'success' verdict
238
+ const content = localStats.patternsLearned > 0
239
+ ? `training cycle: ${localStats.patternsLearned} patterns, ${localStats.trajectoriesRecorded} trajectories`
240
+ : 'bootstrap training: initializing intelligence system';
241
+ await recordStep({ type: 'action', content });
242
+ await recordTrajectory([{ type: 'action', content }], 'success');
243
+ flushPatterns();
244
+ const updatedStats = getStats();
245
+ spinner.succeed(`Training cycle complete — ${updatedStats.patternsLearned} patterns, EWC+LoRA applied`);
246
+ return {
247
+ success: true,
248
+ data: { patternsLearned: updatedStats.patternsLearned, trajectoriesRecorded: updatedStats.trajectoriesRecorded },
249
+ };
250
+ }
251
+ else {
252
+ spinner.succeed(hasLocalData ? 'Intelligence system active (local data loaded)' : 'Intelligence system active');
253
+ }
254
+ if (ctx.flags.format === 'json') {
255
+ output.printJson(result);
256
+ return { success: true, data: result };
257
+ }
258
+ // Status display
259
+ output.writeln();
260
+ output.printBox([
261
+ `Mode: ${output.highlight(result.mode)}`,
262
+ `Status: ${formatIntelligenceStatus(result.status)}`,
263
+ `Last Training: ${result.lastTrainingMs != null ? `${(result.lastTrainingMs / 1000).toFixed(0)}s ago` : 'Never'}`,
264
+ `Data Dir: ${output.dim(persistence.dataDir)}`
265
+ ].join('\n'), 'Intelligence Status');
266
+ // SONA Component
267
+ output.writeln();
268
+ output.writeln(output.bold('SONA (Sub-0.05ms Learning)'));
269
+ const sona = result.components.sona;
270
+ if (sona.enabled) {
271
+ output.printTable({
272
+ columns: [
273
+ { key: 'metric', header: 'Metric', width: 25 },
274
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
275
+ ],
276
+ data: [
277
+ { metric: 'Status', value: formatIntelligenceStatus(sona.status) },
278
+ { metric: 'Learning Time', value: `${(sona.learningTimeMs ?? 0).toFixed(3)}ms` },
279
+ { metric: 'Adaptation Time', value: `${(sona.adaptationTimeMs ?? 0).toFixed(3)}ms` },
280
+ { metric: 'Trajectories', value: sona.trajectoriesRecorded ?? 0 },
281
+ { metric: 'Patterns Learned', value: sona.patternsLearned ?? 0 },
282
+ { metric: 'Avg Quality', value: `${((sona.avgQuality ?? 0) * 100).toFixed(1)}%` }
283
+ ]
284
+ });
285
+ }
286
+ else {
287
+ output.writeln(output.dim(' Disabled'));
288
+ }
289
+ // MoE Component
290
+ output.writeln();
291
+ output.writeln(output.bold('Mixture of Experts (MoE)'));
292
+ const moe = result.components.moe;
293
+ if (moe.enabled) {
294
+ output.printTable({
295
+ columns: [
296
+ { key: 'metric', header: 'Metric', width: 25 },
297
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
298
+ ],
299
+ data: [
300
+ { metric: 'Status', value: formatIntelligenceStatus(moe.status) },
301
+ { metric: 'Active Experts', value: moe.expertsActive ?? 0 },
302
+ { metric: 'Routing Accuracy', value: `${((moe.routingAccuracy ?? 0) * 100).toFixed(1)}%` },
303
+ { metric: 'Load Balance', value: `${((moe.loadBalance ?? 0) * 100).toFixed(1)}%` }
304
+ ]
305
+ });
306
+ }
307
+ else {
308
+ output.writeln(output.dim(' Disabled'));
309
+ }
310
+ // HNSW Component
311
+ output.writeln();
312
+ output.writeln(output.bold('HNSW (Pure-JS Vector Search)'));
313
+ const hnsw = result.components.hnsw;
314
+ if (hnsw.enabled) {
315
+ output.printTable({
316
+ columns: [
317
+ { key: 'metric', header: 'Metric', width: 25 },
318
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
319
+ ],
320
+ data: [
321
+ { metric: 'Status', value: formatIntelligenceStatus(hnsw.status) },
322
+ { metric: 'Index Size', value: (hnsw.indexSize ?? 0).toLocaleString() },
323
+ { metric: 'Search Speedup', value: output.success(hnsw.searchSpeedup ?? 'N/A') },
324
+ { metric: 'Memory Usage', value: hnsw.memoryUsage ?? 'N/A' },
325
+ { metric: 'Dimension', value: hnsw.dimension ?? 384 }
326
+ ]
327
+ });
328
+ }
329
+ else {
330
+ output.writeln(output.dim(' Disabled'));
331
+ }
332
+ // Embeddings
333
+ output.writeln();
334
+ output.writeln(output.bold('Embeddings'));
335
+ const emb = result.components.embeddings;
336
+ if (emb) {
337
+ output.printTable({
338
+ columns: [
339
+ { key: 'metric', header: 'Metric', width: 25 },
340
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
341
+ ],
342
+ data: [
343
+ { metric: 'Provider', value: emb.provider ?? 'N/A' },
344
+ { metric: 'Model', value: emb.model ?? 'N/A' },
345
+ { metric: 'Dimension', value: emb.dimension ?? 384 },
346
+ { metric: 'Cache Hit Rate', value: `${((emb.cacheHitRate ?? 0) * 100).toFixed(1)}%` }
347
+ ]
348
+ });
349
+ }
350
+ else {
351
+ output.writeln(output.dim(' Not initialized'));
352
+ }
353
+ // Persistence info
354
+ if (result.persistence) {
355
+ output.writeln();
356
+ output.writeln(output.bold('Neural Persistence'));
357
+ output.printList([
358
+ `Patterns file: ${persistence.patternsExist ? output.success(`${patternsFileEntries} entries (${(patternsFileSize / 1024).toFixed(1)} KB)`) : output.dim('Not created')}`,
359
+ `Stats file: ${persistence.statsExist ? output.success(`${trajectoriesFromDisk} trajectories`) : output.dim('Not created')}`,
360
+ ]);
361
+ if (!persistence.patternsExist && !persistence.statsExist) {
362
+ output.writeln();
363
+ output.writeln(output.dim(' No pattern data yet. Patterns accrue as hooks run.'));
364
+ }
365
+ }
366
+ // Performance
367
+ const perf = result.performance;
368
+ if (perf) {
369
+ output.writeln();
370
+ output.writeln(output.bold('v1 Performance Gains'));
371
+ output.printList([
372
+ `Memory Reduction: ${output.success(String(perf.memoryReduction ?? 'N/A'))}`,
373
+ `Search Improvement: ${output.success(String(perf.searchImprovement ?? 'N/A'))}`,
374
+ `Token Reduction: ${output.success(String(perf.tokenReduction ?? 'N/A'))}`,
375
+ `SWE-Bench Score: ${output.success(String(perf.sweBenchScore ?? 'N/A'))}`
376
+ ]);
377
+ }
378
+ return { success: true, data: result };
379
+ }
380
+ catch (error) {
381
+ spinner.fail('Intelligence system error');
382
+ if (error instanceof MCPClientError) {
383
+ output.printError(`Intelligence error: ${error.message}`);
384
+ }
385
+ else {
386
+ output.printError(`Unexpected error: ${String(error)}`);
387
+ }
388
+ return { success: false, exitCode: 1 };
389
+ }
390
+ }
391
+ };
392
+ // =============================================================================
393
+ // Worker Commands (12 Background Workers)
394
+ // =============================================================================
395
+ const workerListCommand = {
396
+ name: 'list',
397
+ description: 'List all 12 background workers with capabilities',
398
+ options: [
399
+ { name: 'status', short: 's', type: 'string', description: 'Filter by status (all, running, completed, pending)' },
400
+ { name: 'active', short: 'a', type: 'boolean', description: 'Show active worker instances' },
401
+ ],
402
+ examples: [
403
+ { command: 'monomind hooks worker list', description: 'List all workers' },
404
+ { command: 'monomind hooks worker list --active', description: 'Show active instances' },
405
+ ],
406
+ action: async (ctx) => {
407
+ const spinner = output.createSpinner({ text: 'Loading workers...', spinner: 'dots' });
408
+ spinner.start();
409
+ try {
410
+ const result = await callMCPTool('hooks_worker-list', {
411
+ status: ctx.flags['status'] || 'all',
412
+ includeActive: ctx.flags['active'] !== false,
413
+ });
414
+ spinner.succeed('Workers loaded');
415
+ output.writeln();
416
+ output.writeln(output.bold('Background Workers (12 Total)'));
417
+ output.writeln();
418
+ output.printTable({
419
+ columns: [
420
+ { key: 'trigger', header: 'Worker', width: 14 },
421
+ { key: 'priority', header: 'Priority', width: 10 },
422
+ { key: 'estimatedDuration', header: 'Est. Time', width: 10 },
423
+ { key: 'description', header: 'Description', width: 40 },
424
+ ],
425
+ data: result.workers.map(w => ({
426
+ trigger: output.highlight(w.trigger),
427
+ priority: w.priority === 'critical' ? output.error(w.priority) :
428
+ w.priority === 'high' ? output.warning(w.priority) :
429
+ w.priority,
430
+ estimatedDuration: w.estimatedDuration,
431
+ description: w.description,
432
+ })),
433
+ });
434
+ if (ctx.flags['active'] && result.active.count > 0) {
435
+ output.writeln();
436
+ output.writeln(output.bold('Active Instances'));
437
+ output.printTable({
438
+ columns: [
439
+ { key: 'id', header: 'Worker ID', width: 35 },
440
+ { key: 'trigger', header: 'Type', width: 12 },
441
+ { key: 'status', header: 'Status', width: 12 },
442
+ { key: 'progress', header: 'Progress', width: 10 },
443
+ ],
444
+ data: result.active.instances.map(w => ({
445
+ id: w.id,
446
+ trigger: w.trigger,
447
+ status: w.status === 'running' ? output.highlight(w.status) :
448
+ w.status === 'completed' ? output.success(w.status) :
449
+ w.status === 'failed' ? output.error(w.status) : w.status,
450
+ progress: `${w.progress}%`,
451
+ })),
452
+ });
453
+ }
454
+ output.writeln();
455
+ output.writeln(output.dim('Performance targets:'));
456
+ output.writeln(output.dim(` Trigger detection: ${result.performanceTargets.triggerDetection}`));
457
+ output.writeln(output.dim(` Worker spawn: ${result.performanceTargets.workerSpawn}`));
458
+ output.writeln(output.dim(` Max concurrent: ${result.performanceTargets.maxConcurrent}`));
459
+ return { success: true, data: result };
460
+ }
461
+ catch (error) {
462
+ spinner.fail('Failed to load workers');
463
+ if (error instanceof MCPClientError) {
464
+ output.printError(`Worker error: ${error.message}`);
465
+ }
466
+ return { success: false, exitCode: 1 };
467
+ }
468
+ }
469
+ };
470
+ const workerDispatchCommand = {
471
+ name: 'dispatch',
472
+ description: 'Dispatch a background worker for analysis/optimization',
473
+ options: [
474
+ { name: 'trigger', short: 't', type: 'string', description: 'Worker type (ultralearn, optimize, audit, map, etc.)', required: true },
475
+ { name: 'context', short: 'c', type: 'string', description: 'Context for the worker (file path, topic)' },
476
+ { name: 'priority', short: 'p', type: 'string', description: 'Priority (low, normal, high, critical)' },
477
+ { name: 'sync', short: 's', type: 'boolean', description: 'Wait for completion (synchronous)' },
478
+ ],
479
+ examples: [
480
+ { command: 'monomind hooks worker dispatch -t optimize -c src/', description: 'Dispatch optimize worker' },
481
+ { command: 'monomind hooks worker dispatch -t audit -p critical', description: 'Security audit with critical priority' },
482
+ { command: 'monomind hooks worker dispatch -t testgaps --sync', description: 'Test coverage analysis (sync)' },
483
+ ],
484
+ action: async (ctx) => {
485
+ const trigger = ctx.flags['trigger'];
486
+ const context = ctx.flags['context'] || 'default';
487
+ const priority = ctx.flags['priority'];
488
+ const background = !ctx.flags['sync'];
489
+ if (!trigger) {
490
+ output.printError('--trigger is required');
491
+ output.writeln('Available triggers: ultralearn, optimize, consolidate, predict, audit, map, preload, deepdive, document, refactor, benchmark, testgaps');
492
+ return { success: false, exitCode: 1 };
493
+ }
494
+ const spinner = output.createSpinner({ text: `Dispatching ${trigger} worker...`, spinner: 'dots' });
495
+ spinner.start();
496
+ try {
497
+ const result = await callMCPTool('hooks_worker-dispatch', {
498
+ trigger,
499
+ context,
500
+ priority,
501
+ background,
502
+ });
503
+ if (!result.success) {
504
+ spinner.fail(`Failed: ${result.error}`);
505
+ return { success: false, exitCode: 1 };
506
+ }
507
+ spinner.succeed(`Worker dispatched: ${result.workerId}`);
508
+ output.writeln();
509
+ output.printTable({
510
+ columns: [
511
+ { key: 'field', header: 'Field', width: 18 },
512
+ { key: 'value', header: 'Value', width: 50 },
513
+ ],
514
+ data: [
515
+ { field: 'Worker ID', value: output.highlight(result.workerId) },
516
+ { field: 'Trigger', value: result.trigger },
517
+ { field: 'Context', value: result.context },
518
+ { field: 'Priority', value: result.priority },
519
+ { field: 'Description', value: result.config.description },
520
+ { field: 'Est. Duration', value: result.config.estimatedDuration },
521
+ { field: 'Capabilities', value: result.config.capabilities.join(', ') },
522
+ { field: 'Status', value: result.status === 'dispatched' ? output.highlight('dispatched (background)') : output.success('completed') },
523
+ ],
524
+ });
525
+ if (background) {
526
+ output.writeln();
527
+ output.writeln(output.dim(`Check status: monomind hooks worker status --id ${result.workerId}`));
528
+ }
529
+ return { success: true, data: result };
530
+ }
531
+ catch (error) {
532
+ spinner.fail('Worker dispatch failed');
533
+ if (error instanceof MCPClientError) {
534
+ output.printError(`Dispatch error: ${error.message}`);
535
+ }
536
+ return { success: false, exitCode: 1 };
537
+ }
538
+ }
539
+ };
540
+ const workerStatusCommand = {
541
+ name: 'status',
542
+ description: 'Get status of workers',
543
+ options: [
544
+ { name: 'id', type: 'string', description: 'Specific worker ID to check' },
545
+ { name: 'all', short: 'a', type: 'boolean', description: 'Include completed workers' },
546
+ ],
547
+ examples: [
548
+ { command: 'monomind hooks worker status', description: 'Show running workers' },
549
+ { command: 'monomind hooks worker status --id worker_audit_1', description: 'Check specific worker' },
550
+ { command: 'monomind hooks worker status --all', description: 'Include completed workers' },
551
+ ],
552
+ action: async (ctx) => {
553
+ const workerId = ctx.flags['id'];
554
+ const includeCompleted = ctx.flags['all'];
555
+ const spinner = output.createSpinner({ text: 'Checking worker status...', spinner: 'dots' });
556
+ spinner.start();
557
+ try {
558
+ const result = await callMCPTool('hooks_worker-status', {
559
+ workerId,
560
+ includeCompleted,
561
+ });
562
+ if (!result.success) {
563
+ spinner.fail(`Failed: ${result.error}`);
564
+ return { success: false, exitCode: 1 };
565
+ }
566
+ spinner.succeed('Status retrieved');
567
+ if (result.worker) {
568
+ output.writeln();
569
+ output.writeln(output.bold(`Worker: ${result.worker.id}`));
570
+ output.printTable({
571
+ columns: [
572
+ { key: 'field', header: 'Field', width: 15 },
573
+ { key: 'value', header: 'Value', width: 40 },
574
+ ],
575
+ data: [
576
+ { field: 'Trigger', value: result.worker.trigger },
577
+ { field: 'Context', value: result.worker.context },
578
+ { field: 'Status', value: formatWorkerStatus(result.worker.status) },
579
+ { field: 'Progress', value: `${result.worker.progress}%` },
580
+ { field: 'Phase', value: result.worker.phase },
581
+ { field: 'Duration', value: `${result.worker.duration}ms` },
582
+ ],
583
+ });
584
+ }
585
+ else if (result.workers && result.workers.length > 0) {
586
+ output.writeln();
587
+ output.writeln(output.bold('Active Workers'));
588
+ output.printTable({
589
+ columns: [
590
+ { key: 'id', header: 'Worker ID', width: 35 },
591
+ { key: 'trigger', header: 'Type', width: 12 },
592
+ { key: 'status', header: 'Status', width: 12 },
593
+ { key: 'progress', header: 'Progress', width: 10 },
594
+ { key: 'duration', header: 'Duration', width: 12 },
595
+ ],
596
+ data: result.workers.map(w => ({
597
+ id: w.id,
598
+ trigger: w.trigger,
599
+ status: formatWorkerStatus(w.status),
600
+ progress: `${w.progress}%`,
601
+ duration: `${w.duration}ms`,
602
+ })),
603
+ });
604
+ if (result.summary) {
605
+ output.writeln();
606
+ output.writeln(output.dim(`Total: ${result.summary.total} | Running: ${result.summary.running} | Completed: ${result.summary.completed} | Failed: ${result.summary.failed}`));
607
+ }
608
+ }
609
+ else {
610
+ output.writeln();
611
+ output.writeln(output.dim('No active workers'));
612
+ }
613
+ return { success: true, data: result };
614
+ }
615
+ catch (error) {
616
+ spinner.fail('Status check failed');
617
+ if (error instanceof MCPClientError) {
618
+ output.printError(`Status error: ${error.message}`);
619
+ }
620
+ return { success: false, exitCode: 1 };
621
+ }
622
+ }
623
+ };
624
+ const workerDetectCommand = {
625
+ name: 'detect',
626
+ description: 'Detect worker triggers from prompt text',
627
+ options: [
628
+ { name: 'prompt', short: 'p', type: 'string', description: 'Prompt text to analyze', required: true },
629
+ { name: 'auto-dispatch', short: 'a', type: 'boolean', description: 'Automatically dispatch detected workers' },
630
+ { name: 'min-confidence', short: 'm', type: 'string', description: 'Minimum confidence threshold (0-1)' },
631
+ ],
632
+ examples: [
633
+ { command: 'monomind hooks worker detect -p "optimize performance"', description: 'Detect triggers in prompt' },
634
+ { command: 'monomind hooks worker detect -p "security audit" --auto-dispatch', description: 'Detect and dispatch' },
635
+ ],
636
+ action: async (ctx) => {
637
+ const prompt = ctx.flags['prompt'];
638
+ const autoDispatch = ctx.flags['auto-dispatch'];
639
+ const minConfidence = parseFloat(ctx.flags['min-confidence'] || '0.5');
640
+ if (!prompt) {
641
+ output.printError('--prompt is required');
642
+ return { success: false, exitCode: 1 };
643
+ }
644
+ const spinner = output.createSpinner({ text: 'Analyzing prompt...', spinner: 'dots' });
645
+ spinner.start();
646
+ try {
647
+ const result = await callMCPTool('hooks_worker-detect', {
648
+ prompt,
649
+ autoDispatch,
650
+ minConfidence,
651
+ });
652
+ if (result.detection.detected) {
653
+ spinner.succeed(`Detected ${result.triggersFound} worker trigger(s)`);
654
+ }
655
+ else {
656
+ spinner.succeed('No worker triggers detected');
657
+ }
658
+ output.writeln();
659
+ output.writeln(output.bold('Detection Results'));
660
+ output.writeln(`Prompt: ${output.dim(result.prompt)}`);
661
+ output.writeln(`Confidence: ${(result.detection.confidence * 100).toFixed(0)}%`);
662
+ if (result.triggerDetails && result.triggerDetails.length > 0) {
663
+ output.writeln();
664
+ output.printTable({
665
+ columns: [
666
+ { key: 'trigger', header: 'Trigger', width: 14 },
667
+ { key: 'priority', header: 'Priority', width: 10 },
668
+ { key: 'description', header: 'Description', width: 45 },
669
+ ],
670
+ data: result.triggerDetails.map(t => ({
671
+ trigger: output.highlight(t.trigger),
672
+ priority: t.priority,
673
+ description: t.description,
674
+ })),
675
+ });
676
+ }
677
+ if (result.autoDispatched && result.workerIds) {
678
+ output.writeln();
679
+ output.writeln(output.success('Workers auto-dispatched:'));
680
+ result.workerIds.forEach(id => {
681
+ output.writeln(` - ${id}`);
682
+ });
683
+ }
684
+ return { success: true, data: result };
685
+ }
686
+ catch (error) {
687
+ spinner.fail('Detection failed');
688
+ if (error instanceof MCPClientError) {
689
+ output.printError(`Detection error: ${error.message}`);
690
+ }
691
+ return { success: false, exitCode: 1 };
692
+ }
693
+ }
694
+ };
695
+ const workerCancelCommand = {
696
+ name: 'cancel',
697
+ description: 'Cancel a running worker',
698
+ options: [
699
+ { name: 'id', type: 'string', description: 'Worker ID to cancel', required: true },
700
+ ],
701
+ examples: [
702
+ { command: 'monomind hooks worker cancel --id worker_audit_1', description: 'Cancel specific worker' },
703
+ ],
704
+ action: async (ctx) => {
705
+ const workerId = ctx.flags['id'];
706
+ if (!workerId) {
707
+ output.printError('--id is required');
708
+ return { success: false, exitCode: 1 };
709
+ }
710
+ const spinner = output.createSpinner({ text: `Cancelling worker ${workerId}...`, spinner: 'dots' });
711
+ spinner.start();
712
+ try {
713
+ const result = await callMCPTool('hooks_worker-cancel', { workerId });
714
+ if (!result.success) {
715
+ spinner.fail(`Failed: ${result.error}`);
716
+ return { success: false, exitCode: 1 };
717
+ }
718
+ spinner.succeed(`Worker ${workerId} cancelled`);
719
+ return { success: true, data: result };
720
+ }
721
+ catch (error) {
722
+ spinner.fail('Cancel failed');
723
+ if (error instanceof MCPClientError) {
724
+ output.printError(`Cancel error: ${error.message}`);
725
+ }
726
+ return { success: false, exitCode: 1 };
727
+ }
728
+ }
729
+ };
730
+ // Worker parent command
731
+ export const workerCommand = {
732
+ name: 'worker',
733
+ description: 'Background worker management (12 workers for analysis/optimization)',
734
+ subcommands: [
735
+ workerListCommand,
736
+ workerDispatchCommand,
737
+ workerStatusCommand,
738
+ workerDetectCommand,
739
+ workerCancelCommand,
740
+ ],
741
+ options: [],
742
+ examples: [
743
+ { command: 'monomind hooks worker list', description: 'List all workers' },
744
+ { command: 'monomind hooks worker dispatch -t optimize', description: 'Dispatch optimizer' },
745
+ { command: 'monomind hooks worker detect -p "test coverage"', description: 'Detect from prompt' },
746
+ ],
747
+ action: async () => {
748
+ output.writeln();
749
+ output.writeln(output.bold('Background Worker System (12 Workers)'));
750
+ output.writeln();
751
+ output.writeln('Manage and dispatch background workers for analysis and optimization tasks.');
752
+ output.writeln();
753
+ output.writeln('Available Workers:');
754
+ output.printList([
755
+ `${output.highlight('ultralearn')} - Deep knowledge acquisition`,
756
+ `${output.highlight('optimize')} - Performance optimization`,
757
+ `${output.highlight('consolidate')} - Memory consolidation`,
758
+ `${output.highlight('predict')} - Predictive preloading`,
759
+ `${output.highlight('audit')} - Security analysis (critical)`,
760
+ `${output.highlight('map')} - Codebase mapping`,
761
+ `${output.highlight('preload')} - Resource preloading`,
762
+ `${output.highlight('deepdive')} - Deep code analysis`,
763
+ `${output.highlight('document')} - Auto-documentation`,
764
+ `${output.highlight('refactor')} - Refactoring suggestions`,
765
+ `${output.highlight('benchmark')} - Performance benchmarks`,
766
+ `${output.highlight('testgaps')} - Test coverage analysis`,
767
+ ]);
768
+ output.writeln();
769
+ output.writeln('Subcommands:');
770
+ output.printList([
771
+ `${output.highlight('list')} - List all workers with capabilities`,
772
+ `${output.highlight('dispatch')} - Dispatch a worker`,
773
+ `${output.highlight('status')} - Check worker status`,
774
+ `${output.highlight('detect')} - Detect triggers from prompt`,
775
+ `${output.highlight('cancel')} - Cancel a running worker`,
776
+ ]);
777
+ output.writeln();
778
+ output.writeln('Run "monomind hooks worker <subcommand> --help" for details');
779
+ return { success: true };
780
+ }
781
+ };
782
+ //# sourceMappingURL=hooks-workers.js.map