kynjal-cli 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  2. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  3. package/dist/src/appliance/gguf-engine.js +286 -525
  4. package/dist/src/appliance/gguf-engine.js.map +1 -1
  5. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  7. package/dist/src/appliance/ruvllm-bridge.js +203 -403
  8. package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
  9. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  11. package/dist/src/appliance/rvfa-builder.js +154 -208
  12. package/dist/src/appliance/rvfa-builder.js.map +1 -1
  13. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  15. package/dist/src/appliance/rvfa-distribution.js +260 -423
  16. package/dist/src/appliance/rvfa-distribution.js.map +1 -1
  17. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  18. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  19. package/dist/src/appliance/rvfa-format.js +128 -200
  20. package/dist/src/appliance/rvfa-format.js.map +1 -1
  21. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  23. package/dist/src/appliance/rvfa-runner.js +168 -304
  24. package/dist/src/appliance/rvfa-runner.js.map +1 -1
  25. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  27. package/dist/src/appliance/rvfa-signing.js +173 -295
  28. package/dist/src/appliance/rvfa-signing.js.map +1 -1
  29. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  30. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  31. package/dist/src/benchmarks/pretrain/index.js +331 -542
  32. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  33. package/dist/src/commands/agent.js +574 -697
  34. package/dist/src/commands/agent.js.map +1 -1
  35. package/dist/src/commands/analyze.js +1218 -1548
  36. package/dist/src/commands/analyze.js.map +1 -1
  37. package/dist/src/commands/appliance-advanced.js +158 -267
  38. package/dist/src/commands/appliance-advanced.js.map +1 -1
  39. package/dist/src/commands/appliance.js +318 -493
  40. package/dist/src/commands/appliance.js.map +1 -1
  41. package/dist/src/commands/benchmark.js +372 -523
  42. package/dist/src/commands/benchmark.js.map +1 -1
  43. package/dist/src/commands/claims.js +274 -364
  44. package/dist/src/commands/claims.js.map +1 -1
  45. package/dist/src/commands/cleanup.js +113 -157
  46. package/dist/src/commands/cleanup.js.map +1 -1
  47. package/dist/src/commands/completions.js +477 -118
  48. package/dist/src/commands/completions.js.map +1 -1
  49. package/dist/src/commands/config.js +237 -303
  50. package/dist/src/commands/config.js.map +1 -1
  51. package/dist/src/commands/daemon.js +487 -596
  52. package/dist/src/commands/daemon.js.map +1 -1
  53. package/dist/src/commands/deployment.js +194 -275
  54. package/dist/src/commands/deployment.js.map +1 -1
  55. package/dist/src/commands/doctor.js +504 -686
  56. package/dist/src/commands/doctor.js.map +1 -1
  57. package/dist/src/commands/embeddings.js +1293 -1543
  58. package/dist/src/commands/embeddings.js.map +1 -1
  59. package/dist/src/commands/guidance.js +449 -596
  60. package/dist/src/commands/guidance.js.map +1 -1
  61. package/dist/src/commands/hive-mind.js +854 -938
  62. package/dist/src/commands/hive-mind.js.map +1 -1
  63. package/dist/src/commands/hooks.js +3112 -3519
  64. package/dist/src/commands/hooks.js.map +1 -1
  65. package/dist/src/commands/index.d.ts +115 -0
  66. package/dist/src/commands/index.d.ts.map +1 -0
  67. package/dist/src/commands/index.js +126 -308
  68. package/dist/src/commands/index.js.map +1 -1
  69. package/dist/src/commands/init.js +788 -940
  70. package/dist/src/commands/init.js.map +1 -1
  71. package/dist/src/commands/issues.js +383 -558
  72. package/dist/src/commands/issues.js.map +1 -1
  73. package/dist/src/commands/mcp.js +493 -605
  74. package/dist/src/commands/mcp.js.map +1 -1
  75. package/dist/src/commands/memory.js +833 -1026
  76. package/dist/src/commands/memory.js.map +1 -1
  77. package/dist/src/commands/migrate.js +282 -347
  78. package/dist/src/commands/migrate.js.map +1 -1
  79. package/dist/src/commands/neural.js +1289 -1563
  80. package/dist/src/commands/neural.js.map +1 -1
  81. package/dist/src/commands/performance.js +497 -643
  82. package/dist/src/commands/performance.js.map +1 -1
  83. package/dist/src/commands/plugins.js +668 -841
  84. package/dist/src/commands/plugins.js.map +1 -1
  85. package/dist/src/commands/process.js +392 -447
  86. package/dist/src/commands/process.js.map +1 -1
  87. package/dist/src/commands/progress.js +162 -256
  88. package/dist/src/commands/progress.js.map +1 -1
  89. package/dist/src/commands/providers.js +150 -220
  90. package/dist/src/commands/providers.js.map +1 -1
  91. package/dist/src/commands/route.js +520 -665
  92. package/dist/src/commands/route.js.map +1 -1
  93. package/dist/src/commands/ruvector/backup.js +505 -651
  94. package/dist/src/commands/ruvector/backup.js.map +1 -1
  95. package/dist/src/commands/ruvector/benchmark.js +349 -401
  96. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  97. package/dist/src/commands/ruvector/import.js +224 -266
  98. package/dist/src/commands/ruvector/import.js.map +1 -1
  99. package/dist/src/commands/ruvector/index.js +37 -75
  100. package/dist/src/commands/ruvector/index.js.map +1 -1
  101. package/dist/src/commands/ruvector/init.js +336 -359
  102. package/dist/src/commands/ruvector/init.js.map +1 -1
  103. package/dist/src/commands/ruvector/migrate.js +335 -322
  104. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  105. package/dist/src/commands/ruvector/optimize.js +375 -431
  106. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  107. package/dist/src/commands/ruvector/setup.js +703 -117
  108. package/dist/src/commands/ruvector/setup.js.map +1 -1
  109. package/dist/src/commands/ruvector/status.js +364 -419
  110. package/dist/src/commands/ruvector/status.js.map +1 -1
  111. package/dist/src/commands/security.js +485 -608
  112. package/dist/src/commands/security.js.map +1 -1
  113. package/dist/src/commands/session.js +504 -626
  114. package/dist/src/commands/session.js.map +1 -1
  115. package/dist/src/commands/start.js +267 -364
  116. package/dist/src/commands/start.js.map +1 -1
  117. package/dist/src/commands/status.js +380 -486
  118. package/dist/src/commands/status.js.map +1 -1
  119. package/dist/src/commands/swarm.js +408 -488
  120. package/dist/src/commands/swarm.js.map +1 -1
  121. package/dist/src/commands/task.js +423 -538
  122. package/dist/src/commands/task.js.map +1 -1
  123. package/dist/src/commands/transfer-store.js +322 -412
  124. package/dist/src/commands/transfer-store.js.map +1 -1
  125. package/dist/src/commands/update.js +196 -291
  126. package/dist/src/commands/update.js.map +1 -1
  127. package/dist/src/commands/workflow.js +386 -486
  128. package/dist/src/commands/workflow.js.map +1 -1
  129. package/dist/src/config-adapter.d.ts +15 -0
  130. package/dist/src/config-adapter.d.ts.map +1 -0
  131. package/dist/src/config-adapter.js +38 -39
  132. package/dist/src/config-adapter.js.map +1 -1
  133. package/dist/src/index.d.ts +77 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +309 -411
  136. package/dist/src/index.js.map +1 -1
  137. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  138. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  139. package/dist/src/infrastructure/in-memory-repositories.js +246 -507
  140. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  141. package/dist/src/init/claudemd-generator.d.ts +25 -0
  142. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  143. package/dist/src/init/claudemd-generator.js +368 -78
  144. package/dist/src/init/claudemd-generator.js.map +1 -1
  145. package/dist/src/init/executor.d.ts +41 -0
  146. package/dist/src/init/executor.d.ts.map +1 -0
  147. package/dist/src/init/executor.js +1307 -996
  148. package/dist/src/init/executor.js.map +1 -1
  149. package/dist/src/init/helpers-generator.d.ts +60 -0
  150. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  151. package/dist/src/init/helpers-generator.js +657 -12
  152. package/dist/src/init/helpers-generator.js.map +1 -1
  153. package/dist/src/init/index.d.ts +1 -1
  154. package/dist/src/init/index.d.ts.map +1 -1
  155. package/dist/src/init/index.js +1 -1
  156. package/dist/src/init/index.js.map +1 -1
  157. package/dist/src/init/mcp-generator.js +33 -37
  158. package/dist/src/init/mcp-generator.js.map +1 -1
  159. package/dist/src/init/settings-generator.js +76 -77
  160. package/dist/src/init/settings-generator.js.map +1 -1
  161. package/dist/src/init/statusline-generator.js +801 -3
  162. package/dist/src/init/statusline-generator.js.map +1 -1
  163. package/dist/src/init/types.d.ts +1 -1
  164. package/dist/src/init/types.d.ts.map +1 -1
  165. package/dist/src/init/types.js +76 -59
  166. package/dist/src/init/types.js.map +1 -1
  167. package/dist/src/mcp-client.d.ts +92 -0
  168. package/dist/src/mcp-client.d.ts.map +1 -0
  169. package/dist/src/mcp-client.js +81 -125
  170. package/dist/src/mcp-client.js.map +1 -1
  171. package/dist/src/mcp-server.d.ts +161 -0
  172. package/dist/src/mcp-server.d.ts.map +1 -0
  173. package/dist/src/mcp-server.js +470 -757
  174. package/dist/src/mcp-server.js.map +1 -1
  175. package/dist/src/mcp-tools/agent-tools.js +391 -492
  176. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  177. package/dist/src/mcp-tools/agentdb-tools.js +332 -533
  178. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/analyze-tools.js +172 -236
  180. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  181. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  182. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  183. package/dist/src/mcp-tools/auto-install.js +80 -142
  184. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  185. package/dist/src/mcp-tools/browser-tools.js +252 -375
  186. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  187. package/dist/src/mcp-tools/claims-tools.js +473 -565
  188. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/config-tools.js +197 -272
  190. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  191. package/dist/src/mcp-tools/coordination-tools.js +500 -572
  192. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  193. package/dist/src/mcp-tools/daa-tools.js +286 -364
  194. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/embeddings-tools.js +582 -693
  196. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/github-tools.js +260 -311
  198. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
  200. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
  202. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/memory-tools.js +350 -505
  204. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  205. package/dist/src/mcp-tools/neural-tools.js +315 -412
  206. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  207. package/dist/src/mcp-tools/performance-tools.js +420 -480
  208. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/progress-tools.js +204 -278
  210. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  211. package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
  212. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/security-tools.js +297 -429
  214. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/session-tools.js +185 -234
  216. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  217. package/dist/src/mcp-tools/swarm-tools.js +207 -260
  218. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  219. package/dist/src/mcp-tools/system-tools.js +276 -325
  220. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/task-tools.js +270 -336
  222. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/terminal-tools.js +148 -196
  224. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/transfer-tools.js +186 -333
  226. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/types.d.ts +31 -0
  228. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  229. package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
  230. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  231. package/dist/src/mcp-tools/workflow-tools.js +405 -450
  232. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  233. package/dist/src/memory/ewc-consolidation.d.ts +295 -0
  234. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  235. package/dist/src/memory/ewc-consolidation.js +190 -303
  236. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  237. package/dist/src/memory/intelligence.d.ts +338 -0
  238. package/dist/src/memory/intelligence.d.ts.map +1 -0
  239. package/dist/src/memory/intelligence.js +569 -794
  240. package/dist/src/memory/intelligence.js.map +1 -1
  241. package/dist/src/memory/memory-bridge.d.ts +407 -0
  242. package/dist/src/memory/memory-bridge.d.ts.map +1 -0
  243. package/dist/src/memory/memory-bridge.js +1170 -1640
  244. package/dist/src/memory/memory-bridge.js.map +1 -1
  245. package/dist/src/memory/memory-initializer.d.ts +412 -0
  246. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  247. package/dist/src/memory/memory-initializer.js +1836 -1851
  248. package/dist/src/memory/memory-initializer.js.map +1 -1
  249. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  250. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  251. package/dist/src/memory/sona-optimizer.js +199 -329
  252. package/dist/src/memory/sona-optimizer.js.map +1 -1
  253. package/dist/src/output.d.ts +2 -2
  254. package/dist/src/output.d.ts.map +1 -1
  255. package/dist/src/output.js +242 -272
  256. package/dist/src/output.js.map +1 -1
  257. package/dist/src/parser.d.ts +51 -0
  258. package/dist/src/parser.d.ts.map +1 -0
  259. package/dist/src/parser.js +140 -187
  260. package/dist/src/parser.js.map +1 -1
  261. package/dist/src/plugins/manager.d.ts +133 -0
  262. package/dist/src/plugins/manager.d.ts.map +1 -0
  263. package/dist/src/plugins/manager.js +285 -521
  264. package/dist/src/plugins/manager.js.map +1 -1
  265. package/dist/src/plugins/store/discovery.d.ts +88 -0
  266. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  267. package/dist/src/plugins/store/discovery.js +271 -358
  268. package/dist/src/plugins/store/discovery.js.map +1 -1
  269. package/dist/src/plugins/store/index.d.ts +76 -0
  270. package/dist/src/plugins/store/index.d.ts.map +1 -0
  271. package/dist/src/plugins/store/index.js +48 -105
  272. package/dist/src/plugins/store/index.js.map +1 -1
  273. package/dist/src/plugins/store/search.d.ts +46 -0
  274. package/dist/src/plugins/store/search.d.ts.map +1 -0
  275. package/dist/src/plugins/store/search.js +69 -107
  276. package/dist/src/plugins/store/search.js.map +1 -1
  277. package/dist/src/plugins/store/types.d.ts +274 -0
  278. package/dist/src/plugins/store/types.d.ts.map +1 -0
  279. package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
  280. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  281. package/dist/src/plugins/tests/standalone-test.js +172 -223
  282. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  283. package/dist/src/plugins/tests/test-plugin-store.js +190 -228
  284. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  285. package/dist/src/production/circuit-breaker.d.ts +101 -0
  286. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  287. package/dist/src/production/circuit-breaker.js +62 -126
  288. package/dist/src/production/circuit-breaker.js.map +1 -1
  289. package/dist/src/production/error-handler.d.ts +92 -0
  290. package/dist/src/production/error-handler.d.ts.map +1 -0
  291. package/dist/src/production/error-handler.js +86 -156
  292. package/dist/src/production/error-handler.js.map +1 -1
  293. package/dist/src/production/monitoring.d.ts +161 -0
  294. package/dist/src/production/monitoring.d.ts.map +1 -0
  295. package/dist/src/production/monitoring.js +139 -220
  296. package/dist/src/production/monitoring.js.map +1 -1
  297. package/dist/src/production/rate-limiter.d.ts +80 -0
  298. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  299. package/dist/src/production/rate-limiter.js +74 -93
  300. package/dist/src/production/rate-limiter.js.map +1 -1
  301. package/dist/src/production/retry.d.ts +48 -0
  302. package/dist/src/production/retry.d.ts.map +1 -0
  303. package/dist/src/production/retry.js +75 -167
  304. package/dist/src/production/retry.js.map +1 -1
  305. package/dist/src/prompt.d.ts +44 -0
  306. package/dist/src/prompt.d.ts.map +1 -0
  307. package/dist/src/prompt.js +436 -560
  308. package/dist/src/prompt.js.map +1 -1
  309. package/dist/src/runtime/headless.d.ts +60 -0
  310. package/dist/src/runtime/headless.d.ts.map +1 -0
  311. package/dist/src/runtime/headless.js +197 -286
  312. package/dist/src/runtime/headless.js.map +1 -1
  313. package/dist/src/ruvector/agent-wasm.d.ts +182 -0
  314. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
  315. package/dist/src/ruvector/agent-wasm.js +156 -351
  316. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  317. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  318. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  319. package/dist/src/ruvector/ast-analyzer.js +145 -232
  320. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  321. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  322. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  323. package/dist/src/ruvector/coverage-router.js +287 -419
  324. package/dist/src/ruvector/coverage-router.js.map +1 -1
  325. package/dist/src/ruvector/coverage-tools.js +56 -101
  326. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  327. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  328. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  329. package/dist/src/ruvector/diff-classifier.js +324 -451
  330. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  331. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  332. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  333. package/dist/src/ruvector/enhanced-model-router.js +260 -336
  334. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  335. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  336. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  337. package/dist/src/ruvector/flash-attention.js +223 -254
  338. package/dist/src/ruvector/flash-attention.js.map +1 -1
  339. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  340. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  341. package/dist/src/ruvector/graph-analyzer.js +486 -680
  342. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  343. package/dist/src/ruvector/index.d.ts +40 -0
  344. package/dist/src/ruvector/index.d.ts.map +1 -0
  345. package/dist/src/ruvector/index.js +36 -106
  346. package/dist/src/ruvector/index.js.map +1 -1
  347. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  348. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  349. package/dist/src/ruvector/lora-adapter.js +155 -248
  350. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  351. package/dist/src/ruvector/model-router.d.ts +220 -0
  352. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  353. package/dist/src/ruvector/model-router.js +175 -248
  354. package/dist/src/ruvector/model-router.js.map +1 -1
  355. package/dist/src/ruvector/moe-router.d.ts +206 -0
  356. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  357. package/dist/src/ruvector/moe-router.js +228 -286
  358. package/dist/src/ruvector/moe-router.js.map +1 -1
  359. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  360. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  361. package/dist/src/ruvector/q-learning-router.js +257 -338
  362. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  363. package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  364. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
  365. package/dist/src/ruvector/ruvllm-wasm.js +270 -434
  366. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  367. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  368. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  369. package/dist/src/ruvector/semantic-router.js +60 -67
  370. package/dist/src/ruvector/semantic-router.js.map +1 -1
  371. package/dist/src/ruvector/vector-db.d.ts +69 -0
  372. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  373. package/dist/src/ruvector/vector-db.js +119 -205
  374. package/dist/src/ruvector/vector-db.js.map +1 -1
  375. package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  376. package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
  377. package/dist/src/services/agentic-flow-bridge.js +32 -105
  378. package/dist/src/services/agentic-flow-bridge.js.map +1 -1
  379. package/dist/src/services/claim-service.d.ts +204 -0
  380. package/dist/src/services/claim-service.d.ts.map +1 -0
  381. package/dist/src/services/claim-service.js +615 -940
  382. package/dist/src/services/claim-service.js.map +1 -1
  383. package/dist/src/services/container-worker-pool.d.ts +197 -0
  384. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  385. package/dist/src/services/container-worker-pool.js +398 -666
  386. package/dist/src/services/container-worker-pool.js.map +1 -1
  387. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  388. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  389. package/dist/src/services/headless-worker-executor.js +441 -467
  390. package/dist/src/services/headless-worker-executor.js.map +1 -1
  391. package/dist/src/services/index.d.ts +4 -4
  392. package/dist/src/services/index.d.ts.map +1 -1
  393. package/dist/src/services/index.js +4 -4
  394. package/dist/src/services/index.js.map +1 -1
  395. package/dist/src/services/registry-api.d.ts +58 -0
  396. package/dist/src/services/registry-api.d.ts.map +1 -0
  397. package/dist/src/services/registry-api.js +92 -200
  398. package/dist/src/services/registry-api.js.map +1 -1
  399. package/dist/src/services/ruvector-training.d.ts +222 -0
  400. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  401. package/dist/src/services/ruvector-training.js +257 -337
  402. package/dist/src/services/ruvector-training.js.map +1 -1
  403. package/dist/src/services/worker-daemon.d.ts +228 -0
  404. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  405. package/dist/src/services/worker-daemon.js +591 -849
  406. package/dist/src/services/worker-daemon.js.map +1 -1
  407. package/dist/src/services/worker-queue.d.ts +194 -0
  408. package/dist/src/services/worker-queue.d.ts.map +1 -0
  409. package/dist/src/services/worker-queue.js +331 -548
  410. package/dist/src/services/worker-queue.js.map +1 -1
  411. package/dist/src/suggest.d.ts +53 -0
  412. package/dist/src/suggest.d.ts.map +1 -0
  413. package/dist/src/suggest.js +45 -55
  414. package/dist/src/suggest.js.map +1 -1
  415. package/dist/src/transfer/anonymization/index.js +29 -37
  416. package/dist/src/transfer/anonymization/index.js.map +1 -1
  417. package/dist/src/transfer/deploy-seraphine.js +128 -155
  418. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  419. package/dist/src/transfer/export.d.ts +25 -0
  420. package/dist/src/transfer/export.d.ts.map +1 -0
  421. package/dist/src/transfer/export.js +84 -142
  422. package/dist/src/transfer/export.js.map +1 -1
  423. package/dist/src/transfer/index.d.ts +1 -1
  424. package/dist/src/transfer/index.d.ts.map +1 -1
  425. package/dist/src/transfer/index.js +0 -2
  426. package/dist/src/transfer/index.js.map +1 -1
  427. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  428. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  429. package/dist/src/transfer/ipfs/client.js +187 -337
  430. package/dist/src/transfer/ipfs/client.js.map +1 -1
  431. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  432. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  433. package/dist/src/transfer/ipfs/upload.js +288 -434
  434. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  435. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  436. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  437. package/dist/src/transfer/models/seraphine.js +55 -55
  438. package/dist/src/transfer/models/seraphine.js.map +1 -1
  439. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  440. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  441. package/dist/src/transfer/serialization/cfp.js +30 -31
  442. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  443. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  444. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  445. package/dist/src/transfer/storage/gcs.js +165 -232
  446. package/dist/src/transfer/storage/gcs.js.map +1 -1
  447. package/dist/src/transfer/store/discovery.d.ts +84 -0
  448. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  449. package/dist/src/transfer/store/discovery.js +239 -349
  450. package/dist/src/transfer/store/discovery.js.map +1 -1
  451. package/dist/src/transfer/store/download.d.ts +70 -0
  452. package/dist/src/transfer/store/download.d.ts.map +1 -0
  453. package/dist/src/transfer/store/download.js +243 -365
  454. package/dist/src/transfer/store/download.js.map +1 -1
  455. package/dist/src/transfer/store/index.d.ts +84 -0
  456. package/dist/src/transfer/store/index.d.ts.map +1 -0
  457. package/dist/src/transfer/store/index.js +63 -130
  458. package/dist/src/transfer/store/index.js.map +1 -1
  459. package/dist/src/transfer/store/publish.d.ts +76 -0
  460. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  461. package/dist/src/transfer/store/publish.js +184 -258
  462. package/dist/src/transfer/store/publish.js.map +1 -1
  463. package/dist/src/transfer/store/registry.js +50 -72
  464. package/dist/src/transfer/store/registry.js.map +1 -1
  465. package/dist/src/transfer/store/search.d.ts +54 -0
  466. package/dist/src/transfer/store/search.d.ts.map +1 -0
  467. package/dist/src/transfer/store/search.js +64 -96
  468. package/dist/src/transfer/store/search.js.map +1 -1
  469. package/dist/src/transfer/store/tests/standalone-test.js +174 -231
  470. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  471. package/dist/src/transfer/test-seraphine.js +95 -130
  472. package/dist/src/transfer/test-seraphine.js.map +1 -1
  473. package/dist/src/transfer/tests/test-store.js +194 -239
  474. package/dist/src/transfer/tests/test-store.js.map +1 -1
  475. package/dist/src/transfer/types.d.ts +245 -0
  476. package/dist/src/transfer/types.d.ts.map +1 -0
  477. package/dist/src/types.d.ts +198 -0
  478. package/dist/src/types.d.ts.map +1 -0
  479. package/dist/src/types.js +26 -55
  480. package/dist/src/types.js.map +1 -1
  481. package/dist/src/update/checker.d.ts +34 -0
  482. package/dist/src/update/checker.d.ts.map +1 -0
  483. package/dist/src/update/checker.js +106 -183
  484. package/dist/src/update/checker.js.map +1 -1
  485. package/dist/src/update/executor.d.ts +32 -0
  486. package/dist/src/update/executor.d.ts.map +1 -0
  487. package/dist/src/update/executor.js +135 -198
  488. package/dist/src/update/executor.js.map +1 -1
  489. package/dist/src/update/index.d.ts +33 -0
  490. package/dist/src/update/index.d.ts.map +1 -0
  491. package/dist/src/update/index.js +38 -85
  492. package/dist/src/update/index.js.map +1 -1
  493. package/dist/src/update/rate-limiter.d.ts +20 -0
  494. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  495. package/dist/src/update/rate-limiter.js +19 -31
  496. package/dist/src/update/rate-limiter.js.map +1 -1
  497. package/dist/src/update/validator.d.ts +17 -0
  498. package/dist/src/update/validator.d.ts.map +1 -0
  499. package/dist/src/update/validator.js +38 -64
  500. package/dist/src/update/validator.js.map +1 -1
  501. package/dist/tsconfig.tsbuildinfo +1 -1
  502. package/package.json +1 -1
@@ -9,75 +9,13 @@
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
- };
74
12
  import { EventEmitter } from 'events';
75
13
  import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from 'fs';
76
14
  import { cpus } from 'os';
77
15
  import { join } from 'path';
78
16
  import { HeadlessWorkerExecutor, isHeadlessWorker, } from './headless-worker-executor.js';
79
17
  // Default worker configurations with improved intervals (P0 fix: map 5min -> 15min)
80
- var DEFAULT_WORKERS = [
18
+ const DEFAULT_WORKERS = [
81
19
  { type: 'map', intervalMs: 15 * 60 * 1000, offsetMs: 0, priority: 'normal', description: 'Codebase mapping', enabled: true },
82
20
  { type: 'audit', intervalMs: 10 * 60 * 1000, offsetMs: 2 * 60 * 1000, priority: 'critical', description: 'Security analysis', enabled: true },
83
21
  { type: 'optimize', intervalMs: 15 * 60 * 1000, offsetMs: 4 * 60 * 1000, priority: 'high', description: 'Performance optimization', enabled: true },
@@ -87,127 +25,116 @@ var DEFAULT_WORKERS = [
87
25
  { type: 'document', intervalMs: 60 * 60 * 1000, offsetMs: 0, priority: 'low', description: 'Auto-documentation', enabled: false },
88
26
  ];
89
27
  // Worker timeout (5 minutes max per worker)
90
- var DEFAULT_WORKER_TIMEOUT_MS = 5 * 60 * 1000;
28
+ const DEFAULT_WORKER_TIMEOUT_MS = 5 * 60 * 1000;
91
29
  /**
92
30
  * Worker Daemon - Manages background workers with Node.js
93
31
  */
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');
32
+ export class WorkerDaemon extends EventEmitter {
33
+ config;
34
+ workers = new Map();
35
+ timers = new Map();
36
+ running = false;
37
+ startedAt;
38
+ projectRoot;
39
+ runningWorkers = new Set(); // Track concurrent workers
40
+ pendingWorkers = []; // Queue for deferred workers
41
+ // Headless execution support
42
+ headlessExecutor = null;
43
+ headlessAvailable = false;
44
+ // Preserve the original constructor config so we can detect explicit overrides
45
+ // during state restoration (R1: constructor config takes priority over stale state)
46
+ originalConfig;
47
+ constructor(projectRoot, config) {
48
+ super();
49
+ this.projectRoot = projectRoot;
50
+ this.originalConfig = config;
51
+ const claudeFlowDir = join(projectRoot, '.claude-flow');
110
52
  // Read daemon config from .claude-flow/config.json (Layer B)
111
- var fileConfig = _this.readDaemonConfigFromFile(claudeFlowDir);
53
+ const fileConfig = this.readDaemonConfigFromFile(claudeFlowDir);
112
54
  // 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
55
+ const cpuCount = WorkerDaemon.getEffectiveCpuCount();
56
+ const smartMaxCpuLoad = Math.max(cpuCount * 0.8, 2.0); // Floor of 2.0 for single-CPU machines
115
57
  // Platform-aware default: macOS os.freemem() excludes reclaimable file cache,
116
58
  // so reported "free" is much lower than actually available memory.
117
59
  // Linux reports available memory (including reclaimable cache) more accurately.
118
- var defaultMinFreeMemory = process.platform === 'darwin' ? 5 : 10;
60
+ const defaultMinFreeMemory = process.platform === 'darwin' ? 5 : 10;
119
61
  // Priority: constructor arg > config.json > smart default
120
62
  // For resourceThresholds, merge field-by-field so partial overrides
121
63
  // (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,
64
+ this.config = {
65
+ autoStart: config?.autoStart ?? fileConfig.autoStart ?? false,
66
+ logDir: config?.logDir ?? join(claudeFlowDir, 'logs'),
67
+ stateFile: config?.stateFile ?? join(claudeFlowDir, 'daemon-state.json'),
68
+ maxConcurrent: config?.maxConcurrent ?? fileConfig.maxConcurrent ?? 2,
69
+ workerTimeoutMs: config?.workerTimeoutMs ?? fileConfig.workerTimeoutMs ?? DEFAULT_WORKER_TIMEOUT_MS,
128
70
  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
71
+ maxCpuLoad: config?.resourceThresholds?.maxCpuLoad ?? fileConfig.maxCpuLoad ?? smartMaxCpuLoad,
72
+ minFreeMemoryPercent: config?.resourceThresholds?.minFreeMemoryPercent ?? fileConfig.minFreeMemoryPercent ?? defaultMinFreeMemory,
131
73
  },
132
- workers: (_q = config === null || config === void 0 ? void 0 : config.workers) !== null && _q !== void 0 ? _q : DEFAULT_WORKERS
74
+ workers: config?.workers ?? DEFAULT_WORKERS,
133
75
  };
134
76
  // Setup graceful shutdown handlers
135
- _this.setupShutdownHandlers();
77
+ this.setupShutdownHandlers();
136
78
  // Ensure directories exist
137
79
  if (!existsSync(claudeFlowDir)) {
138
80
  mkdirSync(claudeFlowDir, { recursive: true });
139
81
  }
140
- if (!existsSync(_this.config.logDir)) {
141
- mkdirSync(_this.config.logDir, { recursive: true });
82
+ if (!existsSync(this.config.logDir)) {
83
+ mkdirSync(this.config.logDir, { recursive: true });
142
84
  }
143
85
  // Initialize worker states
144
- _this.initializeWorkerStates();
86
+ this.initializeWorkerStates();
145
87
  // Initialize headless executor (async, non-blocking)
146
- _this.initHeadlessExecutor()["catch"](function (err) {
147
- _this.log('warn', "Headless executor init failed: " + err);
88
+ this.initHeadlessExecutor().catch((err) => {
89
+ this.log('warn', `Headless executor init failed: ${err}`);
148
90
  });
149
- return _this;
150
91
  }
151
92
  /**
152
93
  * Initialize headless executor if Claude Code is available
153
94
  */
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
- }
95
+ async initHeadlessExecutor() {
96
+ try {
97
+ this.headlessExecutor = new HeadlessWorkerExecutor(this.projectRoot, {
98
+ maxConcurrent: this.config.maxConcurrent,
196
99
  });
197
- });
198
- };
100
+ this.headlessAvailable = await this.headlessExecutor.isAvailable();
101
+ if (this.headlessAvailable) {
102
+ this.log('info', 'Claude Code headless mode available - AI workers enabled');
103
+ // Forward headless executor events
104
+ this.headlessExecutor.on('execution:start', (data) => {
105
+ this.emit('headless:start', data);
106
+ });
107
+ this.headlessExecutor.on('execution:complete', (data) => {
108
+ this.emit('headless:complete', data);
109
+ });
110
+ this.headlessExecutor.on('execution:error', (data) => {
111
+ this.emit('headless:error', data);
112
+ });
113
+ this.headlessExecutor.on('output', (data) => {
114
+ this.emit('headless:output', data);
115
+ });
116
+ }
117
+ else {
118
+ this.log('info', 'Claude Code not found - AI workers will run in local fallback mode');
119
+ }
120
+ }
121
+ catch (error) {
122
+ this.log('warn', `Failed to initialize headless executor: ${error}`);
123
+ this.headlessAvailable = false;
124
+ }
125
+ }
199
126
  /**
200
127
  * Check if headless execution is available
201
128
  */
202
- WorkerDaemon.prototype.isHeadlessAvailable = function () {
129
+ isHeadlessAvailable() {
203
130
  return this.headlessAvailable;
204
- };
131
+ }
205
132
  /**
206
133
  * Get headless executor instance
207
134
  */
208
- WorkerDaemon.prototype.getHeadlessExecutor = function () {
135
+ getHeadlessExecutor() {
209
136
  return this.headlessExecutor;
210
- };
137
+ }
211
138
  /**
212
139
  * Detect effective CPU count for the current environment.
213
140
  *
@@ -216,107 +143,88 @@ var WorkerDaemon = /** @class */ (function (_super) {
216
143
  * cgroup v2 / v1 quota files first so the maxCpuLoad threshold stays
217
144
  * meaningful under resource-limited containers.
218
145
  */
219
- WorkerDaemon.getEffectiveCpuCount = function () {
146
+ static getEffectiveCpuCount() {
220
147
  // 1. Try cgroup v2: /sys/fs/cgroup/cpu.max
221
148
  try {
222
- var cpuMax = readFileSync('/sys/fs/cgroup/cpu.max', 'utf8').trim();
223
- var _a = cpuMax.split(' '), quotaStr = _a[0], periodStr = _a[1];
149
+ const cpuMax = readFileSync('/sys/fs/cgroup/cpu.max', 'utf8').trim();
150
+ const [quotaStr, periodStr] = cpuMax.split(' ');
224
151
  if (quotaStr !== 'max') {
225
- var quota = parseInt(quotaStr, 10);
226
- var period = parseInt(periodStr, 10);
152
+ const quota = parseInt(quotaStr, 10);
153
+ const period = parseInt(periodStr, 10);
227
154
  if (quota > 0 && period > 0)
228
155
  return Math.ceil(quota / period);
229
156
  }
230
157
  }
231
- catch ( /* not in cgroup v2 */_b) { /* not in cgroup v2 */ }
158
+ catch { /* not in cgroup v2 */ }
232
159
  // 2. Try cgroup v1: /sys/fs/cgroup/cpu/cpu.cfs_quota_us
233
160
  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);
161
+ const quota = parseInt(readFileSync('/sys/fs/cgroup/cpu/cpu.cfs_quota_us', 'utf8').trim(), 10);
162
+ const period = parseInt(readFileSync('/sys/fs/cgroup/cpu/cpu.cfs_period_us', 'utf8').trim(), 10);
236
163
  if (quota > 0 && period > 0)
237
164
  return Math.ceil(quota / period);
238
165
  }
239
- catch ( /* not in cgroup v1 */_c) { /* not in cgroup v1 */ }
166
+ catch { /* not in cgroup v1 */ }
240
167
  // 3. Fallback to os.cpus().length
241
168
  return cpus().length || 1;
242
- };
169
+ }
243
170
  /**
244
171
  * Read daemon-specific config from .claude-flow/config.json
245
172
  * Supports dot-notation keys like 'daemon.resourceThresholds.maxCpuLoad'
246
173
  */
247
- WorkerDaemon.prototype.readDaemonConfigFromFile = function (claudeFlowDir) {
248
- var _a, _b, _c, _d, _e, _f;
249
- var configPath = join(claudeFlowDir, 'config.json');
174
+ readDaemonConfigFromFile(claudeFlowDir) {
175
+ const configPath = join(claudeFlowDir, 'config.json');
250
176
  if (!existsSync(configPath))
251
177
  return {};
252
178
  try {
253
- var raw = JSON.parse(readFileSync(configPath, 'utf-8'));
179
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
254
180
  // 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'];
181
+ const cfg = raw?.scopes?.project ?? raw;
182
+ const rawCpuLoad = cfg['daemon.resourceThresholds.maxCpuLoad'] ?? raw['daemon.resourceThresholds.maxCpuLoad'];
183
+ const rawMinMem = cfg['daemon.resourceThresholds.minFreeMemoryPercent'] ?? raw['daemon.resourceThresholds.minFreeMemoryPercent'];
184
+ const rawMaxConcurrent = cfg['daemon.maxConcurrent'] ?? raw['daemon.maxConcurrent'];
185
+ const rawTimeout = cfg['daemon.workerTimeoutMs'] ?? raw['daemon.workerTimeoutMs'];
260
186
  return {
261
187
  autoStart: typeof raw['daemon.autoStart'] === 'boolean' ? raw['daemon.autoStart'] : undefined,
262
188
  maxConcurrent: (typeof rawMaxConcurrent === 'number' && rawMaxConcurrent > 0) ? rawMaxConcurrent : undefined,
263
189
  workerTimeoutMs: (typeof rawTimeout === 'number' && rawTimeout > 0) ? rawTimeout : undefined,
264
190
  maxCpuLoad: (typeof rawCpuLoad === 'number' && rawCpuLoad > 0 && rawCpuLoad < 1000) ? rawCpuLoad : undefined,
265
- minFreeMemoryPercent: (typeof rawMinMem === 'number' && rawMinMem >= 0 && rawMinMem <= 100) ? rawMinMem : undefined
191
+ minFreeMemoryPercent: (typeof rawMinMem === 'number' && rawMinMem >= 0 && rawMinMem <= 100) ? rawMinMem : undefined,
266
192
  };
267
193
  }
268
- catch (_g) {
194
+ catch {
269
195
  return {};
270
196
  }
271
- };
197
+ }
272
198
  /**
273
199
  * Setup graceful shutdown handlers
274
200
  */
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
- }); };
201
+ setupShutdownHandlers() {
202
+ const shutdown = async () => {
203
+ this.log('info', 'Received shutdown signal, stopping daemon...');
204
+ await this.stop();
205
+ process.exit(0);
206
+ };
290
207
  process.on('SIGTERM', shutdown);
291
208
  process.on('SIGINT', shutdown);
292
209
  process.on('SIGHUP', shutdown);
293
- };
210
+ }
294
211
  /**
295
212
  * Check if system resources allow worker execution
296
213
  */
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
- };
214
+ async canRunWorker() {
215
+ const os = await import('os');
216
+ const cpuLoad = os.loadavg()[0];
217
+ const totalMem = os.totalmem();
218
+ const freeMem = os.freemem();
219
+ const freePercent = (freeMem / totalMem) * 100;
220
+ if (cpuLoad > this.config.resourceThresholds.maxCpuLoad) {
221
+ return { allowed: false, reason: `CPU load too high: ${cpuLoad.toFixed(2)}` };
222
+ }
223
+ if (freePercent < this.config.resourceThresholds.minFreeMemoryPercent) {
224
+ return { allowed: false, reason: `Memory too low: ${freePercent.toFixed(1)}% free` };
225
+ }
226
+ return { allowed: true };
227
+ }
320
228
  /**
321
229
  * Process pending workers queue
322
230
  *
@@ -326,80 +234,45 @@ var WorkerDaemon = /** @class */ (function (_super) {
326
234
  * currently running when we break, we schedule a backoff retry so the queue
327
235
  * does not get permanently stuck.
328
236
  */
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*/];
237
+ async processPendingWorkers() {
238
+ while (this.pendingWorkers.length > 0 && this.runningWorkers.size < this.config.maxConcurrent) {
239
+ const workerType = this.pendingWorkers.shift();
240
+ const workerConfig = this.config.workers.find(w => w.type === workerType);
241
+ if (workerConfig) {
242
+ const result = await this.executeWorkerWithConcurrencyControl(workerConfig);
243
+ if (result === null) {
244
+ // Worker was deferred (resource pressure or concurrency limit).
245
+ // Break to avoid tight-looping — the next executeWorker() completion
246
+ // will call processPendingWorkers() again via the finally block.
247
+ if (this.runningWorkers.size === 0) {
248
+ // No workers running means nobody will trigger the finally-block
249
+ // callback, so schedule a backoff retry to avoid a stuck queue.
250
+ setTimeout(() => this.processPendingWorkers(), 30_000).unref();
251
+ }
252
+ break;
374
253
  }
375
- });
376
- });
377
- };
378
- WorkerDaemon.prototype.initializeWorkerStates = function () {
379
- var _a, _b, _c, _d, _e;
254
+ }
255
+ }
256
+ }
257
+ initializeWorkerStates() {
380
258
  // Try to restore state from file
381
259
  if (existsSync(this.config.stateFile)) {
382
260
  try {
383
- var saved = JSON.parse(readFileSync(this.config.stateFile, 'utf-8'));
261
+ const saved = JSON.parse(readFileSync(this.config.stateFile, 'utf-8'));
384
262
  // CRITICAL: Restore worker config (including enabled flag) from saved state
385
263
  // This fixes #950: daemon enable command not persisting worker state
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; });
264
+ if (saved.config?.workers && Array.isArray(saved.config.workers)) {
265
+ for (const savedWorker of saved.config.workers) {
266
+ const workerConfig = this.config.workers.find(w => w.type === savedWorker.type);
389
267
  if (workerConfig && typeof savedWorker.enabled === 'boolean') {
390
268
  workerConfig.enabled = savedWorker.enabled;
391
269
  }
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
270
  }
398
271
  }
399
272
  // Restore resourceThresholds, maxConcurrent, workerTimeoutMs from saved state
400
273
  // 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;
274
+ if (saved.config?.resourceThresholds && !this.originalConfig?.resourceThresholds) {
275
+ const rt = saved.config.resourceThresholds;
403
276
  if (typeof rt.maxCpuLoad === 'number' && rt.maxCpuLoad > 0 && rt.maxCpuLoad < 1000) {
404
277
  this.config.resourceThresholds.maxCpuLoad = rt.maxCpuLoad;
405
278
  }
@@ -407,263 +280,217 @@ var WorkerDaemon = /** @class */ (function (_super) {
407
280
  this.config.resourceThresholds.minFreeMemoryPercent = rt.minFreeMemoryPercent;
408
281
  }
409
282
  }
410
- if (typeof ((_d = saved.config) === null || _d === void 0 ? void 0 : _d.maxConcurrent) === 'number' && saved.config.maxConcurrent > 0) {
283
+ if (typeof saved.config?.maxConcurrent === 'number' && saved.config.maxConcurrent > 0) {
411
284
  this.config.maxConcurrent = saved.config.maxConcurrent;
412
285
  }
413
- if (typeof ((_e = saved.config) === null || _e === void 0 ? void 0 : _e.workerTimeoutMs) === 'number' && saved.config.workerTimeoutMs > 0) {
286
+ if (typeof saved.config?.workerTimeoutMs === 'number' && saved.config.workerTimeoutMs > 0) {
414
287
  this.config.workerTimeoutMs = saved.config.workerTimeoutMs;
415
288
  }
416
289
  // Restore worker runtime states (runCount, successCount, etc.)
417
290
  if (saved.workers) {
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, {
291
+ for (const [type, state] of Object.entries(saved.workers)) {
292
+ const savedState = state;
293
+ const lastRunValue = savedState.lastRun;
294
+ this.workers.set(type, {
423
295
  runCount: savedState.runCount || 0,
424
296
  successCount: savedState.successCount || 0,
425
297
  failureCount: savedState.failureCount || 0,
426
298
  averageDurationMs: savedState.averageDurationMs || 0,
427
299
  lastRun: lastRunValue ? new Date(lastRunValue) : undefined,
428
300
  nextRun: undefined,
429
- isRunning: false
301
+ isRunning: false,
430
302
  });
431
303
  }
432
304
  }
433
305
  }
434
- catch (_k) {
306
+ catch {
435
307
  // Ignore parse errors, start fresh
436
308
  }
437
309
  }
438
310
  // Initialize any missing workers
439
- for (var _l = 0, _m = this.config.workers; _l < _m.length; _l++) {
440
- var workerConfig = _m[_l];
311
+ for (const workerConfig of this.config.workers) {
441
312
  if (!this.workers.has(workerConfig.type)) {
442
313
  this.workers.set(workerConfig.type, {
443
314
  runCount: 0,
444
315
  successCount: 0,
445
316
  failureCount: 0,
446
317
  averageDurationMs: 0,
447
- isRunning: false
318
+ isRunning: false,
448
319
  });
449
320
  }
450
321
  }
451
- };
322
+ }
452
323
  /**
453
324
  * Start the daemon and all enabled workers
454
325
  */
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
- };
326
+ async start() {
327
+ if (this.running) {
328
+ this.emit('warning', 'Daemon already running');
329
+ return;
330
+ }
331
+ this.running = true;
332
+ this.startedAt = new Date();
333
+ this.emit('started', { pid: process.pid, startedAt: this.startedAt });
334
+ // Schedule all enabled workers
335
+ for (const workerConfig of this.config.workers) {
336
+ if (workerConfig.enabled) {
337
+ this.scheduleWorker(workerConfig);
338
+ }
339
+ }
340
+ // Save state
341
+ this.saveState();
342
+ this.log('info', `Daemon started (PID: ${process.pid}, CPUs: ${cpus().length}, workers: ${this.config.workers.filter(w => w.enabled).length}, maxCpuLoad: ${this.config.resourceThresholds.maxCpuLoad}, minFreeMemoryPercent: ${this.config.resourceThresholds.minFreeMemoryPercent}%)`);
343
+ }
480
344
  /**
481
345
  * Stop the daemon and all workers
482
346
  */
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
- };
347
+ async stop() {
348
+ if (!this.running) {
349
+ this.emit('warning', 'Daemon not running');
350
+ return;
351
+ }
352
+ // Clear all timers (convert to array to avoid iterator issues)
353
+ const timerEntries = Array.from(this.timers.entries());
354
+ for (const [type, timer] of timerEntries) {
355
+ clearTimeout(timer);
356
+ this.log('info', `Stopped worker: ${type}`);
357
+ }
358
+ this.timers.clear();
359
+ this.running = false;
360
+ this.saveState();
361
+ this.emit('stopped', { stoppedAt: new Date() });
362
+ this.log('info', 'Daemon stopped');
363
+ }
506
364
  /**
507
365
  * Get daemon status
508
366
  */
509
- WorkerDaemon.prototype.getStatus = function () {
367
+ getStatus() {
510
368
  return {
511
369
  running: this.running,
512
370
  pid: process.pid,
513
371
  startedAt: this.startedAt,
514
372
  workers: new Map(this.workers),
515
- config: this.config
373
+ config: this.config,
516
374
  };
517
- };
375
+ }
518
376
  /**
519
377
  * Schedule a worker to run at intervals with staggered start
520
378
  */
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;
379
+ scheduleWorker(workerConfig) {
380
+ const state = this.workers.get(workerConfig.type);
381
+ const internalConfig = workerConfig;
382
+ const staggerOffset = internalConfig.offsetMs || 0;
526
383
  // Calculate initial delay with stagger offset
527
- var initialDelay = staggerOffset;
384
+ let initialDelay = staggerOffset;
528
385
  if (state.lastRun) {
529
- var timeSinceLastRun = Date.now() - state.lastRun.getTime();
386
+ const timeSinceLastRun = Date.now() - state.lastRun.getTime();
530
387
  initialDelay = Math.max(staggerOffset, workerConfig.intervalMs - timeSinceLastRun);
531
388
  }
532
389
  state.nextRun = new Date(Date.now() + initialDelay);
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
- }); };
390
+ const runAndReschedule = async () => {
391
+ if (!this.running)
392
+ return;
393
+ // Use concurrency-controlled execution (P0 fix)
394
+ await this.executeWorkerWithConcurrencyControl(workerConfig);
395
+ // Reschedule
396
+ if (this.running) {
397
+ const timer = setTimeout(runAndReschedule, workerConfig.intervalMs);
398
+ this.timers.set(workerConfig.type, timer);
399
+ state.nextRun = new Date(Date.now() + workerConfig.intervalMs);
400
+ }
401
+ };
555
402
  // Schedule first run with stagger offset
556
- var timer = setTimeout(runAndReschedule, initialDelay);
403
+ const timer = setTimeout(runAndReschedule, initialDelay);
557
404
  this.timers.set(workerConfig.type, timer);
558
- this.log('info', "Scheduled " + workerConfig.type + " (interval: " + workerConfig.intervalMs / 1000 + "s, first run in " + initialDelay / 1000 + "s)");
559
- };
405
+ this.log('info', `Scheduled ${workerConfig.type} (interval: ${workerConfig.intervalMs / 1000}s, first run in ${initialDelay / 1000}s)`);
406
+ }
560
407
  /**
561
408
  * Execute a worker with concurrency control (P0 fix)
562
409
  */
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
- };
410
+ async executeWorkerWithConcurrencyControl(workerConfig) {
411
+ // Check concurrency limit
412
+ if (this.runningWorkers.size >= this.config.maxConcurrent) {
413
+ this.log('info', `Worker ${workerConfig.type} deferred: max concurrent (${this.config.maxConcurrent}) reached`);
414
+ this.pendingWorkers.push(workerConfig.type);
415
+ this.emit('worker:deferred', { type: workerConfig.type, reason: 'max_concurrent' });
416
+ return null;
417
+ }
418
+ // Check resource availability
419
+ const resourceCheck = await this.canRunWorker();
420
+ if (!resourceCheck.allowed) {
421
+ this.log('info', `Worker ${workerConfig.type} deferred: ${resourceCheck.reason}`);
422
+ this.pendingWorkers.push(workerConfig.type);
423
+ this.emit('worker:deferred', { type: workerConfig.type, reason: resourceCheck.reason });
424
+ return null;
425
+ }
426
+ return this.executeWorker(workerConfig);
427
+ }
590
428
  /**
591
429
  * Execute a worker with timeout protection
592
430
  */
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*/];
431
+ async executeWorker(workerConfig) {
432
+ const state = this.workers.get(workerConfig.type);
433
+ const workerId = `${workerConfig.type}_${Date.now()}`;
434
+ const startTime = Date.now();
435
+ // Track running worker
436
+ this.runningWorkers.add(workerConfig.type);
437
+ state.isRunning = true;
438
+ this.emit('worker:start', { workerId, type: workerConfig.type });
439
+ this.log('info', `Starting worker: ${workerConfig.type} (${this.runningWorkers.size}/${this.config.maxConcurrent} concurrent)`);
440
+ try {
441
+ // Execute worker logic with timeout (P1 fix)
442
+ // Pass cleanup callback to kill orphan child processes on timeout (#1117)
443
+ const output = await this.runWithTimeout(() => this.runWorkerLogic(workerConfig), this.config.workerTimeoutMs, `Worker ${workerConfig.type} timed out after ${this.config.workerTimeoutMs / 1000}s`, () => {
444
+ // On timeout, cancel any headless execution to prevent orphan processes
445
+ if (this.headlessExecutor) {
446
+ this.headlessExecutor.cancelAll();
663
447
  }
664
448
  });
665
- });
666
- };
449
+ const durationMs = Date.now() - startTime;
450
+ // Update state
451
+ state.runCount++;
452
+ state.successCount++;
453
+ state.lastRun = new Date();
454
+ state.averageDurationMs = (state.averageDurationMs * (state.runCount - 1) + durationMs) / state.runCount;
455
+ state.isRunning = false;
456
+ const result = {
457
+ workerId,
458
+ type: workerConfig.type,
459
+ success: true,
460
+ durationMs,
461
+ output,
462
+ timestamp: new Date(),
463
+ };
464
+ this.emit('worker:complete', result);
465
+ this.log('info', `Worker ${workerConfig.type} completed in ${durationMs}ms`);
466
+ this.saveState();
467
+ return result;
468
+ }
469
+ catch (error) {
470
+ const durationMs = Date.now() - startTime;
471
+ state.runCount++;
472
+ state.failureCount++;
473
+ state.lastRun = new Date();
474
+ state.isRunning = false;
475
+ const result = {
476
+ workerId,
477
+ type: workerConfig.type,
478
+ success: false,
479
+ durationMs,
480
+ error: error instanceof Error ? error.message : String(error),
481
+ timestamp: new Date(),
482
+ };
483
+ this.emit('worker:error', result);
484
+ this.log('error', `Worker ${workerConfig.type} failed: ${result.error}`);
485
+ this.saveState();
486
+ return result;
487
+ }
488
+ finally {
489
+ // Remove from running set and process queue
490
+ this.runningWorkers.delete(workerConfig.type);
491
+ this.processPendingWorkers();
492
+ }
493
+ }
667
494
  /**
668
495
  * Run a function with timeout (P1 fix)
669
496
  * @param fn - The async function to execute
@@ -671,436 +498,371 @@ var WorkerDaemon = /** @class */ (function (_super) {
671
498
  * @param timeoutMessage - Error message on timeout
672
499
  * @param onTimeout - Optional cleanup callback invoked when timeout fires (#1117: kills orphan processes)
673
500
  */
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
- })];
501
+ async runWithTimeout(fn, timeoutMs, timeoutMessage, onTimeout) {
502
+ return new Promise((resolve, reject) => {
503
+ let settled = false;
504
+ const timer = setTimeout(() => {
505
+ if (settled)
506
+ return;
507
+ settled = true;
508
+ // Kill orphan child processes before rejecting (#1117)
509
+ if (onTimeout) {
510
+ try {
511
+ onTimeout();
512
+ }
513
+ catch {
514
+ // Ignore cleanup errors
515
+ }
516
+ }
517
+ reject(new Error(timeoutMessage));
518
+ }, timeoutMs);
519
+ fn()
520
+ .then((result) => {
521
+ if (settled)
522
+ return;
523
+ settled = true;
524
+ clearTimeout(timer);
525
+ resolve(result);
526
+ })
527
+ .catch((error) => {
528
+ if (settled)
529
+ return;
530
+ settled = true;
531
+ clearTimeout(timer);
532
+ reject(error);
709
533
  });
710
534
  });
711
- };
535
+ }
712
536
  /**
713
537
  * Run the actual worker logic
714
538
  */
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
- };
773
- // Worker implementations
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()
539
+ async runWorkerLogic(workerConfig) {
540
+ // Check if this is a headless worker type and headless execution is available
541
+ if (isHeadlessWorker(workerConfig.type) && this.headlessAvailable && this.headlessExecutor) {
542
+ try {
543
+ this.log('info', `Running ${workerConfig.type} in headless mode (Claude Code AI)`);
544
+ const result = await this.headlessExecutor.execute(workerConfig.type);
545
+ return {
546
+ mode: 'headless',
547
+ ...result,
793
548
  };
794
- writeFileSync(metricsFile, JSON.stringify(map, null, 2));
795
- return [2 /*return*/, map];
796
- });
797
- });
798
- };
549
+ }
550
+ catch (error) {
551
+ this.log('warn', `Headless execution failed for ${workerConfig.type}, falling back to local mode`);
552
+ this.emit('headless:fallback', {
553
+ type: workerConfig.type,
554
+ error: error instanceof Error ? error.message : String(error),
555
+ });
556
+ // Fall through to local execution
557
+ }
558
+ }
559
+ // Local execution (fallback or for non-headless workers)
560
+ switch (workerConfig.type) {
561
+ case 'map':
562
+ return this.runMapWorker();
563
+ case 'audit':
564
+ return this.runAuditWorkerLocal();
565
+ case 'optimize':
566
+ return this.runOptimizeWorkerLocal();
567
+ case 'consolidate':
568
+ return this.runConsolidateWorker();
569
+ case 'testgaps':
570
+ return this.runTestGapsWorkerLocal();
571
+ case 'predict':
572
+ return this.runPredictWorkerLocal();
573
+ case 'document':
574
+ return this.runDocumentWorkerLocal();
575
+ case 'ultralearn':
576
+ return this.runUltralearnWorkerLocal();
577
+ case 'refactor':
578
+ return this.runRefactorWorkerLocal();
579
+ case 'deepdive':
580
+ return this.runDeepdiveWorkerLocal();
581
+ case 'benchmark':
582
+ return this.runBenchmarkWorkerLocal();
583
+ case 'preload':
584
+ return this.runPreloadWorkerLocal();
585
+ default:
586
+ return { status: 'unknown worker type', mode: 'local' };
587
+ }
588
+ }
589
+ // Worker implementations
590
+ async runMapWorker() {
591
+ // Scan project structure and update metrics
592
+ const metricsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'codebase-map.json');
593
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
594
+ if (!existsSync(metricsDir)) {
595
+ mkdirSync(metricsDir, { recursive: true });
596
+ }
597
+ const map = {
598
+ timestamp: new Date().toISOString(),
599
+ projectRoot: this.projectRoot,
600
+ structure: {
601
+ hasPackageJson: existsSync(join(this.projectRoot, 'package.json')),
602
+ hasTsConfig: existsSync(join(this.projectRoot, 'tsconfig.json')),
603
+ hasClaudeConfig: existsSync(join(this.projectRoot, '.claude')),
604
+ hasClaudeFlow: existsSync(join(this.projectRoot, '.claude-flow')),
605
+ },
606
+ scannedAt: Date.now(),
607
+ };
608
+ writeFileSync(metricsFile, JSON.stringify(map, null, 2));
609
+ return map;
610
+ }
799
611
  /**
800
612
  * Local audit worker (fallback when headless unavailable)
801
613
  */
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
- };
614
+ async runAuditWorkerLocal() {
615
+ // Basic security checks
616
+ const auditFile = join(this.projectRoot, '.claude-flow', 'metrics', 'security-audit.json');
617
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
618
+ if (!existsSync(metricsDir)) {
619
+ mkdirSync(metricsDir, { recursive: true });
620
+ }
621
+ const audit = {
622
+ timestamp: new Date().toISOString(),
623
+ mode: 'local',
624
+ checks: {
625
+ envFilesProtected: !existsSync(join(this.projectRoot, '.env.local')),
626
+ gitIgnoreExists: existsSync(join(this.projectRoot, '.gitignore')),
627
+ noHardcodedSecrets: true, // Would need actual scanning
628
+ },
629
+ riskLevel: 'low',
630
+ recommendations: [],
631
+ note: 'Install Claude Code CLI for AI-powered security analysis',
632
+ };
633
+ writeFileSync(auditFile, JSON.stringify(audit, null, 2));
634
+ return audit;
635
+ }
828
636
  /**
829
637
  * Local optimize worker (fallback when headless unavailable)
830
638
  */
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
- };
639
+ async runOptimizeWorkerLocal() {
640
+ // Update performance metrics
641
+ const optimizeFile = join(this.projectRoot, '.claude-flow', 'metrics', 'performance.json');
642
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
643
+ if (!existsSync(metricsDir)) {
644
+ mkdirSync(metricsDir, { recursive: true });
645
+ }
646
+ const perf = {
647
+ timestamp: new Date().toISOString(),
648
+ mode: 'local',
649
+ memoryUsage: process.memoryUsage(),
650
+ uptime: process.uptime(),
651
+ optimizations: {
652
+ cacheHitRate: 0.78,
653
+ avgResponseTime: 45,
654
+ },
655
+ note: 'Install Claude Code CLI for AI-powered optimization suggestions',
656
+ };
657
+ writeFileSync(optimizeFile, JSON.stringify(perf, null, 2));
658
+ return perf;
659
+ }
660
+ async runConsolidateWorker() {
661
+ // Memory consolidation - clean up old patterns
662
+ const consolidateFile = join(this.projectRoot, '.claude-flow', 'metrics', 'consolidation.json');
663
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
664
+ if (!existsSync(metricsDir)) {
665
+ mkdirSync(metricsDir, { recursive: true });
666
+ }
667
+ const result = {
668
+ timestamp: new Date().toISOString(),
669
+ patternsConsolidated: 0,
670
+ memoryCleaned: 0,
671
+ duplicatesRemoved: 0,
672
+ };
673
+ writeFileSync(consolidateFile, JSON.stringify(result, null, 2));
674
+ return result;
675
+ }
876
676
  /**
877
677
  * Local testgaps worker (fallback when headless unavailable)
878
678
  */
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
- };
679
+ async runTestGapsWorkerLocal() {
680
+ // Check for test coverage gaps
681
+ const testGapsFile = join(this.projectRoot, '.claude-flow', 'metrics', 'test-gaps.json');
682
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
683
+ if (!existsSync(metricsDir)) {
684
+ mkdirSync(metricsDir, { recursive: true });
685
+ }
686
+ const result = {
687
+ timestamp: new Date().toISOString(),
688
+ mode: 'local',
689
+ hasTestDir: existsSync(join(this.projectRoot, 'tests')) || existsSync(join(this.projectRoot, '__tests__')),
690
+ estimatedCoverage: 'unknown',
691
+ gaps: [],
692
+ note: 'Install Claude Code CLI for AI-powered test gap analysis',
693
+ };
694
+ writeFileSync(testGapsFile, JSON.stringify(result, null, 2));
695
+ return result;
696
+ }
901
697
  /**
902
698
  * Local predict worker (fallback when headless unavailable)
903
699
  */
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
- };
700
+ async runPredictWorkerLocal() {
701
+ return {
702
+ timestamp: new Date().toISOString(),
703
+ mode: 'local',
704
+ predictions: [],
705
+ preloaded: [],
706
+ note: 'Install Claude Code CLI for AI-powered predictions',
707
+ };
708
+ }
917
709
  /**
918
710
  * Local document worker (fallback when headless unavailable)
919
711
  */
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
- };
712
+ async runDocumentWorkerLocal() {
713
+ return {
714
+ timestamp: new Date().toISOString(),
715
+ mode: 'local',
716
+ filesDocumented: 0,
717
+ suggestedDocs: [],
718
+ note: 'Install Claude Code CLI for AI-powered documentation generation',
719
+ };
720
+ }
933
721
  /**
934
722
  * Local ultralearn worker (fallback when headless unavailable)
935
723
  */
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
- };
724
+ async runUltralearnWorkerLocal() {
725
+ return {
726
+ timestamp: new Date().toISOString(),
727
+ mode: 'local',
728
+ patternsLearned: 0,
729
+ insightsGained: [],
730
+ note: 'Install Claude Code CLI for AI-powered deep learning',
731
+ };
732
+ }
949
733
  /**
950
734
  * Local refactor worker (fallback when headless unavailable)
951
735
  */
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
- };
736
+ async runRefactorWorkerLocal() {
737
+ return {
738
+ timestamp: new Date().toISOString(),
739
+ mode: 'local',
740
+ suggestions: [],
741
+ duplicatesFound: 0,
742
+ note: 'Install Claude Code CLI for AI-powered refactoring suggestions',
743
+ };
744
+ }
965
745
  /**
966
746
  * Local deepdive worker (fallback when headless unavailable)
967
747
  */
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
- };
748
+ async runDeepdiveWorkerLocal() {
749
+ return {
750
+ timestamp: new Date().toISOString(),
751
+ mode: 'local',
752
+ analysisDepth: 'shallow',
753
+ findings: [],
754
+ note: 'Install Claude Code CLI for AI-powered deep code analysis',
755
+ };
756
+ }
981
757
  /**
982
758
  * Local benchmark worker
983
759
  */
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
- };
760
+ async runBenchmarkWorkerLocal() {
761
+ const benchmarkFile = join(this.projectRoot, '.claude-flow', 'metrics', 'benchmark.json');
762
+ const metricsDir = join(this.projectRoot, '.claude-flow', 'metrics');
763
+ if (!existsSync(metricsDir)) {
764
+ mkdirSync(metricsDir, { recursive: true });
765
+ }
766
+ const result = {
767
+ timestamp: new Date().toISOString(),
768
+ mode: 'local',
769
+ benchmarks: {
770
+ memoryUsage: process.memoryUsage(),
771
+ cpuUsage: process.cpuUsage(),
772
+ uptime: process.uptime(),
773
+ },
774
+ };
775
+ writeFileSync(benchmarkFile, JSON.stringify(result, null, 2));
776
+ return result;
777
+ }
1007
778
  /**
1008
779
  * Local preload worker
1009
780
  */
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
- };
781
+ async runPreloadWorkerLocal() {
782
+ return {
783
+ timestamp: new Date().toISOString(),
784
+ mode: 'local',
785
+ resourcesPreloaded: 0,
786
+ cacheStatus: 'active',
787
+ };
788
+ }
1022
789
  /**
1023
790
  * Manually trigger a worker
1024
791
  */
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
- };
792
+ async triggerWorker(type) {
793
+ const workerConfig = this.config.workers.find(w => w.type === type);
794
+ if (!workerConfig) {
795
+ throw new Error(`Unknown worker type: ${type}`);
796
+ }
797
+ return this.executeWorker(workerConfig);
798
+ }
1037
799
  /**
1038
800
  * Enable/disable a worker
1039
801
  */
1040
- WorkerDaemon.prototype.setWorkerEnabled = function (type, enabled) {
1041
- var workerConfig = this.config.workers.find(function (w) { return w.type === type; });
802
+ setWorkerEnabled(type, enabled) {
803
+ const workerConfig = this.config.workers.find(w => w.type === type);
1042
804
  if (workerConfig) {
1043
805
  workerConfig.enabled = enabled;
1044
806
  if (enabled && this.running) {
1045
807
  this.scheduleWorker(workerConfig);
1046
808
  }
1047
809
  else if (!enabled) {
1048
- var timer = this.timers.get(type);
810
+ const timer = this.timers.get(type);
1049
811
  if (timer) {
1050
812
  clearTimeout(timer);
1051
- this.timers["delete"](type);
813
+ this.timers.delete(type);
1052
814
  }
1053
815
  }
1054
816
  this.saveState();
1055
817
  }
1056
- };
818
+ }
1057
819
  /**
1058
820
  * Save daemon state to file
1059
821
  */
1060
- WorkerDaemon.prototype.saveState = function () {
1061
- var _a;
1062
- var state = {
822
+ saveState() {
823
+ const state = {
1063
824
  running: this.running,
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()
825
+ startedAt: this.startedAt?.toISOString(),
826
+ workers: Object.fromEntries(Array.from(this.workers.entries()).map(([type, state]) => [
827
+ type,
828
+ {
829
+ ...state,
830
+ lastRun: state.lastRun?.toISOString(),
831
+ nextRun: state.nextRun?.toISOString(),
832
+ }
833
+ ])),
834
+ config: {
835
+ ...this.config,
836
+ workers: this.config.workers.map(w => ({ ...w })),
837
+ },
838
+ savedAt: new Date().toISOString(),
1075
839
  };
1076
840
  try {
1077
841
  writeFileSync(this.config.stateFile, JSON.stringify(state, null, 2));
1078
842
  }
1079
843
  catch (error) {
1080
- this.log('error', "Failed to save state: " + error);
844
+ this.log('error', `Failed to save state: ${error}`);
1081
845
  }
1082
- };
846
+ }
1083
847
  /**
1084
848
  * Log message
1085
849
  */
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 });
850
+ log(level, message) {
851
+ const timestamp = new Date().toISOString();
852
+ const logMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
853
+ this.emit('log', { level, message, timestamp });
1090
854
  // Also write to log file
1091
855
  try {
1092
- var logFile = join(this.config.logDir, 'daemon.log');
856
+ const logFile = join(this.config.logDir, 'daemon.log');
1093
857
  appendFileSync(logFile, logMessage + '\n');
1094
858
  }
1095
- catch (_a) {
859
+ catch {
1096
860
  // Ignore log write errors
1097
861
  }
1098
- };
1099
- return WorkerDaemon;
1100
- }(EventEmitter));
1101
- export { WorkerDaemon };
862
+ }
863
+ }
1102
864
  // Singleton instance for global access
1103
- var daemonInstance = null;
865
+ let daemonInstance = null;
1104
866
  /**
1105
867
  * Get or create daemon instance
1106
868
  */
@@ -1116,38 +878,18 @@ export function getDaemon(projectRoot, config) {
1116
878
  /**
1117
879
  * Start daemon (for use in session-start hook)
1118
880
  */
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
- });
881
+ export async function startDaemon(projectRoot, config) {
882
+ const daemon = getDaemon(projectRoot, config);
883
+ await daemon.start();
884
+ return daemon;
1133
885
  }
1134
886
  /**
1135
887
  * Stop daemon
1136
888
  */
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
- });
889
+ export async function stopDaemon() {
890
+ if (daemonInstance) {
891
+ await daemonInstance.stop();
892
+ }
1151
893
  }
1152
894
  export default WorkerDaemon;
1153
895
  //# sourceMappingURL=worker-daemon.js.map