kynjal-cli 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  2. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  3. package/dist/src/appliance/gguf-engine.js +286 -525
  4. package/dist/src/appliance/gguf-engine.js.map +1 -1
  5. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  7. package/dist/src/appliance/ruvllm-bridge.js +203 -403
  8. package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
  9. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  11. package/dist/src/appliance/rvfa-builder.js +154 -208
  12. package/dist/src/appliance/rvfa-builder.js.map +1 -1
  13. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  15. package/dist/src/appliance/rvfa-distribution.js +260 -423
  16. package/dist/src/appliance/rvfa-distribution.js.map +1 -1
  17. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  18. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  19. package/dist/src/appliance/rvfa-format.js +128 -200
  20. package/dist/src/appliance/rvfa-format.js.map +1 -1
  21. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  23. package/dist/src/appliance/rvfa-runner.js +168 -304
  24. package/dist/src/appliance/rvfa-runner.js.map +1 -1
  25. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  27. package/dist/src/appliance/rvfa-signing.js +173 -295
  28. package/dist/src/appliance/rvfa-signing.js.map +1 -1
  29. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  30. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  31. package/dist/src/benchmarks/pretrain/index.js +331 -542
  32. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  33. package/dist/src/commands/agent.js +574 -697
  34. package/dist/src/commands/agent.js.map +1 -1
  35. package/dist/src/commands/analyze.js +1218 -1548
  36. package/dist/src/commands/analyze.js.map +1 -1
  37. package/dist/src/commands/appliance-advanced.js +158 -267
  38. package/dist/src/commands/appliance-advanced.js.map +1 -1
  39. package/dist/src/commands/appliance.js +318 -493
  40. package/dist/src/commands/appliance.js.map +1 -1
  41. package/dist/src/commands/benchmark.js +372 -523
  42. package/dist/src/commands/benchmark.js.map +1 -1
  43. package/dist/src/commands/claims.js +274 -364
  44. package/dist/src/commands/claims.js.map +1 -1
  45. package/dist/src/commands/cleanup.js +113 -157
  46. package/dist/src/commands/cleanup.js.map +1 -1
  47. package/dist/src/commands/completions.js +477 -118
  48. package/dist/src/commands/completions.js.map +1 -1
  49. package/dist/src/commands/config.js +237 -303
  50. package/dist/src/commands/config.js.map +1 -1
  51. package/dist/src/commands/daemon.js +487 -596
  52. package/dist/src/commands/daemon.js.map +1 -1
  53. package/dist/src/commands/deployment.js +194 -275
  54. package/dist/src/commands/deployment.js.map +1 -1
  55. package/dist/src/commands/doctor.js +504 -686
  56. package/dist/src/commands/doctor.js.map +1 -1
  57. package/dist/src/commands/embeddings.js +1293 -1543
  58. package/dist/src/commands/embeddings.js.map +1 -1
  59. package/dist/src/commands/guidance.js +449 -596
  60. package/dist/src/commands/guidance.js.map +1 -1
  61. package/dist/src/commands/hive-mind.js +854 -938
  62. package/dist/src/commands/hive-mind.js.map +1 -1
  63. package/dist/src/commands/hooks.js +3112 -3519
  64. package/dist/src/commands/hooks.js.map +1 -1
  65. package/dist/src/commands/index.d.ts +115 -0
  66. package/dist/src/commands/index.d.ts.map +1 -0
  67. package/dist/src/commands/index.js +126 -308
  68. package/dist/src/commands/index.js.map +1 -1
  69. package/dist/src/commands/init.js +788 -940
  70. package/dist/src/commands/init.js.map +1 -1
  71. package/dist/src/commands/issues.js +383 -558
  72. package/dist/src/commands/issues.js.map +1 -1
  73. package/dist/src/commands/mcp.js +493 -605
  74. package/dist/src/commands/mcp.js.map +1 -1
  75. package/dist/src/commands/memory.js +833 -1026
  76. package/dist/src/commands/memory.js.map +1 -1
  77. package/dist/src/commands/migrate.js +282 -347
  78. package/dist/src/commands/migrate.js.map +1 -1
  79. package/dist/src/commands/neural.js +1289 -1563
  80. package/dist/src/commands/neural.js.map +1 -1
  81. package/dist/src/commands/performance.js +497 -643
  82. package/dist/src/commands/performance.js.map +1 -1
  83. package/dist/src/commands/plugins.js +668 -841
  84. package/dist/src/commands/plugins.js.map +1 -1
  85. package/dist/src/commands/process.js +392 -447
  86. package/dist/src/commands/process.js.map +1 -1
  87. package/dist/src/commands/progress.js +162 -256
  88. package/dist/src/commands/progress.js.map +1 -1
  89. package/dist/src/commands/providers.js +150 -220
  90. package/dist/src/commands/providers.js.map +1 -1
  91. package/dist/src/commands/route.js +520 -665
  92. package/dist/src/commands/route.js.map +1 -1
  93. package/dist/src/commands/ruvector/backup.js +505 -651
  94. package/dist/src/commands/ruvector/backup.js.map +1 -1
  95. package/dist/src/commands/ruvector/benchmark.js +349 -401
  96. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  97. package/dist/src/commands/ruvector/import.js +224 -266
  98. package/dist/src/commands/ruvector/import.js.map +1 -1
  99. package/dist/src/commands/ruvector/index.js +37 -75
  100. package/dist/src/commands/ruvector/index.js.map +1 -1
  101. package/dist/src/commands/ruvector/init.js +336 -359
  102. package/dist/src/commands/ruvector/init.js.map +1 -1
  103. package/dist/src/commands/ruvector/migrate.js +335 -322
  104. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  105. package/dist/src/commands/ruvector/optimize.js +375 -431
  106. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  107. package/dist/src/commands/ruvector/setup.js +703 -117
  108. package/dist/src/commands/ruvector/setup.js.map +1 -1
  109. package/dist/src/commands/ruvector/status.js +364 -419
  110. package/dist/src/commands/ruvector/status.js.map +1 -1
  111. package/dist/src/commands/security.js +485 -608
  112. package/dist/src/commands/security.js.map +1 -1
  113. package/dist/src/commands/session.js +504 -626
  114. package/dist/src/commands/session.js.map +1 -1
  115. package/dist/src/commands/start.js +267 -364
  116. package/dist/src/commands/start.js.map +1 -1
  117. package/dist/src/commands/status.js +380 -486
  118. package/dist/src/commands/status.js.map +1 -1
  119. package/dist/src/commands/swarm.js +408 -488
  120. package/dist/src/commands/swarm.js.map +1 -1
  121. package/dist/src/commands/task.js +423 -538
  122. package/dist/src/commands/task.js.map +1 -1
  123. package/dist/src/commands/transfer-store.js +322 -412
  124. package/dist/src/commands/transfer-store.js.map +1 -1
  125. package/dist/src/commands/update.js +196 -291
  126. package/dist/src/commands/update.js.map +1 -1
  127. package/dist/src/commands/workflow.js +386 -486
  128. package/dist/src/commands/workflow.js.map +1 -1
  129. package/dist/src/config-adapter.d.ts +15 -0
  130. package/dist/src/config-adapter.d.ts.map +1 -0
  131. package/dist/src/config-adapter.js +38 -39
  132. package/dist/src/config-adapter.js.map +1 -1
  133. package/dist/src/index.d.ts +77 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +309 -411
  136. package/dist/src/index.js.map +1 -1
  137. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  138. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  139. package/dist/src/infrastructure/in-memory-repositories.js +246 -507
  140. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  141. package/dist/src/init/claudemd-generator.d.ts +25 -0
  142. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  143. package/dist/src/init/claudemd-generator.js +368 -78
  144. package/dist/src/init/claudemd-generator.js.map +1 -1
  145. package/dist/src/init/executor.d.ts +41 -0
  146. package/dist/src/init/executor.d.ts.map +1 -0
  147. package/dist/src/init/executor.js +1307 -996
  148. package/dist/src/init/executor.js.map +1 -1
  149. package/dist/src/init/helpers-generator.d.ts +60 -0
  150. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  151. package/dist/src/init/helpers-generator.js +657 -12
  152. package/dist/src/init/helpers-generator.js.map +1 -1
  153. package/dist/src/init/index.d.ts +1 -1
  154. package/dist/src/init/index.d.ts.map +1 -1
  155. package/dist/src/init/index.js +1 -1
  156. package/dist/src/init/index.js.map +1 -1
  157. package/dist/src/init/mcp-generator.js +33 -37
  158. package/dist/src/init/mcp-generator.js.map +1 -1
  159. package/dist/src/init/settings-generator.js +76 -77
  160. package/dist/src/init/settings-generator.js.map +1 -1
  161. package/dist/src/init/statusline-generator.js +801 -3
  162. package/dist/src/init/statusline-generator.js.map +1 -1
  163. package/dist/src/init/types.d.ts +1 -1
  164. package/dist/src/init/types.d.ts.map +1 -1
  165. package/dist/src/init/types.js +76 -59
  166. package/dist/src/init/types.js.map +1 -1
  167. package/dist/src/mcp-client.d.ts +92 -0
  168. package/dist/src/mcp-client.d.ts.map +1 -0
  169. package/dist/src/mcp-client.js +81 -125
  170. package/dist/src/mcp-client.js.map +1 -1
  171. package/dist/src/mcp-server.d.ts +161 -0
  172. package/dist/src/mcp-server.d.ts.map +1 -0
  173. package/dist/src/mcp-server.js +470 -757
  174. package/dist/src/mcp-server.js.map +1 -1
  175. package/dist/src/mcp-tools/agent-tools.js +391 -492
  176. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  177. package/dist/src/mcp-tools/agentdb-tools.js +332 -533
  178. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/analyze-tools.js +172 -236
  180. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  181. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  182. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  183. package/dist/src/mcp-tools/auto-install.js +80 -142
  184. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  185. package/dist/src/mcp-tools/browser-tools.js +252 -375
  186. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  187. package/dist/src/mcp-tools/claims-tools.js +473 -565
  188. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/config-tools.js +197 -272
  190. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  191. package/dist/src/mcp-tools/coordination-tools.js +500 -572
  192. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  193. package/dist/src/mcp-tools/daa-tools.js +286 -364
  194. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/embeddings-tools.js +582 -693
  196. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/github-tools.js +260 -311
  198. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
  200. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
  202. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/memory-tools.js +350 -505
  204. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  205. package/dist/src/mcp-tools/neural-tools.js +315 -412
  206. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  207. package/dist/src/mcp-tools/performance-tools.js +420 -480
  208. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/progress-tools.js +204 -278
  210. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  211. package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
  212. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/security-tools.js +297 -429
  214. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/session-tools.js +185 -234
  216. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  217. package/dist/src/mcp-tools/swarm-tools.js +207 -260
  218. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  219. package/dist/src/mcp-tools/system-tools.js +276 -325
  220. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/task-tools.js +270 -336
  222. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/terminal-tools.js +148 -196
  224. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/transfer-tools.js +186 -333
  226. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/types.d.ts +31 -0
  228. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  229. package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
  230. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  231. package/dist/src/mcp-tools/workflow-tools.js +405 -450
  232. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  233. package/dist/src/memory/ewc-consolidation.d.ts +295 -0
  234. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  235. package/dist/src/memory/ewc-consolidation.js +190 -303
  236. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  237. package/dist/src/memory/intelligence.d.ts +338 -0
  238. package/dist/src/memory/intelligence.d.ts.map +1 -0
  239. package/dist/src/memory/intelligence.js +569 -794
  240. package/dist/src/memory/intelligence.js.map +1 -1
  241. package/dist/src/memory/memory-bridge.d.ts +407 -0
  242. package/dist/src/memory/memory-bridge.d.ts.map +1 -0
  243. package/dist/src/memory/memory-bridge.js +1170 -1640
  244. package/dist/src/memory/memory-bridge.js.map +1 -1
  245. package/dist/src/memory/memory-initializer.d.ts +412 -0
  246. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  247. package/dist/src/memory/memory-initializer.js +1836 -1851
  248. package/dist/src/memory/memory-initializer.js.map +1 -1
  249. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  250. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  251. package/dist/src/memory/sona-optimizer.js +199 -329
  252. package/dist/src/memory/sona-optimizer.js.map +1 -1
  253. package/dist/src/output.d.ts +2 -2
  254. package/dist/src/output.d.ts.map +1 -1
  255. package/dist/src/output.js +242 -272
  256. package/dist/src/output.js.map +1 -1
  257. package/dist/src/parser.d.ts +51 -0
  258. package/dist/src/parser.d.ts.map +1 -0
  259. package/dist/src/parser.js +140 -187
  260. package/dist/src/parser.js.map +1 -1
  261. package/dist/src/plugins/manager.d.ts +133 -0
  262. package/dist/src/plugins/manager.d.ts.map +1 -0
  263. package/dist/src/plugins/manager.js +285 -521
  264. package/dist/src/plugins/manager.js.map +1 -1
  265. package/dist/src/plugins/store/discovery.d.ts +88 -0
  266. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  267. package/dist/src/plugins/store/discovery.js +271 -358
  268. package/dist/src/plugins/store/discovery.js.map +1 -1
  269. package/dist/src/plugins/store/index.d.ts +76 -0
  270. package/dist/src/plugins/store/index.d.ts.map +1 -0
  271. package/dist/src/plugins/store/index.js +48 -105
  272. package/dist/src/plugins/store/index.js.map +1 -1
  273. package/dist/src/plugins/store/search.d.ts +46 -0
  274. package/dist/src/plugins/store/search.d.ts.map +1 -0
  275. package/dist/src/plugins/store/search.js +69 -107
  276. package/dist/src/plugins/store/search.js.map +1 -1
  277. package/dist/src/plugins/store/types.d.ts +274 -0
  278. package/dist/src/plugins/store/types.d.ts.map +1 -0
  279. package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
  280. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  281. package/dist/src/plugins/tests/standalone-test.js +172 -223
  282. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  283. package/dist/src/plugins/tests/test-plugin-store.js +190 -228
  284. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  285. package/dist/src/production/circuit-breaker.d.ts +101 -0
  286. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  287. package/dist/src/production/circuit-breaker.js +62 -126
  288. package/dist/src/production/circuit-breaker.js.map +1 -1
  289. package/dist/src/production/error-handler.d.ts +92 -0
  290. package/dist/src/production/error-handler.d.ts.map +1 -0
  291. package/dist/src/production/error-handler.js +86 -156
  292. package/dist/src/production/error-handler.js.map +1 -1
  293. package/dist/src/production/monitoring.d.ts +161 -0
  294. package/dist/src/production/monitoring.d.ts.map +1 -0
  295. package/dist/src/production/monitoring.js +139 -220
  296. package/dist/src/production/monitoring.js.map +1 -1
  297. package/dist/src/production/rate-limiter.d.ts +80 -0
  298. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  299. package/dist/src/production/rate-limiter.js +74 -93
  300. package/dist/src/production/rate-limiter.js.map +1 -1
  301. package/dist/src/production/retry.d.ts +48 -0
  302. package/dist/src/production/retry.d.ts.map +1 -0
  303. package/dist/src/production/retry.js +75 -167
  304. package/dist/src/production/retry.js.map +1 -1
  305. package/dist/src/prompt.d.ts +44 -0
  306. package/dist/src/prompt.d.ts.map +1 -0
  307. package/dist/src/prompt.js +436 -560
  308. package/dist/src/prompt.js.map +1 -1
  309. package/dist/src/runtime/headless.d.ts +60 -0
  310. package/dist/src/runtime/headless.d.ts.map +1 -0
  311. package/dist/src/runtime/headless.js +197 -286
  312. package/dist/src/runtime/headless.js.map +1 -1
  313. package/dist/src/ruvector/agent-wasm.d.ts +182 -0
  314. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
  315. package/dist/src/ruvector/agent-wasm.js +156 -351
  316. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  317. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  318. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  319. package/dist/src/ruvector/ast-analyzer.js +145 -232
  320. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  321. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  322. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  323. package/dist/src/ruvector/coverage-router.js +287 -419
  324. package/dist/src/ruvector/coverage-router.js.map +1 -1
  325. package/dist/src/ruvector/coverage-tools.js +56 -101
  326. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  327. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  328. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  329. package/dist/src/ruvector/diff-classifier.js +324 -451
  330. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  331. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  332. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  333. package/dist/src/ruvector/enhanced-model-router.js +260 -336
  334. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  335. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  336. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  337. package/dist/src/ruvector/flash-attention.js +223 -254
  338. package/dist/src/ruvector/flash-attention.js.map +1 -1
  339. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  340. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  341. package/dist/src/ruvector/graph-analyzer.js +486 -680
  342. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  343. package/dist/src/ruvector/index.d.ts +40 -0
  344. package/dist/src/ruvector/index.d.ts.map +1 -0
  345. package/dist/src/ruvector/index.js +36 -106
  346. package/dist/src/ruvector/index.js.map +1 -1
  347. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  348. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  349. package/dist/src/ruvector/lora-adapter.js +155 -248
  350. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  351. package/dist/src/ruvector/model-router.d.ts +220 -0
  352. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  353. package/dist/src/ruvector/model-router.js +175 -248
  354. package/dist/src/ruvector/model-router.js.map +1 -1
  355. package/dist/src/ruvector/moe-router.d.ts +206 -0
  356. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  357. package/dist/src/ruvector/moe-router.js +228 -286
  358. package/dist/src/ruvector/moe-router.js.map +1 -1
  359. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  360. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  361. package/dist/src/ruvector/q-learning-router.js +257 -338
  362. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  363. package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  364. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
  365. package/dist/src/ruvector/ruvllm-wasm.js +270 -434
  366. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  367. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  368. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  369. package/dist/src/ruvector/semantic-router.js +60 -67
  370. package/dist/src/ruvector/semantic-router.js.map +1 -1
  371. package/dist/src/ruvector/vector-db.d.ts +69 -0
  372. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  373. package/dist/src/ruvector/vector-db.js +119 -205
  374. package/dist/src/ruvector/vector-db.js.map +1 -1
  375. package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  376. package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
  377. package/dist/src/services/agentic-flow-bridge.js +32 -105
  378. package/dist/src/services/agentic-flow-bridge.js.map +1 -1
  379. package/dist/src/services/claim-service.d.ts +204 -0
  380. package/dist/src/services/claim-service.d.ts.map +1 -0
  381. package/dist/src/services/claim-service.js +615 -940
  382. package/dist/src/services/claim-service.js.map +1 -1
  383. package/dist/src/services/container-worker-pool.d.ts +197 -0
  384. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  385. package/dist/src/services/container-worker-pool.js +398 -666
  386. package/dist/src/services/container-worker-pool.js.map +1 -1
  387. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  388. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  389. package/dist/src/services/headless-worker-executor.js +441 -467
  390. package/dist/src/services/headless-worker-executor.js.map +1 -1
  391. package/dist/src/services/index.d.ts +4 -4
  392. package/dist/src/services/index.d.ts.map +1 -1
  393. package/dist/src/services/index.js +4 -4
  394. package/dist/src/services/index.js.map +1 -1
  395. package/dist/src/services/registry-api.d.ts +58 -0
  396. package/dist/src/services/registry-api.d.ts.map +1 -0
  397. package/dist/src/services/registry-api.js +92 -200
  398. package/dist/src/services/registry-api.js.map +1 -1
  399. package/dist/src/services/ruvector-training.d.ts +222 -0
  400. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  401. package/dist/src/services/ruvector-training.js +257 -337
  402. package/dist/src/services/ruvector-training.js.map +1 -1
  403. package/dist/src/services/worker-daemon.d.ts +228 -0
  404. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  405. package/dist/src/services/worker-daemon.js +591 -849
  406. package/dist/src/services/worker-daemon.js.map +1 -1
  407. package/dist/src/services/worker-queue.d.ts +194 -0
  408. package/dist/src/services/worker-queue.d.ts.map +1 -0
  409. package/dist/src/services/worker-queue.js +331 -548
  410. package/dist/src/services/worker-queue.js.map +1 -1
  411. package/dist/src/suggest.d.ts +53 -0
  412. package/dist/src/suggest.d.ts.map +1 -0
  413. package/dist/src/suggest.js +45 -55
  414. package/dist/src/suggest.js.map +1 -1
  415. package/dist/src/transfer/anonymization/index.js +29 -37
  416. package/dist/src/transfer/anonymization/index.js.map +1 -1
  417. package/dist/src/transfer/deploy-seraphine.js +128 -155
  418. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  419. package/dist/src/transfer/export.d.ts +25 -0
  420. package/dist/src/transfer/export.d.ts.map +1 -0
  421. package/dist/src/transfer/export.js +84 -142
  422. package/dist/src/transfer/export.js.map +1 -1
  423. package/dist/src/transfer/index.d.ts +1 -1
  424. package/dist/src/transfer/index.d.ts.map +1 -1
  425. package/dist/src/transfer/index.js +0 -2
  426. package/dist/src/transfer/index.js.map +1 -1
  427. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  428. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  429. package/dist/src/transfer/ipfs/client.js +187 -337
  430. package/dist/src/transfer/ipfs/client.js.map +1 -1
  431. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  432. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  433. package/dist/src/transfer/ipfs/upload.js +288 -434
  434. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  435. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  436. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  437. package/dist/src/transfer/models/seraphine.js +55 -55
  438. package/dist/src/transfer/models/seraphine.js.map +1 -1
  439. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  440. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  441. package/dist/src/transfer/serialization/cfp.js +30 -31
  442. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  443. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  444. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  445. package/dist/src/transfer/storage/gcs.js +165 -232
  446. package/dist/src/transfer/storage/gcs.js.map +1 -1
  447. package/dist/src/transfer/store/discovery.d.ts +84 -0
  448. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  449. package/dist/src/transfer/store/discovery.js +239 -349
  450. package/dist/src/transfer/store/discovery.js.map +1 -1
  451. package/dist/src/transfer/store/download.d.ts +70 -0
  452. package/dist/src/transfer/store/download.d.ts.map +1 -0
  453. package/dist/src/transfer/store/download.js +243 -365
  454. package/dist/src/transfer/store/download.js.map +1 -1
  455. package/dist/src/transfer/store/index.d.ts +84 -0
  456. package/dist/src/transfer/store/index.d.ts.map +1 -0
  457. package/dist/src/transfer/store/index.js +63 -130
  458. package/dist/src/transfer/store/index.js.map +1 -1
  459. package/dist/src/transfer/store/publish.d.ts +76 -0
  460. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  461. package/dist/src/transfer/store/publish.js +184 -258
  462. package/dist/src/transfer/store/publish.js.map +1 -1
  463. package/dist/src/transfer/store/registry.js +50 -72
  464. package/dist/src/transfer/store/registry.js.map +1 -1
  465. package/dist/src/transfer/store/search.d.ts +54 -0
  466. package/dist/src/transfer/store/search.d.ts.map +1 -0
  467. package/dist/src/transfer/store/search.js +64 -96
  468. package/dist/src/transfer/store/search.js.map +1 -1
  469. package/dist/src/transfer/store/tests/standalone-test.js +174 -231
  470. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  471. package/dist/src/transfer/test-seraphine.js +95 -130
  472. package/dist/src/transfer/test-seraphine.js.map +1 -1
  473. package/dist/src/transfer/tests/test-store.js +194 -239
  474. package/dist/src/transfer/tests/test-store.js.map +1 -1
  475. package/dist/src/transfer/types.d.ts +245 -0
  476. package/dist/src/transfer/types.d.ts.map +1 -0
  477. package/dist/src/types.d.ts +198 -0
  478. package/dist/src/types.d.ts.map +1 -0
  479. package/dist/src/types.js +26 -55
  480. package/dist/src/types.js.map +1 -1
  481. package/dist/src/update/checker.d.ts +34 -0
  482. package/dist/src/update/checker.d.ts.map +1 -0
  483. package/dist/src/update/checker.js +106 -183
  484. package/dist/src/update/checker.js.map +1 -1
  485. package/dist/src/update/executor.d.ts +32 -0
  486. package/dist/src/update/executor.d.ts.map +1 -0
  487. package/dist/src/update/executor.js +135 -198
  488. package/dist/src/update/executor.js.map +1 -1
  489. package/dist/src/update/index.d.ts +33 -0
  490. package/dist/src/update/index.d.ts.map +1 -0
  491. package/dist/src/update/index.js +38 -85
  492. package/dist/src/update/index.js.map +1 -1
  493. package/dist/src/update/rate-limiter.d.ts +20 -0
  494. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  495. package/dist/src/update/rate-limiter.js +19 -31
  496. package/dist/src/update/rate-limiter.js.map +1 -1
  497. package/dist/src/update/validator.d.ts +17 -0
  498. package/dist/src/update/validator.d.ts.map +1 -0
  499. package/dist/src/update/validator.js +38 -64
  500. package/dist/src/update/validator.js.map +1 -1
  501. package/dist/tsconfig.tsbuildinfo +1 -1
  502. package/package.json +1 -1
@@ -7,31 +7,349 @@ import { generateStatuslineScript, generateStatuslineHook } from './statusline-g
7
7
  * Generate pre-commit hook script
8
8
  */
9
9
  export function generatePreCommitHook() {
10
- return "#!/bin/bash\n# Ruflo Pre-Commit Hook\n# Validates code quality before commit\n\nset -e\n\necho \"\uD83D\uDD0D Running Ruflo pre-commit checks...\"\n\n# Get staged files\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)\n\n# Run validation for each staged file\nfor FILE in $STAGED_FILES; do\n if [[ \"$FILE\" =~ \\.(ts|js|tsx|jsx)$ ]]; then\n echo \" Validating: $FILE\"\n npx @claude-flow/cli hooks pre-edit --file \"$FILE\" --validate-syntax 2>/dev/null || true\n fi\ndone\n\n# Run tests if available\nif [ -f \"package.json\" ] && grep -q '\"test\"' package.json; then\n echo \"\uD83E\uDDEA Running tests...\"\n npm test --if-present 2>/dev/null || echo \" Tests skipped or failed\"\nfi\n\necho \"\u2705 Pre-commit checks complete\"\n";
10
+ return `#!/bin/bash
11
+ # Ruflo Pre-Commit Hook
12
+ # Validates code quality before commit
13
+
14
+ set -e
15
+
16
+ echo "🔍 Running Ruflo pre-commit checks..."
17
+
18
+ # Get staged files
19
+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
20
+
21
+ # Run validation for each staged file
22
+ for FILE in $STAGED_FILES; do
23
+ if [[ "$FILE" =~ \\.(ts|js|tsx|jsx)$ ]]; then
24
+ echo " Validating: $FILE"
25
+ npx @claude-flow/cli hooks pre-edit --file "$FILE" --validate-syntax 2>/dev/null || true
26
+ fi
27
+ done
28
+
29
+ # Run tests if available
30
+ if [ -f "package.json" ] && grep -q '"test"' package.json; then
31
+ echo "🧪 Running tests..."
32
+ npm test --if-present 2>/dev/null || echo " Tests skipped or failed"
33
+ fi
34
+
35
+ echo "✅ Pre-commit checks complete"
36
+ `;
11
37
  }
12
38
  /**
13
39
  * Generate post-commit hook script
14
40
  */
15
41
  export function generatePostCommitHook() {
16
- return "#!/bin/bash\n# Ruflo Post-Commit Hook\n# Records commit metrics and trains patterns\n\nCOMMIT_HASH=$(git rev-parse HEAD)\nCOMMIT_MSG=$(git log -1 --pretty=%B)\n\necho \"\uD83D\uDCCA Recording commit metrics...\"\n\n# Notify ruflo of commit\nnpx ruflo@latest hooks notify \\\n --message \"Commit: $COMMIT_MSG\" \\\n --level info \\\n --metadata '{\"hash\": \"'$COMMIT_HASH'\"}' 2>/dev/null || true\n\necho \"\u2705 Commit recorded\"\n";
42
+ return `#!/bin/bash
43
+ # Ruflo Post-Commit Hook
44
+ # Records commit metrics and trains patterns
45
+
46
+ COMMIT_HASH=$(git rev-parse HEAD)
47
+ COMMIT_MSG=$(git log -1 --pretty=%B)
48
+
49
+ echo "📊 Recording commit metrics..."
50
+
51
+ # Notify ruflo of commit
52
+ npx ruflo@latest hooks notify \\
53
+ --message "Commit: $COMMIT_MSG" \\
54
+ --level info \\
55
+ --metadata '{"hash": "'$COMMIT_HASH'"}' 2>/dev/null || true
56
+
57
+ echo "✅ Commit recorded"
58
+ `;
17
59
  }
18
60
  /**
19
61
  * Generate session manager script
20
62
  */
21
63
  export function generateSessionManager() {
22
- return "#!/usr/bin/env node\n/**\n * Ruflo Session Manager\n * Handles session lifecycle: start, restore, end\n */\n\nconst fs = require('fs');\nconst path = require('path');\n\nconst SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');\nconst SESSION_FILE = path.join(SESSION_DIR, 'current.json');\n\nconst commands = {\n start: () => {\n const sessionId = `session-${Date.now()}`;\n const session = {\n id: sessionId,\n startedAt: new Date().toISOString(),\n cwd: process.cwd(),\n context: {},\n metrics: {\n edits: 0,\n commands: 0,\n tasks: 0,\n errors: 0,\n },\n };\n\n fs.mkdirSync(SESSION_DIR, { recursive: true });\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n\n console.log(`Session started: ${sessionId}`);\n return session;\n },\n\n restore: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No session to restore');\n return null;\n }\n\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n session.restoredAt = new Date().toISOString();\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n\n console.log(`Session restored: ${session.id}`);\n return session;\n },\n\n end: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No active session');\n return null;\n }\n\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n session.endedAt = new Date().toISOString();\n session.duration = Date.now() - new Date(session.startedAt).getTime();\n\n // Archive session\n const archivePath = path.join(SESSION_DIR, `${session.id}.json`);\n fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));\n fs.unlinkSync(SESSION_FILE);\n\n console.log(`Session ended: ${session.id}`);\n console.log(`Duration: ${Math.round(session.duration / 1000 / 60)} minutes`);\n console.log(`Metrics: ${JSON.stringify(session.metrics)}`);\n\n return session;\n },\n\n status: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No active session');\n return null;\n }\n\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n const duration = Date.now() - new Date(session.startedAt).getTime();\n\n console.log(`Session: ${session.id}`);\n console.log(`Started: ${session.startedAt}`);\n console.log(`Duration: ${Math.round(duration / 1000 / 60)} minutes`);\n console.log(`Metrics: ${JSON.stringify(session.metrics)}`);\n\n return session;\n },\n\n update: (key, value) => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No active session');\n return null;\n }\n\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n session.context[key] = value;\n session.updatedAt = new Date().toISOString();\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n\n return session;\n },\n\n metric: (name) => {\n if (!fs.existsSync(SESSION_FILE)) {\n return null;\n }\n\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n if (session.metrics[name] !== undefined) {\n session.metrics[name]++;\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n }\n\n return session;\n },\n};\n\n// CLI\nconst [,, command, ...args] = process.argv;\n\nif (command && commands[command]) {\n commands[command](...args);\n} else {\n console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');\n}\n\nmodule.exports = commands;\n";
64
+ return `#!/usr/bin/env node
65
+ /**
66
+ * Ruflo Session Manager
67
+ * Handles session lifecycle: start, restore, end
68
+ */
69
+
70
+ const fs = require('fs');
71
+ const path = require('path');
72
+
73
+ const SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');
74
+ const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
75
+
76
+ const commands = {
77
+ start: () => {
78
+ const sessionId = \`session-\${Date.now()}\`;
79
+ const session = {
80
+ id: sessionId,
81
+ startedAt: new Date().toISOString(),
82
+ cwd: process.cwd(),
83
+ context: {},
84
+ metrics: {
85
+ edits: 0,
86
+ commands: 0,
87
+ tasks: 0,
88
+ errors: 0,
89
+ },
90
+ };
91
+
92
+ fs.mkdirSync(SESSION_DIR, { recursive: true });
93
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
94
+
95
+ console.log(\`Session started: \${sessionId}\`);
96
+ return session;
97
+ },
98
+
99
+ restore: () => {
100
+ if (!fs.existsSync(SESSION_FILE)) {
101
+ console.log('No session to restore');
102
+ return null;
103
+ }
104
+
105
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
106
+ session.restoredAt = new Date().toISOString();
107
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
108
+
109
+ console.log(\`Session restored: \${session.id}\`);
110
+ return session;
111
+ },
112
+
113
+ end: () => {
114
+ if (!fs.existsSync(SESSION_FILE)) {
115
+ console.log('No active session');
116
+ return null;
117
+ }
118
+
119
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
120
+ session.endedAt = new Date().toISOString();
121
+ session.duration = Date.now() - new Date(session.startedAt).getTime();
122
+
123
+ // Archive session
124
+ const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
125
+ fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
126
+ fs.unlinkSync(SESSION_FILE);
127
+
128
+ console.log(\`Session ended: \${session.id}\`);
129
+ console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
130
+ console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
131
+
132
+ return session;
133
+ },
134
+
135
+ status: () => {
136
+ if (!fs.existsSync(SESSION_FILE)) {
137
+ console.log('No active session');
138
+ return null;
139
+ }
140
+
141
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
142
+ const duration = Date.now() - new Date(session.startedAt).getTime();
143
+
144
+ console.log(\`Session: \${session.id}\`);
145
+ console.log(\`Started: \${session.startedAt}\`);
146
+ console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
147
+ console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
148
+
149
+ return session;
150
+ },
151
+
152
+ update: (key, value) => {
153
+ if (!fs.existsSync(SESSION_FILE)) {
154
+ console.log('No active session');
155
+ return null;
156
+ }
157
+
158
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
159
+ session.context[key] = value;
160
+ session.updatedAt = new Date().toISOString();
161
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
162
+
163
+ return session;
164
+ },
165
+
166
+ metric: (name) => {
167
+ if (!fs.existsSync(SESSION_FILE)) {
168
+ return null;
169
+ }
170
+
171
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
172
+ if (session.metrics[name] !== undefined) {
173
+ session.metrics[name]++;
174
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
175
+ }
176
+
177
+ return session;
178
+ },
179
+ };
180
+
181
+ // CLI
182
+ const [,, command, ...args] = process.argv;
183
+
184
+ if (command && commands[command]) {
185
+ commands[command](...args);
186
+ } else {
187
+ console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');
188
+ }
189
+
190
+ module.exports = commands;
191
+ `;
23
192
  }
24
193
  /**
25
194
  * Generate agent router script
26
195
  */
27
196
  export function generateAgentRouter() {
28
- return "#!/usr/bin/env node\n/**\n * Ruflo Agent Router\n * Routes tasks to optimal agents based on learned patterns\n */\n\nconst AGENT_CAPABILITIES = {\n coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],\n tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],\n reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],\n researcher: ['web-search', 'documentation', 'analysis', 'summarization'],\n architect: ['system-design', 'architecture', 'patterns', 'scalability'],\n 'backend-dev': ['api', 'database', 'server', 'authentication'],\n 'frontend-dev': ['ui', 'react', 'css', 'components'],\n devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],\n};\n\nconst TASK_PATTERNS = {\n // Code patterns\n 'implement|create|build|add|write code': 'coder',\n 'test|spec|coverage|unit test|integration': 'tester',\n 'review|audit|check|validate|security': 'reviewer',\n 'research|find|search|documentation|explore': 'researcher',\n 'design|architect|structure|plan': 'architect',\n\n // Domain patterns\n 'api|endpoint|server|backend|database': 'backend-dev',\n 'ui|frontend|component|react|css|style': 'frontend-dev',\n 'deploy|docker|ci|cd|pipeline|infrastructure': 'devops',\n};\n\nfunction routeTask(task) {\n const taskLower = task.toLowerCase();\n\n // Check patterns\n for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {\n const regex = new RegExp(pattern, 'i');\n if (regex.test(taskLower)) {\n return {\n agent,\n confidence: 0.8,\n reason: `Matched pattern: ${pattern}`,\n };\n }\n }\n\n // Default to coder for unknown tasks\n return {\n agent: 'coder',\n confidence: 0.5,\n reason: 'Default routing - no specific pattern matched',\n };\n}\n\n// CLI\nconst task = process.argv.slice(2).join(' ');\n\nif (task) {\n const result = routeTask(task);\n console.log(JSON.stringify(result, null, 2));\n} else {\n console.log('Usage: router.js <task description>');\n console.log('\\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));\n}\n\nmodule.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS };\n";
197
+ return `#!/usr/bin/env node
198
+ /**
199
+ * Ruflo Agent Router
200
+ * Routes tasks to optimal agents based on learned patterns
201
+ */
202
+
203
+ const AGENT_CAPABILITIES = {
204
+ coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
205
+ tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
206
+ reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
207
+ researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
208
+ architect: ['system-design', 'architecture', 'patterns', 'scalability'],
209
+ 'backend-dev': ['api', 'database', 'server', 'authentication'],
210
+ 'frontend-dev': ['ui', 'react', 'css', 'components'],
211
+ devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
212
+ };
213
+
214
+ const TASK_PATTERNS = {
215
+ // Code patterns
216
+ 'implement|create|build|add|write code': 'coder',
217
+ 'test|spec|coverage|unit test|integration': 'tester',
218
+ 'review|audit|check|validate|security': 'reviewer',
219
+ 'research|find|search|documentation|explore': 'researcher',
220
+ 'design|architect|structure|plan': 'architect',
221
+
222
+ // Domain patterns
223
+ 'api|endpoint|server|backend|database': 'backend-dev',
224
+ 'ui|frontend|component|react|css|style': 'frontend-dev',
225
+ 'deploy|docker|ci|cd|pipeline|infrastructure': 'devops',
226
+ };
227
+
228
+ function routeTask(task) {
229
+ const taskLower = task.toLowerCase();
230
+
231
+ // Check patterns
232
+ for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {
233
+ const regex = new RegExp(pattern, 'i');
234
+ if (regex.test(taskLower)) {
235
+ return {
236
+ agent,
237
+ confidence: 0.8,
238
+ reason: \`Matched pattern: \${pattern}\`,
239
+ };
240
+ }
241
+ }
242
+
243
+ // Default to coder for unknown tasks
244
+ return {
245
+ agent: 'coder',
246
+ confidence: 0.5,
247
+ reason: 'Default routing - no specific pattern matched',
248
+ };
249
+ }
250
+
251
+ // CLI
252
+ const task = process.argv.slice(2).join(' ');
253
+
254
+ if (task) {
255
+ const result = routeTask(task);
256
+ console.log(JSON.stringify(result, null, 2));
257
+ } else {
258
+ console.log('Usage: router.js <task description>');
259
+ console.log('\\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));
260
+ }
261
+
262
+ module.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS };
263
+ `;
29
264
  }
30
265
  /**
31
266
  * Generate memory helper script
32
267
  */
33
268
  export function generateMemoryHelper() {
34
- return "#!/usr/bin/env node\n/**\n * Ruflo Memory Helper\n * Simple key-value memory for cross-session context\n */\n\nconst fs = require('fs');\nconst path = require('path');\n\nconst MEMORY_DIR = path.join(process.cwd(), '.claude-flow', 'data');\nconst MEMORY_FILE = path.join(MEMORY_DIR, 'memory.json');\n\nfunction loadMemory() {\n try {\n if (fs.existsSync(MEMORY_FILE)) {\n return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));\n }\n } catch (e) {\n // Ignore\n }\n return {};\n}\n\nfunction saveMemory(memory) {\n fs.mkdirSync(MEMORY_DIR, { recursive: true });\n fs.writeFileSync(MEMORY_FILE, JSON.stringify(memory, null, 2));\n}\n\nconst commands = {\n get: (key) => {\n const memory = loadMemory();\n const value = key ? memory[key] : memory;\n console.log(JSON.stringify(value, null, 2));\n return value;\n },\n\n set: (key, value) => {\n if (!key) {\n console.error('Key required');\n return;\n }\n const memory = loadMemory();\n memory[key] = value;\n memory._updated = new Date().toISOString();\n saveMemory(memory);\n console.log(`Set: ${key}`);\n },\n\n delete: (key) => {\n if (!key) {\n console.error('Key required');\n return;\n }\n const memory = loadMemory();\n delete memory[key];\n saveMemory(memory);\n console.log(`Deleted: ${key}`);\n },\n\n clear: () => {\n saveMemory({});\n console.log('Memory cleared');\n },\n\n keys: () => {\n const memory = loadMemory();\n const keys = Object.keys(memory).filter(k => !k.startsWith('_'));\n console.log(keys.join('\\n'));\n return keys;\n },\n};\n\n// CLI\nconst [,, command, key, ...valueParts] = process.argv;\nconst value = valueParts.join(' ');\n\nif (command && commands[command]) {\n commands[command](key, value);\n} else {\n console.log('Usage: memory.js <get|set|delete|clear|keys> [key] [value]');\n}\n\nmodule.exports = commands;\n";
269
+ return `#!/usr/bin/env node
270
+ /**
271
+ * Ruflo Memory Helper
272
+ * Simple key-value memory for cross-session context
273
+ */
274
+
275
+ const fs = require('fs');
276
+ const path = require('path');
277
+
278
+ const MEMORY_DIR = path.join(process.cwd(), '.claude-flow', 'data');
279
+ const MEMORY_FILE = path.join(MEMORY_DIR, 'memory.json');
280
+
281
+ function loadMemory() {
282
+ try {
283
+ if (fs.existsSync(MEMORY_FILE)) {
284
+ return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));
285
+ }
286
+ } catch (e) {
287
+ // Ignore
288
+ }
289
+ return {};
290
+ }
291
+
292
+ function saveMemory(memory) {
293
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
294
+ fs.writeFileSync(MEMORY_FILE, JSON.stringify(memory, null, 2));
295
+ }
296
+
297
+ const commands = {
298
+ get: (key) => {
299
+ const memory = loadMemory();
300
+ const value = key ? memory[key] : memory;
301
+ console.log(JSON.stringify(value, null, 2));
302
+ return value;
303
+ },
304
+
305
+ set: (key, value) => {
306
+ if (!key) {
307
+ console.error('Key required');
308
+ return;
309
+ }
310
+ const memory = loadMemory();
311
+ memory[key] = value;
312
+ memory._updated = new Date().toISOString();
313
+ saveMemory(memory);
314
+ console.log(\`Set: \${key}\`);
315
+ },
316
+
317
+ delete: (key) => {
318
+ if (!key) {
319
+ console.error('Key required');
320
+ return;
321
+ }
322
+ const memory = loadMemory();
323
+ delete memory[key];
324
+ saveMemory(memory);
325
+ console.log(\`Deleted: \${key}\`);
326
+ },
327
+
328
+ clear: () => {
329
+ saveMemory({});
330
+ console.log('Memory cleared');
331
+ },
332
+
333
+ keys: () => {
334
+ const memory = loadMemory();
335
+ const keys = Object.keys(memory).filter(k => !k.startsWith('_'));
336
+ console.log(keys.join('\\n'));
337
+ return keys;
338
+ },
339
+ };
340
+
341
+ // CLI
342
+ const [,, command, key, ...valueParts] = process.argv;
343
+ const value = valueParts.join(' ');
344
+
345
+ if (command && commands[command]) {
346
+ commands[command](key, value);
347
+ } else {
348
+ console.log('Usage: memory.js <get|set|delete|clear|keys> [key] [value]');
349
+ }
350
+
351
+ module.exports = commands;
352
+ `;
35
353
  }
36
354
  /**
37
355
  * Generate hook-handler.cjs (cross-platform hook dispatcher)
@@ -40,7 +358,7 @@ export function generateMemoryHelper() {
40
358
  */
41
359
  export function generateHookHandler() {
42
360
  // Build as array of lines to avoid template-in-template escaping nightmares
43
- var lines = [
361
+ const lines = [
44
362
  '#!/usr/bin/env node',
45
363
  '/**',
46
364
  ' * Ruflo Hook Handler (Cross-Platform)',
@@ -273,7 +591,7 @@ export function generateHookHandler() {
273
591
  * Gets overwritten when source copy succeeds (full version has PageRank, Jaccard, etc.)
274
592
  */
275
593
  export function generateIntelligenceStub() {
276
- var lines = [
594
+ const lines = [
277
595
  '#!/usr/bin/env node',
278
596
  '/**',
279
597
  ' * Intelligence Layer Stub (ADR-050)',
@@ -490,31 +808,358 @@ export function generateIntelligenceStub() {
490
808
  * @claude-flow/memory is not installed. Gets overwritten when source copy succeeds.
491
809
  */
492
810
  export function generateAutoMemoryHook() {
493
- return "#!/usr/bin/env node\n/**\n * Auto Memory Bridge Hook (ADR-048/049) \u2014 Minimal Fallback\n * Full version is copied from package source when available.\n *\n * Usage:\n * node auto-memory-hook.mjs import # SessionStart\n * node auto-memory-hook.mjs sync # SessionEnd / Stop\n * node auto-memory-hook.mjs status # Show bridge status\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst PROJECT_ROOT = join(__dirname, '../..');\nconst DATA_DIR = join(PROJECT_ROOT, '.claude-flow', 'data');\nconst STORE_PATH = join(DATA_DIR, 'auto-memory-store.json');\n\nconst DIM = '\\x1b[2m';\nconst RESET = '\\x1b[0m';\nconst dim = (msg) => console.log(` ${DIM}${msg}${RESET}`);\n\n// Ensure data dir\nif (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true });\n\nasync function loadMemoryPackage() {\n // Strategy 1: Use createRequire for CJS-style resolution (handles nested node_modules\n // when installed as a transitive dependency via npx ruflo / npx claude-flow)\n try {\n const { createRequire } = await import('module');\n const require = createRequire(join(PROJECT_ROOT, 'package.json'));\n return require('@claude-flow/memory');\n } catch { /* fall through */ }\n\n // Strategy 2: ESM import (works when @claude-flow/memory is a direct dependency)\n try { return await import('@claude-flow/memory'); } catch { /* fall through */ }\n\n // Strategy 3: Walk up from PROJECT_ROOT looking for the package in any node_modules\n let searchDir = PROJECT_ROOT;\n const { parse } = await import('path');\n while (searchDir !== parse(searchDir).root) {\n const candidate = join(searchDir, 'node_modules', '@claude-flow', 'memory', 'dist', 'index.js');\n if (existsSync(candidate)) {\n try { return await import(`file://${candidate}`); } catch { /* fall through */ }\n }\n searchDir = dirname(searchDir);\n }\n\n return null;\n}\n\nasync function doImport() {\n const memPkg = await loadMemoryPackage();\n\n if (!memPkg || !memPkg.AutoMemoryBridge) {\n dim('Memory package not available \u2014 auto memory import skipped (non-critical)');\n return;\n }\n\n // Full implementation deferred to copied version\n dim('Auto memory import available \u2014 run init --upgrade for full support');\n}\n\nasync function doSync() {\n if (!existsSync(STORE_PATH)) {\n dim('No entries to sync');\n return;\n }\n\n const memPkg = await loadMemoryPackage();\n\n if (!memPkg || !memPkg.AutoMemoryBridge) {\n dim('Memory package not available \u2014 sync skipped (non-critical)');\n return;\n }\n\n dim('Auto memory sync available \u2014 run init --upgrade for full support');\n}\n\nfunction doStatus() {\n console.log('\\n=== Auto Memory Bridge Status ===\\n');\n console.log(' Package: Fallback mode (run init --upgrade for full)');\n console.log(` Store: ${existsSync(STORE_PATH) ? 'Initialized' : 'Not initialized'}`);\n console.log('');\n}\n\n// Suppress unhandled rejection warnings from dynamic import() failures\nprocess.on('unhandledRejection', () => {});\n\nconst command = process.argv[2] || 'status';\n\ntry {\n switch (command) {\n case 'import': await doImport(); break;\n case 'sync': await doSync(); break;\n case 'status': doStatus(); break;\n default:\n console.log('Usage: auto-memory-hook.mjs <import|sync|status>');\n process.exit(1);\n }\n} catch (err) {\n // Hooks must never crash Claude Code - fail silently\n dim(`Error (non-critical): ${err.message}`);\n}\n// Ensure clean exit for Claude Code hooks (exit 0 = success)\nprocess.exit(0);\n";
811
+ return `#!/usr/bin/env node
812
+ /**
813
+ * Auto Memory Bridge Hook (ADR-048/049) — Minimal Fallback
814
+ * Full version is copied from package source when available.
815
+ *
816
+ * Usage:
817
+ * node auto-memory-hook.mjs import # SessionStart
818
+ * node auto-memory-hook.mjs sync # SessionEnd / Stop
819
+ * node auto-memory-hook.mjs status # Show bridge status
820
+ */
821
+
822
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
823
+ import { join, dirname } from 'path';
824
+ import { fileURLToPath } from 'url';
825
+
826
+ const __filename = fileURLToPath(import.meta.url);
827
+ const __dirname = dirname(__filename);
828
+ const PROJECT_ROOT = join(__dirname, '../..');
829
+ const DATA_DIR = join(PROJECT_ROOT, '.claude-flow', 'data');
830
+ const STORE_PATH = join(DATA_DIR, 'auto-memory-store.json');
831
+
832
+ const DIM = '\\x1b[2m';
833
+ const RESET = '\\x1b[0m';
834
+ const dim = (msg) => console.log(\` \${DIM}\${msg}\${RESET}\`);
835
+
836
+ // Ensure data dir
837
+ if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true });
838
+
839
+ async function loadMemoryPackage() {
840
+ // Strategy 1: Use createRequire for CJS-style resolution (handles nested node_modules
841
+ // when installed as a transitive dependency via npx ruflo / npx claude-flow)
842
+ try {
843
+ const { createRequire } = await import('module');
844
+ const require = createRequire(join(PROJECT_ROOT, 'package.json'));
845
+ return require('@claude-flow/memory');
846
+ } catch { /* fall through */ }
847
+
848
+ // Strategy 2: ESM import (works when @claude-flow/memory is a direct dependency)
849
+ try { return await import('@claude-flow/memory'); } catch { /* fall through */ }
850
+
851
+ // Strategy 3: Walk up from PROJECT_ROOT looking for the package in any node_modules
852
+ let searchDir = PROJECT_ROOT;
853
+ const { parse } = await import('path');
854
+ while (searchDir !== parse(searchDir).root) {
855
+ const candidate = join(searchDir, 'node_modules', '@claude-flow', 'memory', 'dist', 'index.js');
856
+ if (existsSync(candidate)) {
857
+ try { return await import(\`file://\${candidate}\`); } catch { /* fall through */ }
858
+ }
859
+ searchDir = dirname(searchDir);
860
+ }
861
+
862
+ return null;
863
+ }
864
+
865
+ async function doImport() {
866
+ const memPkg = await loadMemoryPackage();
867
+
868
+ if (!memPkg || !memPkg.AutoMemoryBridge) {
869
+ dim('Memory package not available — auto memory import skipped (non-critical)');
870
+ return;
871
+ }
872
+
873
+ // Full implementation deferred to copied version
874
+ dim('Auto memory import available — run init --upgrade for full support');
875
+ }
876
+
877
+ async function doSync() {
878
+ if (!existsSync(STORE_PATH)) {
879
+ dim('No entries to sync');
880
+ return;
881
+ }
882
+
883
+ const memPkg = await loadMemoryPackage();
884
+
885
+ if (!memPkg || !memPkg.AutoMemoryBridge) {
886
+ dim('Memory package not available — sync skipped (non-critical)');
887
+ return;
888
+ }
889
+
890
+ dim('Auto memory sync available — run init --upgrade for full support');
891
+ }
892
+
893
+ function doStatus() {
894
+ console.log('\\n=== Auto Memory Bridge Status ===\\n');
895
+ console.log(' Package: Fallback mode (run init --upgrade for full)');
896
+ console.log(\` Store: \${existsSync(STORE_PATH) ? 'Initialized' : 'Not initialized'}\`);
897
+ console.log('');
898
+ }
899
+
900
+ // Suppress unhandled rejection warnings from dynamic import() failures
901
+ process.on('unhandledRejection', () => {});
902
+
903
+ const command = process.argv[2] || 'status';
904
+
905
+ try {
906
+ switch (command) {
907
+ case 'import': await doImport(); break;
908
+ case 'sync': await doSync(); break;
909
+ case 'status': doStatus(); break;
910
+ default:
911
+ console.log('Usage: auto-memory-hook.mjs <import|sync|status>');
912
+ process.exit(1);
913
+ }
914
+ } catch (err) {
915
+ // Hooks must never crash Claude Code - fail silently
916
+ dim(\`Error (non-critical): \${err.message}\`);
917
+ }
918
+ // Ensure clean exit for Claude Code hooks (exit 0 = success)
919
+ process.exit(0);
920
+ `;
494
921
  }
495
922
  /**
496
923
  * Generate Windows PowerShell daemon manager
497
924
  */
498
925
  export function generateWindowsDaemonManager() {
499
- return "# RuFlo V3 Daemon Manager for Windows\n# PowerShell script for managing background processes\n\nparam(\n [Parameter(Position=0)]\n [ValidateSet('start', 'stop', 'status', 'restart')]\n [string]$Action = 'status'\n)\n\n$ErrorActionPreference = 'SilentlyContinue'\n$ClaudeFlowDir = Join-Path $PWD '.claude-flow'\n$PidDir = Join-Path $ClaudeFlowDir 'pids'\n\n# Ensure directories exist\nif (-not (Test-Path $PidDir)) {\n New-Item -ItemType Directory -Path $PidDir -Force | Out-Null\n}\n\nfunction Get-DaemonStatus {\n param([string]$Name, [string]$PidFile)\n\n if (Test-Path $PidFile) {\n $pid = Get-Content $PidFile\n $process = Get-Process -Id $pid -ErrorAction SilentlyContinue\n if ($process) {\n return @{ Running = $true; Pid = $pid }\n }\n }\n return @{ Running = $false; Pid = $null }\n}\n\nfunction Start-SwarmMonitor {\n $pidFile = Join-Path $PidDir 'swarm-monitor.pid'\n $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile\n\n if ($status.Running) {\n Write-Host \"Swarm monitor already running (PID: $($status.Pid))\" -ForegroundColor Yellow\n return\n }\n\n Write-Host \"Starting swarm monitor...\" -ForegroundColor Cyan\n $process = Start-Process -FilePath 'node' -ArgumentList @(\n '-e',\n 'setInterval(() => { require(\"fs\").writeFileSync(\".claude-flow/metrics/swarm-activity.json\", JSON.stringify({swarm:{active:true,agent_count:0},timestamp:Date.now()})) }, 5000)'\n ) -PassThru -WindowStyle Hidden\n\n $process.Id | Out-File $pidFile\n Write-Host \"Swarm monitor started (PID: $($process.Id))\" -ForegroundColor Green\n}\n\nfunction Stop-SwarmMonitor {\n $pidFile = Join-Path $PidDir 'swarm-monitor.pid'\n $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile\n\n if (-not $status.Running) {\n Write-Host \"Swarm monitor not running\" -ForegroundColor Yellow\n return\n }\n\n Stop-Process -Id $status.Pid -Force\n Remove-Item $pidFile -Force\n Write-Host \"Swarm monitor stopped\" -ForegroundColor Green\n}\n\nfunction Show-Status {\n Write-Host \"\"\n Write-Host \"RuFlo V3 Daemon Status\" -ForegroundColor Cyan\n Write-Host \"=============================\" -ForegroundColor Cyan\n\n $swarmPid = Join-Path $PidDir 'swarm-monitor.pid'\n $swarmStatus = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $swarmPid\n\n if ($swarmStatus.Running) {\n Write-Host \" Swarm Monitor: RUNNING (PID: $($swarmStatus.Pid))\" -ForegroundColor Green\n } else {\n Write-Host \" Swarm Monitor: STOPPED\" -ForegroundColor Red\n }\n Write-Host \"\"\n}\n\nswitch ($Action) {\n 'start' {\n Start-SwarmMonitor\n Show-Status\n }\n 'stop' {\n Stop-SwarmMonitor\n Show-Status\n }\n 'restart' {\n Stop-SwarmMonitor\n Start-Sleep -Seconds 1\n Start-SwarmMonitor\n Show-Status\n }\n 'status' {\n Show-Status\n }\n}\n";
926
+ return `# RuFlo V3 Daemon Manager for Windows
927
+ # PowerShell script for managing background processes
928
+
929
+ param(
930
+ [Parameter(Position=0)]
931
+ [ValidateSet('start', 'stop', 'status', 'restart')]
932
+ [string]$Action = 'status'
933
+ )
934
+
935
+ $ErrorActionPreference = 'SilentlyContinue'
936
+ $ClaudeFlowDir = Join-Path $PWD '.claude-flow'
937
+ $PidDir = Join-Path $ClaudeFlowDir 'pids'
938
+
939
+ # Ensure directories exist
940
+ if (-not (Test-Path $PidDir)) {
941
+ New-Item -ItemType Directory -Path $PidDir -Force | Out-Null
942
+ }
943
+
944
+ function Get-DaemonStatus {
945
+ param([string]$Name, [string]$PidFile)
946
+
947
+ if (Test-Path $PidFile) {
948
+ $pid = Get-Content $PidFile
949
+ $process = Get-Process -Id $pid -ErrorAction SilentlyContinue
950
+ if ($process) {
951
+ return @{ Running = $true; Pid = $pid }
952
+ }
953
+ }
954
+ return @{ Running = $false; Pid = $null }
955
+ }
956
+
957
+ function Start-SwarmMonitor {
958
+ $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
959
+ $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
960
+
961
+ if ($status.Running) {
962
+ Write-Host "Swarm monitor already running (PID: $($status.Pid))" -ForegroundColor Yellow
963
+ return
964
+ }
965
+
966
+ Write-Host "Starting swarm monitor..." -ForegroundColor Cyan
967
+ $process = Start-Process -FilePath 'node' -ArgumentList @(
968
+ '-e',
969
+ 'setInterval(() => { require("fs").writeFileSync(".claude-flow/metrics/swarm-activity.json", JSON.stringify({swarm:{active:true,agent_count:0},timestamp:Date.now()})) }, 5000)'
970
+ ) -PassThru -WindowStyle Hidden
971
+
972
+ $process.Id | Out-File $pidFile
973
+ Write-Host "Swarm monitor started (PID: $($process.Id))" -ForegroundColor Green
974
+ }
975
+
976
+ function Stop-SwarmMonitor {
977
+ $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
978
+ $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
979
+
980
+ if (-not $status.Running) {
981
+ Write-Host "Swarm monitor not running" -ForegroundColor Yellow
982
+ return
983
+ }
984
+
985
+ Stop-Process -Id $status.Pid -Force
986
+ Remove-Item $pidFile -Force
987
+ Write-Host "Swarm monitor stopped" -ForegroundColor Green
988
+ }
989
+
990
+ function Show-Status {
991
+ Write-Host ""
992
+ Write-Host "RuFlo V3 Daemon Status" -ForegroundColor Cyan
993
+ Write-Host "=============================" -ForegroundColor Cyan
994
+
995
+ $swarmPid = Join-Path $PidDir 'swarm-monitor.pid'
996
+ $swarmStatus = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $swarmPid
997
+
998
+ if ($swarmStatus.Running) {
999
+ Write-Host " Swarm Monitor: RUNNING (PID: $($swarmStatus.Pid))" -ForegroundColor Green
1000
+ } else {
1001
+ Write-Host " Swarm Monitor: STOPPED" -ForegroundColor Red
1002
+ }
1003
+ Write-Host ""
1004
+ }
1005
+
1006
+ switch ($Action) {
1007
+ 'start' {
1008
+ Start-SwarmMonitor
1009
+ Show-Status
1010
+ }
1011
+ 'stop' {
1012
+ Stop-SwarmMonitor
1013
+ Show-Status
1014
+ }
1015
+ 'restart' {
1016
+ Stop-SwarmMonitor
1017
+ Start-Sleep -Seconds 1
1018
+ Start-SwarmMonitor
1019
+ Show-Status
1020
+ }
1021
+ 'status' {
1022
+ Show-Status
1023
+ }
1024
+ }
1025
+ `;
500
1026
  }
501
1027
  /**
502
1028
  * Generate Windows batch file wrapper
503
1029
  */
504
1030
  export function generateWindowsBatchWrapper() {
505
- return "@echo off\nREM RuFlo V3 - Windows Batch Wrapper\nREM Routes to PowerShell daemon manager\n\nPowerShell -ExecutionPolicy Bypass -File \"%~dp0daemon-manager.ps1\" %*\n";
1031
+ return `@echo off
1032
+ REM RuFlo V3 - Windows Batch Wrapper
1033
+ REM Routes to PowerShell daemon manager
1034
+
1035
+ PowerShell -ExecutionPolicy Bypass -File "%~dp0daemon-manager.ps1" %*
1036
+ `;
506
1037
  }
507
1038
  /**
508
1039
  * Generate cross-platform session manager
509
1040
  */
510
1041
  export function generateCrossPlatformSessionManager() {
511
- return "#!/usr/bin/env node\n/**\n * Ruflo Cross-Platform Session Manager\n * Works on Windows, macOS, and Linux\n */\n\nconst fs = require('fs');\nconst path = require('path');\nconst os = require('os');\n\n// Platform-specific paths\nconst platform = os.platform();\nconst homeDir = os.homedir();\n\n// Get data directory based on platform\nfunction getDataDir() {\n const localDir = path.join(process.cwd(), '.claude-flow', 'sessions');\n if (fs.existsSync(path.dirname(localDir))) {\n return localDir;\n }\n\n switch (platform) {\n case 'win32':\n return path.join(process.env.APPDATA || homeDir, 'claude-flow', 'sessions');\n case 'darwin':\n return path.join(homeDir, 'Library', 'Application Support', 'claude-flow', 'sessions');\n default:\n return path.join(homeDir, '.claude-flow', 'sessions');\n }\n}\n\nconst SESSION_DIR = getDataDir();\nconst SESSION_FILE = path.join(SESSION_DIR, 'current.json');\n\n// Ensure directory exists\nfunction ensureDir(dir) {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\nconst commands = {\n start: () => {\n ensureDir(SESSION_DIR);\n const sessionId = `session-${Date.now()}`;\n const session = {\n id: sessionId,\n startedAt: new Date().toISOString(),\n platform: platform,\n cwd: process.cwd(),\n context: {},\n metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }\n };\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n console.log(`Session started: ${sessionId}`);\n return session;\n },\n\n restore: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No session to restore');\n return null;\n }\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n session.restoredAt = new Date().toISOString();\n fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));\n console.log(`Session restored: ${session.id}`);\n return session;\n },\n\n end: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No active session');\n return null;\n }\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n session.endedAt = new Date().toISOString();\n session.duration = Date.now() - new Date(session.startedAt).getTime();\n\n const archivePath = path.join(SESSION_DIR, `${session.id}.json`);\n fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));\n fs.unlinkSync(SESSION_FILE);\n\n console.log(`Session ended: ${session.id}`);\n console.log(`Duration: ${Math.round(session.duration / 1000 / 60)} minutes`);\n return session;\n },\n\n status: () => {\n if (!fs.existsSync(SESSION_FILE)) {\n console.log('No active session');\n return null;\n }\n const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));\n const duration = Date.now() - new Date(session.startedAt).getTime();\n console.log(`Session: ${session.id}`);\n console.log(`Platform: ${session.platform}`);\n console.log(`Started: ${session.startedAt}`);\n console.log(`Duration: ${Math.round(duration / 1000 / 60)} minutes`);\n return session;\n }\n};\n\n// CLI\nconst [,, command, ...args] = process.argv;\nif (command && commands[command]) {\n commands[command](...args);\n} else {\n console.log('Usage: session.js <start|restore|end|status>');\n console.log(`Platform: ${platform}`);\n console.log(`Data dir: ${SESSION_DIR}`);\n}\n\nmodule.exports = commands;\n";
1042
+ return `#!/usr/bin/env node
1043
+ /**
1044
+ * Ruflo Cross-Platform Session Manager
1045
+ * Works on Windows, macOS, and Linux
1046
+ */
1047
+
1048
+ const fs = require('fs');
1049
+ const path = require('path');
1050
+ const os = require('os');
1051
+
1052
+ // Platform-specific paths
1053
+ const platform = os.platform();
1054
+ const homeDir = os.homedir();
1055
+
1056
+ // Get data directory based on platform
1057
+ function getDataDir() {
1058
+ const localDir = path.join(process.cwd(), '.claude-flow', 'sessions');
1059
+ if (fs.existsSync(path.dirname(localDir))) {
1060
+ return localDir;
1061
+ }
1062
+
1063
+ switch (platform) {
1064
+ case 'win32':
1065
+ return path.join(process.env.APPDATA || homeDir, 'claude-flow', 'sessions');
1066
+ case 'darwin':
1067
+ return path.join(homeDir, 'Library', 'Application Support', 'claude-flow', 'sessions');
1068
+ default:
1069
+ return path.join(homeDir, '.claude-flow', 'sessions');
1070
+ }
1071
+ }
1072
+
1073
+ const SESSION_DIR = getDataDir();
1074
+ const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
1075
+
1076
+ // Ensure directory exists
1077
+ function ensureDir(dir) {
1078
+ if (!fs.existsSync(dir)) {
1079
+ fs.mkdirSync(dir, { recursive: true });
1080
+ }
1081
+ }
1082
+
1083
+ const commands = {
1084
+ start: () => {
1085
+ ensureDir(SESSION_DIR);
1086
+ const sessionId = \`session-\${Date.now()}\`;
1087
+ const session = {
1088
+ id: sessionId,
1089
+ startedAt: new Date().toISOString(),
1090
+ platform: platform,
1091
+ cwd: process.cwd(),
1092
+ context: {},
1093
+ metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }
1094
+ };
1095
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1096
+ console.log(\`Session started: \${sessionId}\`);
1097
+ return session;
1098
+ },
1099
+
1100
+ restore: () => {
1101
+ if (!fs.existsSync(SESSION_FILE)) {
1102
+ console.log('No session to restore');
1103
+ return null;
1104
+ }
1105
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1106
+ session.restoredAt = new Date().toISOString();
1107
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1108
+ console.log(\`Session restored: \${session.id}\`);
1109
+ return session;
1110
+ },
1111
+
1112
+ end: () => {
1113
+ if (!fs.existsSync(SESSION_FILE)) {
1114
+ console.log('No active session');
1115
+ return null;
1116
+ }
1117
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1118
+ session.endedAt = new Date().toISOString();
1119
+ session.duration = Date.now() - new Date(session.startedAt).getTime();
1120
+
1121
+ const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
1122
+ fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
1123
+ fs.unlinkSync(SESSION_FILE);
1124
+
1125
+ console.log(\`Session ended: \${session.id}\`);
1126
+ console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
1127
+ return session;
1128
+ },
1129
+
1130
+ status: () => {
1131
+ if (!fs.existsSync(SESSION_FILE)) {
1132
+ console.log('No active session');
1133
+ return null;
1134
+ }
1135
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1136
+ const duration = Date.now() - new Date(session.startedAt).getTime();
1137
+ console.log(\`Session: \${session.id}\`);
1138
+ console.log(\`Platform: \${session.platform}\`);
1139
+ console.log(\`Started: \${session.startedAt}\`);
1140
+ console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
1141
+ return session;
1142
+ }
1143
+ };
1144
+
1145
+ // CLI
1146
+ const [,, command, ...args] = process.argv;
1147
+ if (command && commands[command]) {
1148
+ commands[command](...args);
1149
+ } else {
1150
+ console.log('Usage: session.js <start|restore|end|status>');
1151
+ console.log(\`Platform: \${platform}\`);
1152
+ console.log(\`Data dir: \${SESSION_DIR}\`);
1153
+ }
1154
+
1155
+ module.exports = commands;
1156
+ `;
512
1157
  }
513
1158
  /**
514
1159
  * Generate all helper files
515
1160
  */
516
1161
  export function generateHelpers(options) {
517
- var helpers = {};
1162
+ const helpers = {};
518
1163
  if (options.components.helpers) {
519
1164
  // Unix/macOS shell scripts
520
1165
  helpers['pre-commit'] = generatePreCommitHook();