kynjal-cli 3.1.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/core/planner.md +2 -2
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/core/reviewer.md +1 -1
  5. package/.claude/agents/core/tester.md +1 -1
  6. package/.claude/agents/data/data-ml-model.md +4 -4
  7. package/.claude/agents/development/dev-backend-api.md +4 -4
  8. package/.claude/agents/documentation/docs-api-openapi.md +4 -4
  9. package/.claude/agents/github/code-review-swarm.md +2 -2
  10. package/.claude/agents/github/issue-tracker.md +2 -2
  11. package/.claude/agents/github/pr-manager.md +2 -2
  12. package/.claude/agents/github/release-manager.md +2 -2
  13. package/.claude/agents/github/workflow-automation.md +2 -2
  14. package/.claude/agents/sparc/architecture.md +3 -3
  15. package/.claude/agents/sparc/pseudocode.md +2 -2
  16. package/.claude/agents/sparc/refinement.md +3 -3
  17. package/.claude/agents/sparc/specification.md +2 -2
  18. package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
  19. package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
  20. package/.claude/agents/swarm/mesh-coordinator.md +1 -1
  21. package/.claude/agents/templates/base-template-generator.md +25 -4
  22. package/.claude/agents/templates/sparc-coordinator.md +3 -3
  23. package/.claude/helpers/auto-commit.sh +1 -1
  24. package/.claude/helpers/auto-memory-hook.mjs +27 -9
  25. package/.claude/helpers/hook-handler.cjs +58 -18
  26. package/.claude/helpers/statusline.cjs +14 -33
  27. package/.claude/helpers/statusline.js +3 -3
  28. package/.claude/settings.json +9 -9
  29. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  30. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  31. package/README.md +383 -170
  32. package/bin/cli.js +6 -6
  33. package/bin/mcp-server.js +1 -1
  34. package/bin/preinstall.cjs +2 -0
  35. package/dist/src/appliance/gguf-engine.js +664 -0
  36. package/dist/src/appliance/gguf-engine.js.map +1 -0
  37. package/dist/src/appliance/ruvllm-bridge.js +492 -0
  38. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  39. package/dist/src/appliance/rvfa-builder.js +383 -0
  40. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  41. package/dist/src/appliance/rvfa-distribution.js +533 -0
  42. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  43. package/dist/src/appliance/rvfa-format.js +465 -0
  44. package/dist/src/appliance/rvfa-format.js.map +1 -0
  45. package/dist/src/appliance/rvfa-runner.js +373 -0
  46. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  47. package/dist/src/appliance/rvfa-signing.js +469 -0
  48. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  49. package/dist/src/benchmarks/pretrain/index.js +542 -331
  50. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  51. package/dist/src/commands/agent.d.ts.map +1 -1
  52. package/dist/src/commands/agent.js +725 -502
  53. package/dist/src/commands/agent.js.map +1 -1
  54. package/dist/src/commands/analyze.js +1548 -1218
  55. package/dist/src/commands/analyze.js.map +1 -1
  56. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  57. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  58. package/dist/src/commands/appliance-advanced.js +324 -0
  59. package/dist/src/commands/appliance-advanced.js.map +1 -0
  60. package/dist/src/commands/appliance.d.ts +8 -0
  61. package/dist/src/commands/appliance.d.ts.map +1 -0
  62. package/dist/src/commands/appliance.js +581 -0
  63. package/dist/src/commands/appliance.js.map +1 -0
  64. package/dist/src/commands/benchmark.js +523 -372
  65. package/dist/src/commands/benchmark.js.map +1 -1
  66. package/dist/src/commands/claims.js +364 -274
  67. package/dist/src/commands/claims.js.map +1 -1
  68. package/dist/src/commands/cleanup.d.ts +13 -0
  69. package/dist/src/commands/cleanup.d.ts.map +1 -0
  70. package/dist/src/commands/cleanup.js +262 -0
  71. package/dist/src/commands/cleanup.js.map +1 -0
  72. package/dist/src/commands/completions.js +118 -477
  73. package/dist/src/commands/completions.js.map +1 -1
  74. package/dist/src/commands/config.js +303 -237
  75. package/dist/src/commands/config.js.map +1 -1
  76. package/dist/src/commands/daemon.d.ts.map +1 -1
  77. package/dist/src/commands/daemon.js +597 -425
  78. package/dist/src/commands/daemon.js.map +1 -1
  79. package/dist/src/commands/deployment.js +275 -194
  80. package/dist/src/commands/deployment.js.map +1 -1
  81. package/dist/src/commands/doctor.d.ts.map +1 -1
  82. package/dist/src/commands/doctor.js +690 -460
  83. package/dist/src/commands/doctor.js.map +1 -1
  84. package/dist/src/commands/embeddings.js +1543 -1293
  85. package/dist/src/commands/embeddings.js.map +1 -1
  86. package/dist/src/commands/guidance.js +596 -449
  87. package/dist/src/commands/guidance.js.map +1 -1
  88. package/dist/src/commands/hive-mind.js +938 -854
  89. package/dist/src/commands/hive-mind.js.map +1 -1
  90. package/dist/src/commands/hooks.d.ts.map +1 -1
  91. package/dist/src/commands/hooks.js +3677 -2570
  92. package/dist/src/commands/hooks.js.map +1 -1
  93. package/dist/src/commands/index.js +322 -122
  94. package/dist/src/commands/index.js.map +1 -1
  95. package/dist/src/commands/init.d.ts +1 -1
  96. package/dist/src/commands/init.d.ts.map +1 -1
  97. package/dist/src/commands/init.js +943 -787
  98. package/dist/src/commands/init.js.map +1 -1
  99. package/dist/src/commands/issues.js +558 -383
  100. package/dist/src/commands/issues.js.map +1 -1
  101. package/dist/src/commands/mcp.d.ts.map +1 -1
  102. package/dist/src/commands/mcp.js +605 -475
  103. package/dist/src/commands/mcp.js.map +1 -1
  104. package/dist/src/commands/memory.d.ts.map +1 -1
  105. package/dist/src/commands/memory.js +1031 -814
  106. package/dist/src/commands/memory.js.map +1 -1
  107. package/dist/src/commands/migrate.js +347 -282
  108. package/dist/src/commands/migrate.js.map +1 -1
  109. package/dist/src/commands/neural.d.ts.map +1 -1
  110. package/dist/src/commands/neural.js +1563 -1283
  111. package/dist/src/commands/neural.js.map +1 -1
  112. package/dist/src/commands/performance.js +643 -497
  113. package/dist/src/commands/performance.js.map +1 -1
  114. package/dist/src/commands/plugins.js +841 -668
  115. package/dist/src/commands/plugins.js.map +1 -1
  116. package/dist/src/commands/process.js +447 -392
  117. package/dist/src/commands/process.js.map +1 -1
  118. package/dist/src/commands/progress.js +256 -162
  119. package/dist/src/commands/progress.js.map +1 -1
  120. package/dist/src/commands/providers.js +220 -150
  121. package/dist/src/commands/providers.js.map +1 -1
  122. package/dist/src/commands/route.js +665 -520
  123. package/dist/src/commands/route.js.map +1 -1
  124. package/dist/src/commands/ruvector/backup.js +651 -505
  125. package/dist/src/commands/ruvector/backup.js.map +1 -1
  126. package/dist/src/commands/ruvector/benchmark.js +401 -349
  127. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  128. package/dist/src/commands/ruvector/import.js +267 -225
  129. package/dist/src/commands/ruvector/import.js.map +1 -1
  130. package/dist/src/commands/ruvector/index.js +75 -37
  131. package/dist/src/commands/ruvector/index.js.map +1 -1
  132. package/dist/src/commands/ruvector/init.js +359 -336
  133. package/dist/src/commands/ruvector/init.js.map +1 -1
  134. package/dist/src/commands/ruvector/migrate.js +322 -335
  135. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  136. package/dist/src/commands/ruvector/optimize.js +431 -375
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  138. package/dist/src/commands/ruvector/setup.js +117 -703
  139. package/dist/src/commands/ruvector/setup.js.map +1 -1
  140. package/dist/src/commands/ruvector/status.js +419 -364
  141. package/dist/src/commands/ruvector/status.js.map +1 -1
  142. package/dist/src/commands/security.d.ts.map +1 -1
  143. package/dist/src/commands/security.js +610 -456
  144. package/dist/src/commands/security.js.map +1 -1
  145. package/dist/src/commands/session.d.ts +1 -1
  146. package/dist/src/commands/session.js +627 -505
  147. package/dist/src/commands/session.js.map +1 -1
  148. package/dist/src/commands/start.d.ts +1 -1
  149. package/dist/src/commands/start.js +368 -271
  150. package/dist/src/commands/start.js.map +1 -1
  151. package/dist/src/commands/status.d.ts +1 -1
  152. package/dist/src/commands/status.d.ts.map +1 -1
  153. package/dist/src/commands/status.js +492 -379
  154. package/dist/src/commands/status.js.map +1 -1
  155. package/dist/src/commands/swarm.js +488 -408
  156. package/dist/src/commands/swarm.js.map +1 -1
  157. package/dist/src/commands/task.d.ts +1 -1
  158. package/dist/src/commands/task.js +539 -424
  159. package/dist/src/commands/task.js.map +1 -1
  160. package/dist/src/commands/transfer-store.js +412 -322
  161. package/dist/src/commands/transfer-store.js.map +1 -1
  162. package/dist/src/commands/update.js +291 -196
  163. package/dist/src/commands/update.js.map +1 -1
  164. package/dist/src/commands/workflow.js +486 -386
  165. package/dist/src/commands/workflow.js.map +1 -1
  166. package/dist/src/config-adapter.js +40 -39
  167. package/dist/src/config-adapter.js.map +1 -1
  168. package/dist/src/index.js +416 -312
  169. package/dist/src/index.js.map +1 -1
  170. package/dist/src/infrastructure/in-memory-repositories.js +507 -246
  171. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  172. package/dist/src/init/claudemd-generator.js +78 -368
  173. package/dist/src/init/claudemd-generator.js.map +1 -1
  174. package/dist/src/init/executor.js +1019 -1345
  175. package/dist/src/init/executor.js.map +1 -1
  176. package/dist/src/init/helpers-generator.js +60 -635
  177. package/dist/src/init/helpers-generator.js.map +1 -1
  178. package/dist/src/init/index.d.ts +1 -1
  179. package/dist/src/init/index.d.ts.map +1 -1
  180. package/dist/src/init/index.js +1 -1
  181. package/dist/src/init/index.js.map +1 -1
  182. package/dist/src/init/mcp-generator.d.ts +0 -1
  183. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  184. package/dist/src/init/mcp-generator.js +62 -42
  185. package/dist/src/init/mcp-generator.js.map +1 -1
  186. package/dist/src/init/settings-generator.d.ts.map +1 -1
  187. package/dist/src/init/settings-generator.js +167 -100
  188. package/dist/src/init/settings-generator.js.map +1 -1
  189. package/dist/src/init/statusline-generator.d.ts +16 -8
  190. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  191. package/dist/src/init/statusline-generator.js +20 -1300
  192. package/dist/src/init/statusline-generator.js.map +1 -1
  193. package/dist/src/init/types.d.ts +15 -5
  194. package/dist/src/init/types.d.ts.map +1 -1
  195. package/dist/src/init/types.js +66 -76
  196. package/dist/src/init/types.js.map +1 -1
  197. package/dist/src/mcp-client.js +130 -76
  198. package/dist/src/mcp-client.js.map +1 -1
  199. package/dist/src/mcp-server.js +758 -445
  200. package/dist/src/mcp-server.js.map +1 -1
  201. package/dist/src/mcp-tools/agent-tools.js +492 -391
  202. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  204. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
  205. package/dist/src/mcp-tools/agentdb-tools.js +758 -0
  206. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
  207. package/dist/src/mcp-tools/analyze-tools.js +236 -172
  208. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/auto-install.js +142 -80
  210. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  211. package/dist/src/mcp-tools/browser-tools.js +375 -252
  212. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/claims-tools.js +565 -473
  214. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  216. package/dist/src/mcp-tools/config-tools.js +284 -190
  217. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  218. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  219. package/dist/src/mcp-tools/coordination-tools.js +600 -349
  220. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/daa-tools.js +367 -289
  222. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/embeddings-tools.js +693 -582
  224. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/github-tools.js +312 -261
  226. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  228. package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
  229. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  230. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  231. package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
  232. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  233. package/dist/src/mcp-tools/index.d.ts +2 -0
  234. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/index.js +2 -0
  236. package/dist/src/mcp-tools/index.js.map +1 -1
  237. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  238. package/dist/src/mcp-tools/memory-tools.js +514 -329
  239. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  240. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  241. package/dist/src/mcp-tools/neural-tools.js +428 -326
  242. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  243. package/dist/src/mcp-tools/performance-tools.js +480 -420
  244. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  245. package/dist/src/mcp-tools/progress-tools.js +278 -204
  246. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  248. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
  249. package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
  250. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
  251. package/dist/src/mcp-tools/security-tools.js +429 -297
  252. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/session-tools.js +234 -185
  254. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
  256. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/swarm-tools.js +303 -64
  258. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/system-tools.js +352 -200
  261. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  262. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/task-tools.js +357 -189
  264. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/terminal-tools.js +196 -148
  266. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  267. package/dist/src/mcp-tools/transfer-tools.js +333 -186
  268. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  269. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  270. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
  271. package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
  272. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
  273. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  274. package/dist/src/mcp-tools/workflow-tools.js +471 -335
  275. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  276. package/dist/src/memory/ewc-consolidation.js +345 -173
  277. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  278. package/dist/src/memory/intelligence.js +841 -359
  279. package/dist/src/memory/intelligence.js.map +1 -1
  280. package/dist/src/memory/memory-bridge.js +1964 -0
  281. package/dist/src/memory/memory-bridge.js.map +1 -0
  282. package/dist/src/memory/memory-initializer.js +1895 -1602
  283. package/dist/src/memory/memory-initializer.js.map +1 -1
  284. package/dist/src/memory/sona-optimizer.js +329 -199
  285. package/dist/src/memory/sona-optimizer.js.map +1 -1
  286. package/dist/src/output.d.ts +2 -2
  287. package/dist/src/output.d.ts.map +1 -1
  288. package/dist/src/output.js +273 -242
  289. package/dist/src/output.js.map +1 -1
  290. package/dist/src/parser.js +217 -124
  291. package/dist/src/parser.js.map +1 -1
  292. package/dist/src/plugins/manager.js +531 -278
  293. package/dist/src/plugins/manager.js.map +1 -1
  294. package/dist/src/plugins/store/discovery.js +362 -275
  295. package/dist/src/plugins/store/discovery.js.map +1 -1
  296. package/dist/src/plugins/store/index.js +105 -48
  297. package/dist/src/plugins/store/index.js.map +1 -1
  298. package/dist/src/plugins/store/search.js +107 -69
  299. package/dist/src/plugins/store/search.js.map +1 -1
  300. package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
  301. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  302. package/dist/src/plugins/tests/standalone-test.js +223 -172
  303. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  304. package/dist/src/plugins/tests/test-plugin-store.js +228 -190
  305. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  306. package/dist/src/production/circuit-breaker.js +126 -62
  307. package/dist/src/production/circuit-breaker.js.map +1 -1
  308. package/dist/src/production/error-handler.js +156 -86
  309. package/dist/src/production/error-handler.js.map +1 -1
  310. package/dist/src/production/monitoring.js +220 -139
  311. package/dist/src/production/monitoring.js.map +1 -1
  312. package/dist/src/production/rate-limiter.js +93 -74
  313. package/dist/src/production/rate-limiter.js.map +1 -1
  314. package/dist/src/production/retry.js +167 -75
  315. package/dist/src/production/retry.js.map +1 -1
  316. package/dist/src/prompt.js +560 -436
  317. package/dist/src/prompt.js.map +1 -1
  318. package/dist/src/runtime/headless.js +289 -200
  319. package/dist/src/runtime/headless.js.map +1 -1
  320. package/dist/src/ruvector/agent-wasm.js +511 -0
  321. package/dist/src/ruvector/agent-wasm.js.map +1 -0
  322. package/dist/src/ruvector/ast-analyzer.js +232 -145
  323. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  324. package/dist/src/ruvector/coverage-router.js +419 -287
  325. package/dist/src/ruvector/coverage-router.js.map +1 -1
  326. package/dist/src/ruvector/coverage-tools.js +101 -56
  327. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  328. package/dist/src/ruvector/diff-classifier.js +451 -324
  329. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  330. package/dist/src/ruvector/enhanced-model-router.js +337 -251
  331. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  332. package/dist/src/ruvector/flash-attention.js +254 -223
  333. package/dist/src/ruvector/flash-attention.js.map +1 -1
  334. package/dist/src/ruvector/graph-analyzer.js +680 -486
  335. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  336. package/dist/src/ruvector/index.js +113 -27
  337. package/dist/src/ruvector/index.js.map +1 -1
  338. package/dist/src/ruvector/lora-adapter.js +248 -155
  339. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  340. package/dist/src/ruvector/model-router.js +248 -175
  341. package/dist/src/ruvector/model-router.js.map +1 -1
  342. package/dist/src/ruvector/moe-router.js +286 -228
  343. package/dist/src/ruvector/moe-router.js.map +1 -1
  344. package/dist/src/ruvector/q-learning-router.js +338 -257
  345. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  346. package/dist/src/ruvector/ruvllm-wasm.js +527 -0
  347. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
  348. package/dist/src/ruvector/semantic-router.js +67 -60
  349. package/dist/src/ruvector/semantic-router.js.map +1 -1
  350. package/dist/src/ruvector/vector-db.js +205 -119
  351. package/dist/src/ruvector/vector-db.js.map +1 -1
  352. package/dist/src/services/agentic-flow-bridge.js +168 -0
  353. package/dist/src/services/agentic-flow-bridge.js.map +1 -0
  354. package/dist/src/services/claim-service.js +940 -615
  355. package/dist/src/services/claim-service.js.map +1 -1
  356. package/dist/src/services/container-worker-pool.js +669 -399
  357. package/dist/src/services/container-worker-pool.js.map +1 -1
  358. package/dist/src/services/headless-worker-executor.js +467 -441
  359. package/dist/src/services/headless-worker-executor.js.map +1 -1
  360. package/dist/src/services/index.d.ts +5 -5
  361. package/dist/src/services/index.d.ts.map +1 -1
  362. package/dist/src/services/index.js +4 -4
  363. package/dist/src/services/index.js.map +1 -1
  364. package/dist/src/services/registry-api.js +201 -93
  365. package/dist/src/services/registry-api.js.map +1 -1
  366. package/dist/src/services/ruvector-training.js +414 -144
  367. package/dist/src/services/ruvector-training.js.map +1 -1
  368. package/dist/src/services/worker-daemon.js +928 -531
  369. package/dist/src/services/worker-daemon.js.map +1 -1
  370. package/dist/src/services/worker-queue.js +550 -331
  371. package/dist/src/services/worker-queue.js.map +1 -1
  372. package/dist/src/suggest.js +55 -45
  373. package/dist/src/suggest.js.map +1 -1
  374. package/dist/src/transfer/anonymization/index.js +37 -29
  375. package/dist/src/transfer/anonymization/index.js.map +1 -1
  376. package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
  377. package/dist/src/transfer/deploy-seraphine.js +156 -129
  378. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  379. package/dist/src/transfer/export.js +142 -84
  380. package/dist/src/transfer/export.js.map +1 -1
  381. package/dist/src/transfer/index.d.ts +1 -1
  382. package/dist/src/transfer/index.d.ts.map +1 -1
  383. package/dist/src/transfer/index.js +2 -0
  384. package/dist/src/transfer/index.js.map +1 -1
  385. package/dist/src/transfer/ipfs/client.js +337 -179
  386. package/dist/src/transfer/ipfs/client.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.js +434 -290
  388. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  389. package/dist/src/transfer/models/seraphine.js +58 -58
  390. package/dist/src/transfer/models/seraphine.js.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +37 -33
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.js +248 -139
  394. package/dist/src/transfer/storage/gcs.js.map +1 -1
  395. package/dist/src/transfer/store/discovery.js +353 -243
  396. package/dist/src/transfer/store/discovery.js.map +1 -1
  397. package/dist/src/transfer/store/download.js +365 -243
  398. package/dist/src/transfer/store/download.js.map +1 -1
  399. package/dist/src/transfer/store/index.js +130 -63
  400. package/dist/src/transfer/store/index.js.map +1 -1
  401. package/dist/src/transfer/store/publish.js +258 -184
  402. package/dist/src/transfer/store/publish.js.map +1 -1
  403. package/dist/src/transfer/store/registry.js +73 -51
  404. package/dist/src/transfer/store/registry.js.map +1 -1
  405. package/dist/src/transfer/store/search.js +96 -64
  406. package/dist/src/transfer/store/search.js.map +1 -1
  407. package/dist/src/transfer/store/tests/standalone-test.js +231 -174
  408. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  409. package/dist/src/transfer/test-seraphine.js +130 -95
  410. package/dist/src/transfer/test-seraphine.js.map +1 -1
  411. package/dist/src/transfer/tests/test-store.js +239 -194
  412. package/dist/src/transfer/tests/test-store.js.map +1 -1
  413. package/dist/src/types.js +56 -27
  414. package/dist/src/types.js.map +1 -1
  415. package/dist/src/update/checker.js +183 -106
  416. package/dist/src/update/checker.js.map +1 -1
  417. package/dist/src/update/executor.js +198 -135
  418. package/dist/src/update/executor.js.map +1 -1
  419. package/dist/src/update/index.js +85 -38
  420. package/dist/src/update/index.js.map +1 -1
  421. package/dist/src/update/rate-limiter.js +31 -19
  422. package/dist/src/update/rate-limiter.js.map +1 -1
  423. package/dist/src/update/validator.js +64 -38
  424. package/dist/src/update/validator.js.map +1 -1
  425. package/dist/tsconfig.tsbuildinfo +1 -1
  426. package/package.json +13 -10
  427. package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
  428. package/.claude/agents/custom/design-architect.yaml +0 -48
  429. package/.claude/agents/custom/ui-developer.yaml +0 -46
  430. package/.claude/agents/custom/ux-researcher.yaml +0 -60
  431. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  432. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  433. package/dist/src/commands/index.d.ts +0 -108
  434. package/dist/src/commands/index.d.ts.map +0 -1
  435. package/dist/src/config-adapter.d.ts +0 -15
  436. package/dist/src/config-adapter.d.ts.map +0 -1
  437. package/dist/src/index.d.ts +0 -76
  438. package/dist/src/index.d.ts.map +0 -1
  439. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  440. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  441. package/dist/src/init/claudemd-generator.d.ts +0 -25
  442. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  443. package/dist/src/init/executor.d.ts +0 -41
  444. package/dist/src/init/executor.d.ts.map +0 -1
  445. package/dist/src/init/helpers-generator.d.ts +0 -60
  446. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  447. package/dist/src/mcp-client.d.ts +0 -92
  448. package/dist/src/mcp-client.d.ts.map +0 -1
  449. package/dist/src/mcp-server.d.ts +0 -161
  450. package/dist/src/mcp-server.d.ts.map +0 -1
  451. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  452. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  453. package/dist/src/mcp-tools/types.d.ts +0 -31
  454. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  455. package/dist/src/memory/ewc-consolidation.d.ts +0 -271
  456. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  457. package/dist/src/memory/intelligence.d.ts +0 -285
  458. package/dist/src/memory/intelligence.d.ts.map +0 -1
  459. package/dist/src/memory/memory-initializer.d.ts +0 -396
  460. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  461. package/dist/src/memory/sona-optimizer.d.ts +0 -227
  462. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  463. package/dist/src/parser.d.ts +0 -41
  464. package/dist/src/parser.d.ts.map +0 -1
  465. package/dist/src/plugins/manager.d.ts +0 -133
  466. package/dist/src/plugins/manager.d.ts.map +0 -1
  467. package/dist/src/plugins/store/discovery.d.ts +0 -88
  468. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  469. package/dist/src/plugins/store/index.d.ts +0 -76
  470. package/dist/src/plugins/store/index.d.ts.map +0 -1
  471. package/dist/src/plugins/store/search.d.ts +0 -46
  472. package/dist/src/plugins/store/search.d.ts.map +0 -1
  473. package/dist/src/plugins/store/types.d.ts +0 -274
  474. package/dist/src/plugins/store/types.d.ts.map +0 -1
  475. package/dist/src/production/circuit-breaker.d.ts +0 -101
  476. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  477. package/dist/src/production/error-handler.d.ts +0 -92
  478. package/dist/src/production/error-handler.d.ts.map +0 -1
  479. package/dist/src/production/monitoring.d.ts +0 -161
  480. package/dist/src/production/monitoring.d.ts.map +0 -1
  481. package/dist/src/production/rate-limiter.d.ts +0 -80
  482. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  483. package/dist/src/production/retry.d.ts +0 -48
  484. package/dist/src/production/retry.d.ts.map +0 -1
  485. package/dist/src/prompt.d.ts +0 -44
  486. package/dist/src/prompt.d.ts.map +0 -1
  487. package/dist/src/runtime/headless.d.ts +0 -60
  488. package/dist/src/runtime/headless.d.ts.map +0 -1
  489. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  490. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  491. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  492. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  493. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  494. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  495. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
  496. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  497. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  498. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  499. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  500. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  501. package/dist/src/ruvector/index.d.ts +0 -34
  502. package/dist/src/ruvector/index.d.ts.map +0 -1
  503. package/dist/src/ruvector/lora-adapter.d.ts +0 -218
  504. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  505. package/dist/src/ruvector/model-router.d.ts +0 -220
  506. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  507. package/dist/src/ruvector/moe-router.d.ts +0 -206
  508. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  509. package/dist/src/ruvector/q-learning-router.d.ts +0 -211
  510. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  511. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  512. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  513. package/dist/src/ruvector/vector-db.d.ts +0 -69
  514. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  515. package/dist/src/services/claim-service.d.ts +0 -204
  516. package/dist/src/services/claim-service.d.ts.map +0 -1
  517. package/dist/src/services/container-worker-pool.d.ts +0 -197
  518. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  519. package/dist/src/services/headless-worker-executor.d.ts +0 -304
  520. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  521. package/dist/src/services/registry-api.d.ts +0 -58
  522. package/dist/src/services/registry-api.d.ts.map +0 -1
  523. package/dist/src/services/ruvector-training.d.ts +0 -213
  524. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  525. package/dist/src/services/worker-daemon.d.ts +0 -203
  526. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  527. package/dist/src/services/worker-queue.d.ts +0 -194
  528. package/dist/src/services/worker-queue.d.ts.map +0 -1
  529. package/dist/src/suggest.d.ts +0 -53
  530. package/dist/src/suggest.d.ts.map +0 -1
  531. package/dist/src/transfer/export.d.ts +0 -25
  532. package/dist/src/transfer/export.d.ts.map +0 -1
  533. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  534. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  535. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  536. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  537. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  538. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  539. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  540. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  541. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  542. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  543. package/dist/src/transfer/store/discovery.d.ts +0 -84
  544. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  545. package/dist/src/transfer/store/download.d.ts +0 -70
  546. package/dist/src/transfer/store/download.d.ts.map +0 -1
  547. package/dist/src/transfer/store/index.d.ts +0 -84
  548. package/dist/src/transfer/store/index.d.ts.map +0 -1
  549. package/dist/src/transfer/store/publish.d.ts +0 -76
  550. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  551. package/dist/src/transfer/store/search.d.ts +0 -54
  552. package/dist/src/transfer/store/search.d.ts.map +0 -1
  553. package/dist/src/transfer/types.d.ts +0 -245
  554. package/dist/src/transfer/types.d.ts.map +0 -1
  555. package/dist/src/types.d.ts +0 -198
  556. package/dist/src/types.d.ts.map +0 -1
  557. package/dist/src/update/checker.d.ts +0 -34
  558. package/dist/src/update/checker.d.ts.map +0 -1
  559. package/dist/src/update/executor.d.ts +0 -32
  560. package/dist/src/update/executor.d.ts.map +0 -1
  561. package/dist/src/update/index.d.ts +0 -33
  562. package/dist/src/update/index.d.ts.map +0 -1
  563. package/dist/src/update/rate-limiter.d.ts +0 -20
  564. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  565. package/dist/src/update/validator.d.ts +0 -17
  566. package/dist/src/update/validator.d.ts.map +0 -1
@@ -6,14 +6,70 @@
6
6
  * - TTL-based caching of coverage data
7
7
  * - Singleton router instance
8
8
  */
9
+ var __assign = (this && this.__assign) || function () {
10
+ __assign = Object.assign || function(t) {
11
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
12
+ s = arguments[i];
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14
+ t[p] = s[p];
15
+ }
16
+ return t;
17
+ };
18
+ return __assign.apply(this, arguments);
19
+ };
20
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
21
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
+ return new (P || (P = Promise))(function (resolve, reject) {
23
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
24
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
27
+ });
28
+ };
29
+ var __generator = (this && this.__generator) || function (thisArg, body) {
30
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
31
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
32
+ function verb(n) { return function (v) { return step([n, v]); }; }
33
+ function step(op) {
34
+ if (f) throw new TypeError("Generator is already executing.");
35
+ while (_) try {
36
+ 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;
37
+ if (y = 0, t) op = [op[0] & 2, t.value];
38
+ switch (op[0]) {
39
+ case 0: case 1: t = op; break;
40
+ case 4: _.label++; return { value: op[1], done: false };
41
+ case 5: _.label++; y = op[1]; op = [0]; continue;
42
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
43
+ default:
44
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
45
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
46
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
47
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
48
+ if (t[2]) _.ops.pop();
49
+ _.trys.pop(); continue;
50
+ }
51
+ op = body.call(thisArg, _);
52
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
53
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
54
+ }
55
+ };
56
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
58
+ if (ar || !(i in from)) {
59
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
60
+ ar[i] = from[i];
61
+ }
62
+ }
63
+ return to.concat(ar || Array.prototype.slice.call(from));
64
+ };
9
65
  // ============================================================================
10
66
  // Caching for Performance
11
67
  // ============================================================================
12
68
  /**
13
69
  * Cache for coverage data (1 minute TTL)
14
70
  */
15
- const coverageDataCache = new Map();
16
- const COVERAGE_CACHE_TTL_MS = 60 * 1000; // 1 minute
71
+ var coverageDataCache = new Map();
72
+ var COVERAGE_CACHE_TTL_MS = 60 * 1000; // 1 minute
17
73
  /**
18
74
  * Clear coverage cache
19
75
  */
@@ -26,74 +82,89 @@ export function clearCoverageCache() {
26
82
  export function getCoverageCacheStats() {
27
83
  return { size: coverageDataCache.size };
28
84
  }
29
- const DEFAULT_CONFIG = {
85
+ var DEFAULT_CONFIG = {
30
86
  minCoverage: 70,
31
87
  targetCoverage: 85,
32
88
  incremental: true,
33
- coverageTypes: ['line', 'branch', 'function', 'statement'],
89
+ coverageTypes: ['line', 'branch', 'function', 'statement']
34
90
  };
35
- export class CoverageRouter {
36
- config;
37
- ruvectorEngine = null;
38
- useNative = false;
39
- coverageHistory = [];
40
- constructor(config = {}) {
41
- this.config = { ...DEFAULT_CONFIG, ...config };
42
- }
43
- async initialize() {
44
- try {
45
- // @ruvector/coverage is optional - gracefully fallback if not installed
46
- const ruvector = await import('@ruvector/coverage').catch(() => null);
47
- if (ruvector) {
48
- this.ruvectorEngine = ruvector.createCoverageRouter?.(this.config);
49
- this.useNative = !!this.ruvectorEngine;
50
- }
51
- }
52
- catch {
53
- this.useNative = false;
54
- }
55
- }
56
- parseCoverage(data, format = 'json') {
91
+ var CoverageRouter = /** @class */ (function () {
92
+ function CoverageRouter(config) {
93
+ if (config === void 0) { config = {}; }
94
+ this.ruvectorEngine = null;
95
+ this.useNative = false;
96
+ this.coverageHistory = [];
97
+ this.config = __assign(__assign({}, DEFAULT_CONFIG), config);
98
+ }
99
+ CoverageRouter.prototype.initialize = function () {
100
+ var _a, _b;
101
+ return __awaiter(this, void 0, Promise, function () {
102
+ var ruvector, _c;
103
+ return __generator(this, function (_d) {
104
+ switch (_d.label) {
105
+ case 0:
106
+ _d.trys.push([0, 2, , 3]);
107
+ return [4 /*yield*/, import('@ruvector/coverage')["catch"](function () { return null; })];
108
+ case 1:
109
+ ruvector = _d.sent();
110
+ if (ruvector) {
111
+ this.ruvectorEngine = (_b = (_a = ruvector).createCoverageRouter) === null || _b === void 0 ? void 0 : _b.call(_a, this.config);
112
+ this.useNative = !!this.ruvectorEngine;
113
+ }
114
+ return [3 /*break*/, 3];
115
+ case 2:
116
+ _c = _d.sent();
117
+ this.useNative = false;
118
+ return [3 /*break*/, 3];
119
+ case 3: return [2 /*return*/];
120
+ }
121
+ });
122
+ });
123
+ };
124
+ CoverageRouter.prototype.parseCoverage = function (data, format) {
125
+ if (format === void 0) { format = 'json'; }
57
126
  switch (format) {
58
127
  case 'lcov': return this.parseLcov(data);
59
128
  case 'istanbul': return this.parseIstanbul(data);
60
129
  case 'cobertura': return this.parseCobertura(data);
61
130
  default: return this.parseJson(data);
62
131
  }
63
- }
64
- route(coverage, changedFiles) {
65
- const gaps = this.calculateGaps(coverage);
66
- const targetFiles = this.prioritizeFiles(coverage, changedFiles);
67
- const action = this.determineAction(coverage, gaps);
68
- const priority = this.calculatePriority(coverage, changedFiles);
69
- const testTypes = this.recommendTestTypes(gaps);
70
- const estimatedEffort = this.estimateEffort(gaps);
71
- const impactScore = this.calculateImpact(coverage, targetFiles);
72
- return { action, priority, targetFiles, testTypes, gaps, estimatedEffort, impactScore };
73
- }
74
- getTrend() {
132
+ };
133
+ CoverageRouter.prototype.route = function (coverage, changedFiles) {
134
+ var gaps = this.calculateGaps(coverage);
135
+ var targetFiles = this.prioritizeFiles(coverage, changedFiles);
136
+ var action = this.determineAction(coverage, gaps);
137
+ var priority = this.calculatePriority(coverage, changedFiles);
138
+ var testTypes = this.recommendTestTypes(gaps);
139
+ var estimatedEffort = this.estimateEffort(gaps);
140
+ var impactScore = this.calculateImpact(coverage, targetFiles);
141
+ return { action: action, priority: priority, targetFiles: targetFiles, testTypes: testTypes, gaps: gaps, estimatedEffort: estimatedEffort, impactScore: impactScore };
142
+ };
143
+ CoverageRouter.prototype.getTrend = function () {
75
144
  if (this.coverageHistory.length < 2)
76
145
  return { direction: 'stable', change: 0 };
77
- const recent = this.coverageHistory[this.coverageHistory.length - 1];
78
- const previous = this.coverageHistory[this.coverageHistory.length - 2];
79
- const change = recent.overall - previous.overall;
80
- return { direction: change > 0.5 ? 'up' : change < -0.5 ? 'down' : 'stable', change };
81
- }
82
- addToHistory(report) {
146
+ var recent = this.coverageHistory[this.coverageHistory.length - 1];
147
+ var previous = this.coverageHistory[this.coverageHistory.length - 2];
148
+ var change = recent.overall - previous.overall;
149
+ return { direction: change > 0.5 ? 'up' : change < -0.5 ? 'down' : 'stable', change: change };
150
+ };
151
+ CoverageRouter.prototype.addToHistory = function (report) {
83
152
  this.coverageHistory.push(report);
84
153
  if (this.coverageHistory.length > 10)
85
154
  this.coverageHistory.shift();
86
- }
87
- getStats() {
155
+ };
156
+ CoverageRouter.prototype.getStats = function () {
88
157
  return { useNative: this.useNative, historySize: this.coverageHistory.length, minCoverage: this.config.minCoverage, targetCoverage: this.config.targetCoverage };
89
- }
90
- parseLcov(data) {
91
- const files = [];
92
- let currentFile = null;
93
- const lines = data.split('\n');
94
- for (const line of lines) {
158
+ };
159
+ CoverageRouter.prototype.parseLcov = function (data) {
160
+ var _a;
161
+ var files = [];
162
+ var currentFile = null;
163
+ var lines = data.split('\n');
164
+ for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
165
+ var line = lines_1[_i];
95
166
  if (line.startsWith('SF:')) {
96
- if (currentFile?.path)
167
+ if (currentFile === null || currentFile === void 0 ? void 0 : currentFile.path)
97
168
  files.push(this.finalizeFileCoverage(currentFile));
98
169
  currentFile = { path: line.substring(3), uncoveredLines: [], totalLines: 0, coveredLines: 0 };
99
170
  }
@@ -106,88 +177,95 @@ export class CoverageRouter {
106
177
  currentFile.coveredLines = parseInt(line.substring(3), 10);
107
178
  }
108
179
  else if (line.startsWith('DA:')) {
109
- const [lineNum, hits] = line.substring(3).split(',').map(Number);
180
+ var _b = line.substring(3).split(',').map(Number), lineNum = _b[0], hits = _b[1];
110
181
  if (currentFile && hits === 0)
111
- currentFile.uncoveredLines?.push(lineNum);
182
+ (_a = currentFile.uncoveredLines) === null || _a === void 0 ? void 0 : _a.push(lineNum);
112
183
  }
113
184
  else if (line === 'end_of_record') {
114
- if (currentFile?.path)
185
+ if (currentFile === null || currentFile === void 0 ? void 0 : currentFile.path)
115
186
  files.push(this.finalizeFileCoverage(currentFile));
116
187
  currentFile = null;
117
188
  }
118
189
  }
119
190
  return this.buildReport(files);
120
- }
121
- parseIstanbul(data) {
122
- const files = [];
123
- for (const [path, coverage] of Object.entries(data)) {
124
- const cov = coverage;
125
- const statements = cov.s;
126
- const functions = cov.f;
127
- const branches = cov.b;
128
- const statementCovered = Object.values(statements).filter(v => v > 0).length;
129
- const statementTotal = Object.values(statements).length;
130
- const functionCovered = Object.values(functions).filter(v => v > 0).length;
131
- const functionTotal = Object.values(functions).length;
132
- const branchCovered = Object.values(branches).flat().filter(v => v > 0).length;
133
- const branchTotal = Object.values(branches).flat().length;
191
+ };
192
+ CoverageRouter.prototype.parseIstanbul = function (data) {
193
+ var files = [];
194
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
195
+ var _b = _a[_i], path = _b[0], coverage = _b[1];
196
+ var cov = coverage;
197
+ var statements = cov.s;
198
+ var functions = cov.f;
199
+ var branches = cov.b;
200
+ var statementCovered = Object.values(statements).filter(function (v) { return v > 0; }).length;
201
+ var statementTotal = Object.values(statements).length;
202
+ var functionCovered = Object.values(functions).filter(function (v) { return v > 0; }).length;
203
+ var functionTotal = Object.values(functions).length;
204
+ var branchCovered = Object.values(branches).flat().filter(function (v) { return v > 0; }).length;
205
+ var branchTotal = Object.values(branches).flat().length;
134
206
  files.push({
135
- path, lineCoverage: statementTotal > 0 ? (statementCovered / statementTotal) * 100 : 100,
207
+ path: path,
208
+ lineCoverage: statementTotal > 0 ? (statementCovered / statementTotal) * 100 : 100,
136
209
  branchCoverage: branchTotal > 0 ? (branchCovered / branchTotal) * 100 : 100,
137
210
  functionCoverage: functionTotal > 0 ? (functionCovered / functionTotal) * 100 : 100,
138
211
  statementCoverage: statementTotal > 0 ? (statementCovered / statementTotal) * 100 : 100,
139
- uncoveredLines: [], totalLines: statementTotal, coveredLines: statementCovered,
212
+ uncoveredLines: [], totalLines: statementTotal, coveredLines: statementCovered
140
213
  });
141
214
  }
142
215
  return this.buildReport(files);
143
- }
144
- parseCobertura(data) {
145
- const files = [];
146
- const classMatches = data.matchAll(/<class[^>]*filename="([^"]+)"[^>]*line-rate="([^"]+)"[^>]*branch-rate="([^"]+)"[^>]*>/g);
147
- for (const match of classMatches) {
216
+ };
217
+ CoverageRouter.prototype.parseCobertura = function (data) {
218
+ var files = [];
219
+ var classMatches = data.matchAll(/<class[^>]*filename="([^"]+)"[^>]*line-rate="([^"]+)"[^>]*branch-rate="([^"]+)"[^>]*>/g);
220
+ for (var _i = 0, classMatches_1 = classMatches; _i < classMatches_1.length; _i++) {
221
+ var match = classMatches_1[_i];
148
222
  files.push({
149
223
  path: match[1], lineCoverage: parseFloat(match[2]) * 100, branchCoverage: parseFloat(match[3]) * 100,
150
224
  functionCoverage: parseFloat(match[2]) * 100, statementCoverage: parseFloat(match[2]) * 100,
151
- uncoveredLines: [], totalLines: 0, coveredLines: 0,
225
+ uncoveredLines: [], totalLines: 0, coveredLines: 0
152
226
  });
153
227
  }
154
228
  return this.buildReport(files);
155
- }
156
- parseJson(data) {
229
+ };
230
+ CoverageRouter.prototype.parseJson = function (data) {
157
231
  if (Array.isArray(data))
158
232
  return this.buildReport(data);
159
- const files = [];
160
- for (const [path, coverage] of Object.entries(data)) {
161
- const cov = coverage;
233
+ var files = [];
234
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
235
+ var _b = _a[_i], path = _b[0], coverage = _b[1];
236
+ var cov = coverage;
162
237
  files.push({
163
- path, lineCoverage: cov.lineCoverage || 0, branchCoverage: cov.branchCoverage || 0,
238
+ path: path,
239
+ lineCoverage: cov.lineCoverage || 0, branchCoverage: cov.branchCoverage || 0,
164
240
  functionCoverage: cov.functionCoverage || 0, statementCoverage: cov.statementCoverage || 0,
165
- uncoveredLines: cov.uncoveredLines || [], totalLines: cov.totalLines || 0, coveredLines: cov.coveredLines || 0,
241
+ uncoveredLines: cov.uncoveredLines || [], totalLines: cov.totalLines || 0, coveredLines: cov.coveredLines || 0
166
242
  });
167
243
  }
168
244
  return this.buildReport(files);
169
- }
170
- finalizeFileCoverage(partial) {
171
- const lineCoverage = partial.totalLines && partial.totalLines > 0 ? (partial.coveredLines || 0) / partial.totalLines * 100 : 100;
172
- return { path: partial.path || 'unknown', lineCoverage, branchCoverage: lineCoverage, functionCoverage: lineCoverage, statementCoverage: lineCoverage, uncoveredLines: partial.uncoveredLines || [], totalLines: partial.totalLines || 0, coveredLines: partial.coveredLines || 0 };
173
- }
174
- buildReport(files) {
175
- const totalLines = files.reduce((sum, f) => sum + f.totalLines, 0);
176
- const coveredLines = files.reduce((sum, f) => sum + f.coveredLines, 0);
177
- const overall = totalLines > 0 ? (coveredLines / totalLines) * 100 : 100;
178
- const avgLine = files.length > 0 ? files.reduce((sum, f) => sum + f.lineCoverage, 0) / files.length : 100;
179
- const avgBranch = files.length > 0 ? files.reduce((sum, f) => sum + f.branchCoverage, 0) / files.length : 100;
180
- const avgFunction = files.length > 0 ? files.reduce((sum, f) => sum + f.functionCoverage, 0) / files.length : 100;
181
- const avgStatement = files.length > 0 ? files.reduce((sum, f) => sum + f.statementCoverage, 0) / files.length : 100;
182
- const sortedByLine = [...files].sort((a, b) => a.lineCoverage - b.lineCoverage);
183
- return { overall, byType: { line: avgLine, branch: avgBranch, function: avgFunction, statement: avgStatement }, byFile: files, lowestCoverage: sortedByLine.slice(0, 5), highestCoverage: sortedByLine.slice(-5).reverse(), uncoveredCritical: this.findCriticalUncovered(files), timestamp: Date.now() };
184
- }
185
- findCriticalUncovered(files) {
186
- const critical = [];
187
- const criticalPatterns = [/auth/, /security/, /payment/, /core/, /main/, /index/];
188
- for (const file of files) {
245
+ };
246
+ CoverageRouter.prototype.finalizeFileCoverage = function (partial) {
247
+ var lineCoverage = partial.totalLines && partial.totalLines > 0 ? (partial.coveredLines || 0) / partial.totalLines * 100 : 100;
248
+ return { path: partial.path || 'unknown', lineCoverage: lineCoverage, branchCoverage: lineCoverage, functionCoverage: lineCoverage, statementCoverage: lineCoverage, uncoveredLines: partial.uncoveredLines || [], totalLines: partial.totalLines || 0, coveredLines: partial.coveredLines || 0 };
249
+ };
250
+ CoverageRouter.prototype.buildReport = function (files) {
251
+ var totalLines = files.reduce(function (sum, f) { return sum + f.totalLines; }, 0);
252
+ var coveredLines = files.reduce(function (sum, f) { return sum + f.coveredLines; }, 0);
253
+ var overall = totalLines > 0 ? (coveredLines / totalLines) * 100 : 100;
254
+ var avgLine = files.length > 0 ? files.reduce(function (sum, f) { return sum + f.lineCoverage; }, 0) / files.length : 100;
255
+ var avgBranch = files.length > 0 ? files.reduce(function (sum, f) { return sum + f.branchCoverage; }, 0) / files.length : 100;
256
+ var avgFunction = files.length > 0 ? files.reduce(function (sum, f) { return sum + f.functionCoverage; }, 0) / files.length : 100;
257
+ var avgStatement = files.length > 0 ? files.reduce(function (sum, f) { return sum + f.statementCoverage; }, 0) / files.length : 100;
258
+ var sortedByLine = __spreadArray([], files, true).sort(function (a, b) { return a.lineCoverage - b.lineCoverage; });
259
+ return { overall: overall, byType: { line: avgLine, branch: avgBranch, "function": avgFunction, statement: avgStatement }, byFile: files, lowestCoverage: sortedByLine.slice(0, 5), highestCoverage: sortedByLine.slice(-5).reverse(), uncoveredCritical: this.findCriticalUncovered(files), timestamp: Date.now() };
260
+ };
261
+ CoverageRouter.prototype.findCriticalUncovered = function (files) {
262
+ var critical = [];
263
+ var criticalPatterns = [/auth/, /security/, /payment/, /core/, /main/, /index/];
264
+ for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
265
+ var file = files_1[_i];
189
266
  if (file.lineCoverage < this.config.minCoverage) {
190
- for (const pattern of criticalPatterns) {
267
+ for (var _a = 0, criticalPatterns_1 = criticalPatterns; _a < criticalPatterns_1.length; _a++) {
268
+ var pattern = criticalPatterns_1[_a];
191
269
  if (pattern.test(file.path)) {
192
270
  critical.push(file.path);
193
271
  break;
@@ -196,19 +274,20 @@ export class CoverageRouter {
196
274
  }
197
275
  }
198
276
  return critical.slice(0, 10);
199
- }
200
- calculateGaps(coverage) {
201
- const gaps = [];
202
- for (const file of coverage.byFile) {
277
+ };
278
+ CoverageRouter.prototype.calculateGaps = function (coverage) {
279
+ var gaps = [];
280
+ for (var _i = 0, _a = coverage.byFile; _i < _a.length; _i++) {
281
+ var file = _a[_i];
203
282
  if (file.lineCoverage < this.config.targetCoverage) {
204
- const gap = this.config.targetCoverage - file.lineCoverage;
205
- gaps.push({ file: file.path, currentCoverage: file.lineCoverage, targetCoverage: this.config.targetCoverage, gap, suggestedTests: this.suggestTests(file) });
283
+ var gap = this.config.targetCoverage - file.lineCoverage;
284
+ gaps.push({ file: file.path, currentCoverage: file.lineCoverage, targetCoverage: this.config.targetCoverage, gap: gap, suggestedTests: this.suggestTests(file) });
206
285
  }
207
286
  }
208
- return gaps.sort((a, b) => b.gap - a.gap).slice(0, 10);
209
- }
210
- suggestTests(file) {
211
- const suggestions = [];
287
+ return gaps.sort(function (a, b) { return b.gap - a.gap; }).slice(0, 10);
288
+ };
289
+ CoverageRouter.prototype.suggestTests = function (file) {
290
+ var suggestions = [];
212
291
  if (file.uncoveredLines.length > 10)
213
292
  suggestions.push('Add unit tests for uncovered code paths');
214
293
  if (file.branchCoverage < 50)
@@ -218,16 +297,17 @@ export class CoverageRouter {
218
297
  if (/api|endpoint|route|handler/.test(file.path))
219
298
  suggestions.push('Add integration tests for API endpoints');
220
299
  return suggestions.slice(0, 3);
221
- }
222
- prioritizeFiles(coverage, changedFiles) {
223
- let targetFiles = coverage.lowestCoverage.map(f => f.path);
300
+ };
301
+ CoverageRouter.prototype.prioritizeFiles = function (coverage, changedFiles) {
302
+ var _this = this;
303
+ var targetFiles = coverage.lowestCoverage.map(function (f) { return f.path; });
224
304
  if (changedFiles && changedFiles.length > 0) {
225
- const changedWithLowCoverage = coverage.byFile.filter(f => changedFiles.some(cf => f.path.includes(cf))).filter(f => f.lineCoverage < this.config.targetCoverage).map(f => f.path);
226
- targetFiles = [...new Set([...changedWithLowCoverage, ...targetFiles])];
305
+ var changedWithLowCoverage = coverage.byFile.filter(function (f) { return changedFiles.some(function (cf) { return f.path.includes(cf); }); }).filter(function (f) { return f.lineCoverage < _this.config.targetCoverage; }).map(function (f) { return f.path; });
306
+ targetFiles = __spreadArray([], new Set(__spreadArray(__spreadArray([], changedWithLowCoverage, true), targetFiles, true)), true);
227
307
  }
228
308
  return targetFiles.slice(0, 10);
229
- }
230
- determineAction(coverage, gaps) {
309
+ };
310
+ CoverageRouter.prototype.determineAction = function (coverage, gaps) {
231
311
  if (coverage.overall < this.config.minCoverage)
232
312
  return 'prioritize';
233
313
  if (gaps.length > 5)
@@ -235,9 +315,10 @@ export class CoverageRouter {
235
315
  if (coverage.overall < this.config.targetCoverage)
236
316
  return 'review-coverage';
237
317
  return 'skip';
238
- }
239
- calculatePriority(coverage, changedFiles) {
240
- let priority = 5;
318
+ };
319
+ CoverageRouter.prototype.calculatePriority = function (coverage, changedFiles) {
320
+ var _this = this;
321
+ var priority = 5;
241
322
  if (coverage.overall < 50)
242
323
  priority += 4;
243
324
  else if (coverage.overall < 70)
@@ -246,144 +327,182 @@ export class CoverageRouter {
246
327
  priority += 1;
247
328
  priority += Math.min(3, coverage.uncoveredCritical.length);
248
329
  if (changedFiles && changedFiles.length > 0) {
249
- const changedLowCoverage = coverage.byFile.filter(f => changedFiles.some(cf => f.path.includes(cf))).filter(f => f.lineCoverage < this.config.minCoverage);
330
+ var changedLowCoverage = coverage.byFile.filter(function (f) { return changedFiles.some(function (cf) { return f.path.includes(cf); }); }).filter(function (f) { return f.lineCoverage < _this.config.minCoverage; });
250
331
  priority += Math.min(2, changedLowCoverage.length);
251
332
  }
252
333
  return Math.min(10, priority);
253
- }
254
- recommendTestTypes(gaps) {
255
- const types = new Set(['unit']);
256
- for (const gap of gaps) {
334
+ };
335
+ CoverageRouter.prototype.recommendTestTypes = function (gaps) {
336
+ var types = new Set(['unit']);
337
+ for (var _i = 0, gaps_1 = gaps; _i < gaps_1.length; _i++) {
338
+ var gap = gaps_1[_i];
257
339
  if (/api|endpoint|route|handler|service/.test(gap.file))
258
340
  types.add('integration');
259
341
  if (/page|component|view|ui/.test(gap.file))
260
342
  types.add('e2e');
261
343
  }
262
344
  return Array.from(types);
263
- }
264
- estimateEffort(gaps) {
265
- let effort = 0;
266
- for (const gap of gaps)
345
+ };
346
+ CoverageRouter.prototype.estimateEffort = function (gaps) {
347
+ var effort = 0;
348
+ for (var _i = 0, gaps_2 = gaps; _i < gaps_2.length; _i++) {
349
+ var gap = gaps_2[_i];
267
350
  effort += (gap.gap / 10) * 0.5;
351
+ }
268
352
  return Math.round(effort * 10) / 10;
269
- }
270
- calculateImpact(coverage, targetFiles) {
271
- const potentialGain = targetFiles.reduce((sum, file) => {
272
- const fileCov = coverage.byFile.find(f => f.path === file);
273
- return fileCov ? sum + (this.config.targetCoverage - fileCov.lineCoverage) : sum;
353
+ };
354
+ CoverageRouter.prototype.calculateImpact = function (coverage, targetFiles) {
355
+ var _this = this;
356
+ var potentialGain = targetFiles.reduce(function (sum, file) {
357
+ var fileCov = coverage.byFile.find(function (f) { return f.path === file; });
358
+ return fileCov ? sum + (_this.config.targetCoverage - fileCov.lineCoverage) : sum;
274
359
  }, 0);
275
360
  return Math.min(100, Math.round(potentialGain / targetFiles.length || 0));
276
- }
277
- }
361
+ };
362
+ return CoverageRouter;
363
+ }());
364
+ export { CoverageRouter };
278
365
  export function createCoverageRouter(config) {
279
366
  return new CoverageRouter(config);
280
367
  }
281
368
  /**
282
369
  * Route a task based on coverage analysis
283
370
  */
284
- export async function coverageRoute(task, options = {}) {
285
- const router = new CoverageRouter({
286
- targetCoverage: options.threshold || 80,
371
+ export function coverageRoute(task, options) {
372
+ if (options === void 0) { options = {}; }
373
+ return __awaiter(this, void 0, Promise, function () {
374
+ var router, coverage;
375
+ return __generator(this, function (_a) {
376
+ switch (_a.label) {
377
+ case 0:
378
+ router = new CoverageRouter({
379
+ targetCoverage: options.threshold || 80
380
+ });
381
+ return [4 /*yield*/, loadProjectCoverage(options.projectRoot)];
382
+ case 1:
383
+ coverage = _a.sent();
384
+ if (!coverage) {
385
+ return [2 /*return*/, {
386
+ action: 'skip',
387
+ priority: 1,
388
+ targetFiles: [],
389
+ testTypes: ['unit'],
390
+ gaps: [],
391
+ estimatedEffort: 0,
392
+ impactScore: 0
393
+ }];
394
+ }
395
+ return [2 /*return*/, router.route(coverage)];
396
+ }
397
+ });
287
398
  });
288
- // Try to load coverage data
289
- const coverage = await loadProjectCoverage(options.projectRoot);
290
- if (!coverage) {
291
- return {
292
- action: 'skip',
293
- priority: 1,
294
- targetFiles: [],
295
- testTypes: ['unit'],
296
- gaps: [],
297
- estimatedEffort: 0,
298
- impactScore: 0,
299
- };
300
- }
301
- return router.route(coverage);
302
399
  }
303
400
  /**
304
401
  * Suggest coverage improvements for a path
305
402
  */
306
- export async function coverageSuggest(path, options = {}) {
307
- const limit = options.limit || 20;
308
- const threshold = options.threshold || 80;
309
- const coverage = await loadProjectCoverage(options.projectRoot);
310
- if (!coverage) {
311
- return {
312
- path,
313
- suggestions: [],
314
- totalGap: 0,
315
- estimatedEffort: 0,
316
- };
317
- }
318
- // Filter files matching the path
319
- const matchingFiles = coverage.byFile.filter(f => f.path.includes(path));
320
- const belowThreshold = matchingFiles.filter(f => f.lineCoverage < threshold);
321
- const suggestions = belowThreshold
322
- .map(f => ({
323
- file: f.path,
324
- currentCoverage: f.lineCoverage,
325
- targetCoverage: threshold,
326
- gap: threshold - f.lineCoverage,
327
- priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
328
- suggestedTests: suggestTestsForFile(f),
329
- }))
330
- .sort((a, b) => b.priority - a.priority)
331
- .slice(0, limit);
332
- const totalGap = suggestions.reduce((sum, s) => sum + s.gap, 0);
333
- const estimatedEffort = totalGap * 0.1; // Rough estimate: 0.1 hours per % gap
334
- return { path, suggestions, totalGap, estimatedEffort };
403
+ export function coverageSuggest(path, options) {
404
+ if (options === void 0) { options = {}; }
405
+ return __awaiter(this, void 0, Promise, function () {
406
+ var limit, threshold, coverage, matchingFiles, belowThreshold, suggestions, totalGap, estimatedEffort;
407
+ return __generator(this, function (_a) {
408
+ switch (_a.label) {
409
+ case 0:
410
+ limit = options.limit || 20;
411
+ threshold = options.threshold || 80;
412
+ return [4 /*yield*/, loadProjectCoverage(options.projectRoot)];
413
+ case 1:
414
+ coverage = _a.sent();
415
+ if (!coverage) {
416
+ return [2 /*return*/, {
417
+ path: path,
418
+ suggestions: [],
419
+ totalGap: 0,
420
+ estimatedEffort: 0
421
+ }];
422
+ }
423
+ matchingFiles = coverage.byFile.filter(function (f) { return f.path.includes(path); });
424
+ belowThreshold = matchingFiles.filter(function (f) { return f.lineCoverage < threshold; });
425
+ suggestions = belowThreshold
426
+ .map(function (f) { return ({
427
+ file: f.path,
428
+ currentCoverage: f.lineCoverage,
429
+ targetCoverage: threshold,
430
+ gap: threshold - f.lineCoverage,
431
+ priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
432
+ suggestedTests: suggestTestsForFile(f)
433
+ }); })
434
+ .sort(function (a, b) { return b.priority - a.priority; })
435
+ .slice(0, limit);
436
+ totalGap = suggestions.reduce(function (sum, s) { return sum + s.gap; }, 0);
437
+ estimatedEffort = totalGap * 0.1;
438
+ return [2 /*return*/, { path: path, suggestions: suggestions, totalGap: totalGap, estimatedEffort: estimatedEffort }];
439
+ }
440
+ });
441
+ });
335
442
  }
336
443
  /**
337
444
  * List all coverage gaps with agent assignments
338
445
  */
339
- export async function coverageGaps(options = {}) {
340
- const threshold = options.threshold || 80;
341
- const groupByAgent = options.groupByAgent !== false;
342
- const coverage = await loadProjectCoverage(options.projectRoot);
343
- if (!coverage) {
344
- return {
345
- totalGaps: 0,
346
- gaps: [],
347
- byAgent: {},
348
- summary: 'No coverage data found',
349
- };
350
- }
351
- const belowThreshold = coverage.byFile.filter(f => f.lineCoverage < threshold);
352
- const gaps = belowThreshold.map(f => ({
353
- file: f.path,
354
- currentCoverage: f.lineCoverage,
355
- targetCoverage: threshold,
356
- gap: threshold - f.lineCoverage,
357
- priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
358
- suggestedAgent: suggestAgentForFile(f.path),
359
- }));
360
- const byAgent = {};
361
- if (groupByAgent) {
362
- for (const gap of gaps) {
363
- if (!byAgent[gap.suggestedAgent]) {
364
- byAgent[gap.suggestedAgent] = [];
446
+ export function coverageGaps(options) {
447
+ if (options === void 0) { options = {}; }
448
+ return __awaiter(this, void 0, Promise, function () {
449
+ var threshold, groupByAgent, coverage, belowThreshold, gaps, byAgent, _i, gaps_3, gap;
450
+ return __generator(this, function (_a) {
451
+ switch (_a.label) {
452
+ case 0:
453
+ threshold = options.threshold || 80;
454
+ groupByAgent = options.groupByAgent !== false;
455
+ return [4 /*yield*/, loadProjectCoverage(options.projectRoot)];
456
+ case 1:
457
+ coverage = _a.sent();
458
+ if (!coverage) {
459
+ return [2 /*return*/, {
460
+ totalGaps: 0,
461
+ gaps: [],
462
+ byAgent: {},
463
+ summary: 'No coverage data found'
464
+ }];
465
+ }
466
+ belowThreshold = coverage.byFile.filter(function (f) { return f.lineCoverage < threshold; });
467
+ gaps = belowThreshold.map(function (f) { return ({
468
+ file: f.path,
469
+ currentCoverage: f.lineCoverage,
470
+ targetCoverage: threshold,
471
+ gap: threshold - f.lineCoverage,
472
+ priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
473
+ suggestedAgent: suggestAgentForFile(f.path)
474
+ }); });
475
+ byAgent = {};
476
+ if (groupByAgent) {
477
+ for (_i = 0, gaps_3 = gaps; _i < gaps_3.length; _i++) {
478
+ gap = gaps_3[_i];
479
+ if (!byAgent[gap.suggestedAgent]) {
480
+ byAgent[gap.suggestedAgent] = [];
481
+ }
482
+ byAgent[gap.suggestedAgent].push(gap.file);
483
+ }
484
+ }
485
+ return [2 /*return*/, {
486
+ totalGaps: gaps.length,
487
+ gaps: gaps,
488
+ byAgent: byAgent,
489
+ summary: gaps.length + " files below " + threshold + "% coverage threshold"
490
+ }];
365
491
  }
366
- byAgent[gap.suggestedAgent].push(gap.file);
367
- }
368
- }
369
- return {
370
- totalGaps: gaps.length,
371
- gaps,
372
- byAgent,
373
- summary: `${gaps.length} files below ${threshold}% coverage threshold`,
374
- };
492
+ });
493
+ });
375
494
  }
376
495
  /**
377
496
  * Validate and normalize path to prevent directory traversal
378
497
  * Returns null if path is invalid or attempts traversal
379
498
  */
380
499
  function validateProjectPath(inputPath) {
381
- const { resolve, normalize, isAbsolute } = require('path');
500
+ var _a = require('path'), resolve = _a.resolve, normalize = _a.normalize, isAbsolute = _a.isAbsolute;
382
501
  // Default to cwd if not provided
383
- const basePath = inputPath || process.cwd();
502
+ var basePath = inputPath || process.cwd();
384
503
  // Normalize and resolve the path
385
- const normalizedPath = normalize(basePath);
386
- const resolvedPath = isAbsolute(normalizedPath) ? normalizedPath : resolve(process.cwd(), normalizedPath);
504
+ var normalizedPath = normalize(basePath);
505
+ var resolvedPath = isAbsolute(normalizedPath) ? normalizedPath : resolve(process.cwd(), normalizedPath);
387
506
  // Check for path traversal attempts
388
507
  if (normalizedPath.includes('..') && !resolvedPath.startsWith(process.cwd())) {
389
508
  // Only allow .. if it resolves within or above cwd
@@ -403,69 +522,82 @@ function validateProjectPath(inputPath) {
403
522
  /**
404
523
  * Load project coverage data (async with caching)
405
524
  */
406
- async function loadProjectCoverage(projectRoot, skipCache) {
407
- // Validate and normalize the project root path
408
- const root = validateProjectPath(projectRoot);
409
- if (!root) {
410
- // Invalid path detected, return null safely
411
- return null;
412
- }
413
- // Check cache first
414
- if (!skipCache) {
415
- const cached = coverageDataCache.get(root);
416
- if (cached && Date.now() - cached.timestamp < COVERAGE_CACHE_TTL_MS) {
417
- return cached.report;
418
- }
419
- }
420
- const { existsSync } = require('fs');
421
- const { readFile } = require('fs/promises');
422
- const { join, normalize } = require('path');
423
- // Try common coverage locations (all relative to validated root)
424
- const coverageLocations = [
425
- ['coverage', 'coverage-final.json'],
426
- ['coverage', 'lcov.info'],
427
- ['.nyc_output', 'coverage.json'],
428
- ['coverage.json'],
429
- ];
430
- for (const pathParts of coverageLocations) {
431
- // Join and normalize to prevent traversal in coverage paths
432
- const coveragePath = normalize(join(root, ...pathParts));
433
- // Ensure the coverage path is still within or under root
434
- if (!coveragePath.startsWith(root)) {
435
- continue;
436
- }
437
- if (existsSync(coveragePath)) {
438
- try {
439
- // Use async file read for non-blocking I/O
440
- const content = await readFile(coveragePath, 'utf-8');
441
- const router = new CoverageRouter();
442
- let report = null;
443
- if (coveragePath.endsWith('.json')) {
444
- report = router.parseCoverage(JSON.parse(content), 'istanbul');
445
- }
446
- else if (coveragePath.endsWith('.info')) {
447
- report = router.parseCoverage(content, 'lcov');
448
- }
449
- // Cache the result
450
- if (report) {
451
- coverageDataCache.set(root, { report, timestamp: Date.now() });
452
- return report;
453
- }
454
- }
455
- catch {
456
- // Continue to next path
525
+ function loadProjectCoverage(projectRoot, skipCache) {
526
+ return __awaiter(this, void 0, Promise, function () {
527
+ var root, cached, existsSync, readFile, _a, join, normalize, coverageLocations, _i, coverageLocations_1, pathParts, coveragePath, content, router, report, _b;
528
+ return __generator(this, function (_c) {
529
+ switch (_c.label) {
530
+ case 0:
531
+ root = validateProjectPath(projectRoot);
532
+ if (!root) {
533
+ // Invalid path detected, return null safely
534
+ return [2 /*return*/, null];
535
+ }
536
+ // Check cache first
537
+ if (!skipCache) {
538
+ cached = coverageDataCache.get(root);
539
+ if (cached && Date.now() - cached.timestamp < COVERAGE_CACHE_TTL_MS) {
540
+ return [2 /*return*/, cached.report];
541
+ }
542
+ }
543
+ existsSync = require('fs').existsSync;
544
+ readFile = require('fs/promises').readFile;
545
+ _a = require('path'), join = _a.join, normalize = _a.normalize;
546
+ coverageLocations = [
547
+ ['coverage', 'coverage-final.json'],
548
+ ['coverage', 'lcov.info'],
549
+ ['.nyc_output', 'coverage.json'],
550
+ ['coverage.json'],
551
+ ];
552
+ _i = 0, coverageLocations_1 = coverageLocations;
553
+ _c.label = 1;
554
+ case 1:
555
+ if (!(_i < coverageLocations_1.length)) return [3 /*break*/, 6];
556
+ pathParts = coverageLocations_1[_i];
557
+ coveragePath = normalize(join.apply(void 0, __spreadArray([root], pathParts, false)));
558
+ // Ensure the coverage path is still within or under root
559
+ if (!coveragePath.startsWith(root)) {
560
+ return [3 /*break*/, 5];
561
+ }
562
+ if (!existsSync(coveragePath)) return [3 /*break*/, 5];
563
+ _c.label = 2;
564
+ case 2:
565
+ _c.trys.push([2, 4, , 5]);
566
+ return [4 /*yield*/, readFile(coveragePath, 'utf-8')];
567
+ case 3:
568
+ content = _c.sent();
569
+ router = new CoverageRouter();
570
+ report = null;
571
+ if (coveragePath.endsWith('.json')) {
572
+ report = router.parseCoverage(JSON.parse(content), 'istanbul');
573
+ }
574
+ else if (coveragePath.endsWith('.info')) {
575
+ report = router.parseCoverage(content, 'lcov');
576
+ }
577
+ // Cache the result
578
+ if (report) {
579
+ coverageDataCache.set(root, { report: report, timestamp: Date.now() });
580
+ return [2 /*return*/, report];
581
+ }
582
+ return [3 /*break*/, 5];
583
+ case 4:
584
+ _b = _c.sent();
585
+ return [3 /*break*/, 5];
586
+ case 5:
587
+ _i++;
588
+ return [3 /*break*/, 1];
589
+ case 6: return [2 /*return*/, null];
457
590
  }
458
- }
459
- }
460
- return null;
591
+ });
592
+ });
461
593
  }
462
594
  /**
463
595
  * Calculate priority for a file based on path and coverage
464
596
  */
465
597
  function calculateFilePriority(path, coverage, threshold) {
466
- let priority = 5;
598
+ var priority = 5;
467
599
  // Gap-based priority
468
- const gap = threshold - coverage;
600
+ var gap = threshold - coverage;
469
601
  if (gap > 50)
470
602
  priority += 3;
471
603
  else if (gap > 30)
@@ -473,7 +605,7 @@ function calculateFilePriority(path, coverage, threshold) {
473
605
  else if (gap > 15)
474
606
  priority += 1;
475
607
  // Path-based priority
476
- const lowerPath = path.toLowerCase();
608
+ var lowerPath = path.toLowerCase();
477
609
  if (/core|main|index/.test(lowerPath))
478
610
  priority += 2;
479
611
  if (/auth|security|payment/.test(lowerPath))
@@ -490,7 +622,7 @@ function calculateFilePriority(path, coverage, threshold) {
490
622
  * Suggest tests for a file based on its coverage
491
623
  */
492
624
  function suggestTestsForFile(file) {
493
- const suggestions = [];
625
+ var suggestions = [];
494
626
  if (file.uncoveredLines.length > 10) {
495
627
  suggestions.push('Add unit tests for uncovered code paths');
496
628
  }
@@ -500,7 +632,7 @@ function suggestTestsForFile(file) {
500
632
  if (file.functionCoverage < 80) {
501
633
  suggestions.push('Add tests for untested functions');
502
634
  }
503
- const lowerPath = file.path.toLowerCase();
635
+ var lowerPath = file.path.toLowerCase();
504
636
  if (/api|endpoint|route|handler/.test(lowerPath)) {
505
637
  suggestions.push('Add integration tests for API endpoints');
506
638
  }
@@ -513,7 +645,7 @@ function suggestTestsForFile(file) {
513
645
  * Suggest an agent type for a file
514
646
  */
515
647
  function suggestAgentForFile(path) {
516
- const lowerPath = path.toLowerCase();
648
+ var lowerPath = path.toLowerCase();
517
649
  if (/api|endpoint|route|controller/.test(lowerPath))
518
650
  return 'api-tester';
519
651
  if (/component|view|ui|page/.test(lowerPath))