@monoes/monomindcli 1.14.6 → 1.15.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 (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 +1652 -13
  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 +1131 -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 -5
@@ -0,0 +1,723 @@
1
+ /**
2
+ * Hooks Routing Commands
3
+ * Route/explain/pretrain/build-agents/metrics/transfer/list subcommands
4
+ * Extracted from hooks.ts (ARCH-1)
5
+ */
6
+ import { output } from '../output.js';
7
+ import { callMCPTool, MCPClientError } from '../mcp-client.js';
8
+ import { storeCommand } from './transfer-store.js';
9
+ // Route subcommand
10
+ export const routeCommand = {
11
+ name: 'route',
12
+ description: 'Route task to optimal agent using learned patterns',
13
+ options: [
14
+ {
15
+ name: 'task',
16
+ short: 't',
17
+ description: 'Task description',
18
+ type: 'string',
19
+ required: true
20
+ },
21
+ {
22
+ name: 'context',
23
+ short: 'c',
24
+ description: 'Additional context',
25
+ type: 'string'
26
+ },
27
+ {
28
+ name: 'top-k',
29
+ short: 'K',
30
+ description: 'Number of top agent suggestions',
31
+ type: 'number',
32
+ default: 3
33
+ }
34
+ ],
35
+ examples: [
36
+ { command: 'monomind hooks route -t "Fix authentication bug"', description: 'Route task to optimal agent' },
37
+ { command: 'monomind hooks route -t "Optimize database queries" -K 5', description: 'Get top 5 suggestions' }
38
+ ],
39
+ action: async (ctx) => {
40
+ const task = ctx.args[0] || ctx.flags.task;
41
+ const topK = ctx.flags['top-k'] || 3;
42
+ if (!task) {
43
+ output.printError('Task description is required. Use --task or -t flag.');
44
+ return { success: false, exitCode: 1 };
45
+ }
46
+ output.printInfo(`Routing task: ${output.highlight(task)}`);
47
+ try {
48
+ // Call MCP tool for routing
49
+ const result = await callMCPTool('hooks_route', {
50
+ task,
51
+ topK,
52
+ context: ctx.flags.context,
53
+ includeReasoning: true,
54
+ });
55
+ if (ctx.flags.format === 'json') {
56
+ output.printJson(result);
57
+ return { success: true, data: result };
58
+ }
59
+ output.writeln();
60
+ output.printBox([
61
+ `Task: ${result.task}`,
62
+ `Top Agent: ${output.highlight(result.topAgent)}`,
63
+ `Confidence: ${(result.confidence * 100).toFixed(1)}%`,
64
+ `Method: ${result.routing?.method ?? 'keyword'}`
65
+ ].join('\n'), 'Routing Decision');
66
+ if (result.recommendations.length > 0) {
67
+ output.writeln();
68
+ output.writeln(output.bold('Agent Recommendations'));
69
+ output.printTable({
70
+ columns: [
71
+ { key: 'agent', header: 'Agent', width: 20 },
72
+ { key: 'confidence', header: 'Confidence', width: 12, align: 'right', format: (v) => `${(Number(v) * 100).toFixed(1)}%` },
73
+ { key: 'reason', header: 'Reason', width: 35 },
74
+ { key: 'estimatedTime', header: 'Est. Time', width: 12, format: (v) => v ? String(v) : 'N/A' }
75
+ ],
76
+ data: result.recommendations.slice(0, topK)
77
+ });
78
+ }
79
+ return { success: true, data: result };
80
+ }
81
+ catch (error) {
82
+ if (error instanceof MCPClientError) {
83
+ output.printError(`Routing failed: ${error.message}`);
84
+ }
85
+ else {
86
+ output.printError(`Unexpected error: ${String(error)}`);
87
+ }
88
+ return { success: false, exitCode: 1 };
89
+ }
90
+ }
91
+ };
92
+ // Explain subcommand
93
+ export const explainCommand = {
94
+ name: 'explain',
95
+ description: 'Explain routing decision with transparency',
96
+ options: [
97
+ {
98
+ name: 'task',
99
+ short: 't',
100
+ description: 'Task description',
101
+ type: 'string',
102
+ required: true
103
+ },
104
+ {
105
+ name: 'agent',
106
+ short: 'a',
107
+ description: 'Agent type to explain',
108
+ type: 'string'
109
+ },
110
+ {
111
+ name: 'verbose',
112
+ short: 'v',
113
+ description: 'Verbose explanation',
114
+ type: 'boolean',
115
+ default: false
116
+ }
117
+ ],
118
+ examples: [
119
+ { command: 'monomind hooks explain -t "Fix authentication bug"', description: 'Explain routing decision' },
120
+ { command: 'monomind hooks explain -t "Optimize queries" -a coder --verbose', description: 'Verbose explanation for specific agent' }
121
+ ],
122
+ action: async (ctx) => {
123
+ const task = ctx.args[0] || ctx.flags.task;
124
+ if (!task) {
125
+ output.printError('Task description is required. Use --task or -t flag.');
126
+ return { success: false, exitCode: 1 };
127
+ }
128
+ output.printInfo(`Explaining routing for: ${output.highlight(task)}`);
129
+ try {
130
+ // Call MCP tool for explanation
131
+ const result = await callMCPTool('hooks_explain', {
132
+ task,
133
+ agent: ctx.flags.agent,
134
+ verbose: ctx.flags.verbose || false,
135
+ });
136
+ if (ctx.flags.format === 'json') {
137
+ output.printJson(result);
138
+ return { success: true, data: result };
139
+ }
140
+ output.writeln();
141
+ output.writeln(output.bold('Decision Explanation'));
142
+ output.writeln();
143
+ output.writeln(result.explanation);
144
+ output.writeln();
145
+ output.printBox([
146
+ `Agent: ${output.highlight(result.decision.agent)}`,
147
+ `Confidence: ${(result.decision.confidence * 100).toFixed(1)}%`
148
+ ].join('\n'), 'Final Decision');
149
+ if (result.decision.reasoning.length > 0) {
150
+ output.writeln();
151
+ output.writeln(output.bold('Reasoning Steps'));
152
+ output.printList(result.decision.reasoning.map((r, i) => `${i + 1}. ${r}`));
153
+ }
154
+ if (result.factors.length > 0) {
155
+ output.writeln();
156
+ output.writeln(output.bold('Decision Factors'));
157
+ output.printTable({
158
+ columns: [
159
+ { key: 'factor', header: 'Factor', width: 20 },
160
+ { key: 'weight', header: 'Weight', width: 10, align: 'right', format: (v) => `${(Number(v) * 100).toFixed(0)}%` },
161
+ { key: 'value', header: 'Value', width: 10, align: 'right', format: (v) => Number(v).toFixed(2) },
162
+ { key: 'impact', header: 'Impact', width: 25 }
163
+ ],
164
+ data: result.factors
165
+ });
166
+ }
167
+ if (result.patterns.length > 0 && ctx.flags.verbose) {
168
+ output.writeln();
169
+ output.writeln(output.bold('Matched Patterns'));
170
+ result.patterns.forEach((p, i) => {
171
+ output.writeln();
172
+ output.writeln(`${i + 1}. ${output.highlight(p.pattern)} (${(p.matchScore * 100).toFixed(1)}% match)`);
173
+ if (p.examples.length > 0) {
174
+ output.printList(p.examples.slice(0, 3).map(e => output.dim(` ${e}`)));
175
+ }
176
+ });
177
+ }
178
+ return { success: true, data: result };
179
+ }
180
+ catch (error) {
181
+ if (error instanceof MCPClientError) {
182
+ output.printError(`Explanation failed: ${error.message}`);
183
+ }
184
+ else {
185
+ output.printError(`Unexpected error: ${String(error)}`);
186
+ }
187
+ return { success: false, exitCode: 1 };
188
+ }
189
+ }
190
+ };
191
+ // Pretrain subcommand
192
+ export const pretrainCommand = {
193
+ name: 'pretrain',
194
+ description: 'Bootstrap intelligence from repository (4-step pipeline + embeddings)',
195
+ options: [
196
+ {
197
+ name: 'path',
198
+ short: 'p',
199
+ description: 'Repository path',
200
+ type: 'string',
201
+ default: '.'
202
+ },
203
+ {
204
+ name: 'depth',
205
+ short: 'd',
206
+ description: 'Analysis depth (shallow, medium, deep)',
207
+ type: 'string',
208
+ default: 'medium',
209
+ choices: ['shallow', 'medium', 'deep']
210
+ },
211
+ {
212
+ name: 'skip-cache',
213
+ description: 'Skip cached analysis',
214
+ type: 'boolean',
215
+ default: false
216
+ },
217
+ {
218
+ name: 'with-embeddings',
219
+ description: 'Index documents for semantic search during pretraining',
220
+ type: 'boolean',
221
+ default: true
222
+ },
223
+ {
224
+ name: 'embedding-model',
225
+ description: 'ONNX embedding model',
226
+ type: 'string',
227
+ default: 'Xenova/all-MiniLM-L6-v2',
228
+ choices: ['Xenova/all-MiniLM-L6-v2', 'Xenova/all-mpnet-base-v2']
229
+ },
230
+ {
231
+ name: 'file-types',
232
+ description: 'File extensions to index (comma-separated)',
233
+ type: 'string',
234
+ default: 'ts,js,py,md,json'
235
+ }
236
+ ],
237
+ examples: [
238
+ { command: 'monomind hooks pretrain', description: 'Pretrain with embeddings indexing' },
239
+ { command: 'monomind hooks pretrain -p ../my-project --depth deep', description: 'Deep analysis of specific project' },
240
+ { command: 'monomind hooks pretrain --no-with-embeddings', description: 'Skip embedding indexing' },
241
+ { command: 'monomind hooks pretrain --file-types ts,tsx,js', description: 'Index only TypeScript/JS files' }
242
+ ],
243
+ action: async (ctx) => {
244
+ const repoPath = ctx.flags.path || '.';
245
+ const depth = ctx.flags.depth || 'medium';
246
+ const withEmbeddings = ctx.flags['with-embeddings'] !== false && ctx.flags.withEmbeddings !== false;
247
+ const embeddingModel = (ctx.flags['embedding-model'] || ctx.flags.embeddingModel || 'Xenova/all-MiniLM-L6-v2');
248
+ const fileTypes = (ctx.flags['file-types'] || ctx.flags.fileTypes || 'ts,js,py,md,json');
249
+ output.writeln();
250
+ output.writeln(output.bold('Pretraining Intelligence (4-Step Pipeline + Embeddings)'));
251
+ output.writeln();
252
+ const steps = [
253
+ { name: 'RETRIEVE', desc: 'Top-k memory injection with MMR diversity' },
254
+ { name: 'JUDGE', desc: 'LLM-as-judge trajectory evaluation' },
255
+ { name: 'DISTILL', desc: 'Extract strategy memories from trajectories' },
256
+ { name: 'CONSOLIDATE', desc: 'Dedup, detect contradictions, prune old patterns' }
257
+ ];
258
+ // Add embedding steps if enabled
259
+ if (withEmbeddings) {
260
+ steps.push({ name: 'EMBED', desc: `Index documents with ${embeddingModel} (ONNX)` }, { name: 'HYPERBOLIC', desc: 'Project to Poincaré ball for hierarchy preservation' });
261
+ }
262
+ const spinner = output.createSpinner({ text: 'Starting pretraining...', spinner: 'dots' });
263
+ try {
264
+ spinner.start();
265
+ // Display progress for each step
266
+ for (const step of steps) {
267
+ spinner.setText(`${step.name}: ${step.desc}`);
268
+ await new Promise(resolve => setTimeout(resolve, 800));
269
+ }
270
+ // Call MCP tool for pretraining
271
+ const result = await callMCPTool('hooks_pretrain', {
272
+ path: repoPath,
273
+ depth,
274
+ skipCache: ctx.flags['skip-cache'] || false,
275
+ withEmbeddings,
276
+ embeddingModel,
277
+ fileTypes: fileTypes.split(',').map((t) => t.trim()),
278
+ });
279
+ spinner.succeed('Pretraining completed');
280
+ if (ctx.flags.format === 'json') {
281
+ output.printJson(result);
282
+ return { success: true, data: result };
283
+ }
284
+ output.writeln();
285
+ // Base stats
286
+ const tableData = [
287
+ { metric: 'Files Analyzed', value: result.stats.filesAnalyzed },
288
+ { metric: 'Patterns Extracted', value: result.stats.patternsExtracted },
289
+ { metric: 'Strategies Learned', value: result.stats.strategiesLearned },
290
+ { metric: 'Trajectories Evaluated', value: result.stats.trajectoriesEvaluated },
291
+ { metric: 'Contradictions Resolved', value: result.stats.contradictionsResolved },
292
+ ];
293
+ // Add embedding stats if available
294
+ if (withEmbeddings && result.stats.documentsIndexed !== undefined) {
295
+ tableData.push({ metric: 'Documents Indexed', value: result.stats.documentsIndexed }, { metric: 'Embeddings Generated', value: result.stats.embeddingsGenerated || 0 }, { metric: 'Hyperbolic Projections', value: result.stats.hyperbolicProjections || 0 });
296
+ }
297
+ tableData.push({ metric: 'Duration', value: `${(result.duration / 1000).toFixed(1)}s` });
298
+ output.printTable({
299
+ columns: [
300
+ { key: 'metric', header: 'Metric', width: 30 },
301
+ { key: 'value', header: 'Value', width: 15, align: 'right' }
302
+ ],
303
+ data: tableData
304
+ });
305
+ output.writeln();
306
+ output.printSuccess('Repository intelligence bootstrapped successfully');
307
+ if (withEmbeddings) {
308
+ output.writeln(output.dim(' Semantic search enabled: Use "embeddings search -q <query>" to search'));
309
+ }
310
+ output.writeln(output.dim(' Next step: Run "monomind hooks build-agents" to generate optimized configs'));
311
+ return { success: true, data: result };
312
+ }
313
+ catch (error) {
314
+ spinner.fail('Pretraining failed');
315
+ if (error instanceof MCPClientError) {
316
+ output.printError(`Pretraining error: ${error.message}`);
317
+ }
318
+ else {
319
+ output.printError(`Unexpected error: ${String(error)}`);
320
+ }
321
+ return { success: false, exitCode: 1 };
322
+ }
323
+ }
324
+ };
325
+ // Build agents subcommand
326
+ export const buildAgentsCommand = {
327
+ name: 'build-agents',
328
+ description: 'Generate optimized agent configs from pretrain data',
329
+ options: [
330
+ {
331
+ name: 'output',
332
+ short: 'o',
333
+ description: 'Output directory for agent configs',
334
+ type: 'string',
335
+ default: './agents'
336
+ },
337
+ {
338
+ name: 'focus',
339
+ short: 'f',
340
+ description: 'Focus area (v1-implementation, security, performance, all)',
341
+ type: 'string',
342
+ default: 'all'
343
+ },
344
+ {
345
+ name: 'config-format',
346
+ description: 'Config format (yaml, json)',
347
+ type: 'string',
348
+ default: 'yaml',
349
+ choices: ['yaml', 'json']
350
+ }
351
+ ],
352
+ examples: [
353
+ { command: 'monomind hooks build-agents', description: 'Build all agent configs' },
354
+ { command: 'monomind hooks build-agents --focus security -o ./config/agents', description: 'Build security-focused configs' }
355
+ ],
356
+ action: async (ctx) => {
357
+ const output_dir = ctx.flags.output || './agents';
358
+ const focus = ctx.flags.focus || 'all';
359
+ const configFormat = ctx.flags.configFormat || 'yaml';
360
+ output.printInfo(`Building agent configs (focus: ${output.highlight(focus)})`);
361
+ const spinner = output.createSpinner({ text: 'Generating configs...', spinner: 'dots' });
362
+ try {
363
+ spinner.start();
364
+ // Call MCP tool for building agents
365
+ const result = await callMCPTool('hooks_build-agents', {
366
+ outputDir: output_dir,
367
+ focus,
368
+ format: configFormat,
369
+ includePretrained: true,
370
+ });
371
+ spinner.succeed(`Generated ${result.agents.length} agent configs`);
372
+ if (ctx.flags.format === 'json') {
373
+ output.printJson(result);
374
+ return { success: true, data: result };
375
+ }
376
+ output.writeln();
377
+ output.writeln(output.bold('Generated Agent Configs'));
378
+ output.printTable({
379
+ columns: [
380
+ { key: 'type', header: 'Agent Type', width: 20 },
381
+ { key: 'configFile', header: 'Config File', width: 30 },
382
+ { key: 'capabilities', header: 'Capabilities', width: 10, align: 'right', format: (v) => String(Array.isArray(v) ? v.length : 0) }
383
+ ],
384
+ data: result.agents
385
+ });
386
+ output.writeln();
387
+ output.printTable({
388
+ columns: [
389
+ { key: 'metric', header: 'Metric', width: 30 },
390
+ { key: 'value', header: 'Value', width: 15, align: 'right' }
391
+ ],
392
+ data: [
393
+ { metric: 'Configs Generated', value: result.stats.configsGenerated },
394
+ { metric: 'Patterns Applied', value: result.stats.patternsApplied },
395
+ { metric: 'Optimizations Included', value: result.stats.optimizationsIncluded }
396
+ ]
397
+ });
398
+ output.writeln();
399
+ output.printSuccess(`Agent configs saved to ${output_dir}`);
400
+ return { success: true, data: result };
401
+ }
402
+ catch (error) {
403
+ spinner.fail('Agent config generation failed');
404
+ if (error instanceof MCPClientError) {
405
+ output.printError(`Build agents error: ${error.message}`);
406
+ }
407
+ else {
408
+ output.printError(`Unexpected error: ${String(error)}`);
409
+ }
410
+ return { success: false, exitCode: 1 };
411
+ }
412
+ }
413
+ };
414
+ // Metrics subcommand
415
+ export const metricsCommand = {
416
+ name: 'metrics',
417
+ description: 'View learning metrics dashboard',
418
+ options: [
419
+ {
420
+ name: 'period',
421
+ short: 'p',
422
+ description: 'Time period (1h, 24h, 7d, 30d, all)',
423
+ type: 'string',
424
+ default: '24h'
425
+ },
426
+ {
427
+ name: 'v1-dashboard',
428
+ description: 'Show v1 performance dashboard',
429
+ type: 'boolean',
430
+ default: false
431
+ },
432
+ {
433
+ name: 'category',
434
+ short: 'c',
435
+ description: 'Metric category (patterns, agents, commands, performance)',
436
+ type: 'string'
437
+ }
438
+ ],
439
+ examples: [
440
+ { command: 'monomind hooks metrics', description: 'View 24h metrics' },
441
+ { command: 'monomind hooks metrics --period 7d --v1-dashboard', description: 'v1 metrics for 7 days' }
442
+ ],
443
+ action: async (ctx) => {
444
+ const period = ctx.flags.period || '24h';
445
+ const v1Dashboard = ctx.flags.v1Dashboard;
446
+ output.writeln();
447
+ output.writeln(output.bold(`Learning Metrics Dashboard (${period})`));
448
+ output.writeln();
449
+ try {
450
+ // Call MCP tool for metrics
451
+ const result = await callMCPTool('hooks_metrics', {
452
+ period,
453
+ includev1: v1Dashboard,
454
+ category: ctx.flags.category,
455
+ });
456
+ if (ctx.flags.format === 'json') {
457
+ output.printJson(result);
458
+ return { success: true, data: result };
459
+ }
460
+ // Patterns section
461
+ output.writeln(output.bold('📊 Pattern Learning'));
462
+ output.printTable({
463
+ columns: [
464
+ { key: 'metric', header: 'Metric', width: 25 },
465
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
466
+ ],
467
+ data: [
468
+ { metric: 'Total Patterns', value: result.patterns.total },
469
+ { metric: 'Successful', value: output.success(String(result.patterns.successful)) },
470
+ { metric: 'Failed', value: output.error(String(result.patterns.failed)) },
471
+ { metric: 'Avg Confidence', value: `${(result.patterns.avgConfidence * 100).toFixed(1)}%` }
472
+ ]
473
+ });
474
+ output.writeln();
475
+ // Agent routing section
476
+ output.writeln(output.bold('🤖 Agent Routing'));
477
+ output.printTable({
478
+ columns: [
479
+ { key: 'metric', header: 'Metric', width: 25 },
480
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
481
+ ],
482
+ data: [
483
+ { metric: 'Routing Accuracy', value: `${(result.agents.routingAccuracy * 100).toFixed(1)}%` },
484
+ { metric: 'Total Routes', value: result.agents.totalRoutes },
485
+ { metric: 'Top Agent', value: output.highlight(result.agents.topAgent) }
486
+ ]
487
+ });
488
+ output.writeln();
489
+ // Command execution section
490
+ output.writeln(output.bold('⚡ Command Execution'));
491
+ output.printTable({
492
+ columns: [
493
+ { key: 'metric', header: 'Metric', width: 25 },
494
+ { key: 'value', header: 'Value', width: 20, align: 'right' }
495
+ ],
496
+ data: [
497
+ { metric: 'Total Executed', value: result.commands.totalExecuted },
498
+ { metric: 'Success Rate', value: `${(result.commands.successRate * 100).toFixed(1)}%` },
499
+ { metric: 'Avg Risk Score', value: result.commands.avgRiskScore.toFixed(2) }
500
+ ]
501
+ });
502
+ if (v1Dashboard && result.performance) {
503
+ const p = result.performance;
504
+ output.writeln();
505
+ output.writeln(output.bold('🚀 v1 Performance Gains'));
506
+ output.printList([
507
+ `Memory Reduction: ${output.success(p.memoryReduction ?? 'N/A')}`,
508
+ `Search Improvement: ${output.success(p.searchImprovement ?? 'N/A')}`,
509
+ `Token Reduction: ${output.success(p.tokenReduction ?? 'N/A')}`
510
+ ]);
511
+ }
512
+ return { success: true, data: result };
513
+ }
514
+ catch (error) {
515
+ if (error instanceof MCPClientError) {
516
+ output.printError(`Metrics error: ${error.message}`);
517
+ }
518
+ else {
519
+ output.printError(`Unexpected error: ${String(error)}`);
520
+ }
521
+ return { success: false, exitCode: 1 };
522
+ }
523
+ }
524
+ };
525
+ // Transfer from project subcommand
526
+ export const transferFromProjectCommand = {
527
+ name: 'from-project',
528
+ aliases: ['project'],
529
+ description: 'Transfer patterns from another project',
530
+ options: [
531
+ {
532
+ name: 'source',
533
+ short: 's',
534
+ description: 'Source project path',
535
+ type: 'string',
536
+ required: true
537
+ },
538
+ {
539
+ name: 'filter',
540
+ short: 'f',
541
+ description: 'Filter patterns by type',
542
+ type: 'string'
543
+ },
544
+ {
545
+ name: 'min-confidence',
546
+ short: 'm',
547
+ description: 'Minimum confidence threshold (0-1)',
548
+ type: 'number',
549
+ default: 0.7
550
+ }
551
+ ],
552
+ examples: [
553
+ { command: 'monomind hooks transfer from-project -s ../old-project', description: 'Transfer all patterns' },
554
+ { command: 'monomind hooks transfer from-project -s ../prod --filter security -m 0.9', description: 'Transfer high-confidence security patterns' }
555
+ ],
556
+ action: async (ctx) => {
557
+ const sourcePath = ctx.args[0] || ctx.flags.source;
558
+ const minConfidence = ctx.flags['min-confidence'] || 0.7;
559
+ if (!sourcePath) {
560
+ output.printError('Source project path is required. Use --source or -s flag.');
561
+ return { success: false, exitCode: 1 };
562
+ }
563
+ output.printInfo(`Transferring patterns from: ${output.highlight(sourcePath)}`);
564
+ const spinner = output.createSpinner({ text: 'Analyzing source patterns...', spinner: 'dots' });
565
+ try {
566
+ spinner.start();
567
+ // Call MCP tool for transfer
568
+ const result = await callMCPTool('hooks_transfer', {
569
+ sourcePath,
570
+ filter: ctx.flags.filter,
571
+ minConfidence,
572
+ mergeStrategy: 'keep-highest-confidence',
573
+ });
574
+ spinner.succeed(`Transferred ${result.transferred.total} patterns`);
575
+ if (ctx.flags.format === 'json') {
576
+ output.printJson(result);
577
+ return { success: true, data: result };
578
+ }
579
+ output.writeln();
580
+ output.writeln(output.bold('Transfer Summary'));
581
+ output.printTable({
582
+ columns: [
583
+ { key: 'category', header: 'Category', width: 25 },
584
+ { key: 'count', header: 'Count', width: 15, align: 'right' }
585
+ ],
586
+ data: [
587
+ { category: 'Total Transferred', count: output.success(String(result.transferred.total)) },
588
+ { category: 'Skipped (Low Confidence)', count: result.skipped.lowConfidence },
589
+ { category: 'Skipped (Duplicates)', count: result.skipped.duplicates },
590
+ { category: 'Skipped (Conflicts)', count: result.skipped.conflicts }
591
+ ]
592
+ });
593
+ if (Object.keys(result.transferred.byType).length > 0) {
594
+ output.writeln();
595
+ output.writeln(output.bold('By Pattern Type'));
596
+ output.printTable({
597
+ columns: [
598
+ { key: 'type', header: 'Type', width: 20 },
599
+ { key: 'count', header: 'Count', width: 15, align: 'right' }
600
+ ],
601
+ data: Object.entries(result.transferred.byType).map(([type, count]) => ({ type, count }))
602
+ });
603
+ }
604
+ output.writeln();
605
+ output.printList([
606
+ `Avg Confidence: ${(result.stats.avgConfidence * 100).toFixed(1)}%`,
607
+ `Avg Age: ${result.stats.avgAge}`
608
+ ]);
609
+ return { success: true, data: result };
610
+ }
611
+ catch (error) {
612
+ spinner.fail('Transfer failed');
613
+ if (error instanceof MCPClientError) {
614
+ output.printError(`Transfer error: ${error.message}`);
615
+ }
616
+ else {
617
+ output.printError(`Unexpected error: ${String(error)}`);
618
+ }
619
+ return { success: false, exitCode: 1 };
620
+ }
621
+ }
622
+ };
623
+ // Parent transfer command combining all transfer methods
624
+ export const transferCommand = {
625
+ name: 'transfer',
626
+ description: 'Transfer patterns and plugins via IPFS-based decentralized registry',
627
+ subcommands: [storeCommand, transferFromProjectCommand],
628
+ examples: [
629
+ { command: 'monomind hooks transfer store list', description: 'List patterns from registry' },
630
+ { command: 'monomind hooks transfer store search -q routing', description: 'Search patterns' },
631
+ { command: 'monomind hooks transfer store download -p seraphine-genesis', description: 'Download pattern' },
632
+ { command: 'monomind hooks transfer store publish', description: 'Publish pattern to registry' },
633
+ { command: 'monomind hooks transfer from-project -s ../other-project', description: 'Transfer from project' },
634
+ ],
635
+ action: async () => {
636
+ output.writeln();
637
+ output.writeln(output.bold('Pattern Transfer System'));
638
+ output.writeln(output.dim('Decentralized pattern sharing via IPFS'));
639
+ output.writeln();
640
+ output.writeln('Subcommands:');
641
+ output.printList([
642
+ `${output.highlight('store')} - Pattern marketplace (list, search, download, publish)`,
643
+ `${output.highlight('from-project')} - Transfer patterns from another project`,
644
+ ]);
645
+ output.writeln();
646
+ output.writeln(output.bold('IPFS-Based Features:'));
647
+ output.printList([
648
+ 'Decentralized registry via IPNS for discoverability',
649
+ 'Content-addressed storage for integrity',
650
+ 'Ed25519 signatures for verification',
651
+ 'Anonymization levels: minimal, standard, strict, paranoid',
652
+ 'Trust levels: unverified, community, verified, official',
653
+ ]);
654
+ output.writeln();
655
+ output.writeln('Run "monomind hooks transfer <subcommand> --help" for details');
656
+ return { success: true };
657
+ }
658
+ };
659
+ // List subcommand
660
+ export const listCommand = {
661
+ name: 'list',
662
+ aliases: ['ls'],
663
+ description: 'List all registered hooks',
664
+ options: [
665
+ {
666
+ name: 'enabled',
667
+ short: 'e',
668
+ description: 'Show only enabled hooks',
669
+ type: 'boolean',
670
+ default: false
671
+ },
672
+ {
673
+ name: 'type',
674
+ short: 't',
675
+ description: 'Filter by hook type',
676
+ type: 'string'
677
+ }
678
+ ],
679
+ action: async (ctx) => {
680
+ try {
681
+ // Call MCP tool for list
682
+ const result = await callMCPTool('hooks_list', {
683
+ enabled: ctx.flags.enabled || undefined,
684
+ type: ctx.flags.type || undefined,
685
+ });
686
+ if (ctx.flags.format === 'json') {
687
+ output.printJson(result);
688
+ return { success: true, data: result };
689
+ }
690
+ output.writeln();
691
+ output.writeln(output.bold('Registered Hooks'));
692
+ output.writeln();
693
+ if (result.hooks.length === 0) {
694
+ output.printInfo('No hooks found matching criteria');
695
+ return { success: true, data: result };
696
+ }
697
+ output.printTable({
698
+ columns: [
699
+ { key: 'name', header: 'Name', width: 20 },
700
+ { key: 'type', header: 'Type', width: 15 },
701
+ { key: 'enabled', header: 'Enabled', width: 10, format: (v) => v ? output.success('Yes') : output.dim('No') },
702
+ { key: 'priority', header: 'Priority', width: 10, align: 'right' },
703
+ { key: 'executionCount', header: 'Executions', width: 12, align: 'right' },
704
+ { key: 'lastExecuted', header: 'Last Executed', width: 20, format: (v) => v ? new Date(String(v)).toLocaleString() : 'Never' }
705
+ ],
706
+ data: result.hooks
707
+ });
708
+ output.writeln();
709
+ output.printInfo(`Total: ${result.total} hooks`);
710
+ return { success: true, data: result };
711
+ }
712
+ catch (error) {
713
+ if (error instanceof MCPClientError) {
714
+ output.printError(`Failed to list hooks: ${error.message}`);
715
+ }
716
+ else {
717
+ output.printError(`Unexpected error: ${String(error)}`);
718
+ }
719
+ return { success: false, exitCode: 1 };
720
+ }
721
+ }
722
+ };
723
+ //# sourceMappingURL=hooks-routing-commands.js.map