agentic-qe 3.15.6 → 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 (421) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +141 -0
  3. package/README.md +2 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/cli/bundle.js +8 -6
  6. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  7. package/dist/cli/chunks/{agent-booster-wasm-SY7UCLBL.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  8. package/dist/cli/chunks/{agent-handler-KAMYBU3S.js → agent-handler-PI4I7PME.js} +2 -2
  9. package/dist/cli/chunks/{agent-memory-branch-2CAW3KUM.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  10. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  11. package/dist/cli/chunks/{arena-QCCVIOAH.js → arena-FXESDCFR.js} +4 -4
  12. package/dist/cli/chunks/{arena-4OFLJ3R2.js → arena-OWUGXKNT.js} +2 -2
  13. package/dist/cli/chunks/{audit-RBDQJQJB.js → audit-EPAWLYIZ.js} +3 -3
  14. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  15. package/dist/cli/chunks/{better-sqlite3-5JRACCDQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  16. package/dist/cli/chunks/{brain-handler-W4QIIRT4.js → brain-handler-3W2E6TC6.js} +3 -3
  17. package/dist/cli/chunks/{branch-enumerator-IBNGI572.js → branch-enumerator-HU7VACJ4.js} +2 -2
  18. package/dist/cli/chunks/{browser-GMSCVAOI.js → browser-72XOR6E2.js} +2 -2
  19. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  20. package/dist/cli/chunks/{chunk-CR66HNAE.js → chunk-2423JAA5.js} +1 -1
  21. package/dist/cli/chunks/{chunk-LAY7NCQK.js → chunk-24CENUT4.js} +3 -3
  22. package/dist/cli/chunks/{chunk-PEMSXSP2.js → chunk-2AYBYXOA.js} +2 -2
  23. package/dist/cli/chunks/{chunk-TUDENMAE.js → chunk-2E3XWKEU.js} +2 -2
  24. package/dist/cli/chunks/{chunk-KIDOBLUO.js → chunk-2RJYA6WK.js} +2 -2
  25. package/dist/cli/chunks/{chunk-2IWPJUVV.js → chunk-2YVJ5OUL.js} +5 -5
  26. package/dist/cli/chunks/{chunk-34MDMFET.js → chunk-34JLY3U6.js} +2 -2
  27. package/dist/cli/chunks/{chunk-SV5BUYHH.js → chunk-3JD2USUH.js} +2 -2
  28. package/dist/cli/chunks/{chunk-EF5UHDCG.js → chunk-3RM46XFP.js} +1 -1
  29. package/dist/cli/chunks/{chunk-7XTANLTN.js → chunk-44DPYNPE.js} +1 -1
  30. package/dist/cli/chunks/{chunk-ONPPBLRB.js → chunk-4DIZ5BT6.js} +2 -2
  31. package/dist/cli/chunks/{chunk-22OZIJAD.js → chunk-4G2VNW4C.js} +2 -2
  32. package/dist/cli/chunks/{chunk-LJCEDTUM.js → chunk-56ZKQYZY.js} +3 -3
  33. package/dist/cli/chunks/{chunk-HOEWMEF2.js → chunk-5KCBX225.js} +2 -2
  34. package/dist/cli/chunks/{chunk-V3OLS2NG.js → chunk-5KS7HA37.js} +2 -2
  35. package/dist/cli/chunks/{chunk-MQCTLTGE.js → chunk-5PBRBS7D.js} +2 -2
  36. package/dist/cli/chunks/{chunk-TVLOED6O.js → chunk-5Q22XPTH.js} +2 -2
  37. package/dist/cli/chunks/{chunk-B7RHBKHL.js → chunk-634D2ENF.js} +2 -2
  38. package/dist/cli/chunks/{chunk-7TVIX4WL.js → chunk-6AYRAOCA.js} +2 -2
  39. package/dist/cli/chunks/{chunk-4KOVHQXK.js → chunk-6BO3WCK7.js} +2 -2
  40. package/dist/cli/chunks/{chunk-5HAPS6VD.js → chunk-6FEQ73BF.js} +2 -2
  41. package/dist/cli/chunks/{chunk-FQ5N666N.js → chunk-6JT73S5B.js} +1 -1
  42. package/dist/cli/chunks/{chunk-6MXAJBEA.js → chunk-6OS7HREG.js} +1 -1
  43. package/dist/cli/chunks/{chunk-6R3FBFCJ.js → chunk-6PKCQXEW.js} +2 -2
  44. package/dist/cli/chunks/{chunk-DQNUPEY5.js → chunk-7EX4DEQR.js} +2 -2
  45. package/dist/cli/chunks/{chunk-KCB6P463.js → chunk-7UCVYYWL.js} +2 -2
  46. package/dist/cli/chunks/{chunk-RLB7K7QP.js → chunk-AAA4SHEG.js} +1 -1
  47. package/dist/cli/chunks/{chunk-ITIJ23K2.js → chunk-AXO7OOOA.js} +2 -2
  48. package/dist/cli/chunks/{chunk-6RDVY26I.js → chunk-B7M323VL.js} +2 -2
  49. package/dist/cli/chunks/{chunk-EJ4KZFZN.js → chunk-BB7OLQKO.js} +1 -1
  50. package/dist/cli/chunks/{chunk-5NC7QEJ6.js → chunk-BTIBXGVQ.js} +4 -4
  51. package/dist/cli/chunks/{chunk-RD5BYLN7.js → chunk-BTYKGVJ5.js} +1 -1
  52. package/dist/cli/chunks/{chunk-YXU35GGD.js → chunk-C2CUPJGR.js} +1 -1
  53. package/dist/cli/chunks/{chunk-XFPQIWEH.js → chunk-C2MDBBFF.js} +3 -3
  54. package/dist/cli/chunks/{chunk-QLKUCMZC.js → chunk-CG5DZCOZ.js} +1 -1
  55. package/dist/cli/chunks/{chunk-YLNYPQDR.js → chunk-CIFWOMNX.js} +1 -1
  56. package/dist/cli/chunks/{chunk-ORBODZSO.js → chunk-CWPRU7ZI.js} +2 -2
  57. package/dist/cli/chunks/{chunk-WKDWRRDT.js → chunk-CXTJ47QS.js} +2 -2
  58. package/dist/cli/chunks/{chunk-SOSJWM3E.js → chunk-DCJW2DPL.js} +4 -4
  59. package/dist/cli/chunks/{chunk-GVRFSXY6.js → chunk-DGK6GQMO.js} +2 -2
  60. package/dist/cli/chunks/{chunk-X33F7NXH.js → chunk-DVPGBDBP.js} +3 -3
  61. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  62. package/dist/cli/chunks/{chunk-HZFK2Z2Z.js → chunk-ECSLJJOQ.js} +1 -1
  63. package/dist/cli/chunks/{chunk-JCE76MPP.js → chunk-ED32XJ5R.js} +2 -2
  64. package/dist/cli/chunks/{chunk-ULCHPPW2.js → chunk-EDU72RTW.js} +1 -1
  65. package/dist/cli/chunks/{chunk-ZOUEQ6DL.js → chunk-EL75G2A3.js} +1 -1
  66. package/dist/cli/chunks/{chunk-GNYOHZVV.js → chunk-EV2BYY6T.js} +1 -1
  67. package/dist/cli/chunks/{chunk-RUTO67PT.js → chunk-F62EKVVC.js} +2 -2
  68. package/dist/cli/chunks/{chunk-IVJIHZSM.js → chunk-FTTFJ7SJ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-NYS2GUNO.js → chunk-FVBFASOD.js} +2 -2
  70. package/dist/cli/chunks/{chunk-5DH5QI7G.js → chunk-G762PEFO.js} +3 -3
  71. package/dist/cli/chunks/{chunk-JPJEAK4G.js → chunk-G7YTZTGU.js} +1 -1
  72. package/dist/cli/chunks/{chunk-5VUIXDY2.js → chunk-GY2SAIXP.js} +2 -2
  73. package/dist/cli/chunks/{chunk-7XUB7U6Z.js → chunk-H4WHDFB5.js} +2 -2
  74. package/dist/cli/chunks/{chunk-72MQCZSM.js → chunk-HLZATDD2.js} +2 -2
  75. package/dist/cli/chunks/{chunk-AX26QJ6T.js → chunk-HPG7354V.js} +2 -2
  76. package/dist/cli/chunks/{chunk-7SAMMQVS.js → chunk-HSDOOFV7.js} +1 -1
  77. package/dist/cli/chunks/{chunk-K55EAWZ5.js → chunk-HTWIGQL4.js} +2 -2
  78. package/dist/cli/chunks/{chunk-BXATKI5S.js → chunk-HXBAQKMH.js} +2 -2
  79. package/dist/cli/chunks/{chunk-46HBVDMU.js → chunk-HZFT3P5B.js} +1 -1
  80. package/dist/cli/chunks/{chunk-RFDFET3O.js → chunk-I7H4IP7T.js} +2 -2
  81. package/dist/cli/chunks/{chunk-AJT3XDRD.js → chunk-IARSGAG7.js} +2 -2
  82. package/dist/cli/chunks/{chunk-TL5GV3PR.js → chunk-IC2WSSD5.js} +3 -3
  83. package/dist/cli/chunks/{chunk-TLUIO37P.js → chunk-ICPALF4Q.js} +2 -2
  84. package/dist/cli/chunks/{chunk-ZSBD4FUX.js → chunk-IWQQIXHO.js} +2 -2
  85. package/dist/cli/chunks/{chunk-AUOSHM63.js → chunk-IYQ7XNE5.js} +2 -2
  86. package/dist/cli/chunks/{chunk-RHIQ6QO5.js → chunk-J26GADQE.js} +281 -281
  87. package/dist/cli/chunks/{chunk-AUN4FG7V.js → chunk-J43DV3ME.js} +1 -1
  88. package/dist/cli/chunks/{chunk-ALCIUWFC.js → chunk-JFPXCQNP.js} +1 -1
  89. package/dist/cli/chunks/{chunk-R363XXGH.js → chunk-JK6B3ULP.js} +2 -2
  90. package/dist/cli/chunks/{chunk-7VTKR44N.js → chunk-JPHDMHFG.js} +2 -2
  91. package/dist/cli/chunks/{chunk-FOJRPEIP.js → chunk-JVYPXW6Y.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZUTFHGEO.js → chunk-JY4AIEZ7.js} +1 -1
  93. package/dist/cli/chunks/{chunk-47Q7JL3V.js → chunk-JY4WLN3K.js} +2 -2
  94. package/dist/cli/chunks/{chunk-IEPWO4XP.js → chunk-JYXOFN3E.js} +2 -2
  95. package/dist/cli/chunks/{chunk-2CIDFR2H.js → chunk-K7W55B7Q.js} +2 -2
  96. package/dist/cli/chunks/{chunk-D5N2O5EH.js → chunk-KPOPBUUJ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-OQ4S6B7P.js → chunk-LDXQRNTT.js} +1 -1
  98. package/dist/cli/chunks/{chunk-6T6AHVLF.js → chunk-LDZWIV2O.js} +1 -1
  99. package/dist/cli/chunks/{chunk-A7ANPS4E.js → chunk-LGBN7TKC.js} +2 -2
  100. package/dist/cli/chunks/{chunk-X2DR27AY.js → chunk-LMEU64TR.js} +2 -2
  101. package/dist/cli/chunks/{chunk-GI5HWS4H.js → chunk-LP4AS2E4.js} +1 -1
  102. package/dist/cli/chunks/{chunk-VVF337SV.js → chunk-LQOVA4YX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-KYVIOC3C.js → chunk-LVEX4GID.js} +2 -2
  104. package/dist/cli/chunks/{chunk-BO7UFNYV.js → chunk-M63QB466.js} +2 -2
  105. package/dist/cli/chunks/{chunk-UHHMAKPE.js → chunk-MDC4G323.js} +1 -1
  106. package/dist/cli/chunks/{chunk-4CLDYT36.js → chunk-MHZPC4HJ.js} +2 -2
  107. package/dist/cli/chunks/{chunk-24ZSGYC6.js → chunk-MJJC6HUK.js} +1 -1
  108. package/dist/cli/chunks/{chunk-ZL5LJT7D.js → chunk-MKFQNCXI.js} +2 -2
  109. package/dist/cli/chunks/{chunk-XZ46CI35.js → chunk-MMXG3LL6.js} +2 -2
  110. package/dist/cli/chunks/{chunk-OPDZBRIL.js → chunk-MNCF643K.js} +2 -2
  111. package/dist/cli/chunks/{chunk-CEXNW5TR.js → chunk-MNZFEIE5.js} +1 -1
  112. package/dist/cli/chunks/{chunk-L4D3TPFP.js → chunk-MQ6OF6DU.js} +1 -1
  113. package/dist/cli/chunks/{chunk-UB6DQGWM.js → chunk-MRHM4COP.js} +2 -2
  114. package/dist/cli/chunks/{chunk-CLAMMGY3.js → chunk-N4PMPSJJ.js} +2 -2
  115. package/dist/cli/chunks/{chunk-XQ53PZEF.js → chunk-NZQPP533.js} +3 -3
  116. package/dist/cli/chunks/{chunk-FU7LNUD7.js → chunk-OA4GR3EZ.js} +2 -2
  117. package/dist/cli/chunks/{chunk-ORFL3YXB.js → chunk-OJEZNLB6.js} +2 -2
  118. package/dist/cli/chunks/{chunk-5LST62QR.js → chunk-ONVALAZN.js} +2 -2
  119. package/dist/cli/chunks/{chunk-DA7DGDTI.js → chunk-PEKDSJBC.js} +2 -2
  120. package/dist/cli/chunks/{chunk-3DJNKNBR.js → chunk-PG64YV6C.js} +57 -57
  121. package/dist/cli/chunks/{chunk-2ZTWPMTK.js → chunk-PQV7E7XH.js} +2 -2
  122. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  123. package/dist/cli/chunks/{chunk-CZBIREL5.js → chunk-PUECC4WI.js} +2 -2
  124. package/dist/cli/chunks/{chunk-JYKQVYX2.js → chunk-PXZKPUW6.js} +2 -2
  125. package/dist/cli/chunks/{chunk-I7WAW7TM.js → chunk-PYHYOKYT.js} +2 -2
  126. package/dist/cli/chunks/{chunk-LCCTJ2PC.js → chunk-PZG3542B.js} +2 -2
  127. package/dist/cli/chunks/{chunk-F7A2UBZO.js → chunk-Q2T5FXEA.js} +2 -2
  128. package/dist/cli/chunks/{chunk-PS6WFCA4.js → chunk-QJE6ZW2X.js} +2 -2
  129. package/dist/cli/chunks/{chunk-LZWJ5BMP.js → chunk-QNQSM2OG.js} +2 -2
  130. package/dist/cli/chunks/{chunk-QLYO3H7E.js → chunk-QQT6QENQ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-VCONCVSY.js → chunk-QVG4ZDXX.js} +2 -2
  132. package/dist/cli/chunks/{chunk-NMY4KTWA.js → chunk-QWLTHFZW.js} +2 -2
  133. package/dist/cli/chunks/{chunk-NBUXM5X6.js → chunk-RCYLCA7E.js} +2 -2
  134. package/dist/cli/chunks/{chunk-P7DXVL2S.js → chunk-REEIFA6A.js} +2 -2
  135. package/dist/cli/chunks/{chunk-5MT7DMD7.js → chunk-RNYX4CPI.js} +2 -2
  136. package/dist/cli/chunks/{chunk-HAN4MS5T.js → chunk-RORZ5O5Z.js} +2 -2
  137. package/dist/cli/chunks/{chunk-ZCP4P6O2.js → chunk-RRPYWBFX.js} +2 -2
  138. package/dist/cli/chunks/{chunk-3NJ7O3OH.js → chunk-RXAFLK34.js} +2 -2
  139. package/dist/cli/chunks/{chunk-VAYZ5QIE.js → chunk-SQHLC6I5.js} +1 -1
  140. package/dist/cli/chunks/{chunk-Q2RBOC7V.js → chunk-SSP2B2WR.js} +2 -2
  141. package/dist/cli/chunks/{chunk-CCL436IU.js → chunk-SX2YSHE7.js} +14 -6
  142. package/dist/cli/chunks/{chunk-ZTB32K5N.js → chunk-T3ZDVU6F.js} +3 -3
  143. package/dist/cli/chunks/{chunk-624QRKQX.js → chunk-T6W5APYP.js} +1 -1
  144. package/dist/cli/chunks/{chunk-BAYGQRNP.js → chunk-TU4LIIOP.js} +2 -2
  145. package/dist/cli/chunks/{chunk-L2TDHJR3.js → chunk-UBYCR3O4.js} +2 -2
  146. package/dist/cli/chunks/{chunk-JAPBSSFY.js → chunk-UCLN6AME.js} +1 -1
  147. package/dist/cli/chunks/{chunk-66NW3ZB4.js → chunk-UIYKR2SA.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BIXRTOH3.js → chunk-UUHIEM2M.js} +3 -3
  149. package/dist/cli/chunks/{chunk-ELI4GDQO.js → chunk-UY3REQOK.js} +2 -2
  150. package/dist/cli/chunks/{chunk-BUTGIVKW.js → chunk-V2SAEMZY.js} +1 -1
  151. package/dist/cli/chunks/{chunk-6WOZUSSN.js → chunk-V5NGBQAQ.js} +2 -2
  152. package/dist/cli/chunks/{chunk-7TJZDRDU.js → chunk-VCA6YYII.js} +1 -1
  153. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  154. package/dist/cli/chunks/{chunk-5GIJU2ZY.js → chunk-VKPKYMCT.js} +2 -2
  155. package/dist/cli/chunks/{chunk-XPB5BVU6.js → chunk-VNW5Q2CX.js} +2 -2
  156. package/dist/cli/chunks/{chunk-7QVPMH25.js → chunk-VUFRTGML.js} +2 -2
  157. package/dist/cli/chunks/{chunk-MP3FSUNB.js → chunk-W4X2VTIY.js} +2 -2
  158. package/dist/cli/chunks/{chunk-GWM4M5NF.js → chunk-WTLIEBDH.js} +1 -1
  159. package/dist/cli/chunks/{chunk-QS5KZYUZ.js → chunk-WUV5RZUI.js} +2 -2
  160. package/dist/cli/chunks/{chunk-HEGGV2PT.js → chunk-WXI2STKQ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-GFB6BZWU.js → chunk-XEWXYGJI.js} +2 -2
  162. package/dist/cli/chunks/{chunk-NHRF3V4B.js → chunk-XNSQZ3O7.js} +2 -2
  163. package/dist/cli/chunks/{chunk-4POOJYXA.js → chunk-XTJMY3KS.js} +1 -1
  164. package/dist/cli/chunks/{chunk-LMAEMVPA.js → chunk-XXAVQACL.js} +1 -1
  165. package/dist/cli/chunks/{chunk-RV6HSMKJ.js → chunk-Y4SAWE45.js} +1 -1
  166. package/dist/cli/chunks/{chunk-DLSFT6PO.js → chunk-Y6A46M3B.js} +2 -2
  167. package/dist/cli/chunks/{chunk-5UPIL62W.js → chunk-YDZJWDR6.js} +3 -3
  168. package/dist/cli/chunks/{chunk-F3KS3TAB.js → chunk-YFOBQSOW.js} +2 -2
  169. package/dist/cli/chunks/{chunk-XBEI2JBA.js → chunk-YK3NOC2R.js} +2 -2
  170. package/dist/cli/chunks/{chunk-MQTA6KIO.js → chunk-YUC7RJGR.js} +1 -1
  171. package/dist/cli/chunks/{chunk-A74J23QB.js → chunk-Z3VJLWRR.js} +2 -2
  172. package/dist/cli/chunks/{chunk-YNG7E26C.js → chunk-ZLVQSEZK.js} +2 -2
  173. package/dist/cli/chunks/{chunk-6HWARQWV.js → chunk-ZRLNACPY.js} +2 -2
  174. package/dist/cli/chunks/{chunk-XBFQJZWX.js → chunk-ZTMZFF25.js} +2 -2
  175. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  176. package/dist/cli/chunks/{ci-GEJCXMBK.js → ci-5HEXJZ2C.js} +2 -2
  177. package/dist/cli/chunks/{ci-config-2ZVV4OXL.js → ci-config-WU4NPDAM.js} +2 -2
  178. package/dist/cli/chunks/{ci-output-E45OGVPR.js → ci-output-BJQVXX5E.js} +2 -2
  179. package/dist/cli/chunks/{circuit-breaker-X73ITYZC.js → circuit-breaker-3BMGTQCB.js} +2 -2
  180. package/dist/cli/chunks/{claude-flow-setup-W4PPH46C.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  181. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  182. package/dist/cli/chunks/{cline-installer-NUEPMWDE.js → cline-installer-V4MRGWVA.js} +2 -2
  183. package/dist/cli/chunks/{code-6WQHBS7G.js → code-A3TGQPEO.js} +3 -3
  184. package/dist/cli/chunks/{code-index-extractor-BXQIFIFT.js → code-index-extractor-YJQSYWD3.js} +2 -2
  185. package/dist/cli/chunks/{codex-installer-Z337R2KH.js → codex-installer-7N7UQPAH.js} +2 -2
  186. package/dist/cli/chunks/{completions-F5DMYFHV.js → completions-PPGVYLZS.js} +2 -2
  187. package/dist/cli/chunks/{complexity-analyzer-W2SYPZDI.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  188. package/dist/cli/chunks/{continuedev-installer-ZCHUIFTN.js → continuedev-installer-Z5I57RAH.js} +2 -2
  189. package/dist/cli/chunks/{copilot-installer-M5JNODXF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  190. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  191. package/dist/cli/chunks/{cost-tracker-LSYTHBHV.js → cost-tracker-GO33ZQAP.js} +2 -2
  192. package/dist/cli/chunks/{coverage-PGMRS5SS.js → coverage-GSHKLY74.js} +3 -3
  193. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  194. package/dist/cli/chunks/{cursor-installer-XPUA73UW.js → cursor-installer-JJ7IVJZB.js} +2 -2
  195. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  196. package/dist/cli/chunks/{daemon-ITKDIYMW.js → daemon-IRL7QRNE.js} +3 -3
  197. package/dist/cli/chunks/{dag-attention-scheduler-T55AXLD6.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  198. package/dist/cli/chunks/{detect-DR7J6K4O.js → detect-RHU62KRI.js} +2 -2
  199. package/dist/cli/chunks/{dist-node-LAJJBOUT.js → dist-node-3VKV4Z6C.js} +2 -2
  200. package/dist/cli/chunks/{domain-handler-OMSHCRMK.js → domain-handler-SFIML4FK.js} +2 -2
  201. package/dist/cli/chunks/{domain-plugins-EQXSKC5K.js → domain-plugins-CJ4FA3OC.js} +2 -2
  202. package/dist/cli/chunks/{domain-transfer-FKRAGVSW.js → domain-transfer-BCRKPCAA.js} +2 -2
  203. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  204. package/dist/cli/chunks/{embed-and-insert-pattern-JZFPCNL3.js → embed-and-insert-pattern-VL3HFLPV.js} +2 -2
  205. package/dist/cli/chunks/{eval-JSNNASBW.js → eval-GGKRI4P5.js} +2 -2
  206. package/dist/cli/chunks/{experience-capture-middleware-UPD3IZBK.js → experience-capture-middleware-F72TIRQY.js} +3 -3
  207. package/dist/cli/chunks/{fast-paths-YNMIBS2E.js → fast-paths-7KOOF3MA.js} +2 -2
  208. package/dist/cli/chunks/{feature-flags-SRLXDKBI.js → feature-flags-FNHBTHBH.js} +2 -2
  209. package/dist/cli/chunks/{feature-flags-VIR7O4L7.js → feature-flags-IOZEWWFU.js} +2 -2
  210. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  211. package/dist/cli/chunks/{fleet-K2ED46EL.js → fleet-QX5KXTRC.js} +3 -3
  212. package/dist/cli/chunks/{gnn-wrapper-QCU4ZRYW.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  213. package/dist/cli/chunks/{heartbeat-handler-YYQI4WZM.js → heartbeat-handler-W67NXTNE.js} +4 -4
  214. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  215. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  216. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  217. package/dist/cli/chunks/{hnsw-legacy-bridge-C5TJSWTZ.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  218. package/dist/cli/chunks/{hnswlib-node-SE3MJJYS.js → hnswlib-node-4UDISJ3G.js} +2 -2
  219. package/dist/cli/chunks/{hooks-C572SRDH.js → hooks-NOQJWQ4P.js} +10 -10
  220. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  221. package/dist/cli/chunks/{hypergraph-engine-35A6G3M5.js → hypergraph-engine-2OD3APVP.js} +2 -2
  222. package/dist/cli/chunks/{hypergraph-handler-U2756CWI.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  223. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  224. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  225. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  226. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  227. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  228. package/dist/cli/chunks/{kilocode-installer-32PX5YH7.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  229. package/dist/cli/chunks/{kiro-installer-C4ROMMUS.js → kiro-installer-LFZOC7VD.js} +2 -2
  230. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  231. package/dist/cli/chunks/{learning-GEPVZGJQ.js → learning-XRPGLUWR.js} +20 -20
  232. package/dist/cli/chunks/{llm-router-XRKTTJTX.js → llm-router-OMK5HYPH.js} +4 -4
  233. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  234. package/dist/cli/chunks/{load-XVH6HW7E.js → load-XADC7KCU.js} +2 -2
  235. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  236. package/dist/cli/chunks/{mcp-IULSTM4Z.js → mcp-PIBKSSVU.js} +2 -2
  237. package/dist/cli/chunks/{memory-6K7IAU4T.js → memory-AP7EZERS.js} +5 -5
  238. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  239. package/dist/cli/chunks/{memory-handlers-CG6DRLAW.js → memory-handlers-MOFDNB6E.js} +2 -2
  240. package/dist/cli/chunks/{multi-model-executor-VZDUYPLX.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  241. package/dist/cli/chunks/{opencode-installer-QUTXKNH4.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  242. package/dist/cli/chunks/{orchestrator-PCKKUWOP.js → orchestrator-2H2YKSGJ.js} +5 -5
  243. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  244. package/dist/cli/chunks/{pattern-usage-recorder-PX5HQVRL.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  245. package/dist/cli/chunks/{pipeline-O562GTOG.js → pipeline-LIE5BWQY.js} +2 -2
  246. package/dist/cli/chunks/{platform-PM7Q2AZS.js → platform-SMYUNLGX.js} +2 -2
  247. package/dist/cli/chunks/{plugin-OTYTFGPY.js → plugin-LJDIXQNT.js} +2 -2
  248. package/dist/cli/chunks/{prime-radiant-advanced-wasm-6CFXTHC2.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  249. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  250. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  251. package/dist/cli/chunks/{protocol-handler-PPGNSAOS.js → protocol-handler-YVM66DLI.js} +2 -2
  252. package/dist/cli/chunks/{prove-WQ3BKRZG.js → prove-ZBDT52GD.js} +2 -2
  253. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  254. package/dist/cli/chunks/{quality-C5WUU3AA.js → quality-DUKXGDDO.js} +2 -2
  255. package/dist/cli/chunks/{quality-gate-WSSRKD5U.js → quality-gate-SM3RXF4V.js} +3 -3
  256. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  257. package/dist/cli/chunks/{real-embeddings-CFQE7IRQ.js → real-embeddings-4QLQZDB5.js} +2 -2
  258. package/dist/cli/chunks/{ref-validation-DHKHXVZT.js → ref-validation-M3EO32YQ.js} +2 -2
  259. package/dist/cli/chunks/{roocode-installer-3PPODABV.js → roocode-installer-S6Q5OLV5.js} +2 -2
  260. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  261. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  262. package/dist/cli/chunks/{routing-handler-JNXTGT6T.js → routing-handler-55FMUACP.js} +2 -2
  263. package/dist/cli/chunks/{ruvector-commands-6YLROPVP.js → ruvector-commands-QATKAAPK.js} +2 -2
  264. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  265. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  266. package/dist/cli/chunks/{rvf-migration-coordinator-4DWB4WRK.js → rvf-migration-coordinator-RFXFU6JD.js} +2 -2
  267. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  268. package/dist/cli/chunks/{rvf-store-integrity-YKR2ZNBF.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  269. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  270. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  271. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  272. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  273. package/dist/cli/chunks/{shared-rvf-adapter-LNRLFP5I.js → shared-rvf-adapter-YHLLNFHF.js} +2 -2
  274. package/dist/cli/chunks/{shared-rvf-dual-writer-GWU6YQNS.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  275. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  276. package/dist/cli/chunks/{standalone-memory-46KKBSSV.js → standalone-memory-LUHKQAGM.js} +2 -2
  277. package/dist/cli/chunks/{status-handler-35T5FTDQ.js → status-handler-S6S5PNR7.js} +2 -2
  278. package/dist/cli/chunks/{structural-health-P7QPQWLO.js → structural-health-PQ7NZAJ4.js} +2 -2
  279. package/dist/cli/chunks/{sync-W6Z4R4PL.js → sync-Q6KRQXU6.js} +2 -2
  280. package/dist/cli/chunks/{sync-Y43EWBSY.js → sync-S744AEJC.js} +2 -2
  281. package/dist/cli/chunks/{task-handler-5CX3ZYT7.js → task-handler-GAMGEHUW.js} +2 -2
  282. package/dist/cli/chunks/{task-handlers-DQZGOJNE.js → task-handlers-6CRDEELN.js} +3 -3
  283. package/dist/cli/chunks/{test-TPP53VVV.js → test-FNH67DBK.js} +4 -4
  284. package/dist/cli/chunks/{test-scheduling-WBV4UMQH.js → test-scheduling-NZA5SHK6.js} +3 -3
  285. package/dist/cli/chunks/{token-bootstrap-GIIDXHLC.js → token-bootstrap-CXKG55JD.js} +2 -2
  286. package/dist/cli/chunks/{token-usage-AKK37RB7.js → token-usage-M7WWEDJX.js} +2 -2
  287. package/dist/cli/chunks/{transformers-7MASPELS.js → transformers-2IFMCK6A.js} +2 -2
  288. package/dist/cli/chunks/{tree-sitter-wasm-parser-YZKD6UGB.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  289. package/dist/cli/chunks/{types-AZ3BTXDP.js → types-N7FWTOLD.js} +2 -2
  290. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  291. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  292. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  293. package/dist/cli/chunks/{upgrade-L7OTDKEK.js → upgrade-KDB5RGL7.js} +2 -2
  294. package/dist/cli/chunks/{validate-O3QVFIGP.js → validate-KMUV5FUA.js} +2 -2
  295. package/dist/cli/chunks/{validate-swarm-2UGBGLTX.js → validate-swarm-ANZWRCJU.js} +2 -2
  296. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  297. package/dist/cli/chunks/{web-tree-sitter-J75IYPRO.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  298. package/dist/cli/chunks/{windsurf-installer-FQ5DBFCG.js → windsurf-installer-2LWSKMBU.js} +2 -2
  299. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  300. package/dist/cli/chunks/{witness-chain-I7TN4MXZ.js → witness-chain-JJMSJFZP.js} +2 -2
  301. package/dist/cli/chunks/{witness-chain-repair-D3NE3NQK.js → witness-chain-repair-OX7VFW6T.js} +2 -2
  302. package/dist/cli/chunks/{witness-chain-verifier-RU2WOP5M.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  303. package/dist/cli/chunks/{witness-key-manager-IHQB2FR5.js → witness-key-manager-3DS4L7LE.js} +2 -2
  304. package/dist/cli/chunks/{workflow-6BWTNVV6.js → workflow-ARWAMHD3.js} +4 -4
  305. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  306. package/dist/cli/chunks/{wrappers-URVP25VU.js → wrappers-J6KGTUSJ.js} +2 -2
  307. package/dist/cli/commands/learning.js +3 -2
  308. package/dist/cli/commands/security.d.ts +16 -0
  309. package/dist/cli/commands/security.js +76 -9
  310. package/dist/cli/handlers/init-guard.d.ts +21 -1
  311. package/dist/cli/handlers/init-guard.js +51 -8
  312. package/dist/cli/handlers/init-handler.js +57 -56
  313. package/dist/cli/index.js +11 -0
  314. package/dist/cli/utils/ci-output.d.ts +5 -0
  315. package/dist/cli/utils/ci-output.js +8 -0
  316. package/dist/coordination/handlers/security-handlers.js +22 -6
  317. package/dist/coordination/protocols/defect-investigation.js +7 -1
  318. package/dist/coordination/protocols/security-audit.js +11 -0
  319. package/dist/coordination/result-saver.d.ts +9 -0
  320. package/dist/coordination/result-saver.js +34 -4
  321. package/dist/domains/coverage-analysis/collected-metrics.d.ts +2 -0
  322. package/dist/domains/coverage-analysis/collected-metrics.js +6 -0
  323. package/dist/domains/defect-intelligence/services/defect-predictor.js +9 -6
  324. package/dist/domains/quality-assessment/interfaces.d.ts +4 -0
  325. package/dist/domains/quality-assessment/quality-evidence.d.ts +1 -1
  326. package/dist/domains/quality-assessment/services/quality-analyzer.js +7 -5
  327. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  328. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  329. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  330. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  331. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  332. package/dist/domains/security-compliance/plugin.js +19 -0
  333. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  334. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  335. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  336. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  337. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  338. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  339. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  340. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  341. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  342. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  343. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  344. package/dist/domains/test-execution/services/test-executor.js +87 -7
  345. package/dist/kernel/shared-dirs.js +17 -5
  346. package/dist/mcp/bundle.js +874 -874
  347. package/dist/mcp/handlers/domain-handler-configs.d.ts +4 -0
  348. package/dist/mcp/handlers/domain-handler-configs.js +5 -1
  349. package/dist/mcp/protocol-server.js +2 -1
  350. package/dist/mcp/types.d.ts +6 -0
  351. package/dist/shared/security/index.d.ts +2 -2
  352. package/dist/shared/security/index.js +1 -1
  353. package/dist/shared/security/osv-client.d.ts +79 -132
  354. package/dist/shared/security/osv-client.js +344 -167
  355. package/dist/shared/security/osv-lookup.d.ts +124 -0
  356. package/dist/shared/security/osv-lookup.js +246 -0
  357. package/dist/shared/security/osv-types.d.ts +119 -0
  358. package/dist/shared/security/osv-types.js +6 -0
  359. package/dist/workers/interfaces.d.ts +6 -1
  360. package/dist/workers/namespaced-keys.d.ts +16 -0
  361. package/dist/workers/namespaced-keys.js +24 -0
  362. package/dist/workers/quality-daemon/persistent-memory.d.ts +1 -1
  363. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  364. package/dist/workers/worker-manager.js +5 -2
  365. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  366. package/dist/workers/workers/defect-predictor.js +223 -216
  367. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  368. package/dist/workers/workers/performance-baseline.js +187 -230
  369. package/dist/workers/workers/quality-gate.d.ts +11 -9
  370. package/dist/workers/workers/quality-gate.js +125 -267
  371. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  372. package/dist/workers/workers/security-scan-records.js +128 -0
  373. package/dist/workers/workers/security-scan.d.ts +25 -7
  374. package/dist/workers/workers/security-scan.js +187 -164
  375. package/package.json +2 -2
  376. package/dist/cli/chunks/adapter-PP3XIXDV.js +0 -2
  377. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +0 -2
  378. package/dist/cli/chunks/base-QSYWWPCE.js +0 -2
  379. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +0 -2
  380. package/dist/cli/chunks/chunk-45MVRQG4.js +0 -2
  381. package/dist/cli/chunks/chunk-5VZVMO7B.js +0 -3
  382. package/dist/cli/chunks/chunk-EECF4CMA.js +0 -2
  383. package/dist/cli/chunks/client-6XKSQ4JT.js +0 -2
  384. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +0 -2
  385. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +0 -2
  386. package/dist/cli/chunks/daemon-QBYTCIMH.js +0 -10
  387. package/dist/cli/chunks/dream-3UABDRZJ.js +0 -2
  388. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +0 -2
  389. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +0 -2
  390. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +0 -2
  391. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +0 -2
  392. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +0 -2
  393. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +0 -2
  394. package/dist/cli/chunks/init-handler-PCLYQUSB.js +0 -88
  395. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +0 -2
  396. package/dist/cli/chunks/kernel-MEJ5GMRH.js +0 -2
  397. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +0 -2
  398. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +0 -2
  399. package/dist/cli/chunks/load-test-OVXIQ3AF.js +0 -2
  400. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +0 -2
  401. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +0 -2
  402. package/dist/cli/chunks/project-root-VVSTHIP4.js +0 -2
  403. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +0 -2
  404. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +0 -2
  405. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +0 -2
  406. package/dist/cli/chunks/router-HYRPWLAY.js +0 -2
  407. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +0 -2
  408. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +0 -2
  409. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +0 -2
  410. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +0 -2
  411. package/dist/cli/chunks/safe-db-KS65XDCP.js +0 -2
  412. package/dist/cli/chunks/schedule-KD2VN6GB.js +0 -2
  413. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +0 -2
  414. package/dist/cli/chunks/security-PWQTGDRU.js +0 -13
  415. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +0 -2
  416. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +0 -2
  417. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +0 -2
  418. package/dist/cli/chunks/unified-persistence-FM376LGE.js +0 -2
  419. package/dist/cli/chunks/visual-security-EU7Y3X46.js +0 -2
  420. package/dist/cli/chunks/witness-chain-CSEBT52D.js +0 -2
  421. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +0 -2
@@ -2,13 +2,18 @@
2
2
  * Agentic QE v3 - Quality Gate Worker
3
3
  * ADR-014: Background Workers for QE Monitoring
4
4
  *
5
- * Continuous quality gate evaluation including:
6
- * - Multi-criteria quality assessment
7
- * - Release readiness scoring
8
- * - Blocking issue detection
9
- * - Quality trend tracking
5
+ * Continuously evaluates the measured quality gate and tracks its verdict.
6
+ *
7
+ * #1043: the gate is the canonical measured gate — the same evidence
8
+ * validation (`inspectQualityEvidence`) and thresholds
9
+ * (`evaluateQualityEvidence` / `resolveQualityThresholds`) the quality_assess
10
+ * tool uses. When any metric lacks usable evidence (absent, stale, malformed)
11
+ * the gate is not evaluated: nothing is stored and an info finding names the
12
+ * unmeasured metrics. A status without the measured stamp (the invented one
13
+ * written by <= 3.15.6) is ignored and replaced by the next measured verdict.
10
14
  */
11
15
  import { BaseWorker } from '../base-worker.js';
16
+ import { INSUFFICIENT_EVIDENCE, QUALITY_METRICS, describeMissingMetrics, evaluateQualityEvidence, inspectQualityEvidence, } from '../../domains/quality-assessment/quality-evidence.js';
12
17
  const CONFIG = {
13
18
  id: 'quality-gate',
14
19
  name: 'Quality Gate Evaluator',
@@ -21,6 +26,21 @@ const CONFIG = {
21
26
  retryCount: 2,
22
27
  retryDelayMs: 5000,
23
28
  };
29
+ const CURRENT_KEY = 'quality-gate:current';
30
+ const HISTORY_KEY = 'quality-gate:history';
31
+ const SCHEMA_VERSION = 1;
32
+ const MAX_HISTORY = 100;
33
+ /** The stored status when it is a measured verdict, else `null`. */
34
+ function measuredStatus(raw) {
35
+ if (!raw || typeof raw !== 'object')
36
+ return null;
37
+ const r = raw;
38
+ if (r.measured !== true || r.schemaVersion !== SCHEMA_VERSION || typeof r.passed !== 'boolean'
39
+ || !Array.isArray(r.checks))
40
+ return null;
41
+ return r;
42
+ }
43
+ const comparator = (check) => (check.direction === 'min' ? '>=' : '<=');
24
44
  export class QualityGateWorker extends BaseWorker {
25
45
  constructor() {
26
46
  super(CONFIG);
@@ -30,318 +50,156 @@ export class QualityGateWorker extends BaseWorker {
30
50
  context.logger.info('Starting quality gate evaluation');
31
51
  const findings = [];
32
52
  const recommendations = [];
33
- // Evaluate all quality gates
34
- const gateStatus = await this.evaluateQualityGates(context);
35
- // Analyze gate status
36
- this.analyzeGateResults(gateStatus, findings, recommendations);
37
- // Check for blockers
38
- this.checkBlockers(gateStatus, findings, recommendations);
39
- // Compare to previous
40
- await this.compareToHistory(context, gateStatus, findings);
41
- // Store current status
42
- await context.memory.set('quality-gate:current', gateStatus);
43
- await context.memory.set('quality-gate:lastCheck', new Date().toISOString());
44
- // Add to history
45
- const history = await context.memory.get('quality-gate:history') || [];
46
- history.push(gateStatus);
47
- if (history.length > 100)
53
+ const { values, problems } = await inspectQualityEvidence(context.memory);
54
+ const measuredValues = Object.fromEntries(QUALITY_METRICS.map((m) => [m, values[m] ?? 'unmeasured']));
55
+ if (problems.length > 0) {
56
+ const unmeasured = problems.map((p) => p.metric);
57
+ findings.push({
58
+ type: 'quality-gate-insufficient-evidence',
59
+ severity: 'info',
60
+ domain: 'quality-assessment',
61
+ title: 'Quality Gate Not Evaluated: Insufficient Evidence',
62
+ description: `${unmeasured.length} of ${QUALITY_METRICS.length} gate metrics have no usable measured evidence ` +
63
+ `(${unmeasured.join(', ')}), so no verdict was reached and nothing was stored.`,
64
+ context: { status: INSUFFICIENT_EVIDENCE, unmeasured, problems },
65
+ });
66
+ for (const advice of describeMissingMetrics(unmeasured)) {
67
+ recommendations.push({
68
+ priority: 'p3',
69
+ domain: 'quality-assessment',
70
+ action: 'Record Measured Quality Evidence',
71
+ description: advice,
72
+ estimatedImpact: 'medium',
73
+ effort: 'low',
74
+ autoFixable: false,
75
+ });
76
+ }
77
+ context.logger.info('Quality gate evaluation complete', { status: INSUFFICIENT_EVIDENCE, unmeasured });
78
+ return this.createResult(Date.now() - startTime, {
79
+ itemsAnalyzed: 0,
80
+ issuesFound: 0,
81
+ healthScore: 100,
82
+ trend: 'stable',
83
+ domainMetrics: {
84
+ gateStatus: INSUFFICIENT_EVIDENCE,
85
+ gatePassed: 'unmeasured',
86
+ releaseReady: 'unmeasured',
87
+ unmeasuredMetrics: unmeasured.length,
88
+ ...measuredValues,
89
+ },
90
+ }, findings, recommendations);
91
+ }
92
+ const evaluation = evaluateQualityEvidence(values);
93
+ const failed = evaluation.checks.filter((c) => !c.passed);
94
+ const status = {
95
+ measured: true,
96
+ schemaVersion: SCHEMA_VERSION,
97
+ evaluatedAt: new Date().toISOString(),
98
+ passed: evaluation.passed,
99
+ passedChecks: evaluation.checks.length - failed.length,
100
+ failedChecks: failed.length,
101
+ checks: evaluation.checks,
102
+ };
103
+ this.analyzeGateResults(status, findings, recommendations);
104
+ await this.compareToPrevious(context, status, findings);
105
+ await context.memory.set(CURRENT_KEY, status);
106
+ await context.memory.set('quality-gate:lastCheck', status.evaluatedAt);
107
+ const stored = await context.memory.get(HISTORY_KEY);
108
+ const history = Array.isArray(stored) ? stored : [];
109
+ history.push(status);
110
+ while (history.length > MAX_HISTORY)
48
111
  history.shift();
49
- await context.memory.set('quality-gate:history', history);
50
- const healthScore = this.calculateHealthScore(gateStatus);
112
+ await context.memory.set(HISTORY_KEY, history);
113
+ const healthScore = this.calculateHealthScore(status);
51
114
  context.logger.info('Quality gate evaluation complete', {
52
115
  healthScore,
53
- passed: gateStatus.passed,
54
- releaseReady: gateStatus.releaseReady,
55
- blockers: gateStatus.blockers,
116
+ passed: status.passed,
117
+ failedChecks: status.failedChecks,
56
118
  });
57
119
  return this.createResult(Date.now() - startTime, {
58
- itemsAnalyzed: gateStatus.rules.length,
59
- issuesFound: gateStatus.failedRules,
120
+ itemsAnalyzed: status.checks.length,
121
+ issuesFound: status.failedChecks,
60
122
  healthScore,
61
123
  trend: 'stable',
62
124
  domainMetrics: {
63
- gatePassed: gateStatus.passed ? 'YES' : 'NO',
64
- releaseReady: gateStatus.releaseReady ? 'YES' : 'NO',
65
- passedRules: gateStatus.passedRules,
66
- failedRules: gateStatus.failedRules,
67
- blockers: gateStatus.blockers,
68
- warnings: gateStatus.warnings,
125
+ gateStatus: 'evaluated',
126
+ gatePassed: status.passed ? 'YES' : 'NO',
127
+ releaseReady: status.passed ? 'YES' : 'NO',
128
+ passedChecks: status.passedChecks,
129
+ failedChecks: status.failedChecks,
130
+ ...measuredValues,
69
131
  },
70
132
  }, findings, recommendations);
71
133
  }
72
- async evaluateQualityGates(_context) {
73
- // Define quality gate rules
74
- const rules = [
75
- // Coverage rules
76
- {
77
- id: 'coverage-line',
78
- name: 'Line Coverage',
79
- category: 'coverage',
80
- threshold: 80,
81
- operator: 'gte',
82
- currentValue: 78.5,
83
- unit: '%',
84
- blocking: true,
85
- },
86
- {
87
- id: 'coverage-branch',
88
- name: 'Branch Coverage',
89
- category: 'coverage',
90
- threshold: 70,
91
- operator: 'gte',
92
- currentValue: 65.2,
93
- unit: '%',
94
- blocking: false,
95
- },
96
- // Reliability rules
97
- {
98
- id: 'reliability-test-pass-rate',
99
- name: 'Test Pass Rate',
100
- category: 'reliability',
101
- threshold: 95,
102
- operator: 'gte',
103
- currentValue: 98.2,
104
- unit: '%',
105
- blocking: true,
106
- },
107
- {
108
- id: 'reliability-flaky-tests',
109
- name: 'Flaky Test Count',
110
- category: 'reliability',
111
- threshold: 5,
112
- operator: 'lte',
113
- currentValue: 3,
114
- unit: 'tests',
115
- blocking: false,
116
- },
117
- // Security rules
118
- {
119
- id: 'security-critical-vulns',
120
- name: 'Critical Vulnerabilities',
121
- category: 'security',
122
- threshold: 0,
123
- operator: 'eq',
124
- currentValue: 1,
125
- unit: 'issues',
126
- blocking: true,
127
- },
128
- {
129
- id: 'security-high-vulns',
130
- name: 'High Vulnerabilities',
131
- category: 'security',
132
- threshold: 3,
133
- operator: 'lte',
134
- currentValue: 2,
135
- unit: 'issues',
136
- blocking: false,
137
- },
138
- // Maintainability rules
139
- {
140
- id: 'maintainability-complexity',
141
- name: 'Average Complexity',
142
- category: 'maintainability',
143
- threshold: 15,
144
- operator: 'lte',
145
- currentValue: 12,
146
- unit: 'score',
147
- blocking: false,
148
- },
149
- {
150
- id: 'maintainability-duplication',
151
- name: 'Code Duplication',
152
- category: 'maintainability',
153
- threshold: 5,
154
- operator: 'lte',
155
- currentValue: 3.2,
156
- unit: '%',
157
- blocking: false,
158
- },
159
- // Performance rules
160
- {
161
- id: 'performance-test-duration',
162
- name: 'Avg Test Duration',
163
- category: 'performance',
164
- threshold: 500,
165
- operator: 'lte',
166
- currentValue: 245,
167
- unit: 'ms',
168
- blocking: false,
169
- },
170
- ];
171
- // Evaluate each rule
172
- let passedRules = 0;
173
- let failedRules = 0;
174
- let blockers = 0;
175
- let warnings = 0;
176
- for (const rule of rules) {
177
- const passed = this.evaluateRule(rule);
178
- if (passed) {
179
- passedRules++;
180
- }
181
- else {
182
- failedRules++;
183
- if (rule.blocking) {
184
- blockers++;
185
- }
186
- else {
187
- warnings++;
188
- }
189
- }
190
- }
191
- return {
192
- passed: blockers === 0,
193
- passedRules,
194
- failedRules,
195
- blockers,
196
- warnings,
197
- releaseReady: blockers === 0 && warnings <= 2,
198
- rules,
199
- };
200
- }
201
- evaluateRule(rule) {
202
- switch (rule.operator) {
203
- case 'gte':
204
- return rule.currentValue >= rule.threshold;
205
- case 'lte':
206
- return rule.currentValue <= rule.threshold;
207
- case 'eq':
208
- return rule.currentValue === rule.threshold;
209
- default:
210
- return false;
211
- }
212
- }
213
134
  analyzeGateResults(status, findings, recommendations) {
214
- // Report failed rules
215
- for (const rule of status.rules) {
216
- if (!this.evaluateRule(rule)) {
217
- const severity = rule.blocking ? 'critical' : 'medium';
218
- findings.push({
219
- type: 'quality-gate-failure',
220
- severity,
221
- domain: 'quality-assessment',
222
- title: `Quality Gate Failed: ${rule.name}`,
223
- description: `${rule.name} is ${rule.currentValue}${rule.unit}, threshold is ${rule.operator === 'gte' ? '>=' : rule.operator === 'lte' ? '<=' : '='} ${rule.threshold}${rule.unit}`,
224
- context: {
225
- ruleId: rule.id,
226
- category: rule.category,
227
- currentValue: rule.currentValue,
228
- threshold: rule.threshold,
229
- blocking: rule.blocking,
230
- },
231
- });
232
- }
233
- }
234
- // Category-specific recommendations
235
- const coverageFailures = status.rules
236
- .filter(r => r.category === 'coverage' && !this.evaluateRule(r));
237
- if (coverageFailures.length > 0) {
238
- recommendations.push({
239
- priority: coverageFailures.some(r => r.blocking) ? 'p0' : 'p2',
240
- domain: 'quality-assessment',
241
- action: 'Improve Test Coverage',
242
- description: `${coverageFailures.length} coverage gates are failing. Add tests to increase coverage.`,
243
- estimatedImpact: 'high',
244
- effort: 'medium',
245
- autoFixable: true,
246
- });
247
- }
248
- const securityFailures = status.rules
249
- .filter(r => r.category === 'security' && !this.evaluateRule(r));
250
- if (securityFailures.length > 0) {
251
- recommendations.push({
252
- priority: 'p0',
135
+ const failed = status.checks.filter((c) => !c.passed);
136
+ for (const check of failed) {
137
+ findings.push({
138
+ type: 'quality-gate-failure',
139
+ severity: check.severity,
253
140
  domain: 'quality-assessment',
254
- action: 'Address Security Issues',
255
- description: 'Security gates are failing. Resolve vulnerabilities before release.',
256
- estimatedImpact: 'high',
257
- effort: 'medium',
258
- autoFixable: false,
141
+ title: `Quality Gate Failed: ${check.name}`,
142
+ description: `Measured ${check.name} is ${check.value}, threshold is ${comparator(check)} ${check.threshold}`,
143
+ context: {
144
+ metric: check.name,
145
+ value: check.value,
146
+ threshold: check.threshold,
147
+ direction: check.direction,
148
+ },
259
149
  });
260
150
  }
261
- }
262
- checkBlockers(status, findings, recommendations) {
263
- if (status.blockers > 0) {
151
+ if (failed.length > 0) {
264
152
  findings.push({
265
153
  type: 'release-blocked',
266
- severity: 'critical',
154
+ severity: failed.some((c) => c.severity === 'critical') ? 'critical' : 'high',
267
155
  domain: 'quality-assessment',
268
156
  title: 'Release Blocked',
269
- description: `${status.blockers} blocking issues prevent release`,
270
- context: {
271
- blockers: status.blockers,
272
- blockingRules: status.rules
273
- .filter(r => r.blocking && !this.evaluateRule(r))
274
- .map(r => r.name),
275
- },
157
+ description: `${failed.length} measured quality checks fail the gate`,
158
+ context: { failingMetrics: failed.map((c) => c.name) },
276
159
  });
277
160
  recommendations.push({
278
161
  priority: 'p0',
279
162
  domain: 'quality-assessment',
280
- action: 'Resolve Release Blockers',
281
- description: 'Address all blocking quality gate failures before proceeding with release.',
163
+ action: 'Resolve Failing Quality Checks',
164
+ description: `Fix ${failed.map((c) => c.name).join(', ')} before proceeding with release.`,
282
165
  estimatedImpact: 'high',
283
166
  effort: 'medium',
284
167
  autoFixable: false,
285
168
  });
286
169
  }
287
- else if (!status.releaseReady) {
288
- findings.push({
289
- type: 'release-warning',
290
- severity: 'medium',
291
- domain: 'quality-assessment',
292
- title: 'Release Not Recommended',
293
- description: `No blockers, but ${status.warnings} warnings suggest caution`,
294
- context: { warnings: status.warnings },
295
- });
296
- }
297
170
  }
298
- async compareToHistory(context, current, findings) {
299
- const previous = await context.memory.get('quality-gate:current');
171
+ /** Compare with the previous verdict — only a measured one (#1043). */
172
+ async compareToPrevious(context, current, findings) {
173
+ const previous = measuredStatus(await context.memory.get(CURRENT_KEY));
300
174
  if (!previous)
301
175
  return;
302
- // Check for regression
303
176
  if (previous.passed && !current.passed) {
304
177
  findings.push({
305
178
  type: 'quality-gate-regression',
306
179
  severity: 'high',
307
180
  domain: 'quality-assessment',
308
181
  title: 'Quality Gate Regression',
309
- description: 'Quality gates were passing previously but are now failing',
310
- context: {
311
- previousBlockers: previous.blockers,
312
- currentBlockers: current.blockers,
313
- },
182
+ description: 'The measured quality gate was passing previously but is now failing',
183
+ context: { previousEvaluatedAt: previous.evaluatedAt, currentFailedChecks: current.failedChecks },
314
184
  });
315
185
  }
316
- // Check for improvement
317
186
  if (!previous.passed && current.passed) {
318
187
  findings.push({
319
188
  type: 'quality-gate-improvement',
320
189
  severity: 'info',
321
190
  domain: 'quality-assessment',
322
- title: 'Quality Gates Now Passing',
323
- description: 'All quality gates are now passing after previous failures',
324
- context: {
325
- previousFailures: previous.failedRules,
326
- currentFailures: current.failedRules,
327
- },
191
+ title: 'Quality Gate Now Passing',
192
+ description: 'The measured quality gate is now passing after previous failures',
193
+ context: { previousEvaluatedAt: previous.evaluatedAt },
328
194
  });
329
195
  }
330
196
  }
331
197
  calculateHealthScore(status) {
332
- if (status.rules.length === 0)
198
+ if (status.checks.length === 0)
333
199
  return 100;
334
- // Base score from pass rate
335
- const passRate = status.passedRules / status.rules.length;
336
- let score = passRate * 70;
337
- // Penalty for blockers
338
- score -= status.blockers * 15;
339
- // Penalty for warnings
340
- score -= status.warnings * 5;
341
- // Bonus for release readiness
342
- if (status.releaseReady) {
200
+ let score = (status.passedChecks / status.checks.length) * 90;
201
+ if (status.passed)
343
202
  score += 10;
344
- }
345
203
  return Math.max(0, Math.min(100, Math.round(score)));
346
204
  }
347
205
  }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Agentic QE v3 - security-scan worker: recorded scan parsing (#1043, #1049)
3
+ *
4
+ * Parses the `security:scan:<id>` records the security-compliance domain writes
5
+ * (OSV dependency scans and SAST scans) into what the security-scan worker
6
+ * reports. Nothing is filled in: a field a record does not carry stays absent.
7
+ */
8
+ export declare const SCHEMA_VERSION = 1;
9
+ /** The dependency scanner keeps its records for 7 days; nothing older is current. */
10
+ export declare const MAX_SCAN_AGE_MS: number;
11
+ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'informational';
12
+ export declare const SEVERITIES: readonly Severity[];
13
+ export declare const CVE_ID: RegExp;
14
+ export interface ScanCounts {
15
+ critical: number;
16
+ high: number;
17
+ medium: number;
18
+ low: number;
19
+ informational: number;
20
+ }
21
+ /** A vulnerability as a recorded scan reported it; nothing is filled in. */
22
+ export interface ReportedVulnerability {
23
+ severity: Severity;
24
+ title: string;
25
+ description: string;
26
+ category: string;
27
+ /** Dependency name (dependency scan) — only when the record names it. */
28
+ package?: string;
29
+ /** `file:line` (SAST) — only when the record locates it. */
30
+ location?: string;
31
+ /** CVE id exactly as the advisory carried it; absent when it carried none. */
32
+ cve?: string;
33
+ fixedIn?: string;
34
+ references: string[];
35
+ }
36
+ export interface RecordedScan {
37
+ scanId: string;
38
+ scannedAt: string;
39
+ summary: ScanCounts;
40
+ /** Vulnerabilities the record lists (SAST keeps only critical/high). */
41
+ vulnerabilities: ReportedVulnerability[];
42
+ /** Total the scan found, including ones the record does not list. */
43
+ total: number;
44
+ }
45
+ /** A package the OSV lookup could not check (#1049 record contract). */
46
+ export interface UncheckedPackage {
47
+ name: string;
48
+ version: string;
49
+ reason: string;
50
+ }
51
+ /**
52
+ * A dependency scan whose OSV lookup was not complete (#1049): `incomplete`,
53
+ * `failed`, or a pre-#1049 record without `status` — which cannot be told
54
+ * apart from a failed lookup recorded as clean. Never "0 vulnerabilities".
55
+ */
56
+ export interface IncompleteDependencyScan {
57
+ scan: RecordedScan;
58
+ status: 'incomplete' | 'failed' | 'unknown';
59
+ error?: string;
60
+ uncheckedPackages: UncheckedPackage[];
61
+ /** Packages the lookup did check, when the record states it. */
62
+ packagesChecked?: number;
63
+ }
64
+ /** The `security:lastScan` record: only scans that actually ran (#1043). */
65
+ export interface MeasuredSecurityScan {
66
+ measured: true;
67
+ schemaVersion: typeof SCHEMA_VERSION;
68
+ evaluatedAt: string;
69
+ dependency: (RecordedScan & {
70
+ source: 'osv';
71
+ }) | null;
72
+ code: (RecordedScan & {
73
+ source: 'sast';
74
+ }) | null;
75
+ }
76
+ export declare const isCount: (v: unknown) => v is number;
77
+ export declare const isRecord: (v: unknown) => v is Record<string, unknown>;
78
+ export declare function parseCounts(raw: unknown): ScanCounts | null;
79
+ /** `scannedAt` when the record's timestamp is valid, not in the future and within the scanner's retention. */
80
+ export declare function parseScannedAt(raw: unknown, now: number): string | null;
81
+ export declare function parseVulnerability(raw: unknown, kind: 'dependency' | 'sast'): ReportedVulnerability | null;
82
+ export declare function parseUnchecked(raw: unknown): UncheckedPackage[];
83
+ /**
84
+ * #1049: a dependency scan is a measurement only when its OSV lookup checked
85
+ * every requested package (`measured: true` and `status: 'complete'`).
86
+ */
87
+ export declare function dependencyCompleteness(raw: Record<string, unknown>): {
88
+ complete: true;
89
+ } | {
90
+ complete: false;
91
+ status: IncompleteDependencyScan['status'];
92
+ error?: string;
93
+ uncheckedPackages: UncheckedPackage[];
94
+ packagesChecked?: number;
95
+ };
96
+ export declare const SEVERITY_LABEL: Record<Severity, string>;
97
+ /** Health penalty for the real critical/high advisories of a partial dependency scan (#1049). */
98
+ export declare function partialDependencyPenalty(incomplete: IncompleteDependencyScan | null): number;
99
+ /** What a partial dependency scan did check; the dependency totals stay 'unmeasured' (#1049). */
100
+ export declare function partialDependencyMetrics(incomplete: IncompleteDependencyScan | null): Record<string, number>;
101
+ export type ParsedScan = {
102
+ kind: 'sast';
103
+ scan: RecordedScan;
104
+ } | {
105
+ kind: 'dependency';
106
+ scan: RecordedScan;
107
+ completeness: ReturnType<typeof dependencyCompleteness>;
108
+ };
109
+ /** A recorded dependency (OSV) or SAST scan, or `null` when the record is not one. */
110
+ export declare function parseRecordedScan(raw: unknown, now: number): ParsedScan | null;
111
+ //# sourceMappingURL=security-scan-records.d.ts.map