kynjal-cli 3.1.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/core/planner.md +2 -2
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/core/reviewer.md +1 -1
  5. package/.claude/agents/core/tester.md +1 -1
  6. package/.claude/agents/data/data-ml-model.md +4 -4
  7. package/.claude/agents/development/dev-backend-api.md +4 -4
  8. package/.claude/agents/documentation/docs-api-openapi.md +4 -4
  9. package/.claude/agents/github/code-review-swarm.md +2 -2
  10. package/.claude/agents/github/issue-tracker.md +2 -2
  11. package/.claude/agents/github/pr-manager.md +2 -2
  12. package/.claude/agents/github/release-manager.md +2 -2
  13. package/.claude/agents/github/workflow-automation.md +2 -2
  14. package/.claude/agents/sparc/architecture.md +3 -3
  15. package/.claude/agents/sparc/pseudocode.md +2 -2
  16. package/.claude/agents/sparc/refinement.md +3 -3
  17. package/.claude/agents/sparc/specification.md +2 -2
  18. package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
  19. package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
  20. package/.claude/agents/swarm/mesh-coordinator.md +1 -1
  21. package/.claude/agents/templates/base-template-generator.md +25 -4
  22. package/.claude/agents/templates/sparc-coordinator.md +3 -3
  23. package/.claude/helpers/auto-commit.sh +1 -1
  24. package/.claude/helpers/auto-memory-hook.mjs +27 -9
  25. package/.claude/helpers/hook-handler.cjs +58 -18
  26. package/.claude/helpers/statusline.cjs +14 -33
  27. package/.claude/helpers/statusline.js +3 -3
  28. package/.claude/settings.json +9 -9
  29. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  30. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  31. package/README.md +383 -170
  32. package/bin/cli.js +6 -6
  33. package/bin/mcp-server.js +1 -1
  34. package/bin/preinstall.cjs +2 -0
  35. package/dist/src/appliance/gguf-engine.js +664 -0
  36. package/dist/src/appliance/gguf-engine.js.map +1 -0
  37. package/dist/src/appliance/ruvllm-bridge.js +492 -0
  38. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  39. package/dist/src/appliance/rvfa-builder.js +383 -0
  40. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  41. package/dist/src/appliance/rvfa-distribution.js +533 -0
  42. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  43. package/dist/src/appliance/rvfa-format.js +465 -0
  44. package/dist/src/appliance/rvfa-format.js.map +1 -0
  45. package/dist/src/appliance/rvfa-runner.js +373 -0
  46. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  47. package/dist/src/appliance/rvfa-signing.js +469 -0
  48. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  49. package/dist/src/benchmarks/pretrain/index.js +542 -331
  50. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  51. package/dist/src/commands/agent.d.ts.map +1 -1
  52. package/dist/src/commands/agent.js +725 -502
  53. package/dist/src/commands/agent.js.map +1 -1
  54. package/dist/src/commands/analyze.js +1548 -1218
  55. package/dist/src/commands/analyze.js.map +1 -1
  56. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  57. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  58. package/dist/src/commands/appliance-advanced.js +324 -0
  59. package/dist/src/commands/appliance-advanced.js.map +1 -0
  60. package/dist/src/commands/appliance.d.ts +8 -0
  61. package/dist/src/commands/appliance.d.ts.map +1 -0
  62. package/dist/src/commands/appliance.js +581 -0
  63. package/dist/src/commands/appliance.js.map +1 -0
  64. package/dist/src/commands/benchmark.js +523 -372
  65. package/dist/src/commands/benchmark.js.map +1 -1
  66. package/dist/src/commands/claims.js +364 -274
  67. package/dist/src/commands/claims.js.map +1 -1
  68. package/dist/src/commands/cleanup.d.ts +13 -0
  69. package/dist/src/commands/cleanup.d.ts.map +1 -0
  70. package/dist/src/commands/cleanup.js +262 -0
  71. package/dist/src/commands/cleanup.js.map +1 -0
  72. package/dist/src/commands/completions.js +118 -477
  73. package/dist/src/commands/completions.js.map +1 -1
  74. package/dist/src/commands/config.js +303 -237
  75. package/dist/src/commands/config.js.map +1 -1
  76. package/dist/src/commands/daemon.d.ts.map +1 -1
  77. package/dist/src/commands/daemon.js +597 -425
  78. package/dist/src/commands/daemon.js.map +1 -1
  79. package/dist/src/commands/deployment.js +275 -194
  80. package/dist/src/commands/deployment.js.map +1 -1
  81. package/dist/src/commands/doctor.d.ts.map +1 -1
  82. package/dist/src/commands/doctor.js +690 -460
  83. package/dist/src/commands/doctor.js.map +1 -1
  84. package/dist/src/commands/embeddings.js +1543 -1293
  85. package/dist/src/commands/embeddings.js.map +1 -1
  86. package/dist/src/commands/guidance.js +596 -449
  87. package/dist/src/commands/guidance.js.map +1 -1
  88. package/dist/src/commands/hive-mind.js +938 -854
  89. package/dist/src/commands/hive-mind.js.map +1 -1
  90. package/dist/src/commands/hooks.d.ts.map +1 -1
  91. package/dist/src/commands/hooks.js +3677 -2570
  92. package/dist/src/commands/hooks.js.map +1 -1
  93. package/dist/src/commands/index.js +322 -122
  94. package/dist/src/commands/index.js.map +1 -1
  95. package/dist/src/commands/init.d.ts +1 -1
  96. package/dist/src/commands/init.d.ts.map +1 -1
  97. package/dist/src/commands/init.js +943 -787
  98. package/dist/src/commands/init.js.map +1 -1
  99. package/dist/src/commands/issues.js +558 -383
  100. package/dist/src/commands/issues.js.map +1 -1
  101. package/dist/src/commands/mcp.d.ts.map +1 -1
  102. package/dist/src/commands/mcp.js +605 -475
  103. package/dist/src/commands/mcp.js.map +1 -1
  104. package/dist/src/commands/memory.d.ts.map +1 -1
  105. package/dist/src/commands/memory.js +1031 -814
  106. package/dist/src/commands/memory.js.map +1 -1
  107. package/dist/src/commands/migrate.js +347 -282
  108. package/dist/src/commands/migrate.js.map +1 -1
  109. package/dist/src/commands/neural.d.ts.map +1 -1
  110. package/dist/src/commands/neural.js +1563 -1283
  111. package/dist/src/commands/neural.js.map +1 -1
  112. package/dist/src/commands/performance.js +643 -497
  113. package/dist/src/commands/performance.js.map +1 -1
  114. package/dist/src/commands/plugins.js +841 -668
  115. package/dist/src/commands/plugins.js.map +1 -1
  116. package/dist/src/commands/process.js +447 -392
  117. package/dist/src/commands/process.js.map +1 -1
  118. package/dist/src/commands/progress.js +256 -162
  119. package/dist/src/commands/progress.js.map +1 -1
  120. package/dist/src/commands/providers.js +220 -150
  121. package/dist/src/commands/providers.js.map +1 -1
  122. package/dist/src/commands/route.js +665 -520
  123. package/dist/src/commands/route.js.map +1 -1
  124. package/dist/src/commands/ruvector/backup.js +651 -505
  125. package/dist/src/commands/ruvector/backup.js.map +1 -1
  126. package/dist/src/commands/ruvector/benchmark.js +401 -349
  127. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  128. package/dist/src/commands/ruvector/import.js +267 -225
  129. package/dist/src/commands/ruvector/import.js.map +1 -1
  130. package/dist/src/commands/ruvector/index.js +75 -37
  131. package/dist/src/commands/ruvector/index.js.map +1 -1
  132. package/dist/src/commands/ruvector/init.js +359 -336
  133. package/dist/src/commands/ruvector/init.js.map +1 -1
  134. package/dist/src/commands/ruvector/migrate.js +322 -335
  135. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  136. package/dist/src/commands/ruvector/optimize.js +431 -375
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  138. package/dist/src/commands/ruvector/setup.js +117 -703
  139. package/dist/src/commands/ruvector/setup.js.map +1 -1
  140. package/dist/src/commands/ruvector/status.js +419 -364
  141. package/dist/src/commands/ruvector/status.js.map +1 -1
  142. package/dist/src/commands/security.d.ts.map +1 -1
  143. package/dist/src/commands/security.js +610 -456
  144. package/dist/src/commands/security.js.map +1 -1
  145. package/dist/src/commands/session.d.ts +1 -1
  146. package/dist/src/commands/session.js +627 -505
  147. package/dist/src/commands/session.js.map +1 -1
  148. package/dist/src/commands/start.d.ts +1 -1
  149. package/dist/src/commands/start.js +368 -271
  150. package/dist/src/commands/start.js.map +1 -1
  151. package/dist/src/commands/status.d.ts +1 -1
  152. package/dist/src/commands/status.d.ts.map +1 -1
  153. package/dist/src/commands/status.js +492 -379
  154. package/dist/src/commands/status.js.map +1 -1
  155. package/dist/src/commands/swarm.js +488 -408
  156. package/dist/src/commands/swarm.js.map +1 -1
  157. package/dist/src/commands/task.d.ts +1 -1
  158. package/dist/src/commands/task.js +539 -424
  159. package/dist/src/commands/task.js.map +1 -1
  160. package/dist/src/commands/transfer-store.js +412 -322
  161. package/dist/src/commands/transfer-store.js.map +1 -1
  162. package/dist/src/commands/update.js +291 -196
  163. package/dist/src/commands/update.js.map +1 -1
  164. package/dist/src/commands/workflow.js +486 -386
  165. package/dist/src/commands/workflow.js.map +1 -1
  166. package/dist/src/config-adapter.js +40 -39
  167. package/dist/src/config-adapter.js.map +1 -1
  168. package/dist/src/index.js +416 -312
  169. package/dist/src/index.js.map +1 -1
  170. package/dist/src/infrastructure/in-memory-repositories.js +507 -246
  171. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  172. package/dist/src/init/claudemd-generator.js +78 -368
  173. package/dist/src/init/claudemd-generator.js.map +1 -1
  174. package/dist/src/init/executor.js +1019 -1345
  175. package/dist/src/init/executor.js.map +1 -1
  176. package/dist/src/init/helpers-generator.js +60 -635
  177. package/dist/src/init/helpers-generator.js.map +1 -1
  178. package/dist/src/init/index.d.ts +1 -1
  179. package/dist/src/init/index.d.ts.map +1 -1
  180. package/dist/src/init/index.js +1 -1
  181. package/dist/src/init/index.js.map +1 -1
  182. package/dist/src/init/mcp-generator.d.ts +0 -1
  183. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  184. package/dist/src/init/mcp-generator.js +62 -42
  185. package/dist/src/init/mcp-generator.js.map +1 -1
  186. package/dist/src/init/settings-generator.d.ts.map +1 -1
  187. package/dist/src/init/settings-generator.js +167 -100
  188. package/dist/src/init/settings-generator.js.map +1 -1
  189. package/dist/src/init/statusline-generator.d.ts +16 -8
  190. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  191. package/dist/src/init/statusline-generator.js +20 -1300
  192. package/dist/src/init/statusline-generator.js.map +1 -1
  193. package/dist/src/init/types.d.ts +15 -5
  194. package/dist/src/init/types.d.ts.map +1 -1
  195. package/dist/src/init/types.js +66 -76
  196. package/dist/src/init/types.js.map +1 -1
  197. package/dist/src/mcp-client.js +130 -76
  198. package/dist/src/mcp-client.js.map +1 -1
  199. package/dist/src/mcp-server.js +758 -445
  200. package/dist/src/mcp-server.js.map +1 -1
  201. package/dist/src/mcp-tools/agent-tools.js +492 -391
  202. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  204. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
  205. package/dist/src/mcp-tools/agentdb-tools.js +758 -0
  206. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
  207. package/dist/src/mcp-tools/analyze-tools.js +236 -172
  208. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/auto-install.js +142 -80
  210. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  211. package/dist/src/mcp-tools/browser-tools.js +375 -252
  212. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/claims-tools.js +565 -473
  214. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  216. package/dist/src/mcp-tools/config-tools.js +284 -190
  217. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  218. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  219. package/dist/src/mcp-tools/coordination-tools.js +600 -349
  220. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/daa-tools.js +367 -289
  222. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/embeddings-tools.js +693 -582
  224. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/github-tools.js +312 -261
  226. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  228. package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
  229. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  230. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  231. package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
  232. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  233. package/dist/src/mcp-tools/index.d.ts +2 -0
  234. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/index.js +2 -0
  236. package/dist/src/mcp-tools/index.js.map +1 -1
  237. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  238. package/dist/src/mcp-tools/memory-tools.js +514 -329
  239. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  240. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  241. package/dist/src/mcp-tools/neural-tools.js +428 -326
  242. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  243. package/dist/src/mcp-tools/performance-tools.js +480 -420
  244. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  245. package/dist/src/mcp-tools/progress-tools.js +278 -204
  246. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  248. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
  249. package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
  250. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
  251. package/dist/src/mcp-tools/security-tools.js +429 -297
  252. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/session-tools.js +234 -185
  254. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
  256. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/swarm-tools.js +303 -64
  258. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/system-tools.js +352 -200
  261. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  262. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/task-tools.js +357 -189
  264. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/terminal-tools.js +196 -148
  266. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  267. package/dist/src/mcp-tools/transfer-tools.js +333 -186
  268. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  269. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  270. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
  271. package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
  272. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
  273. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  274. package/dist/src/mcp-tools/workflow-tools.js +471 -335
  275. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  276. package/dist/src/memory/ewc-consolidation.js +345 -173
  277. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  278. package/dist/src/memory/intelligence.js +841 -359
  279. package/dist/src/memory/intelligence.js.map +1 -1
  280. package/dist/src/memory/memory-bridge.js +1964 -0
  281. package/dist/src/memory/memory-bridge.js.map +1 -0
  282. package/dist/src/memory/memory-initializer.js +1895 -1602
  283. package/dist/src/memory/memory-initializer.js.map +1 -1
  284. package/dist/src/memory/sona-optimizer.js +329 -199
  285. package/dist/src/memory/sona-optimizer.js.map +1 -1
  286. package/dist/src/output.d.ts +2 -2
  287. package/dist/src/output.d.ts.map +1 -1
  288. package/dist/src/output.js +273 -242
  289. package/dist/src/output.js.map +1 -1
  290. package/dist/src/parser.js +217 -124
  291. package/dist/src/parser.js.map +1 -1
  292. package/dist/src/plugins/manager.js +531 -278
  293. package/dist/src/plugins/manager.js.map +1 -1
  294. package/dist/src/plugins/store/discovery.js +362 -275
  295. package/dist/src/plugins/store/discovery.js.map +1 -1
  296. package/dist/src/plugins/store/index.js +105 -48
  297. package/dist/src/plugins/store/index.js.map +1 -1
  298. package/dist/src/plugins/store/search.js +107 -69
  299. package/dist/src/plugins/store/search.js.map +1 -1
  300. package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
  301. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  302. package/dist/src/plugins/tests/standalone-test.js +223 -172
  303. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  304. package/dist/src/plugins/tests/test-plugin-store.js +228 -190
  305. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  306. package/dist/src/production/circuit-breaker.js +126 -62
  307. package/dist/src/production/circuit-breaker.js.map +1 -1
  308. package/dist/src/production/error-handler.js +156 -86
  309. package/dist/src/production/error-handler.js.map +1 -1
  310. package/dist/src/production/monitoring.js +220 -139
  311. package/dist/src/production/monitoring.js.map +1 -1
  312. package/dist/src/production/rate-limiter.js +93 -74
  313. package/dist/src/production/rate-limiter.js.map +1 -1
  314. package/dist/src/production/retry.js +167 -75
  315. package/dist/src/production/retry.js.map +1 -1
  316. package/dist/src/prompt.js +560 -436
  317. package/dist/src/prompt.js.map +1 -1
  318. package/dist/src/runtime/headless.js +289 -200
  319. package/dist/src/runtime/headless.js.map +1 -1
  320. package/dist/src/ruvector/agent-wasm.js +511 -0
  321. package/dist/src/ruvector/agent-wasm.js.map +1 -0
  322. package/dist/src/ruvector/ast-analyzer.js +232 -145
  323. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  324. package/dist/src/ruvector/coverage-router.js +419 -287
  325. package/dist/src/ruvector/coverage-router.js.map +1 -1
  326. package/dist/src/ruvector/coverage-tools.js +101 -56
  327. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  328. package/dist/src/ruvector/diff-classifier.js +451 -324
  329. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  330. package/dist/src/ruvector/enhanced-model-router.js +337 -251
  331. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  332. package/dist/src/ruvector/flash-attention.js +254 -223
  333. package/dist/src/ruvector/flash-attention.js.map +1 -1
  334. package/dist/src/ruvector/graph-analyzer.js +680 -486
  335. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  336. package/dist/src/ruvector/index.js +113 -27
  337. package/dist/src/ruvector/index.js.map +1 -1
  338. package/dist/src/ruvector/lora-adapter.js +248 -155
  339. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  340. package/dist/src/ruvector/model-router.js +248 -175
  341. package/dist/src/ruvector/model-router.js.map +1 -1
  342. package/dist/src/ruvector/moe-router.js +286 -228
  343. package/dist/src/ruvector/moe-router.js.map +1 -1
  344. package/dist/src/ruvector/q-learning-router.js +338 -257
  345. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  346. package/dist/src/ruvector/ruvllm-wasm.js +527 -0
  347. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
  348. package/dist/src/ruvector/semantic-router.js +67 -60
  349. package/dist/src/ruvector/semantic-router.js.map +1 -1
  350. package/dist/src/ruvector/vector-db.js +205 -119
  351. package/dist/src/ruvector/vector-db.js.map +1 -1
  352. package/dist/src/services/agentic-flow-bridge.js +168 -0
  353. package/dist/src/services/agentic-flow-bridge.js.map +1 -0
  354. package/dist/src/services/claim-service.js +940 -615
  355. package/dist/src/services/claim-service.js.map +1 -1
  356. package/dist/src/services/container-worker-pool.js +669 -399
  357. package/dist/src/services/container-worker-pool.js.map +1 -1
  358. package/dist/src/services/headless-worker-executor.js +467 -441
  359. package/dist/src/services/headless-worker-executor.js.map +1 -1
  360. package/dist/src/services/index.d.ts +5 -5
  361. package/dist/src/services/index.d.ts.map +1 -1
  362. package/dist/src/services/index.js +4 -4
  363. package/dist/src/services/index.js.map +1 -1
  364. package/dist/src/services/registry-api.js +201 -93
  365. package/dist/src/services/registry-api.js.map +1 -1
  366. package/dist/src/services/ruvector-training.js +414 -144
  367. package/dist/src/services/ruvector-training.js.map +1 -1
  368. package/dist/src/services/worker-daemon.js +928 -531
  369. package/dist/src/services/worker-daemon.js.map +1 -1
  370. package/dist/src/services/worker-queue.js +550 -331
  371. package/dist/src/services/worker-queue.js.map +1 -1
  372. package/dist/src/suggest.js +55 -45
  373. package/dist/src/suggest.js.map +1 -1
  374. package/dist/src/transfer/anonymization/index.js +37 -29
  375. package/dist/src/transfer/anonymization/index.js.map +1 -1
  376. package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
  377. package/dist/src/transfer/deploy-seraphine.js +156 -129
  378. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  379. package/dist/src/transfer/export.js +142 -84
  380. package/dist/src/transfer/export.js.map +1 -1
  381. package/dist/src/transfer/index.d.ts +1 -1
  382. package/dist/src/transfer/index.d.ts.map +1 -1
  383. package/dist/src/transfer/index.js +2 -0
  384. package/dist/src/transfer/index.js.map +1 -1
  385. package/dist/src/transfer/ipfs/client.js +337 -179
  386. package/dist/src/transfer/ipfs/client.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.js +434 -290
  388. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  389. package/dist/src/transfer/models/seraphine.js +58 -58
  390. package/dist/src/transfer/models/seraphine.js.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +37 -33
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.js +248 -139
  394. package/dist/src/transfer/storage/gcs.js.map +1 -1
  395. package/dist/src/transfer/store/discovery.js +353 -243
  396. package/dist/src/transfer/store/discovery.js.map +1 -1
  397. package/dist/src/transfer/store/download.js +365 -243
  398. package/dist/src/transfer/store/download.js.map +1 -1
  399. package/dist/src/transfer/store/index.js +130 -63
  400. package/dist/src/transfer/store/index.js.map +1 -1
  401. package/dist/src/transfer/store/publish.js +258 -184
  402. package/dist/src/transfer/store/publish.js.map +1 -1
  403. package/dist/src/transfer/store/registry.js +73 -51
  404. package/dist/src/transfer/store/registry.js.map +1 -1
  405. package/dist/src/transfer/store/search.js +96 -64
  406. package/dist/src/transfer/store/search.js.map +1 -1
  407. package/dist/src/transfer/store/tests/standalone-test.js +231 -174
  408. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  409. package/dist/src/transfer/test-seraphine.js +130 -95
  410. package/dist/src/transfer/test-seraphine.js.map +1 -1
  411. package/dist/src/transfer/tests/test-store.js +239 -194
  412. package/dist/src/transfer/tests/test-store.js.map +1 -1
  413. package/dist/src/types.js +56 -27
  414. package/dist/src/types.js.map +1 -1
  415. package/dist/src/update/checker.js +183 -106
  416. package/dist/src/update/checker.js.map +1 -1
  417. package/dist/src/update/executor.js +198 -135
  418. package/dist/src/update/executor.js.map +1 -1
  419. package/dist/src/update/index.js +85 -38
  420. package/dist/src/update/index.js.map +1 -1
  421. package/dist/src/update/rate-limiter.js +31 -19
  422. package/dist/src/update/rate-limiter.js.map +1 -1
  423. package/dist/src/update/validator.js +64 -38
  424. package/dist/src/update/validator.js.map +1 -1
  425. package/dist/tsconfig.tsbuildinfo +1 -1
  426. package/package.json +13 -10
  427. package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
  428. package/.claude/agents/custom/design-architect.yaml +0 -48
  429. package/.claude/agents/custom/ui-developer.yaml +0 -46
  430. package/.claude/agents/custom/ux-researcher.yaml +0 -60
  431. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  432. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  433. package/dist/src/commands/index.d.ts +0 -108
  434. package/dist/src/commands/index.d.ts.map +0 -1
  435. package/dist/src/config-adapter.d.ts +0 -15
  436. package/dist/src/config-adapter.d.ts.map +0 -1
  437. package/dist/src/index.d.ts +0 -76
  438. package/dist/src/index.d.ts.map +0 -1
  439. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  440. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  441. package/dist/src/init/claudemd-generator.d.ts +0 -25
  442. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  443. package/dist/src/init/executor.d.ts +0 -41
  444. package/dist/src/init/executor.d.ts.map +0 -1
  445. package/dist/src/init/helpers-generator.d.ts +0 -60
  446. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  447. package/dist/src/mcp-client.d.ts +0 -92
  448. package/dist/src/mcp-client.d.ts.map +0 -1
  449. package/dist/src/mcp-server.d.ts +0 -161
  450. package/dist/src/mcp-server.d.ts.map +0 -1
  451. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  452. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  453. package/dist/src/mcp-tools/types.d.ts +0 -31
  454. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  455. package/dist/src/memory/ewc-consolidation.d.ts +0 -271
  456. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  457. package/dist/src/memory/intelligence.d.ts +0 -285
  458. package/dist/src/memory/intelligence.d.ts.map +0 -1
  459. package/dist/src/memory/memory-initializer.d.ts +0 -396
  460. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  461. package/dist/src/memory/sona-optimizer.d.ts +0 -227
  462. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  463. package/dist/src/parser.d.ts +0 -41
  464. package/dist/src/parser.d.ts.map +0 -1
  465. package/dist/src/plugins/manager.d.ts +0 -133
  466. package/dist/src/plugins/manager.d.ts.map +0 -1
  467. package/dist/src/plugins/store/discovery.d.ts +0 -88
  468. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  469. package/dist/src/plugins/store/index.d.ts +0 -76
  470. package/dist/src/plugins/store/index.d.ts.map +0 -1
  471. package/dist/src/plugins/store/search.d.ts +0 -46
  472. package/dist/src/plugins/store/search.d.ts.map +0 -1
  473. package/dist/src/plugins/store/types.d.ts +0 -274
  474. package/dist/src/plugins/store/types.d.ts.map +0 -1
  475. package/dist/src/production/circuit-breaker.d.ts +0 -101
  476. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  477. package/dist/src/production/error-handler.d.ts +0 -92
  478. package/dist/src/production/error-handler.d.ts.map +0 -1
  479. package/dist/src/production/monitoring.d.ts +0 -161
  480. package/dist/src/production/monitoring.d.ts.map +0 -1
  481. package/dist/src/production/rate-limiter.d.ts +0 -80
  482. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  483. package/dist/src/production/retry.d.ts +0 -48
  484. package/dist/src/production/retry.d.ts.map +0 -1
  485. package/dist/src/prompt.d.ts +0 -44
  486. package/dist/src/prompt.d.ts.map +0 -1
  487. package/dist/src/runtime/headless.d.ts +0 -60
  488. package/dist/src/runtime/headless.d.ts.map +0 -1
  489. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  490. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  491. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  492. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  493. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  494. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  495. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
  496. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  497. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  498. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  499. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  500. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  501. package/dist/src/ruvector/index.d.ts +0 -34
  502. package/dist/src/ruvector/index.d.ts.map +0 -1
  503. package/dist/src/ruvector/lora-adapter.d.ts +0 -218
  504. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  505. package/dist/src/ruvector/model-router.d.ts +0 -220
  506. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  507. package/dist/src/ruvector/moe-router.d.ts +0 -206
  508. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  509. package/dist/src/ruvector/q-learning-router.d.ts +0 -211
  510. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  511. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  512. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  513. package/dist/src/ruvector/vector-db.d.ts +0 -69
  514. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  515. package/dist/src/services/claim-service.d.ts +0 -204
  516. package/dist/src/services/claim-service.d.ts.map +0 -1
  517. package/dist/src/services/container-worker-pool.d.ts +0 -197
  518. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  519. package/dist/src/services/headless-worker-executor.d.ts +0 -304
  520. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  521. package/dist/src/services/registry-api.d.ts +0 -58
  522. package/dist/src/services/registry-api.d.ts.map +0 -1
  523. package/dist/src/services/ruvector-training.d.ts +0 -213
  524. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  525. package/dist/src/services/worker-daemon.d.ts +0 -203
  526. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  527. package/dist/src/services/worker-queue.d.ts +0 -194
  528. package/dist/src/services/worker-queue.d.ts.map +0 -1
  529. package/dist/src/suggest.d.ts +0 -53
  530. package/dist/src/suggest.d.ts.map +0 -1
  531. package/dist/src/transfer/export.d.ts +0 -25
  532. package/dist/src/transfer/export.d.ts.map +0 -1
  533. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  534. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  535. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  536. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  537. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  538. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  539. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  540. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  541. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  542. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  543. package/dist/src/transfer/store/discovery.d.ts +0 -84
  544. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  545. package/dist/src/transfer/store/download.d.ts +0 -70
  546. package/dist/src/transfer/store/download.d.ts.map +0 -1
  547. package/dist/src/transfer/store/index.d.ts +0 -84
  548. package/dist/src/transfer/store/index.d.ts.map +0 -1
  549. package/dist/src/transfer/store/publish.d.ts +0 -76
  550. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  551. package/dist/src/transfer/store/search.d.ts +0 -54
  552. package/dist/src/transfer/store/search.d.ts.map +0 -1
  553. package/dist/src/transfer/types.d.ts +0 -245
  554. package/dist/src/transfer/types.d.ts.map +0 -1
  555. package/dist/src/types.d.ts +0 -198
  556. package/dist/src/types.d.ts.map +0 -1
  557. package/dist/src/update/checker.d.ts +0 -34
  558. package/dist/src/update/checker.d.ts.map +0 -1
  559. package/dist/src/update/executor.d.ts +0 -32
  560. package/dist/src/update/executor.d.ts.map +0 -1
  561. package/dist/src/update/index.d.ts +0 -33
  562. package/dist/src/update/index.d.ts.map +0 -1
  563. package/dist/src/update/rate-limiter.d.ts +0 -20
  564. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  565. package/dist/src/update/validator.d.ts +0 -17
  566. package/dist/src/update/validator.d.ts.map +0 -1
@@ -2,6 +2,62 @@
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
+ };
5
61
  import { output } from '../output.js';
6
62
  import { getDaemon, startDaemon, stopDaemon } from '../services/worker-daemon.js';
7
63
  import { spawn } from 'child_process';
@@ -9,16 +65,18 @@ import { fileURLToPath } from 'url';
9
65
  import { dirname, join, resolve } from 'path';
10
66
  import * as fs from 'fs';
11
67
  // Start daemon subcommand
12
- const startCommand = {
68
+ var startCommand = {
13
69
  name: 'start',
14
70
  description: 'Start the worker daemon with all enabled background workers',
15
71
  options: [
16
72
  { name: 'workers', short: 'w', type: 'string', description: 'Comma-separated list of workers to enable (default: map,audit,optimize,consolidate,testgaps)' },
17
73
  { name: 'quiet', short: 'Q', type: 'boolean', description: 'Suppress output' },
18
- { name: 'background', short: 'b', type: 'boolean', description: 'Run daemon in background (detached process)', default: true },
74
+ { name: 'background', short: 'b', type: 'boolean', description: 'Run daemon in background (detached process)', "default": true },
19
75
  { name: 'foreground', short: 'f', type: 'boolean', description: 'Run daemon in foreground (blocks terminal)' },
20
76
  { name: 'headless', type: 'boolean', description: 'Enable headless worker execution (E2B sandbox)' },
21
77
  { name: 'sandbox', type: 'string', description: 'Default sandbox mode for headless workers', choices: ['strict', 'permissive', 'disabled'] },
78
+ { name: 'max-cpu-load', type: 'string', description: 'Override maxCpuLoad resource threshold (e.g. 4.0)' },
79
+ { name: 'min-free-memory', type: 'string', description: 'Override minFreeMemoryPercent resource threshold (e.g. 15)' },
22
80
  ],
23
81
  examples: [
24
82
  { command: 'claude-flow daemon start', description: 'Start daemon in background (default)' },
@@ -26,189 +84,255 @@ const startCommand = {
26
84
  { command: 'claude-flow daemon start -w map,audit,optimize', description: 'Start with specific workers' },
27
85
  { command: 'claude-flow daemon start --headless --sandbox strict', description: 'Start with headless workers in strict sandbox' },
28
86
  ],
29
- action: async (ctx) => {
30
- const quiet = ctx.flags.quiet;
31
- const foreground = ctx.flags.foreground;
32
- const projectRoot = process.cwd();
33
- const isDaemonProcess = process.env.CLAUDE_FLOW_DAEMON === '1';
34
- // Check if background daemon already running (skip if we ARE the daemon process)
35
- if (!isDaemonProcess) {
36
- const bgPid = getBackgroundDaemonPid(projectRoot);
37
- if (bgPid && isProcessRunning(bgPid)) {
38
- if (!quiet) {
39
- output.printWarning(`Daemon already running in background (PID: ${bgPid})`);
40
- }
41
- return { success: true };
42
- }
43
- }
44
- // Background mode (default): fork a detached process
45
- if (!foreground) {
46
- return startBackgroundDaemon(projectRoot, quiet);
47
- }
48
- // Foreground mode: run in current process (blocks terminal)
49
- try {
50
- const stateDir = join(projectRoot, '.claude-flow');
51
- const pidFile = join(stateDir, 'daemon.pid');
52
- // Ensure state directory exists
53
- if (!fs.existsSync(stateDir)) {
54
- fs.mkdirSync(stateDir, { recursive: true });
55
- }
56
- // Write PID file for foreground mode
57
- fs.writeFileSync(pidFile, String(process.pid));
58
- // Clean up PID file on exit
59
- const cleanup = () => {
60
- try {
61
- if (fs.existsSync(pidFile)) {
62
- fs.unlinkSync(pidFile);
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
+ }
63
125
  }
64
- }
65
- catch { /* ignore */ }
66
- };
67
- process.on('exit', cleanup);
68
- process.on('SIGINT', () => { cleanup(); process.exit(0); });
69
- process.on('SIGTERM', () => { cleanup(); process.exit(0); });
70
- if (!quiet) {
71
- const spinner = output.createSpinner({ text: 'Starting worker daemon...', spinner: 'dots' });
72
- spinner.start();
73
- const daemon = await startDaemon(projectRoot);
74
- const status = daemon.getStatus();
75
- spinner.succeed('Worker daemon started (foreground mode)');
76
- output.writeln();
77
- output.printBox([
78
- `PID: ${status.pid}`,
79
- `Started: ${status.startedAt?.toISOString()}`,
80
- `Workers: ${status.config.workers.filter(w => w.enabled).length} enabled`,
81
- `Max Concurrent: ${status.config.maxConcurrent}`,
82
- ].join('\n'), 'Daemon Status');
83
- output.writeln();
84
- output.writeln(output.bold('Scheduled Workers'));
85
- output.printTable({
86
- columns: [
87
- { key: 'type', header: 'Worker', width: 15 },
88
- { key: 'interval', header: 'Interval', width: 12 },
89
- { key: 'priority', header: 'Priority', width: 10 },
90
- { key: 'description', header: 'Description', width: 30 },
91
- ],
92
- data: status.config.workers
93
- .filter(w => w.enabled)
94
- .map(w => ({
95
- type: output.highlight(w.type),
96
- interval: `${Math.round(w.intervalMs / 60000)}min`,
97
- priority: w.priority === 'critical' ? output.error(w.priority) :
98
- w.priority === 'high' ? output.warning(w.priority) :
99
- output.dim(w.priority),
100
- description: w.description,
101
- })),
102
- });
103
- output.writeln();
104
- output.writeln(output.dim('Press Ctrl+C to stop daemon'));
105
- // Listen for worker events
106
- daemon.on('worker:start', ({ type }) => {
107
- output.writeln(output.dim(`[daemon] Worker starting: ${type}`));
108
- });
109
- daemon.on('worker:complete', ({ type, durationMs }) => {
110
- output.writeln(output.success(`[daemon] Worker completed: ${type} (${durationMs}ms)`));
111
- });
112
- daemon.on('worker:error', ({ type, error }) => {
113
- output.writeln(output.error(`[daemon] Worker failed: ${type} - ${error}`));
114
- });
115
- // Keep process alive
116
- await new Promise(() => { }); // Never resolves - daemon runs until killed
117
- }
118
- else {
119
- await startDaemon(projectRoot);
120
- await new Promise(() => { }); // Keep alive
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 () { });
165
+ }
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*/];
121
237
  }
122
- return { success: true };
123
- }
124
- catch (error) {
125
- output.printError(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
126
- return { success: false, exitCode: 1 };
127
- }
128
- },
238
+ });
239
+ }); }
129
240
  };
130
241
  /**
131
242
  * Validate path for security - prevents path traversal and injection
132
243
  */
133
244
  function validatePath(path, label) {
134
245
  // Must be absolute after resolution
135
- const resolved = resolve(path);
246
+ var resolved = resolve(path);
136
247
  // Check for null bytes (injection attack)
137
248
  if (path.includes('\0')) {
138
- throw new Error(`${label} contains null bytes`);
249
+ throw new Error(label + " contains null bytes");
139
250
  }
140
251
  // Check for shell metacharacters in path components
141
252
  if (/[;&|`$<>]/.test(path)) {
142
- throw new Error(`${label} contains shell metacharacters`);
253
+ throw new Error(label + " contains shell metacharacters");
143
254
  }
144
255
  // Prevent path traversal outside expected directories
145
256
  if (!resolved.includes('.claude-flow') && !resolved.includes('bin')) {
146
257
  // Allow only paths within project structure
147
- const cwd = process.cwd();
258
+ var cwd = process.cwd();
148
259
  if (!resolved.startsWith(cwd)) {
149
- throw new Error(`${label} escapes project directory`);
260
+ throw new Error(label + " escapes project directory");
150
261
  }
151
262
  }
152
263
  }
153
264
  /**
154
265
  * Start daemon as a detached background process
155
266
  */
156
- async function startBackgroundDaemon(projectRoot, quiet) {
157
- // Validate and resolve project root
158
- const resolvedRoot = resolve(projectRoot);
159
- validatePath(resolvedRoot, 'Project root');
160
- const stateDir = join(resolvedRoot, '.claude-flow');
161
- const pidFile = join(stateDir, 'daemon.pid');
162
- const logFile = join(stateDir, 'daemon.log');
163
- // Validate all paths
164
- validatePath(stateDir, 'State directory');
165
- validatePath(pidFile, 'PID file');
166
- validatePath(logFile, 'Log file');
167
- // Ensure state directory exists
168
- if (!fs.existsSync(stateDir)) {
169
- fs.mkdirSync(stateDir, { recursive: true });
170
- }
171
- // Get path to CLI (from dist/src/commands/daemon.js -> bin/cli.js)
172
- const __filename = fileURLToPath(import.meta.url);
173
- const __dirname = dirname(__filename);
174
- // dist/src/commands -> dist/src -> dist -> package root -> bin/cli.js
175
- const cliPath = resolve(join(__dirname, '..', '..', '..', 'bin', 'cli.js'));
176
- validatePath(cliPath, 'CLI path');
177
- // Verify CLI path exists
178
- if (!fs.existsSync(cliPath)) {
179
- output.printError(`CLI not found at: ${cliPath}`);
180
- return { success: false, exitCode: 1 };
181
- }
182
- // Use spawn with explicit arguments instead of shell string interpolation
183
- // This prevents command injection via paths
184
- const child = spawn(process.execPath, [
185
- cliPath,
186
- 'daemon', 'start', '--foreground', '--quiet'
187
- ], {
188
- cwd: resolvedRoot,
189
- detached: true,
190
- stdio: ['ignore', fs.openSync(logFile, 'a'), fs.openSync(logFile, 'a')],
191
- env: { ...process.env, CLAUDE_FLOW_DAEMON: '1' },
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
+ });
192
332
  });
193
- // Get PID from spawned process directly (no shell echo needed)
194
- const pid = child.pid;
195
- if (!pid || pid <= 0) {
196
- output.printError('Failed to get daemon PID');
197
- return { success: false, exitCode: 1 };
198
- }
199
- // Save PID
200
- fs.writeFileSync(pidFile, String(pid));
201
- if (!quiet) {
202
- output.printSuccess(`Daemon started in background (PID: ${pid})`);
203
- output.printInfo(`Logs: ${logFile}`);
204
- output.printInfo(`Stop with: claude-flow daemon stop`);
205
- }
206
- // Unref so parent can exit immediately
207
- child.unref();
208
- return { success: true };
209
333
  }
210
334
  // Stop daemon subcommand
211
- const stopCommand = {
335
+ var stopCommand = {
212
336
  name: 'stop',
213
337
  description: 'Stop the worker daemon and all background workers',
214
338
  options: [
@@ -217,93 +341,121 @@ const stopCommand = {
217
341
  examples: [
218
342
  { command: 'claude-flow daemon stop', description: 'Stop the daemon' },
219
343
  ],
220
- action: async (ctx) => {
221
- const quiet = ctx.flags.quiet;
222
- const projectRoot = process.cwd();
223
- try {
224
- if (!quiet) {
225
- const spinner = output.createSpinner({ text: 'Stopping worker daemon...', spinner: 'dots' });
226
- spinner.start();
227
- // Try to stop in-process daemon first
228
- await stopDaemon();
229
- // Also kill any background daemon by PID
230
- const killed = await killBackgroundDaemon(projectRoot);
231
- spinner.succeed(killed ? 'Worker daemon stopped' : 'Worker daemon was not running');
232
- }
233
- else {
234
- await stopDaemon();
235
- await killBackgroundDaemon(projectRoot);
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*/];
236
380
  }
237
- return { success: true };
238
- }
239
- catch (error) {
240
- output.printError(`Failed to stop daemon: ${error instanceof Error ? error.message : String(error)}`);
241
- return { success: false, exitCode: 1 };
242
- }
243
- },
381
+ });
382
+ }); }
244
383
  };
245
384
  /**
246
385
  * Kill background daemon process using PID file
247
386
  */
248
- async function killBackgroundDaemon(projectRoot) {
249
- const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
250
- if (!fs.existsSync(pidFile)) {
251
- return false;
252
- }
253
- try {
254
- const pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
255
- if (isNaN(pid)) {
256
- fs.unlinkSync(pidFile);
257
- return false;
258
- }
259
- // Check if process is running
260
- try {
261
- process.kill(pid, 0); // Signal 0 = check if alive
262
- }
263
- catch {
264
- // Process not running, clean up stale PID file
265
- fs.unlinkSync(pidFile);
266
- return false;
267
- }
268
- // Kill the process
269
- process.kill(pid, 'SIGTERM');
270
- // Wait a moment then force kill if needed
271
- await new Promise(resolve => setTimeout(resolve, 1000));
272
- try {
273
- process.kill(pid, 0);
274
- // Still alive, force kill
275
- process.kill(pid, 'SIGKILL');
276
- }
277
- catch {
278
- // Process terminated
279
- }
280
- // Clean up PID file
281
- if (fs.existsSync(pidFile)) {
282
- fs.unlinkSync(pidFile);
283
- }
284
- return true;
285
- }
286
- catch (error) {
287
- // Clean up PID file on any error
288
- if (fs.existsSync(pidFile)) {
289
- fs.unlinkSync(pidFile);
290
- }
291
- return false;
292
- }
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
+ });
293
445
  }
294
446
  /**
295
447
  * Get PID of background daemon from PID file
296
448
  */
297
449
  function getBackgroundDaemonPid(projectRoot) {
298
- const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
450
+ var pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
299
451
  if (!fs.existsSync(pidFile)) {
300
452
  return null;
301
453
  }
302
454
  try {
303
- const pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
455
+ var pid = parseInt(fs.readFileSync(pidFile, 'utf-8').trim(), 10);
304
456
  return isNaN(pid) ? null : pid;
305
457
  }
306
- catch {
458
+ catch (_a) {
307
459
  return null;
308
460
  }
309
461
  }
@@ -315,12 +467,12 @@ function isProcessRunning(pid) {
315
467
  process.kill(pid, 0); // Signal 0 = check if alive
316
468
  return true;
317
469
  }
318
- catch {
470
+ catch (_a) {
319
471
  return false;
320
472
  }
321
473
  }
322
474
  // Status subcommand
323
- const statusCommand = {
475
+ var statusCommand = {
324
476
  name: 'status',
325
477
  description: 'Show daemon and worker status',
326
478
  options: [
@@ -332,107 +484,111 @@ const statusCommand = {
332
484
  { command: 'claude-flow daemon status -v', description: 'Show detailed status' },
333
485
  { command: 'claude-flow daemon status --show-modes', description: 'Show worker execution modes' },
334
486
  ],
335
- action: async (ctx) => {
336
- const verbose = ctx.flags.verbose;
337
- const showModes = ctx.flags['show-modes'];
338
- const projectRoot = process.cwd();
339
- try {
340
- const daemon = getDaemon(projectRoot);
341
- const status = daemon.getStatus();
342
- // Also check for background daemon
343
- const bgPid = getBackgroundDaemonPid(projectRoot);
344
- const bgRunning = bgPid ? isProcessRunning(bgPid) : false;
345
- const isRunning = status.running || bgRunning;
346
- const displayPid = bgPid || status.pid;
347
- output.writeln();
348
- // Daemon status box
349
- const statusIcon = isRunning ? output.success('●') : output.error('○');
350
- const statusText = isRunning ? output.success('RUNNING') : output.error('STOPPED');
351
- const mode = bgRunning ? output.dim(' (background)') : status.running ? output.dim(' (foreground)') : '';
352
- output.printBox([
353
- `Status: ${statusIcon} ${statusText}${mode}`,
354
- `PID: ${displayPid}`,
355
- status.startedAt ? `Started: ${status.startedAt.toISOString()}` : '',
356
- `Workers Enabled: ${status.config.workers.filter(w => w.enabled).length}`,
357
- `Max Concurrent: ${status.config.maxConcurrent}`,
358
- ].filter(Boolean).join('\n'), 'Worker Daemon');
359
- output.writeln();
360
- output.writeln(output.bold('Worker Status'));
361
- const workerData = status.config.workers.map(w => {
362
- const state = status.workers.get(w.type);
363
- // Check for headless mode from worker config or state
364
- const isHeadless = w.headless || state?.headless || false;
365
- const sandboxMode = w.sandbox || state?.sandbox || null;
366
- return {
367
- type: w.enabled ? output.highlight(w.type) : output.dim(w.type),
368
- enabled: w.enabled ? output.success('✓') : output.dim('○'),
369
- status: state?.isRunning ? output.warning('running') :
370
- w.enabled ? output.success('idle') : output.dim('disabled'),
371
- runs: state?.runCount ?? 0,
372
- success: state ? `${Math.round((state.successCount / Math.max(state.runCount, 1)) * 100)}%` : '-',
373
- lastRun: state?.lastRun ? formatTimeAgo(state.lastRun) : output.dim('never'),
374
- nextRun: state?.nextRun && w.enabled ? formatTimeUntil(state.nextRun) : output.dim('-'),
375
- mode: isHeadless ? output.highlight('headless') : output.dim('local'),
376
- sandbox: isHeadless ? (sandboxMode || 'strict') : output.dim('-'),
377
- };
378
- });
379
- // Build columns based on --show-modes flag
380
- const baseColumns = [
381
- { key: 'type', header: 'Worker', width: 12 },
382
- { key: 'enabled', header: 'On', width: 4 },
383
- { key: 'status', header: 'Status', width: 10 },
384
- { key: 'runs', header: 'Runs', width: 6 },
385
- { key: 'success', header: 'Success', width: 8 },
386
- { key: 'lastRun', header: 'Last Run', width: 12 },
387
- { key: 'nextRun', header: 'Next Run', width: 12 },
388
- ];
389
- const modeColumns = showModes ? [
390
- { key: 'mode', header: 'Mode', width: 10 },
391
- { key: 'sandbox', header: 'Sandbox', width: 12 },
392
- ] : [];
393
- output.printTable({
394
- columns: [...baseColumns, ...modeColumns],
395
- data: workerData,
396
- });
397
- if (verbose) {
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;
398
500
  output.writeln();
399
- output.writeln(output.bold('Worker Configuration'));
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');
513
+ 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
+ ] : [];
400
547
  output.printTable({
401
- columns: [
402
- { key: 'type', header: 'Worker', width: 12 },
403
- { key: 'interval', header: 'Interval', width: 10 },
404
- { key: 'priority', header: 'Priority', width: 10 },
405
- { key: 'avgDuration', header: 'Avg Duration', width: 12 },
406
- { key: 'description', header: 'Description', width: 30 },
407
- ],
408
- data: status.config.workers.map(w => {
409
- const state = status.workers.get(w.type);
410
- return {
411
- type: w.type,
412
- interval: `${Math.round(w.intervalMs / 60000)}min`,
413
- priority: w.priority,
414
- avgDuration: state?.averageDurationMs ? `${Math.round(state.averageDurationMs)}ms` : '-',
415
- description: w.description,
416
- };
417
- }),
548
+ columns: __spreadArray(__spreadArray([], baseColumns, true), modeColumns, true),
549
+ data: workerData
418
550
  });
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 }];
419
575
  }
420
- return { success: true, data: status };
421
- }
422
- catch (error) {
423
- // Daemon not initialized
424
- output.writeln();
425
- output.printBox([
426
- `Status: ${output.error('○')} ${output.error('NOT INITIALIZED')}`,
427
- '',
428
- 'Run "claude-flow daemon start" to start the daemon',
429
- ].join('\n'), 'Worker Daemon');
430
- return { success: true };
431
- }
432
- },
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
+ }); }
433
589
  };
434
590
  // Trigger subcommand - manually run a worker
435
- const triggerCommand = {
591
+ var triggerCommand = {
436
592
  name: 'trigger',
437
593
  description: 'Manually trigger a specific worker',
438
594
  options: [
@@ -444,40 +600,50 @@ const triggerCommand = {
444
600
  { command: 'claude-flow daemon trigger -w audit', description: 'Trigger security audit' },
445
601
  { command: 'claude-flow daemon trigger -w audit --headless', description: 'Trigger audit in headless sandbox' },
446
602
  ],
447
- action: async (ctx) => {
448
- const workerType = ctx.flags.worker;
449
- if (!workerType) {
450
- output.printError('Worker type is required. Use --worker or -w flag.');
451
- output.writeln();
452
- output.writeln('Available workers: map, audit, optimize, consolidate, testgaps, predict, document, ultralearn, refactor, benchmark, deepdive, preload');
453
- return { success: false, exitCode: 1 };
454
- }
455
- try {
456
- const daemon = getDaemon(process.cwd());
457
- const spinner = output.createSpinner({ text: `Running ${workerType} worker...`, spinner: 'dots' });
458
- spinner.start();
459
- const result = await daemon.triggerWorker(workerType);
460
- if (result.success) {
461
- spinner.succeed(`Worker ${workerType} completed in ${result.durationMs}ms`);
462
- if (result.output) {
463
- output.writeln();
464
- output.writeln(output.bold('Output'));
465
- output.printJson(result.output);
466
- }
467
- }
468
- else {
469
- spinner.fail(`Worker ${workerType} failed: ${result.error}`);
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*/];
470
641
  }
471
- return { success: result.success, data: result };
472
- }
473
- catch (error) {
474
- output.printError(`Failed to trigger worker: ${error instanceof Error ? error.message : String(error)}`);
475
- return { success: false, exitCode: 1 };
476
- }
477
- },
642
+ });
643
+ }); }
478
644
  };
479
645
  // Enable/disable worker subcommand
480
- const enableCommand = {
646
+ var enableCommand = {
481
647
  name: 'enable',
482
648
  description: 'Enable or disable a specific worker',
483
649
  options: [
@@ -488,50 +654,54 @@ const enableCommand = {
488
654
  { command: 'claude-flow daemon enable -w predict', description: 'Enable predict worker' },
489
655
  { command: 'claude-flow daemon enable -w document --disable', description: 'Disable document worker' },
490
656
  ],
491
- action: async (ctx) => {
492
- const workerType = ctx.flags.worker;
493
- const disable = ctx.flags.disable;
494
- if (!workerType) {
495
- output.printError('Worker type is required. Use --worker or -w flag.');
496
- return { success: false, exitCode: 1 };
497
- }
498
- try {
499
- const daemon = getDaemon(process.cwd());
500
- daemon.setWorkerEnabled(workerType, !disable);
501
- output.printSuccess(`Worker ${workerType} ${disable ? 'disabled' : 'enabled'}`);
502
- return { success: true };
503
- }
504
- catch (error) {
505
- output.printError(`Failed to ${disable ? 'disable' : 'enable'} worker: ${error instanceof Error ? error.message : String(error)}`);
506
- return { success: false, exitCode: 1 };
507
- }
508
- },
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
+ }); }
509
679
  };
510
680
  // Helper functions for time formatting
511
681
  function formatTimeAgo(date) {
512
- const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
682
+ var seconds = Math.floor((Date.now() - date.getTime()) / 1000);
513
683
  if (seconds < 60)
514
- return `${seconds}s ago`;
684
+ return seconds + "s ago";
515
685
  if (seconds < 3600)
516
- return `${Math.floor(seconds / 60)}m ago`;
686
+ return Math.floor(seconds / 60) + "m ago";
517
687
  if (seconds < 86400)
518
- return `${Math.floor(seconds / 3600)}h ago`;
519
- return `${Math.floor(seconds / 86400)}d ago`;
688
+ return Math.floor(seconds / 3600) + "h ago";
689
+ return Math.floor(seconds / 86400) + "d ago";
520
690
  }
521
691
  function formatTimeUntil(date) {
522
- const seconds = Math.floor((date.getTime() - Date.now()) / 1000);
692
+ var seconds = Math.floor((date.getTime() - Date.now()) / 1000);
523
693
  if (seconds < 0)
524
694
  return 'now';
525
695
  if (seconds < 60)
526
- return `in ${seconds}s`;
696
+ return "in " + seconds + "s";
527
697
  if (seconds < 3600)
528
- return `in ${Math.floor(seconds / 60)}m`;
698
+ return "in " + Math.floor(seconds / 60) + "m";
529
699
  if (seconds < 86400)
530
- return `in ${Math.floor(seconds / 3600)}h`;
531
- return `in ${Math.floor(seconds / 86400)}d`;
700
+ return "in " + Math.floor(seconds / 3600) + "h";
701
+ return "in " + Math.floor(seconds / 86400) + "d";
532
702
  }
533
703
  // Main daemon command
534
- export const daemonCommand = {
704
+ export var daemonCommand = {
535
705
  name: 'daemon',
536
706
  description: 'Manage background worker daemon (Node.js-based, auto-runs like shell helpers)',
537
707
  subcommands: [
@@ -549,45 +719,47 @@ export const daemonCommand = {
549
719
  { command: 'claude-flow daemon stop', description: 'Stop the daemon' },
550
720
  { command: 'claude-flow daemon trigger -w audit', description: 'Run security audit' },
551
721
  ],
552
- action: async () => {
553
- output.writeln();
554
- output.writeln(output.bold('Worker Daemon - Background Task Management'));
555
- output.writeln();
556
- output.writeln('Node.js-based background worker system that auto-runs like shell daemons.');
557
- output.writeln('Manages 12 specialized workers for continuous optimization and monitoring.');
558
- output.writeln();
559
- output.writeln(output.bold('Headless Mode'));
560
- output.writeln('Workers can run in headless mode using E2B sandboxes for isolated execution.');
561
- output.writeln('Use --headless flag with start/trigger commands. Sandbox modes: strict, permissive, disabled.');
562
- output.writeln();
563
- output.writeln(output.bold('Available Workers'));
564
- output.printList([
565
- `${output.highlight('map')} - Codebase mapping (5 min interval)`,
566
- `${output.highlight('audit')} - Security analysis (10 min interval)`,
567
- `${output.highlight('optimize')} - Performance optimization (15 min interval)`,
568
- `${output.highlight('consolidate')} - Memory consolidation (30 min interval)`,
569
- `${output.highlight('testgaps')} - Test coverage analysis (20 min interval)`,
570
- `${output.highlight('predict')} - Predictive preloading (2 min, disabled by default)`,
571
- `${output.highlight('document')} - Auto-documentation (60 min, disabled by default)`,
572
- `${output.highlight('ultralearn')} - Deep knowledge acquisition (manual trigger)`,
573
- `${output.highlight('refactor')} - Code refactoring suggestions (manual trigger)`,
574
- `${output.highlight('benchmark')} - Performance benchmarking (manual trigger)`,
575
- `${output.highlight('deepdive')} - Deep code analysis (manual trigger)`,
576
- `${output.highlight('preload')} - Resource preloading (manual trigger)`,
577
- ]);
578
- output.writeln();
579
- output.writeln(output.bold('Subcommands'));
580
- output.printList([
581
- `${output.highlight('start')} - Start the daemon`,
582
- `${output.highlight('stop')} - Stop the daemon`,
583
- `${output.highlight('status')} - Show daemon status`,
584
- `${output.highlight('trigger')} - Manually run a worker`,
585
- `${output.highlight('enable')} - Enable/disable a worker`,
586
- ]);
587
- output.writeln();
588
- output.writeln('Run "claude-flow daemon <subcommand> --help" for details');
589
- return { success: true };
590
- },
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
+ }); }
591
763
  };
592
764
  export default daemonCommand;
593
765
  //# sourceMappingURL=daemon.js.map