agentic-qe 3.15.10 → 3.15.12

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 (536) hide show
  1. package/.claude/hooks/aqe-hook.cjs +38 -2
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +263 -0
  4. package/README.md +8 -0
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/adapters/a2a/agent-cards/generator.js +6 -3
  7. package/dist/adapters/a2a/tasks/task-router.js +3 -1
  8. package/dist/adapters/trajectory-adapter.js +1 -1
  9. package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
  10. package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
  11. package/dist/agents/overlay-loader.js +26 -21
  12. package/dist/cli/bundle.js +6 -6
  13. package/dist/cli/chunks/adapter-HL7MOCQN.js +2 -0
  14. package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-5VZCKTIJ.js} +2 -2
  15. package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-K3C6CQCD.js} +2 -2
  16. package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-NVFQ25WS.js} +2 -2
  17. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +2 -0
  18. package/dist/cli/chunks/{arena-EKOOFVST.js → arena-QGWIJADQ.js} +2 -2
  19. package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-TSZVDSXS.js} +4 -4
  20. package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-KIEE2SHJ.js} +3 -3
  21. package/dist/cli/chunks/base-WIM7G3HC.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BNB32NW3.js} +2 -2
  23. package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-MPC5SPYI.js} +3 -3
  24. package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-LZ7UXKAY.js} +2 -2
  25. package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-VDHAW4RK.js} +2 -2
  26. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +2 -0
  27. package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-23PQF7NN.js} +1 -1
  28. package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-26672ISV.js} +2 -2
  29. package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-2ASQRBK2.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-2E2QO44T.js} +2 -2
  31. package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-2IVE5AR3.js} +1 -1
  32. package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-2JYUA27M.js} +1 -1
  33. package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-2PPSS4JD.js} +2 -2
  34. package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-32UTHIY5.js} +5 -5
  35. package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-33I2ZP6E.js} +2 -2
  36. package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-35MIUSXQ.js} +2 -2
  37. package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-35NW676P.js} +2 -2
  38. package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-3EWQN37E.js} +2 -2
  39. package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-3IU4LDZR.js} +2 -2
  40. package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-47RMGDG4.js} +2 -2
  41. package/dist/cli/chunks/chunk-4A76VPU4.js +3 -0
  42. package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4CB3QPZM.js} +2 -2
  43. package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-4HWUECVD.js} +5 -5
  44. package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-4KUOYDY2.js} +5 -5
  45. package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-4LWMAAWK.js} +2 -2
  46. package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-4PU5GTZW.js} +2 -2
  47. package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-4SA7M34P.js} +1 -1
  48. package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-4Y6OEBJZ.js} +1 -1
  49. package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-5A66EGEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-5ADXFUMO.js} +2 -2
  51. package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-5S4UIDFK.js} +1 -1
  52. package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-5TAEW5OV.js} +1 -1
  53. package/dist/cli/chunks/chunk-5Z23ZMXZ.js +742 -0
  54. package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-65TH6RPD.js} +1 -1
  55. package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-66PXR3NI.js} +2 -2
  56. package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-6E6HB4N4.js} +14 -14
  57. package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-6QRI3JVE.js} +2 -2
  58. package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-7DNR4KKR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-7JFDLL2F.js} +1 -1
  60. package/dist/cli/chunks/chunk-7OEFBWAG.js +5 -0
  61. package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-7QEUHNKO.js} +1 -1
  62. package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7TA5MUPW.js} +1 -1
  63. package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-A2JCRXTK.js} +2 -2
  64. package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-A5Y7DAVQ.js} +2 -2
  65. package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-ADUAJIAU.js} +2 -2
  66. package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-AJEXPFAB.js} +1 -1
  67. package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-BC4T6SCV.js} +4 -4
  68. package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-BMG2JLSQ.js} +2 -2
  69. package/dist/cli/chunks/chunk-BOSMELJX.js +180 -0
  70. package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-BYRCB5JT.js} +2 -2
  71. package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-C3YOVASQ.js} +6 -5
  72. package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-C74M4WUI.js} +2 -2
  73. package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-CA5UNWQF.js} +2 -2
  74. package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-CDA5Z74H.js} +2 -2
  75. package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-CPIBIR3X.js} +2 -2
  76. package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-CU36D7TN.js} +2 -2
  77. package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-DAUEK66C.js} +1 -1
  78. package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-DRCBRUGN.js} +2 -2
  79. package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-DZGPUGUG.js} +2 -2
  80. package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-EF6OERRR.js} +1 -1
  81. package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-EN7GRVEQ.js} +2 -2
  82. package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-ENGL7FIJ.js} +1 -1
  83. package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-FAGKBOX2.js} +2 -2
  84. package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FNUFTWEO.js} +3 -3
  85. package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-FZJCBSN4.js} +2 -2
  86. package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-G24SWTAX.js} +151 -149
  87. package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-G3AABG4Q.js} +2 -2
  88. package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-GJKZ7UQO.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-GKFV6CUD.js} +2 -2
  90. package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-HLGFHHWV.js} +2 -2
  91. package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-HM3LSFTY.js} +2 -2
  92. package/dist/cli/chunks/chunk-HSA5IGGW.js +2 -0
  93. package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-HZBXJFGN.js} +2 -2
  94. package/dist/cli/chunks/chunk-IA55PFLG.js +7 -0
  95. package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-ICKUINKD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-IETBWYHW.js} +2 -2
  97. package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-IL7GQNNE.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-INZARYUD.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-IPA7K556.js} +2 -2
  100. package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-IVTQF55W.js} +3 -3
  101. package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-J7Y7ZBIT.js} +8 -8
  102. package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-JGIJPDGD.js} +2 -2
  103. package/dist/cli/chunks/chunk-JNXK47OL.js +2 -0
  104. package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-JOWUS2X5.js} +1 -1
  105. package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-JR6CUKAI.js} +2 -2
  106. package/dist/cli/chunks/chunk-JRYWLOBD.js +21 -0
  107. package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-JW5PDJ5O.js} +11 -11
  108. package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-K3A3NWT3.js} +2 -2
  109. package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-KA5SHLMW.js} +2 -2
  110. package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-KGA7VAI4.js} +2 -2
  111. package/dist/cli/chunks/chunk-KJDI5CHX.js +2 -0
  112. package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-L3PV7VXK.js} +1 -1
  113. package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-L7NGKANW.js} +32 -32
  114. package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-LFBA735S.js} +7 -7
  115. package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-MAJXZYGK.js} +1 -1
  116. package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-MCPEC6OO.js} +1 -1
  117. package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-MCPXNUDK.js} +2 -2
  118. package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-MMEALJ4D.js} +2 -2
  119. package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-MYF5CNGV.js} +2 -2
  120. package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-MYUMJ2ZI.js} +1 -1
  121. package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-N7O3PF6Y.js} +2 -2
  122. package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-NA3F6FEO.js} +2 -2
  123. package/dist/cli/chunks/chunk-NNBQZR73.js +6 -0
  124. package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-NV74SICL.js} +2 -2
  125. package/dist/cli/chunks/chunk-NVRYELCY.js +13 -0
  126. package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-NX4BCSOZ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-O3IM4WRZ.js} +2 -2
  128. package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-O4QJMANM.js} +1 -1
  129. package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-OHVYINGM.js} +18 -18
  130. package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-P5E26N2X.js} +2 -2
  131. package/dist/cli/chunks/chunk-P7UFJ6DO.js +14 -0
  132. package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-PGSJBXTD.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-PT2NXS43.js} +1 -1
  134. package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-PTBOLBM4.js} +2 -2
  135. package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-PX5OPXY6.js} +1 -1
  136. package/dist/cli/chunks/chunk-QCPVUNN3.js +2 -0
  137. package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-QSGEBCDB.js} +2 -2
  138. package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-QUJJYTJH.js} +2 -2
  139. package/dist/cli/chunks/chunk-QWG3SILX.js +59 -0
  140. package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-RCOLPF3B.js} +2 -2
  141. package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-RYHG3I7J.js} +2 -2
  142. package/dist/cli/chunks/chunk-SBHM5X2S.js +4 -0
  143. package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-SDRJJUPO.js} +1 -1
  144. package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-SG2TX72G.js} +2 -2
  145. package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-SITL5YZV.js} +4 -4
  146. package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-SPC4RBLF.js} +2 -2
  147. package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-SQVZ3TRU.js} +2 -2
  148. package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-SUX5XB2Z.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-T4EN5VVK.js} +2 -2
  150. package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-TGMXUZZC.js} +2 -2
  151. package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-TLRHAMX5.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-TOWOJGEI.js} +1 -1
  153. package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-TSOQ2QLT.js} +3 -3
  154. package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-TVA5GRIU.js} +2 -2
  155. package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-TXEUVUMO.js} +1 -1
  156. package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-U6IXYQO4.js} +2 -2
  157. package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-U7ZHDGXG.js} +1 -1
  158. package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-UCSK2RMI.js} +2 -2
  159. package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-UIKQPO4Y.js} +2 -2
  160. package/dist/cli/chunks/chunk-UJNGGFGX.js +2 -0
  161. package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-ULCW6IVQ.js} +2 -2
  162. package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-UREDS662.js} +2 -2
  163. package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-URSTP3WI.js} +2 -2
  164. package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-UUZZXHUF.js} +2 -2
  165. package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-UZED4YZ5.js} +1 -1
  166. package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-VF7FTD64.js} +1 -1
  167. package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-VUR5THML.js} +2 -2
  168. package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-VXVTFKRA.js} +2 -2
  169. package/dist/cli/chunks/chunk-VZBC6DP7.js +2 -0
  170. package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-W4II6SIH.js} +2 -2
  171. package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-W5HQIYQU.js} +3 -3
  172. package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-W7H55PY4.js} +1 -1
  173. package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-WDEXOLK2.js} +1 -1
  174. package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-WGTEZT7G.js} +2 -2
  175. package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-WLRU6ESI.js} +2 -2
  176. package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-WTAUF6O4.js} +2 -2
  177. package/dist/cli/chunks/chunk-XCNSGSKV.js +3 -0
  178. package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-XZOYKB22.js} +2 -2
  179. package/dist/cli/chunks/chunk-YIDAXOUX.js +8 -0
  180. package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-YLKIXEPP.js} +1 -1
  181. package/dist/cli/chunks/chunk-YNVEDFPQ.js +2 -0
  182. package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-YUA6ZKKY.js} +2 -2
  183. package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-YVJEUX3I.js} +2 -2
  184. package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-YWWMNTBF.js} +2 -2
  185. package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-ZGROHCOW.js} +2 -2
  186. package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-ZPVGX4DI.js} +2 -2
  187. package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-ZROAMFX2.js} +2 -2
  188. package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-ZYOYR3UR.js} +1 -1
  189. package/dist/cli/chunks/ci-BZNWW3I3.js +81 -0
  190. package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-LOHNXOKV.js} +2 -2
  191. package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-LCOQBSJL.js} +2 -2
  192. package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-7LRXTLFE.js} +2 -2
  193. package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-HBU4VWC3.js} +2 -2
  194. package/dist/cli/chunks/client-4PNYDFYS.js +2 -0
  195. package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-CO6MLH6X.js} +2 -2
  196. package/dist/cli/chunks/{code-ZDJRIL3S.js → code-SIXBS6JM.js} +3 -3
  197. package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-GWJKZ2IQ.js} +2 -2
  198. package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-6NINVWXJ.js} +2 -2
  199. package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-7VIX3GML.js} +2 -2
  200. package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-FBQR6ZP2.js} +2 -2
  201. package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-VA7RIXW5.js} +2 -2
  202. package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4QEBC4MU.js} +2 -2
  203. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +2 -0
  204. package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-GRYKHPWL.js} +2 -2
  205. package/dist/cli/chunks/coverage-USPMNKOU.js +50 -0
  206. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +2 -0
  207. package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-ZXIPSZVH.js} +2 -2
  208. package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-D7F3RGI5.js} +3 -3
  209. package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-N2VRHPSJ.js} +4 -4
  210. package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-NL6BA7BY.js} +2 -2
  211. package/dist/cli/chunks/{detect-56SKAGWX.js → detect-XC2HCIIT.js} +2 -2
  212. package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-A3Y26MEI.js} +2 -2
  213. package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-WV6SFXRB.js} +2 -2
  214. package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-KJIF6Z2B.js} +2 -2
  215. package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-L3F6AES2.js} +2 -2
  216. package/dist/cli/chunks/dream-QOB3JCOM.js +2 -0
  217. package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-PA3Y4KGO.js} +2 -2
  218. package/dist/cli/chunks/{eval-GNB574IM.js → eval-YGEZNUVE.js} +2 -2
  219. package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-D4T7NW6B.js} +3 -3
  220. package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-6JYK7RYQ.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-DKXMDVPE.js} +2 -2
  222. package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-RBH2GDSR.js} +2 -2
  223. package/dist/cli/chunks/file-discovery-BN76S2PR.js +2 -0
  224. package/dist/cli/chunks/fleet-43YMXACN.js +46 -0
  225. package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-MV54UC4C.js} +2 -2
  226. package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-7DKMVQQH.js} +4 -4
  227. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +2 -0
  228. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +2 -0
  229. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +2 -0
  230. package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-6IWREDQC.js} +2 -2
  231. package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-5BIESSCK.js} +2 -2
  232. package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-3EETRM62.js} +30 -30
  233. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +2 -0
  234. package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-RSWCB2D3.js} +2 -2
  235. package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-552LXKL3.js} +3 -3
  236. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +2 -0
  237. package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-OTDBJ5HD.js} +2 -2
  238. package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-3FK3TKEA.js} +26 -25
  239. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +2 -0
  240. package/dist/cli/chunks/kernel-2WZOQEZS.js +2 -0
  241. package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-KZ2O4LF3.js} +2 -2
  242. package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-MLCCXRF7.js} +2 -2
  243. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +2 -0
  244. package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-QUCMBD77.js} +3 -3
  245. package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-PDEV3UP2.js} +4 -4
  246. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +2 -0
  247. package/dist/cli/chunks/{load-HPHKDGGL.js → load-XFVVLO7E.js} +2 -2
  248. package/dist/cli/chunks/load-test-BEWEE44J.js +2 -0
  249. package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-74G3CL2S.js} +2 -2
  250. package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-XIFM6JNX.js} +5 -5
  251. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +2 -0
  252. package/dist/cli/chunks/memory-handlers-ZCKURV6S.js +2 -0
  253. package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-7L4W3O2Q.js} +2 -2
  254. package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-BPG422LF.js} +2 -2
  255. package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-OEAFLAEV.js} +61 -23
  256. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +2 -0
  257. package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-LOPNCULT.js} +2 -2
  258. package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-VWTYUZB7.js} +2 -2
  259. package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-WFJJ3X2E.js} +2 -2
  260. package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-744TPUSG.js} +2 -2
  261. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-BD5BLNDR.js} +2 -2
  262. package/dist/cli/chunks/project-root-C7ELXZRK.js +2 -0
  263. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +2 -0
  264. package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-JIBILI74.js} +2 -2
  265. package/dist/cli/chunks/{prove-H52QGC6B.js → prove-MNOL5FYW.js} +2 -2
  266. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +2 -0
  267. package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-JEGBDGGX.js} +2 -2
  268. package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-SYJ6ROMI.js} +3 -3
  269. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +2 -0
  270. package/dist/cli/chunks/real-embeddings-ZWXS5ZFV.js +2 -0
  271. package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-RRHUFW2N.js} +2 -2
  272. package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-XFO6JSVN.js} +2 -2
  273. package/dist/cli/chunks/router-4FTAVYLJ.js +2 -0
  274. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +2 -0
  275. package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-L2K3JASE.js} +2 -2
  276. package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-A6CINHGM.js} +2 -2
  277. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +2 -0
  279. package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-T4RY7L53.js} +2 -2
  280. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +2 -0
  281. package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-IR33TGQS.js} +2 -2
  282. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +2 -0
  283. package/dist/cli/chunks/schedule-CZKD6RIY.js +2 -0
  284. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +2 -0
  285. package/dist/cli/chunks/{security-VSPNKCDS.js → security-Z5GDE2IH.js} +3 -3
  286. package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-SIZMEHPM.js} +2 -2
  287. package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-HLM65RDS.js} +2 -2
  288. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +2 -0
  289. package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-SKSZG7P5.js} +2 -2
  290. package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-766YOOMJ.js} +2 -2
  291. package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-M45FNOLT.js} +2 -2
  292. package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-6CJ24B5T.js} +2 -2
  293. package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-B2U366I3.js} +2 -2
  294. package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-P6IFLCKP.js} +17 -15
  295. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +9 -0
  296. package/dist/cli/chunks/{test-UWA377D4.js → test-TODH7KRF.js} +11 -11
  297. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +2 -0
  298. package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-VMVMVRHT.js} +3 -3
  299. package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-XQW7BMCK.js} +2 -2
  300. package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-JCZEIRKO.js} +2 -2
  301. package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-U2ML3OHE.js} +2 -2
  302. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +2 -0
  303. package/dist/cli/chunks/{types-PJS2FGPF.js → types-GGEPCHP6.js} +2 -2
  304. package/dist/cli/chunks/unified-memory-FL26RTV3.js +2 -0
  305. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +2 -0
  306. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +2 -0
  307. package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-T5GRM7HS.js} +2 -2
  308. package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XMUJPLP3.js} +2 -2
  309. package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-KJLF7JEH.js} +2 -2
  310. package/dist/cli/chunks/visual-security-IJVPO5FA.js +2 -0
  311. package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-LOHVZ7G5.js} +2 -2
  312. package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-33FBTXJU.js} +2 -2
  313. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +2 -0
  314. package/dist/cli/chunks/witness-chain-V2M32W5D.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-VWBO4NXE.js} +2 -2
  316. package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-BHJ3ZAEK.js} +2 -2
  317. package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-WNVPH2Z3.js} +2 -2
  318. package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-6QR5MQTO.js} +4 -4
  319. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +2 -0
  320. package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-EHOL62TS.js} +2 -2
  321. package/dist/cli/commands/ci.js +7 -0
  322. package/dist/cli/commands/coverage.js +7 -1
  323. package/dist/cli/commands/fleet.js +5 -2
  324. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
  325. package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
  326. package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
  327. package/dist/cli/commands/test.js +5 -2
  328. package/dist/cli/handlers/init-handler.d.ts +12 -0
  329. package/dist/cli/handlers/init-handler.js +27 -12
  330. package/dist/cli/handlers/task-handler.js +6 -0
  331. package/dist/cli/utils/ci-output.d.ts +2 -0
  332. package/dist/cli/utils/ci-output.js +2 -0
  333. package/dist/cli/utils/coverage-verdict.d.ts +11 -2
  334. package/dist/cli/utils/coverage-verdict.js +26 -6
  335. package/dist/cli/utils/fleet-operation.d.ts +5 -0
  336. package/dist/cli/utils/fleet-operation.js +7 -1
  337. package/dist/cli/utils/fleet-result.d.ts +5 -3
  338. package/dist/cli/utils/fleet-result.js +9 -3
  339. package/dist/cli/utils/progress.d.ts +16 -2
  340. package/dist/cli/utils/progress.js +31 -14
  341. package/dist/coordination/consensus/consensus-engine.js +3 -1
  342. package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
  343. package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
  344. package/dist/coordination/handlers/coverage-collection.js +5 -2
  345. package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
  346. package/dist/coordination/handlers/coverage-evidence.js +159 -0
  347. package/dist/coordination/handlers/coverage-handlers.js +16 -3
  348. package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
  349. package/dist/coordination/handlers/coverage-runner.js +6 -22
  350. package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
  351. package/dist/coordination/handlers/coverage-scope.js +321 -0
  352. package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
  353. package/dist/coordination/handlers/coverage-stderr.js +39 -0
  354. package/dist/coordination/handlers/coverage-target.d.ts +9 -0
  355. package/dist/coordination/handlers/coverage-target.js +21 -8
  356. package/dist/coordination/handlers/handler-utils.d.ts +5 -0
  357. package/dist/coordination/handlers/handler-utils.js +11 -5
  358. package/dist/coordination/handlers/requirements-handlers.js +3 -2
  359. package/dist/coordination/handlers/security-handlers.js +34 -20
  360. package/dist/coordination/queen-coordinator.js +8 -3
  361. package/dist/coordination/task-executability.d.ts +12 -0
  362. package/dist/coordination/task-executability.js +27 -0
  363. package/dist/coordination/workflow-orchestrator.d.ts +6 -0
  364. package/dist/coordination/workflow-orchestrator.js +22 -8
  365. package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
  366. package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
  367. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -0
  368. package/dist/domains/code-intelligence/services/semantic-analyzer.js +10 -7
  369. package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
  370. package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
  371. package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
  372. package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
  373. package/dist/domains/learning-optimization/services/production-intel.js +3 -1
  374. package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
  375. package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
  376. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
  377. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
  378. package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
  379. package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
  380. package/dist/domains/security-compliance/services/security-auditor.js +3 -2
  381. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  382. package/dist/domains/test-execution/coordinator.js +5 -14
  383. package/dist/domains/test-execution/interfaces.d.ts +11 -1
  384. package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
  385. package/dist/domains/test-execution/services/retry-outcome.js +53 -0
  386. package/dist/domains/test-generation/coordinator.js +2 -2
  387. package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
  388. package/dist/domains/test-generation/services/test-generator.js +2 -2
  389. package/dist/governance/evolution-pipeline-integration.js +3 -1
  390. package/dist/hooks/cross-phase-hooks.js +3 -1
  391. package/dist/init/init-wizard-steps.js +5 -1
  392. package/dist/init/phases/04-database.js +7 -0
  393. package/dist/init/phases/10-workers.js +42 -4
  394. package/dist/init/phases/12-verification.js +14 -4
  395. package/dist/init/settings-merge.js +7 -4
  396. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +29 -0
  397. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -6
  398. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +10 -3
  399. package/dist/integrations/agentic-flow/reasoning-bank/index.js +13 -0
  400. package/dist/integrations/ruvector/filter-adapter.js +2 -1
  401. package/dist/learning/dream/insight-generator.js +5 -4
  402. package/dist/learning/embedder-endpoint-client.d.ts +8 -0
  403. package/dist/learning/embedder-endpoint-client.js +20 -0
  404. package/dist/learning/embedder-recovery.d.ts +63 -0
  405. package/dist/learning/embedder-recovery.js +94 -0
  406. package/dist/learning/memory-auditor.js +3 -1
  407. package/dist/learning/qe-patterns.js +2 -1
  408. package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
  409. package/dist/learning/qe-reasoning-bank.d.ts +21 -0
  410. package/dist/learning/qe-reasoning-bank.js +54 -8
  411. package/dist/learning/real-embeddings.d.ts +23 -0
  412. package/dist/learning/real-embeddings.js +69 -2
  413. package/dist/learning/real-qe-reasoning-bank.d.ts +39 -0
  414. package/dist/learning/real-qe-reasoning-bank.js +108 -38
  415. package/dist/logging/redaction.js +142 -12
  416. package/dist/mcp/bundle.js +520 -503
  417. package/dist/mcp/daemon-mode.d.ts +126 -0
  418. package/dist/mcp/daemon-mode.js +257 -0
  419. package/dist/mcp/entry.d.ts +4 -0
  420. package/dist/mcp/entry.js +50 -2
  421. package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
  422. package/dist/mcp/handlers/domain-handler-configs.js +13 -2
  423. package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
  424. package/dist/mcp/handlers/orchestrate-routes.js +53 -0
  425. package/dist/mcp/handlers/task-handlers.d.ts +23 -1
  426. package/dist/mcp/handlers/task-handlers.js +90 -19
  427. package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
  428. package/dist/mcp/protocol-server.js +11 -8
  429. package/dist/mcp/qe-tool-bridge.js +3 -0
  430. package/dist/mcp/services/reasoning-bank-service.d.ts +9 -2
  431. package/dist/mcp/services/reasoning-bank-service.js +13 -0
  432. package/dist/mcp/tool-annotations.js +4 -1
  433. package/dist/mcp/tools/coherence/check.js +1 -0
  434. package/dist/mcp/tools/coherence/consensus.js +4 -2
  435. package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
  436. package/dist/mcp/tools/mincut/index.js +3 -0
  437. package/dist/mcp/tools/quality-assessment/gate.js +7 -0
  438. package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
  439. package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
  440. package/dist/mcp/tools/security-compliance/scan.js +4 -2
  441. package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
  442. package/dist/mcp/tools/test-execution/execute.js +3 -2
  443. package/dist/mcp/types.d.ts +14 -0
  444. package/dist/memory/crdt/crdt-store.js +5 -0
  445. package/dist/memory/crdt/lww-register.js +12 -2
  446. package/dist/optimization/early-exit-token-optimizer.js +3 -1
  447. package/dist/planning/goap-planner.js +5 -0
  448. package/dist/planning/plan-executor.js +5 -0
  449. package/dist/routing/advisor/redaction.js +22 -2
  450. package/dist/shared/io/confined-read.d.ts +74 -0
  451. package/dist/shared/io/confined-read.js +256 -0
  452. package/dist/shared/io/file-reader.d.ts +6 -6
  453. package/dist/shared/io/file-reader.js +16 -42
  454. package/dist/shared/llm/providers/claude-code.js +4 -1
  455. package/dist/shared/llm/providers/response-deadline.js +16 -2
  456. package/dist/shared/native-module-errors.d.ts +51 -0
  457. package/dist/shared/native-module-errors.js +129 -0
  458. package/dist/shared/safe-db.js +14 -4
  459. package/dist/shared/security/osv-client.js +4 -1
  460. package/dist/shared/types/index.js +3 -1
  461. package/dist/shared/types/test-frameworks.js +2 -2
  462. package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
  463. package/dist/sync/readers/json-reader.js +2 -1
  464. package/dist/validation/anchor-set.d.ts +6 -0
  465. package/dist/validation/anchor-set.js +9 -1
  466. package/dist/validation/quality-gate-runner.d.ts +7 -1
  467. package/dist/validation/quality-gate-runner.js +3 -3
  468. package/package.json +3 -3
  469. package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
  470. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
  471. package/dist/cli/chunks/base-GTB6POYE.js +0 -2
  472. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
  473. package/dist/cli/chunks/chunk-4SJYIX54.js +0 -3
  474. package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
  475. package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
  476. package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
  477. package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
  478. package/dist/cli/chunks/chunk-DURHK377.js +0 -742
  479. package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
  480. package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
  481. package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
  482. package/dist/cli/chunks/chunk-N6PIIK6G.js +0 -3
  483. package/dist/cli/chunks/chunk-NSHU347M.js +0 -2
  484. package/dist/cli/chunks/chunk-PPSAMXYN.js +0 -13
  485. package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
  486. package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
  487. package/dist/cli/chunks/chunk-WSF24I3D.js +0 -2
  488. package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
  489. package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
  490. package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
  491. package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
  492. package/dist/cli/chunks/ci-MSKMVH5X.js +0 -81
  493. package/dist/cli/chunks/client-POSVREVS.js +0 -2
  494. package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
  495. package/dist/cli/chunks/coverage-B7MCGNTE.js +0 -49
  496. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
  497. package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
  498. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
  499. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +0 -46
  500. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
  501. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
  502. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
  503. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
  504. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
  505. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
  506. package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
  507. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
  508. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
  509. package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
  510. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
  511. package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
  512. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
  513. package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
  514. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
  515. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
  516. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
  517. package/dist/cli/chunks/real-embeddings-RWGOVOXO.js +0 -2
  518. package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
  519. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
  520. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
  521. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
  522. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
  523. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
  524. package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
  525. package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
  526. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
  527. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
  528. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
  529. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
  530. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
  531. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
  532. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
  533. package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
  534. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
  535. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
  536. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Coverage evidence: is a report complete and current for its target? (#1154)
3
+ *
4
+ * A report judged over only the files it happens to contain says nothing
5
+ * about the target's other files. `aqe fleet run analyze --target src` printed
6
+ * "100% over 1 files" and "Verdict: PASSED" from a report that listed
7
+ * `src/math.js` while `src/unsafe.js` had no measurement at all, and a report
8
+ * written before the sources last changed was judged as if it were current.
9
+ *
10
+ * This module answers two questions for every caller of the shared resolver
11
+ * (MCP `coverage_analyze_sublinear` / `task_orchestrate`, `aqe coverage`,
12
+ * `aqe ci`, `aqe fleet run analyze`):
13
+ * 1. Which production source files under the target are not in the report?
14
+ * They are UNMEASURED: not 0%, and not left out silently.
15
+ * 2. Is the report older than source files it is judged against? (stale)
16
+ * Either one makes the evidence insufficient: no verdict may pass on it.
17
+ */
18
+ import * as fs from 'fs';
19
+ import * as path from 'path';
20
+ import { walkSourceFiles } from './coverage-collection.js';
21
+ import { inCoverageScope, readCoverageScope } from './coverage-scope.js';
22
+ /** Source files that share a coverage tool with each other (one report covers one family). */
23
+ const LANGUAGE_FAMILIES = [
24
+ ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],
25
+ ['.py'], ['.go'], ['.rs'], ['.java'], ['.rb'],
26
+ ];
27
+ function familyOf(file) {
28
+ const ext = path.extname(file).toLowerCase();
29
+ return LANGUAGE_FAMILIES.find(family => family.includes(ext));
30
+ }
31
+ /**
32
+ * Files no coverage tool instruments by default: type declarations and tool
33
+ * configuration (`vitest.config.ts`, `eslint.config.js`, `.prettierrc.js`).
34
+ */
35
+ function isNeverInstrumented(file) {
36
+ const base = path.basename(file);
37
+ return base.endsWith('.d.ts') || base.startsWith('.') || /\.config\.[cm]?[jt]sx?$/.test(base);
38
+ }
39
+ function canonical(p) {
40
+ try {
41
+ return fs.realpathSync(p);
42
+ }
43
+ catch {
44
+ return path.resolve(p);
45
+ }
46
+ }
47
+ /** Absolute, canonical paths of the report's entries (relative entries resolve against `projectRoot`). */
48
+ function reportPaths(files, projectRoot) {
49
+ const rootAbs = canonical(projectRoot);
50
+ return new Set(files.map(f => path.isAbsolute(f.path) ? canonical(f.path) : canonical(path.resolve(rootAbs, f.path))));
51
+ }
52
+ /**
53
+ * Production source files under a directory `target` that the report has no
54
+ * entry for. Only files in a language the report covers count: a JS report
55
+ * does not make a Python helper script unmeasured. Files the project's coverage
56
+ * config leaves out (include/exclude) were never meant to be measured and do
57
+ * not count either.
58
+ */
59
+ export function findUnmeasuredSourceFiles(reportFiles, projectRoot, target) {
60
+ let isDir = false;
61
+ try {
62
+ isDir = fs.statSync(target).isDirectory();
63
+ }
64
+ catch { /* missing: nothing to compare */ }
65
+ if (!isDir)
66
+ return { targetFiles: [], unmeasured: [] };
67
+ const rootAbs = canonical(projectRoot);
68
+ const scope = readCoverageScope(rootAbs);
69
+ const families = new Set(reportFiles.map(f => familyOf(f.path)).filter(Boolean));
70
+ const inReport = reportPaths(reportFiles, projectRoot);
71
+ const targetFiles = walkSourceFiles(target)
72
+ .filter(file => families.has(familyOf(file)) && !isNeverInstrumented(file))
73
+ .map(canonical)
74
+ .filter(file => inCoverageScope(scope, file, rootAbs));
75
+ return {
76
+ targetFiles,
77
+ unmeasured: targetFiles.filter(file => !inReport.has(file)).sort(),
78
+ ...(scope ? { coverageScope: { source: scope.source, readable: scope.readable } } : {}),
79
+ };
80
+ }
81
+ /** Source files modified after the report was written; `undefined` when the report is current. */
82
+ export function findStaleness(reportPath, sourceFiles) {
83
+ let reportMtime;
84
+ try {
85
+ reportMtime = fs.statSync(reportPath).mtimeMs;
86
+ }
87
+ catch {
88
+ return undefined;
89
+ }
90
+ const newerFiles = sourceFiles.filter(file => {
91
+ try {
92
+ return fs.statSync(file).mtimeMs > reportMtime;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }).sort();
98
+ return newerFiles.length > 0
99
+ ? { reportPath, reportModified: new Date(reportMtime).toISOString(), newerFiles }
100
+ : undefined;
101
+ }
102
+ /**
103
+ * The evidence a report gives for `target`.
104
+ *
105
+ * `measuredFiles` are the report entries already scoped to the target.
106
+ * Completeness is checked only when `checkCompleteness` is set (a directory
107
+ * target, not a report file given as the target), staleness only when the
108
+ * report's path is known (not for a report the run just wrote).
109
+ */
110
+ export function assessCoverageEvidence(report, measuredFiles, projectRoot, target, options = {}) {
111
+ const { targetFiles, unmeasured, coverageScope } = options.checkCompleteness === false
112
+ ? { targetFiles: [], unmeasured: [], coverageScope: undefined }
113
+ : findUnmeasuredSourceFiles(report.files, projectRoot, target);
114
+ const sources = new Set([...targetFiles, ...reportPaths(measuredFiles, projectRoot)]);
115
+ const stale = options.reportPath
116
+ ? findStaleness(options.reportPath, [...sources].filter(file => fs.existsSync(file)))
117
+ : undefined;
118
+ return {
119
+ status: unmeasured.length > 0 || stale ? 'insufficient-evidence' : 'complete',
120
+ unmeasuredFiles: unmeasured,
121
+ targetFiles: sources.size,
122
+ ...(stale ? { stale } : {}),
123
+ ...(coverageScope ? { coverageScope } : {}),
124
+ };
125
+ }
126
+ const MAX_LISTED = 5;
127
+ function listFiles(files, root) {
128
+ const shown = files.slice(0, MAX_LISTED).map(f => path.relative(root, f) || f);
129
+ return shown.join(', ') + (files.length > MAX_LISTED ? `, … ${files.length - MAX_LISTED} more` : '');
130
+ }
131
+ /**
132
+ * Why the evidence is insufficient, one sentence per problem; empty when it is
133
+ * complete. Shared by MCP and CLI so the wording cannot drift.
134
+ */
135
+ export function describeEvidence(evidence, projectRoot) {
136
+ if (!evidence)
137
+ return [];
138
+ const reasons = [];
139
+ const n = evidence.unmeasuredFiles.length;
140
+ if (n > 0) {
141
+ const scope = evidence.coverageScope;
142
+ const scopeNote = scope && !scope.readable
143
+ ? ` The coverage include/exclude in ${scope.source} could not be read statically, so files it leaves out ` +
144
+ 'may be listed here; write them as literal string arrays to have them honoured.'
145
+ : '';
146
+ reasons.push(`${n} of ${evidence.targetFiles} source files under the target are not in the coverage report ` +
147
+ `(UNMEASURED, not counted as covered): ${listFiles(evidence.unmeasuredFiles, projectRoot)}. Regenerate ` +
148
+ 'the report with coverage for the whole target, or exclude files that are not meant to be measured in the ' +
149
+ `coverage tool's include/exclude config.${scopeNote}`);
150
+ }
151
+ if (evidence.stale) {
152
+ const m = evidence.stale.newerFiles.length;
153
+ reasons.push(`the coverage report ${path.relative(projectRoot, evidence.stale.reportPath) || evidence.stale.reportPath} ` +
154
+ `is STALE: ${m} source file${m === 1 ? ' was' : 's were'} modified after it was written ` +
155
+ `(${evidence.stale.reportModified}): ${listFiles(evidence.stale.newerFiles, projectRoot)}`);
156
+ }
157
+ return reasons;
158
+ }
159
+ //# sourceMappingURL=coverage-evidence.js.map
@@ -9,6 +9,7 @@ import { toError } from '../../shared/error-utils.js';
9
9
  import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
10
10
  import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
11
11
  import { describeNoData, evaluateCoverageForTarget, isUnmeasured, packageFilterForTarget, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
12
+ import { describeEvidence } from './coverage-evidence.js';
12
13
  import { randomUUID } from 'crypto';
13
14
  import * as path from 'path';
14
15
  import { describeRunFailure, runJsCoverage, testRunStatus } from './coverage-runner.js';
@@ -54,7 +55,7 @@ function instrumented(files) {
54
55
  }
55
56
  function fromEvaluation(evaluation, ranTests, projectRoot) {
56
57
  return evaluation.status === 'measured'
57
- ? { collected: instrumented(evaluation.files), ranTests, projectRoot }
58
+ ? { collected: instrumented(evaluation.files), ranTests, projectRoot, evidence: evaluation.evidence }
58
59
  : { collected: null, ranTests, noData: evaluation.reason, projectRoot };
59
60
  }
60
61
  /**
@@ -212,7 +213,7 @@ export function registerCoverageHandlers(ctx) {
212
213
  }
213
214
  const analyzer = ctx.getCoverageAnalyzer();
214
215
  const threshold = payload.threshold || 80;
215
- const { collected, ranTests, noData, projectRoot, notes, runStatus, testRun } = await collectCoverage(targetPath);
216
+ const { collected, ranTests, noData, projectRoot, notes, runStatus, testRun, evidence } = await collectCoverage(targetPath);
216
217
  // #995 review N5: say so plainly instead of "no coverage data found".
217
218
  if (noData === 'target-missing') {
218
219
  return err(new Error(describeNoData('target-missing', targetPath, null)));
@@ -278,9 +279,16 @@ export function registerCoverageHandlers(ctx) {
278
279
  }
279
280
  const round = (n) => Math.round(n * 10) / 10;
280
281
  const pct = (covered, total) => total > 0 ? Math.round((covered / total) * 1000) / 10 : null;
282
+ // #1154: target files missing from the report, or a report older than the
283
+ // sources, leave the evidence insufficient: the figures stand for the
284
+ // measured files only, and the threshold is not met on them.
285
+ const evidenceReasons = describeEvidence(evidence, projectRoot ?? targetPath);
281
286
  const warnings = [...provenance.notes, ...(notes ?? [])];
282
287
  if (provenance.estimated)
283
288
  warnings.push(estimationGuidance(targetPath));
289
+ if (evidenceReasons.length > 0) {
290
+ warnings.push(`INSUFFICIENT EVIDENCE — the threshold is not met on this report: ${evidenceReasons.join('; ').replace(/\.?$/, '.')}`);
291
+ }
284
292
  // #569: the analyzer generates recommendations from the summary numbers.
285
293
  // When branch or function data was never collected, those numbers are 0
286
294
  // by construction, and the resulting advice ("Branch coverage is
@@ -312,7 +320,12 @@ export function registerCoverageHandlers(ctx) {
312
320
  })),
313
321
  gaps,
314
322
  // NB5: judged only on the metrics that were collected (shared with the CLI).
315
- meetsThreshold: verdict.meetsThreshold,
323
+ meetsThreshold: verdict.meetsThreshold && evidenceReasons.length === 0,
324
+ ...(evidence ? {
325
+ evidenceStatus: evidence.status,
326
+ unmeasuredFiles: evidence.unmeasuredFiles,
327
+ ...(evidence.stale ? { staleReport: evidence.stale } : {}),
328
+ } : {}),
316
329
  delta: report.delta,
317
330
  recommendations,
318
331
  algorithm: 'sublinear-O(log n)',
@@ -25,6 +25,8 @@
25
25
  * fate. Hosts should shut down via a handled signal.
26
26
  */
27
27
  import type { CoverageData } from '../../domains/coverage-analysis/interfaces';
28
+ import { summarizeStderr } from './coverage-stderr';
29
+ export { summarizeStderr };
28
30
  export type JsRunnerName = 'vitest' | 'jest' | 'nyc';
29
31
  export interface JsCoverageInvocation {
30
32
  runner: JsRunnerName;
@@ -64,7 +66,7 @@ export interface JsCoverageRun {
64
66
  numFailedTests?: number | null;
65
67
  numPendingTests?: number | null;
66
68
  numFailedTestSuites?: number | null;
67
- /** The runner's first error line plus the last ~2 KB of its stderr, for diagnosing a crash. */
69
+ /** The runner's first error line plus the last ~2 KB of its stderr, redacted (#1150), for diagnosing a crash. */
68
70
  stderrTail: string;
69
71
  }
70
72
  /**
@@ -74,13 +76,6 @@ export interface JsCoverageRun {
74
76
  * every test passing). Without counts (nyc), the exit code decides.
75
77
  */
76
78
  export declare function testRunStatus(run: JsCoverageRun): 'passed' | 'failed';
77
- /**
78
- * Summarise a runner's stderr for a caller: the FIRST error-looking line (or
79
- * the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
80
- * loses the cause when a long stack follows it — a vitest config syntax error
81
- * prints `[PARSE_ERROR] …` first and then kilobytes of frames.
82
- */
83
- export declare function summarizeStderr(head: string, tail: string, totalBytes: number): string;
84
79
  /**
85
80
  * Find an installed package's bin script, walking up `node_modules` from the
86
81
  * project root (hoisted monorepo installs live above the package).
@@ -30,6 +30,8 @@ import * as os from 'os';
30
30
  import * as path from 'path';
31
31
  import { safeJsonParse } from '../../shared/safe-json.js';
32
32
  import { loadCoverageReportFile } from './coverage-target.js';
33
+ import { STDERR_WINDOW_BYTES, summarizeStderr } from './coverage-stderr.js';
34
+ export { summarizeStderr };
33
35
  /**
34
36
  * Outcome of a coverage run's tests (#1027 NB2): 'failed' when the runner's
35
37
  * own result reports a failed test or test suite, 'passed' when it reports
@@ -43,25 +45,6 @@ export function testRunStatus(run) {
43
45
  return run.exitedCleanly ? 'passed' : 'failed';
44
46
  }
45
47
  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
48
  // ============================================================================
66
49
  // Locating the runner
67
50
  // ============================================================================
@@ -348,9 +331,10 @@ export async function runProcessTree(command, args, options) {
348
331
  child.stderr?.on('data', (chunk) => {
349
332
  const text = chunk.toString('utf-8');
350
333
  stderrBytes += chunk.length;
351
- if (stderrHead.length < STDERR_HEAD_BYTES)
352
- stderrHead = (stderrHead + text).slice(0, STDERR_HEAD_BYTES);
353
- stderrTail = (stderrTail + text).slice(-STDERR_TAIL_BYTES);
334
+ // #1150: raw windows only; summarizeStderr redacts them before slicing.
335
+ if (stderrHead.length < STDERR_WINDOW_BYTES)
336
+ stderrHead = (stderrHead + text).slice(0, STDERR_WINDOW_BYTES);
337
+ stderrTail = (stderrTail + text).slice(-STDERR_WINDOW_BYTES);
354
338
  });
355
339
  // A grandchild holding the pipe open must not keep the host alive.
356
340
  child.stderr?.on('error', () => { });
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The project's own coverage scope (#1154 review).
3
+ *
4
+ * A file the coverage tool is configured to leave out (vitest
5
+ * `coverage.exclude: ['src/**\/index.ts']`, jest `'!src/**\/index.ts'` in
6
+ * `collectCoverageFrom`) is not "unmeasured": it was never meant to be
7
+ * measured. Counting it would fail every verdict on a normal project.
8
+ *
9
+ * The scope is read STATICALLY from literal string arrays. Config files are
10
+ * never executed (they are code from the analyzed repository). When a config
11
+ * declares a coverage scope that is not a literal, the scope is reported as
12
+ * unreadable rather than guessed.
13
+ *
14
+ * Sources, first match wins:
15
+ * - vitest.config.* / vite.config.* `coverage: { include, exclude }`
16
+ * - jest.config.* / package.json "jest" `collectCoverageFrom` (`!` = exclude),
17
+ * `coveragePathIgnorePatterns` (regular expressions)
18
+ * - .nycrc / .nycrc.json / package.json "nyc", .c8rc / .c8rc.json /
19
+ * package.json "c8" `include`, `exclude`
20
+ */
21
+ export interface CoverageScope {
22
+ /** The config the scope was read from, relative to the project root. */
23
+ source: string;
24
+ /** False when the config declares a scope that is not a literal string array. */
25
+ readable: boolean;
26
+ include: string[];
27
+ exclude: string[];
28
+ /** jest `coveragePathIgnorePatterns`, matched against the absolute path. */
29
+ ignorePatterns: RegExp[];
30
+ }
31
+ /**
32
+ * A pattern matches a project-relative POSIX path, or any path under it when it
33
+ * names a directory (nyc/test-exclude treat `src` as `src/**`).
34
+ */
35
+ export declare function globToRegExp(pattern: string): RegExp;
36
+ /** The coverage scope configured for the project at `projectRoot`; `null` when none is configured. */
37
+ export declare function readCoverageScope(projectRoot: string): CoverageScope | null;
38
+ /** Is `file` inside the configured coverage scope? Everything is, with no scope. */
39
+ export declare function inCoverageScope(scope: CoverageScope | null, file: string, projectRoot: string): boolean;
40
+ //# sourceMappingURL=coverage-scope.d.ts.map
@@ -0,0 +1,321 @@
1
+ /**
2
+ * The project's own coverage scope (#1154 review).
3
+ *
4
+ * A file the coverage tool is configured to leave out (vitest
5
+ * `coverage.exclude: ['src/**\/index.ts']`, jest `'!src/**\/index.ts'` in
6
+ * `collectCoverageFrom`) is not "unmeasured": it was never meant to be
7
+ * measured. Counting it would fail every verdict on a normal project.
8
+ *
9
+ * The scope is read STATICALLY from literal string arrays. Config files are
10
+ * never executed (they are code from the analyzed repository). When a config
11
+ * declares a coverage scope that is not a literal, the scope is reported as
12
+ * unreadable rather than guessed.
13
+ *
14
+ * Sources, first match wins:
15
+ * - vitest.config.* / vite.config.* `coverage: { include, exclude }`
16
+ * - jest.config.* / package.json "jest" `collectCoverageFrom` (`!` = exclude),
17
+ * `coveragePathIgnorePatterns` (regular expressions)
18
+ * - .nycrc / .nycrc.json / package.json "nyc", .c8rc / .c8rc.json /
19
+ * package.json "c8" `include`, `exclude`
20
+ */
21
+ import * as fs from 'fs';
22
+ import * as path from 'path';
23
+ import { readConfinedTextSync } from '../../shared/io/confined-read.js';
24
+ const JS_EXTS = ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs'];
25
+ const VITEST_CONFIGS = [...JS_EXTS.map(e => `vitest.config.${e}`), ...JS_EXTS.map(e => `vite.config.${e}`)];
26
+ const JEST_CONFIGS = [...JS_EXTS.map(e => `jest.config.${e}`), 'jest.config.json'];
27
+ const NYC_CONFIGS = ['.nycrc', '.nycrc.json'];
28
+ const C8_CONFIGS = ['.c8rc', '.c8rc.json'];
29
+ // ============================================================================
30
+ // Glob matching (no glob library is a runtime dependency)
31
+ // ============================================================================
32
+ function escapeRe(s) {
33
+ return s.replace(/[.+^$()|[\]\\]/g, '\\$&');
34
+ }
35
+ /** Glob body → regex source: `**`, `*`, `?` and non-nested `{a,b}`. */
36
+ function globSource(glob) {
37
+ let re = '';
38
+ for (let i = 0; i < glob.length; i++) {
39
+ const c = glob[i];
40
+ if (c === '*' && glob[i + 1] === '*') {
41
+ if (glob[i + 2] === '/') {
42
+ re += '(?:.*/)?';
43
+ i += 2;
44
+ }
45
+ else {
46
+ re += '.*';
47
+ i += 1;
48
+ }
49
+ }
50
+ else if (c === '*') {
51
+ re += '[^/]*';
52
+ }
53
+ else if (c === '?') {
54
+ re += '[^/]';
55
+ }
56
+ else if (c === '{') {
57
+ const end = glob.indexOf('}', i);
58
+ if (end === -1) {
59
+ re += '\\{';
60
+ continue;
61
+ }
62
+ re += `(?:${glob.slice(i + 1, end).split(',').map(globSource).join('|')})`;
63
+ i = end;
64
+ }
65
+ else {
66
+ re += escapeRe(c);
67
+ }
68
+ }
69
+ return re;
70
+ }
71
+ /**
72
+ * A pattern matches a project-relative POSIX path, or any path under it when it
73
+ * names a directory (nyc/test-exclude treat `src` as `src/**`).
74
+ */
75
+ export function globToRegExp(pattern) {
76
+ const body = pattern.replace(/^<rootDir>\//, '').replace(/^\.\//, '').replace(/\/+$/, '');
77
+ return new RegExp(`^${globSource(body)}(?:/.*)?$`);
78
+ }
79
+ // ============================================================================
80
+ // Static extraction of literal arrays from config source
81
+ // ============================================================================
82
+ /** Remove comments, leaving string literals (which may contain `/*`) intact. */
83
+ function stripComments(src) {
84
+ let out = '';
85
+ for (let i = 0; i < src.length; i++) {
86
+ const c = src[i];
87
+ if (c === '"' || c === "'" || c === '`') {
88
+ const start = i;
89
+ for (i++; i < src.length && src[i] !== c; i++)
90
+ if (src[i] === '\\')
91
+ i++;
92
+ out += src.slice(start, i + 1);
93
+ }
94
+ else if (c === '/' && src[i + 1] === '/') {
95
+ while (i < src.length && src[i] !== '\n')
96
+ i++;
97
+ out += '\n';
98
+ }
99
+ else if (c === '/' && src[i + 1] === '*') {
100
+ const end = src.indexOf('*/', i + 2);
101
+ i = end === -1 ? src.length : end + 1;
102
+ }
103
+ else {
104
+ out += c;
105
+ }
106
+ }
107
+ return out;
108
+ }
109
+ /** Index just past the bracket matching the one at `open`, skipping strings. */
110
+ function matchingClose(src, open) {
111
+ const pairs = { '[': ']', '{': '}', '(': ')' };
112
+ const stack = [];
113
+ for (let i = open; i < src.length; i++) {
114
+ const c = src[i];
115
+ if (c === '"' || c === "'" || c === '`') {
116
+ for (i++; i < src.length && src[i] !== c; i++)
117
+ if (src[i] === '\\')
118
+ i++;
119
+ }
120
+ else if (pairs[c]) {
121
+ stack.push(pairs[c]);
122
+ }
123
+ else if (c === stack[stack.length - 1]) {
124
+ stack.pop();
125
+ if (stack.length === 0)
126
+ return i + 1;
127
+ }
128
+ }
129
+ return -1;
130
+ }
131
+ /** Split a bracket body on top-level commas. */
132
+ function splitTopLevel(body) {
133
+ const parts = [];
134
+ let depth = 0;
135
+ let start = 0;
136
+ for (let i = 0; i < body.length; i++) {
137
+ const c = body[i];
138
+ if (c === '"' || c === "'" || c === '`') {
139
+ for (i++; i < body.length && body[i] !== c; i++)
140
+ if (body[i] === '\\')
141
+ i++;
142
+ }
143
+ else if ('[{('.includes(c))
144
+ depth++;
145
+ else if (']})'.includes(c))
146
+ depth--;
147
+ else if (c === ',' && depth === 0) {
148
+ parts.push(body.slice(start, i));
149
+ start = i + 1;
150
+ }
151
+ }
152
+ parts.push(body.slice(start));
153
+ return parts.map(p => p.trim()).filter(p => p.length > 0);
154
+ }
155
+ const STRING_LITERAL = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$|^`([^`$\\]*)`$/;
156
+ /**
157
+ * The value of `key:` in `src` as a literal string array. `undefined` when the
158
+ * key is absent, `null` when it is present but not a literal. A spread of the
159
+ * tool's own defaults (`...coverageConfigDefaults.exclude`) is skipped: those
160
+ * are tests and config files, which are never counted anyway.
161
+ */
162
+ function literalArray(src, key) {
163
+ const m = new RegExp(`(?:^|[\\s,{])['"]?${key}['"]?\\s*:\\s*`).exec(src);
164
+ if (!m)
165
+ return undefined;
166
+ const at = m.index + m[0].length;
167
+ if (src[at] === "'" || src[at] === '"') {
168
+ const single = STRING_LITERAL.exec(src.slice(at, matchingStringEnd(src, at)));
169
+ return single ? [single[2] ?? single[3]] : null;
170
+ }
171
+ if (src[at] !== '[')
172
+ return null;
173
+ const end = matchingClose(src, at);
174
+ if (end === -1)
175
+ return null;
176
+ const values = [];
177
+ for (const el of splitTopLevel(src.slice(at + 1, end - 1))) {
178
+ if (/^\.\.\.[\w$.]*defaults?\b/i.test(el))
179
+ continue;
180
+ const lit = STRING_LITERAL.exec(el);
181
+ if (!lit)
182
+ return null;
183
+ values.push(lit[2] ?? lit[3]);
184
+ }
185
+ return values;
186
+ }
187
+ function matchingStringEnd(src, at) {
188
+ let i = at + 1;
189
+ for (; i < src.length && src[i] !== src[at]; i++)
190
+ if (src[i] === '\\')
191
+ i++;
192
+ return i + 1;
193
+ }
194
+ // ============================================================================
195
+ // Readers
196
+ // ============================================================================
197
+ function readText(file) {
198
+ try {
199
+ return readConfinedTextSync(file, { outsideRoot: 'allow' });
200
+ }
201
+ catch {
202
+ return null;
203
+ }
204
+ }
205
+ function readJson(file) {
206
+ const text = readText(file);
207
+ if (text === null)
208
+ return null;
209
+ try {
210
+ const parsed = JSON.parse(text);
211
+ return typeof parsed === 'object' && parsed !== null ? parsed : null;
212
+ }
213
+ catch {
214
+ return null;
215
+ }
216
+ }
217
+ const strings = (v) => v === undefined ? undefined
218
+ : typeof v === 'string' ? [v]
219
+ : Array.isArray(v) && v.every(e => typeof e === 'string') ? v : null;
220
+ function scope(source, parts) {
221
+ const readable = [parts.include, parts.exclude, parts.collectFrom, parts.ignore].every(p => p !== null);
222
+ const collect = parts.collectFrom ?? [];
223
+ const ignorePatterns = [];
224
+ for (const p of parts.ignore ?? []) {
225
+ try {
226
+ ignorePatterns.push(new RegExp(p));
227
+ }
228
+ catch { /* jest would reject it too */ }
229
+ }
230
+ return {
231
+ source, readable, ignorePatterns,
232
+ include: [...(parts.include ?? []), ...collect.filter(g => !g.startsWith('!'))],
233
+ exclude: [...(parts.exclude ?? []), ...collect.filter(g => g.startsWith('!')).map(g => g.slice(1))],
234
+ };
235
+ }
236
+ function fromVitest(name, text) {
237
+ const src = stripComments(text);
238
+ const m = /(?:^|[\s,{])['"]?coverage['"]?\s*(?::\s*|(?=[,}]))/.exec(src);
239
+ if (!m)
240
+ return null;
241
+ const at = m.index + m[0].length;
242
+ // `coverage,` shorthand or `coverage: options`: declared, not readable.
243
+ if (!m[0].includes(':') || src[at] !== '{')
244
+ return scope(name, { include: null });
245
+ const end = matchingClose(src, at);
246
+ const block = end === -1 ? '' : src.slice(at, end);
247
+ return scope(name, { include: literalArray(block, 'include'), exclude: literalArray(block, 'exclude') });
248
+ }
249
+ function fromJestText(name, text) {
250
+ const src = stripComments(text);
251
+ const collectFrom = literalArray(src, 'collectCoverageFrom');
252
+ const ignore = literalArray(src, 'coveragePathIgnorePatterns');
253
+ if (collectFrom === undefined && ignore === undefined)
254
+ return null;
255
+ return scope(name, { collectFrom, ignore });
256
+ }
257
+ function fromJsonKeys(name, obj) {
258
+ if (!obj || typeof obj !== 'object')
259
+ return null;
260
+ if ('collectCoverageFrom' in obj || 'coveragePathIgnorePatterns' in obj) {
261
+ return scope(name, { collectFrom: strings(obj.collectCoverageFrom), ignore: strings(obj.coveragePathIgnorePatterns) });
262
+ }
263
+ if ('include' in obj || 'exclude' in obj) {
264
+ return scope(name, { include: strings(obj.include), exclude: strings(obj.exclude) });
265
+ }
266
+ return null;
267
+ }
268
+ /** The coverage scope configured for the project at `projectRoot`; `null` when none is configured. */
269
+ export function readCoverageScope(projectRoot) {
270
+ for (const name of VITEST_CONFIGS) {
271
+ const text = readText(path.join(projectRoot, name));
272
+ if (text !== null) {
273
+ const found = fromVitest(name, text);
274
+ if (found)
275
+ return found;
276
+ }
277
+ }
278
+ for (const name of JEST_CONFIGS) {
279
+ const file = path.join(projectRoot, name);
280
+ if (!fs.existsSync(file))
281
+ continue;
282
+ const found = name.endsWith('.json')
283
+ ? fromJsonKeys(name, readJson(file) ?? undefined)
284
+ : fromJestText(name, readText(file) ?? '');
285
+ if (found)
286
+ return found;
287
+ }
288
+ const pkg = readJson(path.join(projectRoot, 'package.json'));
289
+ const fromPkg = fromJsonKeys('package.json "jest"', pkg?.jest);
290
+ if (fromPkg)
291
+ return fromPkg;
292
+ for (const [names, key] of [[NYC_CONFIGS, 'nyc'], [C8_CONFIGS, 'c8']]) {
293
+ for (const name of names) {
294
+ const obj = readJson(path.join(projectRoot, name));
295
+ const found = fromJsonKeys(name, obj ?? undefined);
296
+ if (found)
297
+ return found;
298
+ // A config that exists but is not JSON (e.g. YAML) cannot be read.
299
+ if (!obj && fs.existsSync(path.join(projectRoot, name)))
300
+ return scope(name, { include: null });
301
+ }
302
+ const found = fromJsonKeys(`package.json "${key}"`, pkg?.[key]);
303
+ if (found)
304
+ return found;
305
+ }
306
+ return null;
307
+ }
308
+ /** Is `file` inside the configured coverage scope? Everything is, with no scope. */
309
+ export function inCoverageScope(scope, file, projectRoot) {
310
+ if (!scope)
311
+ return true;
312
+ const rel = path.relative(projectRoot, file).split(path.sep).join('/');
313
+ if (scope.include.length > 0 && !scope.include.some(g => globToRegExp(g).test(rel)))
314
+ return false;
315
+ if (scope.exclude.some(g => globToRegExp(g).test(rel)))
316
+ return false;
317
+ const posixAbs = file.split(path.sep).join('/');
318
+ const rootPosix = projectRoot.split(path.sep).join('/');
319
+ return !scope.ignorePatterns.some(re => re.test(posixAbs) || re.test(posixAbs.replace(rootPosix, '<rootDir>')));
320
+ }
321
+ //# sourceMappingURL=coverage-scope.js.map