agentic-qe 3.15.4 → 3.15.6

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 (556) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +191 -0
  6. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  7. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  8. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  9. package/assets/skills/skills-manifest.json +1 -1
  10. package/dist/bridge/captured-experience-bridge.js +7 -9
  11. package/dist/cli/bundle.js +5 -5
  12. package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-MHJBRXMK.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-G64SD7J2.js → agent-handler-KAMYBU3S.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-G4UXFPKH.js → agent-memory-branch-2CAW3KUM.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
  17. package/dist/cli/chunks/{arena-63M3M6EW.js → arena-4OFLJ3R2.js} +2 -2
  18. package/dist/cli/chunks/{arena-QJMKYPHS.js → arena-QCCVIOAH.js} +4 -4
  19. package/dist/cli/chunks/{audit-UDFVTWSX.js → audit-RBDQJQJB.js} +3 -3
  20. package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-JLX2G56I.js → better-sqlite3-5JRACCDQ.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-PWF32LLW.js → brain-handler-W4QIIRT4.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-PB7QWXDP.js → branch-enumerator-IBNGI572.js} +2 -2
  24. package/dist/cli/chunks/{browser-CYNV2F3U.js → browser-GMSCVAOI.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
  26. package/dist/cli/chunks/{chunk-S5D3HCGN.js → chunk-22OZIJAD.js} +2 -2
  27. package/dist/cli/chunks/{chunk-NBMQOP2R.js → chunk-24ZSGYC6.js} +1 -1
  28. package/dist/cli/chunks/{chunk-HFSBONCS.js → chunk-2CIDFR2H.js} +3 -3
  29. package/dist/cli/chunks/{chunk-A4OPQJ4A.js → chunk-2IWPJUVV.js} +5 -5
  30. package/dist/cli/chunks/{chunk-RI4JPBZD.js → chunk-2ZTWPMTK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-ZURYZEHX.js → chunk-34MDMFET.js} +2 -2
  32. package/dist/cli/chunks/chunk-3DJNKNBR.js +742 -0
  33. package/dist/cli/chunks/{chunk-GJVRQBLI.js → chunk-3NJ7O3OH.js} +2 -2
  34. package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
  35. package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
  36. package/dist/cli/chunks/{chunk-SCL2OYN7.js → chunk-47Q7JL3V.js} +2 -2
  37. package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
  38. package/dist/cli/chunks/{chunk-3ZIVBTX6.js → chunk-4KOVHQXK.js} +2 -2
  39. package/dist/cli/chunks/{chunk-BBKLVHDQ.js → chunk-4POOJYXA.js} +1 -1
  40. package/dist/cli/chunks/{chunk-DAYMT7TH.js → chunk-5DH5QI7G.js} +26 -26
  41. package/dist/cli/chunks/{chunk-2534PXIV.js → chunk-5GIJU2ZY.js} +2 -2
  42. package/dist/cli/chunks/{chunk-MBV57LKC.js → chunk-5HAPS6VD.js} +2 -2
  43. package/dist/cli/chunks/{chunk-NIJMLEAX.js → chunk-5LST62QR.js} +2 -2
  44. package/dist/cli/chunks/{chunk-33IUCP34.js → chunk-5MT7DMD7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-LRTF5RMG.js → chunk-5NC7QEJ6.js} +4 -4
  46. package/dist/cli/chunks/{chunk-SJB4KMZS.js → chunk-5UPIL62W.js} +3 -3
  47. package/dist/cli/chunks/{chunk-76PRW2KY.js → chunk-5VUIXDY2.js} +2 -2
  48. package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
  49. package/dist/cli/chunks/{chunk-J3RNVHDH.js → chunk-624QRKQX.js} +1 -1
  50. package/dist/cli/chunks/{chunk-N6CRIUTO.js → chunk-66NW3ZB4.js} +2 -2
  51. package/dist/cli/chunks/{chunk-PCWZCXBD.js → chunk-6HWARQWV.js} +2 -2
  52. package/dist/cli/chunks/{chunk-VAXQUD5G.js → chunk-6MXAJBEA.js} +1 -1
  53. package/dist/cli/chunks/{chunk-LOLAEDZD.js → chunk-6R3FBFCJ.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ASKPTGUU.js → chunk-6RDVY26I.js} +2 -2
  55. package/dist/cli/chunks/{chunk-35A22AUL.js → chunk-6T6AHVLF.js} +1 -1
  56. package/dist/cli/chunks/{chunk-IKWAPHJA.js → chunk-6WOZUSSN.js} +2 -2
  57. package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
  58. package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
  59. package/dist/cli/chunks/{chunk-5H7MR6HP.js → chunk-7SAMMQVS.js} +1 -1
  60. package/dist/cli/chunks/{chunk-B7J3O2WM.js → chunk-7TJZDRDU.js} +1 -1
  61. package/dist/cli/chunks/{chunk-OFQDM73J.js → chunk-7TVIX4WL.js} +2 -2
  62. package/dist/cli/chunks/{chunk-SZWXUG36.js → chunk-7VTKR44N.js} +2 -2
  63. package/dist/cli/chunks/{chunk-5B5D5KCV.js → chunk-7XTANLTN.js} +1 -1
  64. package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
  65. package/dist/cli/chunks/{chunk-GAXTPQCZ.js → chunk-A74J23QB.js} +2 -2
  66. package/dist/cli/chunks/{chunk-K2VUYRMG.js → chunk-A7ANPS4E.js} +2 -2
  67. package/dist/cli/chunks/{chunk-WO4NSPLX.js → chunk-AJT3XDRD.js} +2 -2
  68. package/dist/cli/chunks/{chunk-LPSE6DOQ.js → chunk-ALCIUWFC.js} +1 -1
  69. package/dist/cli/chunks/{chunk-UK5HY6LC.js → chunk-AUN4FG7V.js} +1 -1
  70. package/dist/cli/chunks/{chunk-MGH4XIHH.js → chunk-AUOSHM63.js} +2 -2
  71. package/dist/cli/chunks/{chunk-HX5KQK7I.js → chunk-AX26QJ6T.js} +2 -2
  72. package/dist/cli/chunks/{chunk-BZWZTGMF.js → chunk-B7RHBKHL.js} +2 -2
  73. package/dist/cli/chunks/{chunk-I5A3HGO6.js → chunk-BAYGQRNP.js} +2 -2
  74. package/dist/cli/chunks/{chunk-3C2BFLYC.js → chunk-BIXRTOH3.js} +18 -18
  75. package/dist/cli/chunks/{chunk-EWUFVWRT.js → chunk-BO7UFNYV.js} +2 -2
  76. package/dist/cli/chunks/{chunk-6TMUZGM2.js → chunk-BUTGIVKW.js} +1 -1
  77. package/dist/cli/chunks/{chunk-2MU4WCMQ.js → chunk-BXATKI5S.js} +2 -2
  78. package/dist/cli/chunks/{chunk-HEDLZWPM.js → chunk-CCL436IU.js} +44 -33
  79. package/dist/cli/chunks/{chunk-6EHVPFHW.js → chunk-CEXNW5TR.js} +1 -1
  80. package/dist/cli/chunks/{chunk-2ICC4H6K.js → chunk-CLAMMGY3.js} +2 -2
  81. package/dist/cli/chunks/{chunk-BPGFCUDO.js → chunk-CR66HNAE.js} +1 -1
  82. package/dist/cli/chunks/{chunk-CFXFGQEN.js → chunk-CZBIREL5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-Z56QTRRB.js → chunk-D5N2O5EH.js} +2 -2
  84. package/dist/cli/chunks/{chunk-M6SJALLA.js → chunk-DA7DGDTI.js} +2 -2
  85. package/dist/cli/chunks/{chunk-R47LNH5W.js → chunk-DLSFT6PO.js} +2 -2
  86. package/dist/cli/chunks/{chunk-6HTO4BLV.js → chunk-DQNUPEY5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-XZ5Z56OP.js → chunk-EECF4CMA.js} +1 -1
  88. package/dist/cli/chunks/{chunk-DFJGXXCL.js → chunk-EF5UHDCG.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PJAXWCFC.js → chunk-EJ4KZFZN.js} +1 -1
  90. package/dist/cli/chunks/{chunk-RA3MI5WK.js → chunk-ELI4GDQO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-BND6M2JX.js → chunk-F3KS3TAB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-RB2SL5GD.js → chunk-F7A2UBZO.js} +2 -2
  93. package/dist/cli/chunks/{chunk-X5S5UEM6.js → chunk-FOJRPEIP.js} +2 -2
  94. package/dist/cli/chunks/{chunk-ZP6ANUP7.js → chunk-FQ5N666N.js} +1 -1
  95. package/dist/cli/chunks/{chunk-LZSLJJII.js → chunk-FU7LNUD7.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FDK2GF4G.js → chunk-GFB6BZWU.js} +2 -2
  97. package/dist/cli/chunks/{chunk-C5EN5WB6.js → chunk-GI5HWS4H.js} +1 -1
  98. package/dist/cli/chunks/{chunk-SIUUAKCE.js → chunk-GNYOHZVV.js} +1 -1
  99. package/dist/cli/chunks/{chunk-OOK6GPJR.js → chunk-GVRFSXY6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-6QPW4OVH.js → chunk-GWM4M5NF.js} +1 -1
  101. package/dist/cli/chunks/{chunk-PMXWDTDK.js → chunk-HAN4MS5T.js} +2 -2
  102. package/dist/cli/chunks/{chunk-WW6WUMS7.js → chunk-HEGGV2PT.js} +2 -2
  103. package/dist/cli/chunks/{chunk-4GLR2S2M.js → chunk-HOEWMEF2.js} +2 -2
  104. package/dist/cli/chunks/{chunk-BY3IL56R.js → chunk-HZFK2Z2Z.js} +1 -1
  105. package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
  106. package/dist/cli/chunks/{chunk-LXYTC62V.js → chunk-IEPWO4XP.js} +2 -2
  107. package/dist/cli/chunks/{chunk-3MSBVOYW.js → chunk-ITIJ23K2.js} +2 -2
  108. package/dist/cli/chunks/{chunk-PEA4DVXW.js → chunk-IVJIHZSM.js} +1 -1
  109. package/dist/cli/chunks/{chunk-P7GM3EE7.js → chunk-JAPBSSFY.js} +1 -1
  110. package/dist/cli/chunks/{chunk-SOSJFEFB.js → chunk-JCE76MPP.js} +2 -2
  111. package/dist/cli/chunks/{chunk-YZ2AGC7O.js → chunk-JPJEAK4G.js} +1 -1
  112. package/dist/cli/chunks/{chunk-RG67RZIX.js → chunk-JYKQVYX2.js} +2 -2
  113. package/dist/cli/chunks/{chunk-W6TJXK5Y.js → chunk-K55EAWZ5.js} +2 -2
  114. package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
  115. package/dist/cli/chunks/{chunk-W3PPYNHF.js → chunk-KIDOBLUO.js} +2 -2
  116. package/dist/cli/chunks/{chunk-JL3TI43V.js → chunk-KYVIOC3C.js} +2 -2
  117. package/dist/cli/chunks/{chunk-WEDVLKRB.js → chunk-L2TDHJR3.js} +2 -2
  118. package/dist/cli/chunks/{chunk-5GWTJJEO.js → chunk-L4D3TPFP.js} +1 -1
  119. package/dist/cli/chunks/{chunk-PB2WSCBW.js → chunk-LAY7NCQK.js} +3 -3
  120. package/dist/cli/chunks/{chunk-T3BMCEQR.js → chunk-LCCTJ2PC.js} +2 -2
  121. package/dist/cli/chunks/{chunk-7INP6HZH.js → chunk-LJCEDTUM.js} +3 -3
  122. package/dist/cli/chunks/{chunk-DEJM2P5K.js → chunk-LMAEMVPA.js} +1 -1
  123. package/dist/cli/chunks/{chunk-HCDTLV5J.js → chunk-LZWJ5BMP.js} +2 -2
  124. package/dist/cli/chunks/{chunk-D7RVZ5C2.js → chunk-MP3FSUNB.js} +2 -2
  125. package/dist/cli/chunks/{chunk-ADF6LGHZ.js → chunk-MQCTLTGE.js} +2 -2
  126. package/dist/cli/chunks/{chunk-OHH6BUZK.js → chunk-MQTA6KIO.js} +1 -1
  127. package/dist/cli/chunks/{chunk-ISASRHZP.js → chunk-NBUXM5X6.js} +10 -6
  128. package/dist/cli/chunks/{chunk-KOLHZSEC.js → chunk-NHRF3V4B.js} +2 -2
  129. package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
  130. package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
  131. package/dist/cli/chunks/{chunk-EGHK6NMH.js → chunk-ONPPBLRB.js} +2 -2
  132. package/dist/cli/chunks/{chunk-YQ6BK7QC.js → chunk-OPDZBRIL.js} +2 -2
  133. package/dist/cli/chunks/{chunk-DPL4ZXTE.js → chunk-OQ4S6B7P.js} +1 -1
  134. package/dist/cli/chunks/{chunk-6HO3XRXE.js → chunk-ORBODZSO.js} +2 -2
  135. package/dist/cli/chunks/{chunk-GLKLEHK3.js → chunk-ORFL3YXB.js} +2 -2
  136. package/dist/cli/chunks/{chunk-I43QRLLB.js → chunk-P7DXVL2S.js} +2 -2
  137. package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
  138. package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
  139. package/dist/cli/chunks/{chunk-HEKCN5XQ.js → chunk-Q2RBOC7V.js} +2 -2
  140. package/dist/cli/chunks/{chunk-54XTJBHV.js → chunk-QLKUCMZC.js} +1 -1
  141. package/dist/cli/chunks/{chunk-3BDDOFYW.js → chunk-QLYO3H7E.js} +9 -9
  142. package/dist/cli/chunks/{chunk-VMSO6DMF.js → chunk-QS5KZYUZ.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JFQDWAU3.js → chunk-R363XXGH.js} +2 -2
  144. package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
  145. package/dist/cli/chunks/{chunk-73PCVMGA.js → chunk-RFDFET3O.js} +2 -2
  146. package/dist/cli/chunks/{chunk-LJRZAALA.js → chunk-RHIQ6QO5.js} +357 -351
  147. package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
  148. package/dist/cli/chunks/{chunk-RJ5CZ7B6.js → chunk-RUTO67PT.js} +2 -2
  149. package/dist/cli/chunks/{chunk-DF4Y3HPO.js → chunk-RV6HSMKJ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-54ITMOFM.js → chunk-SOSJWM3E.js} +4 -4
  151. package/dist/cli/chunks/{chunk-5SS2Z7JC.js → chunk-SV5BUYHH.js} +2 -2
  152. package/dist/cli/chunks/{chunk-XHCCH7UC.js → chunk-TL5GV3PR.js} +8 -8
  153. package/dist/cli/chunks/{chunk-ZKXZTIVF.js → chunk-TLUIO37P.js} +2 -2
  154. package/dist/cli/chunks/{chunk-2LL35V3A.js → chunk-TUDENMAE.js} +2 -2
  155. package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
  156. package/dist/cli/chunks/{chunk-2DRMTRBM.js → chunk-UB6DQGWM.js} +2 -2
  157. package/dist/cli/chunks/chunk-UHHMAKPE.js +3 -0
  158. package/dist/cli/chunks/{chunk-DBIK4OFX.js → chunk-ULCHPPW2.js} +1 -1
  159. package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
  160. package/dist/cli/chunks/{chunk-I6E4X3L3.js → chunk-VAYZ5QIE.js} +1 -1
  161. package/dist/cli/chunks/{chunk-G3ZUB3HD.js → chunk-VCONCVSY.js} +3 -3
  162. package/dist/cli/chunks/{chunk-7X2IVMXN.js → chunk-VVF337SV.js} +2 -2
  163. package/dist/cli/chunks/{chunk-EY5IUF7U.js → chunk-WKDWRRDT.js} +2 -2
  164. package/dist/cli/chunks/{chunk-FRBCX46J.js → chunk-X2DR27AY.js} +2 -2
  165. package/dist/cli/chunks/{chunk-I53365HG.js → chunk-X33F7NXH.js} +3 -3
  166. package/dist/cli/chunks/{chunk-MVTUFPM2.js → chunk-XBEI2JBA.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OG4KHX7S.js → chunk-XBFQJZWX.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DVE5SM5G.js → chunk-XFPQIWEH.js} +3 -3
  169. package/dist/cli/chunks/{chunk-RWZ4F44Y.js → chunk-XPB5BVU6.js} +2 -2
  170. package/dist/cli/chunks/{chunk-TVQPYP2Z.js → chunk-XQ53PZEF.js} +3 -3
  171. package/dist/cli/chunks/{chunk-73MTUM6F.js → chunk-XZ46CI35.js} +2 -2
  172. package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
  173. package/dist/cli/chunks/{chunk-BY5PLEPZ.js → chunk-YNG7E26C.js} +2 -2
  174. package/dist/cli/chunks/{chunk-YUWUFYHK.js → chunk-YXU35GGD.js} +1 -1
  175. package/dist/cli/chunks/{chunk-B7GJXQD2.js → chunk-ZCP4P6O2.js} +2 -2
  176. package/dist/cli/chunks/{chunk-LGA6J4I4.js → chunk-ZL5LJT7D.js} +2 -2
  177. package/dist/cli/chunks/{chunk-TB22Y3WW.js → chunk-ZOUEQ6DL.js} +1 -1
  178. package/dist/cli/chunks/{chunk-U2E5F3VZ.js → chunk-ZSBD4FUX.js} +2 -2
  179. package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
  180. package/dist/cli/chunks/{chunk-WYO5VN2L.js → chunk-ZUTFHGEO.js} +1 -1
  181. package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
  182. package/dist/cli/chunks/ci-config-2ZVV4OXL.js +2 -0
  183. package/dist/cli/chunks/{ci-output-BMJABAEX.js → ci-output-E45OGVPR.js} +2 -2
  184. package/dist/cli/chunks/{circuit-breaker-GYD5CMJQ.js → circuit-breaker-X73ITYZC.js} +2 -2
  185. package/dist/cli/chunks/{claude-flow-setup-MMOYVBVD.js → claude-flow-setup-W4PPH46C.js} +2 -2
  186. package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
  187. package/dist/cli/chunks/{cline-installer-B2SOZ44R.js → cline-installer-NUEPMWDE.js} +2 -2
  188. package/dist/cli/chunks/{code-V3FIRAXD.js → code-6WQHBS7G.js} +4 -4
  189. package/dist/cli/chunks/{code-index-extractor-CV6A756Z.js → code-index-extractor-BXQIFIFT.js} +2 -2
  190. package/dist/cli/chunks/{codex-installer-EUC6J47Y.js → codex-installer-Z337R2KH.js} +2 -2
  191. package/dist/cli/chunks/{completions-DQQIBAHR.js → completions-F5DMYFHV.js} +2 -2
  192. package/dist/cli/chunks/{complexity-analyzer-HPXMXP5I.js → complexity-analyzer-W2SYPZDI.js} +2 -2
  193. package/dist/cli/chunks/{continuedev-installer-RCIYXH6V.js → continuedev-installer-ZCHUIFTN.js} +2 -2
  194. package/dist/cli/chunks/{copilot-installer-VUH32SHF.js → copilot-installer-M5JNODXF.js} +2 -2
  195. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
  196. package/dist/cli/chunks/{cost-tracker-YLCKLOAL.js → cost-tracker-LSYTHBHV.js} +2 -2
  197. package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
  198. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
  199. package/dist/cli/chunks/{cursor-installer-B42FN62K.js → cursor-installer-XPUA73UW.js} +2 -2
  200. package/dist/cli/chunks/{daemon-DECQRQII.js → daemon-ITKDIYMW.js} +5 -5
  201. package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
  202. package/dist/cli/chunks/{dag-attention-scheduler-RY7CDYSC.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
  203. package/dist/cli/chunks/{detect-NW53BMJN.js → detect-DR7J6K4O.js} +2 -2
  204. package/dist/cli/chunks/{dist-node-LE6KHXAB.js → dist-node-LAJJBOUT.js} +2 -2
  205. package/dist/cli/chunks/{domain-handler-JGXFT4LW.js → domain-handler-OMSHCRMK.js} +2 -2
  206. package/dist/cli/chunks/{domain-plugins-GY3RYKKK.js → domain-plugins-EQXSKC5K.js} +2 -2
  207. package/dist/cli/chunks/{domain-transfer-CGBRXNTC.js → domain-transfer-FKRAGVSW.js} +2 -2
  208. package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
  209. package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
  210. package/dist/cli/chunks/{eval-YPYIZQUR.js → eval-JSNNASBW.js} +2 -2
  211. package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
  212. package/dist/cli/chunks/{fast-paths-HYQTAF2S.js → fast-paths-YNMIBS2E.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-HNSAFFX2.js → feature-flags-SRLXDKBI.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-YACUH6OW.js → feature-flags-VIR7O4L7.js} +2 -2
  215. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
  216. package/dist/cli/chunks/{fleet-6M3BP4OO.js → fleet-K2ED46EL.js} +3 -3
  217. package/dist/cli/chunks/{gnn-wrapper-QLD7KHXV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
  218. package/dist/cli/chunks/{heartbeat-handler-EZP333X4.js → heartbeat-handler-YYQI4WZM.js} +4 -4
  219. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
  220. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
  221. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
  222. package/dist/cli/chunks/{hnsw-legacy-bridge-47CUCSAU.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
  223. package/dist/cli/chunks/{hnswlib-node-SVNYDJZH.js → hnswlib-node-SE3MJJYS.js} +2 -2
  224. package/dist/cli/chunks/{hooks-6V5LMWP6.js → hooks-C572SRDH.js} +43 -43
  225. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
  226. package/dist/cli/chunks/{hypergraph-engine-L2FOBIFF.js → hypergraph-engine-35A6G3M5.js} +2 -2
  227. package/dist/cli/chunks/{hypergraph-handler-DU6Z57EE.js → hypergraph-handler-U2756CWI.js} +3 -3
  228. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
  229. package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
  230. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
  231. package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
  232. package/dist/cli/chunks/{kilocode-installer-NHKYGJ7Q.js → kilocode-installer-32PX5YH7.js} +2 -2
  233. package/dist/cli/chunks/{kiro-installer-24UK6GGR.js → kiro-installer-C4ROMMUS.js} +2 -2
  234. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
  235. package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
  236. package/dist/cli/chunks/{llm-router-XRMI2VMG.js → llm-router-XRKTTJTX.js} +4 -4
  237. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
  238. package/dist/cli/chunks/{load-W5UWL5C7.js → load-XVH6HW7E.js} +2 -2
  239. package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
  240. package/dist/cli/chunks/{mcp-N7ALQ4BL.js → mcp-IULSTM4Z.js} +2 -2
  241. package/dist/cli/chunks/{memory-WV52DLSA.js → memory-6K7IAU4T.js} +5 -5
  242. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
  243. package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
  244. package/dist/cli/chunks/{multi-model-executor-3FVTZCSO.js → multi-model-executor-VZDUYPLX.js} +2 -2
  245. package/dist/cli/chunks/{opencode-installer-NTPWGHUW.js → opencode-installer-QUTXKNH4.js} +2 -2
  246. package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
  247. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
  248. package/dist/cli/chunks/{pattern-usage-recorder-WWXHUH5U.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
  249. package/dist/cli/chunks/{pipeline-ZOKZFXTH.js → pipeline-O562GTOG.js} +2 -2
  250. package/dist/cli/chunks/{platform-CDNL322F.js → platform-PM7Q2AZS.js} +2 -2
  251. package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
  252. package/dist/cli/chunks/{prime-radiant-advanced-wasm-FVJDU2JY.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
  253. package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
  254. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
  255. package/dist/cli/chunks/{protocol-handler-4YBN5R23.js → protocol-handler-PPGNSAOS.js} +2 -2
  256. package/dist/cli/chunks/{prove-BHDHY664.js → prove-WQ3BKRZG.js} +2 -2
  257. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
  258. package/dist/cli/chunks/quality-C5WUU3AA.js +8 -0
  259. package/dist/cli/chunks/{quality-gate-WANE7TCN.js → quality-gate-WSSRKD5U.js} +3 -3
  260. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
  261. package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
  262. package/dist/cli/chunks/{ref-validation-S7UWXQIP.js → ref-validation-DHKHXVZT.js} +2 -2
  263. package/dist/cli/chunks/{roocode-installer-TEYOQYL6.js → roocode-installer-3PPODABV.js} +2 -2
  264. package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
  265. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
  266. package/dist/cli/chunks/{routing-handler-KDTLMRWD.js → routing-handler-JNXTGT6T.js} +2 -2
  267. package/dist/cli/chunks/{ruvector-commands-AOUDXCYE.js → ruvector-commands-6YLROPVP.js} +2 -2
  268. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
  269. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
  270. package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
  271. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
  272. package/dist/cli/chunks/{rvf-store-integrity-QI47Y354.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
  273. package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
  274. package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
  275. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
  276. package/dist/cli/chunks/{security-SN6MWOJT.js → security-PWQTGDRU.js} +3 -3
  277. package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
  278. package/dist/cli/chunks/{shared-rvf-dual-writer-WU7PFKQM.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
  279. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
  280. package/dist/cli/chunks/{standalone-memory-F6FSRFWC.js → standalone-memory-46KKBSSV.js} +2 -2
  281. package/dist/cli/chunks/{status-handler-DHD5MS4G.js → status-handler-35T5FTDQ.js} +2 -2
  282. package/dist/cli/chunks/{structural-health-P6HPSQMR.js → structural-health-P7QPQWLO.js} +2 -2
  283. package/dist/cli/chunks/{sync-LISJGDSE.js → sync-W6Z4R4PL.js} +2 -2
  284. package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
  285. package/dist/cli/chunks/{task-handler-ZT44NT5Z.js → task-handler-5CX3ZYT7.js} +2 -2
  286. package/dist/cli/chunks/{task-handlers-R6DQ5324.js → task-handlers-DQZGOJNE.js} +3 -3
  287. package/dist/cli/chunks/{test-MUFHR4JQ.js → test-TPP53VVV.js} +12 -12
  288. package/dist/cli/chunks/{test-scheduling-TAUSLZJP.js → test-scheduling-WBV4UMQH.js} +3 -3
  289. package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
  290. package/dist/cli/chunks/{token-usage-IX65ECBR.js → token-usage-AKK37RB7.js} +2 -2
  291. package/dist/cli/chunks/{transformers-QKPSVW2W.js → transformers-7MASPELS.js} +2 -2
  292. package/dist/cli/chunks/{tree-sitter-wasm-parser-Z7PPA2JO.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
  293. package/dist/cli/chunks/{types-ULNNGGGH.js → types-AZ3BTXDP.js} +2 -2
  294. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
  295. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
  296. package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
  297. package/dist/cli/chunks/{upgrade-ECI3YUYA.js → upgrade-L7OTDKEK.js} +2 -2
  298. package/dist/cli/chunks/{validate-3JKRUW2S.js → validate-O3QVFIGP.js} +2 -2
  299. package/dist/cli/chunks/{validate-swarm-LZWANCIE.js → validate-swarm-2UGBGLTX.js} +2 -2
  300. package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
  301. package/dist/cli/chunks/{web-tree-sitter-N5V4A6XG.js → web-tree-sitter-J75IYPRO.js} +2 -2
  302. package/dist/cli/chunks/{windsurf-installer-5TBM5B3C.js → windsurf-installer-FQ5DBFCG.js} +2 -2
  303. package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
  304. package/dist/cli/chunks/{witness-chain-MFP3HBWQ.js → witness-chain-I7TN4MXZ.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-verifier-SRAT7LVY.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
  307. package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
  308. package/dist/cli/chunks/{workflow-M7TUYYXY.js → workflow-6BWTNVV6.js} +28 -28
  309. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
  310. package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
  311. package/dist/cli/commands/ci.js +53 -23
  312. package/dist/cli/commands/code.js +1 -0
  313. package/dist/cli/commands/coverage.d.ts +1 -0
  314. package/dist/cli/commands/coverage.js +182 -138
  315. package/dist/cli/commands/daemon.js +7 -1
  316. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  318. package/dist/cli/commands/learning.js +47 -7
  319. package/dist/cli/commands/quality.d.ts +12 -1
  320. package/dist/cli/commands/quality.js +51 -3
  321. package/dist/cli/commands/test.js +6 -7
  322. package/dist/cli/commands/workflow.js +9 -5
  323. package/dist/cli/handlers/init-guard.d.ts +13 -0
  324. package/dist/cli/handlers/init-guard.js +23 -0
  325. package/dist/cli/handlers/init-handler.d.ts +3 -0
  326. package/dist/cli/handlers/init-handler.js +9 -0
  327. package/dist/cli/handlers/interfaces.js +5 -1
  328. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  329. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  330. package/dist/cli/utils/ci-output.d.ts +22 -5
  331. package/dist/cli/utils/ci-output.js +33 -5
  332. package/dist/cli/utils/coverage-data.d.ts +10 -0
  333. package/dist/cli/utils/coverage-data.js +34 -65
  334. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  335. package/dist/cli/utils/coverage-verdict.js +193 -0
  336. package/dist/cli/utils/file-discovery.js +5 -0
  337. package/dist/contracts/verdicts.d.ts +14 -0
  338. package/dist/contracts/verdicts.js +44 -3
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +150 -121
  343. package/dist/coordination/handlers/coverage-runner.d.ts +143 -0
  344. package/dist/coordination/handlers/coverage-runner.js +462 -0
  345. package/dist/coordination/handlers/coverage-target.d.ts +145 -0
  346. package/dist/coordination/handlers/coverage-target.js +314 -0
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +23 -1
  349. package/dist/coordination/handlers/handler-utils.js +90 -23
  350. package/dist/coordination/handlers/quality-handlers.js +209 -33
  351. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  352. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  353. package/dist/coordination/protocols/defect-investigation.js +6 -3
  354. package/dist/coordination/protocols/quality-gate.js +10 -6
  355. package/dist/coordination/result-saver.d.ts +22 -0
  356. package/dist/coordination/result-saver.js +130 -46
  357. package/dist/coordination/task-executor.d.ts +12 -0
  358. package/dist/coordination/task-executor.js +37 -1
  359. package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
  360. package/dist/domains/code-intelligence/coordinator.js +10 -32
  361. package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
  362. package/dist/domains/code-intelligence/plugin.js +5 -0
  363. package/dist/domains/code-intelligence/project-root-resolver.d.ts +50 -0
  364. package/dist/domains/code-intelligence/project-root-resolver.js +121 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  366. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  367. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  368. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  369. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  370. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  371. package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
  372. package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
  373. package/dist/domains/coverage-analysis/coordinator.js +22 -7
  374. package/dist/domains/coverage-analysis/interfaces.d.ts +59 -0
  375. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  376. package/dist/domains/coverage-analysis/plugin.js +7 -1
  377. package/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +7 -0
  378. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +85 -38
  379. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  380. package/dist/domains/defect-intelligence/plugin.js +4 -0
  381. package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
  382. package/dist/domains/learning-optimization/coordinator.js +4 -0
  383. package/dist/domains/learning-optimization/plugin.js +4 -0
  384. package/dist/domains/quality-assessment/coordinator-claim-verifier.js +2 -1
  385. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  386. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  387. package/dist/domains/quality-assessment/coordinator.js +18 -14
  388. package/dist/domains/quality-assessment/coverage-report-event.d.ts +49 -0
  389. package/dist/domains/quality-assessment/coverage-report-event.js +58 -0
  390. package/dist/domains/quality-assessment/evidence-sufficiency.d.ts +57 -0
  391. package/dist/domains/quality-assessment/evidence-sufficiency.js +97 -0
  392. package/dist/domains/quality-assessment/index.d.ts +2 -2
  393. package/dist/domains/quality-assessment/index.js +1 -1
  394. package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
  395. package/dist/domains/quality-assessment/plugin.js +8 -8
  396. package/dist/domains/quality-assessment/quality-evidence.d.ts +98 -4
  397. package/dist/domains/quality-assessment/quality-evidence.js +152 -8
  398. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  399. package/dist/domains/quality-assessment/services/quality-analyzer.js +203 -116
  400. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  401. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  402. package/dist/domains/test-execution/plugin.js +4 -0
  403. package/dist/domains/test-execution/services/test-executor.js +152 -102
  404. package/dist/domains/test-generation/coordinator.js +4 -0
  405. package/dist/domains/test-generation/plugin.js +4 -0
  406. package/dist/feedback/coverage-learner.js +4 -1
  407. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  408. package/dist/feedback/coverage-session-provenance.js +39 -0
  409. package/dist/init/orchestrator.js +2 -0
  410. package/dist/init/phases/09-assets.d.ts +4 -0
  411. package/dist/init/phases/09-assets.js +35 -0
  412. package/dist/init/retired-assets.d.ts +86 -0
  413. package/dist/init/retired-assets.js +230 -0
  414. package/dist/init/skills-installer.d.ts +2 -0
  415. package/dist/init/skills-installer.js +4 -0
  416. package/dist/init/types.d.ts +3 -0
  417. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  418. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  419. package/dist/integrations/ruvector/server-client.js +4 -12
  420. package/dist/kernel/project-root.d.ts +17 -0
  421. package/dist/kernel/project-root.js +54 -2
  422. package/dist/kernel/shared-dirs.d.ts +66 -0
  423. package/dist/kernel/shared-dirs.js +168 -0
  424. package/dist/learning/daily-log.js +2 -1
  425. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  426. package/dist/learning/experience-capture-middleware.js +35 -0
  427. package/dist/learning/learnable-result.d.ts +16 -0
  428. package/dist/learning/learnable-result.js +24 -0
  429. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  430. package/dist/learning/pattern-mutation-error.js +12 -0
  431. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  432. package/dist/learning/qe-reasoning-bank.js +50 -1
  433. package/dist/learning/rvf-reconcile.d.ts +39 -0
  434. package/dist/learning/rvf-reconcile.js +40 -0
  435. package/dist/learning/sqlite-persistence.d.ts +14 -0
  436. package/dist/learning/sqlite-persistence.js +36 -0
  437. package/dist/mcp/bundle.js +524 -507
  438. package/dist/mcp/handlers/domain-handler-configs.d.ts +49 -2
  439. package/dist/mcp/handlers/domain-handler-configs.js +79 -7
  440. package/dist/mcp/handlers/handler-factory.js +43 -14
  441. package/dist/mcp/handlers/wrapped-domain-handlers.js +7 -1
  442. package/dist/mcp/protocol-server.js +30 -4
  443. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  444. package/dist/mcp/tool-cache-scope.js +71 -0
  445. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  446. package/dist/mcp/tools/coverage-analysis/index.js +1 -0
  447. package/dist/mcp/types.d.ts +10 -0
  448. package/dist/optimization/session-cache.d.ts +19 -1
  449. package/dist/optimization/session-cache.js +36 -2
  450. package/dist/plugins/cache.js +2 -1
  451. package/dist/plugins/sources/github.js +2 -1
  452. package/dist/plugins/sources/npm.js +2 -1
  453. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  454. package/dist/shared/aqe-managed-dirs.js +56 -0
  455. package/dist/shared/events/domain-events.d.ts +20 -3
  456. package/dist/shared/events/domain-events.js +4 -0
  457. package/dist/shared/http/http-client.d.ts +6 -0
  458. package/dist/shared/http/http-client.js +13 -15
  459. package/dist/shared/io/file-reader.d.ts +26 -0
  460. package/dist/shared/io/file-reader.js +111 -17
  461. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  462. package/dist/shared/llm/providers/response-deadline.js +17 -5
  463. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  464. package/dist/shared/metrics/code-metrics.js +93 -6
  465. package/dist/shared/metrics/index.d.ts +1 -1
  466. package/dist/workers/interfaces.d.ts +9 -1
  467. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  468. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  469. package/dist/workers/quality-daemon/index.js +6 -5
  470. package/dist/workers/quality-daemon/notification-service.js +3 -3
  471. package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
  472. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  473. package/dist/workers/worker-manager.js +5 -1
  474. package/dist/workers/workers/coverage-tracker.js +69 -33
  475. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  476. package/dist/workers/workers/regression-monitor.js +276 -117
  477. package/package.json +1 -1
  478. package/dist/cli/chunks/adapter-T54G3TBK.js +0 -2
  479. package/dist/cli/chunks/aqe-learning-engine-HLCJJ3JM.js +0 -2
  480. package/dist/cli/chunks/base-VLD755UU.js +0 -2
  481. package/dist/cli/chunks/browser-workflow-6M6VLWRF.js +0 -2
  482. package/dist/cli/chunks/chunk-5XXLWJU7.js +0 -2
  483. package/dist/cli/chunks/chunk-AHVN3UQZ.js +0 -4
  484. package/dist/cli/chunks/chunk-AOKSLWON.js +0 -742
  485. package/dist/cli/chunks/chunk-CQ3WSTJ2.js +0 -16
  486. package/dist/cli/chunks/chunk-LY53L6NH.js +0 -2
  487. package/dist/cli/chunks/chunk-O7TMY4GS.js +0 -2
  488. package/dist/cli/chunks/chunk-QIAX3JJB.js +0 -3
  489. package/dist/cli/chunks/chunk-RJMBHZYL.js +0 -2
  490. package/dist/cli/chunks/chunk-UORI2CZ4.js +0 -2
  491. package/dist/cli/chunks/chunk-V3NZ23X6.js +0 -2
  492. package/dist/cli/chunks/chunk-WI5AEB7Q.js +0 -2
  493. package/dist/cli/chunks/chunk-XKIFNKHV.js +0 -2
  494. package/dist/cli/chunks/chunk-ZAOQIVHG.js +0 -5
  495. package/dist/cli/chunks/chunk-ZF5JTQEE.js +0 -4
  496. package/dist/cli/chunks/ci-NGMGB43T.js +0 -82
  497. package/dist/cli/chunks/client-FUHNNK5O.js +0 -2
  498. package/dist/cli/chunks/core-handlers-F7TLX4LM.js +0 -2
  499. package/dist/cli/chunks/coverage-IVKDV236.js +0 -27
  500. package/dist/cli/chunks/cross-domain-router-EGWPY67O.js +0 -2
  501. package/dist/cli/chunks/daemon-IPTOSCHM.js +0 -10
  502. package/dist/cli/chunks/dream-V4QN6OF5.js +0 -2
  503. package/dist/cli/chunks/embed-and-insert-pattern-65H4XHWR.js +0 -3
  504. package/dist/cli/chunks/experience-capture-middleware-4JXVF5PL.js +0 -40
  505. package/dist/cli/chunks/file-discovery-R73BYEXB.js +0 -2
  506. package/dist/cli/chunks/heartbeat-scheduler-3N3L6CRM.js +0 -2
  507. package/dist/cli/chunks/hnsw-adapter-2BXJYDXI.js +0 -2
  508. package/dist/cli/chunks/hnsw-index-2DLI5OVO.js +0 -2
  509. package/dist/cli/chunks/hybrid-backend-OW4J65YH.js +0 -2
  510. package/dist/cli/chunks/impact-analyzer-ZH5I2RG6.js +0 -2
  511. package/dist/cli/chunks/init-handler-HETPWU67.js +0 -86
  512. package/dist/cli/chunks/init-wizard-NIKM3ZOK.js +0 -2
  513. package/dist/cli/chunks/kernel-2EOSVM6X.js +0 -2
  514. package/dist/cli/chunks/knowledge-graph-D3BPWNNO.js +0 -2
  515. package/dist/cli/chunks/learning-QLVRZNHT.js +0 -122
  516. package/dist/cli/chunks/llm-router-service-TJPPZFUN.js +0 -2
  517. package/dist/cli/chunks/load-test-RFT7IDOL.js +0 -2
  518. package/dist/cli/chunks/memory-backend-O2O4CFKZ.js +0 -2
  519. package/dist/cli/chunks/memory-handlers-DAEGUDBD.js +0 -2
  520. package/dist/cli/chunks/orchestrator-ORGJ6VAA.js +0 -452
  521. package/dist/cli/chunks/pattern-null-store-TUBNXS34.js +0 -2
  522. package/dist/cli/chunks/plugin-ZVLFNZZ4.js +0 -27
  523. package/dist/cli/chunks/project-root-UCHQH3QL.js +0 -2
  524. package/dist/cli/chunks/protocol-executor-6FQTTO3Y.js +0 -2
  525. package/dist/cli/chunks/qe-reasoning-bank-TKPND56C.js +0 -2
  526. package/dist/cli/chunks/quality-46AK277P.js +0 -7
  527. package/dist/cli/chunks/queen-coordinator-DWMXLPJG.js +0 -2
  528. package/dist/cli/chunks/real-embeddings-56MNGJGJ.js +0 -2
  529. package/dist/cli/chunks/router-QIMUYRCC.js +0 -2
  530. package/dist/cli/chunks/routing-feedback-4OH5ZNF4.js +0 -2
  531. package/dist/cli/chunks/rvf-dual-writer-S6JBZL54.js +0 -2
  532. package/dist/cli/chunks/rvf-migration-adapter-TSGMLMYR.js +0 -2
  533. package/dist/cli/chunks/rvf-migration-coordinator-V74MVBHS.js +0 -2
  534. package/dist/cli/chunks/rvf-native-adapter-Z7QOW47S.js +0 -2
  535. package/dist/cli/chunks/safe-db-JLOVBJNC.js +0 -2
  536. package/dist/cli/chunks/schedule-IM6XOBGR.js +0 -2
  537. package/dist/cli/chunks/scheduler-XL2SVVK5.js +0 -2
  538. package/dist/cli/chunks/shared-rvf-adapter-2LB56LP4.js +0 -2
  539. package/dist/cli/chunks/sqlite-persistence-LWMIIC4U.js +0 -2
  540. package/dist/cli/chunks/sync-SNAXAVCN.js +0 -2
  541. package/dist/cli/chunks/token-bootstrap-UGRH7OPU.js +0 -2
  542. package/dist/cli/chunks/unified-memory-F5IJY7W7.js +0 -2
  543. package/dist/cli/chunks/unified-memory-hnsw-C3WAMAQL.js +0 -2
  544. package/dist/cli/chunks/unified-persistence-EWXXOTCB.js +0 -2
  545. package/dist/cli/chunks/visual-security-CKLTAIAB.js +0 -2
  546. package/dist/cli/chunks/witness-chain-Z6LWFEZS.js +0 -2
  547. package/dist/cli/chunks/witness-chain-repair-5QWRFVUK.js +0 -2
  548. package/dist/cli/chunks/witness-key-manager-FYZXQTLJ.js +0 -2
  549. package/dist/cli/chunks/workflow-orchestrator-OFTAR2NA.js +0 -2
  550. package/dist/cli/chunks/wrappers-COU73OQ6.js +0 -2
  551. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  552. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  553. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  554. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  555. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  556. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -0,0 +1,462 @@
1
+ /**
2
+ * Run a JS/TS project's test runner with coverage — safely (issue #995).
3
+ *
4
+ * Properties, each learned the hard way:
5
+ *
6
+ * 1. **Run from the project root, write to a private temp dir.** The coverage
7
+ * report and the runner's JSON result go to `reportDir`, never into the
8
+ * project tree (#995 wrote `src/coverage/`). The result file is set with
9
+ * plain `--outputFile=` — vitest ignores `--outputFile.json=` when the
10
+ * user's config sets `outputFile` as a string.
11
+ * 2. **No shell, no download.** The runner's own JS entry point is resolved
12
+ * from the project's `node_modules` and started with `process.execPath`.
13
+ * Arguments are an array, so `$(…)`, spaces, `& ^ %` in a path are data on
14
+ * every platform. A runner that isn't installed is reported, never fetched
15
+ * (`npx` would silently download one).
16
+ * 3. **Kill the whole process tree.** Runner → workers is several levels deep.
17
+ * The child is started in its own process group (POSIX) and the group is
18
+ * killed on timeout (`taskkill /T /F` on Windows).
19
+ * 4. **Die with the host.** Every live run is registered; a synchronous
20
+ * `process.on('exit')` hook kills each group and removes its temp dir. That
21
+ * covers every path that ends in `process.exit()` or a natural exit — the
22
+ * MCP server's shutdown on SIGTERM/SIGINT/stdin EOF routes there. It cannot
23
+ * cover SIGKILL of the host (or a signal with no handler installed): no
24
+ * code runs in that case, and the group is left to its own timeout-less
25
+ * fate. Hosts should shut down via a handled signal.
26
+ */
27
+ import { spawn, spawnSync } from 'child_process';
28
+ import * as fs from 'fs';
29
+ import * as os from 'os';
30
+ import * as path from 'path';
31
+ import { safeJsonParse } from '../../shared/safe-json.js';
32
+ import { loadCoverageReportFile } from './coverage-target.js';
33
+ /**
34
+ * Outcome of a coverage run's tests (#1027 NB2): 'failed' when the runner's
35
+ * own result reports a failed test or test suite, 'passed' when it reports
36
+ * none — whatever the exit code (a coverage-threshold failure exits 1 with
37
+ * every test passing). Without counts (nyc), the exit code decides.
38
+ */
39
+ export function testRunStatus(run) {
40
+ if (typeof run.numFailedTests === 'number' || typeof run.numFailedTestSuites === 'number') {
41
+ return (run.numFailedTests ?? 0) > 0 || (run.numFailedTestSuites ?? 0) > 0 ? 'failed' : 'passed';
42
+ }
43
+ return run.exitedCleanly ? 'passed' : 'failed';
44
+ }
45
+ const RESULTS_FILE = 'test-results.json';
46
+ const STDERR_TAIL_BYTES = 2048;
47
+ const STDERR_HEAD_BYTES = 4096;
48
+ const STDERR_PREFIX_BYTES = 512;
49
+ const ERROR_LINE_RE = /^.*(?:error|\[[A-Z][A-Z_]{2,}\]|ERR_[A-Z_]+).*$/im;
50
+ /**
51
+ * Summarise a runner's stderr for a caller: the FIRST error-looking line (or
52
+ * the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
53
+ * loses the cause when a long stack follows it — a vitest config syntax error
54
+ * prints `[PARSE_ERROR] …` first and then kilobytes of frames.
55
+ */
56
+ export function summarizeStderr(head, tail, totalBytes) {
57
+ if (totalBytes <= STDERR_TAIL_BYTES)
58
+ return tail.trim();
59
+ const errorLine = ERROR_LINE_RE.exec(head)?.[0]?.trim();
60
+ const prefix = (errorLine ?? head.slice(0, STDERR_PREFIX_BYTES)).trim();
61
+ if (prefix && tail.includes(prefix))
62
+ return tail.trim();
63
+ return `${prefix}\n…\n${tail.trim()}`;
64
+ }
65
+ // ============================================================================
66
+ // Locating the runner
67
+ // ============================================================================
68
+ /**
69
+ * Find an installed package's bin script, walking up `node_modules` from the
70
+ * project root (hoisted monorepo installs live above the package).
71
+ */
72
+ export function findPackageBin(projectRoot, pkg, binName = pkg, maxDepth = 10) {
73
+ let dir = path.resolve(projectRoot);
74
+ for (let i = 0; i <= maxDepth; i++) {
75
+ const pkgDir = path.join(dir, 'node_modules', pkg);
76
+ try {
77
+ const manifest = JSON.parse(fs.readFileSync(path.join(pkgDir, 'package.json'), 'utf-8'));
78
+ const rel = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.[binName];
79
+ if (rel) {
80
+ const binPath = path.join(pkgDir, rel);
81
+ if (fs.existsSync(binPath))
82
+ return binPath;
83
+ }
84
+ }
85
+ catch {
86
+ // not installed at this level
87
+ }
88
+ const parent = path.dirname(dir);
89
+ if (parent === dir)
90
+ break;
91
+ dir = parent;
92
+ }
93
+ return null;
94
+ }
95
+ function readDeps(projectRoot) {
96
+ try {
97
+ const pkg = safeJsonParse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf-8'));
98
+ return {
99
+ ...(pkg.devDependencies || {}),
100
+ ...(pkg.dependencies || {}),
101
+ };
102
+ }
103
+ catch {
104
+ return {};
105
+ }
106
+ }
107
+ const RUNNER_DEPS = ['jest', '@jest/core', 'mocha', 'nyc', 'vitest'];
108
+ /**
109
+ * The project and its ancestors up to the repository / workspace root: the
110
+ * project itself, then each parent, stopping after the directory holding
111
+ * `.git` (or a `workspaces` manifest), at $HOME, or after `maxDepth` levels.
112
+ */
113
+ function projectAndAncestors(projectRoot, maxDepth = 10) {
114
+ const dirs = [];
115
+ let home = null;
116
+ try {
117
+ home = fs.realpathSync(os.homedir());
118
+ }
119
+ catch {
120
+ home = null;
121
+ }
122
+ let dir = path.resolve(projectRoot);
123
+ for (let i = 0; i <= maxDepth; i++) {
124
+ if (i > 0 && home !== null && dir === home)
125
+ break;
126
+ dirs.push(dir);
127
+ if (fs.existsSync(path.join(dir, '.git')) || isWorkspaceRoot(dir))
128
+ break;
129
+ const parent = path.dirname(dir);
130
+ if (parent === dir)
131
+ break;
132
+ dir = parent;
133
+ }
134
+ return dirs;
135
+ }
136
+ function isWorkspaceRoot(dir) {
137
+ try {
138
+ const pkg = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
139
+ return pkg.workspaces !== undefined;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ }
145
+ /**
146
+ * Dependencies that decide the runner (#1012): the package's own when it
147
+ * declares a test runner, otherwise those of the nearest ancestor (workspace
148
+ * root) that does. A package of a monorepo whose jest is declared only at the
149
+ * root runs jest, not the vitest default.
150
+ */
151
+ function readRunnerDeps(projectRoot) {
152
+ for (const dir of projectAndAncestors(projectRoot)) {
153
+ const deps = readDeps(dir);
154
+ if (RUNNER_DEPS.some(d => deps[d]))
155
+ return deps;
156
+ }
157
+ return {};
158
+ }
159
+ /**
160
+ * Every `node_modules/.bin` from the project up to the workspace root,
161
+ * nearest first. Runners that shell out to sibling tools (nyc → mocha) need
162
+ * the hoisted ones too (#1012).
163
+ */
164
+ export function runnerBinDirs(projectRoot) {
165
+ return projectAndAncestors(projectRoot)
166
+ .map(dir => path.join(dir, 'node_modules', '.bin'))
167
+ .filter(dir => fs.existsSync(dir));
168
+ }
169
+ /** Is the project installed with Yarn Plug'n'Play (no node_modules to resolve from)? */
170
+ function usesPlugNPlay(projectRoot) {
171
+ return projectAndAncestors(projectRoot).some(dir => fs.existsSync(path.join(dir, '.pnp.cjs')) || fs.existsSync(path.join(dir, '.pnp.js')));
172
+ }
173
+ /**
174
+ * Pick the runner and its argv. No shell is involved: `command` is the Node
175
+ * binary and `args[0]` the runner's JS entry, so paths are passed verbatim.
176
+ */
177
+ export function buildJsCoverageInvocation(projectRoot, reportDir) {
178
+ const resultsFile = path.join(reportDir, RESULTS_FILE);
179
+ const deps = readRunnerDeps(projectRoot);
180
+ let runner = 'vitest';
181
+ let runnerArgs;
182
+ let results = resultsFile;
183
+ if (deps['jest'] || deps['@jest/core']) {
184
+ runner = 'jest';
185
+ runnerArgs = ['--coverage', `--coverageDirectory=${reportDir}`, '--coverageReporters=json',
186
+ '--json', `--outputFile=${resultsFile}`];
187
+ }
188
+ else if (deps['mocha'] || deps['nyc']) {
189
+ runner = 'nyc';
190
+ runnerArgs = [`--report-dir=${reportDir}`, `--temp-dir=${path.join(reportDir, '.nyc_output')}`,
191
+ '--reporter=json', 'mocha'];
192
+ results = null;
193
+ }
194
+ else {
195
+ // vitest is the default — covers vitest, @vitest/coverage-v8, etc.
196
+ // Plain `--outputFile=` (not `.json=`): it overrides a string, object, or
197
+ // absent `outputFile` in the user's config alike.
198
+ // #1027 N4: vitest writes no coverage when a test fails unless asked;
199
+ // coverage from a failing suite is still a measurement (runStatus 'failed').
200
+ runnerArgs = ['run', '--coverage', `--coverage.reportsDirectory=${reportDir}`,
201
+ '--coverage.reporter=json', '--coverage.reportOnFailure=true', '--reporter=json', `--outputFile=${resultsFile}`];
202
+ }
203
+ const bin = findPackageBin(projectRoot, runner === 'jest' ? 'jest' : runner);
204
+ return {
205
+ runner,
206
+ command: bin ? process.execPath : null,
207
+ args: bin ? [bin, ...runnerArgs] : runnerArgs,
208
+ resultsFile: results,
209
+ };
210
+ }
211
+ const NO_COUNTS = {
212
+ numTotalTests: null, numPassedTests: null, numFailedTests: null, numPendingTests: null, numFailedTestSuites: null,
213
+ };
214
+ /** Test counts from the runner's own JSON result (vitest/jest share the shape). */
215
+ function readRunCounts(resultsFile) {
216
+ if (!resultsFile)
217
+ return NO_COUNTS;
218
+ try {
219
+ const parsed = JSON.parse(fs.readFileSync(resultsFile, 'utf-8'));
220
+ const n = (k) => (typeof parsed[k] === 'number' ? parsed[k] : null);
221
+ return {
222
+ numTotalTests: n('numTotalTests'), numPassedTests: n('numPassedTests'), numFailedTests: n('numFailedTests'),
223
+ numPendingTests: n('numPendingTests'), numFailedTestSuites: n('numFailedTestSuites'),
224
+ };
225
+ }
226
+ catch {
227
+ return NO_COUNTS;
228
+ }
229
+ }
230
+ /**
231
+ * Read the istanbul report the runner wrote. Distinguishes an EMPTY report
232
+ * (`{}` — the run instrumented nothing) from NO report.
233
+ */
234
+ async function readRunReport(file) {
235
+ const data = await loadCoverageReportFile(file);
236
+ if (data)
237
+ return data;
238
+ try {
239
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
240
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && Object.keys(parsed).length === 0) {
241
+ return { files: [], summary: { line: 0, branch: 0, function: 0, statement: 0, files: 0 } };
242
+ }
243
+ }
244
+ catch {
245
+ // absent or unparseable
246
+ }
247
+ return null;
248
+ }
249
+ // ============================================================================
250
+ // Process-tree lifecycle
251
+ // ============================================================================
252
+ /** Live runs: process-group leader pid → temp dir to remove. */
253
+ const liveRuns = new Map();
254
+ let exitHookInstalled = false;
255
+ function killTree(pid, signal) {
256
+ if (process.platform === 'win32') {
257
+ // Windows has no process groups; taskkill /T walks the tree.
258
+ try {
259
+ spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore' });
260
+ }
261
+ catch { /* gone */ }
262
+ return;
263
+ }
264
+ try {
265
+ process.kill(-pid, signal);
266
+ }
267
+ catch { /* group already gone */ }
268
+ }
269
+ /**
270
+ * Synchronously kill every live coverage run and remove its temp dir. Runs from
271
+ * `process.on('exit')`, where only synchronous work is possible.
272
+ */
273
+ export function killAllLiveRunsSync() {
274
+ for (const [pid, dir] of liveRuns) {
275
+ killTree(pid, 'SIGKILL');
276
+ if (dir) {
277
+ try {
278
+ fs.rmSync(dir, { recursive: true, force: true });
279
+ }
280
+ catch { /* best-effort */ }
281
+ }
282
+ }
283
+ liveRuns.clear();
284
+ }
285
+ /** Number of runs currently registered (for tests and diagnostics). */
286
+ export function liveRunCount() {
287
+ return liveRuns.size;
288
+ }
289
+ function ensureExitHook() {
290
+ if (exitHookInstalled)
291
+ return;
292
+ process.on('exit', killAllLiveRunsSync);
293
+ exitHookInstalled = true;
294
+ }
295
+ /** Is any process of this group still alive? */
296
+ function groupAlive(pgid) {
297
+ try {
298
+ process.kill(-pgid, 0);
299
+ return true;
300
+ }
301
+ catch {
302
+ return false;
303
+ }
304
+ }
305
+ async function waitForGroupExit(pid, maxMs) {
306
+ if (process.platform === 'win32')
307
+ return;
308
+ const deadline = Date.now() + maxMs;
309
+ while (groupAlive(pid) && Date.now() < deadline) {
310
+ await new Promise(r => setTimeout(r, 50));
311
+ }
312
+ }
313
+ /**
314
+ * Spawn `command args` in `cwd` (no shell) as the leader of a new process
315
+ * group, wait for it, and on timeout kill the entire group. Resolves only once
316
+ * no process of the group remains (bounded), so the caller can safely delete
317
+ * its temp dir. While running, the group and `cleanupDir` are registered with
318
+ * the exit hook so they never outlive the host process.
319
+ */
320
+ export async function runProcessTree(command, args, options) {
321
+ const graceMs = options.graceMs ?? 3000;
322
+ const isWindows = process.platform === 'win32';
323
+ ensureExitHook();
324
+ return new Promise(resolve => {
325
+ let timedOut = false;
326
+ let settled = false;
327
+ let stderrTail = '';
328
+ let stderrHead = '';
329
+ let stderrBytes = 0;
330
+ const child = spawn(command, args, {
331
+ cwd: options.cwd,
332
+ env: options.env ?? process.env,
333
+ // Own process group (POSIX) so the whole tree can be signalled at once.
334
+ detached: !isWindows,
335
+ shell: false,
336
+ stdio: ['ignore', 'ignore', 'pipe'],
337
+ windowsHide: true,
338
+ });
339
+ if (child.pid !== undefined)
340
+ liveRuns.set(child.pid, options.cleanupDir);
341
+ child.stderr?.on('data', (chunk) => {
342
+ const text = chunk.toString('utf-8');
343
+ stderrBytes += chunk.length;
344
+ if (stderrHead.length < STDERR_HEAD_BYTES)
345
+ stderrHead = (stderrHead + text).slice(0, STDERR_HEAD_BYTES);
346
+ stderrTail = (stderrTail + text).slice(-STDERR_TAIL_BYTES);
347
+ });
348
+ // A grandchild holding the pipe open must not keep the host alive.
349
+ child.stderr?.on('error', () => { });
350
+ const finish = async (exitCode, spawnError) => {
351
+ if (settled)
352
+ return;
353
+ settled = true;
354
+ clearTimeout(timer);
355
+ if (child.pid !== undefined && !isWindows && groupAlive(child.pid)) {
356
+ // Anything left in the group after the runner exited is orphaned work
357
+ // (stray workers, a hung watcher). Sweep it before the caller cleans up.
358
+ killTree(child.pid, 'SIGTERM');
359
+ await waitForGroupExit(child.pid, graceMs);
360
+ if (groupAlive(child.pid))
361
+ killTree(child.pid, 'SIGKILL');
362
+ await waitForGroupExit(child.pid, graceMs);
363
+ }
364
+ child.stderr?.destroy();
365
+ if (child.pid !== undefined)
366
+ liveRuns.delete(child.pid);
367
+ resolve({
368
+ exitCode, timedOut, spawnError, pid: child.pid,
369
+ stderrTail: summarizeStderr(stderrHead, stderrTail, stderrBytes),
370
+ });
371
+ };
372
+ const timer = setTimeout(() => {
373
+ timedOut = true;
374
+ if (child.pid === undefined)
375
+ return;
376
+ killTree(child.pid, 'SIGTERM');
377
+ setTimeout(() => { if (!settled && child.pid !== undefined)
378
+ killTree(child.pid, 'SIGKILL'); }, graceMs).unref();
379
+ }, options.timeoutMs);
380
+ child.on('error', () => { void finish(null, true); });
381
+ child.on('exit', code => { void finish(code, false); });
382
+ });
383
+ }
384
+ /**
385
+ * Run the project's test runner with coverage from `projectRoot`.
386
+ *
387
+ * Everything the runner writes goes to a fresh temp dir that is removed before
388
+ * this returns — after the whole process group is gone — or by the exit hook if
389
+ * the host exits first.
390
+ */
391
+ export async function runJsCoverage(projectRoot, options = {}) {
392
+ const timeoutMs = options.timeoutMs ?? 120000;
393
+ const reportDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aqe-js-cov-'));
394
+ try {
395
+ const inv = buildJsCoverageInvocation(projectRoot, reportDir);
396
+ if (!inv.command) {
397
+ return {
398
+ runner: inv.runner, missing: true, exitCode: null, exitedCleanly: false, timedOut: false,
399
+ timeoutMs, data: null, numTotalTests: null, stderrTail: '',
400
+ };
401
+ }
402
+ // Runners that shell out to sibling tools (nyc → mocha) find them here,
403
+ // including hoisted workspace-root installs (#1012).
404
+ const binDirs = runnerBinDirs(projectRoot);
405
+ // The runner's own temp files (vite's SSR cache, etc.) go inside reportDir
406
+ // too, so a killed run leaves nothing behind in the system temp dir.
407
+ const runnerTmp = path.join(reportDir, 'tmp');
408
+ fs.mkdirSync(runnerTmp);
409
+ const env = {
410
+ ...process.env,
411
+ PATH: [...binDirs, process.env.PATH ?? ''].join(path.delimiter),
412
+ TMPDIR: runnerTmp, TMP: runnerTmp, TEMP: runnerTmp,
413
+ };
414
+ const run = await runProcessTree(inv.command, inv.args, {
415
+ cwd: projectRoot, timeoutMs, cleanupDir: reportDir, env,
416
+ });
417
+ const data = run.timedOut ? null : await readRunReport(path.join(reportDir, 'coverage-final.json'));
418
+ return {
419
+ runner: inv.runner,
420
+ missing: false,
421
+ exitCode: run.exitCode,
422
+ exitedCleanly: run.exitCode === 0 && !run.timedOut,
423
+ timedOut: run.timedOut,
424
+ timeoutMs,
425
+ data,
426
+ ...(run.timedOut ? NO_COUNTS : readRunCounts(inv.resultsFile)),
427
+ stderrTail: run.stderrTail,
428
+ };
429
+ }
430
+ finally {
431
+ try {
432
+ fs.rmSync(reportDir, { recursive: true, force: true });
433
+ }
434
+ catch { /* best-effort */ }
435
+ }
436
+ }
437
+ /**
438
+ * One-line, caller-facing explanation of why a run produced no usable report.
439
+ * Never "No instrumentation ran" when the runner did run and failed.
440
+ */
441
+ export function describeRunFailure(run, projectRoot) {
442
+ if (run.missing && usesPlugNPlay(projectRoot)) {
443
+ return `${run.runner} could not be resolved for ${projectRoot}: this project uses Yarn Plug'n'Play, ` +
444
+ 'and agentic-qe resolves test runners only from node_modules. Nothing was run and nothing was downloaded. ' +
445
+ `Generate a coverage report (e.g. \`yarn ${run.runner} --coverage\`) and pass it as the target, ` +
446
+ 'or use the node-modules linker.';
447
+ }
448
+ if (run.missing) {
449
+ return `${run.runner} is not installed in ${projectRoot} (no node_modules/${run.runner} found); ` +
450
+ 'nothing was run and nothing was downloaded. Install it, or generate a coverage report and pass it as the target.';
451
+ }
452
+ if (run.timedOut) {
453
+ return `The coverage run timed out after ${Math.round(run.timeoutMs / 1000)}s and was stopped.`;
454
+ }
455
+ if (run.exitCode !== 0) {
456
+ const tail = run.stderrTail ? `: ${run.stderrTail}` : '';
457
+ return `Test runner (${run.runner}) exited with code ${run.exitCode ?? 'unknown'} without a coverage report${tail}`;
458
+ }
459
+ return `Test runner (${run.runner}) exited cleanly but wrote no coverage report. ` +
460
+ 'Ensure a coverage provider is configured (e.g., @vitest/coverage-v8, istanbul).';
461
+ }
462
+ //# sourceMappingURL=coverage-runner.js.map
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Coverage target resolution (issue #995).
3
+ *
4
+ * A coverage target can be the project root, a subfolder of it, a single source
5
+ * file, or an existing coverage report. Before #995 every target was treated as
6
+ * if it were the project root: `target: "src/"` ran vitest FROM `src/` (which
7
+ * found no tests, reported 0%, and wrote `src/coverage/` into the source tree),
8
+ * and `target: "coverage/lcov.info"` was searched for a `coverage/` folder
9
+ * inside a file and came back empty.
10
+ *
11
+ * This module answers the three questions every collector needs first:
12
+ * 1. Which project does the target belong to? (`findCoverageProjectRoot`)
13
+ * 2. Is the target itself a coverage report? (`isCoverageReportFile` /
14
+ * `loadCoverageReportFile`)
15
+ * 3. Which entries of a project-wide report belong to the target?
16
+ * (`scopeCoverageToTarget`)
17
+ *
18
+ * Kept free of task-executor and child-process imports so both the MCP handler
19
+ * and the CLI `coverage` command can share it.
20
+ */
21
+ import type { CoverageData, FileCoverage } from '../../domains/coverage-analysis/interfaces';
22
+ /**
23
+ * Walk up from a target to the nearest directory that holds a project marker.
24
+ *
25
+ * NEAREST rather than topmost: in a monorepo, `packages/core/src` belongs to
26
+ * `packages/core` (its own package.json and test config), not the workspace
27
+ * root. This intentionally differs from `kernel/findProjectRoot`, which locates
28
+ * the AQE data root (honouring AQE_PROJECT_ROOT and `.agentic-qe`).
29
+ *
30
+ * Returns `null` when the target does not exist (a typo must not silently
31
+ * resolve to — and run tests for — an ancestor project) or when no marker is
32
+ * found below the home directory / filesystem root within `maxDepth` levels.
33
+ */
34
+ export declare function findCoverageProjectRoot(target: string, maxDepth?: number): string | null;
35
+ /** Is this path (by name) a coverage report rather than source code? */
36
+ export declare function isCoverageReportFile(filePath: string): boolean;
37
+ /**
38
+ * Parse a coverage report file of any supported format.
39
+ *
40
+ * Returns `null` — never an empty "0%" report — when the file can't be read,
41
+ * can't be parsed, or lists no files.
42
+ */
43
+ export declare function loadCoverageReportFile(filePath: string): Promise<CoverageData | null>;
44
+ /**
45
+ * Keep only the report entries that lie under `target`.
46
+ *
47
+ * Report paths come in two shapes: absolute (istanbul `coverage-final.json`)
48
+ * and project-root-relative (vitest/jest `lcov.info` writes `SF:src/math.ts`).
49
+ * Relative entries are resolved against `root` before comparing. Entry paths are
50
+ * returned unchanged.
51
+ */
52
+ export declare function scopeCoverageToTarget(data: CoverageData, root: string, target: string): FileCoverage[];
53
+ /** Why there are no coverage figures for a target. */
54
+ export type NoDataReason =
55
+ /** The target path does not exist. */
56
+ 'target-missing'
57
+ /** A coverage report was given but cannot be parsed (malformed, raw V8, empty). */
58
+ | 'unreadable-report'
59
+ /** The report lists only test files. */
60
+ | 'test-only-report'
61
+ /** The report has no entries under the target — it did not measure it. */
62
+ | 'target-not-covered'
63
+ /** The test runner itself reports running zero tests. */
64
+ | 'no-tests-ran';
65
+ export type CoverageEvaluation = {
66
+ status: 'measured';
67
+ files: FileCoverage[];
68
+ } | {
69
+ status: 'no-data';
70
+ reason: NoDataReason;
71
+ };
72
+ /**
73
+ * Decide what a report says about `target`. Shared by the MCP handler and the
74
+ * CLI so the two cannot disagree (#995 review B2).
75
+ *
76
+ * "Unmeasured" is decided ONLY from evidence that nothing was measured:
77
+ * - the runner's own result says it ran 0 tests (`numTotalTests === 0`), or
78
+ * - the report has no entry under the target.
79
+ * Hit counts are never used: a file listed with 0 hits is a measured 0%,
80
+ * whether the report came from our run or from the user (#995 review B3).
81
+ */
82
+ export declare function evaluateCoverageForTarget(report: CoverageData, projectRoot: string, target: string, options?: {
83
+ numTotalTests?: number | null;
84
+ }): CoverageEvaluation;
85
+ export type ExistingCoverage = {
86
+ status: 'target-missing';
87
+ target: string;
88
+ } | {
89
+ status: 'no-report';
90
+ target: string;
91
+ projectRoot: string;
92
+ } | {
93
+ status: 'evaluated';
94
+ target: string;
95
+ projectRoot: string;
96
+ source: 'report-file' | 'project-report';
97
+ evaluation: CoverageEvaluation;
98
+ };
99
+ /**
100
+ * Resolve a target to coverage that already exists on disk, without running
101
+ * anything:
102
+ * - a coverage report passed as the target is parsed and analysed whole;
103
+ * - otherwise the PROJECT ROOT's report (not the cwd's, not the subfolder's)
104
+ * is scoped to the target;
105
+ * - `no-report` tells the caller it may run tooling from `projectRoot`.
106
+ */
107
+ export declare function resolveExistingCoverage(targetPath: string): Promise<ExistingCoverage>;
108
+ /**
109
+ * Threshold verdict over the metrics that were actually collected. Shared by
110
+ * MCP and CLI (#995 review NB5): an uncollected metric (no branch data in the
111
+ * report) is null, and a null must not drag the average down as a fake 0.
112
+ */
113
+ export declare function thresholdVerdict(summary: {
114
+ line: number;
115
+ branch: number;
116
+ function: number;
117
+ statement: number;
118
+ }, threshold: number, collected: {
119
+ branch: boolean;
120
+ function: boolean;
121
+ statement?: boolean;
122
+ }): {
123
+ overall: number;
124
+ meetsThreshold: boolean;
125
+ };
126
+ /**
127
+ * Make the analyzer's recommendations agree with `thresholdVerdict`
128
+ * (#995 review NB-A). The analyzer computes its "Coverage is X% below
129
+ * threshold" line from a 4-metric average that counts an uncollected metric as
130
+ * 0 — so a line-only report at 90% got "Met" next to "35.0% below threshold".
131
+ * Here the shortfall line is recomputed from the collected-metrics verdict,
132
+ * and advice about a metric that was never collected is dropped.
133
+ */
134
+ export declare function reconcileRecommendations(recommendations: string[], verdict: {
135
+ overall: number;
136
+ meetsThreshold: boolean;
137
+ }, threshold: number, collected: {
138
+ branch: boolean;
139
+ function: boolean;
140
+ }): string[];
141
+ /** Is this verdict "no measurement exists" (as opposed to an error or test-only report)? */
142
+ export declare function isUnmeasured(reason: NoDataReason): boolean;
143
+ /** Caller-facing explanation of a no-data verdict. Shared by MCP and CLI. */
144
+ export declare function describeNoData(reason: NoDataReason, target: string, projectRoot: string | null): string;
145
+ //# sourceMappingURL=coverage-target.d.ts.map