@sparkleideas/cli 3.1.0-alpha.37 → 3.1.0-alpha.64

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 (627) hide show
  1. package/.claude/helpers/learning-service.mjs +3 -3
  2. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  3. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  4. package/dist/src/benchmarks/pretrain/index.js +404 -0
  5. package/dist/src/benchmarks/pretrain/index.js.map +1 -0
  6. package/dist/src/commands/agent.d.ts +8 -0
  7. package/dist/src/commands/agent.d.ts.map +1 -0
  8. package/dist/src/commands/agent.js +819 -0
  9. package/dist/src/commands/agent.js.map +1 -0
  10. package/dist/src/commands/analyze.d.ts +19 -0
  11. package/dist/src/commands/analyze.d.ts.map +1 -0
  12. package/dist/src/commands/analyze.js +1823 -0
  13. package/dist/src/commands/analyze.js.map +1 -0
  14. package/dist/src/commands/benchmark.d.ts +10 -0
  15. package/dist/src/commands/benchmark.d.ts.map +1 -0
  16. package/dist/src/commands/benchmark.js +459 -0
  17. package/dist/src/commands/benchmark.js.map +1 -0
  18. package/dist/src/commands/claims.d.ts +10 -0
  19. package/dist/src/commands/claims.d.ts.map +1 -0
  20. package/dist/src/commands/claims.js +373 -0
  21. package/dist/src/commands/claims.js.map +1 -0
  22. package/dist/src/commands/completions.d.ts +10 -0
  23. package/dist/src/commands/completions.d.ts.map +1 -0
  24. package/dist/src/commands/completions.js +539 -0
  25. package/dist/src/commands/completions.js.map +1 -0
  26. package/dist/src/commands/config.d.ts +8 -0
  27. package/dist/src/commands/config.d.ts.map +1 -0
  28. package/dist/src/commands/config.js +406 -0
  29. package/dist/src/commands/config.js.map +1 -0
  30. package/dist/src/commands/daemon.d.ts +8 -0
  31. package/dist/src/commands/daemon.d.ts.map +1 -0
  32. package/dist/src/commands/daemon.js +593 -0
  33. package/dist/src/commands/daemon.js.map +1 -0
  34. package/dist/src/commands/deployment.d.ts +10 -0
  35. package/dist/src/commands/deployment.d.ts.map +1 -0
  36. package/dist/src/commands/deployment.js +289 -0
  37. package/dist/src/commands/deployment.js.map +1 -0
  38. package/dist/src/commands/doctor.d.ts +10 -0
  39. package/dist/src/commands/doctor.d.ts.map +1 -0
  40. package/dist/src/commands/doctor.js +571 -0
  41. package/dist/src/commands/doctor.js.map +1 -0
  42. package/dist/src/commands/embeddings.d.ts +18 -0
  43. package/dist/src/commands/embeddings.d.ts.map +1 -0
  44. package/dist/src/commands/embeddings.js +1576 -0
  45. package/dist/src/commands/embeddings.js.map +1 -0
  46. package/dist/src/commands/guidance.d.ts +8 -0
  47. package/dist/src/commands/guidance.d.ts.map +1 -0
  48. package/dist/src/commands/guidance.js +560 -0
  49. package/dist/src/commands/guidance.js.map +1 -0
  50. package/dist/src/commands/hive-mind.d.ts +11 -0
  51. package/dist/src/commands/hive-mind.d.ts.map +1 -0
  52. package/dist/src/commands/hive-mind.js +1230 -0
  53. package/dist/src/commands/hive-mind.js.map +1 -0
  54. package/dist/src/commands/hooks.d.ts +8 -0
  55. package/dist/src/commands/hooks.d.ts.map +1 -0
  56. package/dist/src/commands/hooks.js +3756 -0
  57. package/dist/src/commands/hooks.js.map +1 -0
  58. package/dist/src/commands/index.d.ts +108 -0
  59. package/dist/src/commands/index.d.ts.map +1 -0
  60. package/dist/src/commands/index.js +359 -0
  61. package/dist/src/commands/index.js.map +1 -0
  62. package/dist/src/commands/init.d.ts +8 -0
  63. package/dist/src/commands/init.d.ts.map +1 -0
  64. package/dist/src/commands/init.js +970 -0
  65. package/dist/src/commands/init.js.map +1 -0
  66. package/dist/src/commands/issues.d.ts +21 -0
  67. package/dist/src/commands/issues.d.ts.map +1 -0
  68. package/dist/src/commands/issues.js +567 -0
  69. package/dist/src/commands/issues.js.map +1 -0
  70. package/dist/src/commands/mcp.d.ts +11 -0
  71. package/dist/src/commands/mcp.d.ts.map +1 -0
  72. package/dist/src/commands/mcp.js +700 -0
  73. package/dist/src/commands/mcp.js.map +1 -0
  74. package/dist/src/commands/memory.d.ts +8 -0
  75. package/dist/src/commands/memory.d.ts.map +1 -0
  76. package/dist/src/commands/memory.js +1268 -0
  77. package/dist/src/commands/memory.js.map +1 -0
  78. package/dist/src/commands/migrate.d.ts +8 -0
  79. package/dist/src/commands/migrate.d.ts.map +1 -0
  80. package/dist/src/commands/migrate.js +410 -0
  81. package/dist/src/commands/migrate.js.map +1 -0
  82. package/dist/src/commands/neural.d.ts +10 -0
  83. package/dist/src/commands/neural.d.ts.map +1 -0
  84. package/dist/src/commands/neural.js +1448 -0
  85. package/dist/src/commands/neural.js.map +1 -0
  86. package/dist/src/commands/performance.d.ts +10 -0
  87. package/dist/src/commands/performance.d.ts.map +1 -0
  88. package/dist/src/commands/performance.js +579 -0
  89. package/dist/src/commands/performance.js.map +1 -0
  90. package/dist/src/commands/plugins.d.ts +11 -0
  91. package/dist/src/commands/plugins.d.ts.map +1 -0
  92. package/dist/src/commands/plugins.js +820 -0
  93. package/dist/src/commands/plugins.js.map +1 -0
  94. package/dist/src/commands/process.d.ts +10 -0
  95. package/dist/src/commands/process.d.ts.map +1 -0
  96. package/dist/src/commands/process.js +641 -0
  97. package/dist/src/commands/process.js.map +1 -0
  98. package/dist/src/commands/progress.d.ts +11 -0
  99. package/dist/src/commands/progress.d.ts.map +1 -0
  100. package/dist/src/commands/progress.js +259 -0
  101. package/dist/src/commands/progress.js.map +1 -0
  102. package/dist/src/commands/providers.d.ts +10 -0
  103. package/dist/src/commands/providers.d.ts.map +1 -0
  104. package/dist/src/commands/providers.js +232 -0
  105. package/dist/src/commands/providers.js.map +1 -0
  106. package/dist/src/commands/route.d.ts +16 -0
  107. package/dist/src/commands/route.d.ts.map +1 -0
  108. package/dist/src/commands/route.js +813 -0
  109. package/dist/src/commands/route.js.map +1 -0
  110. package/dist/src/commands/ruvector/backup.d.ts +11 -0
  111. package/dist/src/commands/ruvector/backup.d.ts.map +1 -0
  112. package/dist/src/commands/ruvector/backup.js +746 -0
  113. package/dist/src/commands/ruvector/backup.js.map +1 -0
  114. package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
  115. package/dist/src/commands/ruvector/benchmark.d.ts.map +1 -0
  116. package/dist/src/commands/ruvector/benchmark.js +480 -0
  117. package/dist/src/commands/ruvector/benchmark.js.map +1 -0
  118. package/dist/src/commands/ruvector/import.d.ts +18 -0
  119. package/dist/src/commands/ruvector/import.d.ts.map +1 -0
  120. package/dist/src/commands/ruvector/import.js +349 -0
  121. package/dist/src/commands/ruvector/import.js.map +1 -0
  122. package/dist/src/commands/ruvector/index.d.ts +29 -0
  123. package/dist/src/commands/ruvector/index.d.ts.map +1 -0
  124. package/dist/src/commands/ruvector/index.js +129 -0
  125. package/dist/src/commands/ruvector/index.js.map +1 -0
  126. package/dist/src/commands/ruvector/init.d.ts +11 -0
  127. package/dist/src/commands/ruvector/init.d.ts.map +1 -0
  128. package/dist/src/commands/ruvector/init.js +431 -0
  129. package/dist/src/commands/ruvector/init.js.map +1 -0
  130. package/dist/src/commands/ruvector/migrate.d.ts +11 -0
  131. package/dist/src/commands/ruvector/migrate.d.ts.map +1 -0
  132. package/dist/src/commands/ruvector/migrate.js +481 -0
  133. package/dist/src/commands/ruvector/migrate.js.map +1 -0
  134. package/dist/src/commands/ruvector/optimize.d.ts +11 -0
  135. package/dist/src/commands/ruvector/optimize.d.ts.map +1 -0
  136. package/dist/src/commands/ruvector/optimize.js +503 -0
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -0
  138. package/dist/src/commands/ruvector/setup.d.ts +18 -0
  139. package/dist/src/commands/ruvector/setup.d.ts.map +1 -0
  140. package/dist/src/commands/ruvector/setup.js +765 -0
  141. package/dist/src/commands/ruvector/setup.js.map +1 -0
  142. package/dist/src/commands/ruvector/status.d.ts +11 -0
  143. package/dist/src/commands/ruvector/status.d.ts.map +1 -0
  144. package/dist/src/commands/ruvector/status.js +456 -0
  145. package/dist/src/commands/ruvector/status.js.map +1 -0
  146. package/dist/src/commands/security.d.ts +10 -0
  147. package/dist/src/commands/security.d.ts.map +1 -0
  148. package/dist/src/commands/security.js +575 -0
  149. package/dist/src/commands/security.js.map +1 -0
  150. package/dist/src/commands/session.d.ts +8 -0
  151. package/dist/src/commands/session.d.ts.map +1 -0
  152. package/dist/src/commands/session.js +750 -0
  153. package/dist/src/commands/session.js.map +1 -0
  154. package/dist/src/commands/start.d.ts +8 -0
  155. package/dist/src/commands/start.d.ts.map +1 -0
  156. package/dist/src/commands/start.js +418 -0
  157. package/dist/src/commands/start.js.map +1 -0
  158. package/dist/src/commands/status.d.ts +8 -0
  159. package/dist/src/commands/status.d.ts.map +1 -0
  160. package/dist/src/commands/status.js +584 -0
  161. package/dist/src/commands/status.js.map +1 -0
  162. package/dist/src/commands/swarm.d.ts +8 -0
  163. package/dist/src/commands/swarm.d.ts.map +1 -0
  164. package/dist/src/commands/swarm.js +748 -0
  165. package/dist/src/commands/swarm.js.map +1 -0
  166. package/dist/src/commands/task.d.ts +8 -0
  167. package/dist/src/commands/task.d.ts.map +1 -0
  168. package/dist/src/commands/task.js +671 -0
  169. package/dist/src/commands/task.js.map +1 -0
  170. package/dist/src/commands/transfer-store.d.ts +13 -0
  171. package/dist/src/commands/transfer-store.d.ts.map +1 -0
  172. package/dist/src/commands/transfer-store.js +428 -0
  173. package/dist/src/commands/transfer-store.js.map +1 -0
  174. package/dist/src/commands/update.d.ts +8 -0
  175. package/dist/src/commands/update.d.ts.map +1 -0
  176. package/dist/src/commands/update.js +276 -0
  177. package/dist/src/commands/update.js.map +1 -0
  178. package/dist/src/commands/workflow.d.ts +8 -0
  179. package/dist/src/commands/workflow.d.ts.map +1 -0
  180. package/dist/src/commands/workflow.js +617 -0
  181. package/dist/src/commands/workflow.js.map +1 -0
  182. package/dist/src/config-adapter.d.ts +15 -0
  183. package/dist/src/config-adapter.d.ts.map +1 -0
  184. package/dist/src/config-adapter.js +186 -0
  185. package/dist/src/config-adapter.js.map +1 -0
  186. package/dist/src/index.d.ts +76 -0
  187. package/dist/src/index.d.ts.map +1 -0
  188. package/dist/src/index.js +470 -0
  189. package/dist/src/index.js.map +1 -0
  190. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  191. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  192. package/dist/src/infrastructure/in-memory-repositories.js +264 -0
  193. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -0
  194. package/dist/src/init/claudemd-generator.d.ts +25 -0
  195. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  196. package/dist/src/init/claudemd-generator.js +486 -0
  197. package/dist/src/init/claudemd-generator.js.map +1 -0
  198. package/dist/src/init/executor.d.ts +41 -0
  199. package/dist/src/init/executor.d.ts.map +1 -0
  200. package/dist/src/init/executor.js +1630 -0
  201. package/dist/src/init/executor.js.map +1 -0
  202. package/dist/src/init/helpers-generator.d.ts +42 -0
  203. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  204. package/dist/src/init/helpers-generator.js +613 -0
  205. package/dist/src/init/helpers-generator.js.map +1 -0
  206. package/dist/src/init/index.d.ts +13 -0
  207. package/dist/src/init/index.d.ts.map +1 -0
  208. package/dist/src/init/index.js +15 -0
  209. package/dist/src/init/index.js.map +1 -0
  210. package/dist/src/init/mcp-generator.d.ts +27 -0
  211. package/dist/src/init/mcp-generator.d.ts.map +1 -0
  212. package/dist/src/init/mcp-generator.js +100 -0
  213. package/dist/src/init/mcp-generator.js.map +1 -0
  214. package/dist/src/init/settings-generator.d.ts +14 -0
  215. package/dist/src/init/settings-generator.d.ts.map +1 -0
  216. package/dist/src/init/settings-generator.js +396 -0
  217. package/dist/src/init/settings-generator.js.map +1 -0
  218. package/dist/src/init/statusline-generator.d.ts +20 -0
  219. package/dist/src/init/statusline-generator.d.ts.map +1 -0
  220. package/dist/src/init/statusline-generator.js +1241 -0
  221. package/dist/src/init/statusline-generator.js.map +1 -0
  222. package/dist/src/init/types.d.ts +279 -0
  223. package/dist/src/init/types.d.ts.map +1 -0
  224. package/dist/src/init/types.js +252 -0
  225. package/dist/src/init/types.js.map +1 -0
  226. package/dist/src/mcp-client.d.ts +92 -0
  227. package/dist/src/mcp-client.d.ts.map +1 -0
  228. package/dist/src/mcp-client.js +233 -0
  229. package/dist/src/mcp-client.js.map +1 -0
  230. package/dist/src/mcp-server.d.ts +161 -0
  231. package/dist/src/mcp-server.d.ts.map +1 -0
  232. package/dist/src/mcp-server.js +601 -0
  233. package/dist/src/mcp-server.js.map +1 -0
  234. package/dist/src/mcp-tools/agent-tools.d.ts +9 -0
  235. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -0
  236. package/dist/src/mcp-tools/agent-tools.js +549 -0
  237. package/dist/src/mcp-tools/agent-tools.js.map +1 -0
  238. package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
  239. package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
  240. package/dist/src/mcp-tools/analyze-tools.js +317 -0
  241. package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
  242. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  243. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  244. package/dist/src/mcp-tools/auto-install.js +131 -0
  245. package/dist/src/mcp-tools/auto-install.js.map +1 -0
  246. package/dist/src/mcp-tools/browser-tools.d.ts +13 -0
  247. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -0
  248. package/dist/src/mcp-tools/browser-tools.js +550 -0
  249. package/dist/src/mcp-tools/browser-tools.js.map +1 -0
  250. package/dist/src/mcp-tools/claims-tools.d.ts +12 -0
  251. package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -0
  252. package/dist/src/mcp-tools/claims-tools.js +732 -0
  253. package/dist/src/mcp-tools/claims-tools.js.map +1 -0
  254. package/dist/src/mcp-tools/config-tools.d.ts +8 -0
  255. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -0
  256. package/dist/src/mcp-tools/config-tools.js +333 -0
  257. package/dist/src/mcp-tools/config-tools.js.map +1 -0
  258. package/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
  259. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -0
  260. package/dist/src/mcp-tools/coordination-tools.js +486 -0
  261. package/dist/src/mcp-tools/coordination-tools.js.map +1 -0
  262. package/dist/src/mcp-tools/daa-tools.d.ts +13 -0
  263. package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -0
  264. package/dist/src/mcp-tools/daa-tools.js +426 -0
  265. package/dist/src/mcp-tools/daa-tools.js.map +1 -0
  266. package/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
  267. package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -0
  268. package/dist/src/mcp-tools/embeddings-tools.js +782 -0
  269. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -0
  270. package/dist/src/mcp-tools/github-tools.d.ts +13 -0
  271. package/dist/src/mcp-tools/github-tools.d.ts.map +1 -0
  272. package/dist/src/mcp-tools/github-tools.js +373 -0
  273. package/dist/src/mcp-tools/github-tools.js.map +1 -0
  274. package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
  275. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
  276. package/dist/src/mcp-tools/hive-mind-tools.js +583 -0
  277. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
  278. package/dist/src/mcp-tools/hooks-tools.d.ts +44 -0
  279. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -0
  280. package/dist/src/mcp-tools/hooks-tools.js +2797 -0
  281. package/dist/src/mcp-tools/hooks-tools.js.map +1 -0
  282. package/dist/src/mcp-tools/index.d.ts +23 -0
  283. package/dist/src/mcp-tools/index.d.ts.map +1 -0
  284. package/dist/src/mcp-tools/index.js +22 -0
  285. package/dist/src/mcp-tools/index.js.map +1 -0
  286. package/dist/src/mcp-tools/memory-tools.d.ts +14 -0
  287. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -0
  288. package/dist/src/mcp-tools/memory-tools.js +482 -0
  289. package/dist/src/mcp-tools/memory-tools.js.map +1 -0
  290. package/dist/src/mcp-tools/neural-tools.d.ts +16 -0
  291. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -0
  292. package/dist/src/mcp-tools/neural-tools.js +456 -0
  293. package/dist/src/mcp-tools/neural-tools.js.map +1 -0
  294. package/dist/src/mcp-tools/performance-tools.d.ts +16 -0
  295. package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -0
  296. package/dist/src/mcp-tools/performance-tools.js +534 -0
  297. package/dist/src/mcp-tools/performance-tools.js.map +1 -0
  298. package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
  299. package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -0
  300. package/dist/src/mcp-tools/progress-tools.js +348 -0
  301. package/dist/src/mcp-tools/progress-tools.js.map +1 -0
  302. package/dist/src/mcp-tools/security-tools.d.ts +18 -0
  303. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -0
  304. package/dist/src/mcp-tools/security-tools.js +434 -0
  305. package/dist/src/mcp-tools/security-tools.js.map +1 -0
  306. package/dist/src/mcp-tools/session-tools.d.ts +8 -0
  307. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -0
  308. package/dist/src/mcp-tools/session-tools.js +315 -0
  309. package/dist/src/mcp-tools/session-tools.js.map +1 -0
  310. package/dist/src/mcp-tools/swarm-tools.d.ts +8 -0
  311. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -0
  312. package/dist/src/mcp-tools/swarm-tools.js +102 -0
  313. package/dist/src/mcp-tools/swarm-tools.js.map +1 -0
  314. package/dist/src/mcp-tools/system-tools.d.ts +13 -0
  315. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -0
  316. package/dist/src/mcp-tools/system-tools.js +314 -0
  317. package/dist/src/mcp-tools/system-tools.js.map +1 -0
  318. package/dist/src/mcp-tools/task-tools.d.ts +8 -0
  319. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -0
  320. package/dist/src/mcp-tools/task-tools.js +302 -0
  321. package/dist/src/mcp-tools/task-tools.js.map +1 -0
  322. package/dist/src/mcp-tools/terminal-tools.d.ts +13 -0
  323. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -0
  324. package/dist/src/mcp-tools/terminal-tools.js +246 -0
  325. package/dist/src/mcp-tools/terminal-tools.js.map +1 -0
  326. package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
  327. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -0
  328. package/dist/src/mcp-tools/transfer-tools.js +396 -0
  329. package/dist/src/mcp-tools/transfer-tools.js.map +1 -0
  330. package/dist/src/mcp-tools/types.d.ts +31 -0
  331. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  332. package/dist/src/mcp-tools/types.js +7 -0
  333. package/dist/src/mcp-tools/types.js.map +1 -0
  334. package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
  335. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
  336. package/dist/src/mcp-tools/workflow-tools.js +481 -0
  337. package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
  338. package/dist/src/memory/ewc-consolidation.d.ts +271 -0
  339. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  340. package/dist/src/memory/ewc-consolidation.js +542 -0
  341. package/dist/src/memory/ewc-consolidation.js.map +1 -0
  342. package/dist/src/memory/intelligence.d.ts +285 -0
  343. package/dist/src/memory/intelligence.d.ts.map +1 -0
  344. package/dist/src/memory/intelligence.js +766 -0
  345. package/dist/src/memory/intelligence.js.map +1 -0
  346. package/dist/src/memory/memory-initializer.d.ts +396 -0
  347. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  348. package/dist/src/memory/memory-initializer.js +1933 -0
  349. package/dist/src/memory/memory-initializer.js.map +1 -0
  350. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  351. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  352. package/dist/src/memory/sona-optimizer.js +633 -0
  353. package/dist/src/memory/sona-optimizer.js.map +1 -0
  354. package/dist/src/output.d.ts +133 -0
  355. package/dist/src/output.d.ts.map +1 -0
  356. package/dist/src/output.js +513 -0
  357. package/dist/src/output.js.map +1 -0
  358. package/dist/src/parser.d.ts +41 -0
  359. package/dist/src/parser.d.ts.map +1 -0
  360. package/dist/src/parser.js +377 -0
  361. package/dist/src/parser.js.map +1 -0
  362. package/dist/src/plugins/manager.d.ts +133 -0
  363. package/dist/src/plugins/manager.d.ts.map +1 -0
  364. package/dist/src/plugins/manager.js +383 -0
  365. package/dist/src/plugins/manager.js.map +1 -0
  366. package/dist/src/plugins/store/discovery.d.ts +88 -0
  367. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  368. package/dist/src/plugins/store/discovery.js +1147 -0
  369. package/dist/src/plugins/store/discovery.js.map +1 -0
  370. package/dist/src/plugins/store/index.d.ts +76 -0
  371. package/dist/src/plugins/store/index.d.ts.map +1 -0
  372. package/dist/src/plugins/store/index.js +141 -0
  373. package/dist/src/plugins/store/index.js.map +1 -0
  374. package/dist/src/plugins/store/search.d.ts +46 -0
  375. package/dist/src/plugins/store/search.d.ts.map +1 -0
  376. package/dist/src/plugins/store/search.js +230 -0
  377. package/dist/src/plugins/store/search.js.map +1 -0
  378. package/dist/src/plugins/store/types.d.ts +274 -0
  379. package/dist/src/plugins/store/types.d.ts.map +1 -0
  380. package/dist/src/plugins/store/types.js +7 -0
  381. package/dist/src/plugins/store/types.js.map +1 -0
  382. package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  383. package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +1 -0
  384. package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  385. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -0
  386. package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  387. package/dist/src/plugins/tests/standalone-test.d.ts.map +1 -0
  388. package/dist/src/plugins/tests/standalone-test.js +188 -0
  389. package/dist/src/plugins/tests/standalone-test.js.map +1 -0
  390. package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  391. package/dist/src/plugins/tests/test-plugin-store.d.ts.map +1 -0
  392. package/dist/src/plugins/tests/test-plugin-store.js +206 -0
  393. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -0
  394. package/dist/src/production/circuit-breaker.d.ts +101 -0
  395. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  396. package/dist/src/production/circuit-breaker.js +241 -0
  397. package/dist/src/production/circuit-breaker.js.map +1 -0
  398. package/dist/src/production/error-handler.d.ts +92 -0
  399. package/dist/src/production/error-handler.d.ts.map +1 -0
  400. package/dist/src/production/error-handler.js +299 -0
  401. package/dist/src/production/error-handler.js.map +1 -0
  402. package/dist/src/production/index.d.ts +23 -0
  403. package/dist/src/production/index.d.ts.map +1 -0
  404. package/dist/src/production/index.js +18 -0
  405. package/dist/src/production/index.js.map +1 -0
  406. package/dist/src/production/monitoring.d.ts +161 -0
  407. package/dist/src/production/monitoring.d.ts.map +1 -0
  408. package/dist/src/production/monitoring.js +356 -0
  409. package/dist/src/production/monitoring.js.map +1 -0
  410. package/dist/src/production/rate-limiter.d.ts +80 -0
  411. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  412. package/dist/src/production/rate-limiter.js +201 -0
  413. package/dist/src/production/rate-limiter.js.map +1 -0
  414. package/dist/src/production/retry.d.ts +48 -0
  415. package/dist/src/production/retry.d.ts.map +1 -0
  416. package/dist/src/production/retry.js +179 -0
  417. package/dist/src/production/retry.js.map +1 -0
  418. package/dist/src/prompt.d.ts +44 -0
  419. package/dist/src/prompt.d.ts.map +1 -0
  420. package/dist/src/prompt.js +501 -0
  421. package/dist/src/prompt.js.map +1 -0
  422. package/dist/src/runtime/headless.d.ts +60 -0
  423. package/dist/src/runtime/headless.d.ts.map +1 -0
  424. package/dist/src/runtime/headless.js +284 -0
  425. package/dist/src/runtime/headless.js.map +1 -0
  426. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  427. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  428. package/dist/src/ruvector/ast-analyzer.js +277 -0
  429. package/dist/src/ruvector/ast-analyzer.js.map +1 -0
  430. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  431. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  432. package/dist/src/ruvector/coverage-router.js +529 -0
  433. package/dist/src/ruvector/coverage-router.js.map +1 -0
  434. package/dist/src/ruvector/coverage-tools.d.ts +33 -0
  435. package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
  436. package/dist/src/ruvector/coverage-tools.js +157 -0
  437. package/dist/src/ruvector/coverage-tools.js.map +1 -0
  438. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  439. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  440. package/dist/src/ruvector/diff-classifier.js +698 -0
  441. package/dist/src/ruvector/diff-classifier.js.map +1 -0
  442. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  443. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  444. package/dist/src/ruvector/enhanced-model-router.js +519 -0
  445. package/dist/src/ruvector/enhanced-model-router.js.map +1 -0
  446. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  447. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  448. package/dist/src/ruvector/flash-attention.js +643 -0
  449. package/dist/src/ruvector/flash-attention.js.map +1 -0
  450. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  451. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  452. package/dist/src/ruvector/graph-analyzer.js +929 -0
  453. package/dist/src/ruvector/graph-analyzer.js.map +1 -0
  454. package/dist/src/ruvector/index.d.ts +34 -0
  455. package/dist/src/ruvector/index.d.ts.map +1 -0
  456. package/dist/src/ruvector/index.js +60 -0
  457. package/dist/src/ruvector/index.js.map +1 -0
  458. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  459. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  460. package/dist/src/ruvector/lora-adapter.js +455 -0
  461. package/dist/src/ruvector/lora-adapter.js.map +1 -0
  462. package/dist/src/ruvector/model-router.d.ts +220 -0
  463. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  464. package/dist/src/ruvector/model-router.js +488 -0
  465. package/dist/src/ruvector/model-router.js.map +1 -0
  466. package/dist/src/ruvector/moe-router.d.ts +206 -0
  467. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  468. package/dist/src/ruvector/moe-router.js +626 -0
  469. package/dist/src/ruvector/moe-router.js.map +1 -0
  470. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  471. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  472. package/dist/src/ruvector/q-learning-router.js +681 -0
  473. package/dist/src/ruvector/q-learning-router.js.map +1 -0
  474. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  475. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  476. package/dist/src/ruvector/semantic-router.js +178 -0
  477. package/dist/src/ruvector/semantic-router.js.map +1 -0
  478. package/dist/src/ruvector/vector-db.d.ts +69 -0
  479. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  480. package/dist/src/ruvector/vector-db.js +243 -0
  481. package/dist/src/ruvector/vector-db.js.map +1 -0
  482. package/dist/src/services/claim-service.d.ts +204 -0
  483. package/dist/src/services/claim-service.d.ts.map +1 -0
  484. package/dist/src/services/claim-service.js +818 -0
  485. package/dist/src/services/claim-service.js.map +1 -0
  486. package/dist/src/services/container-worker-pool.d.ts +197 -0
  487. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  488. package/dist/src/services/container-worker-pool.js +581 -0
  489. package/dist/src/services/container-worker-pool.js.map +1 -0
  490. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  491. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  492. package/dist/src/services/headless-worker-executor.js +999 -0
  493. package/dist/src/services/headless-worker-executor.js.map +1 -0
  494. package/dist/src/services/index.d.ts +13 -0
  495. package/dist/src/services/index.d.ts.map +1 -0
  496. package/dist/src/services/index.js +11 -0
  497. package/dist/src/services/index.js.map +1 -0
  498. package/dist/src/services/registry-api.d.ts +58 -0
  499. package/dist/src/services/registry-api.d.ts.map +1 -0
  500. package/dist/src/services/registry-api.js +146 -0
  501. package/dist/src/services/registry-api.js.map +1 -0
  502. package/dist/src/services/ruvector-training.d.ts +213 -0
  503. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  504. package/dist/src/services/ruvector-training.js +498 -0
  505. package/dist/src/services/ruvector-training.js.map +1 -0
  506. package/dist/src/services/worker-daemon.d.ts +203 -0
  507. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  508. package/dist/src/services/worker-daemon.js +756 -0
  509. package/dist/src/services/worker-daemon.js.map +1 -0
  510. package/dist/src/services/worker-queue.d.ts +194 -0
  511. package/dist/src/services/worker-queue.d.ts.map +1 -0
  512. package/dist/src/services/worker-queue.js +511 -0
  513. package/dist/src/services/worker-queue.js.map +1 -0
  514. package/dist/src/suggest.d.ts +53 -0
  515. package/dist/src/suggest.d.ts.map +1 -0
  516. package/dist/src/suggest.js +200 -0
  517. package/dist/src/suggest.js.map +1 -0
  518. package/dist/src/transfer/anonymization/index.d.ts +25 -0
  519. package/dist/src/transfer/anonymization/index.d.ts.map +1 -0
  520. package/dist/src/transfer/anonymization/index.js +175 -0
  521. package/dist/src/transfer/anonymization/index.js.map +1 -0
  522. package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  523. package/dist/src/transfer/deploy-seraphine.d.ts.map +1 -0
  524. package/dist/src/transfer/deploy-seraphine.js +205 -0
  525. package/dist/src/transfer/deploy-seraphine.js.map +1 -0
  526. package/dist/src/transfer/export.d.ts +25 -0
  527. package/dist/src/transfer/export.d.ts.map +1 -0
  528. package/dist/src/transfer/export.js +113 -0
  529. package/dist/src/transfer/export.js.map +1 -0
  530. package/dist/src/transfer/index.d.ts +12 -0
  531. package/dist/src/transfer/index.d.ts.map +1 -0
  532. package/dist/src/transfer/index.js +31 -0
  533. package/dist/src/transfer/index.js.map +1 -0
  534. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  535. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  536. package/dist/src/transfer/ipfs/client.js +299 -0
  537. package/dist/src/transfer/ipfs/client.js.map +1 -0
  538. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  539. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  540. package/dist/src/transfer/ipfs/upload.js +413 -0
  541. package/dist/src/transfer/ipfs/upload.js.map +1 -0
  542. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  543. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  544. package/dist/src/transfer/models/seraphine.js +373 -0
  545. package/dist/src/transfer/models/seraphine.js.map +1 -0
  546. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  547. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  548. package/dist/src/transfer/serialization/cfp.js +180 -0
  549. package/dist/src/transfer/serialization/cfp.js.map +1 -0
  550. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  551. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  552. package/dist/src/transfer/storage/gcs.js +230 -0
  553. package/dist/src/transfer/storage/gcs.js.map +1 -0
  554. package/dist/src/transfer/storage/index.d.ts +6 -0
  555. package/dist/src/transfer/storage/index.d.ts.map +1 -0
  556. package/dist/src/transfer/storage/index.js +6 -0
  557. package/dist/src/transfer/storage/index.js.map +1 -0
  558. package/dist/src/transfer/store/discovery.d.ts +84 -0
  559. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  560. package/dist/src/transfer/store/discovery.js +382 -0
  561. package/dist/src/transfer/store/discovery.js.map +1 -0
  562. package/dist/src/transfer/store/download.d.ts +70 -0
  563. package/dist/src/transfer/store/download.d.ts.map +1 -0
  564. package/dist/src/transfer/store/download.js +334 -0
  565. package/dist/src/transfer/store/download.js.map +1 -0
  566. package/dist/src/transfer/store/index.d.ts +84 -0
  567. package/dist/src/transfer/store/index.d.ts.map +1 -0
  568. package/dist/src/transfer/store/index.js +153 -0
  569. package/dist/src/transfer/store/index.js.map +1 -0
  570. package/dist/src/transfer/store/publish.d.ts +76 -0
  571. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  572. package/dist/src/transfer/store/publish.js +294 -0
  573. package/dist/src/transfer/store/publish.js.map +1 -0
  574. package/dist/src/transfer/store/registry.d.ts +58 -0
  575. package/dist/src/transfer/store/registry.d.ts.map +1 -0
  576. package/dist/src/transfer/store/registry.js +285 -0
  577. package/dist/src/transfer/store/registry.js.map +1 -0
  578. package/dist/src/transfer/store/search.d.ts +54 -0
  579. package/dist/src/transfer/store/search.d.ts.map +1 -0
  580. package/dist/src/transfer/store/search.js +232 -0
  581. package/dist/src/transfer/store/search.js.map +1 -0
  582. package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  583. package/dist/src/transfer/store/tests/standalone-test.d.ts.map +1 -0
  584. package/dist/src/transfer/store/tests/standalone-test.js +190 -0
  585. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -0
  586. package/dist/src/transfer/store/types.d.ts +193 -0
  587. package/dist/src/transfer/store/types.d.ts.map +1 -0
  588. package/dist/src/transfer/store/types.js +6 -0
  589. package/dist/src/transfer/store/types.js.map +1 -0
  590. package/dist/src/transfer/test-seraphine.d.ts +6 -0
  591. package/dist/src/transfer/test-seraphine.d.ts.map +1 -0
  592. package/dist/src/transfer/test-seraphine.js +105 -0
  593. package/dist/src/transfer/test-seraphine.js.map +1 -0
  594. package/dist/src/transfer/tests/test-store.d.ts +7 -0
  595. package/dist/src/transfer/tests/test-store.d.ts.map +1 -0
  596. package/dist/src/transfer/tests/test-store.js +214 -0
  597. package/dist/src/transfer/tests/test-store.js.map +1 -0
  598. package/dist/src/transfer/types.d.ts +245 -0
  599. package/dist/src/transfer/types.d.ts.map +1 -0
  600. package/dist/src/transfer/types.js +6 -0
  601. package/dist/src/transfer/types.js.map +1 -0
  602. package/dist/src/types.d.ts +198 -0
  603. package/dist/src/types.d.ts.map +1 -0
  604. package/dist/src/types.js +38 -0
  605. package/dist/src/types.js.map +1 -0
  606. package/dist/src/update/checker.d.ts +34 -0
  607. package/dist/src/update/checker.d.ts.map +1 -0
  608. package/dist/src/update/checker.js +190 -0
  609. package/dist/src/update/checker.js.map +1 -0
  610. package/dist/src/update/executor.d.ts +32 -0
  611. package/dist/src/update/executor.d.ts.map +1 -0
  612. package/dist/src/update/executor.js +181 -0
  613. package/dist/src/update/executor.js.map +1 -0
  614. package/dist/src/update/index.d.ts +33 -0
  615. package/dist/src/update/index.d.ts.map +1 -0
  616. package/dist/src/update/index.js +64 -0
  617. package/dist/src/update/index.js.map +1 -0
  618. package/dist/src/update/rate-limiter.d.ts +20 -0
  619. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  620. package/dist/src/update/rate-limiter.js +96 -0
  621. package/dist/src/update/rate-limiter.js.map +1 -0
  622. package/dist/src/update/validator.d.ts +17 -0
  623. package/dist/src/update/validator.d.ts.map +1 -0
  624. package/dist/src/update/validator.js +123 -0
  625. package/dist/src/update/validator.js.map +1 -0
  626. package/dist/tsconfig.build.tsbuildinfo +1 -0
  627. package/package.json +1 -1
@@ -0,0 +1,813 @@
1
+ /**
2
+ * V3 CLI Route Command
3
+ * Intelligent task-to-agent routing using Q-Learning
4
+ *
5
+ * Features:
6
+ * - Q-Learning based agent selection
7
+ * - Semantic task understanding
8
+ * - Confidence scoring
9
+ * - Learning from feedback
10
+ *
11
+ * Created with love by ruv.io
12
+ */
13
+ import { output } from '../output.js';
14
+ import { createQLearningRouter, isRuvectorAvailable, } from '../ruvector/index.js';
15
+ /**
16
+ * Available agent types for routing
17
+ */
18
+ const AGENT_TYPES = [
19
+ { id: 'coder', name: 'Coder', description: 'Implements features and writes code', capabilities: ['coding', 'implementation', 'refactoring'], priority: 1 },
20
+ { id: 'tester', name: 'Tester', description: 'Creates tests and validates functionality', capabilities: ['testing', 'validation', 'quality'], priority: 2 },
21
+ { id: 'reviewer', name: 'Reviewer', description: 'Reviews code quality and security', capabilities: ['review', 'security', 'best-practices'], priority: 3 },
22
+ { id: 'architect', name: 'Architect', description: 'Designs system architecture', capabilities: ['design', 'architecture', 'planning'], priority: 4 },
23
+ { id: 'researcher', name: 'Researcher', description: 'Researches requirements and patterns', capabilities: ['research', 'analysis', 'documentation'], priority: 5 },
24
+ { id: 'optimizer', name: 'Optimizer', description: 'Optimizes performance and efficiency', capabilities: ['optimization', 'performance', 'profiling'], priority: 6 },
25
+ { id: 'debugger', name: 'Debugger', description: 'Debugs issues and fixes bugs', capabilities: ['debugging', 'troubleshooting', 'fixing'], priority: 7 },
26
+ { id: 'documenter', name: 'Documenter', description: 'Creates and updates documentation', capabilities: ['documentation', 'writing', 'explaining'], priority: 8 },
27
+ ];
28
+ // ============================================================================
29
+ // Router Singleton
30
+ // ============================================================================
31
+ let routerInstance = null;
32
+ let routerInitialized = false;
33
+ /**
34
+ * Get or create the router instance
35
+ */
36
+ async function getRouter() {
37
+ if (!routerInstance) {
38
+ routerInstance = createQLearningRouter();
39
+ }
40
+ if (!routerInitialized) {
41
+ await routerInstance.initialize();
42
+ routerInitialized = true;
43
+ }
44
+ return routerInstance;
45
+ }
46
+ /**
47
+ * Get agent type by route name
48
+ */
49
+ function getAgentType(route) {
50
+ return AGENT_TYPES.find(a => a.id === route);
51
+ }
52
+ // ============================================================================
53
+ // Route Subcommand
54
+ // ============================================================================
55
+ const routeTaskCommand = {
56
+ name: 'task',
57
+ description: 'Route a task to the optimal agent using Q-Learning',
58
+ options: [
59
+ {
60
+ name: 'q-learning',
61
+ short: 'q',
62
+ description: 'Use Q-Learning for agent selection (default: true)',
63
+ type: 'boolean',
64
+ default: true,
65
+ },
66
+ {
67
+ name: 'agent',
68
+ short: 'a',
69
+ description: 'Force specific agent (bypasses Q-Learning)',
70
+ type: 'string',
71
+ },
72
+ {
73
+ name: 'explore',
74
+ short: 'e',
75
+ description: 'Enable exploration (random selection chance)',
76
+ type: 'boolean',
77
+ default: true,
78
+ },
79
+ {
80
+ name: 'json',
81
+ short: 'j',
82
+ description: 'Output in JSON format',
83
+ type: 'boolean',
84
+ default: false,
85
+ },
86
+ ],
87
+ examples: [
88
+ { command: 'claude-flow route task "implement authentication"', description: 'Route task to best agent' },
89
+ { command: 'claude-flow route task "write unit tests" --q-learning', description: 'Use Q-Learning routing' },
90
+ { command: 'claude-flow route task "review code" --agent reviewer', description: 'Force specific agent' },
91
+ ],
92
+ action: async (ctx) => {
93
+ const taskDescription = ctx.args[0];
94
+ const forceAgent = ctx.flags.agent;
95
+ const useExploration = ctx.flags.explore;
96
+ const jsonOutput = ctx.flags.json;
97
+ if (!taskDescription) {
98
+ output.printError('Task description is required');
99
+ output.writeln(output.dim('Usage: claude-flow route task "task description"'));
100
+ return { success: false, exitCode: 1 };
101
+ }
102
+ const spinner = output.createSpinner({ text: 'Analyzing task...', spinner: 'dots' });
103
+ spinner.start();
104
+ try {
105
+ if (forceAgent) {
106
+ // Bypass Q-Learning, use specified agent
107
+ const agent = getAgentType(forceAgent) ||
108
+ AGENT_TYPES.find(a => a.name.toLowerCase() === forceAgent.toLowerCase());
109
+ if (!agent) {
110
+ spinner.fail(`Agent "${forceAgent}" not found`);
111
+ output.writeln();
112
+ output.writeln('Available agents:');
113
+ output.printList(AGENT_TYPES.map(a => `${output.highlight(a.id)} - ${a.description}`));
114
+ return { success: false, exitCode: 1 };
115
+ }
116
+ spinner.succeed(`Routed to ${agent.name}`);
117
+ if (jsonOutput) {
118
+ output.printJson({
119
+ task: taskDescription,
120
+ agentId: agent.id,
121
+ agentName: agent.name,
122
+ confidence: 1.0,
123
+ method: 'forced',
124
+ });
125
+ }
126
+ else {
127
+ output.writeln();
128
+ output.printBox([
129
+ `Task: ${taskDescription}`,
130
+ `Agent: ${output.highlight(agent.name)} (${agent.id})`,
131
+ `Confidence: ${output.success('100%')} (forced)`,
132
+ `Description: ${agent.description}`,
133
+ ].join('\n'), 'Routing Result');
134
+ }
135
+ return { success: true, data: { agentId: agent.id, agentName: agent.name } };
136
+ }
137
+ // Use Q-Learning routing
138
+ const router = await getRouter();
139
+ const result = router.route(taskDescription, useExploration);
140
+ const agent = getAgentType(result.route) || AGENT_TYPES[0];
141
+ spinner.succeed(`Routed to ${agent.name}`);
142
+ if (jsonOutput) {
143
+ output.printJson({
144
+ task: taskDescription,
145
+ agentId: result.route,
146
+ agentName: agent.name,
147
+ confidence: result.confidence,
148
+ qValues: result.qValues,
149
+ explored: result.explored,
150
+ alternatives: result.alternatives.map(a => ({
151
+ agentId: a.route,
152
+ agentName: getAgentType(a.route)?.name || a.route,
153
+ score: a.score,
154
+ })),
155
+ });
156
+ }
157
+ else {
158
+ output.writeln();
159
+ const confidence = result.confidence ?? 0;
160
+ // Use bound methods to preserve `this` context when calling output methods
161
+ const confidenceColor = confidence >= 0.7
162
+ ? (text) => output.success(text)
163
+ : confidence >= 0.4
164
+ ? (text) => output.warning(text)
165
+ : (text) => output.error(text);
166
+ const qValues = result.qValues || [0];
167
+ const maxQValue = Math.max(...qValues);
168
+ const capabilities = agent.capabilities || [];
169
+ const alternatives = result.alternatives || [];
170
+ output.printBox([
171
+ `Task: ${taskDescription}`,
172
+ ``,
173
+ `Agent: ${output.highlight(agent.name)} (${result.route})`,
174
+ `Confidence: ${confidenceColor(`${(confidence * 100).toFixed(1)}%`)}`,
175
+ `Q-Value: ${maxQValue.toFixed(3)}`,
176
+ `Exploration: ${result.explored ? output.warning('Yes') : 'No'}`,
177
+ ``,
178
+ `Description: ${agent.description}`,
179
+ `Capabilities: ${capabilities.join(', ')}`,
180
+ ].join('\n'), 'Q-Learning Routing');
181
+ if (alternatives.length > 0) {
182
+ output.writeln();
183
+ output.writeln(output.bold('Alternatives:'));
184
+ output.printTable({
185
+ columns: [
186
+ { key: 'agent', header: 'Agent', width: 20 },
187
+ { key: 'score', header: 'Score', width: 12, align: 'right' },
188
+ ],
189
+ data: alternatives.map(a => ({
190
+ agent: getAgentType(a.route)?.name || a.route,
191
+ score: (a.score ?? 0).toFixed(3),
192
+ })),
193
+ });
194
+ }
195
+ }
196
+ return { success: true, data: { agentId: result.route, result } };
197
+ }
198
+ catch (error) {
199
+ spinner.fail('Routing failed');
200
+ output.printError(error instanceof Error ? error.message : String(error));
201
+ return { success: false, exitCode: 1 };
202
+ }
203
+ },
204
+ };
205
+ // ============================================================================
206
+ // List Agents Subcommand
207
+ // ============================================================================
208
+ const listAgentsCommand = {
209
+ name: 'list-agents',
210
+ aliases: ['agents', 'ls'],
211
+ description: 'List all available agent types for routing',
212
+ options: [
213
+ {
214
+ name: 'json',
215
+ short: 'j',
216
+ description: 'Output in JSON format',
217
+ type: 'boolean',
218
+ default: false,
219
+ },
220
+ ],
221
+ examples: [
222
+ { command: 'claude-flow route list-agents', description: 'List all agents' },
223
+ { command: 'claude-flow route agents --json', description: 'List agents as JSON' },
224
+ ],
225
+ action: async (ctx) => {
226
+ const jsonOutput = ctx.flags.json;
227
+ try {
228
+ if (jsonOutput) {
229
+ output.printJson(AGENT_TYPES);
230
+ }
231
+ else {
232
+ output.writeln();
233
+ output.writeln(output.bold('Available Agent Types'));
234
+ output.writeln(output.dim('Ordered by priority (highest first)'));
235
+ output.writeln();
236
+ output.printTable({
237
+ columns: [
238
+ { key: 'id', header: 'ID', width: 15 },
239
+ { key: 'name', header: 'Name', width: 15 },
240
+ { key: 'priority', header: 'Priority', width: 10, align: 'right' },
241
+ { key: 'description', header: 'Description', width: 45 },
242
+ ],
243
+ data: AGENT_TYPES.map(a => ({
244
+ id: output.highlight(a.id),
245
+ name: a.name,
246
+ priority: String(a.priority),
247
+ description: a.description,
248
+ })),
249
+ });
250
+ output.writeln();
251
+ output.writeln(output.dim(`Total: ${AGENT_TYPES.length} agent types`));
252
+ }
253
+ return { success: true, data: AGENT_TYPES };
254
+ }
255
+ catch (error) {
256
+ output.printError(error instanceof Error ? error.message : String(error));
257
+ return { success: false, exitCode: 1 };
258
+ }
259
+ },
260
+ };
261
+ // ============================================================================
262
+ // Stats Subcommand
263
+ // ============================================================================
264
+ const statsCommand = {
265
+ name: 'stats',
266
+ description: 'Show Q-Learning router statistics',
267
+ options: [
268
+ {
269
+ name: 'json',
270
+ short: 'j',
271
+ description: 'Output in JSON format',
272
+ type: 'boolean',
273
+ default: false,
274
+ },
275
+ ],
276
+ examples: [
277
+ { command: 'claude-flow route stats', description: 'Show routing statistics' },
278
+ ],
279
+ action: async (ctx) => {
280
+ const jsonOutput = ctx.flags.json;
281
+ try {
282
+ const router = await getRouter();
283
+ const stats = router.getStats();
284
+ const ruvectorAvailable = await isRuvectorAvailable();
285
+ const ruvectorStatus = {
286
+ available: ruvectorAvailable,
287
+ wasmAccelerated: stats.useNative === 1,
288
+ backend: stats.useNative === 1 ? 'ruvector-native' : 'fallback',
289
+ };
290
+ if (jsonOutput) {
291
+ output.printJson({ stats, ruvector: ruvectorStatus });
292
+ }
293
+ else {
294
+ output.writeln();
295
+ output.writeln(output.bold('Q-Learning Router Statistics'));
296
+ output.writeln();
297
+ output.printTable({
298
+ columns: [
299
+ { key: 'metric', header: 'Metric', width: 25 },
300
+ { key: 'value', header: 'Value', width: 20, align: 'right' },
301
+ ],
302
+ data: [
303
+ { metric: 'Update Count', value: String(stats.updateCount) },
304
+ { metric: 'Q-Table Size', value: String(stats.qTableSize) },
305
+ { metric: 'Step Count', value: String(stats.stepCount) },
306
+ { metric: 'Epsilon', value: stats.epsilon.toFixed(4) },
307
+ { metric: 'Avg TD Error', value: stats.avgTDError.toFixed(4) },
308
+ { metric: 'Native Backend', value: stats.useNative === 1 ? 'Yes' : 'No' },
309
+ ],
310
+ });
311
+ output.writeln();
312
+ output.writeln(output.bold('RuVector Status'));
313
+ output.printList([
314
+ `Available: ${ruvectorStatus.available ? output.success('Yes') : output.warning('No (using fallback)')}`,
315
+ `WASM Accelerated: ${ruvectorStatus.wasmAccelerated ? output.success('Yes') : 'No'}`,
316
+ `Backend: ${ruvectorStatus.backend}`,
317
+ ]);
318
+ }
319
+ return { success: true, data: { stats, ruvector: ruvectorStatus } };
320
+ }
321
+ catch (error) {
322
+ output.printError(error instanceof Error ? error.message : String(error));
323
+ return { success: false, exitCode: 1 };
324
+ }
325
+ },
326
+ };
327
+ // ============================================================================
328
+ // Feedback Subcommand
329
+ // ============================================================================
330
+ const feedbackCommand = {
331
+ name: 'feedback',
332
+ description: 'Provide feedback on a routing decision',
333
+ options: [
334
+ {
335
+ name: 'task',
336
+ short: 't',
337
+ description: 'Task description (context for learning)',
338
+ type: 'string',
339
+ required: true,
340
+ },
341
+ {
342
+ name: 'agent',
343
+ short: 'a',
344
+ description: 'Agent that was used',
345
+ type: 'string',
346
+ required: true,
347
+ },
348
+ {
349
+ name: 'reward',
350
+ short: 'r',
351
+ description: 'Reward value (-1 to 1, where 1 is best)',
352
+ type: 'number',
353
+ default: 0.8,
354
+ },
355
+ {
356
+ name: 'next-task',
357
+ short: 'n',
358
+ description: 'Next task description (for multi-step learning)',
359
+ type: 'string',
360
+ },
361
+ ],
362
+ examples: [
363
+ { command: 'claude-flow route feedback -t "implement auth" -a coder -r 0.9', description: 'Positive feedback' },
364
+ { command: 'claude-flow route feedback -t "write tests" -a tester -r -0.5', description: 'Negative feedback' },
365
+ ],
366
+ action: async (ctx) => {
367
+ const taskDescription = ctx.flags.task;
368
+ const agentId = ctx.flags.agent;
369
+ const reward = ctx.flags.reward;
370
+ const nextTask = ctx.flags['next-task'];
371
+ if (!taskDescription || !agentId) {
372
+ output.printError('Task description and agent are required');
373
+ return { success: false, exitCode: 1 };
374
+ }
375
+ // Validate agent
376
+ const agent = getAgentType(agentId);
377
+ if (!agent) {
378
+ output.printError(`Unknown agent: ${agentId}`);
379
+ output.writeln('Available agents:');
380
+ output.printList(AGENT_TYPES.map(a => a.id));
381
+ return { success: false, exitCode: 1 };
382
+ }
383
+ try {
384
+ const router = await getRouter();
385
+ const clampedReward = Math.max(-1, Math.min(1, reward));
386
+ const tdError = router.update(taskDescription, agentId, clampedReward, nextTask);
387
+ output.printSuccess(`Feedback recorded for agent "${agent.name}"`);
388
+ output.writeln();
389
+ output.printBox([
390
+ `Task: ${taskDescription}`,
391
+ `Agent: ${agent.name} (${agentId})`,
392
+ `Reward: ${clampedReward >= 0 ? output.success(clampedReward.toFixed(2)) : output.error(clampedReward.toFixed(2))}`,
393
+ `TD Error: ${Math.abs(tdError).toFixed(4)}`,
394
+ nextTask ? `Next Task: ${nextTask}` : '',
395
+ ].filter(Boolean).join('\n'), 'Feedback Recorded');
396
+ return { success: true, data: { tdError } };
397
+ }
398
+ catch (error) {
399
+ output.printError(error instanceof Error ? error.message : String(error));
400
+ return { success: false, exitCode: 1 };
401
+ }
402
+ },
403
+ };
404
+ // ============================================================================
405
+ // Reset Subcommand
406
+ // ============================================================================
407
+ const resetCommand = {
408
+ name: 'reset',
409
+ description: 'Reset the Q-Learning router state',
410
+ options: [
411
+ {
412
+ name: 'force',
413
+ short: 'f',
414
+ description: 'Force reset without confirmation',
415
+ type: 'boolean',
416
+ default: false,
417
+ },
418
+ ],
419
+ examples: [
420
+ { command: 'claude-flow route reset', description: 'Reset router state' },
421
+ { command: 'claude-flow route reset --force', description: 'Force reset' },
422
+ ],
423
+ action: async (ctx) => {
424
+ const force = ctx.flags.force;
425
+ if (!force && ctx.interactive) {
426
+ output.printWarning('This will reset all learned Q-values and statistics.');
427
+ output.writeln(output.dim('Use --force to skip this confirmation.'));
428
+ return { success: false, exitCode: 1 };
429
+ }
430
+ try {
431
+ const router = await getRouter();
432
+ router.reset();
433
+ output.printSuccess('Q-Learning router state has been reset');
434
+ return { success: true };
435
+ }
436
+ catch (error) {
437
+ output.printError(error instanceof Error ? error.message : String(error));
438
+ return { success: false, exitCode: 1 };
439
+ }
440
+ },
441
+ };
442
+ // ============================================================================
443
+ // Export/Import Subcommands
444
+ // ============================================================================
445
+ const exportCommand = {
446
+ name: 'export',
447
+ description: 'Export Q-table for persistence',
448
+ options: [
449
+ {
450
+ name: 'file',
451
+ short: 'f',
452
+ description: 'Output file path (outputs to stdout if not specified)',
453
+ type: 'string',
454
+ },
455
+ ],
456
+ examples: [
457
+ { command: 'claude-flow route export', description: 'Export Q-table to stdout' },
458
+ { command: 'claude-flow route export -f qtable.json', description: 'Export to file' },
459
+ ],
460
+ action: async (ctx) => {
461
+ const filePath = ctx.flags.file;
462
+ try {
463
+ const router = await getRouter();
464
+ const data = router.export();
465
+ if (filePath) {
466
+ const fs = await import('node:fs/promises');
467
+ await fs.writeFile(filePath, JSON.stringify(data, null, 2));
468
+ output.printSuccess(`Q-table exported to ${filePath}`);
469
+ }
470
+ else {
471
+ output.printJson(data);
472
+ }
473
+ return { success: true, data };
474
+ }
475
+ catch (error) {
476
+ output.printError(error instanceof Error ? error.message : String(error));
477
+ return { success: false, exitCode: 1 };
478
+ }
479
+ },
480
+ };
481
+ const importCommand = {
482
+ name: 'import',
483
+ description: 'Import Q-table from file',
484
+ options: [
485
+ {
486
+ name: 'file',
487
+ short: 'f',
488
+ description: 'Input file path',
489
+ type: 'string',
490
+ required: true,
491
+ },
492
+ ],
493
+ examples: [
494
+ { command: 'claude-flow route import -f qtable.json', description: 'Import Q-table from file' },
495
+ ],
496
+ action: async (ctx) => {
497
+ const filePath = ctx.flags.file;
498
+ if (!filePath) {
499
+ output.printError('File path is required');
500
+ return { success: false, exitCode: 1 };
501
+ }
502
+ try {
503
+ const fs = await import('node:fs/promises');
504
+ const content = await fs.readFile(filePath, 'utf-8');
505
+ const data = JSON.parse(content);
506
+ const router = await getRouter();
507
+ router.import(data);
508
+ output.printSuccess(`Q-table imported from ${filePath}`);
509
+ output.writeln(output.dim(`Loaded ${Object.keys(data).length} state entries`));
510
+ return { success: true };
511
+ }
512
+ catch (error) {
513
+ output.printError(error instanceof Error ? error.message : String(error));
514
+ return { success: false, exitCode: 1 };
515
+ }
516
+ },
517
+ };
518
+ // ============================================================================
519
+ // Coverage-Aware Routing Subcommand
520
+ // ============================================================================
521
+ const coverageRouteCommand = {
522
+ name: 'coverage',
523
+ aliases: ['cov'],
524
+ description: 'Route tasks based on test coverage analysis (ADR-017)',
525
+ options: [
526
+ {
527
+ name: 'path',
528
+ short: 'p',
529
+ description: 'Path to analyze for coverage',
530
+ type: 'string',
531
+ },
532
+ {
533
+ name: 'threshold',
534
+ short: 't',
535
+ description: 'Coverage threshold percentage (default: 80)',
536
+ type: 'number',
537
+ default: 80,
538
+ },
539
+ {
540
+ name: 'suggest',
541
+ short: 's',
542
+ description: 'Get suggestions for improving coverage',
543
+ type: 'boolean',
544
+ default: false,
545
+ },
546
+ {
547
+ name: 'gaps',
548
+ short: 'g',
549
+ description: 'List coverage gaps with agent assignments',
550
+ type: 'boolean',
551
+ default: false,
552
+ },
553
+ {
554
+ name: 'json',
555
+ short: 'j',
556
+ description: 'Output in JSON format',
557
+ type: 'boolean',
558
+ default: false,
559
+ },
560
+ ],
561
+ examples: [
562
+ { command: 'claude-flow route coverage', description: 'Analyze coverage and suggest routing' },
563
+ { command: 'claude-flow route coverage --suggest', description: 'Get improvement suggestions' },
564
+ { command: 'claude-flow route coverage --gaps', description: 'List coverage gaps by agent' },
565
+ { command: 'claude-flow route coverage -p src/auth -t 90', description: 'Analyze specific path with threshold' },
566
+ ],
567
+ action: async (ctx) => {
568
+ const path = ctx.flags.path || '';
569
+ const threshold = ctx.flags.threshold || 80;
570
+ const suggestMode = ctx.flags.suggest;
571
+ const gapsMode = ctx.flags.gaps;
572
+ const jsonOutput = ctx.flags.json;
573
+ const spinner = output.createSpinner({ text: 'Analyzing coverage...', spinner: 'dots' });
574
+ spinner.start();
575
+ try {
576
+ // Lazy load coverage router
577
+ const { coverageRoute, coverageSuggest, coverageGaps } = await import('../ruvector/coverage-router.js');
578
+ if (gapsMode) {
579
+ // List coverage gaps with agent assignments
580
+ const result = await coverageGaps({ threshold, groupByAgent: true });
581
+ spinner.succeed(`Found ${result.totalGaps} coverage gaps`);
582
+ if (jsonOutput) {
583
+ output.printJson(result);
584
+ }
585
+ else {
586
+ output.writeln();
587
+ output.writeln(output.bold('Coverage Gaps by Agent'));
588
+ output.writeln(output.dim(result.summary));
589
+ output.writeln();
590
+ if (Object.keys(result.byAgent).length > 0) {
591
+ for (const [agent, files] of Object.entries(result.byAgent)) {
592
+ output.writeln(`${output.highlight(agent)} (${files.length} files)`);
593
+ for (const file of files.slice(0, 5)) {
594
+ output.writeln(` ${output.dim('•')} ${file}`);
595
+ }
596
+ if (files.length > 5) {
597
+ output.writeln(output.dim(` ... and ${files.length - 5} more`));
598
+ }
599
+ output.writeln();
600
+ }
601
+ }
602
+ else {
603
+ output.printSuccess('No coverage gaps found!');
604
+ }
605
+ output.writeln();
606
+ output.writeln(output.bold('Top Gaps:'));
607
+ output.printTable({
608
+ columns: [
609
+ { key: 'file', header: 'File', width: 50 },
610
+ { key: 'coverage', header: 'Coverage', width: 12, align: 'right' },
611
+ { key: 'gap', header: 'Gap', width: 10, align: 'right' },
612
+ { key: 'agent', header: 'Agent', width: 15 },
613
+ ],
614
+ data: result.gaps.slice(0, 10).map(g => ({
615
+ file: g.file.length > 48 ? '...' + g.file.slice(-45) : g.file,
616
+ coverage: `${g.currentCoverage.toFixed(1)}%`,
617
+ gap: `${g.gap.toFixed(1)}%`,
618
+ agent: g.suggestedAgent,
619
+ })),
620
+ });
621
+ }
622
+ return { success: true, data: result };
623
+ }
624
+ if (suggestMode || path) {
625
+ // Suggest improvements for path
626
+ const result = await coverageSuggest(path || '.', { threshold, limit: 20 });
627
+ spinner.succeed(`Found ${result.suggestions.length} coverage suggestions`);
628
+ if (jsonOutput) {
629
+ output.printJson(result);
630
+ }
631
+ else {
632
+ output.writeln();
633
+ output.writeln(output.bold('Coverage Improvement Suggestions'));
634
+ output.writeln(output.dim(`Path: ${result.path}, Threshold: ${threshold}%`));
635
+ output.writeln();
636
+ if (result.suggestions.length === 0) {
637
+ output.printSuccess('All files meet coverage threshold!');
638
+ }
639
+ else {
640
+ output.writeln(`Total Gap: ${output.warning(`${result.totalGap.toFixed(1)}%`)}`);
641
+ output.writeln(`Estimated Effort: ${output.dim(`${result.estimatedEffort.toFixed(1)} hours`)}`);
642
+ output.writeln();
643
+ output.printTable({
644
+ columns: [
645
+ { key: 'file', header: 'File', width: 45 },
646
+ { key: 'current', header: 'Current', width: 10, align: 'right' },
647
+ { key: 'target', header: 'Target', width: 10, align: 'right' },
648
+ { key: 'priority', header: 'Priority', width: 10, align: 'right' },
649
+ ],
650
+ data: result.suggestions.slice(0, 15).map(s => ({
651
+ file: s.file.length > 43 ? '...' + s.file.slice(-40) : s.file,
652
+ current: `${s.currentCoverage.toFixed(1)}%`,
653
+ target: `${s.targetCoverage.toFixed(1)}%`,
654
+ priority: String(s.priority),
655
+ })),
656
+ });
657
+ // Show test suggestions for top file
658
+ if (result.suggestions.length > 0 && result.suggestions[0].suggestedTests.length > 0) {
659
+ output.writeln();
660
+ output.writeln(output.bold('Suggested Tests for Top Priority File:'));
661
+ output.printList(result.suggestions[0].suggestedTests);
662
+ }
663
+ }
664
+ }
665
+ return { success: true, data: result };
666
+ }
667
+ // Default: Route based on coverage analysis
668
+ const routeResult = await coverageRoute('', { threshold });
669
+ spinner.succeed('Coverage analysis complete');
670
+ if (jsonOutput) {
671
+ output.printJson(routeResult);
672
+ }
673
+ else {
674
+ output.writeln();
675
+ output.writeln(output.bold('Coverage-Aware Routing'));
676
+ output.writeln();
677
+ const actionColors = {
678
+ 'add-tests': (s) => output.error(s),
679
+ 'review-coverage': (s) => output.warning(s),
680
+ 'prioritize': (s) => output.error(s),
681
+ 'skip': (s) => output.success(s),
682
+ };
683
+ const colorFn = actionColors[routeResult.action] || ((s) => s);
684
+ output.printBox([
685
+ `Action: ${colorFn(routeResult.action.toUpperCase())}`,
686
+ `Priority: ${routeResult.priority}/10`,
687
+ `Impact Score: ${routeResult.impactScore}%`,
688
+ `Estimated Effort: ${routeResult.estimatedEffort} hours`,
689
+ ``,
690
+ `Test Types: ${routeResult.testTypes.join(', ')}`,
691
+ `Target Files: ${routeResult.targetFiles.length}`,
692
+ ].join('\n'), 'Coverage Analysis');
693
+ if (routeResult.targetFiles.length > 0) {
694
+ output.writeln();
695
+ output.writeln(output.bold('Target Files:'));
696
+ output.printList(routeResult.targetFiles.slice(0, 5).map(f => f.length > 60 ? '...' + f.slice(-57) : f));
697
+ if (routeResult.targetFiles.length > 5) {
698
+ output.writeln(output.dim(` ... and ${routeResult.targetFiles.length - 5} more`));
699
+ }
700
+ }
701
+ if (routeResult.gaps.length > 0) {
702
+ output.writeln();
703
+ output.writeln(output.bold('Coverage Gaps:'));
704
+ output.printTable({
705
+ columns: [
706
+ { key: 'file', header: 'File', width: 40 },
707
+ { key: 'current', header: 'Current', width: 10, align: 'right' },
708
+ { key: 'gap', header: 'Gap', width: 10, align: 'right' },
709
+ ],
710
+ data: routeResult.gaps.slice(0, 5).map(g => ({
711
+ file: g.file.length > 38 ? '...' + g.file.slice(-35) : g.file,
712
+ current: `${g.currentCoverage.toFixed(1)}%`,
713
+ gap: `${g.gap.toFixed(1)}%`,
714
+ })),
715
+ });
716
+ }
717
+ }
718
+ return { success: true, data: routeResult };
719
+ }
720
+ catch (error) {
721
+ spinner.fail('Coverage analysis failed');
722
+ output.printError(error instanceof Error ? error.message : String(error));
723
+ return { success: false, exitCode: 1 };
724
+ }
725
+ },
726
+ };
727
+ // ============================================================================
728
+ // Main Route Command
729
+ // ============================================================================
730
+ export const routeCommand = {
731
+ name: 'route',
732
+ description: 'Intelligent task-to-agent routing using Q-Learning',
733
+ subcommands: [
734
+ routeTaskCommand,
735
+ listAgentsCommand,
736
+ statsCommand,
737
+ feedbackCommand,
738
+ resetCommand,
739
+ exportCommand,
740
+ importCommand,
741
+ coverageRouteCommand,
742
+ ],
743
+ options: [
744
+ {
745
+ name: 'q-learning',
746
+ short: 'q',
747
+ description: 'Use Q-Learning for agent selection',
748
+ type: 'boolean',
749
+ default: true,
750
+ },
751
+ {
752
+ name: 'agent',
753
+ short: 'a',
754
+ description: 'Force specific agent',
755
+ type: 'string',
756
+ },
757
+ ],
758
+ examples: [
759
+ { command: 'claude-flow route "implement feature"', description: 'Route task to best agent' },
760
+ { command: 'claude-flow route "write tests" --q-learning', description: 'Use Q-Learning routing' },
761
+ { command: 'claude-flow route --agent coder "fix bug"', description: 'Force specific agent' },
762
+ { command: 'claude-flow route list-agents', description: 'List available agents' },
763
+ { command: 'claude-flow route stats', description: 'Show routing statistics' },
764
+ ],
765
+ action: async (ctx) => {
766
+ // If task description provided directly, route it
767
+ if (ctx.args.length > 0 && routeTaskCommand.action) {
768
+ const result = await routeTaskCommand.action(ctx);
769
+ if (result)
770
+ return result;
771
+ return { success: true };
772
+ }
773
+ // Show help
774
+ output.writeln();
775
+ output.writeln(output.bold('Q-Learning Agent Router'));
776
+ output.writeln(output.dim('Intelligent task-to-agent routing using reinforcement learning'));
777
+ output.writeln();
778
+ output.writeln('Usage: claude-flow route <task> [options]');
779
+ output.writeln(' claude-flow route <subcommand>');
780
+ output.writeln();
781
+ output.writeln(output.bold('Subcommands:'));
782
+ output.printList([
783
+ `${output.highlight('task')} - Route a task to optimal agent`,
784
+ `${output.highlight('list-agents')} - List available agent types`,
785
+ `${output.highlight('stats')} - Show router statistics`,
786
+ `${output.highlight('feedback')} - Provide routing feedback`,
787
+ `${output.highlight('reset')} - Reset router state`,
788
+ `${output.highlight('export')} - Export Q-table`,
789
+ `${output.highlight('import')} - Import Q-table`,
790
+ ]);
791
+ output.writeln();
792
+ output.writeln(output.bold('How It Works:'));
793
+ output.printList([
794
+ 'Analyzes task description using hash-based state encoding',
795
+ 'Uses Q-Learning to learn from routing outcomes',
796
+ 'Epsilon-greedy exploration for continuous improvement',
797
+ 'Provides confidence scores and alternatives',
798
+ ]);
799
+ output.writeln();
800
+ // Show quick status
801
+ const ruvectorAvailable = await isRuvectorAvailable();
802
+ output.writeln(output.bold('Backend Status:'));
803
+ output.printList([
804
+ `RuVector: ${ruvectorAvailable ? output.success('Available') : output.warning('Fallback mode')}`,
805
+ `Backend: ${ruvectorAvailable ? 'ruvector-native' : 'JavaScript fallback'}`,
806
+ ]);
807
+ output.writeln();
808
+ output.writeln(output.dim('Run "claude-flow route <subcommand> --help" for more info'));
809
+ return { success: true };
810
+ },
811
+ };
812
+ export default routeCommand;
813
+ //# sourceMappingURL=route.js.map