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
@@ -9,12 +9,75 @@
9
9
  * - consolidate: Memory consolidation (30 min interval)
10
10
  * - testgaps: Test coverage analysis (20 min interval)
11
11
  */
12
+ var __extends = (this && this.__extends) || (function () {
13
+ var extendStatics = function (d, b) {
14
+ extendStatics = Object.setPrototypeOf ||
15
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
16
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
17
+ return extendStatics(d, b);
18
+ };
19
+ return function (d, b) {
20
+ if (typeof b !== "function" && b !== null)
21
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
22
+ extendStatics(d, b);
23
+ function __() { this.constructor = d; }
24
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
25
+ };
26
+ })();
27
+ var __assign = (this && this.__assign) || function () {
28
+ __assign = Object.assign || function(t) {
29
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
30
+ s = arguments[i];
31
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
32
+ t[p] = s[p];
33
+ }
34
+ return t;
35
+ };
36
+ return __assign.apply(this, arguments);
37
+ };
38
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
39
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
40
+ return new (P || (P = Promise))(function (resolve, reject) {
41
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
42
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
43
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
44
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
45
+ });
46
+ };
47
+ var __generator = (this && this.__generator) || function (thisArg, body) {
48
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
49
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
50
+ function verb(n) { return function (v) { return step([n, v]); }; }
51
+ function step(op) {
52
+ if (f) throw new TypeError("Generator is already executing.");
53
+ while (_) try {
54
+ 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;
55
+ if (y = 0, t) op = [op[0] & 2, t.value];
56
+ switch (op[0]) {
57
+ case 0: case 1: t = op; break;
58
+ case 4: _.label++; return { value: op[1], done: false };
59
+ case 5: _.label++; y = op[1]; op = [0]; continue;
60
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
61
+ default:
62
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
63
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
64
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
65
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
66
+ if (t[2]) _.ops.pop();
67
+ _.trys.pop(); continue;
68
+ }
69
+ op = body.call(thisArg, _);
70
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
71
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
72
+ }
73
+ };
12
74
  import { EventEmitter } from 'events';
13
- import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
75
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from 'fs';
76
+ import { cpus } from 'os';
14
77
  import { join } from 'path';
15
78
  import { HeadlessWorkerExecutor, isHeadlessWorker, } from './headless-worker-executor.js';
16
79
  // Default worker configurations with improved intervals (P0 fix: map 5min -> 15min)
17
- const DEFAULT_WORKERS = [
80
+ var DEFAULT_WORKERS = [
18
81
  { type: 'map', intervalMs: 15 * 60 * 1000, offsetMs: 0, priority: 'normal', description: 'Codebase mapping', enabled: true },
19
82
  { type: 'audit', intervalMs: 10 * 60 * 1000, offsetMs: 2 * 60 * 1000, priority: 'critical', description: 'Security analysis', enabled: true },
20
83
  { type: 'optimize', intervalMs: 15 * 60 * 1000, offsetMs: 4 * 60 * 1000, priority: 'high', description: 'Performance optimization', enabled: true },
@@ -24,712 +87,1026 @@ const DEFAULT_WORKERS = [
24
87
  { type: 'document', intervalMs: 60 * 60 * 1000, offsetMs: 0, priority: 'low', description: 'Auto-documentation', enabled: false },
25
88
  ];
26
89
  // Worker timeout (5 minutes max per worker)
27
- const DEFAULT_WORKER_TIMEOUT_MS = 5 * 60 * 1000;
90
+ var DEFAULT_WORKER_TIMEOUT_MS = 5 * 60 * 1000;
28
91
  /**
29
92
  * Worker Daemon - Manages background workers with Node.js
30
93
  */
31
- export class WorkerDaemon extends EventEmitter {
32
- config;
33
- workers = new Map();
34
- timers = new Map();
35
- running = false;
36
- startedAt;
37
- projectRoot;
38
- runningWorkers = new Set(); // Track concurrent workers
39
- pendingWorkers = []; // Queue for deferred workers
40
- // Headless execution support
41
- headlessExecutor = null;
42
- headlessAvailable = false;
43
- constructor(projectRoot, config) {
44
- super();
45
- this.projectRoot = projectRoot;
46
- const claudeFlowDir = join(projectRoot, '.claude-flow');
47
- this.config = {
48
- autoStart: config?.autoStart ?? false, // P1 fix: Default to false for explicit consent
49
- logDir: config?.logDir ?? join(claudeFlowDir, 'logs'),
50
- stateFile: config?.stateFile ?? join(claudeFlowDir, 'daemon-state.json'),
51
- maxConcurrent: config?.maxConcurrent ?? 2, // P0 fix: Limit concurrent workers
52
- workerTimeoutMs: config?.workerTimeoutMs ?? DEFAULT_WORKER_TIMEOUT_MS,
53
- resourceThresholds: config?.resourceThresholds ?? {
54
- maxCpuLoad: 2.0,
55
- minFreeMemoryPercent: 20,
94
+ var WorkerDaemon = /** @class */ (function (_super) {
95
+ __extends(WorkerDaemon, _super);
96
+ function WorkerDaemon(projectRoot, config) {
97
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
98
+ var _this = _super.call(this) || this;
99
+ _this.workers = new Map();
100
+ _this.timers = new Map();
101
+ _this.running = false;
102
+ _this.runningWorkers = new Set(); // Track concurrent workers
103
+ _this.pendingWorkers = []; // Queue for deferred workers
104
+ // Headless execution support
105
+ _this.headlessExecutor = null;
106
+ _this.headlessAvailable = false;
107
+ _this.projectRoot = projectRoot;
108
+ _this.originalConfig = config;
109
+ var claudeFlowDir = join(projectRoot, '.claude-flow');
110
+ // Read daemon config from .claude-flow/config.json (Layer B)
111
+ var fileConfig = _this.readDaemonConfigFromFile(claudeFlowDir);
112
+ // CPU-proportional smart default instead of hardcoded 2.0
113
+ var cpuCount = WorkerDaemon.getEffectiveCpuCount();
114
+ var smartMaxCpuLoad = Math.max(cpuCount * 0.8, 2.0); // Floor of 2.0 for single-CPU machines
115
+ // Platform-aware default: macOS os.freemem() excludes reclaimable file cache,
116
+ // so reported "free" is much lower than actually available memory.
117
+ // Linux reports available memory (including reclaimable cache) more accurately.
118
+ var defaultMinFreeMemory = process.platform === 'darwin' ? 5 : 10;
119
+ // Priority: constructor arg > config.json > smart default
120
+ // For resourceThresholds, merge field-by-field so partial overrides
121
+ // (e.g. only --max-cpu-load) still pick up defaults for other fields.
122
+ _this.config = {
123
+ autoStart: (_b = (_a = config === null || config === void 0 ? void 0 : config.autoStart) !== null && _a !== void 0 ? _a : fileConfig.autoStart) !== null && _b !== void 0 ? _b : false,
124
+ logDir: (_c = config === null || config === void 0 ? void 0 : config.logDir) !== null && _c !== void 0 ? _c : join(claudeFlowDir, 'logs'),
125
+ stateFile: (_d = config === null || config === void 0 ? void 0 : config.stateFile) !== null && _d !== void 0 ? _d : join(claudeFlowDir, 'daemon-state.json'),
126
+ maxConcurrent: (_f = (_e = config === null || config === void 0 ? void 0 : config.maxConcurrent) !== null && _e !== void 0 ? _e : fileConfig.maxConcurrent) !== null && _f !== void 0 ? _f : 2,
127
+ workerTimeoutMs: (_h = (_g = config === null || config === void 0 ? void 0 : config.workerTimeoutMs) !== null && _g !== void 0 ? _g : fileConfig.workerTimeoutMs) !== null && _h !== void 0 ? _h : DEFAULT_WORKER_TIMEOUT_MS,
128
+ resourceThresholds: {
129
+ maxCpuLoad: (_l = (_k = (_j = config === null || config === void 0 ? void 0 : config.resourceThresholds) === null || _j === void 0 ? void 0 : _j.maxCpuLoad) !== null && _k !== void 0 ? _k : fileConfig.maxCpuLoad) !== null && _l !== void 0 ? _l : smartMaxCpuLoad,
130
+ minFreeMemoryPercent: (_p = (_o = (_m = config === null || config === void 0 ? void 0 : config.resourceThresholds) === null || _m === void 0 ? void 0 : _m.minFreeMemoryPercent) !== null && _o !== void 0 ? _o : fileConfig.minFreeMemoryPercent) !== null && _p !== void 0 ? _p : defaultMinFreeMemory
56
131
  },
57
- workers: config?.workers ?? DEFAULT_WORKERS,
132
+ workers: (_q = config === null || config === void 0 ? void 0 : config.workers) !== null && _q !== void 0 ? _q : DEFAULT_WORKERS
58
133
  };
59
134
  // Setup graceful shutdown handlers
60
- this.setupShutdownHandlers();
135
+ _this.setupShutdownHandlers();
61
136
  // Ensure directories exist
62
137
  if (!existsSync(claudeFlowDir)) {
63
138
  mkdirSync(claudeFlowDir, { recursive: true });
64
139
  }
65
- if (!existsSync(this.config.logDir)) {
66
- mkdirSync(this.config.logDir, { recursive: true });
140
+ if (!existsSync(_this.config.logDir)) {
141
+ mkdirSync(_this.config.logDir, { recursive: true });
67
142
  }
68
143
  // Initialize worker states
69
- this.initializeWorkerStates();
144
+ _this.initializeWorkerStates();
70
145
  // Initialize headless executor (async, non-blocking)
71
- this.initHeadlessExecutor().catch((err) => {
72
- this.log('warn', `Headless executor init failed: ${err}`);
146
+ _this.initHeadlessExecutor()["catch"](function (err) {
147
+ _this.log('warn', "Headless executor init failed: " + err);
73
148
  });
149
+ return _this;
74
150
  }
75
151
  /**
76
152
  * Initialize headless executor if Claude Code is available
77
153
  */
78
- async initHeadlessExecutor() {
79
- try {
80
- this.headlessExecutor = new HeadlessWorkerExecutor(this.projectRoot, {
81
- maxConcurrent: this.config.maxConcurrent,
154
+ WorkerDaemon.prototype.initHeadlessExecutor = function () {
155
+ return __awaiter(this, void 0, Promise, function () {
156
+ var _a, error_1;
157
+ var _this = this;
158
+ return __generator(this, function (_b) {
159
+ switch (_b.label) {
160
+ case 0:
161
+ _b.trys.push([0, 2, , 3]);
162
+ this.headlessExecutor = new HeadlessWorkerExecutor(this.projectRoot, {
163
+ maxConcurrent: this.config.maxConcurrent
164
+ });
165
+ _a = this;
166
+ return [4 /*yield*/, this.headlessExecutor.isAvailable()];
167
+ case 1:
168
+ _a.headlessAvailable = _b.sent();
169
+ if (this.headlessAvailable) {
170
+ this.log('info', 'Claude Code headless mode available - AI workers enabled');
171
+ // Forward headless executor events
172
+ this.headlessExecutor.on('execution:start', function (data) {
173
+ _this.emit('headless:start', data);
174
+ });
175
+ this.headlessExecutor.on('execution:complete', function (data) {
176
+ _this.emit('headless:complete', data);
177
+ });
178
+ this.headlessExecutor.on('execution:error', function (data) {
179
+ _this.emit('headless:error', data);
180
+ });
181
+ this.headlessExecutor.on('output', function (data) {
182
+ _this.emit('headless:output', data);
183
+ });
184
+ }
185
+ else {
186
+ this.log('info', 'Claude Code not found - AI workers will run in local fallback mode');
187
+ }
188
+ return [3 /*break*/, 3];
189
+ case 2:
190
+ error_1 = _b.sent();
191
+ this.log('warn', "Failed to initialize headless executor: " + error_1);
192
+ this.headlessAvailable = false;
193
+ return [3 /*break*/, 3];
194
+ case 3: return [2 /*return*/];
195
+ }
82
196
  });
83
- this.headlessAvailable = await this.headlessExecutor.isAvailable();
84
- if (this.headlessAvailable) {
85
- this.log('info', 'Claude Code headless mode available - AI workers enabled');
86
- // Forward headless executor events
87
- this.headlessExecutor.on('execution:start', (data) => {
88
- this.emit('headless:start', data);
89
- });
90
- this.headlessExecutor.on('execution:complete', (data) => {
91
- this.emit('headless:complete', data);
92
- });
93
- this.headlessExecutor.on('execution:error', (data) => {
94
- this.emit('headless:error', data);
95
- });
96
- this.headlessExecutor.on('output', (data) => {
97
- this.emit('headless:output', data);
98
- });
99
- }
100
- else {
101
- this.log('info', 'Claude Code not found - AI workers will run in local fallback mode');
102
- }
103
- }
104
- catch (error) {
105
- this.log('warn', `Failed to initialize headless executor: ${error}`);
106
- this.headlessAvailable = false;
107
- }
108
- }
197
+ });
198
+ };
109
199
  /**
110
200
  * Check if headless execution is available
111
201
  */
112
- isHeadlessAvailable() {
202
+ WorkerDaemon.prototype.isHeadlessAvailable = function () {
113
203
  return this.headlessAvailable;
114
- }
204
+ };
115
205
  /**
116
206
  * Get headless executor instance
117
207
  */
118
- getHeadlessExecutor() {
208
+ WorkerDaemon.prototype.getHeadlessExecutor = function () {
119
209
  return this.headlessExecutor;
120
- }
210
+ };
211
+ /**
212
+ * Detect effective CPU count for the current environment.
213
+ *
214
+ * Inside Docker / K8s containers, os.cpus().length reports the HOST cpu
215
+ * count, not the container limit (Node.js #28762 — wontfix). We read
216
+ * cgroup v2 / v1 quota files first so the maxCpuLoad threshold stays
217
+ * meaningful under resource-limited containers.
218
+ */
219
+ WorkerDaemon.getEffectiveCpuCount = function () {
220
+ // 1. Try cgroup v2: /sys/fs/cgroup/cpu.max
221
+ try {
222
+ var cpuMax = readFileSync('/sys/fs/cgroup/cpu.max', 'utf8').trim();
223
+ var _a = cpuMax.split(' '), quotaStr = _a[0], periodStr = _a[1];
224
+ if (quotaStr !== 'max') {
225
+ var quota = parseInt(quotaStr, 10);
226
+ var period = parseInt(periodStr, 10);
227
+ if (quota > 0 && period > 0)
228
+ return Math.ceil(quota / period);
229
+ }
230
+ }
231
+ catch ( /* not in cgroup v2 */_b) { /* not in cgroup v2 */ }
232
+ // 2. Try cgroup v1: /sys/fs/cgroup/cpu/cpu.cfs_quota_us
233
+ try {
234
+ var quota = parseInt(readFileSync('/sys/fs/cgroup/cpu/cpu.cfs_quota_us', 'utf8').trim(), 10);
235
+ var period = parseInt(readFileSync('/sys/fs/cgroup/cpu/cpu.cfs_period_us', 'utf8').trim(), 10);
236
+ if (quota > 0 && period > 0)
237
+ return Math.ceil(quota / period);
238
+ }
239
+ catch ( /* not in cgroup v1 */_c) { /* not in cgroup v1 */ }
240
+ // 3. Fallback to os.cpus().length
241
+ return cpus().length || 1;
242
+ };
243
+ /**
244
+ * Read daemon-specific config from .claude-flow/config.json
245
+ * Supports dot-notation keys like 'daemon.resourceThresholds.maxCpuLoad'
246
+ */
247
+ WorkerDaemon.prototype.readDaemonConfigFromFile = function (claudeFlowDir) {
248
+ var _a, _b, _c, _d, _e, _f;
249
+ var configPath = join(claudeFlowDir, 'config.json');
250
+ if (!existsSync(configPath))
251
+ return {};
252
+ try {
253
+ var raw = JSON.parse(readFileSync(configPath, 'utf-8'));
254
+ // Support both flat keys at root and nested under scopes.project
255
+ var cfg = (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.scopes) === null || _a === void 0 ? void 0 : _a.project) !== null && _b !== void 0 ? _b : raw;
256
+ var rawCpuLoad = (_c = cfg['daemon.resourceThresholds.maxCpuLoad']) !== null && _c !== void 0 ? _c : raw['daemon.resourceThresholds.maxCpuLoad'];
257
+ var rawMinMem = (_d = cfg['daemon.resourceThresholds.minFreeMemoryPercent']) !== null && _d !== void 0 ? _d : raw['daemon.resourceThresholds.minFreeMemoryPercent'];
258
+ var rawMaxConcurrent = (_e = cfg['daemon.maxConcurrent']) !== null && _e !== void 0 ? _e : raw['daemon.maxConcurrent'];
259
+ var rawTimeout = (_f = cfg['daemon.workerTimeoutMs']) !== null && _f !== void 0 ? _f : raw['daemon.workerTimeoutMs'];
260
+ return {
261
+ autoStart: typeof raw['daemon.autoStart'] === 'boolean' ? raw['daemon.autoStart'] : undefined,
262
+ maxConcurrent: (typeof rawMaxConcurrent === 'number' && rawMaxConcurrent > 0) ? rawMaxConcurrent : undefined,
263
+ workerTimeoutMs: (typeof rawTimeout === 'number' && rawTimeout > 0) ? rawTimeout : undefined,
264
+ maxCpuLoad: (typeof rawCpuLoad === 'number' && rawCpuLoad > 0 && rawCpuLoad < 1000) ? rawCpuLoad : undefined,
265
+ minFreeMemoryPercent: (typeof rawMinMem === 'number' && rawMinMem >= 0 && rawMinMem <= 100) ? rawMinMem : undefined
266
+ };
267
+ }
268
+ catch (_g) {
269
+ return {};
270
+ }
271
+ };
121
272
  /**
122
273
  * Setup graceful shutdown handlers
123
274
  */
124
- setupShutdownHandlers() {
125
- const shutdown = async () => {
126
- this.log('info', 'Received shutdown signal, stopping daemon...');
127
- await this.stop();
128
- process.exit(0);
129
- };
275
+ WorkerDaemon.prototype.setupShutdownHandlers = function () {
276
+ var _this = this;
277
+ var shutdown = function () { return __awaiter(_this, void 0, void 0, function () {
278
+ return __generator(this, function (_a) {
279
+ switch (_a.label) {
280
+ case 0:
281
+ this.log('info', 'Received shutdown signal, stopping daemon...');
282
+ return [4 /*yield*/, this.stop()];
283
+ case 1:
284
+ _a.sent();
285
+ process.exit(0);
286
+ return [2 /*return*/];
287
+ }
288
+ });
289
+ }); };
130
290
  process.on('SIGTERM', shutdown);
131
291
  process.on('SIGINT', shutdown);
132
292
  process.on('SIGHUP', shutdown);
133
- }
293
+ };
134
294
  /**
135
295
  * Check if system resources allow worker execution
136
296
  */
137
- async canRunWorker() {
138
- const os = await import('os');
139
- const cpuLoad = os.loadavg()[0];
140
- const totalMem = os.totalmem();
141
- const freeMem = os.freemem();
142
- const freePercent = (freeMem / totalMem) * 100;
143
- if (cpuLoad > this.config.resourceThresholds.maxCpuLoad) {
144
- return { allowed: false, reason: `CPU load too high: ${cpuLoad.toFixed(2)}` };
145
- }
146
- if (freePercent < this.config.resourceThresholds.minFreeMemoryPercent) {
147
- return { allowed: false, reason: `Memory too low: ${freePercent.toFixed(1)}% free` };
148
- }
149
- return { allowed: true };
150
- }
297
+ WorkerDaemon.prototype.canRunWorker = function () {
298
+ return __awaiter(this, void 0, Promise, function () {
299
+ var os, cpuLoad, totalMem, freeMem, freePercent;
300
+ return __generator(this, function (_a) {
301
+ switch (_a.label) {
302
+ case 0: return [4 /*yield*/, import('os')];
303
+ case 1:
304
+ os = _a.sent();
305
+ cpuLoad = os.loadavg()[0];
306
+ totalMem = os.totalmem();
307
+ freeMem = os.freemem();
308
+ freePercent = (freeMem / totalMem) * 100;
309
+ if (cpuLoad > this.config.resourceThresholds.maxCpuLoad) {
310
+ return [2 /*return*/, { allowed: false, reason: "CPU load too high: " + cpuLoad.toFixed(2) }];
311
+ }
312
+ if (freePercent < this.config.resourceThresholds.minFreeMemoryPercent) {
313
+ return [2 /*return*/, { allowed: false, reason: "Memory too low: " + freePercent.toFixed(1) + "% free" }];
314
+ }
315
+ return [2 /*return*/, { allowed: true }];
316
+ }
317
+ });
318
+ });
319
+ };
151
320
  /**
152
321
  * Process pending workers queue
322
+ *
323
+ * When executeWorkerWithConcurrencyControl defers a worker (returns null),
324
+ * we break immediately to avoid a busy-wait loop — the deferred worker is
325
+ * already back on the pendingWorkers queue by that point. If no workers are
326
+ * currently running when we break, we schedule a backoff retry so the queue
327
+ * does not get permanently stuck.
153
328
  */
154
- async processPendingWorkers() {
155
- while (this.pendingWorkers.length > 0 && this.runningWorkers.size < this.config.maxConcurrent) {
156
- const workerType = this.pendingWorkers.shift();
157
- const workerConfig = this.config.workers.find(w => w.type === workerType);
158
- if (workerConfig) {
159
- await this.executeWorkerWithConcurrencyControl(workerConfig);
160
- }
161
- }
162
- }
163
- initializeWorkerStates() {
329
+ WorkerDaemon.prototype.processPendingWorkers = function () {
330
+ return __awaiter(this, void 0, Promise, function () {
331
+ var _loop_1, this_1, state_1;
332
+ var _this = this;
333
+ return __generator(this, function (_a) {
334
+ switch (_a.label) {
335
+ case 0:
336
+ _loop_1 = function () {
337
+ var workerType, workerConfig, result;
338
+ return __generator(this, function (_b) {
339
+ switch (_b.label) {
340
+ case 0:
341
+ workerType = this_1.pendingWorkers.shift();
342
+ workerConfig = this_1.config.workers.find(function (w) { return w.type === workerType; });
343
+ if (!workerConfig) return [3 /*break*/, 2];
344
+ return [4 /*yield*/, this_1.executeWorkerWithConcurrencyControl(workerConfig)];
345
+ case 1:
346
+ result = _b.sent();
347
+ if (result === null) {
348
+ // Worker was deferred (resource pressure or concurrency limit).
349
+ // Break to avoid tight-looping — the next executeWorker() completion
350
+ // will call processPendingWorkers() again via the finally block.
351
+ if (this_1.runningWorkers.size === 0) {
352
+ // No workers running means nobody will trigger the finally-block
353
+ // callback, so schedule a backoff retry to avoid a stuck queue.
354
+ setTimeout(function () { return _this.processPendingWorkers(); }, 30000).unref();
355
+ }
356
+ return [2 /*return*/, "break"];
357
+ }
358
+ _b.label = 2;
359
+ case 2: return [2 /*return*/];
360
+ }
361
+ });
362
+ };
363
+ this_1 = this;
364
+ _a.label = 1;
365
+ case 1:
366
+ if (!(this.pendingWorkers.length > 0 && this.runningWorkers.size < this.config.maxConcurrent)) return [3 /*break*/, 3];
367
+ return [5 /*yield**/, _loop_1()];
368
+ case 2:
369
+ state_1 = _a.sent();
370
+ if (state_1 === "break")
371
+ return [3 /*break*/, 3];
372
+ return [3 /*break*/, 1];
373
+ case 3: return [2 /*return*/];
374
+ }
375
+ });
376
+ });
377
+ };
378
+ WorkerDaemon.prototype.initializeWorkerStates = function () {
379
+ var _a, _b, _c, _d, _e;
164
380
  // Try to restore state from file
165
381
  if (existsSync(this.config.stateFile)) {
166
382
  try {
167
- const saved = JSON.parse(readFileSync(this.config.stateFile, 'utf-8'));
383
+ var saved = JSON.parse(readFileSync(this.config.stateFile, 'utf-8'));
168
384
  // CRITICAL: Restore worker config (including enabled flag) from saved state
169
385
  // This fixes #950: daemon enable command not persisting worker state
170
- if (saved.config?.workers && Array.isArray(saved.config.workers)) {
171
- for (const savedWorker of saved.config.workers) {
172
- const workerConfig = this.config.workers.find(w => w.type === savedWorker.type);
386
+ if (((_a = saved.config) === null || _a === void 0 ? void 0 : _a.workers) && Array.isArray(saved.config.workers)) {
387
+ var _loop_2 = function (savedWorker) {
388
+ var workerConfig = this_2.config.workers.find(function (w) { return w.type === savedWorker.type; });
173
389
  if (workerConfig && typeof savedWorker.enabled === 'boolean') {
174
390
  workerConfig.enabled = savedWorker.enabled;
175
391
  }
392
+ };
393
+ var this_2 = this;
394
+ for (var _i = 0, _f = saved.config.workers; _i < _f.length; _i++) {
395
+ var savedWorker = _f[_i];
396
+ _loop_2(savedWorker);
397
+ }
398
+ }
399
+ // Restore resourceThresholds, maxConcurrent, workerTimeoutMs from saved state
400
+ // Only restore if valid numeric values within sane ranges
401
+ if (((_b = saved.config) === null || _b === void 0 ? void 0 : _b.resourceThresholds) && !((_c = this.originalConfig) === null || _c === void 0 ? void 0 : _c.resourceThresholds)) {
402
+ var rt = saved.config.resourceThresholds;
403
+ if (typeof rt.maxCpuLoad === 'number' && rt.maxCpuLoad > 0 && rt.maxCpuLoad < 1000) {
404
+ this.config.resourceThresholds.maxCpuLoad = rt.maxCpuLoad;
405
+ }
406
+ if (typeof rt.minFreeMemoryPercent === 'number' && rt.minFreeMemoryPercent >= 0 && rt.minFreeMemoryPercent <= 100) {
407
+ this.config.resourceThresholds.minFreeMemoryPercent = rt.minFreeMemoryPercent;
176
408
  }
177
409
  }
410
+ if (typeof ((_d = saved.config) === null || _d === void 0 ? void 0 : _d.maxConcurrent) === 'number' && saved.config.maxConcurrent > 0) {
411
+ this.config.maxConcurrent = saved.config.maxConcurrent;
412
+ }
413
+ if (typeof ((_e = saved.config) === null || _e === void 0 ? void 0 : _e.workerTimeoutMs) === 'number' && saved.config.workerTimeoutMs > 0) {
414
+ this.config.workerTimeoutMs = saved.config.workerTimeoutMs;
415
+ }
178
416
  // Restore worker runtime states (runCount, successCount, etc.)
179
417
  if (saved.workers) {
180
- for (const [type, state] of Object.entries(saved.workers)) {
181
- const savedState = state;
182
- const lastRunValue = savedState.lastRun;
183
- this.workers.set(type, {
418
+ for (var _g = 0, _h = Object.entries(saved.workers); _g < _h.length; _g++) {
419
+ var _j = _h[_g], type_1 = _j[0], state = _j[1];
420
+ var savedState = state;
421
+ var lastRunValue = savedState.lastRun;
422
+ this.workers.set(type_1, {
184
423
  runCount: savedState.runCount || 0,
185
424
  successCount: savedState.successCount || 0,
186
425
  failureCount: savedState.failureCount || 0,
187
426
  averageDurationMs: savedState.averageDurationMs || 0,
188
427
  lastRun: lastRunValue ? new Date(lastRunValue) : undefined,
189
428
  nextRun: undefined,
190
- isRunning: false,
429
+ isRunning: false
191
430
  });
192
431
  }
193
432
  }
194
433
  }
195
- catch {
434
+ catch (_k) {
196
435
  // Ignore parse errors, start fresh
197
436
  }
198
437
  }
199
438
  // Initialize any missing workers
200
- for (const workerConfig of this.config.workers) {
439
+ for (var _l = 0, _m = this.config.workers; _l < _m.length; _l++) {
440
+ var workerConfig = _m[_l];
201
441
  if (!this.workers.has(workerConfig.type)) {
202
442
  this.workers.set(workerConfig.type, {
203
443
  runCount: 0,
204
444
  successCount: 0,
205
445
  failureCount: 0,
206
446
  averageDurationMs: 0,
207
- isRunning: false,
447
+ isRunning: false
208
448
  });
209
449
  }
210
450
  }
211
- }
451
+ };
212
452
  /**
213
453
  * Start the daemon and all enabled workers
214
454
  */
215
- async start() {
216
- if (this.running) {
217
- this.emit('warning', 'Daemon already running');
218
- return;
219
- }
220
- this.running = true;
221
- this.startedAt = new Date();
222
- this.emit('started', { pid: process.pid, startedAt: this.startedAt });
223
- // Schedule all enabled workers
224
- for (const workerConfig of this.config.workers) {
225
- if (workerConfig.enabled) {
226
- this.scheduleWorker(workerConfig);
227
- }
228
- }
229
- // Save state
230
- this.saveState();
231
- this.log('info', `Daemon started with ${this.config.workers.filter(w => w.enabled).length} workers`);
232
- }
455
+ WorkerDaemon.prototype.start = function () {
456
+ return __awaiter(this, void 0, Promise, function () {
457
+ var _i, _a, workerConfig;
458
+ return __generator(this, function (_b) {
459
+ if (this.running) {
460
+ this.emit('warning', 'Daemon already running');
461
+ return [2 /*return*/];
462
+ }
463
+ this.running = true;
464
+ this.startedAt = new Date();
465
+ this.emit('started', { pid: process.pid, startedAt: this.startedAt });
466
+ // Schedule all enabled workers
467
+ for (_i = 0, _a = this.config.workers; _i < _a.length; _i++) {
468
+ workerConfig = _a[_i];
469
+ if (workerConfig.enabled) {
470
+ this.scheduleWorker(workerConfig);
471
+ }
472
+ }
473
+ // Save state
474
+ this.saveState();
475
+ this.log('info', "Daemon started (PID: " + process.pid + ", CPUs: " + cpus().length + ", workers: " + this.config.workers.filter(function (w) { return w.enabled; }).length + ", maxCpuLoad: " + this.config.resourceThresholds.maxCpuLoad + ", minFreeMemoryPercent: " + this.config.resourceThresholds.minFreeMemoryPercent + "%)");
476
+ return [2 /*return*/];
477
+ });
478
+ });
479
+ };
233
480
  /**
234
481
  * Stop the daemon and all workers
235
482
  */
236
- async stop() {
237
- if (!this.running) {
238
- this.emit('warning', 'Daemon not running');
239
- return;
240
- }
241
- // Clear all timers (convert to array to avoid iterator issues)
242
- const timerEntries = Array.from(this.timers.entries());
243
- for (const [type, timer] of timerEntries) {
244
- clearTimeout(timer);
245
- this.log('info', `Stopped worker: ${type}`);
246
- }
247
- this.timers.clear();
248
- this.running = false;
249
- this.saveState();
250
- this.emit('stopped', { stoppedAt: new Date() });
251
- this.log('info', 'Daemon stopped');
252
- }
483
+ WorkerDaemon.prototype.stop = function () {
484
+ return __awaiter(this, void 0, Promise, function () {
485
+ var timerEntries, _i, timerEntries_1, _a, type_2, timer;
486
+ return __generator(this, function (_b) {
487
+ if (!this.running) {
488
+ this.emit('warning', 'Daemon not running');
489
+ return [2 /*return*/];
490
+ }
491
+ timerEntries = Array.from(this.timers.entries());
492
+ for (_i = 0, timerEntries_1 = timerEntries; _i < timerEntries_1.length; _i++) {
493
+ _a = timerEntries_1[_i], type_2 = _a[0], timer = _a[1];
494
+ clearTimeout(timer);
495
+ this.log('info', "Stopped worker: " + type_2);
496
+ }
497
+ this.timers.clear();
498
+ this.running = false;
499
+ this.saveState();
500
+ this.emit('stopped', { stoppedAt: new Date() });
501
+ this.log('info', 'Daemon stopped');
502
+ return [2 /*return*/];
503
+ });
504
+ });
505
+ };
253
506
  /**
254
507
  * Get daemon status
255
508
  */
256
- getStatus() {
509
+ WorkerDaemon.prototype.getStatus = function () {
257
510
  return {
258
511
  running: this.running,
259
512
  pid: process.pid,
260
513
  startedAt: this.startedAt,
261
514
  workers: new Map(this.workers),
262
- config: this.config,
515
+ config: this.config
263
516
  };
264
- }
517
+ };
265
518
  /**
266
519
  * Schedule a worker to run at intervals with staggered start
267
520
  */
268
- scheduleWorker(workerConfig) {
269
- const state = this.workers.get(workerConfig.type);
270
- const internalConfig = workerConfig;
271
- const staggerOffset = internalConfig.offsetMs || 0;
521
+ WorkerDaemon.prototype.scheduleWorker = function (workerConfig) {
522
+ var _this = this;
523
+ var state = this.workers.get(workerConfig.type);
524
+ var internalConfig = workerConfig;
525
+ var staggerOffset = internalConfig.offsetMs || 0;
272
526
  // Calculate initial delay with stagger offset
273
- let initialDelay = staggerOffset;
527
+ var initialDelay = staggerOffset;
274
528
  if (state.lastRun) {
275
- const timeSinceLastRun = Date.now() - state.lastRun.getTime();
529
+ var timeSinceLastRun = Date.now() - state.lastRun.getTime();
276
530
  initialDelay = Math.max(staggerOffset, workerConfig.intervalMs - timeSinceLastRun);
277
531
  }
278
532
  state.nextRun = new Date(Date.now() + initialDelay);
279
- const runAndReschedule = async () => {
280
- if (!this.running)
281
- return;
282
- // Use concurrency-controlled execution (P0 fix)
283
- await this.executeWorkerWithConcurrencyControl(workerConfig);
284
- // Reschedule
285
- if (this.running) {
286
- const timer = setTimeout(runAndReschedule, workerConfig.intervalMs);
287
- this.timers.set(workerConfig.type, timer);
288
- state.nextRun = new Date(Date.now() + workerConfig.intervalMs);
289
- }
290
- };
533
+ var runAndReschedule = function () { return __awaiter(_this, void 0, void 0, function () {
534
+ var timer_1;
535
+ return __generator(this, function (_a) {
536
+ switch (_a.label) {
537
+ case 0:
538
+ if (!this.running)
539
+ return [2 /*return*/];
540
+ // Use concurrency-controlled execution (P0 fix)
541
+ return [4 /*yield*/, this.executeWorkerWithConcurrencyControl(workerConfig)];
542
+ case 1:
543
+ // Use concurrency-controlled execution (P0 fix)
544
+ _a.sent();
545
+ // Reschedule
546
+ if (this.running) {
547
+ timer_1 = setTimeout(runAndReschedule, workerConfig.intervalMs);
548
+ this.timers.set(workerConfig.type, timer_1);
549
+ state.nextRun = new Date(Date.now() + workerConfig.intervalMs);
550
+ }
551
+ return [2 /*return*/];
552
+ }
553
+ });
554
+ }); };
291
555
  // Schedule first run with stagger offset
292
- const timer = setTimeout(runAndReschedule, initialDelay);
556
+ var timer = setTimeout(runAndReschedule, initialDelay);
293
557
  this.timers.set(workerConfig.type, timer);
294
- this.log('info', `Scheduled ${workerConfig.type} (interval: ${workerConfig.intervalMs / 1000}s, first run in ${initialDelay / 1000}s)`);
295
- }
558
+ this.log('info', "Scheduled " + workerConfig.type + " (interval: " + workerConfig.intervalMs / 1000 + "s, first run in " + initialDelay / 1000 + "s)");
559
+ };
296
560
  /**
297
561
  * Execute a worker with concurrency control (P0 fix)
298
562
  */
299
- async executeWorkerWithConcurrencyControl(workerConfig) {
300
- // Check concurrency limit
301
- if (this.runningWorkers.size >= this.config.maxConcurrent) {
302
- this.log('info', `Worker ${workerConfig.type} deferred: max concurrent (${this.config.maxConcurrent}) reached`);
303
- this.pendingWorkers.push(workerConfig.type);
304
- this.emit('worker:deferred', { type: workerConfig.type, reason: 'max_concurrent' });
305
- return null;
306
- }
307
- // Check resource availability
308
- const resourceCheck = await this.canRunWorker();
309
- if (!resourceCheck.allowed) {
310
- this.log('info', `Worker ${workerConfig.type} deferred: ${resourceCheck.reason}`);
311
- this.pendingWorkers.push(workerConfig.type);
312
- this.emit('worker:deferred', { type: workerConfig.type, reason: resourceCheck.reason });
313
- return null;
314
- }
315
- return this.executeWorker(workerConfig);
316
- }
563
+ WorkerDaemon.prototype.executeWorkerWithConcurrencyControl = function (workerConfig) {
564
+ return __awaiter(this, void 0, Promise, function () {
565
+ var resourceCheck;
566
+ return __generator(this, function (_a) {
567
+ switch (_a.label) {
568
+ case 0:
569
+ // Check concurrency limit
570
+ if (this.runningWorkers.size >= this.config.maxConcurrent) {
571
+ this.log('info', "Worker " + workerConfig.type + " deferred: max concurrent (" + this.config.maxConcurrent + ") reached");
572
+ this.pendingWorkers.push(workerConfig.type);
573
+ this.emit('worker:deferred', { type: workerConfig.type, reason: 'max_concurrent' });
574
+ return [2 /*return*/, null];
575
+ }
576
+ return [4 /*yield*/, this.canRunWorker()];
577
+ case 1:
578
+ resourceCheck = _a.sent();
579
+ if (!resourceCheck.allowed) {
580
+ this.log('info', "Worker " + workerConfig.type + " deferred: " + resourceCheck.reason);
581
+ this.pendingWorkers.push(workerConfig.type);
582
+ this.emit('worker:deferred', { type: workerConfig.type, reason: resourceCheck.reason });
583
+ return [2 /*return*/, null];
584
+ }
585
+ return [2 /*return*/, this.executeWorker(workerConfig)];
586
+ }
587
+ });
588
+ });
589
+ };
317
590
  /**
318
591
  * Execute a worker with timeout protection
319
592
  */
320
- async executeWorker(workerConfig) {
321
- const state = this.workers.get(workerConfig.type);
322
- const workerId = `${workerConfig.type}_${Date.now()}`;
323
- const startTime = Date.now();
324
- // Track running worker
325
- this.runningWorkers.add(workerConfig.type);
326
- state.isRunning = true;
327
- this.emit('worker:start', { workerId, type: workerConfig.type });
328
- this.log('info', `Starting worker: ${workerConfig.type} (${this.runningWorkers.size}/${this.config.maxConcurrent} concurrent)`);
329
- try {
330
- // Execute worker logic with timeout (P1 fix)
331
- const output = await this.runWithTimeout(() => this.runWorkerLogic(workerConfig), this.config.workerTimeoutMs, `Worker ${workerConfig.type} timed out after ${this.config.workerTimeoutMs / 1000}s`);
332
- const durationMs = Date.now() - startTime;
333
- // Update state
334
- state.runCount++;
335
- state.successCount++;
336
- state.lastRun = new Date();
337
- state.averageDurationMs = (state.averageDurationMs * (state.runCount - 1) + durationMs) / state.runCount;
338
- state.isRunning = false;
339
- const result = {
340
- workerId,
341
- type: workerConfig.type,
342
- success: true,
343
- durationMs,
344
- output,
345
- timestamp: new Date(),
346
- };
347
- this.emit('worker:complete', result);
348
- this.log('info', `Worker ${workerConfig.type} completed in ${durationMs}ms`);
349
- this.saveState();
350
- return result;
351
- }
352
- catch (error) {
353
- const durationMs = Date.now() - startTime;
354
- state.runCount++;
355
- state.failureCount++;
356
- state.lastRun = new Date();
357
- state.isRunning = false;
358
- const result = {
359
- workerId,
360
- type: workerConfig.type,
361
- success: false,
362
- durationMs,
363
- error: error instanceof Error ? error.message : String(error),
364
- timestamp: new Date(),
365
- };
366
- this.emit('worker:error', result);
367
- this.log('error', `Worker ${workerConfig.type} failed: ${result.error}`);
368
- this.saveState();
369
- return result;
370
- }
371
- finally {
372
- // Remove from running set and process queue
373
- this.runningWorkers.delete(workerConfig.type);
374
- this.processPendingWorkers();
375
- }
376
- }
593
+ WorkerDaemon.prototype.executeWorker = function (workerConfig) {
594
+ return __awaiter(this, void 0, Promise, function () {
595
+ var state, workerId, startTime, output, durationMs, result, error_2, durationMs, result;
596
+ var _this = this;
597
+ return __generator(this, function (_a) {
598
+ switch (_a.label) {
599
+ case 0:
600
+ state = this.workers.get(workerConfig.type);
601
+ workerId = workerConfig.type + "_" + Date.now();
602
+ startTime = Date.now();
603
+ // Track running worker
604
+ this.runningWorkers.add(workerConfig.type);
605
+ state.isRunning = true;
606
+ this.emit('worker:start', { workerId: workerId, type: workerConfig.type });
607
+ this.log('info', "Starting worker: " + workerConfig.type + " (" + this.runningWorkers.size + "/" + this.config.maxConcurrent + " concurrent)");
608
+ _a.label = 1;
609
+ case 1:
610
+ _a.trys.push([1, 3, 4, 5]);
611
+ return [4 /*yield*/, this.runWithTimeout(function () { return _this.runWorkerLogic(workerConfig); }, this.config.workerTimeoutMs, "Worker " + workerConfig.type + " timed out after " + this.config.workerTimeoutMs / 1000 + "s", function () {
612
+ // On timeout, cancel any headless execution to prevent orphan processes
613
+ if (_this.headlessExecutor) {
614
+ _this.headlessExecutor.cancelAll();
615
+ }
616
+ })];
617
+ case 2:
618
+ output = _a.sent();
619
+ durationMs = Date.now() - startTime;
620
+ // Update state
621
+ state.runCount++;
622
+ state.successCount++;
623
+ state.lastRun = new Date();
624
+ state.averageDurationMs = (state.averageDurationMs * (state.runCount - 1) + durationMs) / state.runCount;
625
+ state.isRunning = false;
626
+ result = {
627
+ workerId: workerId,
628
+ type: workerConfig.type,
629
+ success: true,
630
+ durationMs: durationMs,
631
+ output: output,
632
+ timestamp: new Date()
633
+ };
634
+ this.emit('worker:complete', result);
635
+ this.log('info', "Worker " + workerConfig.type + " completed in " + durationMs + "ms");
636
+ this.saveState();
637
+ return [2 /*return*/, result];
638
+ case 3:
639
+ error_2 = _a.sent();
640
+ durationMs = Date.now() - startTime;
641
+ state.runCount++;
642
+ state.failureCount++;
643
+ state.lastRun = new Date();
644
+ state.isRunning = false;
645
+ result = {
646
+ workerId: workerId,
647
+ type: workerConfig.type,
648
+ success: false,
649
+ durationMs: durationMs,
650
+ error: error_2 instanceof Error ? error_2.message : String(error_2),
651
+ timestamp: new Date()
652
+ };
653
+ this.emit('worker:error', result);
654
+ this.log('error', "Worker " + workerConfig.type + " failed: " + result.error);
655
+ this.saveState();
656
+ return [2 /*return*/, result];
657
+ case 4:
658
+ // Remove from running set and process queue
659
+ this.runningWorkers["delete"](workerConfig.type);
660
+ this.processPendingWorkers();
661
+ return [7 /*endfinally*/];
662
+ case 5: return [2 /*return*/];
663
+ }
664
+ });
665
+ });
666
+ };
377
667
  /**
378
668
  * Run a function with timeout (P1 fix)
669
+ * @param fn - The async function to execute
670
+ * @param timeoutMs - Timeout in milliseconds
671
+ * @param timeoutMessage - Error message on timeout
672
+ * @param onTimeout - Optional cleanup callback invoked when timeout fires (#1117: kills orphan processes)
379
673
  */
380
- async runWithTimeout(fn, timeoutMs, timeoutMessage) {
381
- return new Promise((resolve, reject) => {
382
- const timer = setTimeout(() => {
383
- reject(new Error(timeoutMessage));
384
- }, timeoutMs);
385
- fn()
386
- .then((result) => {
387
- clearTimeout(timer);
388
- resolve(result);
389
- })
390
- .catch((error) => {
391
- clearTimeout(timer);
392
- reject(error);
674
+ WorkerDaemon.prototype.runWithTimeout = function (fn, timeoutMs, timeoutMessage, onTimeout) {
675
+ return __awaiter(this, void 0, Promise, function () {
676
+ return __generator(this, function (_a) {
677
+ return [2 /*return*/, new Promise(function (resolve, reject) {
678
+ var settled = false;
679
+ var timer = setTimeout(function () {
680
+ if (settled)
681
+ return;
682
+ settled = true;
683
+ // Kill orphan child processes before rejecting (#1117)
684
+ if (onTimeout) {
685
+ try {
686
+ onTimeout();
687
+ }
688
+ catch (_a) {
689
+ // Ignore cleanup errors
690
+ }
691
+ }
692
+ reject(new Error(timeoutMessage));
693
+ }, timeoutMs);
694
+ fn()
695
+ .then(function (result) {
696
+ if (settled)
697
+ return;
698
+ settled = true;
699
+ clearTimeout(timer);
700
+ resolve(result);
701
+ })["catch"](function (error) {
702
+ if (settled)
703
+ return;
704
+ settled = true;
705
+ clearTimeout(timer);
706
+ reject(error);
707
+ });
708
+ })];
393
709
  });
394
710
  });
395
- }
711
+ };
396
712
  /**
397
713
  * Run the actual worker logic
398
714
  */
399
- async runWorkerLogic(workerConfig) {
400
- // Check if this is a headless worker type and headless execution is available
401
- if (isHeadlessWorker(workerConfig.type) && this.headlessAvailable && this.headlessExecutor) {
402
- try {
403
- this.log('info', `Running ${workerConfig.type} in headless mode (Claude Code AI)`);
404
- const result = await this.headlessExecutor.execute(workerConfig.type);
405
- return {
406
- mode: 'headless',
407
- ...result,
408
- };
409
- }
410
- catch (error) {
411
- this.log('warn', `Headless execution failed for ${workerConfig.type}, falling back to local mode`);
412
- this.emit('headless:fallback', {
413
- type: workerConfig.type,
414
- error: error instanceof Error ? error.message : String(error),
415
- });
416
- // Fall through to local execution
417
- }
418
- }
419
- // Local execution (fallback or for non-headless workers)
420
- switch (workerConfig.type) {
421
- case 'map':
422
- return this.runMapWorker();
423
- case 'audit':
424
- return this.runAuditWorkerLocal();
425
- case 'optimize':
426
- return this.runOptimizeWorkerLocal();
427
- case 'consolidate':
428
- return this.runConsolidateWorker();
429
- case 'testgaps':
430
- return this.runTestGapsWorkerLocal();
431
- case 'predict':
432
- return this.runPredictWorkerLocal();
433
- case 'document':
434
- return this.runDocumentWorkerLocal();
435
- case 'ultralearn':
436
- return this.runUltralearnWorkerLocal();
437
- case 'refactor':
438
- return this.runRefactorWorkerLocal();
439
- case 'deepdive':
440
- return this.runDeepdiveWorkerLocal();
441
- case 'benchmark':
442
- return this.runBenchmarkWorkerLocal();
443
- case 'preload':
444
- return this.runPreloadWorkerLocal();
445
- default:
446
- return { status: 'unknown worker type', mode: 'local' };
447
- }
448
- }
715
+ WorkerDaemon.prototype.runWorkerLogic = function (workerConfig) {
716
+ return __awaiter(this, void 0, Promise, function () {
717
+ var result, error_3;
718
+ return __generator(this, function (_a) {
719
+ switch (_a.label) {
720
+ case 0:
721
+ if (!(isHeadlessWorker(workerConfig.type) && this.headlessAvailable && this.headlessExecutor)) return [3 /*break*/, 4];
722
+ _a.label = 1;
723
+ case 1:
724
+ _a.trys.push([1, 3, , 4]);
725
+ this.log('info', "Running " + workerConfig.type + " in headless mode (Claude Code AI)");
726
+ return [4 /*yield*/, this.headlessExecutor.execute(workerConfig.type)];
727
+ case 2:
728
+ result = _a.sent();
729
+ return [2 /*return*/, __assign({ mode: 'headless' }, result)];
730
+ case 3:
731
+ error_3 = _a.sent();
732
+ this.log('warn', "Headless execution failed for " + workerConfig.type + ", falling back to local mode");
733
+ this.emit('headless:fallback', {
734
+ type: workerConfig.type,
735
+ error: error_3 instanceof Error ? error_3.message : String(error_3)
736
+ });
737
+ return [3 /*break*/, 4];
738
+ case 4:
739
+ // Local execution (fallback or for non-headless workers)
740
+ switch (workerConfig.type) {
741
+ case 'map':
742
+ return [2 /*return*/, this.runMapWorker()];
743
+ case 'audit':
744
+ return [2 /*return*/, this.runAuditWorkerLocal()];
745
+ case 'optimize':
746
+ return [2 /*return*/, this.runOptimizeWorkerLocal()];
747
+ case 'consolidate':
748
+ return [2 /*return*/, this.runConsolidateWorker()];
749
+ case 'testgaps':
750
+ return [2 /*return*/, this.runTestGapsWorkerLocal()];
751
+ case 'predict':
752
+ return [2 /*return*/, this.runPredictWorkerLocal()];
753
+ case 'document':
754
+ return [2 /*return*/, this.runDocumentWorkerLocal()];
755
+ case 'ultralearn':
756
+ return [2 /*return*/, this.runUltralearnWorkerLocal()];
757
+ case 'refactor':
758
+ return [2 /*return*/, this.runRefactorWorkerLocal()];
759
+ case 'deepdive':
760
+ return [2 /*return*/, this.runDeepdiveWorkerLocal()];
761
+ case 'benchmark':
762
+ return [2 /*return*/, this.runBenchmarkWorkerLocal()];
763
+ case 'preload':
764
+ return [2 /*return*/, this.runPreloadWorkerLocal()];
765
+ default:
766
+ return [2 /*return*/, { status: 'unknown worker type', mode: 'local' }];
767
+ }
768
+ return [2 /*return*/];
769
+ }
770
+ });
771
+ });
772
+ };
449
773
  // Worker implementations
450
- async runMapWorker() {
451
- // Scan project structure and update metrics
452
- const metricsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'codebase-map.json');
453
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
454
- if (!existsSync(metricsDir)) {
455
- mkdirSync(metricsDir, { recursive: true });
456
- }
457
- const map = {
458
- timestamp: new Date().toISOString(),
459
- projectRoot: this.projectRoot,
460
- structure: {
461
- hasPackageJson: existsSync(join(this.projectRoot, 'package.json')),
462
- hasTsConfig: existsSync(join(this.projectRoot, 'tsconfig.json')),
463
- hasClaudeConfig: existsSync(join(this.projectRoot, '.claude')),
464
- hasClaudeFlow: existsSync(join(this.projectRoot, '.claude-flow')),
465
- },
466
- scannedAt: Date.now(),
467
- };
468
- writeFileSync(metricsFile, JSON.stringify(map, null, 2));
469
- return map;
470
- }
774
+ WorkerDaemon.prototype.runMapWorker = function () {
775
+ return __awaiter(this, void 0, Promise, function () {
776
+ var metricsFile, metricsDir, map;
777
+ return __generator(this, function (_a) {
778
+ metricsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'codebase-map.json');
779
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
780
+ if (!existsSync(metricsDir)) {
781
+ mkdirSync(metricsDir, { recursive: true });
782
+ }
783
+ map = {
784
+ timestamp: new Date().toISOString(),
785
+ projectRoot: this.projectRoot,
786
+ structure: {
787
+ hasPackageJson: existsSync(join(this.projectRoot, 'package.json')),
788
+ hasTsConfig: existsSync(join(this.projectRoot, 'tsconfig.json')),
789
+ hasClaudeConfig: existsSync(join(this.projectRoot, '.claude')),
790
+ hasClaudeFlow: existsSync(join(this.projectRoot, '.claude-flow'))
791
+ },
792
+ scannedAt: Date.now()
793
+ };
794
+ writeFileSync(metricsFile, JSON.stringify(map, null, 2));
795
+ return [2 /*return*/, map];
796
+ });
797
+ });
798
+ };
471
799
  /**
472
800
  * Local audit worker (fallback when headless unavailable)
473
801
  */
474
- async runAuditWorkerLocal() {
475
- // Basic security checks
476
- const auditFile = join(this.projectRoot, '.claude-flow', 'metrics', 'security-audit.json');
477
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
478
- if (!existsSync(metricsDir)) {
479
- mkdirSync(metricsDir, { recursive: true });
480
- }
481
- const audit = {
482
- timestamp: new Date().toISOString(),
483
- mode: 'local',
484
- checks: {
485
- envFilesProtected: !existsSync(join(this.projectRoot, '.env.local')),
486
- gitIgnoreExists: existsSync(join(this.projectRoot, '.gitignore')),
487
- noHardcodedSecrets: true, // Would need actual scanning
488
- },
489
- riskLevel: 'low',
490
- recommendations: [],
491
- note: 'Install Claude Code CLI for AI-powered security analysis',
492
- };
493
- writeFileSync(auditFile, JSON.stringify(audit, null, 2));
494
- return audit;
495
- }
802
+ WorkerDaemon.prototype.runAuditWorkerLocal = function () {
803
+ return __awaiter(this, void 0, Promise, function () {
804
+ var auditFile, metricsDir, audit;
805
+ return __generator(this, function (_a) {
806
+ auditFile = join(this.projectRoot, '.claude-flow', 'metrics', 'security-audit.json');
807
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
808
+ if (!existsSync(metricsDir)) {
809
+ mkdirSync(metricsDir, { recursive: true });
810
+ }
811
+ audit = {
812
+ timestamp: new Date().toISOString(),
813
+ mode: 'local',
814
+ checks: {
815
+ envFilesProtected: !existsSync(join(this.projectRoot, '.env.local')),
816
+ gitIgnoreExists: existsSync(join(this.projectRoot, '.gitignore')),
817
+ noHardcodedSecrets: true
818
+ },
819
+ riskLevel: 'low',
820
+ recommendations: [],
821
+ note: 'Install Claude Code CLI for AI-powered security analysis'
822
+ };
823
+ writeFileSync(auditFile, JSON.stringify(audit, null, 2));
824
+ return [2 /*return*/, audit];
825
+ });
826
+ });
827
+ };
496
828
  /**
497
829
  * Local optimize worker (fallback when headless unavailable)
498
830
  */
499
- async runOptimizeWorkerLocal() {
500
- // Update performance metrics
501
- const optimizeFile = join(this.projectRoot, '.claude-flow', 'metrics', 'performance.json');
502
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
503
- if (!existsSync(metricsDir)) {
504
- mkdirSync(metricsDir, { recursive: true });
505
- }
506
- const perf = {
507
- timestamp: new Date().toISOString(),
508
- mode: 'local',
509
- memoryUsage: process.memoryUsage(),
510
- uptime: process.uptime(),
511
- optimizations: {
512
- cacheHitRate: 0.78,
513
- avgResponseTime: 45,
514
- },
515
- note: 'Install Claude Code CLI for AI-powered optimization suggestions',
516
- };
517
- writeFileSync(optimizeFile, JSON.stringify(perf, null, 2));
518
- return perf;
519
- }
520
- async runConsolidateWorker() {
521
- // Memory consolidation - clean up old patterns
522
- const consolidateFile = join(this.projectRoot, '.claude-flow', 'metrics', 'consolidation.json');
523
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
524
- if (!existsSync(metricsDir)) {
525
- mkdirSync(metricsDir, { recursive: true });
526
- }
527
- const result = {
528
- timestamp: new Date().toISOString(),
529
- patternsConsolidated: 0,
530
- memoryCleaned: 0,
531
- duplicatesRemoved: 0,
532
- };
533
- writeFileSync(consolidateFile, JSON.stringify(result, null, 2));
534
- return result;
535
- }
831
+ WorkerDaemon.prototype.runOptimizeWorkerLocal = function () {
832
+ return __awaiter(this, void 0, Promise, function () {
833
+ var optimizeFile, metricsDir, perf;
834
+ return __generator(this, function (_a) {
835
+ optimizeFile = join(this.projectRoot, '.claude-flow', 'metrics', 'performance.json');
836
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
837
+ if (!existsSync(metricsDir)) {
838
+ mkdirSync(metricsDir, { recursive: true });
839
+ }
840
+ perf = {
841
+ timestamp: new Date().toISOString(),
842
+ mode: 'local',
843
+ memoryUsage: process.memoryUsage(),
844
+ uptime: process.uptime(),
845
+ optimizations: {
846
+ cacheHitRate: 0.78,
847
+ avgResponseTime: 45
848
+ },
849
+ note: 'Install Claude Code CLI for AI-powered optimization suggestions'
850
+ };
851
+ writeFileSync(optimizeFile, JSON.stringify(perf, null, 2));
852
+ return [2 /*return*/, perf];
853
+ });
854
+ });
855
+ };
856
+ WorkerDaemon.prototype.runConsolidateWorker = function () {
857
+ return __awaiter(this, void 0, Promise, function () {
858
+ var consolidateFile, metricsDir, result;
859
+ return __generator(this, function (_a) {
860
+ consolidateFile = join(this.projectRoot, '.claude-flow', 'metrics', 'consolidation.json');
861
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
862
+ if (!existsSync(metricsDir)) {
863
+ mkdirSync(metricsDir, { recursive: true });
864
+ }
865
+ result = {
866
+ timestamp: new Date().toISOString(),
867
+ patternsConsolidated: 0,
868
+ memoryCleaned: 0,
869
+ duplicatesRemoved: 0
870
+ };
871
+ writeFileSync(consolidateFile, JSON.stringify(result, null, 2));
872
+ return [2 /*return*/, result];
873
+ });
874
+ });
875
+ };
536
876
  /**
537
877
  * Local testgaps worker (fallback when headless unavailable)
538
878
  */
539
- async runTestGapsWorkerLocal() {
540
- // Check for test coverage gaps
541
- const testGapsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'test-gaps.json');
542
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
543
- if (!existsSync(metricsDir)) {
544
- mkdirSync(metricsDir, { recursive: true });
545
- }
546
- const result = {
547
- timestamp: new Date().toISOString(),
548
- mode: 'local',
549
- hasTestDir: existsSync(join(this.projectRoot, 'tests')) || existsSync(join(this.projectRoot, '__tests__')),
550
- estimatedCoverage: 'unknown',
551
- gaps: [],
552
- note: 'Install Claude Code CLI for AI-powered test gap analysis',
553
- };
554
- writeFileSync(testGapsFile, JSON.stringify(result, null, 2));
555
- return result;
556
- }
879
+ WorkerDaemon.prototype.runTestGapsWorkerLocal = function () {
880
+ return __awaiter(this, void 0, Promise, function () {
881
+ var testGapsFile, metricsDir, result;
882
+ return __generator(this, function (_a) {
883
+ testGapsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'test-gaps.json');
884
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
885
+ if (!existsSync(metricsDir)) {
886
+ mkdirSync(metricsDir, { recursive: true });
887
+ }
888
+ result = {
889
+ timestamp: new Date().toISOString(),
890
+ mode: 'local',
891
+ hasTestDir: existsSync(join(this.projectRoot, 'tests')) || existsSync(join(this.projectRoot, '__tests__')),
892
+ estimatedCoverage: 'unknown',
893
+ gaps: [],
894
+ note: 'Install Claude Code CLI for AI-powered test gap analysis'
895
+ };
896
+ writeFileSync(testGapsFile, JSON.stringify(result, null, 2));
897
+ return [2 /*return*/, result];
898
+ });
899
+ });
900
+ };
557
901
  /**
558
902
  * Local predict worker (fallback when headless unavailable)
559
903
  */
560
- async runPredictWorkerLocal() {
561
- return {
562
- timestamp: new Date().toISOString(),
563
- mode: 'local',
564
- predictions: [],
565
- preloaded: [],
566
- note: 'Install Claude Code CLI for AI-powered predictions',
567
- };
568
- }
904
+ WorkerDaemon.prototype.runPredictWorkerLocal = function () {
905
+ return __awaiter(this, void 0, Promise, function () {
906
+ return __generator(this, function (_a) {
907
+ return [2 /*return*/, {
908
+ timestamp: new Date().toISOString(),
909
+ mode: 'local',
910
+ predictions: [],
911
+ preloaded: [],
912
+ note: 'Install Claude Code CLI for AI-powered predictions'
913
+ }];
914
+ });
915
+ });
916
+ };
569
917
  /**
570
918
  * Local document worker (fallback when headless unavailable)
571
919
  */
572
- async runDocumentWorkerLocal() {
573
- return {
574
- timestamp: new Date().toISOString(),
575
- mode: 'local',
576
- filesDocumented: 0,
577
- suggestedDocs: [],
578
- note: 'Install Claude Code CLI for AI-powered documentation generation',
579
- };
580
- }
920
+ WorkerDaemon.prototype.runDocumentWorkerLocal = function () {
921
+ return __awaiter(this, void 0, Promise, function () {
922
+ return __generator(this, function (_a) {
923
+ return [2 /*return*/, {
924
+ timestamp: new Date().toISOString(),
925
+ mode: 'local',
926
+ filesDocumented: 0,
927
+ suggestedDocs: [],
928
+ note: 'Install Claude Code CLI for AI-powered documentation generation'
929
+ }];
930
+ });
931
+ });
932
+ };
581
933
  /**
582
934
  * Local ultralearn worker (fallback when headless unavailable)
583
935
  */
584
- async runUltralearnWorkerLocal() {
585
- return {
586
- timestamp: new Date().toISOString(),
587
- mode: 'local',
588
- patternsLearned: 0,
589
- insightsGained: [],
590
- note: 'Install Claude Code CLI for AI-powered deep learning',
591
- };
592
- }
936
+ WorkerDaemon.prototype.runUltralearnWorkerLocal = function () {
937
+ return __awaiter(this, void 0, Promise, function () {
938
+ return __generator(this, function (_a) {
939
+ return [2 /*return*/, {
940
+ timestamp: new Date().toISOString(),
941
+ mode: 'local',
942
+ patternsLearned: 0,
943
+ insightsGained: [],
944
+ note: 'Install Claude Code CLI for AI-powered deep learning'
945
+ }];
946
+ });
947
+ });
948
+ };
593
949
  /**
594
950
  * Local refactor worker (fallback when headless unavailable)
595
951
  */
596
- async runRefactorWorkerLocal() {
597
- return {
598
- timestamp: new Date().toISOString(),
599
- mode: 'local',
600
- suggestions: [],
601
- duplicatesFound: 0,
602
- note: 'Install Claude Code CLI for AI-powered refactoring suggestions',
603
- };
604
- }
952
+ WorkerDaemon.prototype.runRefactorWorkerLocal = function () {
953
+ return __awaiter(this, void 0, Promise, function () {
954
+ return __generator(this, function (_a) {
955
+ return [2 /*return*/, {
956
+ timestamp: new Date().toISOString(),
957
+ mode: 'local',
958
+ suggestions: [],
959
+ duplicatesFound: 0,
960
+ note: 'Install Claude Code CLI for AI-powered refactoring suggestions'
961
+ }];
962
+ });
963
+ });
964
+ };
605
965
  /**
606
966
  * Local deepdive worker (fallback when headless unavailable)
607
967
  */
608
- async runDeepdiveWorkerLocal() {
609
- return {
610
- timestamp: new Date().toISOString(),
611
- mode: 'local',
612
- analysisDepth: 'shallow',
613
- findings: [],
614
- note: 'Install Claude Code CLI for AI-powered deep code analysis',
615
- };
616
- }
968
+ WorkerDaemon.prototype.runDeepdiveWorkerLocal = function () {
969
+ return __awaiter(this, void 0, Promise, function () {
970
+ return __generator(this, function (_a) {
971
+ return [2 /*return*/, {
972
+ timestamp: new Date().toISOString(),
973
+ mode: 'local',
974
+ analysisDepth: 'shallow',
975
+ findings: [],
976
+ note: 'Install Claude Code CLI for AI-powered deep code analysis'
977
+ }];
978
+ });
979
+ });
980
+ };
617
981
  /**
618
982
  * Local benchmark worker
619
983
  */
620
- async runBenchmarkWorkerLocal() {
621
- const benchmarkFile = join(this.projectRoot, '.claude-flow', 'metrics', 'benchmark.json');
622
- const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
623
- if (!existsSync(metricsDir)) {
624
- mkdirSync(metricsDir, { recursive: true });
625
- }
626
- const result = {
627
- timestamp: new Date().toISOString(),
628
- mode: 'local',
629
- benchmarks: {
630
- memoryUsage: process.memoryUsage(),
631
- cpuUsage: process.cpuUsage(),
632
- uptime: process.uptime(),
633
- },
634
- };
635
- writeFileSync(benchmarkFile, JSON.stringify(result, null, 2));
636
- return result;
637
- }
984
+ WorkerDaemon.prototype.runBenchmarkWorkerLocal = function () {
985
+ return __awaiter(this, void 0, Promise, function () {
986
+ var benchmarkFile, metricsDir, result;
987
+ return __generator(this, function (_a) {
988
+ benchmarkFile = join(this.projectRoot, '.claude-flow', 'metrics', 'benchmark.json');
989
+ metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
990
+ if (!existsSync(metricsDir)) {
991
+ mkdirSync(metricsDir, { recursive: true });
992
+ }
993
+ result = {
994
+ timestamp: new Date().toISOString(),
995
+ mode: 'local',
996
+ benchmarks: {
997
+ memoryUsage: process.memoryUsage(),
998
+ cpuUsage: process.cpuUsage(),
999
+ uptime: process.uptime()
1000
+ }
1001
+ };
1002
+ writeFileSync(benchmarkFile, JSON.stringify(result, null, 2));
1003
+ return [2 /*return*/, result];
1004
+ });
1005
+ });
1006
+ };
638
1007
  /**
639
1008
  * Local preload worker
640
1009
  */
641
- async runPreloadWorkerLocal() {
642
- return {
643
- timestamp: new Date().toISOString(),
644
- mode: 'local',
645
- resourcesPreloaded: 0,
646
- cacheStatus: 'active',
647
- };
648
- }
1010
+ WorkerDaemon.prototype.runPreloadWorkerLocal = function () {
1011
+ return __awaiter(this, void 0, Promise, function () {
1012
+ return __generator(this, function (_a) {
1013
+ return [2 /*return*/, {
1014
+ timestamp: new Date().toISOString(),
1015
+ mode: 'local',
1016
+ resourcesPreloaded: 0,
1017
+ cacheStatus: 'active'
1018
+ }];
1019
+ });
1020
+ });
1021
+ };
649
1022
  /**
650
1023
  * Manually trigger a worker
651
1024
  */
652
- async triggerWorker(type) {
653
- const workerConfig = this.config.workers.find(w => w.type === type);
654
- if (!workerConfig) {
655
- throw new Error(`Unknown worker type: ${type}`);
656
- }
657
- return this.executeWorker(workerConfig);
658
- }
1025
+ WorkerDaemon.prototype.triggerWorker = function (type) {
1026
+ return __awaiter(this, void 0, Promise, function () {
1027
+ var workerConfig;
1028
+ return __generator(this, function (_a) {
1029
+ workerConfig = this.config.workers.find(function (w) { return w.type === type; });
1030
+ if (!workerConfig) {
1031
+ throw new Error("Unknown worker type: " + type);
1032
+ }
1033
+ return [2 /*return*/, this.executeWorker(workerConfig)];
1034
+ });
1035
+ });
1036
+ };
659
1037
  /**
660
1038
  * Enable/disable a worker
661
1039
  */
662
- setWorkerEnabled(type, enabled) {
663
- const workerConfig = this.config.workers.find(w => w.type === type);
1040
+ WorkerDaemon.prototype.setWorkerEnabled = function (type, enabled) {
1041
+ var workerConfig = this.config.workers.find(function (w) { return w.type === type; });
664
1042
  if (workerConfig) {
665
1043
  workerConfig.enabled = enabled;
666
1044
  if (enabled && this.running) {
667
1045
  this.scheduleWorker(workerConfig);
668
1046
  }
669
1047
  else if (!enabled) {
670
- const timer = this.timers.get(type);
1048
+ var timer = this.timers.get(type);
671
1049
  if (timer) {
672
1050
  clearTimeout(timer);
673
- this.timers.delete(type);
1051
+ this.timers["delete"](type);
674
1052
  }
675
1053
  }
676
1054
  this.saveState();
677
1055
  }
678
- }
1056
+ };
679
1057
  /**
680
1058
  * Save daemon state to file
681
1059
  */
682
- saveState() {
683
- const state = {
1060
+ WorkerDaemon.prototype.saveState = function () {
1061
+ var _a;
1062
+ var state = {
684
1063
  running: this.running,
685
- startedAt: this.startedAt?.toISOString(),
686
- workers: Object.fromEntries(Array.from(this.workers.entries()).map(([type, state]) => [
687
- type,
688
- {
689
- ...state,
690
- lastRun: state.lastRun?.toISOString(),
691
- nextRun: state.nextRun?.toISOString(),
692
- }
693
- ])),
694
- config: {
695
- ...this.config,
696
- workers: this.config.workers.map(w => ({ ...w })),
697
- },
698
- savedAt: new Date().toISOString(),
1064
+ startedAt: (_a = this.startedAt) === null || _a === void 0 ? void 0 : _a.toISOString(),
1065
+ workers: Object.fromEntries(Array.from(this.workers.entries()).map(function (_a) {
1066
+ var _b, _c;
1067
+ var type = _a[0], state = _a[1];
1068
+ return [
1069
+ type,
1070
+ __assign(__assign({}, state), { lastRun: (_b = state.lastRun) === null || _b === void 0 ? void 0 : _b.toISOString(), nextRun: (_c = state.nextRun) === null || _c === void 0 ? void 0 : _c.toISOString() })
1071
+ ];
1072
+ })),
1073
+ config: __assign(__assign({}, this.config), { workers: this.config.workers.map(function (w) { return (__assign({}, w)); }) }),
1074
+ savedAt: new Date().toISOString()
699
1075
  };
700
1076
  try {
701
1077
  writeFileSync(this.config.stateFile, JSON.stringify(state, null, 2));
702
1078
  }
703
1079
  catch (error) {
704
- this.log('error', `Failed to save state: ${error}`);
1080
+ this.log('error', "Failed to save state: " + error);
705
1081
  }
706
- }
1082
+ };
707
1083
  /**
708
1084
  * Log message
709
1085
  */
710
- log(level, message) {
711
- const timestamp = new Date().toISOString();
712
- const logMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
713
- this.emit('log', { level, message, timestamp });
1086
+ WorkerDaemon.prototype.log = function (level, message) {
1087
+ var timestamp = new Date().toISOString();
1088
+ var logMessage = "[" + timestamp + "] [" + level.toUpperCase() + "] " + message;
1089
+ this.emit('log', { level: level, message: message, timestamp: timestamp });
714
1090
  // Also write to log file
715
1091
  try {
716
- const logFile = join(this.config.logDir, 'daemon.log');
717
- const fs = require('fs');
718
- fs.appendFileSync(logFile, logMessage + '\n');
1092
+ var logFile = join(this.config.logDir, 'daemon.log');
1093
+ appendFileSync(logFile, logMessage + '\n');
719
1094
  }
720
- catch {
1095
+ catch (_a) {
721
1096
  // Ignore log write errors
722
1097
  }
723
- }
724
- }
1098
+ };
1099
+ return WorkerDaemon;
1100
+ }(EventEmitter));
1101
+ export { WorkerDaemon };
725
1102
  // Singleton instance for global access
726
- let daemonInstance = null;
1103
+ var daemonInstance = null;
727
1104
  /**
728
1105
  * Get or create daemon instance
729
1106
  */
730
- export function getDaemon(projectRoot) {
1107
+ export function getDaemon(projectRoot, config) {
731
1108
  if (!daemonInstance && projectRoot) {
732
- daemonInstance = new WorkerDaemon(projectRoot);
1109
+ daemonInstance = new WorkerDaemon(projectRoot, config);
733
1110
  }
734
1111
  if (!daemonInstance) {
735
1112
  throw new Error('Daemon not initialized. Provide projectRoot on first call.');
@@ -739,18 +1116,38 @@ export function getDaemon(projectRoot) {
739
1116
  /**
740
1117
  * Start daemon (for use in session-start hook)
741
1118
  */
742
- export async function startDaemon(projectRoot) {
743
- const daemon = getDaemon(projectRoot);
744
- await daemon.start();
745
- return daemon;
1119
+ export function startDaemon(projectRoot, config) {
1120
+ return __awaiter(this, void 0, Promise, function () {
1121
+ var daemon;
1122
+ return __generator(this, function (_a) {
1123
+ switch (_a.label) {
1124
+ case 0:
1125
+ daemon = getDaemon(projectRoot, config);
1126
+ return [4 /*yield*/, daemon.start()];
1127
+ case 1:
1128
+ _a.sent();
1129
+ return [2 /*return*/, daemon];
1130
+ }
1131
+ });
1132
+ });
746
1133
  }
747
1134
  /**
748
1135
  * Stop daemon
749
1136
  */
750
- export async function stopDaemon() {
751
- if (daemonInstance) {
752
- await daemonInstance.stop();
753
- }
1137
+ export function stopDaemon() {
1138
+ return __awaiter(this, void 0, Promise, function () {
1139
+ return __generator(this, function (_a) {
1140
+ switch (_a.label) {
1141
+ case 0:
1142
+ if (!daemonInstance) return [3 /*break*/, 2];
1143
+ return [4 /*yield*/, daemonInstance.stop()];
1144
+ case 1:
1145
+ _a.sent();
1146
+ _a.label = 2;
1147
+ case 2: return [2 /*return*/];
1148
+ }
1149
+ });
1150
+ });
754
1151
  }
755
1152
  export default WorkerDaemon;
756
1153
  //# sourceMappingURL=worker-daemon.js.map