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
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Agentic QE v3 - OSV lookup outcome types and response validation (#1049)
3
+ *
4
+ * A failed or partial advisory lookup is never "no vulnerabilities". Every
5
+ * package the lookup could not check is listed with the reason, and the
6
+ * overall status says whether the result can be read as a measurement.
7
+ */
8
+ import type { ParsedVulnerability } from './osv-types';
9
+ /** A package handed to an OSV lookup. */
10
+ export interface OSVPackageQuery {
11
+ name: string;
12
+ ecosystem: string;
13
+ version?: string;
14
+ }
15
+ /** A package whose advisories could not be checked, and why. */
16
+ export interface OSVUncheckedPackage {
17
+ name: string;
18
+ ecosystem: string;
19
+ version?: string;
20
+ reason: string;
21
+ }
22
+ /**
23
+ * Outcome of an OSV batch lookup.
24
+ * - complete: every package was checked; `results` is a measurement.
25
+ * - incomplete: some packages were checked (their findings are real), others not.
26
+ * - failed: no package could be checked.
27
+ */
28
+ export interface OSVBatchLookup {
29
+ status: 'complete' | 'incomplete' | 'failed';
30
+ /** Keyed `${ecosystem}:${name}`; only packages that were actually checked. */
31
+ results: Map<string, ParsedVulnerability[]>;
32
+ packagesRequested: number;
33
+ packagesChecked: number;
34
+ unchecked: OSVUncheckedPackage[];
35
+ /** Bounded, request-level error descriptions (no response bodies). */
36
+ errors: string[];
37
+ }
38
+ /** Thrown by the legacy list-returning methods when a lookup did not complete. */
39
+ export declare class OSVLookupError extends Error {
40
+ readonly lookup?: OSVBatchLookup;
41
+ constructor(message: string, lookup?: OSVBatchLookup);
42
+ static fromLookup(lookup: OSVBatchLookup): OSVLookupError;
43
+ }
44
+ /**
45
+ * Result key for one queried package: `${ecosystem}:${name}@${version}`.
46
+ * Keyed by version so two versions of one package never overwrite each other.
47
+ */
48
+ export declare const lookupKey: (pkg: {
49
+ ecosystem: string;
50
+ name: string;
51
+ version?: string;
52
+ }) => string;
53
+ /** At most `max` ids, then "and N more" — keeps reasons bounded. */
54
+ export declare function boundedList(items: readonly string[], max?: number): string;
55
+ /**
56
+ * The exact npm version a spec pins ("4.17.15", "=4.17.15", "v4.17.15"), or
57
+ * null for anything else: ranges (^ ~ < > <= >= || hyphen), wildcards, tags,
58
+ * and non-registry specs. A range is never reduced to a guessed version (#1049).
59
+ */
60
+ export declare function exactNpmVersion(spec: string): string | null;
61
+ /**
62
+ * What an npm dependency spec points at (#1049):
63
+ * - `local`: a workspace / linked / local-directory package. Not an OSV subject
64
+ * (its own dependencies are what can carry advisories).
65
+ * - `remote`: git, GitHub shorthand, URL or tarball (incl. `file:*.tgz`): third-party
66
+ * code with no registry version, so advisories cannot be matched.
67
+ * - `alias`: `npm:<real>@<range>` — the registry package `<real>`.
68
+ * - `registry`: an ordinary registry spec (exact version, range or tag).
69
+ */
70
+ export type NpmSpecKind = {
71
+ kind: 'local';
72
+ } | {
73
+ kind: 'remote';
74
+ } | {
75
+ kind: 'alias';
76
+ name: string;
77
+ spec: string;
78
+ } | {
79
+ kind: 'registry';
80
+ spec: string;
81
+ };
82
+ export declare function classifyNpmSpec(spec: string): NpmSpecKind;
83
+ /** A spec whose source is not the npm registry (local or remote); aliases are registry packages. */
84
+ export declare function isNonRegistrySpec(spec: string): boolean;
85
+ /**
86
+ * True for a concrete version OSV can match ("4.17.15", "1.0rc1", "2.0.0-beta.1").
87
+ * Ranges, tags, wildcards, URLs and aliases are not: querying OSV without a
88
+ * concrete version returns every advisory the package ever had.
89
+ */
90
+ export declare function isConcreteVersion(version: string): boolean;
91
+ /** Longest version string considered; versions come from repo-controlled files. */
92
+ export declare const MAX_VERSION_LENGTH = 256;
93
+ /** One querybatch entry: the advisory ids reported for a package, or why it is unusable. */
94
+ export type BatchEntry = {
95
+ ids: string[];
96
+ } | {
97
+ reason: string;
98
+ };
99
+ /**
100
+ * Validate a querybatch body against the queries sent. `null` means the body as
101
+ * a whole is unusable (every package in the chunk is unchecked).
102
+ */
103
+ export declare function parseBatchBody(body: unknown, expected: number): BatchEntry[] | null;
104
+ /** A full OSV advisory record has a string id and an `affected` array. */
105
+ export declare function isAdvisoryRecord(body: unknown): body is {
106
+ id: string;
107
+ affected: unknown[];
108
+ };
109
+ /**
110
+ * Whether an advisory affects `pkg@version` according to its own `affected`
111
+ * entries. Used to confirm querybatch matches: OSV's batch endpoint can return
112
+ * advisories whose ranges for the package exclude the version. An advisory is
113
+ * dropped only when every matching entry is positively evaluated as not
114
+ * affected; anything that cannot be evaluated (no matching entry, ECOSYSTEM/GIT
115
+ * ranges, unparseable versions) is kept.
116
+ */
117
+ export declare function advisoryAffectsVersion(advisory: unknown, pkg: {
118
+ name: string;
119
+ ecosystem: string;
120
+ version: string;
121
+ }): boolean;
122
+ /** Lookup status from the counts. */
123
+ export declare function lookupStatus(requested: number, checked: number): OSVBatchLookup['status'];
124
+ //# sourceMappingURL=osv-lookup.d.ts.map
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Agentic QE v3 - OSV lookup outcome types and response validation (#1049)
3
+ *
4
+ * A failed or partial advisory lookup is never "no vulnerabilities". Every
5
+ * package the lookup could not check is listed with the reason, and the
6
+ * overall status says whether the result can be read as a measurement.
7
+ */
8
+ /** Thrown by the legacy list-returning methods when a lookup did not complete. */
9
+ export class OSVLookupError extends Error {
10
+ lookup;
11
+ constructor(message, lookup) {
12
+ super(message);
13
+ this.name = 'OSVLookupError';
14
+ this.lookup = lookup;
15
+ }
16
+ static fromLookup(lookup) {
17
+ const reasons = [...new Set(lookup.unchecked.map((p) => p.reason))].slice(0, 3).join('; ');
18
+ return new OSVLookupError(`OSV advisories could not be checked for ${lookup.unchecked.length} of ${lookup.packagesRequested} package(s): ${reasons}`, lookup);
19
+ }
20
+ }
21
+ /**
22
+ * Result key for one queried package: `${ecosystem}:${name}@${version}`.
23
+ * Keyed by version so two versions of one package never overwrite each other.
24
+ */
25
+ export const lookupKey = (pkg) => `${pkg.ecosystem}:${pkg.name}@${pkg.version ?? ''}`;
26
+ /** At most `max` ids, then "and N more" — keeps reasons bounded. */
27
+ export function boundedList(items, max = 5) {
28
+ return items.length <= max ? items.join(', ') : `${items.slice(0, max).join(', ')} and ${items.length - max} more`;
29
+ }
30
+ /**
31
+ * The exact npm version a spec pins ("4.17.15", "=4.17.15", "v4.17.15"), or
32
+ * null for anything else: ranges (^ ~ < > <= >= || hyphen), wildcards, tags,
33
+ * and non-registry specs. A range is never reduced to a guessed version (#1049).
34
+ */
35
+ export function exactNpmVersion(spec) {
36
+ const m = /^=?v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/.exec(spec.trim());
37
+ return m ? m[1] : null;
38
+ }
39
+ export function classifyNpmSpec(spec) {
40
+ const s = spec.trim();
41
+ const alias = /^npm:((?:@[^/@\s]+\/)?[^@\s]+)(?:@(.*))?$/.exec(s);
42
+ if (alias)
43
+ return { kind: 'alias', name: alias[1], spec: alias[2] ?? '' };
44
+ if (/^(workspace:|link:|portal:)/.test(s))
45
+ return { kind: 'local' };
46
+ if (/^file:/.test(s))
47
+ return /\.(tgz|tar\.gz|tar)$/i.test(s) ? { kind: 'remote' } : { kind: 'local' };
48
+ if (/^(\.{0,2}\/|~\/)/.test(s))
49
+ return /\.(tgz|tar\.gz|tar)$/i.test(s) ? { kind: 'remote' } : { kind: 'local' };
50
+ if (/^(patch:|exec:|git\+|git:|github:|gitlab:|bitbucket:|https?:)/.test(s))
51
+ return { kind: 'remote' };
52
+ if (/^[^\s@/:]+\/[^\s@/:]+(#.*)?$/.test(s))
53
+ return { kind: 'remote' }; // GitHub "user/repo" shorthand
54
+ return { kind: 'registry', spec: s };
55
+ }
56
+ /** A spec whose source is not the npm registry (local or remote); aliases are registry packages. */
57
+ export function isNonRegistrySpec(spec) {
58
+ const k = classifyNpmSpec(spec).kind;
59
+ return k === 'local' || k === 'remote';
60
+ }
61
+ /**
62
+ * True for a concrete version OSV can match ("4.17.15", "1.0rc1", "2.0.0-beta.1").
63
+ * Ranges, tags, wildcards, URLs and aliases are not: querying OSV without a
64
+ * concrete version returns every advisory the package ever had.
65
+ */
66
+ export function isConcreteVersion(version) {
67
+ if (version.length === 0 || version.length > MAX_VERSION_LENGTH)
68
+ return false;
69
+ if (!matchesVersionShape(version))
70
+ return false;
71
+ return !/(^|\.)[xX*](\.|$)/.test(version);
72
+ }
73
+ /** Longest version string considered; versions come from repo-controlled files. */
74
+ export const MAX_VERSION_LENGTH = 256;
75
+ const VERSION_CORE = /^\d+(?:\.\d+)*$/;
76
+ const VERSION_TAIL = /^[0-9A-Za-z][0-9A-Za-z.+-]*$/;
77
+ /**
78
+ * Linear equivalent of `^\d+(\.\d+)*([-+._]?[0-9A-Za-z][0-9A-Za-z.+-]*)?$`
79
+ * (whose overlapping quantifiers backtrack polynomially, CodeQL js/polynomial-redos).
80
+ * `_` is not in the tail class, so it can only be the separator right after the
81
+ * numeric core. Without `_`, any accepted split can be re-split after the first
82
+ * digit run (the remaining `.digits` segments fit the tail class).
83
+ */
84
+ function matchesVersionShape(version) {
85
+ const underscore = version.indexOf('_');
86
+ if (underscore >= 0) {
87
+ return VERSION_CORE.test(version.slice(0, underscore)) && VERSION_TAIL.test(version.slice(underscore + 1));
88
+ }
89
+ let i = 0;
90
+ while (i < version.length && version.charCodeAt(i) >= 48 && version.charCodeAt(i) <= 57)
91
+ i++;
92
+ if (i === 0)
93
+ return false;
94
+ const rest = version.slice(i);
95
+ if (rest === '')
96
+ return true;
97
+ // Splitting inside a 2+ digit run makes the tail start with a digit: the rest
98
+ // then only has to fit the tail class ("11." = core "1" + tail "1.").
99
+ if (i >= 2 && VERSION_TAIL_REST.test(rest))
100
+ return true;
101
+ const sep = rest[0] === '-' || rest[0] === '+' || rest[0] === '.';
102
+ return VERSION_TAIL.test(sep ? rest.slice(1) : rest);
103
+ }
104
+ const VERSION_TAIL_REST = /^[0-9A-Za-z.+-]*$/;
105
+ const isObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
106
+ /**
107
+ * Validate a querybatch body against the queries sent. `null` means the body as
108
+ * a whole is unusable (every package in the chunk is unchecked).
109
+ */
110
+ export function parseBatchBody(body, expected) {
111
+ if (!isObject(body) || !Array.isArray(body.results) || body.results.length !== expected)
112
+ return null;
113
+ return body.results.map((entry) => {
114
+ if (!isObject(entry))
115
+ return { reason: 'malformed OSV result entry' };
116
+ if (typeof entry.next_page_token === 'string' && entry.next_page_token) {
117
+ return { reason: 'OSV advisory list was truncated (paginated) and not fully retrieved' };
118
+ }
119
+ if (entry.vulns === undefined)
120
+ return { ids: [] };
121
+ if (!Array.isArray(entry.vulns))
122
+ return { reason: 'malformed OSV result entry' };
123
+ const ids = [];
124
+ for (const v of entry.vulns) {
125
+ if (!isObject(v) || typeof v.id !== 'string' || !v.id)
126
+ return { reason: 'malformed OSV advisory reference' };
127
+ ids.push(v.id);
128
+ }
129
+ return { ids };
130
+ });
131
+ }
132
+ /** A full OSV advisory record has a string id and an `affected` array. */
133
+ export function isAdvisoryRecord(body) {
134
+ return isObject(body) && typeof body.id === 'string' && Array.isArray(body.affected);
135
+ }
136
+ function parseSemver(version) {
137
+ const m = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(version.trim());
138
+ if (!m)
139
+ return null;
140
+ return { nums: [Number(m[1]), Number(m[2]), Number(m[3])], pre: m[4] ? m[4].split('.') : [] };
141
+ }
142
+ function compareSemver(a, b) {
143
+ for (let i = 0; i < 3; i++)
144
+ if (a.nums[i] !== b.nums[i])
145
+ return a.nums[i] < b.nums[i] ? -1 : 1;
146
+ if (a.pre.length === 0 || b.pre.length === 0)
147
+ return a.pre.length === b.pre.length ? 0 : a.pre.length === 0 ? 1 : -1;
148
+ for (let i = 0; i < Math.max(a.pre.length, b.pre.length); i++) {
149
+ const x = a.pre[i];
150
+ const y = b.pre[i];
151
+ if (x === undefined || y === undefined)
152
+ return x === undefined ? -1 : 1;
153
+ if (x === y)
154
+ continue;
155
+ const nx = /^\d+$/.test(x);
156
+ const ny = /^\d+$/.test(y);
157
+ if (nx && ny)
158
+ return Number(x) < Number(y) ? -1 : 1;
159
+ if (nx !== ny)
160
+ return nx ? -1 : 1;
161
+ return x < y ? -1 : 1;
162
+ }
163
+ return 0;
164
+ }
165
+ /** OSV SEMVER range evaluation; null when an event version cannot be parsed. */
166
+ function semverRangeAffects(version, events) {
167
+ // `at: null` is `introduced: "0"`: before every version, prereleases included.
168
+ const keyed = [];
169
+ for (const e of events) {
170
+ const kind = e.introduced !== undefined ? 'introduced' : e.fixed !== undefined ? 'fixed' : e.last_affected !== undefined ? 'last_affected' : null;
171
+ if (!kind)
172
+ continue; // `limit` does not change membership for a single version
173
+ const raw = e[kind];
174
+ if (kind === 'introduced' && raw === '0') {
175
+ keyed.push({ at: null, kind });
176
+ continue;
177
+ }
178
+ const at = parseSemver(raw);
179
+ if (!at)
180
+ return null;
181
+ keyed.push({ at, kind });
182
+ }
183
+ // Sort by version; on a tie a fixed/last_affected closes the earlier window
184
+ // before an introduced at the same version opens the next one.
185
+ const tieRank = (kind) => (kind === 'introduced' ? 1 : 0);
186
+ keyed.sort((a, b) => {
187
+ if (!a.at || !b.at)
188
+ return a.at === b.at ? 0 : a.at ? 1 : -1;
189
+ return compareSemver(a.at, b.at) || tieRank(a.kind) - tieRank(b.kind);
190
+ });
191
+ let affected = false;
192
+ for (const { at, kind } of keyed) {
193
+ if (!at) {
194
+ affected = true;
195
+ continue;
196
+ }
197
+ const cmp = compareSemver(version, at);
198
+ if (kind === 'introduced' && cmp >= 0)
199
+ affected = true;
200
+ else if (kind === 'fixed' && cmp >= 0)
201
+ affected = false;
202
+ else if (kind === 'last_affected' && cmp > 0)
203
+ affected = false;
204
+ }
205
+ return affected;
206
+ }
207
+ /**
208
+ * Whether an advisory affects `pkg@version` according to its own `affected`
209
+ * entries. Used to confirm querybatch matches: OSV's batch endpoint can return
210
+ * advisories whose ranges for the package exclude the version. An advisory is
211
+ * dropped only when every matching entry is positively evaluated as not
212
+ * affected; anything that cannot be evaluated (no matching entry, ECOSYSTEM/GIT
213
+ * ranges, unparseable versions) is kept.
214
+ */
215
+ export function advisoryAffectsVersion(advisory, pkg) {
216
+ const affected = advisory.affected;
217
+ if (!Array.isArray(affected))
218
+ return true;
219
+ const entries = affected.filter((a) => isObject(a) && isObject(a.package)
220
+ && a.package.name === pkg.name && a.package.ecosystem === pkg.ecosystem);
221
+ if (entries.length === 0)
222
+ return true;
223
+ const version = parseSemver(pkg.version);
224
+ for (const entry of entries) {
225
+ if (Array.isArray(entry.versions) && entry.versions.includes(pkg.version))
226
+ return true;
227
+ const ranges = Array.isArray(entry.ranges) ? entry.ranges.filter(isObject) : [];
228
+ if (ranges.length === 0 && !Array.isArray(entry.versions))
229
+ return true;
230
+ for (const range of ranges) {
231
+ if (range.type !== 'SEMVER' || !version || !Array.isArray(range.events))
232
+ return true;
233
+ const verdict = semverRangeAffects(version, range.events);
234
+ if (verdict !== false)
235
+ return true;
236
+ }
237
+ }
238
+ return false;
239
+ }
240
+ /** Lookup status from the counts. */
241
+ export function lookupStatus(requested, checked) {
242
+ if (checked === requested)
243
+ return 'complete';
244
+ return checked === 0 ? 'failed' : 'incomplete';
245
+ }
246
+ //# sourceMappingURL=osv-lookup.js.map
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Agentic QE v3 - OSV API record types
3
+ * API Documentation: https://google.github.io/osv.dev/api/
4
+ */
5
+ /**
6
+ * OSV query request
7
+ */
8
+ export interface OSVQueryRequest {
9
+ /** Package name */
10
+ package?: {
11
+ name: string;
12
+ ecosystem: OSVEcosystem;
13
+ };
14
+ /** Git commit hash */
15
+ commit?: string;
16
+ /**
17
+ * Package version to match. OSV reads it here, at the top level of the query;
18
+ * a `version` inside `package` is ignored (it returns every advisory ever).
19
+ */
20
+ version?: string;
21
+ }
22
+ /**
23
+ * Supported ecosystems
24
+ */
25
+ export type OSVEcosystem = 'npm' | 'PyPI' | 'Go' | 'Maven' | 'crates.io' | 'NuGet' | 'Packagist' | 'RubyGems' | 'Hex' | 'Pub';
26
+ /**
27
+ * OSV vulnerability record
28
+ */
29
+ export interface OSVVulnerability {
30
+ id: string;
31
+ summary: string;
32
+ details?: string;
33
+ aliases?: string[];
34
+ modified: string;
35
+ published?: string;
36
+ withdrawn?: string;
37
+ severity?: OSVSeverity[];
38
+ affected: OSVAffected[];
39
+ references?: OSVReference[];
40
+ database_specific?: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * OSV severity rating
44
+ */
45
+ export interface OSVSeverity {
46
+ type: 'CVSS_V2' | 'CVSS_V3';
47
+ score: string;
48
+ }
49
+ /**
50
+ * OSV affected package information
51
+ */
52
+ export interface OSVAffected {
53
+ package: {
54
+ name: string;
55
+ ecosystem: string;
56
+ purl?: string;
57
+ };
58
+ ranges?: OSVRange[];
59
+ versions?: string[];
60
+ ecosystem_specific?: Record<string, unknown>;
61
+ database_specific?: Record<string, unknown>;
62
+ }
63
+ /**
64
+ * OSV version range
65
+ */
66
+ export interface OSVRange {
67
+ type: 'SEMVER' | 'ECOSYSTEM' | 'GIT';
68
+ repo?: string;
69
+ events: Array<{
70
+ introduced?: string;
71
+ fixed?: string;
72
+ last_affected?: string;
73
+ limit?: string;
74
+ }>;
75
+ }
76
+ /**
77
+ * OSV reference link
78
+ */
79
+ export interface OSVReference {
80
+ type: 'ADVISORY' | 'ARTICLE' | 'DETECTION' | 'DISCUSSION' | 'REPORT' | 'FIX' | 'GIT' | 'PACKAGE' | 'EVIDENCE' | 'WEB';
81
+ url: string;
82
+ }
83
+ /**
84
+ * OSV query response
85
+ */
86
+ export interface OSVQueryResponse {
87
+ vulns: OSVVulnerability[];
88
+ }
89
+ /**
90
+ * OSV batch query request
91
+ */
92
+ export interface OSVBatchQueryRequest {
93
+ queries: OSVQueryRequest[];
94
+ }
95
+ /**
96
+ * OSV batch query response
97
+ */
98
+ export interface OSVBatchQueryResponse {
99
+ results: Array<{
100
+ vulns?: OSVVulnerability[];
101
+ }>;
102
+ }
103
+ /**
104
+ * Parsed vulnerability for easier consumption
105
+ */
106
+ export interface ParsedVulnerability {
107
+ id: string;
108
+ cveIds: string[];
109
+ summary: string;
110
+ details: string;
111
+ severity: 'critical' | 'high' | 'medium' | 'low' | 'unknown';
112
+ cvssScore: number | null;
113
+ affectedPackage: string;
114
+ affectedVersions: string[];
115
+ fixedVersions: string[];
116
+ publishedDate: Date | null;
117
+ references: string[];
118
+ }
119
+ //# sourceMappingURL=osv-types.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Agentic QE v3 - OSV API record types
3
+ * API Documentation: https://google.github.io/osv.dev/api/
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=osv-types.js.map
@@ -163,7 +163,12 @@ export interface WorkerMemory {
163
163
  */
164
164
  get<T>(key: string, options?: WorkerMemoryReadOptions): Promise<T | undefined>;
165
165
  set<T>(key: string, value: T): Promise<void>;
166
- search(pattern: string): Promise<string[]>;
166
+ /**
167
+ * Keys matching a glob pattern. Like `get`, `options.namespace` searches
168
+ * another domain's records (e.g. recorded security scans, #1043); a backend
169
+ * without namespaces returns nothing for one.
170
+ */
171
+ search(pattern: string, limit?: number, options?: WorkerMemoryReadOptions): Promise<string[]>;
167
172
  }
168
173
  export interface WorkerLogger {
169
174
  debug(message: string, meta?: Record<string, unknown>): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Agentic QE v3 - namespaced search keys (#1049)
3
+ *
4
+ * Kernel memory backends disagree on what a namespaced `search` returns: the
5
+ * hybrid (sqlite) backend returns bare keys, the in-memory backend returns
6
+ * `<namespace>:<key>`. A worker that passes a search result straight back to
7
+ * `get(key, { namespace })` then double-prefixes the key and reads nothing.
8
+ */
9
+ /**
10
+ * The bare key for a key returned by `search(pattern, limit, { namespace })`.
11
+ * A result that already matches `pattern` is bare (keys may legitimately start
12
+ * with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
13
+ * leading `<namespace>:` is the backend's prefix and is removed.
14
+ */
15
+ export declare function bareSearchKey(found: string, namespace: string, pattern: string): string;
16
+ //# sourceMappingURL=namespaced-keys.d.ts.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Agentic QE v3 - namespaced search keys (#1049)
3
+ *
4
+ * Kernel memory backends disagree on what a namespaced `search` returns: the
5
+ * hybrid (sqlite) backend returns bare keys, the in-memory backend returns
6
+ * `<namespace>:<key>`. A worker that passes a search result straight back to
7
+ * `get(key, { namespace })` then double-prefixes the key and reads nothing.
8
+ */
9
+ function globToRegExp(pattern) {
10
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
11
+ return new RegExp(`^${escaped.replace(/\*/g, '.*').replace(/\?/g, '.')}$`, 's');
12
+ }
13
+ /**
14
+ * The bare key for a key returned by `search(pattern, limit, { namespace })`.
15
+ * A result that already matches `pattern` is bare (keys may legitimately start
16
+ * with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
17
+ * leading `<namespace>:` is the backend's prefix and is removed.
18
+ */
19
+ export function bareSearchKey(found, namespace, pattern) {
20
+ if (globToRegExp(pattern).test(found))
21
+ return found;
22
+ return found.startsWith(`${namespace}:`) ? found.slice(namespace.length + 1) : found;
23
+ }
24
+ //# sourceMappingURL=namespaced-keys.js.map
@@ -26,6 +26,6 @@ export declare class PersistentWorkerMemory implements WorkerMemory {
26
26
  constructor(backend: KVBackend);
27
27
  get<T>(key: string, options?: WorkerMemoryReadOptions): Promise<T | undefined>;
28
28
  set<T>(key: string, value: T): Promise<void>;
29
- search(pattern: string): Promise<string[]>;
29
+ search(pattern: string, limit?: number, options?: WorkerMemoryReadOptions): Promise<string[]>;
30
30
  }
31
31
  //# sourceMappingURL=persistent-memory.d.ts.map
@@ -23,8 +23,8 @@ export class PersistentWorkerMemory {
23
23
  async set(key, value) {
24
24
  await this.backend.kvSet(key, value, NAMESPACE);
25
25
  }
26
- async search(pattern) {
27
- return this.backend.kvSearch(pattern, NAMESPACE);
26
+ async search(pattern, limit, options) {
27
+ return this.backend.kvSearch(pattern, options?.namespace ?? NAMESPACE, limit);
28
28
  }
29
29
  }
30
30
  //# sourceMappingURL=persistent-memory.js.map
@@ -58,10 +58,13 @@ class InMemoryWorkerMemory {
58
58
  async set(key, value) {
59
59
  this.store.set(key, value);
60
60
  }
61
- async search(pattern) {
61
+ async search(pattern, limit, options) {
62
+ if (options?.namespace)
63
+ return [];
62
64
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
63
65
  const regex = new RegExp(escaped.replace(/\*/g, '.*'));
64
- return Array.from(this.store.keys()).filter((key) => regex.test(key));
66
+ const keys = Array.from(this.store.keys()).filter((key) => regex.test(key));
67
+ return limit === undefined ? keys : keys.slice(0, limit);
65
68
  }
66
69
  /**
67
70
  * Clear all stored data
@@ -2,21 +2,38 @@
2
2
  * Agentic QE v3 - Defect Predictor Worker
3
3
  * ADR-014: Background Workers for QE Monitoring
4
4
  *
5
- * ML-based defect prediction including:
6
- * - Code change risk analysis
7
- * - Historical defect pattern matching
8
- * - Hotspot identification
9
- * - Predictive maintenance suggestions
5
+ * Surfaces the defect-intelligence domain's latest predictions:
6
+ * - High-risk files and their contributing factors
7
+ * - Targeted review / refactoring / coverage recommendations
8
+ *
9
+ * #1043: every prediction comes from a run of the defect-intelligence
10
+ * predictor (`defect-intelligence:predictor:prediction:<id>` in the
11
+ * `defect-intelligence` namespace, written by DefectPredictorService), and
12
+ * only files that exist in the project are kept. Code hotspots have no
13
+ * measured source and are reported unmeasured. Nothing predicted → nothing
14
+ * stored, an "unmeasured" info finding. A `defect:predictions` record without
15
+ * the measured stamp (the invented one written by <= 3.15.6) is ignored and
16
+ * replaced by the next measured run.
10
17
  */
11
18
  import { BaseWorker } from '../base-worker';
12
19
  import { WorkerContext, WorkerResult } from '../interfaces';
13
20
  export declare class DefectPredictorWorker extends BaseWorker {
14
21
  constructor();
15
22
  protected doExecute(context: WorkerContext): Promise<WorkerResult>;
16
- private analyzeCodeForDefects;
17
- private identifyHotspots;
23
+ /**
24
+ * #1043 round 2b: the newest prediction names no usable file, so a stored
25
+ * measured record from an older prediction is no longer current — stamp it
26
+ * stale (once) instead of leaving it looking like the latest analysis.
27
+ */
28
+ private markPreviousStale;
29
+ /**
30
+ * #1043: the most recent prediction run the defect-intelligence predictor
31
+ * recorded, restricted to regular files whose real path is inside the
32
+ * project root. `measured` is `null` when there is no such prediction;
33
+ * `unusable` describes a newest prediction none of whose files qualify.
34
+ */
35
+ private readLatestPrediction;
18
36
  private analyzeHighRiskPredictions;
19
- private analyzeHotspots;
20
37
  private calculateHealthScore;
21
38
  }
22
39
  //# sourceMappingURL=defect-predictor.d.ts.map