kynjal-cli 4.0.0 → 4.0.2

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
@@ -2,62 +2,6 @@
2
2
  * V3 CLI Daemon Command
3
3
  * Manages background worker daemon (Node.js-based, similar to shell helpers)
4
4
  */
5
- var __assign = (this && this.__assign) || function () {
6
- __assign = Object.assign || function(t) {
7
- for (var s, i = 1, n = arguments.length; i < n; i++) {
8
- s = arguments[i];
9
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
10
- t[p] = s[p];
11
- }
12
- return t;
13
- };
14
- return __assign.apply(this, arguments);
15
- };
16
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
- return new (P || (P = Promise))(function (resolve, reject) {
19
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
- step((generator = generator.apply(thisArg, _arguments || [])).next());
23
- });
24
- };
25
- var __generator = (this && this.__generator) || function (thisArg, body) {
26
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
- function verb(n) { return function (v) { return step([n, v]); }; }
29
- function step(op) {
30
- if (f) throw new TypeError("Generator is already executing.");
31
- while (_) try {
32
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
- if (y = 0, t) op = [op[0] & 2, t.value];
34
- switch (op[0]) {
35
- case 0: case 1: t = op; break;
36
- case 4: _.label++; return { value: op[1], done: false };
37
- case 5: _.label++; y = op[1]; op = [0]; continue;
38
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
- default:
40
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
- if (t[2]) _.ops.pop();
45
- _.trys.pop(); continue;
46
- }
47
- op = body.call(thisArg, _);
48
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
- }
51
- };
52
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
53
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
54
- if (ar || !(i in from)) {
55
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
56
- ar[i] = from[i];
57
- }
58
- }
59
- return to.concat(ar || Array.prototype.slice.call(from));
60
- };
61
5
  import { output } from '../output.js';
62
6
  import { getDaemon, startDaemon, stopDaemon } from '../services/worker-daemon.js';
63
7
  import { spawn } from 'child_process';
@@ -65,13 +9,13 @@ import { fileURLToPath } from 'url';
65
9
  import { dirname, join, resolve } from 'path';
66
10
  import * as fs from 'fs';
67
11
  // Start daemon subcommand
68
- var startCommand = {
12
+ const startCommand = {
69
13
  name: 'start',
70
14
  description: 'Start the worker daemon with all enabled background workers',
71
15
  options: [
72
16
  { name: 'workers', short: 'w', type: 'string', description: 'Comma-separated list of workers to enable (default: map,audit,optimize,consolidate,testgaps)' },
73
17
  { name: 'quiet', short: 'Q', type: 'boolean', description: 'Suppress output' },
74
- { name: 'background', short: 'b', type: 'boolean', description: 'Run daemon in background (detached process)', "default": true },
18
+ { name: 'background', short: 'b', type: 'boolean', description: 'Run daemon in background (detached process)', default: true },
75
19
  { name: 'foreground', short: 'f', type: 'boolean', description: 'Run daemon in foreground (blocks terminal)' },
76
20
  { name: 'headless', type: 'boolean', description: 'Enable headless worker execution (E2B sandbox)' },
77
21
  { name: 'sandbox', type: 'string', description: 'Default sandbox mode for headless workers', choices: ['strict', 'permissive', 'disabled'] },
@@ -84,255 +28,248 @@ var startCommand = {
84
28
  { command: 'claude-flow daemon start -w map,audit,optimize', description: 'Start with specific workers' },
85
29
  { command: 'claude-flow daemon start --headless --sandbox strict', description: 'Start with headless workers in strict sandbox' },
86
30
  ],
87
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
88
- var quiet, foreground, projectRoot, isDaemonProcess, config, rawMaxCpu, rawMinMem, NUMERIC_RE, sanitize, thresholds, val, val, bgPid, stateDir, pidFile_1, cleanup_1, spinner, daemon, status, error_1;
89
- var _a;
90
- return __generator(this, function (_b) {
91
- switch (_b.label) {
92
- case 0:
93
- quiet = ctx.flags.quiet;
94
- foreground = ctx.flags.foreground;
95
- projectRoot = process.cwd();
96
- isDaemonProcess = process.env.CLAUDE_FLOW_DAEMON === '1';
97
- config = {};
98
- rawMaxCpu = ctx.flags['max-cpu-load'];
99
- rawMinMem = ctx.flags['min-free-memory'];
100
- NUMERIC_RE = /^\d+(\.\d+)?$/;
101
- sanitize = function (s) { return s.replace(/[\x00-\x1f\x7f-\x9f]/g, ''); };
102
- if (rawMaxCpu || rawMinMem) {
103
- thresholds = {};
104
- if (rawMaxCpu) {
105
- val = parseFloat(rawMaxCpu);
106
- if (NUMERIC_RE.test(rawMaxCpu) && isFinite(val) && val > 0 && val <= 1000) {
107
- thresholds.maxCpuLoad = val;
108
- }
109
- else if (!quiet) {
110
- output.printWarning("Ignoring invalid --max-cpu-load value: " + sanitize(rawMaxCpu));
111
- }
112
- }
113
- if (rawMinMem) {
114
- val = parseFloat(rawMinMem);
115
- if (NUMERIC_RE.test(rawMinMem) && isFinite(val) && val >= 0 && val <= 100) {
116
- thresholds.minFreeMemoryPercent = val;
117
- }
118
- else if (!quiet) {
119
- output.printWarning("Ignoring invalid --min-free-memory value: " + sanitize(rawMinMem));
120
- }
121
- }
122
- if (thresholds.maxCpuLoad !== undefined || thresholds.minFreeMemoryPercent !== undefined) {
123
- config.resourceThresholds = thresholds;
124
- }
125
- }
126
- // Check if background daemon already running (skip if we ARE the daemon process)
127
- if (!isDaemonProcess) {
128
- bgPid = getBackgroundDaemonPid(projectRoot);
129
- if (bgPid && isProcessRunning(bgPid)) {
130
- if (!quiet) {
131
- output.printWarning("Daemon already running in background (PID: " + bgPid + ")");
132
- }
133
- return [2 /*return*/, { success: true }];
134
- }
135
- }
136
- // Background mode (default): fork a detached process
137
- if (!foreground) {
138
- return [2 /*return*/, startBackgroundDaemon(projectRoot, quiet, rawMaxCpu, rawMinMem)];
139
- }
140
- _b.label = 1;
141
- case 1:
142
- _b.trys.push([1, 8, , 9]);
143
- stateDir = join(projectRoot, '.claude-flow');
144
- pidFile_1 = join(stateDir, 'daemon.pid');
145
- // Ensure state directory exists
146
- if (!fs.existsSync(stateDir)) {
147
- fs.mkdirSync(stateDir, { recursive: true });
148
- }
149
- // Write PID file for foreground mode
150
- fs.writeFileSync(pidFile_1, String(process.pid));
151
- cleanup_1 = function () {
152
- try {
153
- if (fs.existsSync(pidFile_1)) {
154
- fs.unlinkSync(pidFile_1);
155
- }
156
- }
157
- catch ( /* ignore */_a) { /* ignore */ }
158
- };
159
- process.on('exit', cleanup_1);
160
- process.on('SIGINT', function () { cleanup_1(); process.exit(0); });
161
- process.on('SIGTERM', function () { cleanup_1(); process.exit(0); });
162
- // Ignore SIGHUP on macOS/Linux — prevents daemon death when terminal closes (#1283)
163
- if (process.platform !== 'win32') {
164
- process.on('SIGHUP', function () { });
31
+ action: async (ctx) => {
32
+ const quiet = ctx.flags.quiet;
33
+ const foreground = ctx.flags.foreground;
34
+ const projectRoot = process.cwd();
35
+ const isDaemonProcess = process.env.CLAUDE_FLOW_DAEMON === '1';
36
+ // Parse resource threshold overrides from CLI flags
37
+ const config = {};
38
+ const rawMaxCpu = ctx.flags['max-cpu-load'];
39
+ const rawMinMem = ctx.flags['min-free-memory'];
40
+ // Strict numeric pattern to prevent command injection when forwarding to subprocess (S1)
41
+ const NUMERIC_RE = /^\d+(\.\d+)?$/;
42
+ const sanitize = (s) => s.replace(/[\x00-\x1f\x7f-\x9f]/g, '');
43
+ if (rawMaxCpu || rawMinMem) {
44
+ const thresholds = {};
45
+ if (rawMaxCpu) {
46
+ const val = parseFloat(rawMaxCpu);
47
+ if (NUMERIC_RE.test(rawMaxCpu) && isFinite(val) && val > 0 && val <= 1000) {
48
+ thresholds.maxCpuLoad = val;
49
+ }
50
+ else if (!quiet) {
51
+ output.printWarning(`Ignoring invalid --max-cpu-load value: ${sanitize(rawMaxCpu)}`);
52
+ }
53
+ }
54
+ if (rawMinMem) {
55
+ const val = parseFloat(rawMinMem);
56
+ if (NUMERIC_RE.test(rawMinMem) && isFinite(val) && val >= 0 && val <= 100) {
57
+ thresholds.minFreeMemoryPercent = val;
58
+ }
59
+ else if (!quiet) {
60
+ output.printWarning(`Ignoring invalid --min-free-memory value: ${sanitize(rawMinMem)}`);
61
+ }
62
+ }
63
+ if (thresholds.maxCpuLoad !== undefined || thresholds.minFreeMemoryPercent !== undefined) {
64
+ config.resourceThresholds = thresholds;
65
+ }
66
+ }
67
+ // Check if background daemon already running (skip if we ARE the daemon process)
68
+ if (!isDaemonProcess) {
69
+ const bgPid = getBackgroundDaemonPid(projectRoot);
70
+ if (bgPid && isProcessRunning(bgPid)) {
71
+ if (!quiet) {
72
+ output.printWarning(`Daemon already running in background (PID: ${bgPid})`);
73
+ }
74
+ return { success: true };
75
+ }
76
+ }
77
+ // Background mode (default): fork a detached process
78
+ if (!foreground) {
79
+ return startBackgroundDaemon(projectRoot, quiet, rawMaxCpu, rawMinMem);
80
+ }
81
+ // Foreground mode: run in current process (blocks terminal)
82
+ try {
83
+ const stateDir = join(projectRoot, '.claude-flow');
84
+ const pidFile = join(stateDir, 'daemon.pid');
85
+ // Ensure state directory exists
86
+ if (!fs.existsSync(stateDir)) {
87
+ fs.mkdirSync(stateDir, { recursive: true });
88
+ }
89
+ // Write PID file for foreground mode
90
+ fs.writeFileSync(pidFile, String(process.pid));
91
+ // Clean up PID file on exit
92
+ const cleanup = () => {
93
+ try {
94
+ if (fs.existsSync(pidFile)) {
95
+ fs.unlinkSync(pidFile);
165
96
  }
166
- if (!!quiet) return [3 /*break*/, 4];
167
- spinner = output.createSpinner({ text: 'Starting worker daemon...', spinner: 'dots' });
168
- spinner.start();
169
- return [4 /*yield*/, startDaemon(projectRoot, config)];
170
- case 2:
171
- daemon = _b.sent();
172
- status = daemon.getStatus();
173
- spinner.succeed('Worker daemon started (foreground mode)');
174
- output.writeln();
175
- output.printBox([
176
- "PID: " + status.pid,
177
- "Started: " + ((_a = status.startedAt) === null || _a === void 0 ? void 0 : _a.toISOString()),
178
- "Workers: " + status.config.workers.filter(function (w) { return w.enabled; }).length + " enabled",
179
- "Max Concurrent: " + status.config.maxConcurrent,
180
- "Max CPU Load: " + status.config.resourceThresholds.maxCpuLoad,
181
- "Min Free Memory: " + status.config.resourceThresholds.minFreeMemoryPercent + "%",
182
- ].join('\n'), 'Daemon Status');
183
- output.writeln();
184
- output.writeln(output.bold('Scheduled Workers'));
185
- output.printTable({
186
- columns: [
187
- { key: 'type', header: 'Worker', width: 15 },
188
- { key: 'interval', header: 'Interval', width: 12 },
189
- { key: 'priority', header: 'Priority', width: 10 },
190
- { key: 'description', header: 'Description', width: 30 },
191
- ],
192
- data: status.config.workers
193
- .filter(function (w) { return w.enabled; })
194
- .map(function (w) { return ({
195
- type: output.highlight(w.type),
196
- interval: Math.round(w.intervalMs / 60000) + "min",
197
- priority: w.priority === 'critical' ? output.error(w.priority) :
198
- w.priority === 'high' ? output.warning(w.priority) :
199
- output.dim(w.priority),
200
- description: w.description
201
- }); })
202
- });
203
- output.writeln();
204
- output.writeln(output.dim('Press Ctrl+C to stop daemon'));
205
- // Listen for worker events
206
- daemon.on('worker:start', function (_a) {
207
- var type = _a.type;
208
- output.writeln(output.dim("[daemon] Worker starting: " + type));
209
- });
210
- daemon.on('worker:complete', function (_a) {
211
- var type = _a.type, durationMs = _a.durationMs;
212
- output.writeln(output.success("[daemon] Worker completed: " + type + " (" + durationMs + "ms)"));
213
- });
214
- daemon.on('worker:error', function (_a) {
215
- var type = _a.type, error = _a.error;
216
- output.writeln(output.error("[daemon] Worker failed: " + type + " - " + error));
217
- });
218
- // Keep process alive
219
- return [4 /*yield*/, new Promise(function () { })];
220
- case 3:
221
- // Keep process alive
222
- _b.sent(); // Never resolves - daemon runs until killed
223
- return [3 /*break*/, 7];
224
- case 4: return [4 /*yield*/, startDaemon(projectRoot, config)];
225
- case 5:
226
- _b.sent();
227
- return [4 /*yield*/, new Promise(function () { })];
228
- case 6:
229
- _b.sent(); // Keep alive
230
- _b.label = 7;
231
- case 7: return [2 /*return*/, { success: true }];
232
- case 8:
233
- error_1 = _b.sent();
234
- output.printError("Failed to start daemon: " + (error_1 instanceof Error ? error_1.message : String(error_1)));
235
- return [2 /*return*/, { success: false, exitCode: 1 }];
236
- case 9: return [2 /*return*/];
97
+ }
98
+ catch { /* ignore */ }
99
+ };
100
+ process.on('exit', cleanup);
101
+ process.on('SIGINT', () => { cleanup(); process.exit(0); });
102
+ process.on('SIGTERM', () => { cleanup(); process.exit(0); });
103
+ // Ignore SIGHUP on macOS/Linux — prevents daemon death when terminal closes (#1283)
104
+ if (process.platform !== 'win32') {
105
+ process.on('SIGHUP', () => { });
106
+ }
107
+ if (!quiet) {
108
+ const spinner = output.createSpinner({ text: 'Starting worker daemon...', spinner: 'dots' });
109
+ spinner.start();
110
+ const daemon = await startDaemon(projectRoot, config);
111
+ const status = daemon.getStatus();
112
+ spinner.succeed('Worker daemon started (foreground mode)');
113
+ output.writeln();
114
+ output.printBox([
115
+ `PID: ${status.pid}`,
116
+ `Started: ${status.startedAt?.toISOString()}`,
117
+ `Workers: ${status.config.workers.filter(w => w.enabled).length} enabled`,
118
+ `Max Concurrent: ${status.config.maxConcurrent}`,
119
+ `Max CPU Load: ${status.config.resourceThresholds.maxCpuLoad}`,
120
+ `Min Free Memory: ${status.config.resourceThresholds.minFreeMemoryPercent}%`,
121
+ ].join('\n'), 'Daemon Status');
122
+ output.writeln();
123
+ output.writeln(output.bold('Scheduled Workers'));
124
+ output.printTable({
125
+ columns: [
126
+ { key: 'type', header: 'Worker', width: 15 },
127
+ { key: 'interval', header: 'Interval', width: 12 },
128
+ { key: 'priority', header: 'Priority', width: 10 },
129
+ { key: 'description', header: 'Description', width: 30 },
130
+ ],
131
+ data: status.config.workers
132
+ .filter(w => w.enabled)
133
+ .map(w => ({
134
+ type: output.highlight(w.type),
135
+ interval: `${Math.round(w.intervalMs / 60000)}min`,
136
+ priority: w.priority === 'critical' ? output.error(w.priority) :
137
+ w.priority === 'high' ? output.warning(w.priority) :
138
+ output.dim(w.priority),
139
+ description: w.description,
140
+ })),
141
+ });
142
+ output.writeln();
143
+ output.writeln(output.dim('Press Ctrl+C to stop daemon'));
144
+ // Listen for worker events
145
+ daemon.on('worker:start', ({ type }) => {
146
+ output.writeln(output.dim(`[daemon] Worker starting: ${type}`));
147
+ });
148
+ daemon.on('worker:complete', ({ type, durationMs }) => {
149
+ output.writeln(output.success(`[daemon] Worker completed: ${type} (${durationMs}ms)`));
150
+ });
151
+ daemon.on('worker:error', ({ type, error }) => {
152
+ output.writeln(output.error(`[daemon] Worker failed: ${type} - ${error}`));
153
+ });
154
+ // Keep process alive
155
+ await new Promise(() => { }); // Never resolves - daemon runs until killed
156
+ }
157
+ else {
158
+ await startDaemon(projectRoot, config);
159
+ await new Promise(() => { }); // Keep alive
237
160
  }
238
- });
239
- }); }
161
+ return { success: true };
162
+ }
163
+ catch (error) {
164
+ output.printError(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
165
+ return { success: false, exitCode: 1 };
166
+ }
167
+ },
240
168
  };
241
169
  /**
242
170
  * Validate path for security - prevents path traversal and injection
243
171
  */
244
172
  function validatePath(path, label) {
245
173
  // Must be absolute after resolution
246
- var resolved = resolve(path);
174
+ const resolved = resolve(path);
247
175
  // Check for null bytes (injection attack)
248
176
  if (path.includes('\0')) {
249
- throw new Error(label + " contains null bytes");
177
+ throw new Error(`${label} contains null bytes`);
250
178
  }
251
179
  // Check for shell metacharacters in path components
252
180
  if (/[;&|`$<>]/.test(path)) {
253
- throw new Error(label + " contains shell metacharacters");
181
+ throw new Error(`${label} contains shell metacharacters`);
254
182
  }
255
183
  // Prevent path traversal outside expected directories
256
184
  if (!resolved.includes('.claude-flow') && !resolved.includes('bin')) {
257
185
  // Allow only paths within project structure
258
- var cwd = process.cwd();
186
+ const cwd = process.cwd();
259
187
  if (!resolved.startsWith(cwd)) {
260
- throw new Error(label + " escapes project directory");
188
+ throw new Error(`${label} escapes project directory`);
261
189
  }
262
190
  }
263
191
  }
264
192
  /**
265
193
  * Start daemon as a detached background process
266
194
  */
267
- function startBackgroundDaemon(projectRoot, quiet, maxCpuLoad, minFreeMemory) {
268
- return __awaiter(this, void 0, Promise, function () {
269
- var resolvedRoot, stateDir, pidFile, logFile, __filename, __dirname, cliPath, isWin, spawnOpts, spawnArgs, SPAWN_NUMERIC_RE, child, pid;
270
- return __generator(this, function (_a) {
271
- switch (_a.label) {
272
- case 0:
273
- resolvedRoot = resolve(projectRoot);
274
- validatePath(resolvedRoot, 'Project root');
275
- stateDir = join(resolvedRoot, '.claude-flow');
276
- pidFile = join(stateDir, 'daemon.pid');
277
- logFile = join(stateDir, 'daemon.log');
278
- // Validate all paths
279
- validatePath(stateDir, 'State directory');
280
- validatePath(pidFile, 'PID file');
281
- validatePath(logFile, 'Log file');
282
- // Ensure state directory exists
283
- if (!fs.existsSync(stateDir)) {
284
- fs.mkdirSync(stateDir, { recursive: true });
285
- }
286
- __filename = fileURLToPath(import.meta.url);
287
- __dirname = dirname(__filename);
288
- cliPath = resolve(join(__dirname, '..', '..', '..', 'bin', 'cli.js'));
289
- validatePath(cliPath, 'CLI path');
290
- // Verify CLI path exists
291
- if (!fs.existsSync(cliPath)) {
292
- output.printError("CLI not found at: " + cliPath);
293
- return [2 /*return*/, { success: false, exitCode: 1 }];
294
- }
295
- isWin = process.platform === 'win32';
296
- spawnOpts = __assign({ cwd: resolvedRoot, detached: !isWin, stdio: ['ignore', fs.openSync(logFile, 'a'), fs.openSync(logFile, 'a')], env: __assign(__assign(__assign({}, process.env), { CLAUDE_FLOW_DAEMON: '1' }), (process.platform === 'darwin' ? { NOHUP: '1' } : {})) }, (isWin ? { shell: true, windowsHide: true } : {}));
297
- spawnArgs = [
298
- cliPath,
299
- 'daemon', 'start', '--foreground', '--quiet',
300
- ];
301
- SPAWN_NUMERIC_RE = /^\d+(\.\d+)?$/;
302
- if (maxCpuLoad && SPAWN_NUMERIC_RE.test(maxCpuLoad)) {
303
- spawnArgs.push('--max-cpu-load', maxCpuLoad);
304
- }
305
- if (minFreeMemory && SPAWN_NUMERIC_RE.test(minFreeMemory)) {
306
- spawnArgs.push('--min-free-memory', minFreeMemory);
307
- }
308
- child = spawn(process.execPath, spawnArgs, spawnOpts);
309
- pid = child.pid;
310
- if (!pid || pid <= 0) {
311
- output.printError('Failed to get daemon PID');
312
- return [2 /*return*/, { success: false, exitCode: 1 }];
313
- }
314
- // Unref BEFORE writing PID file prevents race where parent exits
315
- // but child hasn't fully detached yet (fixes macOS daemon death #1283)
316
- child.unref();
317
- // Small delay to let the child process fully detach on macOS
318
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
319
- case 1:
320
- // Small delay to let the child process fully detach on macOS
321
- _a.sent();
322
- // Save PID only after child is detached
323
- fs.writeFileSync(pidFile, String(pid));
324
- if (!quiet) {
325
- output.printSuccess("Daemon started in background (PID: " + pid + ")");
326
- output.printInfo("Logs: " + logFile);
327
- output.printInfo("Stop with: claude-flow daemon stop");
328
- }
329
- return [2 /*return*/, { success: true }];
330
- }
331
- });
332
- });
195
+ async function startBackgroundDaemon(projectRoot, quiet, maxCpuLoad, minFreeMemory) {
196
+ // Validate and resolve project root
197
+ const resolvedRoot = resolve(projectRoot);
198
+ validatePath(resolvedRoot, 'Project root');
199
+ const stateDir = join(resolvedRoot, '.claude-flow');
200
+ const pidFile = join(stateDir, 'daemon.pid');
201
+ const logFile = join(stateDir, 'daemon.log');
202
+ // Validate all paths
203
+ validatePath(stateDir, 'State directory');
204
+ validatePath(pidFile, 'PID file');
205
+ validatePath(logFile, 'Log file');
206
+ // Ensure state directory exists
207
+ if (!fs.existsSync(stateDir)) {
208
+ fs.mkdirSync(stateDir, { recursive: true });
209
+ }
210
+ // Get path to CLI (from dist/src/commands/daemon.js -> bin/cli.js)
211
+ const __filename = fileURLToPath(import.meta.url);
212
+ const __dirname = dirname(__filename);
213
+ // dist/src/commands -> dist/src -> dist -> package root -> bin/cli.js
214
+ const cliPath = resolve(join(__dirname, '..', '..', '..', 'bin', 'cli.js'));
215
+ validatePath(cliPath, 'CLI path');
216
+ // Verify CLI path exists
217
+ if (!fs.existsSync(cliPath)) {
218
+ output.printError(`CLI not found at: ${cliPath}`);
219
+ return { success: false, exitCode: 1 };
220
+ }
221
+ // Platform-aware spawn flags
222
+ const isWin = process.platform === 'win32';
223
+ const spawnOpts = {
224
+ cwd: resolvedRoot,
225
+ detached: !isWin, // detached is POSIX-only; Windows uses windowsHide
226
+ stdio: ['ignore', fs.openSync(logFile, 'a'), fs.openSync(logFile, 'a')],
227
+ env: {
228
+ ...process.env,
229
+ CLAUDE_FLOW_DAEMON: '1',
230
+ // Prevent macOS SIGHUP kill when terminal closes
231
+ ...(process.platform === 'darwin' ? { NOHUP: '1' } : {}),
232
+ },
233
+ ...(isWin ? { shell: true, windowsHide: true } : {}),
234
+ };
235
+ // Use spawn with explicit arguments instead of shell string interpolation
236
+ // This prevents command injection via paths
237
+ const spawnArgs = [
238
+ cliPath,
239
+ 'daemon', 'start', '--foreground', '--quiet',
240
+ ];
241
+ // Forward resource threshold flags to the foreground child process
242
+ // Validate with strict numeric pattern to prevent shell injection on Windows (S1)
243
+ const SPAWN_NUMERIC_RE = /^\d+(\.\d+)?$/;
244
+ if (maxCpuLoad && SPAWN_NUMERIC_RE.test(maxCpuLoad)) {
245
+ spawnArgs.push('--max-cpu-load', maxCpuLoad);
246
+ }
247
+ if (minFreeMemory && SPAWN_NUMERIC_RE.test(minFreeMemory)) {
248
+ spawnArgs.push('--min-free-memory', minFreeMemory);
249
+ }
250
+ const child = spawn(process.execPath, spawnArgs, spawnOpts);
251
+ // Get PID from spawned process directly (no shell echo needed)
252
+ const pid = child.pid;
253
+ if (!pid || pid <= 0) {
254
+ output.printError('Failed to get daemon PID');
255
+ return { success: false, exitCode: 1 };
256
+ }
257
+ // Unref BEFORE writing PID file — prevents race where parent exits
258
+ // but child hasn't fully detached yet (fixes macOS daemon death #1283)
259
+ child.unref();
260
+ // Small delay to let the child process fully detach on macOS
261
+ await new Promise(resolve => setTimeout(resolve, 100));
262
+ // Save PID only after child is detached
263
+ fs.writeFileSync(pidFile, String(pid));
264
+ if (!quiet) {
265
+ output.printSuccess(`Daemon started in background (PID: ${pid})`);
266
+ output.printInfo(`Logs: ${logFile}`);
267
+ output.printInfo(`Stop with: claude-flow daemon stop`);
268
+ }
269
+ return { success: true };
333
270
  }
334
271
  // Stop daemon subcommand
335
- var stopCommand = {
272
+ const stopCommand = {
336
273
  name: 'stop',
337
274
  description: 'Stop the worker daemon and all background workers',
338
275
  options: [
@@ -341,121 +278,93 @@ var stopCommand = {
341
278
  examples: [
342
279
  { command: 'claude-flow daemon stop', description: 'Stop the daemon' },
343
280
  ],
344
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
345
- var quiet, projectRoot, spinner, killed, error_2;
346
- return __generator(this, function (_a) {
347
- switch (_a.label) {
348
- case 0:
349
- quiet = ctx.flags.quiet;
350
- projectRoot = process.cwd();
351
- _a.label = 1;
352
- case 1:
353
- _a.trys.push([1, 8, , 9]);
354
- if (!!quiet) return [3 /*break*/, 4];
355
- spinner = output.createSpinner({ text: 'Stopping worker daemon...', spinner: 'dots' });
356
- spinner.start();
357
- // Try to stop in-process daemon first
358
- return [4 /*yield*/, stopDaemon()];
359
- case 2:
360
- // Try to stop in-process daemon first
361
- _a.sent();
362
- return [4 /*yield*/, killBackgroundDaemon(projectRoot)];
363
- case 3:
364
- killed = _a.sent();
365
- spinner.succeed(killed ? 'Worker daemon stopped' : 'Worker daemon was not running');
366
- return [3 /*break*/, 7];
367
- case 4: return [4 /*yield*/, stopDaemon()];
368
- case 5:
369
- _a.sent();
370
- return [4 /*yield*/, killBackgroundDaemon(projectRoot)];
371
- case 6:
372
- _a.sent();
373
- _a.label = 7;
374
- case 7: return [2 /*return*/, { success: true }];
375
- case 8:
376
- error_2 = _a.sent();
377
- output.printError("Failed to stop daemon: " + (error_2 instanceof Error ? error_2.message : String(error_2)));
378
- return [2 /*return*/, { success: false, exitCode: 1 }];
379
- case 9: return [2 /*return*/];
281
+ action: async (ctx) => {
282
+ const quiet = ctx.flags.quiet;
283
+ const projectRoot = process.cwd();
284
+ try {
285
+ if (!quiet) {
286
+ const spinner = output.createSpinner({ text: 'Stopping worker daemon...', spinner: 'dots' });
287
+ spinner.start();
288
+ // Try to stop in-process daemon first
289
+ await stopDaemon();
290
+ // Also kill any background daemon by PID
291
+ const killed = await killBackgroundDaemon(projectRoot);
292
+ spinner.succeed(killed ? 'Worker daemon stopped' : 'Worker daemon was not running');
380
293
  }
381
- });
382
- }); }
294
+ else {
295
+ await stopDaemon();
296
+ await killBackgroundDaemon(projectRoot);
297
+ }
298
+ return { success: true };
299
+ }
300
+ catch (error) {
301
+ output.printError(`Failed to stop daemon: ${error instanceof Error ? error.message : String(error)}`);
302
+ return { success: false, exitCode: 1 };
303
+ }
304
+ },
383
305
  };
384
306
  /**
385
307
  * Kill background daemon process using PID file
386
308
  */
387
- function killBackgroundDaemon(projectRoot) {
388
- return __awaiter(this, void 0, Promise, function () {
389
- var pidFile, pid, error_3;
390
- return __generator(this, function (_a) {
391
- switch (_a.label) {
392
- case 0:
393
- pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
394
- if (!fs.existsSync(pidFile)) {
395
- return [2 /*return*/, false];
396
- }
397
- _a.label = 1;
398
- case 1:
399
- _a.trys.push([1, 3, , 4]);
400
- pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
401
- if (isNaN(pid)) {
402
- fs.unlinkSync(pidFile);
403
- return [2 /*return*/, false];
404
- }
405
- // Check if process is running
406
- try {
407
- process.kill(pid, 0); // Signal 0 = check if alive
408
- }
409
- catch (_b) {
410
- // Process not running, clean up stale PID file
411
- fs.unlinkSync(pidFile);
412
- return [2 /*return*/, false];
413
- }
414
- // Kill the process
415
- process.kill(pid, 'SIGTERM');
416
- // Wait a moment then force kill if needed
417
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
418
- case 2:
419
- // Wait a moment then force kill if needed
420
- _a.sent();
421
- try {
422
- process.kill(pid, 0);
423
- // Still alive, force kill
424
- process.kill(pid, 'SIGKILL');
425
- }
426
- catch (_c) {
427
- // Process terminated
428
- }
429
- // Clean up PID file
430
- if (fs.existsSync(pidFile)) {
431
- fs.unlinkSync(pidFile);
432
- }
433
- return [2 /*return*/, true];
434
- case 3:
435
- error_3 = _a.sent();
436
- // Clean up PID file on any error
437
- if (fs.existsSync(pidFile)) {
438
- fs.unlinkSync(pidFile);
439
- }
440
- return [2 /*return*/, false];
441
- case 4: return [2 /*return*/];
442
- }
443
- });
444
- });
309
+ async function killBackgroundDaemon(projectRoot) {
310
+ const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
311
+ if (!fs.existsSync(pidFile)) {
312
+ return false;
313
+ }
314
+ try {
315
+ const pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
316
+ if (isNaN(pid)) {
317
+ fs.unlinkSync(pidFile);
318
+ return false;
319
+ }
320
+ // Check if process is running
321
+ try {
322
+ process.kill(pid, 0); // Signal 0 = check if alive
323
+ }
324
+ catch {
325
+ // Process not running, clean up stale PID file
326
+ fs.unlinkSync(pidFile);
327
+ return false;
328
+ }
329
+ // Kill the process
330
+ process.kill(pid, 'SIGTERM');
331
+ // Wait a moment then force kill if needed
332
+ await new Promise(resolve => setTimeout(resolve, 1000));
333
+ try {
334
+ process.kill(pid, 0);
335
+ // Still alive, force kill
336
+ process.kill(pid, 'SIGKILL');
337
+ }
338
+ catch {
339
+ // Process terminated
340
+ }
341
+ // Clean up PID file
342
+ if (fs.existsSync(pidFile)) {
343
+ fs.unlinkSync(pidFile);
344
+ }
345
+ return true;
346
+ }
347
+ catch (error) {
348
+ // Clean up PID file on any error
349
+ if (fs.existsSync(pidFile)) {
350
+ fs.unlinkSync(pidFile);
351
+ }
352
+ return false;
353
+ }
445
354
  }
446
355
  /**
447
356
  * Get PID of background daemon from PID file
448
357
  */
449
358
  function getBackgroundDaemonPid(projectRoot) {
450
- var pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
359
+ const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
451
360
  if (!fs.existsSync(pidFile)) {
452
361
  return null;
453
362
  }
454
363
  try {
455
- var pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
364
+ const pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
456
365
  return isNaN(pid) ? null : pid;
457
366
  }
458
- catch (_a) {
367
+ catch {
459
368
  return null;
460
369
  }
461
370
  }
@@ -467,12 +376,12 @@ function isProcessRunning(pid) {
467
376
  process.kill(pid, 0); // Signal 0 = check if alive
468
377
  return true;
469
378
  }
470
- catch (_a) {
379
+ catch {
471
380
  return false;
472
381
  }
473
382
  }
474
383
  // Status subcommand
475
- var statusCommand = {
384
+ const statusCommand = {
476
385
  name: 'status',
477
386
  description: 'Show daemon and worker status',
478
387
  options: [
@@ -484,111 +393,109 @@ var statusCommand = {
484
393
  { command: 'claude-flow daemon status -v', description: 'Show detailed status' },
485
394
  { command: 'claude-flow daemon status --show-modes', description: 'Show worker execution modes' },
486
395
  ],
487
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
488
- var verbose, showModes, projectRoot, daemon, status_1, bgPid, bgRunning, isRunning, displayPid, statusIcon, statusText, mode, workerData, baseColumns, modeColumns;
489
- return __generator(this, function (_a) {
490
- verbose = ctx.flags.verbose;
491
- showModes = ctx.flags['show-modes'];
492
- projectRoot = process.cwd();
493
- try {
494
- daemon = getDaemon(projectRoot);
495
- status_1 = daemon.getStatus();
496
- bgPid = getBackgroundDaemonPid(projectRoot);
497
- bgRunning = bgPid ? isProcessRunning(bgPid) : false;
498
- isRunning = status_1.running || bgRunning;
499
- displayPid = bgPid || status_1.pid;
500
- output.writeln();
501
- statusIcon = isRunning ? output.success('●') : output.error('○');
502
- statusText = isRunning ? output.success('RUNNING') : output.error('STOPPED');
503
- mode = bgRunning ? output.dim(' (background)') : status_1.running ? output.dim(' (foreground)') : '';
504
- output.printBox([
505
- "Status: " + statusIcon + " " + statusText + mode,
506
- "PID: " + displayPid,
507
- status_1.startedAt ? "Started: " + status_1.startedAt.toISOString() : '',
508
- "Workers Enabled: " + status_1.config.workers.filter(function (w) { return w.enabled; }).length,
509
- "Max Concurrent: " + status_1.config.maxConcurrent,
510
- "Max CPU Load: " + status_1.config.resourceThresholds.maxCpuLoad,
511
- "Min Free Memory: " + status_1.config.resourceThresholds.minFreeMemoryPercent + "%",
512
- ].filter(Boolean).join('\n'), 'RuFlo Daemon');
396
+ action: async (ctx) => {
397
+ const verbose = ctx.flags.verbose;
398
+ const showModes = ctx.flags['show-modes'];
399
+ const projectRoot = process.cwd();
400
+ try {
401
+ const daemon = getDaemon(projectRoot);
402
+ const status = daemon.getStatus();
403
+ // Also check for background daemon
404
+ const bgPid = getBackgroundDaemonPid(projectRoot);
405
+ const bgRunning = bgPid ? isProcessRunning(bgPid) : false;
406
+ const isRunning = status.running || bgRunning;
407
+ const displayPid = bgPid || status.pid;
408
+ output.writeln();
409
+ // Daemon status box
410
+ const statusIcon = isRunning ? output.success('●') : output.error('○');
411
+ const statusText = isRunning ? output.success('RUNNING') : output.error('STOPPED');
412
+ const mode = bgRunning ? output.dim(' (background)') : status.running ? output.dim(' (foreground)') : '';
413
+ output.printBox([
414
+ `Status: ${statusIcon} ${statusText}${mode}`,
415
+ `PID: ${displayPid}`,
416
+ status.startedAt ? `Started: ${status.startedAt.toISOString()}` : '',
417
+ `Workers Enabled: ${status.config.workers.filter(w => w.enabled).length}`,
418
+ `Max Concurrent: ${status.config.maxConcurrent}`,
419
+ `Max CPU Load: ${status.config.resourceThresholds.maxCpuLoad}`,
420
+ `Min Free Memory: ${status.config.resourceThresholds.minFreeMemoryPercent}%`,
421
+ ].filter(Boolean).join('\n'), 'RuFlo Daemon');
422
+ output.writeln();
423
+ output.writeln(output.bold('Worker Status'));
424
+ const workerData = status.config.workers.map(w => {
425
+ const state = status.workers.get(w.type);
426
+ // Check for headless mode from worker config or state
427
+ const isHeadless = w.headless || state?.headless || false;
428
+ const sandboxMode = w.sandbox || state?.sandbox || null;
429
+ return {
430
+ type: w.enabled ? output.highlight(w.type) : output.dim(w.type),
431
+ enabled: w.enabled ? output.success('✓') : output.dim('○'),
432
+ status: state?.isRunning ? output.warning('running') :
433
+ w.enabled ? output.success('idle') : output.dim('disabled'),
434
+ runs: state?.runCount ?? 0,
435
+ success: state ? `${Math.round((state.successCount / Math.max(state.runCount, 1)) * 100)}%` : '-',
436
+ lastRun: state?.lastRun ? formatTimeAgo(state.lastRun) : output.dim('never'),
437
+ nextRun: state?.nextRun && w.enabled ? formatTimeUntil(state.nextRun) : output.dim('-'),
438
+ mode: isHeadless ? output.highlight('headless') : output.dim('local'),
439
+ sandbox: isHeadless ? (sandboxMode || 'strict') : output.dim('-'),
440
+ };
441
+ });
442
+ // Build columns based on --show-modes flag
443
+ const baseColumns = [
444
+ { key: 'type', header: 'Worker', width: 12 },
445
+ { key: 'enabled', header: 'On', width: 4 },
446
+ { key: 'status', header: 'Status', width: 10 },
447
+ { key: 'runs', header: 'Runs', width: 6 },
448
+ { key: 'success', header: 'Success', width: 8 },
449
+ { key: 'lastRun', header: 'Last Run', width: 12 },
450
+ { key: 'nextRun', header: 'Next Run', width: 12 },
451
+ ];
452
+ const modeColumns = showModes ? [
453
+ { key: 'mode', header: 'Mode', width: 10 },
454
+ { key: 'sandbox', header: 'Sandbox', width: 12 },
455
+ ] : [];
456
+ output.printTable({
457
+ columns: [...baseColumns, ...modeColumns],
458
+ data: workerData,
459
+ });
460
+ if (verbose) {
513
461
  output.writeln();
514
- output.writeln(output.bold('Worker Status'));
515
- workerData = status_1.config.workers.map(function (w) {
516
- var _a, _b, _c;
517
- var state = status_1.workers.get(w.type);
518
- // Check for headless mode from worker config or state
519
- var isHeadless = w.headless || ((_a = state) === null || _a === void 0 ? void 0 : _a.headless) || false;
520
- var sandboxMode = w.sandbox || ((_b = state) === null || _b === void 0 ? void 0 : _b.sandbox) || null;
521
- return {
522
- type: w.enabled ? output.highlight(w.type) : output.dim(w.type),
523
- enabled: w.enabled ? output.success('✓') : output.dim('○'),
524
- status: (state === null || state === void 0 ? void 0 : state.isRunning) ? output.warning('running') :
525
- w.enabled ? output.success('idle') : output.dim('disabled'),
526
- runs: (_c = state === null || state === void 0 ? void 0 : state.runCount) !== null && _c !== void 0 ? _c : 0,
527
- success: state ? Math.round((state.successCount / Math.max(state.runCount, 1)) * 100) + "%" : '-',
528
- lastRun: (state === null || state === void 0 ? void 0 : state.lastRun) ? formatTimeAgo(state.lastRun) : output.dim('never'),
529
- nextRun: (state === null || state === void 0 ? void 0 : state.nextRun) && w.enabled ? formatTimeUntil(state.nextRun) : output.dim('-'),
530
- mode: isHeadless ? output.highlight('headless') : output.dim('local'),
531
- sandbox: isHeadless ? (sandboxMode || 'strict') : output.dim('-')
532
- };
533
- });
534
- baseColumns = [
535
- { key: 'type', header: 'Worker', width: 12 },
536
- { key: 'enabled', header: 'On', width: 4 },
537
- { key: 'status', header: 'Status', width: 10 },
538
- { key: 'runs', header: 'Runs', width: 6 },
539
- { key: 'success', header: 'Success', width: 8 },
540
- { key: 'lastRun', header: 'Last Run', width: 12 },
541
- { key: 'nextRun', header: 'Next Run', width: 12 },
542
- ];
543
- modeColumns = showModes ? [
544
- { key: 'mode', header: 'Mode', width: 10 },
545
- { key: 'sandbox', header: 'Sandbox', width: 12 },
546
- ] : [];
462
+ output.writeln(output.bold('Worker Configuration'));
547
463
  output.printTable({
548
- columns: __spreadArray(__spreadArray([], baseColumns, true), modeColumns, true),
549
- data: workerData
464
+ columns: [
465
+ { key: 'type', header: 'Worker', width: 12 },
466
+ { key: 'interval', header: 'Interval', width: 10 },
467
+ { key: 'priority', header: 'Priority', width: 10 },
468
+ { key: 'avgDuration', header: 'Avg Duration', width: 12 },
469
+ { key: 'description', header: 'Description', width: 30 },
470
+ ],
471
+ data: status.config.workers.map(w => {
472
+ const state = status.workers.get(w.type);
473
+ return {
474
+ type: w.type,
475
+ interval: `${Math.round(w.intervalMs / 60000)}min`,
476
+ priority: w.priority,
477
+ avgDuration: state?.averageDurationMs ? `${Math.round(state.averageDurationMs)}ms` : '-',
478
+ description: w.description,
479
+ };
480
+ }),
550
481
  });
551
- if (verbose) {
552
- output.writeln();
553
- output.writeln(output.bold('Worker Configuration'));
554
- output.printTable({
555
- columns: [
556
- { key: 'type', header: 'Worker', width: 12 },
557
- { key: 'interval', header: 'Interval', width: 10 },
558
- { key: 'priority', header: 'Priority', width: 10 },
559
- { key: 'avgDuration', header: 'Avg Duration', width: 12 },
560
- { key: 'description', header: 'Description', width: 30 },
561
- ],
562
- data: status_1.config.workers.map(function (w) {
563
- var state = status_1.workers.get(w.type);
564
- return {
565
- type: w.type,
566
- interval: Math.round(w.intervalMs / 60000) + "min",
567
- priority: w.priority,
568
- avgDuration: (state === null || state === void 0 ? void 0 : state.averageDurationMs) ? Math.round(state.averageDurationMs) + "ms" : '-',
569
- description: w.description
570
- };
571
- })
572
- });
573
- }
574
- return [2 /*return*/, { success: true, data: status_1 }];
575
482
  }
576
- catch (error) {
577
- // Daemon not initialized
578
- output.writeln();
579
- output.printBox([
580
- "Status: " + output.error('○') + " " + output.error('NOT INITIALIZED'),
581
- '',
582
- 'Run "claude-flow daemon start" to start the daemon',
583
- ].join('\n'), 'RuFlo Daemon');
584
- return [2 /*return*/, { success: true }];
585
- }
586
- return [2 /*return*/];
587
- });
588
- }); }
483
+ return { success: true, data: status };
484
+ }
485
+ catch (error) {
486
+ // Daemon not initialized
487
+ output.writeln();
488
+ output.printBox([
489
+ `Status: ${output.error('○')} ${output.error('NOT INITIALIZED')}`,
490
+ '',
491
+ 'Run "claude-flow daemon start" to start the daemon',
492
+ ].join('\n'), 'RuFlo Daemon');
493
+ return { success: true };
494
+ }
495
+ },
589
496
  };
590
497
  // Trigger subcommand - manually run a worker
591
- var triggerCommand = {
498
+ const triggerCommand = {
592
499
  name: 'trigger',
593
500
  description: 'Manually trigger a specific worker',
594
501
  options: [
@@ -600,50 +507,40 @@ var triggerCommand = {
600
507
  { command: 'claude-flow daemon trigger -w audit', description: 'Trigger security audit' },
601
508
  { command: 'claude-flow daemon trigger -w audit --headless', description: 'Trigger audit in headless sandbox' },
602
509
  ],
603
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
604
- var workerType, daemon, spinner, result, error_4;
605
- return __generator(this, function (_a) {
606
- switch (_a.label) {
607
- case 0:
608
- workerType = ctx.flags.worker;
609
- if (!workerType) {
610
- output.printError('Worker type is required. Use --worker or -w flag.');
611
- output.writeln();
612
- output.writeln('Available workers: map, audit, optimize, consolidate, testgaps, predict, document, ultralearn, refactor, benchmark, deepdive, preload');
613
- return [2 /*return*/, { success: false, exitCode: 1 }];
614
- }
615
- _a.label = 1;
616
- case 1:
617
- _a.trys.push([1, 3, , 4]);
618
- daemon = getDaemon(process.cwd());
619
- spinner = output.createSpinner({ text: "Running " + workerType + " worker...", spinner: 'dots' });
620
- spinner.start();
621
- return [4 /*yield*/, daemon.triggerWorker(workerType)];
622
- case 2:
623
- result = _a.sent();
624
- if (result.success) {
625
- spinner.succeed("Worker " + workerType + " completed in " + result.durationMs + "ms");
626
- if (result.output) {
627
- output.writeln();
628
- output.writeln(output.bold('Output'));
629
- output.printJson(result.output);
630
- }
631
- }
632
- else {
633
- spinner.fail("Worker " + workerType + " failed: " + result.error);
634
- }
635
- return [2 /*return*/, { success: result.success, data: result }];
636
- case 3:
637
- error_4 = _a.sent();
638
- output.printError("Failed to trigger worker: " + (error_4 instanceof Error ? error_4.message : String(error_4)));
639
- return [2 /*return*/, { success: false, exitCode: 1 }];
640
- case 4: return [2 /*return*/];
510
+ action: async (ctx) => {
511
+ const workerType = ctx.flags.worker;
512
+ if (!workerType) {
513
+ output.printError('Worker type is required. Use --worker or -w flag.');
514
+ output.writeln();
515
+ output.writeln('Available workers: map, audit, optimize, consolidate, testgaps, predict, document, ultralearn, refactor, benchmark, deepdive, preload');
516
+ return { success: false, exitCode: 1 };
517
+ }
518
+ try {
519
+ const daemon = getDaemon(process.cwd());
520
+ const spinner = output.createSpinner({ text: `Running ${workerType} worker...`, spinner: 'dots' });
521
+ spinner.start();
522
+ const result = await daemon.triggerWorker(workerType);
523
+ if (result.success) {
524
+ spinner.succeed(`Worker ${workerType} completed in ${result.durationMs}ms`);
525
+ if (result.output) {
526
+ output.writeln();
527
+ output.writeln(output.bold('Output'));
528
+ output.printJson(result.output);
529
+ }
530
+ }
531
+ else {
532
+ spinner.fail(`Worker ${workerType} failed: ${result.error}`);
641
533
  }
642
- });
643
- }); }
534
+ return { success: result.success, data: result };
535
+ }
536
+ catch (error) {
537
+ output.printError(`Failed to trigger worker: ${error instanceof Error ? error.message : String(error)}`);
538
+ return { success: false, exitCode: 1 };
539
+ }
540
+ },
644
541
  };
645
542
  // Enable/disable worker subcommand
646
- var enableCommand = {
543
+ const enableCommand = {
647
544
  name: 'enable',
648
545
  description: 'Enable or disable a specific worker',
649
546
  options: [
@@ -654,54 +551,50 @@ var enableCommand = {
654
551
  { command: 'claude-flow daemon enable -w predict', description: 'Enable predict worker' },
655
552
  { command: 'claude-flow daemon enable -w document --disable', description: 'Disable document worker' },
656
553
  ],
657
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
658
- var workerType, disable, daemon;
659
- return __generator(this, function (_a) {
660
- workerType = ctx.flags.worker;
661
- disable = ctx.flags.disable;
662
- if (!workerType) {
663
- output.printError('Worker type is required. Use --worker or -w flag.');
664
- return [2 /*return*/, { success: false, exitCode: 1 }];
665
- }
666
- try {
667
- daemon = getDaemon(process.cwd());
668
- daemon.setWorkerEnabled(workerType, !disable);
669
- output.printSuccess("Worker " + workerType + " " + (disable ? 'disabled' : 'enabled'));
670
- return [2 /*return*/, { success: true }];
671
- }
672
- catch (error) {
673
- output.printError("Failed to " + (disable ? 'disable' : 'enable') + " worker: " + (error instanceof Error ? error.message : String(error)));
674
- return [2 /*return*/, { success: false, exitCode: 1 }];
675
- }
676
- return [2 /*return*/];
677
- });
678
- }); }
554
+ action: async (ctx) => {
555
+ const workerType = ctx.flags.worker;
556
+ const disable = ctx.flags.disable;
557
+ if (!workerType) {
558
+ output.printError('Worker type is required. Use --worker or -w flag.');
559
+ return { success: false, exitCode: 1 };
560
+ }
561
+ try {
562
+ const daemon = getDaemon(process.cwd());
563
+ daemon.setWorkerEnabled(workerType, !disable);
564
+ output.printSuccess(`Worker ${workerType} ${disable ? 'disabled' : 'enabled'}`);
565
+ return { success: true };
566
+ }
567
+ catch (error) {
568
+ output.printError(`Failed to ${disable ? 'disable' : 'enable'} worker: ${error instanceof Error ? error.message : String(error)}`);
569
+ return { success: false, exitCode: 1 };
570
+ }
571
+ },
679
572
  };
680
573
  // Helper functions for time formatting
681
574
  function formatTimeAgo(date) {
682
- var seconds = Math.floor((Date.now() - date.getTime()) / 1000);
575
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
683
576
  if (seconds < 60)
684
- return seconds + "s ago";
577
+ return `${seconds}s ago`;
685
578
  if (seconds < 3600)
686
- return Math.floor(seconds / 60) + "m ago";
579
+ return `${Math.floor(seconds / 60)}m ago`;
687
580
  if (seconds < 86400)
688
- return Math.floor(seconds / 3600) + "h ago";
689
- return Math.floor(seconds / 86400) + "d ago";
581
+ return `${Math.floor(seconds / 3600)}h ago`;
582
+ return `${Math.floor(seconds / 86400)}d ago`;
690
583
  }
691
584
  function formatTimeUntil(date) {
692
- var seconds = Math.floor((date.getTime() - Date.now()) / 1000);
585
+ const seconds = Math.floor((date.getTime() - Date.now()) / 1000);
693
586
  if (seconds < 0)
694
587
  return 'now';
695
588
  if (seconds < 60)
696
- return "in " + seconds + "s";
589
+ return `in ${seconds}s`;
697
590
  if (seconds < 3600)
698
- return "in " + Math.floor(seconds / 60) + "m";
591
+ return `in ${Math.floor(seconds / 60)}m`;
699
592
  if (seconds < 86400)
700
- return "in " + Math.floor(seconds / 3600) + "h";
701
- return "in " + Math.floor(seconds / 86400) + "d";
593
+ return `in ${Math.floor(seconds / 3600)}h`;
594
+ return `in ${Math.floor(seconds / 86400)}d`;
702
595
  }
703
596
  // Main daemon command
704
- export var daemonCommand = {
597
+ export const daemonCommand = {
705
598
  name: 'daemon',
706
599
  description: 'Manage background worker daemon (Node.js-based, auto-runs like shell helpers)',
707
600
  subcommands: [
@@ -719,47 +612,45 @@ export var daemonCommand = {
719
612
  { command: 'claude-flow daemon stop', description: 'Stop the daemon' },
720
613
  { command: 'claude-flow daemon trigger -w audit', description: 'Run security audit' },
721
614
  ],
722
- action: function () { return __awaiter(void 0, void 0, Promise, function () {
723
- return __generator(this, function (_a) {
724
- output.writeln();
725
- output.writeln(output.bold('RuFlo Daemon - Background Task Management'));
726
- output.writeln();
727
- output.writeln('Node.js-based background worker system that auto-runs like shell daemons.');
728
- output.writeln('Manages 12 specialized workers for continuous optimization and monitoring.');
729
- output.writeln();
730
- output.writeln(output.bold('Headless Mode'));
731
- output.writeln('Workers can run in headless mode using E2B sandboxes for isolated execution.');
732
- output.writeln('Use --headless flag with start/trigger commands. Sandbox modes: strict, permissive, disabled.');
733
- output.writeln();
734
- output.writeln(output.bold('Available Workers'));
735
- output.printList([
736
- output.highlight('map') + " - Codebase mapping (5 min interval)",
737
- output.highlight('audit') + " - Security analysis (10 min interval)",
738
- output.highlight('optimize') + " - Performance optimization (15 min interval)",
739
- output.highlight('consolidate') + " - Memory consolidation (30 min interval)",
740
- output.highlight('testgaps') + " - Test coverage analysis (20 min interval)",
741
- output.highlight('predict') + " - Predictive preloading (2 min, disabled by default)",
742
- output.highlight('document') + " - Auto-documentation (60 min, disabled by default)",
743
- output.highlight('ultralearn') + " - Deep knowledge acquisition (manual trigger)",
744
- output.highlight('refactor') + " - Code refactoring suggestions (manual trigger)",
745
- output.highlight('benchmark') + " - Performance benchmarking (manual trigger)",
746
- output.highlight('deepdive') + " - Deep code analysis (manual trigger)",
747
- output.highlight('preload') + " - Resource preloading (manual trigger)",
748
- ]);
749
- output.writeln();
750
- output.writeln(output.bold('Subcommands'));
751
- output.printList([
752
- output.highlight('start') + " - Start the daemon",
753
- output.highlight('stop') + " - Stop the daemon",
754
- output.highlight('status') + " - Show daemon status",
755
- output.highlight('trigger') + " - Manually run a worker",
756
- output.highlight('enable') + " - Enable/disable a worker",
757
- ]);
758
- output.writeln();
759
- output.writeln('Run "claude-flow daemon <subcommand> --help" for details');
760
- return [2 /*return*/, { success: true }];
761
- });
762
- }); }
615
+ action: async () => {
616
+ output.writeln();
617
+ output.writeln(output.bold('RuFlo Daemon - Background Task Management'));
618
+ output.writeln();
619
+ output.writeln('Node.js-based background worker system that auto-runs like shell daemons.');
620
+ output.writeln('Manages 12 specialized workers for continuous optimization and monitoring.');
621
+ output.writeln();
622
+ output.writeln(output.bold('Headless Mode'));
623
+ output.writeln('Workers can run in headless mode using E2B sandboxes for isolated execution.');
624
+ output.writeln('Use --headless flag with start/trigger commands. Sandbox modes: strict, permissive, disabled.');
625
+ output.writeln();
626
+ output.writeln(output.bold('Available Workers'));
627
+ output.printList([
628
+ `${output.highlight('map')} - Codebase mapping (5 min interval)`,
629
+ `${output.highlight('audit')} - Security analysis (10 min interval)`,
630
+ `${output.highlight('optimize')} - Performance optimization (15 min interval)`,
631
+ `${output.highlight('consolidate')} - Memory consolidation (30 min interval)`,
632
+ `${output.highlight('testgaps')} - Test coverage analysis (20 min interval)`,
633
+ `${output.highlight('predict')} - Predictive preloading (2 min, disabled by default)`,
634
+ `${output.highlight('document')} - Auto-documentation (60 min, disabled by default)`,
635
+ `${output.highlight('ultralearn')} - Deep knowledge acquisition (manual trigger)`,
636
+ `${output.highlight('refactor')} - Code refactoring suggestions (manual trigger)`,
637
+ `${output.highlight('benchmark')} - Performance benchmarking (manual trigger)`,
638
+ `${output.highlight('deepdive')} - Deep code analysis (manual trigger)`,
639
+ `${output.highlight('preload')} - Resource preloading (manual trigger)`,
640
+ ]);
641
+ output.writeln();
642
+ output.writeln(output.bold('Subcommands'));
643
+ output.printList([
644
+ `${output.highlight('start')} - Start the daemon`,
645
+ `${output.highlight('stop')} - Stop the daemon`,
646
+ `${output.highlight('status')} - Show daemon status`,
647
+ `${output.highlight('trigger')} - Manually run a worker`,
648
+ `${output.highlight('enable')} - Enable/disable a worker`,
649
+ ]);
650
+ output.writeln();
651
+ output.writeln('Run "claude-flow daemon <subcommand> --help" for details');
652
+ return { success: true };
653
+ },
763
654
  };
764
655
  export default daemonCommand;
765
656
  //# sourceMappingURL=daemon.js.map