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
@@ -10,8 +10,10 @@ import { DomainHandlerConfig } from './handler-factory';
10
10
  import { TestGenerateParams, TestGenerateResult, TestExecuteParams, CoverageAnalyzeParams, CoverageAnalyzeResult, QualityAssessParams, SecurityScanParams, ContractValidateParams, AccessibilityTestParams, ChaosTestParams } from '../types';
11
11
  import type { SecurityScanEvidence } from '../../domains/security-compliance/scan-evidence.js';
12
12
  import type { SecurityCoverage } from '../../domains/security-compliance/interfaces.js';
13
+ import type { ExcludedQualityFile, PartialQualityMetric } from '../../domains/quality-assessment/interfaces.js';
13
14
  import { type RiskDecision } from '../../contracts/verdicts.js';
14
- import type { EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
15
+ import { type EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
16
+ import { type MeasuredFailure } from '../../domains/quality-assessment/evidence-sufficiency.js';
15
17
  export interface TestExecuteResult {
16
18
  taskId: string;
17
19
  status: string;
@@ -19,7 +21,8 @@ export interface TestExecuteResult {
19
21
  passed: number;
20
22
  failed: number;
21
23
  duration: number;
22
- coverage?: number;
24
+ /** Measured line coverage of the run, or null when none was collected (#1027 N5). */
25
+ coverage?: number | null;
23
26
  workerStats?: Record<string, unknown>;
24
27
  retryStats?: Record<string, unknown>;
25
28
  results?: unknown[];
@@ -49,6 +52,38 @@ export interface QualityAssessResult {
49
52
  resultsNote?: string;
50
53
  /** ADR-103: versioned, schema-validated gate verdict (additive) */
51
54
  riskDecision?: RiskDecision;
55
+ /**
56
+ * #996 (additive): 'measured' when every requested metric had data;
57
+ * 'insufficient-evidence' when any did not — `passed` is then false and
58
+ * `status` is 'insufficient-evidence'.
59
+ */
60
+ evidenceStatus?: 'measured' | 'insufficient-evidence';
61
+ /** #996: requested metrics with no measured data (reported as -1 in `metrics`). */
62
+ unmeasured?: string[];
63
+ /** #1011: why each unmeasured metric has no value (e.g. a file could not be parsed). */
64
+ unmeasuredReasons?: Record<string, string>;
65
+ /** #1021: metrics measured over part of the scope (files that failed to read or parse are listed). */
66
+ partialMetrics?: PartialQualityMetric[];
67
+ /** #1021: files left out of the analysis (binary, generated, minified, .d.ts, reader policy); first 50. */
68
+ excludedFiles?: ExcludedQualityFile[];
69
+ /** #1021: total number of excluded files. */
70
+ excludedCount?: number;
71
+ /** #1021: the directory, file, or 'sourceFiles' that was analysed. */
72
+ scope?: string;
73
+ /**
74
+ * #1021 round 2b: the metrics `qualityScore` was computed from, present when
75
+ * the score covers only part of the request (insufficient evidence) or of the
76
+ * files (partial metrics). Such a score is not a verdict.
77
+ */
78
+ scoreBasis?: string[];
79
+ /** #996: measured metrics that fail their own limit; any entry blocks. */
80
+ measuredFailures?: MeasuredFailure[];
81
+ /** #996: false for static analysis (runGate omitted/false) — no quality gate ran. */
82
+ gateEvaluated?: boolean;
83
+ /** #996: share of requested metrics that were measured, in [0, 1]. */
84
+ confidence?: number;
85
+ /** #996: plain statement of what was (and was not) evaluated. */
86
+ note?: string;
52
87
  }
53
88
  export interface SecurityScanResult {
54
89
  taskId: string;
@@ -184,6 +219,18 @@ export interface CodeIndexResult {
184
219
  symbolsExtracted: number;
185
220
  relationsFound: number;
186
221
  duration: number;
222
+ /**
223
+ * #999 MCP-CLI parity: project metrics collected by the code-intelligence
224
+ * coordinator, rooted at the target (as `aqe code index` does). Absent when
225
+ * no project root resolves or the metric step is unavailable.
226
+ */
227
+ projectMetrics?: {
228
+ root: string;
229
+ loc: number;
230
+ locByLanguage: Record<string, number>;
231
+ tests: number;
232
+ toolsUsed: string[];
233
+ };
187
234
  savedFiles?: string[];
188
235
  /** #933: true when result files were written; see savedFiles for their paths. */
189
236
  resultsSaved?: boolean;
@@ -9,8 +9,11 @@
9
9
  import { generateV2LearningFeedback, analyzeComplexity, generateV2AIInsights, generateV2Tests, detectAntiPatterns, generateTestId, } from './handler-factory.js';
10
10
  import { describeSavedResults } from './save-results-option.js';
11
11
  import { MetricsCollector } from '../metrics/index.js';
12
+ import { CallerInputError } from '../../shared/error-utils.js';
12
13
  import { DEFAULT_FRAMEWORKS, FRAMEWORK_TO_LANGUAGE, } from '../../shared/types/test-frameworks.js';
13
14
  import { buildRiskDecisionFromQualityGate, validateRiskDecision, } from '../../contracts/verdicts.js';
15
+ import { INSUFFICIENT_EVIDENCE, } from '../../domains/quality-assessment/quality-evidence.js';
16
+ import { validateRequestedMetrics, } from '../../domains/quality-assessment/evidence-sufficiency.js';
14
17
  import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
15
18
  const SUPPORTED_LANGUAGES = Object.keys(DEFAULT_FRAMEWORKS);
16
19
  /**
@@ -200,7 +203,8 @@ export const testExecuteConfig = {
200
203
  const total = data.total || 0;
201
204
  const passed = data.passed || 0;
202
205
  const failed = data.failed || 0;
203
- const coverage = data.coverage;
206
+ // #1027 N5: no measured coverage → null, never a hardcoded 0.
207
+ const coverage = typeof data.coverage === 'number' && Number.isFinite(data.coverage) ? data.coverage : null;
204
208
  const parallelism = params?.parallelism || 4;
205
209
  const realRetryStats = MetricsCollector.getRetryStats();
206
210
  const workersUsed = MetricsCollector.getWorkersUsed();
@@ -305,7 +309,8 @@ export const coverageAnalyzeConfig = {
305
309
  const rawLine = summary?.line ?? data.lineCoverage;
306
310
  const lineCoverage = rawLine ?? null;
307
311
  const rawStatement = summary?.statement ?? data.statementCoverage;
308
- const statementCoverage = rawStatement ?? lineCoverage;
312
+ // #1027 N7: an explicit null (no statement data, e.g. lcov) stays null.
313
+ const statementCoverage = rawStatement === undefined ? lineCoverage : rawStatement;
309
314
  const learning = generateV2LearningFeedback('coverage-analyzer');
310
315
  // Map gap analysis from real data — never fabricate file paths
311
316
  const detailedGaps = gaps.map((gap, i) => {
@@ -403,6 +408,9 @@ export const coverageAnalyzeConfig = {
403
408
  coverageMethod: data.coverageMethod ?? 'unknown',
404
409
  branchDataCollected,
405
410
  functionDataCollected,
411
+ ...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
412
+ // #995: the target has no measurement at all — distinct from a measured 0%.
413
+ ...(data.unmeasured === true ? { unmeasured: true } : {}),
406
414
  ...(data.warning ? { warning: data.warning } : {}),
407
415
  };
408
416
  },
@@ -420,32 +428,95 @@ export const qualityAssessConfig = {
420
428
  if (params.runGate !== undefined && typeof params.runGate !== 'boolean') {
421
429
  throw new Error('runGate must be a boolean.');
422
430
  }
431
+ // #996 (N3): a string or unknown name is a caller error, not a metric list.
432
+ const metrics = params.metrics === undefined
433
+ ? ['coverage', 'complexity', 'maintainability']
434
+ : validateRequestedMetrics(params.metrics);
435
+ // #1021: scope the analysis instead of silently analysing <cwd>/src.
436
+ // Containment in the project root is enforced by the handler.
437
+ // CallerInputError: a caller mistake, never a component failure (round 2b).
438
+ if (params.target !== undefined && (typeof params.target !== 'string' || params.target.trim() === '')) {
439
+ throw new CallerInputError('target must be a non-empty string path.');
440
+ }
441
+ if (params.sourceFiles !== undefined && (!Array.isArray(params.sourceFiles) || params.sourceFiles.length === 0
442
+ || params.sourceFiles.some((f) => typeof f !== 'string' || f.trim() === ''))) {
443
+ throw new CallerInputError('sourceFiles must be a non-empty array of file paths.');
444
+ }
423
445
  return {
424
446
  runGate: params.runGate ?? false,
447
+ ...(params.target !== undefined ? { target: params.target } : {}),
448
+ ...(params.sourceFiles !== undefined ? { sourceFiles: params.sourceFiles } : {}),
425
449
  threshold: params.threshold || 80,
426
- metrics: params.metrics || ['coverage', 'complexity', 'maintainability'],
450
+ // #996: only a caller-supplied threshold overrides the configured/default
451
+ // per-metric limits; the 80 fallback above must not.
452
+ thresholdSource: params.threshold === undefined ? 'default' : 'request',
453
+ metrics,
427
454
  routingTier: routingResult?.decision.tier,
428
455
  useAgentBooster: routingResult?.useAgentBooster,
429
456
  compiledContext: routingResult?.compiledContext,
430
457
  };
431
458
  },
432
459
  mapToResult: (taskId, data, duration, savedFiles) => {
460
+ // #996: never approve on missing data. Any unmeasured requested metric
461
+ // forces passed=false and an explicit insufficient-evidence status.
462
+ const unmeasured = Array.isArray(data.unmeasured)
463
+ ? data.unmeasured.filter((m) => typeof m === 'string')
464
+ : undefined;
465
+ const insufficient = (unmeasured?.length ?? 0) > 0 || data.evidenceStatus === INSUFFICIENT_EVIDENCE;
466
+ const gateEvaluated = typeof data.gateEvaluated === 'boolean' ? data.gateEvaluated : undefined;
467
+ const confidence = typeof data.confidence === 'number' ? data.confidence : undefined;
468
+ const measuredFailures = Array.isArray(data.measuredFailures)
469
+ ? data.measuredFailures
470
+ : undefined;
471
+ const failedMetrics = (measuredFailures ?? []).map((f) => f.metric);
472
+ // #1011: reasons travel only as a string-to-string map.
473
+ const unmeasuredReasons = data.unmeasuredReasons && typeof data.unmeasuredReasons === 'object'
474
+ && Object.values(data.unmeasuredReasons).every((r) => typeof r === 'string')
475
+ ? data.unmeasuredReasons
476
+ : undefined;
477
+ // -1 = no measured score; never quote it as a score.
478
+ const measuredScore = typeof data.qualityScore === 'number' && data.qualityScore >= 0
479
+ ? data.qualityScore
480
+ : undefined;
481
+ const passed = !insufficient && failedMetrics.length === 0 && data.passed === true;
433
482
  // ADR-103: attach a schema-validated RiskDecision envelope at the MCP
434
483
  // boundary (additive — existing fields unchanged). Omit rather than
435
484
  // emit an invalid envelope.
436
485
  const riskDecision = buildRiskDecisionFromQualityGate({
437
- passed: typeof data.passed === 'boolean' ? data.passed : undefined,
438
- qualityScore: data.qualityScore,
486
+ passed: insufficient || failedMetrics.length > 0
487
+ ? false
488
+ : typeof data.passed === 'boolean' ? data.passed : undefined,
489
+ qualityScore: measuredScore,
439
490
  recommendations: data.recommendations || [],
491
+ unmeasured: insufficient ? (unmeasured?.length ? unmeasured : ['unknown']) : [],
492
+ failedMetrics,
493
+ evidenceConfidence: confidence,
494
+ gateEvaluated,
440
495
  });
441
496
  return {
442
497
  taskId,
443
- status: 'completed',
498
+ status: insufficient ? INSUFFICIENT_EVIDENCE : 'completed',
444
499
  ...(typeof data.qualityScore === 'number' ? { qualityScore: data.qualityScore } : {}),
445
500
  ...(Array.isArray(data.checks) ? { checks: data.checks } : {}),
446
- passed: data.passed || false,
501
+ passed,
447
502
  metrics: data.metrics || {},
448
503
  recommendations: data.recommendations || [],
504
+ ...(data.evidenceStatus === 'measured' || insufficient
505
+ ? { evidenceStatus: insufficient ? INSUFFICIENT_EVIDENCE : 'measured' }
506
+ : {}),
507
+ ...(unmeasured ? { unmeasured } : {}),
508
+ ...(unmeasuredReasons ? { unmeasuredReasons } : {}),
509
+ // #1021: partial evidence, exclusions and the analysed scope travel with the verdict.
510
+ ...(Array.isArray(data.partialMetrics) ? { partialMetrics: data.partialMetrics } : {}),
511
+ ...(Array.isArray(data.excludedFiles) ? { excludedFiles: data.excludedFiles } : {}),
512
+ ...(typeof data.excludedCount === 'number' ? { excludedCount: data.excludedCount } : {}),
513
+ ...(typeof data.scope === 'string' ? { scope: data.scope } : {}),
514
+ ...(Array.isArray(data.scoreBasis) && data.scoreBasis.every((m) => typeof m === 'string')
515
+ ? { scoreBasis: data.scoreBasis } : {}),
516
+ ...(measuredFailures ? { measuredFailures } : {}),
517
+ ...(gateEvaluated !== undefined ? { gateEvaluated } : {}),
518
+ ...(confidence !== undefined ? { confidence } : {}),
519
+ ...(typeof data.note === 'string' ? { note: data.note } : {}),
449
520
  duration,
450
521
  savedFiles,
451
522
  ...(validateRiskDecision(riskDecision).valid ? { riskDecision } : {}),
@@ -683,6 +754,7 @@ export const codeIndexConfig = {
683
754
  filesIndexed: data.filesIndexed || 0,
684
755
  symbolsExtracted: data.symbolsExtracted || 0,
685
756
  relationsFound: data.relationsFound || 0,
757
+ ...(data.projectMetrics ? { projectMetrics: data.projectMetrics } : {}),
686
758
  duration,
687
759
  savedFiles,
688
760
  }),
@@ -14,9 +14,10 @@ import { randomUUID } from 'crypto';
14
14
  import { getFleetState, isFleetInitialized } from './core-handlers.js';
15
15
  import { createTaskExecutor } from '../../coordination/task-executor.js';
16
16
  import { getTaskRouter } from '../services/task-router.js';
17
- import { toErrorMessage } from '../../shared/error-utils.js';
17
+ import { isCallerInputError, toErrorMessage } from '../../shared/error-utils.js';
18
18
  import { describeSavedResults, readSaveResultsOption } from './save-results-option.js';
19
19
  import { createInitializedFeedbackLoop, getQualityFeedbackLoop } from '../../feedback/feedback-loop.js';
20
+ import { isLearnableResult } from '../../learning/learnable-result.js';
20
21
  // ============================================================================
21
22
  // Shared Utilities (exported for response mappers)
22
23
  // ============================================================================
@@ -171,7 +172,10 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
171
172
  await loop.recordTestOutcome(outcome);
172
173
  }
173
174
  }
174
- if (domain === 'coverage-analysis' && data) {
175
+ // #1014: only MEASURED coverage becomes a coverage_sessions row. An
176
+ // estimate or an UNMEASURED target wrote after_lines = the estimate / 0.0,
177
+ // which gate-check, threshold-check and the coverage-learner then read.
178
+ if (domain === 'coverage-analysis' && data && isLearnableResult(domain, data)) {
175
179
  // Extract coverage session data and record for learning
176
180
  const session = {
177
181
  id: randomUUID(),
@@ -203,6 +207,14 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
203
207
  durationMs,
204
208
  startedAt: new Date(Date.now() - durationMs),
205
209
  completedAt: new Date(),
210
+ // #1014: provenance stamp — readers ignore legacy rows of this agent
211
+ // without it (see feedback/coverage-session-provenance.ts).
212
+ context: {
213
+ measured: true,
214
+ coverageMethod: data.coverageMethod ?? 'instrumented-report',
215
+ branchDataCollected: data.branchCoverage !== null && data.branchCoverage !== undefined,
216
+ functionDataCollected: data.functionCoverage !== null && data.functionCoverage !== undefined,
217
+ },
206
218
  };
207
219
  await loop.recordCoverageSession(session);
208
220
  }
@@ -636,6 +648,9 @@ export function createDomainHandler(config) {
636
648
  return {
637
649
  success: false,
638
650
  error: result.error || 'Task execution failed',
651
+ // #996: structured failure context (e.g. status + unmeasured metrics),
652
+ // only when the failing handler provided it. success stays false.
653
+ ...(result.errorDetails ? { data: result.errorDetails } : {}),
639
654
  };
640
655
  }
641
656
  // Step 5: Map result
@@ -643,16 +658,22 @@ export function createDomainHandler(config) {
643
658
  const mappedResult = mapToResult(submitResult.value, data, result.duration, result.savedFiles, params);
644
659
  // #933: every result-saving tool reports what it wrote, the same way.
645
660
  Object.assign(mappedResult, describeSavedResults(saveResults, result.savedFiles));
646
- // Step 5b: Record pattern usage on success (Phase 5.3 — fire-and-forget)
647
- recordPatternUsageAsync(routingResult?.patternHints, true, domain, result.duration);
648
- // Step 5c: Capture real execution learning (fire-and-forget)
649
- captureExecutionLearning(`qe-${domain}`, taskType, params, data, result.duration).catch(() => { }); // Swallow errors — learning is non-critical
650
- // Step 5d: Record feedback for test_outcomes / coverage_sessions
651
- try {
652
- await recordDomainFeedback(domain, data, result.duration, params);
653
- }
654
- catch {
655
- // Non-critical — don't fail handler if feedback recording fails
661
+ // #1014: a run without evidence (a coverage estimate, an UNMEASURED
662
+ // target, an insufficient-evidence gate) still succeeds as a tool call,
663
+ // but is not recorded as successful learning anywhere below.
664
+ const learnable = isLearnableResult(domain, data) && isLearnableResult('', mappedResult);
665
+ if (learnable) {
666
+ // Step 5b: Record pattern usage on success (Phase 5.3 — fire-and-forget)
667
+ recordPatternUsageAsync(routingResult?.patternHints, true, domain, result.duration);
668
+ // Step 5c: Capture real execution learning (fire-and-forget)
669
+ captureExecutionLearning(`qe-${domain}`, taskType, params, data, result.duration).catch(() => { }); // Swallow errors — learning is non-critical
670
+ // Step 5d: Record feedback for test_outcomes / coverage_sessions
671
+ try {
672
+ await recordDomainFeedback(domain, data, result.duration, params);
673
+ }
674
+ catch {
675
+ // Non-critical — don't fail handler if feedback recording fails
676
+ }
656
677
  }
657
678
  return {
658
679
  success: true,
@@ -662,11 +683,19 @@ export function createDomainHandler(config) {
662
683
  catch (error) {
663
684
  // Step 6: Error handling
664
685
  const errorMessage = toErrorMessage(error);
665
- // Record pattern usage on failure (Phase 5.3 — fire-and-forget)
666
- recordPatternUsageAsync(routingResult?.patternHints, false, domain, 0);
686
+ // A caller-input error thrown before the task runs (e.g. by
687
+ // mapToPayload's shape checks) is the caller's mistake, not a domain
688
+ // failure: it is marked for the experience middleware and not recorded
689
+ // as a pattern-usage failure.
690
+ const callerError = isCallerInputError(error);
691
+ if (!callerError) {
692
+ // Record pattern usage on failure (Phase 5.3 — fire-and-forget)
693
+ recordPatternUsageAsync(routingResult?.patternHints, false, domain, 0);
694
+ }
667
695
  return {
668
696
  success: false,
669
697
  error: `Failed to ${taskType.replace(/-/g, ' ')}: ${errorMessage}`,
698
+ ...(callerError ? { data: { callerError: true } } : {}),
670
699
  };
671
700
  }
672
701
  };
@@ -53,7 +53,13 @@ function createWrappedHandler(handler, domain, agent) {
53
53
  if (result.success) {
54
54
  return { success: true, data: result.data };
55
55
  }
56
- return { success: false, error: result.error || 'Unknown error' };
56
+ // #996: keep structured failure context (e.g. insufficient-evidence details)
57
+ // when the domain handler provided it; success stays false.
58
+ return {
59
+ success: false,
60
+ error: result.error || 'Unknown error',
61
+ ...(result.data !== undefined ? { data: result.data } : {}),
62
+ };
57
63
  };
58
64
  }
59
65
  // ============================================================================
@@ -477,9 +477,16 @@ export class MCPProtocolServer {
477
477
  const { getSessionCache } = await import('../optimization/session-cache.js');
478
478
  const cache = getSessionCache();
479
479
  const { domain, action } = parseToolDomainAction(name);
480
+ // #998: key on the project root, working directory and a fingerprint
481
+ // of every path argument, not on the raw arguments alone. A call that
482
+ // reads a directory tree is neither served from nor stored in cache.
483
+ const { buildToolCacheScope } = await import('./tool-cache-scope.js');
484
+ const { scope, reusable } = buildToolCacheScope(name, processedCtx.params);
480
485
  cacheGeneration = cache.getGeneration();
481
- cacheFingerprint = cache.computeFingerprint(domain, action, processedCtx.params || {});
482
- const hit = cache.get(cacheFingerprint);
486
+ cacheFingerprint = reusable
487
+ ? cache.computeFingerprint(domain, action, processedCtx.params || {}, scope)
488
+ : null;
489
+ const hit = cacheFingerprint ? cache.get(cacheFingerprint) : null;
483
490
  if (hit) {
484
491
  // Cache hit — return the stored result without running the handler.
485
492
  const cachedText = JSON.stringify(hit.result, null, 2);
@@ -887,6 +894,10 @@ export class MCPProtocolServer {
887
894
  description: `Analyze code coverage with O(log n) sublinear algorithm and ML-powered gap detection. ${SAVE_RESULTS_HINT} Example: coverage_analyze_sublinear({ target: "src/", detectGaps: true })`,
888
895
  category: 'domain',
889
896
  isConcurrencySafe: true,
897
+ // #998: never replay from the session cache. The result measures
898
+ // mutable project state (source tree, test runs, reports on disk), so a
899
+ // cached answer goes stale as soon as those inputs change.
900
+ isCacheable: false,
890
901
  parameters: [
891
902
  { name: 'target', type: 'string', description: 'Target path to analyze', required: true },
892
903
  { name: 'detectGaps', type: 'boolean', description: 'Detect coverage gaps', default: true },
@@ -899,11 +910,18 @@ export class MCPProtocolServer {
899
910
  this.registerTool({
900
911
  definition: {
901
912
  name: 'quality_assess',
902
- description: `Assess code quality metrics and optionally run a pass/fail quality gate. ${SAVE_RESULTS_HINT} Example: quality_assess({ runGate: true })`,
913
+ description: `Assess code quality metrics and optionally run a pass/fail quality gate. Unmeasured metrics never pass. ${SAVE_RESULTS_HINT} Example: quality_assess({ runGate: true })`,
903
914
  category: 'domain',
904
915
  isConcurrencySafe: true,
916
+ // #998: never replay from the session cache. The result measures
917
+ // mutable project state (source tree, test runs, reports on disk), so a
918
+ // cached answer goes stale as soon as those inputs change.
919
+ isCacheable: false,
905
920
  parameters: [
906
- { name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score.', default: false },
921
+ { name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score. Missing, stale or malformed evidence fails with status "insufficient-evidence" and lists the metrics in unmeasured. When false, only static analysis runs (gateEvaluated: false).', default: false },
922
+ { name: 'metrics', type: 'array', description: 'Static-analysis metrics to assess (default coverage, complexity, maintainability). Known: coverage, complexity, maintainability, duplication, testability, security. Any requested metric without measured data gives status "insufficient-evidence", passed: false, and lists it in unmeasured; a measured metric failing its threshold blocks.', items: { type: 'string' } },
923
+ { name: 'target', type: 'string', description: 'File or directory to analyse, resolved against the project root and required to stay inside it (default: src/, else the root). Binary, generated, minified and .d.ts files are excluded and listed in excludedFiles; files that fail to parse are listed in partialMetrics.' },
924
+ { name: 'sourceFiles', type: 'array', description: 'Explicit files to analyse (each inside the project root); takes precedence over target. If a listed file cannot be read or parsed, the affected metrics are unmeasured.', items: { type: 'string' } },
907
925
  saveResultsParameter('quality_assess'),
908
926
  ],
909
927
  },
@@ -973,6 +991,10 @@ export class MCPProtocolServer {
973
991
  description: `Predict potential defects using AI analysis of code complexity and change history. ${SAVE_RESULTS_HINT} Example: defect_predict({ target: "src/auth/" })`,
974
992
  category: 'domain',
975
993
  isConcurrencySafe: true,
994
+ // #998: never replay from the session cache. The result measures
995
+ // mutable project state (source tree, test runs, reports on disk), so a
996
+ // cached answer goes stale as soon as those inputs change.
997
+ isCacheable: false,
976
998
  parameters: [
977
999
  { name: 'target', type: 'string', description: 'Target path', required: true },
978
1000
  saveResultsParameter('defect_predict'),
@@ -1001,6 +1023,10 @@ export class MCPProtocolServer {
1001
1023
  description: `Index source code into the knowledge graph for dependency and impact analysis. ${SAVE_RESULTS_HINT} Example: code_index({ target: "src/" })`,
1002
1024
  category: 'domain',
1003
1025
  isConcurrencySafe: true,
1026
+ // #998: never replay from the session cache. The result measures
1027
+ // mutable project state (source tree, test runs, reports on disk), so a
1028
+ // cached answer goes stale as soon as those inputs change.
1029
+ isCacheable: false,
1004
1030
  parameters: [
1005
1031
  { name: 'target', type: 'string', description: 'Target path', required: true },
1006
1032
  saveResultsParameter('code_index'),
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Agentic QE v3 - MCP result-cache scope (#998)
3
+ *
4
+ * The protocol server reuses results of read-only tools through the session
5
+ * cache. A result is only reusable for the same project and the same inputs,
6
+ * so the cache key carries:
7
+ * - the resolved project root and working directory, and
8
+ * - for each path argument, its absolute path plus an mtime/size fingerprint,
9
+ * so an edited requirements file misses the cache.
10
+ *
11
+ * A directory argument cannot be fingerprinted cheaply (editing a file inside
12
+ * it does not change the directory's mtime), so a call that reads a directory
13
+ * tree is reported as not reusable and runs every time.
14
+ *
15
+ * @module mcp/tool-cache-scope
16
+ */
17
+ import type { CacheScope } from '../optimization/session-cache.js';
18
+ /** Argument names that tools treat as filesystem paths. */
19
+ export declare const PATH_ARGUMENTS: readonly ["target", "requirementsPath", "contractPath", "testPath", "path", "filePath", "file"];
20
+ export interface ToolCacheScope {
21
+ scope: CacheScope;
22
+ /** False when the call reads a directory tree, so no cached result may be reused. */
23
+ reusable: boolean;
24
+ }
25
+ /**
26
+ * Build the cache scope for one tool call: project root, working directory
27
+ * and a fingerprint of every path argument (relative ones resolved to
28
+ * absolute paths against the working directory).
29
+ */
30
+ export declare function buildToolCacheScope(toolName: string, params: Record<string, unknown> | undefined): ToolCacheScope;
31
+ //# sourceMappingURL=tool-cache-scope.d.ts.map
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Agentic QE v3 - MCP result-cache scope (#998)
3
+ *
4
+ * The protocol server reuses results of read-only tools through the session
5
+ * cache. A result is only reusable for the same project and the same inputs,
6
+ * so the cache key carries:
7
+ * - the resolved project root and working directory, and
8
+ * - for each path argument, its absolute path plus an mtime/size fingerprint,
9
+ * so an edited requirements file misses the cache.
10
+ *
11
+ * A directory argument cannot be fingerprinted cheaply (editing a file inside
12
+ * it does not change the directory's mtime), so a call that reads a directory
13
+ * tree is reported as not reusable and runs every time.
14
+ *
15
+ * @module mcp/tool-cache-scope
16
+ */
17
+ import * as fs from 'fs';
18
+ import * as path from 'path';
19
+ import { findProjectRoot } from '../kernel/project-root.js';
20
+ /** Argument names that tools treat as filesystem paths. */
21
+ export const PATH_ARGUMENTS = [
22
+ 'target', 'requirementsPath', 'contractPath', 'testPath', 'path', 'filePath', 'file',
23
+ ];
24
+ function fingerprintPath(value, cwd) {
25
+ const absolute = path.resolve(cwd, value);
26
+ try {
27
+ const stat = fs.statSync(absolute);
28
+ return {
29
+ path: absolute,
30
+ exists: true,
31
+ kind: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',
32
+ size: stat.size,
33
+ mtimeMs: stat.mtimeMs,
34
+ };
35
+ }
36
+ catch {
37
+ return { path: absolute, exists: false };
38
+ }
39
+ }
40
+ /**
41
+ * Tools that scan the working directory tree when their path argument is
42
+ * omitted. Such a call reads mutable files that no fingerprint here covers.
43
+ */
44
+ const IMPLICIT_DIRECTORY_ARGUMENT = {
45
+ requirements_validate: 'requirementsPath',
46
+ };
47
+ /**
48
+ * Build the cache scope for one tool call: project root, working directory
49
+ * and a fingerprint of every path argument (relative ones resolved to
50
+ * absolute paths against the working directory).
51
+ */
52
+ export function buildToolCacheScope(toolName, params) {
53
+ const cwd = process.cwd();
54
+ const projectRoot = path.resolve(findProjectRoot());
55
+ const inputs = {};
56
+ let reusable = true;
57
+ for (const name of PATH_ARGUMENTS) {
58
+ const value = params?.[name];
59
+ if (typeof value === 'string' && value.length > 0) {
60
+ const fingerprint = fingerprintPath(value, cwd);
61
+ inputs[name] = fingerprint;
62
+ if (fingerprint.kind === 'directory')
63
+ reusable = false;
64
+ }
65
+ }
66
+ const implicit = IMPLICIT_DIRECTORY_ARGUMENT[toolName];
67
+ if (implicit && inputs[implicit] === undefined)
68
+ reusable = false;
69
+ return { scope: { projectRoot, cwd, inputs }, reusable };
70
+ }
71
+ //# sourceMappingURL=tool-cache-scope.js.map
@@ -14,6 +14,7 @@ import { SemanticAnalyzerService } from '../../../domains/code-intelligence/serv
14
14
  import { ImpactAnalyzerService } from '../../../domains/code-intelligence/services/impact-analyzer.js';
15
15
  import * as fs from 'fs';
16
16
  import * as path from 'path';
17
+ import { isAqeManagedDir } from '../../../shared/aqe-managed-dirs.js';
17
18
  import { toErrorMessage } from '../../../shared/error-utils.js';
18
19
  // ============================================================================
19
20
  // Tool Implementation
@@ -405,7 +406,7 @@ export class CodeAnalyzeTool extends MCPToolBase {
405
406
  /**
406
407
  * Find source files in a directory
407
408
  */
408
- async findSourceFiles(dir) {
409
+ async findSourceFiles(dir, isRoot = true) {
409
410
  const files = [];
410
411
  const extensions = ['.ts', '.tsx', '.js', '.jsx'];
411
412
  const ignoreDirs = ['node_modules', '.git', 'dist', 'build', 'coverage'];
@@ -414,8 +415,9 @@ export class CodeAnalyzeTool extends MCPToolBase {
414
415
  for (const entry of entries) {
415
416
  const fullPath = path.join(dir, entry.name);
416
417
  if (entry.isDirectory()) {
417
- if (!ignoreDirs.includes(entry.name)) {
418
- const subFiles = await this.findSourceFiles(fullPath);
418
+ // #999: AQE state/assets (.agentic-qe anywhere; .claude at the root or next to .agentic-qe)
419
+ if (!ignoreDirs.includes(entry.name) && !isAqeManagedDir(dir, entry.name, isRoot)) {
420
+ const subFiles = await this.findSourceFiles(fullPath, false);
419
421
  files.push(...subFiles);
420
422
  }
421
423
  }
@@ -143,6 +143,7 @@ export class CoverageAnalyzeTool extends MCPToolBase {
143
143
  coverageData: { files: domainFiles, summary: calculateSummary(domainFiles) },
144
144
  threshold: thresholds.lines || 80,
145
145
  includeFileDetails: true,
146
+ measured: true, // parsed from a real report (no estimation fallback here)
146
147
  });
147
148
  if (!analyzeResult.success) {
148
149
  return {
@@ -221,6 +221,10 @@ export interface QualityAssessParams {
221
221
  runGate?: boolean;
222
222
  threshold?: number;
223
223
  metrics?: string[];
224
+ /** #1021: file or directory to analyse, relative to (and contained in) the project root. Default: src/ (or the root). */
225
+ target?: string;
226
+ /** #1021: explicit files to analyse, each contained in the project root. Takes precedence over target. */
227
+ sourceFiles?: string[];
224
228
  /** #933: write result files under .agentic-qe/results/ (default true). false skips them. */
225
229
  saveResults?: boolean;
226
230
  }
@@ -568,6 +572,12 @@ export interface CoverageAnalyzeResult {
568
572
  branchDataCollected?: boolean;
569
573
  /** Whether function-level data was actually collected. */
570
574
  functionDataCollected?: boolean;
575
+ /**
576
+ * #995: true when coverage data exists for the project but none of it covers
577
+ * the requested target (or the run executed no code). The figures are null —
578
+ * this is "no measurement", never 0%.
579
+ */
580
+ unmeasured?: boolean;
571
581
  /** Caveats the caller should surface (e.g. "no instrumentation ran"). */
572
582
  warning?: string;
573
583
  }
@@ -22,6 +22,19 @@ export interface CachedOperation {
22
22
  hitCount: number;
23
23
  lastHitAt: number;
24
24
  }
25
+ /**
26
+ * Where a cached operation ran (#998). Arguments alone do not identify a
27
+ * result: the same relative `target: "."` means a different tree in another
28
+ * project, and a file argument means different content after an edit.
29
+ */
30
+ export interface CacheScope {
31
+ /** Resolved project root. Defaults to `findProjectRoot()`. */
32
+ projectRoot?: string;
33
+ /** Working directory relative arguments resolve against. Defaults to `process.cwd()`. */
34
+ cwd?: string;
35
+ /** Fingerprints of the inputs the operation reads (absolute path, mtime, size). */
36
+ inputs?: Record<string, unknown>;
37
+ }
25
38
  export interface SessionCacheConfig {
26
39
  /** Enable the cache (default: true) */
27
40
  enabled: boolean;
@@ -62,8 +75,13 @@ export declare class SessionOperationCache {
62
75
  *
63
76
  * Including the version means an upgrade misses cleanly rather than serving
64
77
  * stale answers; entries from the old build simply age out.
78
+ *
79
+ * The scope (project root, working directory and input fingerprints) is part
80
+ * of the key too (#998): without it a relative target returned another
81
+ * project's cached result. When no scope is passed, the current project root
82
+ * and working directory are used, so every caller is project-scoped.
65
83
  */
66
- computeFingerprint(domain: string, action: string, input: Record<string, unknown>): string;
84
+ computeFingerprint(domain: string, action: string, input: Record<string, unknown>, scope?: CacheScope): string;
67
85
  /**
68
86
  * Look up a cached result by fingerprint.
69
87
  * Returns null on miss or expired entry.