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
@@ -112,12 +112,17 @@ export class PersistentScheduler {
112
112
  }
113
113
  try {
114
114
  const content = fs.readFileSync(this.schedulesPath, 'utf-8');
115
- const data = this.parseSchedulesFile(content);
115
+ const { file: data, skipped } = this.parseSchedulesFile(content);
116
+ if (skipped.length > 0) {
117
+ console.warn(`[PersistentScheduler] Skipped ${skipped.length} malformed schedule ` +
118
+ `entries in ${this.schedulesPath} (not an object, no id, or duplicate id)`);
119
+ }
116
120
  this.log(`Loaded ${data.schedules.length} schedules`);
117
121
  return data.schedules;
118
122
  }
119
123
  catch (error) {
120
- // Handle corrupt file - backup and recreate
124
+ // Only a genuinely unparseable file gets here (bad JSON, no schedules
125
+ // array, oversize); malformed entries are disabled or skipped (#991).
121
126
  await this.handleCorruptFile(error);
122
127
  return [];
123
128
  }
@@ -128,7 +133,7 @@ export class PersistentScheduler {
128
133
  async saveSchedule(schedule) {
129
134
  await this.initialize();
130
135
  await this.withFileLock(async () => {
131
- const schedules = await this.loadSchedulesUnsafe();
136
+ const { schedules, skipped } = this.loadForWrite();
132
137
  const existingIndex = schedules.findIndex(s => s.id === schedule.id);
133
138
  if (existingIndex >= 0) {
134
139
  schedules[existingIndex] = schedule;
@@ -138,7 +143,7 @@ export class PersistentScheduler {
138
143
  schedules.push(schedule);
139
144
  this.log(`Added schedule: ${schedule.id}`);
140
145
  }
141
- await this.writeSchedules(schedules);
146
+ await this.writeSchedules(schedules, skipped);
142
147
  });
143
148
  }
144
149
  /**
@@ -147,13 +152,13 @@ export class PersistentScheduler {
147
152
  async removeSchedule(id) {
148
153
  await this.initialize();
149
154
  await this.withFileLock(async () => {
150
- const schedules = await this.loadSchedulesUnsafe();
155
+ const { schedules, skipped } = this.loadForWrite();
151
156
  const newSchedules = schedules.filter(s => s.id !== id);
152
157
  if (newSchedules.length === schedules.length) {
153
158
  this.log(`Schedule not found: ${id}`);
154
159
  return;
155
160
  }
156
- await this.writeSchedules(newSchedules);
161
+ await this.writeSchedules(newSchedules, skipped);
157
162
  this.log(`Removed schedule: ${id}`);
158
163
  });
159
164
  }
@@ -189,15 +194,20 @@ export class PersistentScheduler {
189
194
  async markExecuted(id) {
190
195
  await this.initialize();
191
196
  await this.withFileLock(async () => {
192
- const schedules = await this.loadSchedulesUnsafe();
197
+ const { schedules, skipped } = this.loadForWrite();
193
198
  const schedule = schedules.find(s => s.id === id);
194
199
  if (!schedule) {
195
200
  throw new Error(`Schedule not found: ${id}`);
196
201
  }
197
202
  const now = new Date();
198
203
  schedule.lastRun = now.toISOString();
199
- schedule.nextRun = calculateNextRun(schedule.schedule, now).toISOString();
200
- await this.writeSchedules(schedules);
204
+ // #913: an entry disabled on load (legacy/invalid cron, missing fields)
205
+ // has no computable next run. Record the run and keep it disabled
206
+ // instead of throwing from calculateNextRun.
207
+ if (!schedule.disabledReason) {
208
+ schedule.nextRun = calculateNextRun(schedule.schedule, now).toISOString();
209
+ }
210
+ await this.writeSchedules(schedules, skipped);
201
211
  this.log(`Marked executed: ${id}, next run: ${schedule.nextRun}`);
202
212
  });
203
213
  }
@@ -207,17 +217,22 @@ export class PersistentScheduler {
207
217
  async setEnabled(id, enabled) {
208
218
  await this.initialize();
209
219
  await this.withFileLock(async () => {
210
- const schedules = await this.loadSchedulesUnsafe();
220
+ const { schedules, skipped } = this.loadForWrite();
211
221
  const schedule = schedules.find(s => s.id === id);
212
222
  if (!schedule) {
213
223
  throw new Error(`Schedule not found: ${id}`);
214
224
  }
225
+ // #913/#991: an entry disabled on load cannot run; say why instead of
226
+ // failing inside calculateNextRun (or with no cron at all).
227
+ if (enabled && schedule.disabledReason) {
228
+ throw new Error(`Cannot enable schedule ${id}: ${schedule.disabledReason}`);
229
+ }
215
230
  schedule.enabled = enabled;
216
231
  // If re-enabling, recalculate next run from now
217
232
  if (enabled) {
218
233
  schedule.nextRun = calculateNextRun(schedule.schedule, new Date()).toISOString();
219
234
  }
220
- await this.writeSchedules(schedules);
235
+ await this.writeSchedules(schedules, skipped);
221
236
  this.log(`Set enabled=${enabled}: ${id}`);
222
237
  });
223
238
  }
@@ -241,7 +256,8 @@ export class PersistentScheduler {
241
256
  async clearAll() {
242
257
  await this.initialize();
243
258
  await this.withFileLock(async () => {
244
- await this.writeSchedules([]);
259
+ const { skipped } = this.loadForWrite();
260
+ await this.writeSchedules([], skipped);
245
261
  this.log('Cleared all schedules');
246
262
  });
247
263
  }
@@ -262,19 +278,22 @@ export class PersistentScheduler {
262
278
  // Private Helper Methods
263
279
  // ============================================================================
264
280
  /**
265
- * Load schedules without acquiring lock (for use within locked context)
281
+ * Load schedules for a locked read-modify-write. A genuinely unparseable
282
+ * file is backed up (not removed) first, so the write that follows cannot
283
+ * silently replace it with fewer schedules.
266
284
  */
267
- async loadSchedulesUnsafe() {
285
+ loadForWrite() {
268
286
  if (!fs.existsSync(this.schedulesPath)) {
269
- return [];
287
+ return { schedules: [], skipped: [] };
270
288
  }
271
289
  try {
272
290
  const content = fs.readFileSync(this.schedulesPath, 'utf-8');
273
- const data = this.parseSchedulesFile(content);
274
- return data.schedules;
291
+ const { file, skipped } = this.parseSchedulesFile(content);
292
+ return { schedules: file.schedules, skipped };
275
293
  }
276
- catch {
277
- return [];
294
+ catch (error) {
295
+ this.backupCorruptFile(error);
296
+ return { schedules: [], skipped: [] };
278
297
  }
279
298
  }
280
299
  /**
@@ -288,32 +307,53 @@ export class PersistentScheduler {
288
307
  throw new Error(`Schedules file exceeds maximum allowed size (${MAX_SCHEDULES_FILE_SIZE / (1024 * 1024)}MB). File is ${(contentSize / (1024 * 1024)).toFixed(2)}MB.`);
289
308
  }
290
309
  const data = safeJsonParse(content);
291
- // Validate structure
292
- if (!data.schedules || !Array.isArray(data.schedules)) {
310
+ // Validate structure: only a missing schedules array makes the file corrupt.
311
+ if (!isPlainObject(data) || !Array.isArray(data.schedules)) {
293
312
  throw new Error('Invalid schedules file: missing schedules array');
294
313
  }
295
- // Validate each schedule has required fields
296
- for (const schedule of data.schedules) {
297
- if (!schedule.id || !schedule.workflowId || !Object.prototype.hasOwnProperty.call(schedule, 'schedule')) {
298
- throw new Error(`Invalid schedule entry: missing required fields`);
314
+ // #991: validate each entry on its own. A malformed entry is disabled
315
+ // (when it can still be addressed by id) or skipped; it never makes the
316
+ // whole file "corrupt", which used to back up and REMOVE schedules.json.
317
+ const schedules = [];
318
+ const skipped = [];
319
+ const seen = new Set();
320
+ for (const entry of data.schedules) {
321
+ if (!isPlainObject(entry) || typeof entry.id !== 'string' || entry.id.length === 0 || seen.has(entry.id)) {
322
+ skipped.push(entry);
323
+ continue;
299
324
  }
300
- if (typeof schedule.schedule !== 'string' || !isValidCronExpression(schedule.schedule)) {
301
- schedule.disabledReason = `Invalid cron expression: ${schedule.schedule}`;
325
+ const schedule = entry;
326
+ seen.add(schedule.id);
327
+ const reason = scheduleDisabledReason(entry);
328
+ if (reason) {
329
+ schedule.disabledReason = reason;
302
330
  if (schedule.enabled) {
303
- console.warn(`[PersistentScheduler] Disabled schedule ${schedule.id}: ${schedule.disabledReason}`);
331
+ console.warn(`[PersistentScheduler] Disabled schedule ${schedule.id}: ${reason}`);
304
332
  }
305
333
  schedule.enabled = false;
306
334
  }
307
335
  else {
308
336
  delete schedule.disabledReason;
309
337
  }
338
+ schedules.push(schedule);
310
339
  }
311
- return data;
340
+ return { file: { ...data, schedules }, skipped };
312
341
  }
313
342
  /**
314
343
  * Write schedules to disk
315
344
  */
316
- async writeSchedules(schedules) {
345
+ async writeSchedules(schedules, skipped = []) {
346
+ // #991: entries skipped on load are not written back; keep a copy next to
347
+ // the file first so nothing a user stored is lost silently.
348
+ if (skipped.length > 0) {
349
+ const quarantinePath = `${this.schedulesPath}.quarantine.${Date.now()}.json`;
350
+ fs.writeFileSync(quarantinePath, JSON.stringify({
351
+ quarantinedAt: new Date().toISOString(),
352
+ reason: 'Malformed schedule entries (not an object, no id, or duplicate id)',
353
+ entries: skipped,
354
+ }, null, 2), { encoding: 'utf-8', flag: 'wx' });
355
+ console.warn(`[PersistentScheduler] Moved ${skipped.length} malformed schedule entries to ${quarantinePath}`);
356
+ }
317
357
  const data = {
318
358
  version: FILE_VERSION,
319
359
  updatedAt: new Date().toISOString(),
@@ -329,17 +369,7 @@ export class PersistentScheduler {
329
369
  async handleCorruptFile(error) {
330
370
  const errorMsg = toErrorMessage(error);
331
371
  this.log(`Corrupt schedules file detected: ${errorMsg}`);
332
- // Create backup of corrupt file
333
- const backupPath = `${this.schedulesPath}.corrupt.${Date.now()}`;
334
- try {
335
- if (fs.existsSync(this.schedulesPath)) {
336
- fs.copyFileSync(this.schedulesPath, backupPath);
337
- this.log(`Backed up corrupt file to: ${backupPath}`);
338
- }
339
- }
340
- catch (backupError) {
341
- this.log(`Failed to backup corrupt file: ${backupError}`);
342
- }
372
+ this.backupCorruptFile(error);
343
373
  // Remove corrupt file
344
374
  try {
345
375
  if (fs.existsSync(this.schedulesPath)) {
@@ -351,6 +381,20 @@ export class PersistentScheduler {
351
381
  this.log(`Failed to remove corrupt file: ${removeError}`);
352
382
  }
353
383
  }
384
+ /** Copy an unparseable schedules file to `.corrupt.<ts>` (left in place). */
385
+ backupCorruptFile(error) {
386
+ this.log(`Corrupt schedules file detected: ${toErrorMessage(error)}`);
387
+ const backupPath = `${this.schedulesPath}.corrupt.${Date.now()}`;
388
+ try {
389
+ if (fs.existsSync(this.schedulesPath)) {
390
+ fs.copyFileSync(this.schedulesPath, backupPath, fs.constants.COPYFILE_EXCL);
391
+ this.log(`Backed up corrupt file to: ${backupPath}`);
392
+ }
393
+ }
394
+ catch (backupError) {
395
+ this.log(`Failed to backup corrupt file: ${backupError}`);
396
+ }
397
+ }
354
398
  /**
355
399
  * Execute a function with file locking for safe concurrent access
356
400
  */
@@ -433,6 +477,28 @@ export class PersistentScheduler {
433
477
  }
434
478
  }
435
479
  // ============================================================================
480
+ // Entry validation (#991)
481
+ // ============================================================================
482
+ function isPlainObject(value) {
483
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
484
+ }
485
+ /**
486
+ * Why a persisted entry cannot run, or undefined when it is valid. Such
487
+ * entries are kept (disabled) so `workflow list` shows them with the reason.
488
+ */
489
+ function scheduleDisabledReason(entry) {
490
+ if (!Object.prototype.hasOwnProperty.call(entry, 'schedule')) {
491
+ return 'Missing cron expression (no schedule field)';
492
+ }
493
+ if (typeof entry.schedule !== 'string' || !isValidCronExpression(entry.schedule)) {
494
+ return `Invalid cron expression: ${String(entry.schedule)}`;
495
+ }
496
+ if (typeof entry.workflowId !== 'string' || entry.workflowId.length === 0) {
497
+ return 'Missing workflowId';
498
+ }
499
+ return undefined;
500
+ }
501
+ // ============================================================================
436
502
  // Factory Function
437
503
  // ============================================================================
438
504
  /**
@@ -7,6 +7,7 @@
7
7
  import type { SecurityCoverage } from '../../domains/security-compliance/interfaces.js';
8
8
  import type { SecurityScanEvidence } from '../../domains/security-compliance/scan-evidence.js';
9
9
  import type { discoverSecurityFiles } from '../../domains/security-compliance/scan-discovery.js';
10
+ import type { DependencyScanReport } from '../../domains/security-compliance/dependency-advisory-engine.js';
10
11
  export type OutputFormat = 'text' | 'json' | 'sarif' | 'junit' | 'markdown';
11
12
  export interface CIOutputOptions {
12
13
  format: OutputFormat;
@@ -20,6 +21,8 @@ export interface SecurityVulnerability {
20
21
  message: string;
21
22
  ruleId?: string;
22
23
  cweId?: string;
24
+ /** CVE id of a dependency advisory, when the advisory has one (#1049). */
25
+ cveId?: string;
23
26
  }
24
27
  export interface SecurityScanResult {
25
28
  vulnerabilities: SecurityVulnerability[];
@@ -38,6 +41,8 @@ export interface SecurityScanResult {
38
41
  coverage?: SecurityCoverage;
39
42
  evidence?: SecurityScanEvidence;
40
43
  discovery?: Awaited<ReturnType<typeof discoverSecurityFiles>>['discovery'];
44
+ /** #1049: OSV dependency advisory scan; any status but 'complete' is not a clean result. */
45
+ dependencyScan?: DependencyScanReport;
41
46
  }
42
47
  export type SecurityExecutionStatus = 'complete' | 'partial' | 'none' | 'failed' | 'not-run' | 'unverified';
43
48
  export interface SecurityCheckResult {
@@ -71,8 +76,15 @@ export interface CoverageResult {
71
76
  function: number | null;
72
77
  statement: number | null;
73
78
  };
74
- meetsThreshold: boolean;
79
+ /** `null` = no verdict: nothing was measured (UNMEASURED or estimate only, #1012). */
80
+ meetsThreshold: boolean | null;
75
81
  threshold: number;
82
+ /** Provenance, the same vocabulary as MCP `coverage_analyze_sublinear` (#1012). */
83
+ measured?: boolean;
84
+ estimated?: boolean;
85
+ unmeasured?: boolean;
86
+ coverageMethod?: string;
87
+ warning?: string;
76
88
  files?: Array<{
77
89
  path: string;
78
90
  lineCoverage: number;
@@ -207,17 +207,28 @@ export function toJUnit(summary) {
207
207
  // ============================================================================
208
208
  export function coverageToMarkdown(result) {
209
209
  let md = `# Coverage Report\n\n`;
210
+ // #1012: an estimate is labelled and carries no verdict.
211
+ if (result.estimated) {
212
+ md += `> **STATIC ESTIMATE — not measured.** ${result.warning ?? ''}\n\n`;
213
+ }
214
+ const evaluated = result.meetsThreshold !== null && !result.estimated;
215
+ // #1027 N7: one decimal, never `~33.33333333333333%`.
216
+ const fmt = (v) => String(Math.round(v * 10) / 10);
210
217
  md += `| Metric | Value | Status |\n`;
211
218
  md += `|--------|-------|--------|\n`;
212
219
  // #995: an uncollected metric is "n/a", with no pass/fail mark — it is not 0%.
213
220
  const row = (label, v) => v === null
214
221
  ? `| ${label} | n/a (not collected) | \u2014 |\n`
215
- : `| ${label} | ${v}% | ${v >= result.threshold ? '\u2705' : '\u274C'} |\n`;
222
+ : evaluated
223
+ ? `| ${label} | ${fmt(v)}% | ${v >= result.threshold ? '\u2705' : '\u274C'} |\n`
224
+ : `| ${label} | ~${fmt(v)}% (estimate) | \u2014 |\n`;
216
225
  md += row('Lines', result.summary.line);
217
226
  md += row('Branches', result.summary.branch);
218
227
  md += row('Functions', result.summary.function);
219
228
  md += row('Statements', result.summary.statement);
220
- md += `\n**Threshold:** ${result.threshold}% \u2014 ${result.meetsThreshold ? '\u2705 Met' : '\u274C Not met'}\n`;
229
+ md += evaluated
230
+ ? `\n**Threshold:** ${result.threshold}% \u2014 ${result.meetsThreshold ? '\u2705 Met' : '\u274C Not met'}\n`
231
+ : `\n**Threshold:** ${result.threshold}% \u2014 not evaluated (UNMEASURED)\n`;
221
232
  if (result.gaps && result.gaps.length > 0) {
222
233
  md += `\n## Coverage Gaps\n\n`;
223
234
  md += `| File | Uncovered Lines | Risk | Severity |\n`;
@@ -286,6 +297,14 @@ export function securityToMarkdown(result) {
286
297
  if (result.evidence || result.discovery) {
287
298
  md += `## Execution receipts\n\n\`\`\`json\n${toJSON({ evidence: result.evidence, discovery: result.discovery })}\n\`\`\`\n\n`;
288
299
  }
300
+ if (result.dependencyScan) {
301
+ md += `## Dependency advisories (OSV)\n\n**Status:** ${result.dependencyScan.status}\n\n${result.dependencyScan.message}\n\n`;
302
+ for (const pkg of result.dependencyScan.uncheckedPackages) {
303
+ md += `- not checked: ${pkg.name}@${pkg.version} (${pkg.reason})\n`;
304
+ }
305
+ if (result.dependencyScan.uncheckedPackages.length > 0)
306
+ md += '\n';
307
+ }
289
308
  if (result.vulnerabilities.length > 0) {
290
309
  md += `## Vulnerabilities\n\n`;
291
310
  md += `| Severity | Type | File | Line | Message |\n`;
@@ -50,6 +50,9 @@ export interface CoverageData {
50
50
  /**
51
51
  * Try to read real coverage data from a coverage-final.json file.
52
52
  * Returns null if no instrumented coverage is available.
53
+ *
54
+ * #1012: per-file figures come from the shared istanbul parser, so the CLI
55
+ * and MCP compute "line" coverage the same way (source lines, not statements).
53
56
  */
54
57
  export declare function readInstrumentedCoverage(projectRoot: string): Map<string, FileCoverage> | null;
55
58
  /** Aggregate per-file coverage into whole-number percentages. */
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import * as fs from 'fs';
13
13
  import * as path from 'path';
14
+ import { parseCoverageJson } from '../../coordination/handlers/handler-utils.js';
14
15
  // ============================================================================
15
16
  // V8/Istanbul Coverage Reader
16
17
  // ============================================================================
@@ -23,6 +24,9 @@ const COVERAGE_JSON_PATHS = [
23
24
  /**
24
25
  * Try to read real coverage data from a coverage-final.json file.
25
26
  * Returns null if no instrumented coverage is available.
27
+ *
28
+ * #1012: per-file figures come from the shared istanbul parser, so the CLI
29
+ * and MCP compute "line" coverage the same way (source lines, not statements).
26
30
  */
27
31
  export function readInstrumentedCoverage(projectRoot) {
28
32
  for (const relPath of COVERAGE_JSON_PATHS) {
@@ -30,50 +34,16 @@ export function readInstrumentedCoverage(projectRoot) {
30
34
  if (!fs.existsSync(fullPath))
31
35
  continue;
32
36
  try {
33
- const raw = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
37
+ const content = fs.readFileSync(fullPath, 'utf-8');
38
+ const raw = JSON.parse(content);
34
39
  // coverage-summary.json has a different shape
35
40
  if (raw.total && raw.total.lines) {
36
41
  return readCoverageSummary(raw, projectRoot);
37
42
  }
38
43
  // coverage-final.json: Record<filepath, IstanbulFileCoverage>
39
44
  const coverageMap = new Map();
40
- for (const [filePath, entry] of Object.entries(raw)) {
41
- const cov = entry;
42
- const stmtKeys = Object.keys(cov.s);
43
- const stmtCovered = stmtKeys.filter(k => cov.s[k] > 0).length;
44
- const branchKeys = Object.keys(cov.b);
45
- let branchTotal = 0;
46
- let branchCovered = 0;
47
- for (const k of branchKeys) {
48
- for (const count of cov.b[k]) {
49
- branchTotal++;
50
- if (count > 0)
51
- branchCovered++;
52
- }
53
- }
54
- const fnKeys = Object.keys(cov.f);
55
- const fnCovered = fnKeys.filter(k => cov.f[k] > 0).length;
56
- // Compute uncovered lines from statement map
57
- const coveredLineSet = new Set();
58
- const allLineSet = new Set();
59
- for (const stmtKey of stmtKeys) {
60
- const stmt = cov.statementMap[stmtKey];
61
- for (let line = stmt.start.line; line <= stmt.end.line; line++) {
62
- allLineSet.add(line);
63
- if (cov.s[stmtKey] > 0)
64
- coveredLineSet.add(line);
65
- }
66
- }
67
- const uncoveredLines = [...allLineSet].filter(l => !coveredLineSet.has(l)).sort((a, b) => a - b);
68
- coverageMap.set(filePath, {
69
- path: filePath,
70
- lines: { covered: coveredLineSet.size, total: allLineSet.size },
71
- branches: { covered: branchCovered, total: branchTotal },
72
- functions: { covered: fnCovered, total: fnKeys.length },
73
- statements: { covered: stmtCovered, total: stmtKeys.length },
74
- uncoveredLines,
75
- uncoveredBranches: uncoveredLines.slice(0, Math.floor(uncoveredLines.length / 2)),
76
- });
45
+ for (const file of parseCoverageJson(content).files) {
46
+ coverageMap.set(file.path, file);
77
47
  }
78
48
  return coverageMap.size > 0 ? coverageMap : null;
79
49
  }
@@ -167,11 +137,16 @@ export function summarizeCoverage(files) {
167
137
  const safeDiv = (a, b) => b > 0 ? Math.round((a / b) * 100) : 0;
168
138
  const totalLines = sum(f => f.lines.total);
169
139
  const coveredLines = sum(f => f.lines.covered);
140
+ // #1012: statements are statements. A report without statement detail
141
+ // (lcov) carries its line figures in `statements`, so this falls back alike.
142
+ const totalStatements = sum(f => f.statements.total);
170
143
  return {
171
144
  line: safeDiv(coveredLines, totalLines),
172
145
  branch: safeDiv(sum(f => f.branches.covered), sum(f => f.branches.total)),
173
146
  function: safeDiv(sum(f => f.functions.covered), sum(f => f.functions.total)),
174
- statement: safeDiv(coveredLines, totalLines),
147
+ statement: totalStatements > 0
148
+ ? safeDiv(sum(f => f.statements.covered), totalStatements)
149
+ : safeDiv(coveredLines, totalLines),
175
150
  files: files.length,
176
151
  };
177
152
  }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
3
+ *
4
+ * One resolution and one verdict for every CLI surface that reports coverage
5
+ * (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
6
+ * functions as the MCP `coverage_analyze_sublinear` handler
7
+ * (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
8
+ *
9
+ * - measured — an instrumented report covers the target: judged on the
10
+ * metrics the report collected (an uncollected metric is null,
11
+ * never 0%, and is left out of the threshold);
12
+ * - unmeasured — the report has no entry for the target, the runner ran 0
13
+ * tests, or only test files were reported: no figure, exit 3;
14
+ * - estimate — no report exists, so the CLI shows a labelled STATIC
15
+ * ESTIMATE. It carries no threshold verdict, is never
16
+ * persisted as evidence, and also exits 3: nothing was measured;
17
+ * - error — the target is missing or the given report is unreadable.
18
+ */
19
+ import { type CoverageData } from './coverage-data.js';
20
+ import { type NoDataReason } from '../../coordination/handlers/coverage-target.js';
21
+ /** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
22
+ export declare const EXIT_UNMEASURED = 3;
23
+ /** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
24
+ export declare const MEASURED_METHOD = "instrumented-report";
25
+ export declare const ESTIMATE_METHOD = "static-estimation";
26
+ export type CliCoverage = {
27
+ kind: 'data';
28
+ data: CoverageData;
29
+ projectRoot?: string;
30
+ } | {
31
+ kind: 'no-data';
32
+ reason: NoDataReason;
33
+ message: string;
34
+ } | {
35
+ kind: 'no-sources';
36
+ };
37
+ /**
38
+ * Resolve the coverage data for a CLI target (#995).
39
+ *
40
+ * Uses the SAME resolution and verdict as the MCP handler
41
+ * (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
42
+ * report says for a target:
43
+ * - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
44
+ * directly;
45
+ * - a directory or source file is scoped against the instrumented report of
46
+ * its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
47
+ * - with no report at the project root, the CLI falls back to its labelled
48
+ * heuristic estimate (the CLI never runs the test suite).
49
+ */
50
+ export declare function resolveCliCoverageData(targetPath: string, log?: (message: string) => void): Promise<CliCoverage>;
51
+ /** Which optional metrics an instrumented report actually carries. */
52
+ export declare function metricsCollected(data: CoverageData): {
53
+ branch: boolean;
54
+ function: boolean;
55
+ statement: boolean;
56
+ };
57
+ /** The slice of the coverage-analysis domain API the verdict needs. */
58
+ export interface CoverageAnalyzeAPI {
59
+ analyze(request: {
60
+ coverageData: CoverageData;
61
+ threshold?: number;
62
+ includeFileDetails?: boolean;
63
+ measured?: boolean;
64
+ projectRoot?: string;
65
+ }): Promise<{
66
+ success: boolean;
67
+ value?: unknown;
68
+ error?: Error;
69
+ }>;
70
+ }
71
+ /** Summary figures; `null` = not collected / not measured — never 0%. */
72
+ export interface NullableSummary {
73
+ line: number | null;
74
+ branch: number | null;
75
+ function: number | null;
76
+ statement: number | null;
77
+ }
78
+ export type CliCoverageOutcome = {
79
+ kind: 'no-sources';
80
+ } | {
81
+ kind: 'error';
82
+ reason: NoDataReason;
83
+ message: string;
84
+ } | {
85
+ kind: 'unmeasured';
86
+ reason: NoDataReason;
87
+ message: string;
88
+ } | {
89
+ kind: 'analysis-failed';
90
+ message: string;
91
+ } | {
92
+ kind: 'estimate';
93
+ data: CoverageData;
94
+ /** Estimated figures — for display only. */
95
+ summary: NullableSummary & {
96
+ files: number;
97
+ };
98
+ message: string;
99
+ } | {
100
+ kind: 'measured';
101
+ data: CoverageData;
102
+ summary: NullableSummary & {
103
+ files: number;
104
+ };
105
+ collected: {
106
+ branch: boolean;
107
+ function: boolean;
108
+ statement: boolean;
109
+ };
110
+ verdict: {
111
+ overall: number;
112
+ meetsThreshold: boolean;
113
+ };
114
+ recommendations: string[];
115
+ };
116
+ /** Caller-facing explanation of a static estimate. */
117
+ export declare function estimateMessage(): string;
118
+ /**
119
+ * Resolve, analyze and judge coverage for a CLI target. Shared by
120
+ * `aqe coverage` and the `aqe ci` coverage phase.
121
+ */
122
+ export declare function evaluateCliCoverage(api: CoverageAnalyzeAPI, targetPath: string, threshold: number, log?: (message: string) => void): Promise<CliCoverageOutcome>;
123
+ /**
124
+ * Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
125
+ * 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
126
+ */
127
+ export declare function coverageExitCode(outcome: CliCoverageOutcome, threshold: number): number;
128
+ /** The `-F json` document for an outcome (same shape in every case). */
129
+ export declare function coverageJson(outcome: CliCoverageOutcome, threshold: number, target: string): Record<string, unknown>;
130
+ //# sourceMappingURL=coverage-verdict.d.ts.map