agentic-qe 3.15.5 → 3.15.7

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 (584) 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 +262 -0
  6. package/README.md +2 -0
  7. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  8. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  9. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  10. package/assets/skills/skills-manifest.json +1 -1
  11. package/dist/cli/bundle.js +8 -6
  12. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
  18. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
  19. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
  20. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
  24. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  26. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
  28. package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
  29. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
  30. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
  32. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
  34. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
  35. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
  38. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
  39. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
  40. package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
  41. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
  42. package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
  43. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
  45. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
  48. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
  49. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
  51. package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
  52. package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
  53. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
  56. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
  57. package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
  58. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
  60. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
  61. package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
  62. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
  64. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
  65. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
  67. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  68. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
  70. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
  71. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
  73. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
  74. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
  75. package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
  76. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
  77. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
  78. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
  79. package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
  80. package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
  81. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
  82. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
  83. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
  84. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
  85. package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
  86. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
  87. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
  88. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
  89. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
  90. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
  93. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
  94. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
  97. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
  100. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
  101. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
  102. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
  105. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
  106. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
  107. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
  109. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
  110. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
  112. package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
  113. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
  115. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
  116. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
  117. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
  119. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
  120. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
  122. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
  124. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
  125. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
  126. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
  127. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
  128. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  129. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
  131. package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
  132. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
  133. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
  134. package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
  135. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
  137. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
  138. package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
  139. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
  140. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
  141. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
  142. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
  144. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
  146. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
  147. package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
  148. package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
  149. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
  150. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
  151. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
  153. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
  155. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
  158. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
  159. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  160. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
  162. package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
  163. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
  165. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
  169. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
  170. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
  171. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
  172. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
  173. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
  174. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
  175. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
  176. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
  177. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
  178. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
  179. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
  180. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
  181. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  182. package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
  183. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  187. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
  189. package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
  192. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
  198. package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
  199. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
  201. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  202. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
  203. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  204. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
  209. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  210. package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
  211. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
  212. package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
  213. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  217. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
  225. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
  226. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  230. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  231. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  232. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  233. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  237. package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
  238. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  240. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
  241. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  242. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
  243. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  245. package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
  246. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  248. package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
  249. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
  252. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
  253. package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  255. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
  258. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  260. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
  266. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  272. package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
  273. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  275. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  276. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  277. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  278. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  279. package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
  285. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
  286. package/dist/cli/chunks/sync-S744AEJC.js +2 -0
  287. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
  289. package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
  290. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
  291. package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
  292. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
  293. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
  294. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  295. package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  299. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
  300. package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
  302. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
  307. package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  309. package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
  310. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
  311. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  312. package/dist/cli/chunks/wrappers-J6KGTUSJ.js +2 -0
  313. package/dist/cli/commands/ci.js +47 -25
  314. package/dist/cli/commands/coverage.d.ts +1 -28
  315. package/dist/cli/commands/coverage.js +63 -134
  316. package/dist/cli/commands/daemon.js +7 -1
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  318. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  319. package/dist/cli/commands/learning.js +50 -9
  320. package/dist/cli/commands/security.d.ts +16 -0
  321. package/dist/cli/commands/security.js +76 -9
  322. package/dist/cli/commands/test.js +6 -7
  323. package/dist/cli/commands/workflow.js +9 -5
  324. package/dist/cli/handlers/init-guard.d.ts +33 -0
  325. package/dist/cli/handlers/init-guard.js +66 -0
  326. package/dist/cli/handlers/init-handler.d.ts +3 -0
  327. package/dist/cli/handlers/init-handler.js +64 -54
  328. package/dist/cli/handlers/interfaces.js +5 -1
  329. package/dist/cli/index.js +11 -0
  330. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  331. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  332. package/dist/cli/utils/ci-output.d.ts +13 -1
  333. package/dist/cli/utils/ci-output.js +21 -2
  334. package/dist/cli/utils/coverage-data.d.ts +3 -0
  335. package/dist/cli/utils/coverage-data.js +14 -39
  336. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  337. package/dist/cli/utils/coverage-verdict.js +193 -0
  338. package/dist/cli/utils/file-discovery.js +5 -0
  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 +34 -6
  343. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  344. package/dist/coordination/handlers/coverage-runner.js +105 -10
  345. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  346. package/dist/coordination/handlers/coverage-target.js +4 -1
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  349. package/dist/coordination/handlers/handler-utils.js +46 -22
  350. package/dist/coordination/handlers/quality-handlers.js +108 -18
  351. package/dist/coordination/handlers/security-handlers.js +22 -6
  352. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  353. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  354. package/dist/coordination/protocols/defect-investigation.js +12 -3
  355. package/dist/coordination/protocols/quality-gate.js +10 -6
  356. package/dist/coordination/protocols/security-audit.js +11 -0
  357. package/dist/coordination/result-saver.d.ts +31 -0
  358. package/dist/coordination/result-saver.js +146 -46
  359. package/dist/coordination/task-executor.d.ts +7 -0
  360. package/dist/coordination/task-executor.js +32 -3
  361. package/dist/domains/code-intelligence/plugin.js +4 -0
  362. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  363. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  364. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  366. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  367. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  368. package/dist/domains/coverage-analysis/collected-metrics.d.ts +35 -0
  369. package/dist/domains/coverage-analysis/collected-metrics.js +42 -0
  370. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  371. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  372. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  373. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  374. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  375. package/dist/domains/defect-intelligence/plugin.js +4 -0
  376. package/dist/domains/defect-intelligence/services/defect-predictor.js +13 -8
  377. package/dist/domains/learning-optimization/coordinator.js +4 -0
  378. package/dist/domains/learning-optimization/plugin.js +4 -0
  379. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  380. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  381. package/dist/domains/quality-assessment/coordinator.js +10 -6
  382. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  383. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  384. package/dist/domains/quality-assessment/index.d.ts +1 -1
  385. package/dist/domains/quality-assessment/interfaces.d.ts +50 -0
  386. package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
  387. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  388. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  389. package/dist/domains/quality-assessment/services/quality-analyzer.js +197 -112
  390. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  391. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  392. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  393. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  394. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  395. package/dist/domains/security-compliance/plugin.js +19 -0
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  397. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  398. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  399. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  400. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  401. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  402. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  403. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  404. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  405. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  406. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  407. package/dist/domains/test-execution/plugin.js +4 -0
  408. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  409. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  410. package/dist/domains/test-execution/services/test-executor.js +239 -109
  411. package/dist/domains/test-generation/coordinator.js +4 -0
  412. package/dist/domains/test-generation/plugin.js +4 -0
  413. package/dist/feedback/coverage-learner.js +4 -1
  414. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  415. package/dist/feedback/coverage-session-provenance.js +39 -0
  416. package/dist/init/orchestrator.js +2 -0
  417. package/dist/init/phases/09-assets.d.ts +4 -0
  418. package/dist/init/phases/09-assets.js +35 -0
  419. package/dist/init/retired-assets.d.ts +86 -0
  420. package/dist/init/retired-assets.js +230 -0
  421. package/dist/init/skills-installer.d.ts +2 -0
  422. package/dist/init/skills-installer.js +4 -0
  423. package/dist/init/types.d.ts +3 -0
  424. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  425. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  426. package/dist/integrations/ruvector/server-client.js +4 -12
  427. package/dist/kernel/project-root.d.ts +17 -0
  428. package/dist/kernel/project-root.js +54 -2
  429. package/dist/kernel/shared-dirs.d.ts +66 -0
  430. package/dist/kernel/shared-dirs.js +180 -0
  431. package/dist/learning/daily-log.js +2 -1
  432. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  433. package/dist/learning/experience-capture-middleware.js +35 -0
  434. package/dist/learning/learnable-result.d.ts +16 -0
  435. package/dist/learning/learnable-result.js +24 -0
  436. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  437. package/dist/learning/pattern-mutation-error.js +12 -0
  438. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  439. package/dist/learning/qe-reasoning-bank.js +50 -1
  440. package/dist/learning/rvf-reconcile.d.ts +39 -0
  441. package/dist/learning/rvf-reconcile.js +40 -0
  442. package/dist/learning/sqlite-persistence.d.ts +14 -0
  443. package/dist/learning/sqlite-persistence.js +36 -0
  444. package/dist/mcp/bundle.js +908 -896
  445. package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
  446. package/dist/mcp/handlers/domain-handler-configs.js +42 -4
  447. package/dist/mcp/handlers/handler-factory.js +40 -14
  448. package/dist/mcp/protocol-server.js +29 -3
  449. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  450. package/dist/mcp/tool-cache-scope.js +71 -0
  451. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  452. package/dist/mcp/types.d.ts +10 -0
  453. package/dist/optimization/session-cache.d.ts +19 -1
  454. package/dist/optimization/session-cache.js +36 -2
  455. package/dist/plugins/cache.js +2 -1
  456. package/dist/plugins/sources/github.js +2 -1
  457. package/dist/plugins/sources/npm.js +2 -1
  458. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  459. package/dist/shared/aqe-managed-dirs.js +56 -0
  460. package/dist/shared/events/domain-events.d.ts +18 -3
  461. package/dist/shared/events/domain-events.js +4 -0
  462. package/dist/shared/http/http-client.d.ts +6 -0
  463. package/dist/shared/http/http-client.js +13 -15
  464. package/dist/shared/io/file-reader.d.ts +26 -0
  465. package/dist/shared/io/file-reader.js +111 -17
  466. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  467. package/dist/shared/llm/providers/response-deadline.js +17 -5
  468. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  469. package/dist/shared/metrics/code-metrics.js +93 -6
  470. package/dist/shared/metrics/index.d.ts +1 -1
  471. package/dist/shared/security/index.d.ts +2 -2
  472. package/dist/shared/security/index.js +1 -1
  473. package/dist/shared/security/osv-client.d.ts +79 -132
  474. package/dist/shared/security/osv-client.js +344 -167
  475. package/dist/shared/security/osv-lookup.d.ts +124 -0
  476. package/dist/shared/security/osv-lookup.js +246 -0
  477. package/dist/shared/security/osv-types.d.ts +119 -0
  478. package/dist/shared/security/osv-types.js +6 -0
  479. package/dist/workers/interfaces.d.ts +15 -2
  480. package/dist/workers/namespaced-keys.d.ts +16 -0
  481. package/dist/workers/namespaced-keys.js +24 -0
  482. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  483. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  484. package/dist/workers/quality-daemon/index.js +6 -5
  485. package/dist/workers/quality-daemon/notification-service.js +3 -3
  486. package/dist/workers/quality-daemon/persistent-memory.d.ts +3 -3
  487. package/dist/workers/quality-daemon/persistent-memory.js +4 -4
  488. package/dist/workers/worker-manager.js +10 -3
  489. package/dist/workers/workers/coverage-tracker.js +69 -33
  490. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  491. package/dist/workers/workers/defect-predictor.js +223 -216
  492. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  493. package/dist/workers/workers/performance-baseline.js +187 -230
  494. package/dist/workers/workers/quality-gate.d.ts +11 -9
  495. package/dist/workers/workers/quality-gate.js +125 -267
  496. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  497. package/dist/workers/workers/regression-monitor.js +276 -117
  498. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  499. package/dist/workers/workers/security-scan-records.js +128 -0
  500. package/dist/workers/workers/security-scan.d.ts +25 -7
  501. package/dist/workers/workers/security-scan.js +187 -164
  502. package/package.json +2 -2
  503. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  504. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  505. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  506. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  507. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  508. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  509. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  510. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  511. package/dist/cli/chunks/chunk-BO4PKNYP.js +0 -102
  512. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  513. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  514. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  515. package/dist/cli/chunks/chunk-GTSOFCMQ.js +0 -2
  516. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  517. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  518. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  519. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  520. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  521. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  522. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  523. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  524. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  525. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  526. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  527. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  528. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  529. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  530. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  531. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  532. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  533. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  534. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  535. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  536. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  537. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  538. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  539. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  540. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  541. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  542. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  543. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  544. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  545. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  546. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  547. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  548. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  549. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  550. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  551. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  552. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  553. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  554. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  555. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  556. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  557. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  558. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  559. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  560. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  561. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  562. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  563. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  564. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  565. package/dist/cli/chunks/security-7723AZZ4.js +0 -13
  566. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  567. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  568. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  569. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  570. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  571. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  572. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  573. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  574. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  575. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  576. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  577. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  578. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  579. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  580. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  581. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  582. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  583. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  584. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -10,6 +10,8 @@ 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 { DependencyScanReport } from '../../domains/security-compliance/dependency-advisory-engine.js';
14
+ import type { ExcludedQualityFile, PartialQualityMetric } from '../../domains/quality-assessment/interfaces.js';
13
15
  import { type RiskDecision } from '../../contracts/verdicts.js';
14
16
  import { type EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
15
17
  import { type MeasuredFailure } from '../../domains/quality-assessment/evidence-sufficiency.js';
@@ -20,7 +22,8 @@ export interface TestExecuteResult {
20
22
  passed: number;
21
23
  failed: number;
22
24
  duration: number;
23
- coverage?: number;
25
+ /** Measured line coverage of the run, or null when none was collected (#1027 N5). */
26
+ coverage?: number | null;
24
27
  workerStats?: Record<string, unknown>;
25
28
  retryStats?: Record<string, unknown>;
26
29
  results?: unknown[];
@@ -58,6 +61,22 @@ export interface QualityAssessResult {
58
61
  evidenceStatus?: 'measured' | 'insufficient-evidence';
59
62
  /** #996: requested metrics with no measured data (reported as -1 in `metrics`). */
60
63
  unmeasured?: string[];
64
+ /** #1011: why each unmeasured metric has no value (e.g. a file could not be parsed). */
65
+ unmeasuredReasons?: Record<string, string>;
66
+ /** #1021: metrics measured over part of the scope (files that failed to read or parse are listed). */
67
+ partialMetrics?: PartialQualityMetric[];
68
+ /** #1021: files left out of the analysis (binary, generated, minified, .d.ts, reader policy); first 50. */
69
+ excludedFiles?: ExcludedQualityFile[];
70
+ /** #1021: total number of excluded files. */
71
+ excludedCount?: number;
72
+ /** #1021: the directory, file, or 'sourceFiles' that was analysed. */
73
+ scope?: string;
74
+ /**
75
+ * #1021 round 2b: the metrics `qualityScore` was computed from, present when
76
+ * the score covers only part of the request (insufficient evidence) or of the
77
+ * files (partial metrics). Such a score is not a verdict.
78
+ */
79
+ scoreBasis?: string[];
61
80
  /** #996: measured metrics that fail their own limit; any entry blocks. */
62
81
  measuredFailures?: MeasuredFailure[];
63
82
  /** #996: false for static analysis (runGate omitted/false) — no quality gate ran. */
@@ -96,7 +115,10 @@ export interface SecurityScanResult {
96
115
  scanTypes?: {
97
116
  sast: boolean;
98
117
  dast: boolean;
118
+ dependencies?: boolean;
99
119
  };
120
+ /** #1049: OSV dependency advisory scan; status other than 'complete' is not a clean result. */
121
+ dependencyScan?: DependencyScanReport;
100
122
  note?: string;
101
123
  }
102
124
  export interface ContractValidateResult {
@@ -201,6 +223,18 @@ export interface CodeIndexResult {
201
223
  symbolsExtracted: number;
202
224
  relationsFound: number;
203
225
  duration: number;
226
+ /**
227
+ * #999 MCP-CLI parity: project metrics collected by the code-intelligence
228
+ * coordinator, rooted at the target (as `aqe code index` does). Absent when
229
+ * no project root resolves or the metric step is unavailable.
230
+ */
231
+ projectMetrics?: {
232
+ root: string;
233
+ loc: number;
234
+ locByLanguage: Record<string, number>;
235
+ tests: number;
236
+ toolsUsed: string[];
237
+ };
204
238
  savedFiles?: string[];
205
239
  /** #933: true when result files were written; see savedFiles for their paths. */
206
240
  resultsSaved?: boolean;
@@ -9,6 +9,7 @@
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';
14
15
  import { INSUFFICIENT_EVIDENCE, } from '../../domains/quality-assessment/quality-evidence.js';
@@ -202,7 +203,8 @@ export const testExecuteConfig = {
202
203
  const total = data.total || 0;
203
204
  const passed = data.passed || 0;
204
205
  const failed = data.failed || 0;
205
- 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;
206
208
  const parallelism = params?.parallelism || 4;
207
209
  const realRetryStats = MetricsCollector.getRetryStats();
208
210
  const workersUsed = MetricsCollector.getWorkersUsed();
@@ -307,7 +309,8 @@ export const coverageAnalyzeConfig = {
307
309
  const rawLine = summary?.line ?? data.lineCoverage;
308
310
  const lineCoverage = rawLine ?? null;
309
311
  const rawStatement = summary?.statement ?? data.statementCoverage;
310
- 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;
311
314
  const learning = generateV2LearningFeedback('coverage-analyzer');
312
315
  // Map gap analysis from real data — never fabricate file paths
313
316
  const detailedGaps = gaps.map((gap, i) => {
@@ -405,6 +408,7 @@ export const coverageAnalyzeConfig = {
405
408
  coverageMethod: data.coverageMethod ?? 'unknown',
406
409
  branchDataCollected,
407
410
  functionDataCollected,
411
+ ...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
408
412
  // #995: the target has no measurement at all — distinct from a measured 0%.
409
413
  ...(data.unmeasured === true ? { unmeasured: true } : {}),
410
414
  ...(data.warning ? { warning: data.warning } : {}),
@@ -428,8 +432,20 @@ export const qualityAssessConfig = {
428
432
  const metrics = params.metrics === undefined
429
433
  ? ['coverage', 'complexity', 'maintainability']
430
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
+ }
431
445
  return {
432
446
  runGate: params.runGate ?? false,
447
+ ...(params.target !== undefined ? { target: params.target } : {}),
448
+ ...(params.sourceFiles !== undefined ? { sourceFiles: params.sourceFiles } : {}),
433
449
  threshold: params.threshold || 80,
434
450
  // #996: only a caller-supplied threshold overrides the configured/default
435
451
  // per-metric limits; the 80 fallback above must not.
@@ -453,6 +469,15 @@ export const qualityAssessConfig = {
453
469
  ? data.measuredFailures
454
470
  : undefined;
455
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;
456
481
  const passed = !insufficient && failedMetrics.length === 0 && data.passed === true;
457
482
  // ADR-103: attach a schema-validated RiskDecision envelope at the MCP
458
483
  // boundary (additive — existing fields unchanged). Omit rather than
@@ -461,7 +486,7 @@ export const qualityAssessConfig = {
461
486
  passed: insufficient || failedMetrics.length > 0
462
487
  ? false
463
488
  : typeof data.passed === 'boolean' ? data.passed : undefined,
464
- qualityScore: data.qualityScore,
489
+ qualityScore: measuredScore,
465
490
  recommendations: data.recommendations || [],
466
491
  unmeasured: insufficient ? (unmeasured?.length ? unmeasured : ['unknown']) : [],
467
492
  failedMetrics,
@@ -480,6 +505,14 @@ export const qualityAssessConfig = {
480
505
  ? { evidenceStatus: insufficient ? INSUFFICIENT_EVIDENCE : 'measured' }
481
506
  : {}),
482
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 } : {}),
483
516
  ...(measuredFailures ? { measuredFailures } : {}),
484
517
  ...(gateEvaluated !== undefined ? { gateEvaluated } : {}),
485
518
  ...(confidence !== undefined ? { confidence } : {}),
@@ -504,10 +537,12 @@ export const securityScanConfig = {
504
537
  scanTypes.push('SAST');
505
538
  if (params.dast)
506
539
  scanTypes.push('DAST');
540
+ if (params.dependencies)
541
+ scanTypes.push('dependency advisories');
507
542
  return `Security scan (${scanTypes.join(', ')}) for ${params.target || 'project'}`;
508
543
  },
509
544
  mapToPayload: (params, routingResult) => {
510
- for (const name of ['sast', 'dast']) {
545
+ for (const name of ['sast', 'dast', 'dependencies']) {
511
546
  if (params[name] !== undefined && typeof params[name] !== 'boolean') {
512
547
  throw new Error(`${name} must be a boolean`);
513
548
  }
@@ -515,6 +550,7 @@ export const securityScanConfig = {
515
550
  return {
516
551
  sast: params.sast !== false,
517
552
  dast: params.dast || false,
553
+ dependencies: params.dependencies === true,
518
554
  compliance: params.compliance || [],
519
555
  target: params.target || '.',
520
556
  targetUrl: params.targetUrl,
@@ -549,6 +585,7 @@ export const securityScanConfig = {
549
585
  deepAnalysisPerformed: Boolean(data.evidence && data.deepAnalysisPerformed === true),
550
586
  analysisDepth: data.analysisDepth,
551
587
  scanTypes: data.scanTypes,
588
+ ...(data.dependencyScan ? { dependencyScan: data.dependencyScan } : {}),
552
589
  note: data.note,
553
590
  duration,
554
591
  savedFiles,
@@ -721,6 +758,7 @@ export const codeIndexConfig = {
721
758
  filesIndexed: data.filesIndexed || 0,
722
759
  symbolsExtracted: data.symbolsExtracted || 0,
723
760
  relationsFound: data.relationsFound || 0,
761
+ ...(data.projectMetrics ? { projectMetrics: data.projectMetrics } : {}),
724
762
  duration,
725
763
  savedFiles,
726
764
  }),
@@ -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
  }
@@ -646,16 +658,22 @@ export function createDomainHandler(config) {
646
658
  const mappedResult = mapToResult(submitResult.value, data, result.duration, result.savedFiles, params);
647
659
  // #933: every result-saving tool reports what it wrote, the same way.
648
660
  Object.assign(mappedResult, describeSavedResults(saveResults, result.savedFiles));
649
- // Step 5b: Record pattern usage on success (Phase 5.3 — fire-and-forget)
650
- recordPatternUsageAsync(routingResult?.patternHints, true, domain, result.duration);
651
- // Step 5c: Capture real execution learning (fire-and-forget)
652
- captureExecutionLearning(`qe-${domain}`, taskType, params, data, result.duration).catch(() => { }); // Swallow errors — learning is non-critical
653
- // Step 5d: Record feedback for test_outcomes / coverage_sessions
654
- try {
655
- await recordDomainFeedback(domain, data, result.duration, params);
656
- }
657
- catch {
658
- // 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
+ }
659
677
  }
660
678
  return {
661
679
  success: true,
@@ -665,11 +683,19 @@ export function createDomainHandler(config) {
665
683
  catch (error) {
666
684
  // Step 6: Error handling
667
685
  const errorMessage = toErrorMessage(error);
668
- // Record pattern usage on failure (Phase 5.3 — fire-and-forget)
669
- 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
+ }
670
695
  return {
671
696
  success: false,
672
697
  error: `Failed to ${taskType.replace(/-/g, ' ')}: ${errorMessage}`,
698
+ ...(callerError ? { data: { callerError: true } } : {}),
673
699
  };
674
700
  }
675
701
  };
@@ -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);
@@ -849,7 +856,7 @@ export class MCPProtocolServer {
849
856
  this.registerTool({
850
857
  definition: {
851
858
  name: 'test_generate_enhanced',
852
- description: 'Generate unit/integration/e2e tests with AI pattern recognition and anti-pattern detection. By default saves a manifest and report under .agentic-qe/results/tests/ (paths returned in savedFiles); pass saveResults: false to generate without writing any result files. Example: test_generate_enhanced({ sourceCode: "function add(a,b){return a+b}", testType: "unit", framework: "jest" })',
859
+ description: 'Generate unit/integration/e2e tests with AI pattern recognition and anti-pattern detection. By default saves a manifest and report under .agentic-qe/results/tests/, plus each generated test source under .agentic-qe/results/tests/generated/ (paths returned in savedFiles); pass saveResults: false to generate without writing any result files. Example: test_generate_enhanced({ sourceCode: "function add(a,b){return a+b}", testType: "unit", framework: "jest" })',
853
860
  category: 'domain',
854
861
  parameters: [
855
862
  { name: 'sourceCode', type: 'string', description: 'Source code to generate tests for' },
@@ -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 },
@@ -902,9 +913,15 @@ export class MCPProtocolServer {
902
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
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 },
907
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' } },
908
925
  saveResultsParameter('quality_assess'),
909
926
  ],
910
927
  },
@@ -921,6 +938,7 @@ export class MCPProtocolServer {
921
938
  { name: 'dast', type: 'boolean', description: 'Run DAST scan', default: false },
922
939
  { name: 'target', type: 'string', description: 'Source file or directory for SAST' },
923
940
  { name: 'targetUrl', type: 'string', description: 'URL for a requested DAST scan' },
941
+ { name: 'dependencies', type: 'boolean', description: 'Check package.json dependencies against OSV advisories (sends package names and versions to the OSV API). If the lookup fails or is partial, dependencyScan.status is incomplete/failed: advisories could not be checked, which is not zero vulnerabilities.', default: false },
924
942
  saveResultsParameter('security_scan_comprehensive'),
925
943
  ],
926
944
  },
@@ -974,6 +992,10 @@ export class MCPProtocolServer {
974
992
  description: `Predict potential defects using AI analysis of code complexity and change history. ${SAVE_RESULTS_HINT} Example: defect_predict({ target: "src/auth/" })`,
975
993
  category: 'domain',
976
994
  isConcurrencySafe: true,
995
+ // #998: never replay from the session cache. The result measures
996
+ // mutable project state (source tree, test runs, reports on disk), so a
997
+ // cached answer goes stale as soon as those inputs change.
998
+ isCacheable: false,
977
999
  parameters: [
978
1000
  { name: 'target', type: 'string', description: 'Target path', required: true },
979
1001
  saveResultsParameter('defect_predict'),
@@ -1002,6 +1024,10 @@ export class MCPProtocolServer {
1002
1024
  description: `Index source code into the knowledge graph for dependency and impact analysis. ${SAVE_RESULTS_HINT} Example: code_index({ target: "src/" })`,
1003
1025
  category: 'domain',
1004
1026
  isConcurrencySafe: true,
1027
+ // #998: never replay from the session cache. The result measures
1028
+ // mutable project state (source tree, test runs, reports on disk), so a
1029
+ // cached answer goes stale as soon as those inputs change.
1030
+ isCacheable: false,
1005
1031
  parameters: [
1006
1032
  { name: 'target', type: 'string', description: 'Target path', required: true },
1007
1033
  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
  }
@@ -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
  }
@@ -234,6 +238,12 @@ export interface SecurityScanParams {
234
238
  target?: string;
235
239
  /** URL for explicitly requested dynamic scanning. */
236
240
  targetUrl?: string;
241
+ /**
242
+ * #1049: check package.json dependencies against OSV advisories (opt-in; sends
243
+ * package names and versions to the OSV API). A failed or partial lookup is
244
+ * reported as incomplete, never as zero vulnerabilities.
245
+ */
246
+ dependencies?: boolean;
237
247
  /** #933: write result files under .agentic-qe/results/ (default true). false skips them. */
238
248
  saveResults?: boolean;
239
249
  }
@@ -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.
@@ -13,6 +13,8 @@
13
13
  * - TTL-based expiry, LRU-ish eviction at capacity
14
14
  */
15
15
  import { createHash } from 'crypto';
16
+ import * as path from 'path';
17
+ import { findProjectRoot } from '../kernel/project-root.js';
16
18
  /**
17
19
  * Build identity mixed into every cache fingerprint so persisted entries never
18
20
  * outlive the code that produced them. `__CLI_VERSION__` is substituted at bundle
@@ -54,6 +56,31 @@ function canonicalStringify(value) {
54
56
  }
55
57
  return encode(normalized);
56
58
  }
59
+ function resolveScope(scope) {
60
+ let projectRoot = scope?.projectRoot;
61
+ if (!projectRoot) {
62
+ try {
63
+ projectRoot = findProjectRoot();
64
+ }
65
+ catch {
66
+ projectRoot = '';
67
+ }
68
+ }
69
+ let cwd = scope?.cwd;
70
+ if (!cwd) {
71
+ try {
72
+ cwd = process.cwd();
73
+ }
74
+ catch {
75
+ cwd = '';
76
+ }
77
+ }
78
+ return {
79
+ projectRoot: projectRoot ? path.resolve(projectRoot) : '',
80
+ cwd: cwd ? path.resolve(cwd) : '',
81
+ inputs: scope?.inputs ?? {},
82
+ };
83
+ }
57
84
  // ============================================================================
58
85
  // Implementation
59
86
  // ============================================================================
@@ -81,9 +108,16 @@ export class SessionOperationCache {
81
108
  *
82
109
  * Including the version means an upgrade misses cleanly rather than serving
83
110
  * stale answers; entries from the old build simply age out.
111
+ *
112
+ * The scope (project root, working directory and input fingerprints) is part
113
+ * of the key too (#998): without it a relative target returned another
114
+ * project's cached result. When no scope is passed, the current project root
115
+ * and working directory are used, so every caller is project-scoped.
84
116
  */
85
- computeFingerprint(domain, action, input) {
86
- const canonical = canonicalStringify({ action, build: getBuildIdentity(), domain, input });
117
+ computeFingerprint(domain, action, input, scope) {
118
+ const canonical = canonicalStringify({
119
+ action, build: getBuildIdentity(), domain, input, scope: resolveScope(scope),
120
+ });
87
121
  return createHash('sha256').update(canonical).digest('hex').slice(0, 16);
88
122
  }
89
123
  /**