agentic-qe 3.15.5 → 3.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +262 -0
  6. package/README.md +2 -0
  7. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  8. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  9. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  10. package/assets/skills/skills-manifest.json +1 -1
  11. package/dist/cli/bundle.js +8 -6
  12. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
  18. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
  19. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
  20. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
  24. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  26. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
  28. package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
  29. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
  30. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
  32. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
  34. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
  35. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
  38. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
  39. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
  40. package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
  41. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
  42. package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
  43. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
  45. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
  48. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
  49. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
  51. package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
  52. package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
  53. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
  56. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
  57. package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
  58. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
  60. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
  61. package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
  62. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
  64. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
  65. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
  67. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  68. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
  70. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
  71. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
  73. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
  74. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
  75. package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
  76. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
  77. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
  78. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
  79. package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
  80. package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
  81. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
  82. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
  83. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
  84. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
  85. package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
  86. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
  87. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
  88. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
  89. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
  90. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
  93. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
  94. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
  97. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
  100. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
  101. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
  102. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
  105. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
  106. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
  107. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
  109. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
  110. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
  112. package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
  113. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
  115. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
  116. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
  117. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
  119. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
  120. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
  122. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
  124. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
  125. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
  126. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
  127. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
  128. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  129. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
  131. package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
  132. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
  133. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
  134. package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
  135. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
  137. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
  138. package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
  139. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
  140. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
  141. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
  142. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
  144. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
  146. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
  147. package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
  148. package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
  149. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
  150. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
  151. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
  153. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
  155. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
  158. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
  159. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  160. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
  162. package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
  163. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
  165. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
  169. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
  170. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
  171. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
  172. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
  173. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
  174. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
  175. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
  176. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
  177. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
  178. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
  179. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
  180. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
  181. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  182. package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
  183. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  187. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
  189. package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
  192. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
  198. package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
  199. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
  201. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  202. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
  203. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  204. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
  209. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  210. package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
  211. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
  212. package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
  213. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  217. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
  225. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
  226. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  230. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  231. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  232. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  233. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  237. package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
  238. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  240. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
  241. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  242. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
  243. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  245. package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
  246. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  248. package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
  249. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
  252. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
  253. package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  255. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
  258. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  260. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
  266. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  272. package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
  273. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  275. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  276. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  277. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  278. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  279. package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
  285. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
  286. package/dist/cli/chunks/sync-S744AEJC.js +2 -0
  287. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
  289. package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
  290. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
  291. package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
  292. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
  293. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
  294. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  295. package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  299. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
  300. package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
  302. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
  307. package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  309. package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
  310. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
  311. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  312. package/dist/cli/chunks/wrappers-J6KGTUSJ.js +2 -0
  313. package/dist/cli/commands/ci.js +47 -25
  314. package/dist/cli/commands/coverage.d.ts +1 -28
  315. package/dist/cli/commands/coverage.js +63 -134
  316. package/dist/cli/commands/daemon.js +7 -1
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  318. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  319. package/dist/cli/commands/learning.js +50 -9
  320. package/dist/cli/commands/security.d.ts +16 -0
  321. package/dist/cli/commands/security.js +76 -9
  322. package/dist/cli/commands/test.js +6 -7
  323. package/dist/cli/commands/workflow.js +9 -5
  324. package/dist/cli/handlers/init-guard.d.ts +33 -0
  325. package/dist/cli/handlers/init-guard.js +66 -0
  326. package/dist/cli/handlers/init-handler.d.ts +3 -0
  327. package/dist/cli/handlers/init-handler.js +64 -54
  328. package/dist/cli/handlers/interfaces.js +5 -1
  329. package/dist/cli/index.js +11 -0
  330. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  331. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  332. package/dist/cli/utils/ci-output.d.ts +13 -1
  333. package/dist/cli/utils/ci-output.js +21 -2
  334. package/dist/cli/utils/coverage-data.d.ts +3 -0
  335. package/dist/cli/utils/coverage-data.js +14 -39
  336. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  337. package/dist/cli/utils/coverage-verdict.js +193 -0
  338. package/dist/cli/utils/file-discovery.js +5 -0
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +34 -6
  343. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  344. package/dist/coordination/handlers/coverage-runner.js +105 -10
  345. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  346. package/dist/coordination/handlers/coverage-target.js +4 -1
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  349. package/dist/coordination/handlers/handler-utils.js +46 -22
  350. package/dist/coordination/handlers/quality-handlers.js +108 -18
  351. package/dist/coordination/handlers/security-handlers.js +22 -6
  352. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  353. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  354. package/dist/coordination/protocols/defect-investigation.js +12 -3
  355. package/dist/coordination/protocols/quality-gate.js +10 -6
  356. package/dist/coordination/protocols/security-audit.js +11 -0
  357. package/dist/coordination/result-saver.d.ts +31 -0
  358. package/dist/coordination/result-saver.js +146 -46
  359. package/dist/coordination/task-executor.d.ts +7 -0
  360. package/dist/coordination/task-executor.js +32 -3
  361. package/dist/domains/code-intelligence/plugin.js +4 -0
  362. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  363. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  364. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  366. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  367. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  368. package/dist/domains/coverage-analysis/collected-metrics.d.ts +35 -0
  369. package/dist/domains/coverage-analysis/collected-metrics.js +42 -0
  370. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  371. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  372. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  373. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  374. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  375. package/dist/domains/defect-intelligence/plugin.js +4 -0
  376. package/dist/domains/defect-intelligence/services/defect-predictor.js +13 -8
  377. package/dist/domains/learning-optimization/coordinator.js +4 -0
  378. package/dist/domains/learning-optimization/plugin.js +4 -0
  379. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  380. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  381. package/dist/domains/quality-assessment/coordinator.js +10 -6
  382. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  383. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  384. package/dist/domains/quality-assessment/index.d.ts +1 -1
  385. package/dist/domains/quality-assessment/interfaces.d.ts +50 -0
  386. package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
  387. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  388. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  389. package/dist/domains/quality-assessment/services/quality-analyzer.js +197 -112
  390. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  391. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  392. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  393. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  394. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  395. package/dist/domains/security-compliance/plugin.js +19 -0
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  397. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  398. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  399. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  400. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  401. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  402. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  403. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  404. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  405. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  406. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  407. package/dist/domains/test-execution/plugin.js +4 -0
  408. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  409. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  410. package/dist/domains/test-execution/services/test-executor.js +239 -109
  411. package/dist/domains/test-generation/coordinator.js +4 -0
  412. package/dist/domains/test-generation/plugin.js +4 -0
  413. package/dist/feedback/coverage-learner.js +4 -1
  414. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  415. package/dist/feedback/coverage-session-provenance.js +39 -0
  416. package/dist/init/orchestrator.js +2 -0
  417. package/dist/init/phases/09-assets.d.ts +4 -0
  418. package/dist/init/phases/09-assets.js +35 -0
  419. package/dist/init/retired-assets.d.ts +86 -0
  420. package/dist/init/retired-assets.js +230 -0
  421. package/dist/init/skills-installer.d.ts +2 -0
  422. package/dist/init/skills-installer.js +4 -0
  423. package/dist/init/types.d.ts +3 -0
  424. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  425. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  426. package/dist/integrations/ruvector/server-client.js +4 -12
  427. package/dist/kernel/project-root.d.ts +17 -0
  428. package/dist/kernel/project-root.js +54 -2
  429. package/dist/kernel/shared-dirs.d.ts +66 -0
  430. package/dist/kernel/shared-dirs.js +180 -0
  431. package/dist/learning/daily-log.js +2 -1
  432. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  433. package/dist/learning/experience-capture-middleware.js +35 -0
  434. package/dist/learning/learnable-result.d.ts +16 -0
  435. package/dist/learning/learnable-result.js +24 -0
  436. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  437. package/dist/learning/pattern-mutation-error.js +12 -0
  438. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  439. package/dist/learning/qe-reasoning-bank.js +50 -1
  440. package/dist/learning/rvf-reconcile.d.ts +39 -0
  441. package/dist/learning/rvf-reconcile.js +40 -0
  442. package/dist/learning/sqlite-persistence.d.ts +14 -0
  443. package/dist/learning/sqlite-persistence.js +36 -0
  444. package/dist/mcp/bundle.js +908 -896
  445. package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
  446. package/dist/mcp/handlers/domain-handler-configs.js +42 -4
  447. package/dist/mcp/handlers/handler-factory.js +40 -14
  448. package/dist/mcp/protocol-server.js +29 -3
  449. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  450. package/dist/mcp/tool-cache-scope.js +71 -0
  451. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  452. package/dist/mcp/types.d.ts +10 -0
  453. package/dist/optimization/session-cache.d.ts +19 -1
  454. package/dist/optimization/session-cache.js +36 -2
  455. package/dist/plugins/cache.js +2 -1
  456. package/dist/plugins/sources/github.js +2 -1
  457. package/dist/plugins/sources/npm.js +2 -1
  458. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  459. package/dist/shared/aqe-managed-dirs.js +56 -0
  460. package/dist/shared/events/domain-events.d.ts +18 -3
  461. package/dist/shared/events/domain-events.js +4 -0
  462. package/dist/shared/http/http-client.d.ts +6 -0
  463. package/dist/shared/http/http-client.js +13 -15
  464. package/dist/shared/io/file-reader.d.ts +26 -0
  465. package/dist/shared/io/file-reader.js +111 -17
  466. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  467. package/dist/shared/llm/providers/response-deadline.js +17 -5
  468. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  469. package/dist/shared/metrics/code-metrics.js +93 -6
  470. package/dist/shared/metrics/index.d.ts +1 -1
  471. package/dist/shared/security/index.d.ts +2 -2
  472. package/dist/shared/security/index.js +1 -1
  473. package/dist/shared/security/osv-client.d.ts +79 -132
  474. package/dist/shared/security/osv-client.js +344 -167
  475. package/dist/shared/security/osv-lookup.d.ts +124 -0
  476. package/dist/shared/security/osv-lookup.js +246 -0
  477. package/dist/shared/security/osv-types.d.ts +119 -0
  478. package/dist/shared/security/osv-types.js +6 -0
  479. package/dist/workers/interfaces.d.ts +15 -2
  480. package/dist/workers/namespaced-keys.d.ts +16 -0
  481. package/dist/workers/namespaced-keys.js +24 -0
  482. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  483. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  484. package/dist/workers/quality-daemon/index.js +6 -5
  485. package/dist/workers/quality-daemon/notification-service.js +3 -3
  486. package/dist/workers/quality-daemon/persistent-memory.d.ts +3 -3
  487. package/dist/workers/quality-daemon/persistent-memory.js +4 -4
  488. package/dist/workers/worker-manager.js +10 -3
  489. package/dist/workers/workers/coverage-tracker.js +69 -33
  490. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  491. package/dist/workers/workers/defect-predictor.js +223 -216
  492. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  493. package/dist/workers/workers/performance-baseline.js +187 -230
  494. package/dist/workers/workers/quality-gate.d.ts +11 -9
  495. package/dist/workers/workers/quality-gate.js +125 -267
  496. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  497. package/dist/workers/workers/regression-monitor.js +276 -117
  498. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  499. package/dist/workers/workers/security-scan-records.js +128 -0
  500. package/dist/workers/workers/security-scan.d.ts +25 -7
  501. package/dist/workers/workers/security-scan.js +187 -164
  502. package/package.json +2 -2
  503. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  504. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  505. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  506. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  507. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  508. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  509. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  510. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  511. package/dist/cli/chunks/chunk-BO4PKNYP.js +0 -102
  512. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  513. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  514. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  515. package/dist/cli/chunks/chunk-GTSOFCMQ.js +0 -2
  516. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  517. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  518. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  519. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  520. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  521. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  522. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  523. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  524. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  525. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  526. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  527. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  528. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  529. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  530. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  531. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  532. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  533. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  534. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  535. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  536. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  537. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  538. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  539. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  540. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  541. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  542. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  543. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  544. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  545. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  546. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  547. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  548. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  549. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  550. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  551. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  552. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  553. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  554. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  555. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  556. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  557. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  558. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  559. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  560. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  561. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  562. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  563. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  564. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  565. package/dist/cli/chunks/security-7723AZZ4.js +0 -13
  566. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  567. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  568. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  569. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  570. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  571. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  572. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  573. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  574. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  575. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  576. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  577. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  578. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  579. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  580. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  581. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  582. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  583. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  584. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -6,54 +6,12 @@
6
6
  import { Command } from 'commander';
7
7
  import chalk from 'chalk';
8
8
  import { runCoverageAnalysisWizard } from '../wizards/coverage-wizard.js';
9
- import { walkSourceFiles } from '../utils/file-discovery.js';
10
9
  import { writeOutput, toJSON, coverageToMarkdown } from '../utils/ci-output.js';
11
10
  import * as path from 'path';
12
- import { buildCoverageData, summarizeCoverage } from '../utils/coverage-data.js';
13
- import { describeNoData, isUnmeasured, resolveExistingCoverage, reconcileRecommendations, thresholdVerdict, } from '../../coordination/handlers/coverage-target.js';
14
- /** Which optional metrics an instrumented report actually carries. */
15
- function metricsCollected(data) {
16
- if (!data.instrumented)
17
- return { branch: true, function: true }; // labelled heuristic estimate
18
- return {
19
- branch: data.files.some(f => f.branches.total > 0),
20
- function: data.files.some(f => f.functions.total > 0),
21
- };
22
- }
23
- /** `aqe coverage` exit code when the target has no coverage measurement (#995). */
24
- export const EXIT_UNMEASURED = 3;
25
- /**
26
- * Resolve the coverage data for a CLI target (#995).
27
- *
28
- * Uses the SAME resolution and verdict as the MCP `coverage_analyze_sublinear`
29
- * handler (`resolveExistingCoverage`), so CLI and MCP cannot disagree about
30
- * what a report says for a target:
31
- * - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
32
- * directly;
33
- * - a directory or source file is scoped against the instrumented report of
34
- * its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
35
- * - with no report at the project root, the CLI falls back to its labelled
36
- * heuristic estimate (the CLI never runs the test suite).
37
- */
38
- export async function resolveCliCoverageData(targetPath) {
39
- const existing = await resolveExistingCoverage(targetPath);
40
- if (existing.status === 'target-missing') {
41
- return { kind: 'no-data', reason: 'target-missing', message: describeNoData('target-missing', targetPath, null) };
42
- }
43
- if (existing.status === 'evaluated') {
44
- const { evaluation, projectRoot } = existing;
45
- if (evaluation.status === 'measured') {
46
- const files = evaluation.files;
47
- return { kind: 'data', data: { files, summary: summarizeCoverage(files), instrumented: true } };
48
- }
49
- return { kind: 'no-data', reason: evaluation.reason, message: describeNoData(evaluation.reason, targetPath, projectRoot) };
50
- }
51
- const sourceFiles = walkSourceFiles(existing.target, { includeTests: false });
52
- if (sourceFiles.length === 0)
53
- return { kind: 'no-sources' };
54
- console.log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
55
- return { kind: 'data', data: buildCoverageData(sourceFiles, existing.projectRoot) };
56
- }
11
+ import { EXIT_UNMEASURED, coverageExitCode, coverageJson, evaluateCliCoverage, } from '../utils/coverage-verdict.js';
12
+ // #1012 / #1010: resolution and verdict are shared with `aqe ci` (and built on
13
+ // the same functions as MCP); re-exported here for existing importers.
14
+ export { EXIT_UNMEASURED, resolveCliCoverageData } from '../utils/coverage-verdict.js';
57
15
  function getColorForPercent(percent) {
58
16
  if (percent >= 80)
59
17
  return chalk.green;
@@ -87,7 +45,13 @@ Exit codes:
87
45
  1 coverage below the threshold, or an error (missing target, unreadable report)
88
46
  2 coverage within 5% above the threshold
89
47
  ${EXIT_UNMEASURED} UNMEASURED: no coverage measurement exists for the target
90
- (not in the report, the runner ran 0 tests, or only test files were reported)`)
48
+ (not in the report, the runner ran 0 tests, or only test files were reported),
49
+ or NO coverage report exists, so only a labelled static estimate was shown
50
+ (-F json: measured:false, estimated:true; no threshold verdict)
51
+
52
+ In \`aqe ci\`, an UNMEASURED coverage phase is a warning (phase exit code 3); it
53
+ does not fail the pipeline by itself. An enforced quality gate fails on
54
+ missing coverage evidence.`)
91
55
  .action(async (target, options) => {
92
56
  let analyzeTarget = target;
93
57
  let includeRisk = options.risk;
@@ -141,90 +105,62 @@ Exit codes:
141
105
  const targetPath = path.resolve(analyzeTarget);
142
106
  // Fix #280: shared file discovery supporting all languages.
143
107
  // #995: coverage files as targets; reports resolved from the project root.
144
- const resolved = await resolveCliCoverageData(targetPath);
145
- if (resolved.kind === 'no-sources') {
108
+ // #1012: one shared verdict (measured / unmeasured / labelled estimate).
109
+ const outcome = await evaluateCliCoverage(coverageAPI, targetPath, threshold);
110
+ const format = options.format;
111
+ if (outcome.kind === 'no-sources') {
146
112
  console.log(chalk.yellow('No source files found'));
147
113
  return;
148
114
  }
149
- if (resolved.kind === 'no-data') {
150
- // Errors (missing target, unreadable report) exit 1. Everything else
151
- // means "no measurement exists" — distinct exit code, never "0%".
152
- const isError = resolved.reason === 'target-missing' || resolved.reason === 'unreadable-report';
153
- if (options.format === 'json') {
115
+ if (outcome.kind === 'error' || outcome.kind === 'unmeasured' || outcome.kind === 'analysis-failed') {
116
+ // Errors (missing target, unreadable report) exit 1. "No measurement
117
+ // exists" has its own exit code — never "0%".
118
+ if (format === 'json') {
154
119
  // Same shape as a normal result, with nulls (#995 review N4).
155
- emit(toJSON({
156
- summary: { line: null, branch: null, function: null, statement: null },
157
- meetsThreshold: null,
158
- threshold,
159
- measured: false,
160
- unmeasured: isUnmeasured(resolved.reason),
161
- reason: resolved.reason,
162
- target: targetPath,
163
- warning: resolved.message,
164
- }));
120
+ emit(toJSON(coverageJson(outcome, threshold, targetPath)));
165
121
  }
166
122
  else {
167
- console.log((isError ? chalk.red : chalk.yellow)(` ${resolved.message}\n`));
123
+ console.log((outcome.kind === 'unmeasured' ? chalk.yellow : chalk.red)(` ${outcome.message}\n`));
168
124
  }
169
- await cleanupAndExit(isError ? 1 : EXIT_UNMEASURED);
125
+ await cleanupAndExit(coverageExitCode(outcome, threshold));
170
126
  return;
171
127
  }
172
- const coverageData = resolved.data;
173
- if (coverageData.instrumented) {
128
+ const coverageData = outcome.data;
129
+ const isEstimate = outcome.kind === 'estimate';
130
+ if (!isEstimate) {
174
131
  console.log(chalk.green(' Using instrumented coverage data (V8/istanbul)\n'));
175
132
  if (coverageData.unmeasuredFiles?.length) {
176
133
  console.log(chalk.yellow(` ${coverageData.unmeasuredFiles.length} file(s) not in the coverage report — UNMEASURED, excluded from the figures\n`));
177
134
  }
178
135
  }
179
136
  else {
180
- console.log(chalk.yellow(' No instrumented coverage found — using heuristic estimation'));
137
+ console.log(chalk.yellow(' No coverage report found — showing a heuristic STATIC ESTIMATE (UNMEASURED)'));
181
138
  console.log(chalk.gray(' Run tests with coverage first: npm test -- --coverage\n'));
182
139
  }
183
- // #1008: a heuristic estimate is shown, never persisted as coverage evidence.
184
- const result = await coverageAPI.analyze({
185
- coverageData,
186
- threshold,
187
- includeFileDetails: true,
188
- measured: coverageData.instrumented,
189
- });
190
- const format = options.format;
191
- let coverageResult;
192
- let overallCoverage = 0;
193
- if (result.success && result.value) {
194
- const report = result.value;
195
- // #995 review NB5: a metric the report never collected is null — not
196
- // 0 — and is left out of the threshold verdict (same rule as MCP).
197
- const collected = metricsCollected(coverageData);
198
- const verdict = thresholdVerdict(report.summary, threshold, collected);
199
- const summary = {
200
- ...report.summary,
201
- branch: collected.branch ? report.summary.branch : null,
202
- function: collected.function ? report.summary.function : null,
203
- };
204
- // NB-A: the shortfall advice comes from the same verdict (shared with MCP).
205
- const recommendations = reconcileRecommendations(report.recommendations, verdict, threshold, collected);
206
- overallCoverage = verdict.overall;
207
- // For non-text formats, collect all data and output at end
208
- coverageResult = {
209
- summary: summary,
210
- meetsThreshold: verdict.meetsThreshold,
211
- threshold,
212
- recommendations,
213
- };
214
- if (format === 'text') {
215
- const fmt = (v) => v === null ? 'n/a (not collected)' : v.toFixed(1) + '%';
216
- const color = (v) => v === null ? chalk.gray : getColorForPercent(v);
217
- console.log(chalk.cyan(' Coverage Summary:'));
218
- console.log(` Lines: ${color(summary.line)(fmt(summary.line))}`);
219
- console.log(` Branches: ${color(summary.branch)(fmt(summary.branch))}`);
220
- console.log(` Functions: ${color(summary.function)(fmt(summary.function))}`);
221
- console.log(` Statements: ${color(summary.statement)(fmt(summary.statement))}`);
222
- console.log(`\n Threshold: ${verdict.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
223
- if (recommendations.length > 0) {
224
- console.log(chalk.cyan('\n Recommendations:'));
225
- for (const rec of recommendations) {
226
- console.log(chalk.gray(` - ${rec}`));
227
- }
140
+ // #1012: the JSON carries its provenance (measured / estimated /
141
+ // coverageMethod) exactly as MCP does; an estimate has no verdict.
142
+ const coverageResult = coverageJson(outcome, threshold, targetPath);
143
+ const summary = outcome.summary;
144
+ if (format === 'text') {
145
+ const fmt = (v) => v === null ? 'n/a (not collected)' : (isEstimate ? '~' : '') + v.toFixed(1) + '%';
146
+ const color = (v) => v === null || isEstimate ? chalk.gray : getColorForPercent(v);
147
+ console.log(chalk.cyan(isEstimate ? ' Coverage Summary (STATIC ESTIMATE — not measured):' : ' Coverage Summary:'));
148
+ console.log(` Lines: ${color(summary.line)(fmt(summary.line))}`);
149
+ console.log(` Branches: ${color(summary.branch)(fmt(summary.branch))}`);
150
+ console.log(` Functions: ${color(summary.function)(fmt(summary.function))}`);
151
+ console.log(` Statements: ${color(summary.statement)(fmt(summary.statement))}`);
152
+ if (outcome.kind === 'measured') {
153
+ console.log(`\n Threshold: ${outcome.verdict.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
154
+ }
155
+ else {
156
+ console.log(`\n Threshold: ${chalk.yellow(`not evaluated (${threshold}%) — UNMEASURED, estimate only`)}`);
157
+ console.log(chalk.gray(` ${outcome.message}`));
158
+ }
159
+ const recommendations = outcome.kind === 'measured' ? outcome.recommendations : [];
160
+ if (recommendations.length > 0) {
161
+ console.log(chalk.cyan('\n Recommendations:'));
162
+ for (const rec of recommendations) {
163
+ console.log(chalk.gray(` - ${rec}`));
228
164
  }
229
165
  }
230
166
  }
@@ -235,16 +171,17 @@ Exit codes:
235
171
  coverageData,
236
172
  minCoverage: threshold,
237
173
  prioritize: includeRisk ? 'risk' : 'size',
174
+ // #1014: gaps in an estimate are shown, never learned or published.
175
+ measured: !isEstimate,
238
176
  });
239
177
  if (gapResult.success && gapResult.value) {
240
178
  const gaps = gapResult.value;
241
- if (coverageResult)
242
- coverageResult.gaps = gaps.gaps.map(g => ({
243
- file: g.file.replace(process.cwd() + '/', ''),
244
- lines: g.lines,
245
- riskScore: g.riskScore,
246
- severity: g.severity,
247
- }));
179
+ coverageResult.gaps = gaps.gaps.map(g => ({
180
+ file: g.file.replace(process.cwd() + '/', ''),
181
+ lines: g.lines,
182
+ riskScore: g.riskScore,
183
+ severity: g.severity,
184
+ }));
248
185
  console.log(chalk.gray(` Total uncovered lines: ${gaps.totalUncoveredLines}`));
249
186
  console.log(chalk.gray(` Estimated effort: ${gaps.estimatedEffort} hours\n`));
250
187
  for (const gap of gaps.gaps.slice(0, 8)) {
@@ -307,26 +244,18 @@ Exit codes:
307
244
  }
308
245
  }
309
246
  // Non-text format output (collected all data)
310
- if (coverageResult && format === 'json') {
247
+ if (format === 'json') {
311
248
  emit(toJSON(coverageResult));
312
249
  }
313
- else if (coverageResult && format === 'markdown') {
250
+ else if (format === 'markdown') {
314
251
  emit(coverageToMarkdown(coverageResult));
315
252
  }
316
253
  else if (format === 'text') {
317
254
  console.log(chalk.green('\n Coverage analysis complete\n'));
318
255
  }
319
- // Exit codes: 1 = below threshold, 2 = within 5% of threshold, 0 = above threshold
320
- if (coverageResult && !coverageResult.meetsThreshold) {
321
- await cleanupAndExit(1);
322
- }
323
- if (coverageResult) {
324
- const avg = overallCoverage;
325
- if (avg < threshold + 5 && avg >= threshold) {
326
- await cleanupAndExit(2);
327
- }
328
- }
329
- await cleanupAndExit(0);
256
+ // Exit codes: 1 = below threshold, 2 = within 5% of threshold,
257
+ // 0 = above threshold, 3 = UNMEASURED (estimate only) — shared with `aqe ci`.
258
+ await cleanupAndExit(coverageExitCode(outcome, threshold));
330
259
  }
331
260
  catch (error) {
332
261
  console.error(chalk.red('\nFailed:'), error);
@@ -70,7 +70,13 @@ Examples:
70
70
  // Fallback for environments where kernel isn't available
71
71
  const store = new Map();
72
72
  memory = {
73
- async get(key) { return store.get(key); },
73
+ // Like InMemoryWorkerMemory (#1028 N4): this process-local store holds
74
+ // only daemon keys, so a read of another namespace finds nothing.
75
+ async get(key, options) {
76
+ if (options?.namespace)
77
+ return undefined;
78
+ return store.get(key);
79
+ },
74
80
  async set(key, value) { store.set(key, value); },
75
81
  async search(pattern) {
76
82
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
@@ -5,6 +5,21 @@
5
5
  * Handles pattern management and statistics subcommands.
6
6
  */
7
7
  import { Command } from 'commander';
8
+ /**
9
+ * How a learned pattern reached vector search, by cause (#981, review N1).
10
+ * - `indexed`: stored with its vector in the active index.
11
+ * - `sqlite`: an embedder produced the vector and SQLite holds it (vector
12
+ * search uses it now); only the ANN index (patterns.rvf) was not open in
13
+ * this process. It is ingested automatically the next time the index opens.
14
+ * - `pending`: no vector (no embedding runtime); text search only until an
15
+ * embedder is configured and `aqe learning backfill-embeddings` runs.
16
+ */
17
+ export declare function describeVectorIndexState(pattern: {
18
+ embedding?: ArrayLike<number>;
19
+ }, indexUnavailableCause?: string): {
20
+ vectorIndex: 'indexed' | 'sqlite' | 'pending';
21
+ notice?: string;
22
+ };
8
23
  /**
9
24
  * Register stats, list, emit, learn, and search subcommands on the hooks command.
10
25
  */
@@ -7,7 +7,37 @@
7
7
  import chalk from 'chalk';
8
8
  import { QE_HOOK_EVENTS } from '../../../learning/qe-hooks.js';
9
9
  import { safeJsonParse } from '../../../shared/safe-json.js';
10
+ import { committedPendingIndexPatternId } from '../../../learning/pattern-mutation-error.js';
10
11
  import { getHooksSystem, printJson, printSuccess, printError, } from './hooks-shared.js';
12
+ /**
13
+ * How a learned pattern reached vector search, by cause (#981, review N1).
14
+ * - `indexed`: stored with its vector in the active index.
15
+ * - `sqlite`: an embedder produced the vector and SQLite holds it (vector
16
+ * search uses it now); only the ANN index (patterns.rvf) was not open in
17
+ * this process. It is ingested automatically the next time the index opens.
18
+ * - `pending`: no vector (no embedding runtime); text search only until an
19
+ * embedder is configured and `aqe learning backfill-embeddings` runs.
20
+ */
21
+ export function describeVectorIndexState(pattern, indexUnavailableCause) {
22
+ const hasVector = Boolean(pattern.embedding && pattern.embedding.length > 0);
23
+ if (!hasVector) {
24
+ return {
25
+ vectorIndex: 'pending',
26
+ notice: 'Pattern stored in SQLite without a vector (no embedding runtime is available). ' +
27
+ 'Text search finds it now. Set AQE_EMBEDDER_ENDPOINT or install @huggingface/transformers, then run ' +
28
+ '`aqe learning backfill-embeddings` to enable semantic search for it.',
29
+ };
30
+ }
31
+ if (indexUnavailableCause) {
32
+ return {
33
+ vectorIndex: 'sqlite',
34
+ notice: 'Pattern stored; its vector is stored in SQLite and vector search can use it now. ' +
35
+ `The ANN index (patterns.rvf) was not open in this process (${indexUnavailableCause}); ` +
36
+ 'the vector is added to it automatically the next time the index opens.',
37
+ };
38
+ }
39
+ return { vectorIndex: 'indexed' };
40
+ }
11
41
  /**
12
42
  * Register stats, list, emit, learn, and search subcommands on the hooks command.
13
43
  */
@@ -161,10 +191,27 @@ export function registerStatsHooks(hooks) {
161
191
  tags: options.tags || [],
162
192
  },
163
193
  });
194
+ // #981: COMMITTED_PENDING_INDEX means the authoritative SQLite row was
195
+ // written and only the derived vector index is unavailable (e.g. no
196
+ // embedding runtime). That is a stored pattern, not a failure.
197
+ let pattern = result.success ? result.value : null;
198
+ let indexCause;
164
199
  if (!result.success) {
165
- throw new Error(result.error.message);
200
+ const committedId = committedPendingIndexPatternId(result.error);
201
+ if (!committedId) {
202
+ throw new Error(result.error.message);
203
+ }
204
+ pattern = await reasoningBank.getPattern(committedId);
205
+ if (!pattern) {
206
+ throw new Error(result.error.message);
207
+ }
208
+ const cause = result.error.cause;
209
+ indexCause = cause instanceof Error ? cause.message : 'the vector index is unavailable';
166
210
  }
167
- const pattern = result.value;
211
+ if (!pattern) {
212
+ throw new Error('learn failed: no pattern returned');
213
+ }
214
+ const { vectorIndex, notice: pendingWarning } = describeVectorIndexState(pattern, indexCause);
168
215
  if (options.json) {
169
216
  printJson({
170
217
  success: true,
@@ -174,6 +221,8 @@ export function registerStatsHooks(hooks) {
174
221
  type: pattern.patternType,
175
222
  domain: pattern.qeDomain,
176
223
  },
224
+ vectorIndex,
225
+ ...(pendingWarning ? { warning: pendingWarning } : {}),
177
226
  });
178
227
  }
179
228
  else {
@@ -181,6 +230,9 @@ export function registerStatsHooks(hooks) {
181
230
  console.log(chalk.dim(` ID: ${pattern.id}`));
182
231
  console.log(chalk.dim(` Domain: ${pattern.qeDomain}`));
183
232
  console.log(chalk.dim(` Tier: ${pattern.tier}`));
233
+ if (pendingWarning) {
234
+ console.log(chalk.yellow(` ${vectorIndex === 'pending' ? 'Vector index pending' : 'Vector index'}: ${pendingWarning}`));
235
+ }
184
236
  }
185
237
  }
186
238
  catch (error) {
@@ -12,6 +12,7 @@
12
12
  import { Command } from 'commander';
13
13
  import chalk from 'chalk';
14
14
  import path from 'node:path';
15
+ import { randomUUID } from 'node:crypto';
15
16
  import { findProjectRoot } from '../../kernel/unified-memory.js';
16
17
  import { existsSync, writeFileSync, readFileSync, copyFileSync, renameSync } from 'node:fs';
17
18
  import { safeJsonParse } from '../../shared/safe-json.js';
@@ -24,6 +25,7 @@ import { backupLearningDatabase, restoreLearningDatabase } from './learning-snap
24
25
  import { createSQLitePatternStore } from '../../learning/sqlite-persistence.js';
25
26
  import { getActiveEmbeddingSpaceIdentity } from '../../learning/real-embeddings.js';
26
27
  import { inspectEmbeddingSpaceRows } from '../../learning/embedding-space.js';
28
+ import { committedPendingIndexPatternId } from '../../learning/pattern-mutation-error.js';
27
29
  // Extracted helpers
28
30
  import { initializeLearningSystem, printJson, printSuccess, printError, printInfo, displayDashboard, getDbPath, compressFile, decompressFile, verifyDatabaseIntegrity, getSchemaVersion, padRight, EXPORT_FORMAT_VERSION, DOMAIN_MAPPING, PATTERN_TYPE_MAPPING, } from './learning-helpers.js';
29
31
  // ============================================================================
@@ -151,11 +153,29 @@ function registerBackfillEmbeddingsCommand(learning) {
151
153
  }
152
154
  const result = await store.backfillEmbeddings(batchSize);
153
155
  const after = store.getGhostPatternCount();
156
+ // #981 review B2: backfill writes SQLite vectors only. Opening the
157
+ // reasoning bank reconciles the RVF index with them (ingesting just
158
+ // the ids it is missing), so backfilled patterns reach vector search
159
+ // even when patterns.rvf already held other vectors.
160
+ let rvfIndex = { skipped: 'vector index unavailable' };
161
+ if (result.processed > 0) {
162
+ try {
163
+ const reasoningBank = await initializeLearningSystem();
164
+ const reconciled = reasoningBank.getLastVectorReconcile() ?? reasoningBank.reconcileVectorIndex();
165
+ if (reconciled) {
166
+ rvfIndex = { ingested: reconciled.ingested, missing: reconciled.missing, capped: reconciled.capped };
167
+ }
168
+ }
169
+ catch (error) {
170
+ rvfIndex = { skipped: error instanceof Error ? error.message : String(error) };
171
+ }
172
+ }
154
173
  const output = {
155
174
  ...result,
156
175
  batchSize,
157
176
  missingBefore: before.withoutEmbeddings,
158
177
  missingAfter: after.withoutEmbeddings,
178
+ rvfIndex,
159
179
  };
160
180
  if (options.json) {
161
181
  printJson(output);
@@ -167,6 +187,9 @@ function registerBackfillEmbeddingsCommand(learning) {
167
187
  console.log(` Errors: ${result.errors}`);
168
188
  console.log(` Remaining missing: ${after.withoutEmbeddings}`);
169
189
  console.log(` Method: ${result.method}`);
190
+ console.log('ingested' in rvfIndex
191
+ ? ` Vector index (RVF): ingested ${rvfIndex.ingested} of ${rvfIndex.missing} missing${rvfIndex.capped ? ' (capped; rerun to continue)' : ''}`
192
+ : ` Vector index (RVF): not updated (${rvfIndex.skipped})`);
170
193
  console.log('');
171
194
  }
172
195
  }
@@ -416,6 +439,7 @@ function registerImportCommand(learning) {
416
439
  const reasoningBank = await initializeLearningSystem();
417
440
  let imported = 0;
418
441
  let skipped = 0;
442
+ let pendingIndex = 0;
419
443
  const errors = [];
420
444
  if (!options.dryRun) {
421
445
  for (const pattern of importData.patterns) {
@@ -424,8 +448,17 @@ function registerImportCommand(learning) {
424
448
  patternType: pattern.patternType, name: pattern.name,
425
449
  description: pattern.description, template: pattern.template, context: pattern.context,
426
450
  });
427
- if (result.success)
451
+ if (result.success) {
452
+ imported++;
453
+ // #981 review N2: stored text-only (no embedding runtime) → vector pending.
454
+ if (!(result.value.embedding && result.value.embedding.length > 0))
455
+ pendingIndex++;
456
+ }
457
+ // #981: the row committed; only its vector index is pending.
458
+ else if (committedPendingIndexPatternId(result.error)) {
428
459
  imported++;
460
+ pendingIndex++;
461
+ }
429
462
  else {
430
463
  skipped++;
431
464
  errors.push(`${pattern.name}: ${result.error.message}`);
@@ -438,7 +471,7 @@ function registerImportCommand(learning) {
438
471
  }
439
472
  }
440
473
  if (options.json) {
441
- printJson({ dryRun: options.dryRun || false, totalPatterns: importData.patterns.length, imported, skipped, errors });
474
+ printJson({ dryRun: options.dryRun || false, totalPatterns: importData.patterns.length, imported, skipped, pendingIndex, errors });
442
475
  }
443
476
  else {
444
477
  console.log(chalk.bold('\n📥 Pattern Import\n'));
@@ -450,6 +483,8 @@ function registerImportCommand(learning) {
450
483
  }
451
484
  else {
452
485
  console.log(chalk.green(`\n Imported: ${imported}`));
486
+ if (pendingIndex > 0)
487
+ console.log(chalk.yellow(` Vector index pending: ${pendingIndex} (run "aqe learning backfill-embeddings" once an embedder is available)`));
453
488
  if (skipped > 0)
454
489
  console.log(chalk.yellow(` Skipped: ${skipped}`));
455
490
  }
@@ -593,7 +628,8 @@ function registerExtractCommand(learning) {
593
628
  template: { type: 'code', content: templateContent, variables: [{ name: 'implementation', type: 'code', required: true, description: 'Implementation code for this pattern' }] },
594
629
  context: { tags: [p.domain, p.patternType, `sources:${p.sourceCount}`, `reward:${p.avgReward.toFixed(2)}`] },
595
630
  });
596
- if (result.success)
631
+ // #981: a committed row with a pending vector index is stored.
632
+ if (result.success || committedPendingIndexPatternId(result.error))
597
633
  stored++;
598
634
  else
599
635
  errors.push(`${p.name}: ${result.error.message}`);
@@ -702,8 +738,8 @@ function registerBackupCommand(learning) {
702
738
  const dbPath = getDbPath();
703
739
  if (!existsSync(dbPath))
704
740
  throw new Error(`No learning database found at: ${dbPath}`);
705
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
706
- const defaultOutput = path.join(process.cwd(), 'backups', `learning-${timestamp}.db`);
741
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 23);
742
+ const defaultOutput = path.join(process.cwd(), 'backups', `learning-${timestamp}-${randomUUID()}.db`);
707
743
  const outputPath = options.output ? path.resolve(options.output) : defaultOutput;
708
744
  const snapshot = await backupLearningDatabase(dbPath, outputPath, options);
709
745
  const { backupPath: finalPath, sourceSizeKB, backupSizeKB: finalSizeKB, schemaVersion } = snapshot;
@@ -962,7 +998,8 @@ function registerImportMergeCommand(learning) {
962
998
  }
963
999
  try {
964
1000
  const result = await reasoningBank.storePattern({ patternType: pattern.patternType, name: pattern.name, description: pattern.description, template: pattern.template, context: pattern.context });
965
- if (result.success) {
1001
+ // #981: a committed row with a pending vector index is imported.
1002
+ if (result.success || committedPendingIndexPatternId(result.error)) {
966
1003
  if (isDuplicate)
967
1004
  updated++;
968
1005
  else
@@ -1148,14 +1185,18 @@ function registerDreamCommand(learning) {
1148
1185
  template: { type: 'workflow', content: insight.suggestedAction || insight.description, variables: [] },
1149
1186
  context: { tags: ['dream-generated', insight.type, ...insight.sourceConcepts.slice(0, 3)], complexity: 'medium' },
1150
1187
  });
1188
+ // #981: a committed row with a pending vector index is a created pattern.
1189
+ const createdPatternId = patternResult.success
1190
+ ? patternResult.value.id
1191
+ : committedPendingIndexPatternId(patternResult.error);
1151
1192
  if (options.json) {
1152
- printJson({ insightId: insight.id, applied: result.success, patternId: patternResult.success ? patternResult.value.id : null, error: result.error || (patternResult.success ? null : patternResult.error?.message) });
1193
+ printJson({ insightId: insight.id, applied: result.success, patternId: createdPatternId, error: result.error || (createdPatternId ? null : patternResult.success ? null : patternResult.error?.message) });
1153
1194
  }
1154
1195
  else {
1155
1196
  if (result.success) {
1156
1197
  printSuccess(`Applied insight ${insight.id.slice(0, 8)}`);
1157
- if (patternResult.success)
1158
- printSuccess(`Created pattern ${patternResult.value.id} in ReasoningBank`);
1198
+ if (createdPatternId)
1199
+ printSuccess(`Created pattern ${createdPatternId} in ReasoningBank`);
1159
1200
  }
1160
1201
  else
1161
1202
  printError(`Failed to apply insight: ${result.error}`);
@@ -5,5 +5,21 @@
5
5
  */
6
6
  import { Command } from 'commander';
7
7
  import type { CLIContext } from '../handlers/interfaces.js';
8
+ import { type SecurityScanResult } from '../utils/ci-output.js';
9
+ /** Name of the CLI check for the OSV dependency advisory scan (#1049). */
10
+ export declare const DEPENDENCY_CHECK = "Dependency advisories";
11
+ /** #1049: dependency advisories could not be checked; the dependency result is UNMEASURED (same code as coverage/quality). */
12
+ export declare const EXIT_DEPENDENCIES_UNMEASURED = 3;
13
+ /**
14
+ * `aqe security` exit contract:
15
+ * 0 = every requested check completed, no medium+ findings
16
+ * 1 = high/critical findings, non-compliance, or a non-dependency check incomplete/failed
17
+ * 2 = medium findings only, every requested check complete
18
+ * 3 = dependency advisories could not be checked (failed or partial OSV lookup) and
19
+ * there are no high/critical findings, non-compliance or other incomplete checks:
20
+ * UNMEASURED, never a clean exit (#1049). Medium findings plus an incomplete
21
+ * dependency scan also exit 3: the result is unmeasured, not a medium-only verdict.
22
+ */
23
+ export declare function securityExitCode(result: SecurityScanResult): number;
8
24
  export declare function createSecurityCommand(context: CLIContext, cleanupAndExit: (code: number) => Promise<never>, ensureInitialized: () => Promise<boolean>): Command;
9
25
  //# sourceMappingURL=security.d.ts.map