agentic-qe 3.14.2 → 3.14.3

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 (372) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +72 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +5 -5
  5. package/dist/cli/chunks/adapter-AKQYU6UH.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-SD5N32MX.js → agent-booster-wasm-TQOMLWWX.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-OZRSJM7F.js → agent-handler-Q3SEMMI2.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-NYTRANRN.js → agent-memory-branch-SJXAQSZI.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-MICRPL3N.js +2 -0
  10. package/dist/cli/chunks/{arena-EX3SC2DP.js → arena-7RC7TBGW.js} +4 -4
  11. package/dist/cli/chunks/{arena-FOTVSRK4.js → arena-UPB7TKUY.js} +2 -2
  12. package/dist/cli/chunks/{audit-Q5GHSUQY.js → audit-IXN5R4WB.js} +3 -3
  13. package/dist/cli/chunks/base-DZK36ITB.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-S7M5R2HS.js → better-sqlite3-RP4DEGK3.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-5FSA46R5.js → brain-handler-H5OVZ22L.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-RWAXTGEU.js → branch-enumerator-VPRWDGFJ.js} +2 -2
  17. package/dist/cli/chunks/{browser-IGDESJGF.js → browser-B6E7JPPJ.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-ADK54DOE.js +2 -0
  19. package/dist/cli/chunks/{chunk-E3Q7WNJD.js → chunk-26GM5CWD.js} +3 -3
  20. package/dist/cli/chunks/{chunk-BWRHOIYC.js → chunk-2GNRW3OD.js} +2 -2
  21. package/dist/cli/chunks/{chunk-ZCDXJ27H.js → chunk-2IGT5WNQ.js} +1 -1
  22. package/dist/cli/chunks/{chunk-7SK6IMGZ.js → chunk-2WT7AKKK.js} +2 -2
  23. package/dist/cli/chunks/{chunk-DVHWLAEO.js → chunk-33VPWGCM.js} +3 -3
  24. package/dist/cli/chunks/{chunk-NAZVPZJS.js → chunk-37BASGWC.js} +2 -2
  25. package/dist/cli/chunks/{chunk-Q335R4MR.js → chunk-3ABRGG3C.js} +2 -2
  26. package/dist/cli/chunks/{chunk-IWFL6EFI.js → chunk-3P6NCFI2.js} +2 -2
  27. package/dist/cli/chunks/{chunk-4AKGBUYD.js → chunk-42VSQ2MX.js} +3 -3
  28. package/dist/cli/chunks/{chunk-2LKAMMMI.js → chunk-44WISFTU.js} +2 -2
  29. package/dist/cli/chunks/{chunk-RFNEHNJV.js → chunk-4C6UJIHB.js} +1 -1
  30. package/dist/cli/chunks/{chunk-CTCQOYBS.js → chunk-4JBFJTHJ.js} +1 -1
  31. package/dist/cli/chunks/{chunk-GJAWEUIN.js → chunk-4OUPCTBS.js} +2 -2
  32. package/dist/cli/chunks/{chunk-2EHFEMRU.js → chunk-4Q35TI6Z.js} +2 -2
  33. package/dist/cli/chunks/{chunk-N3RN4QTC.js → chunk-4RP5VUBI.js} +2 -2
  34. package/dist/cli/chunks/{chunk-ZYLSOBOR.js → chunk-4TXAP3YH.js} +1 -1
  35. package/dist/cli/chunks/{chunk-KZOBLLXW.js → chunk-4UDZLD42.js} +2 -2
  36. package/dist/cli/chunks/{chunk-UYTWDS2R.js → chunk-4W7QVUNO.js} +2 -2
  37. package/dist/cli/chunks/{chunk-4ZUZDFAA.js → chunk-4XPPMADQ.js} +2 -2
  38. package/dist/cli/chunks/{chunk-TENYL5TI.js → chunk-527HQAY7.js} +2 -2
  39. package/dist/cli/chunks/chunk-5BLFXQEB.js +96 -0
  40. package/dist/cli/chunks/{chunk-OX6T26CD.js → chunk-5DFHE4H5.js} +3 -3
  41. package/dist/cli/chunks/{chunk-T46LOLW3.js → chunk-5F6DWHQG.js} +2 -2
  42. package/dist/cli/chunks/{chunk-FVGTINVR.js → chunk-5FOZO7KM.js} +81 -65
  43. package/dist/cli/chunks/{chunk-T4C56HBW.js → chunk-5IAB5NRZ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-4MH22236.js → chunk-5P3G6ZW4.js} +1 -1
  45. package/dist/cli/chunks/{chunk-7AFBNU6K.js → chunk-5Y5TC6BY.js} +2 -2
  46. package/dist/cli/chunks/{chunk-VSYBMNIR.js → chunk-6F2RM6X2.js} +1 -1
  47. package/dist/cli/chunks/{chunk-ICKLBATY.js → chunk-72UJXEKQ.js} +2 -2
  48. package/dist/cli/chunks/{chunk-A7N3YUDJ.js → chunk-74PK3NEW.js} +2 -2
  49. package/dist/cli/chunks/{chunk-PMUBG2RU.js → chunk-7BUERZYL.js} +2 -2
  50. package/dist/cli/chunks/{chunk-HZMLNM2T.js → chunk-7FYMDKQH.js} +174 -169
  51. package/dist/cli/chunks/{chunk-67A6PEZM.js → chunk-7G6UX2QN.js} +2 -2
  52. package/dist/cli/chunks/{chunk-G2CLZVYI.js → chunk-7JQHPANT.js} +3 -3
  53. package/dist/cli/chunks/{chunk-TLPL3EQY.js → chunk-7SLAZAVU.js} +2 -2
  54. package/dist/cli/chunks/{chunk-4UCMTYFQ.js → chunk-7Y2CEXRS.js} +4 -4
  55. package/dist/cli/chunks/{chunk-2H5YJ5ZK.js → chunk-AB4U6ZNI.js} +2 -2
  56. package/dist/cli/chunks/chunk-AWNYEAGB.js +2 -0
  57. package/dist/cli/chunks/chunk-B2ZONZPZ.js +5 -0
  58. package/dist/cli/chunks/{chunk-6F4WHN7D.js → chunk-B5XFDFBT.js} +1 -1
  59. package/dist/cli/chunks/{chunk-5EHLGOWW.js → chunk-B7SWW5A6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-P64DMQ2C.js → chunk-BN7DKW5D.js} +1 -1
  61. package/dist/cli/chunks/{chunk-CIESXO73.js → chunk-C46DMCWF.js} +1 -1
  62. package/dist/cli/chunks/{chunk-HZ6NEJMO.js → chunk-CB5JPRIZ.js} +2 -2
  63. package/dist/cli/chunks/{chunk-SEHCX4NH.js → chunk-CBOPBYPU.js} +1 -1
  64. package/dist/cli/chunks/{chunk-LWUJQGCS.js → chunk-CR3QGHVN.js} +2 -2
  65. package/dist/cli/chunks/{chunk-NHHWLJQF.js → chunk-D4Z2N74A.js} +1 -1
  66. package/dist/cli/chunks/{chunk-4K27ESCA.js → chunk-DBA3N742.js} +1 -1
  67. package/dist/cli/chunks/{chunk-2TG24LYQ.js → chunk-DX3C5HPN.js} +1 -1
  68. package/dist/cli/chunks/{chunk-S4MR6RTE.js → chunk-E3FBW6G2.js} +1 -1
  69. package/dist/cli/chunks/{chunk-GHUPID5E.js → chunk-ELU4IC3I.js} +1 -1
  70. package/dist/cli/chunks/{chunk-C7AXRI7E.js → chunk-EY4OQHU3.js} +1 -1
  71. package/dist/cli/chunks/{chunk-6LMLN5R2.js → chunk-F67AV5P2.js} +2 -2
  72. package/dist/cli/chunks/chunk-FD2JFEQC.js +2 -0
  73. package/dist/cli/chunks/chunk-FKG5OQFT.js +2 -0
  74. package/dist/cli/chunks/{chunk-UIGEUEBT.js → chunk-FUE6LL72.js} +2 -2
  75. package/dist/cli/chunks/{chunk-4RT7I7PI.js → chunk-G5C2XVZC.js} +1 -1
  76. package/dist/cli/chunks/{chunk-WVY22NHZ.js → chunk-G6DCESPU.js} +2 -2
  77. package/dist/cli/chunks/{chunk-3DFFFXXO.js → chunk-G6ZHTF42.js} +2 -2
  78. package/dist/cli/chunks/{chunk-CH2TQCV5.js → chunk-GNTVFN7D.js} +1 -1
  79. package/dist/cli/chunks/{chunk-WMW47QMR.js → chunk-H5ZRV5K5.js} +2 -2
  80. package/dist/cli/chunks/{chunk-4M6A3PVJ.js → chunk-H6XBM2LY.js} +2 -2
  81. package/dist/cli/chunks/{chunk-4N44UJGI.js → chunk-HOQQCY2K.js} +2 -2
  82. package/dist/cli/chunks/{chunk-D4RCV4LY.js → chunk-HRUU7E3D.js} +2 -2
  83. package/dist/cli/chunks/{chunk-EAJK25IS.js → chunk-HXE5NBJG.js} +1 -1
  84. package/dist/cli/chunks/{chunk-IUNMW454.js → chunk-I4NDQGKP.js} +2 -2
  85. package/dist/cli/chunks/{chunk-CJHVOBJY.js → chunk-IFFZR6GY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-YN6W2XIT.js → chunk-IKIITGU5.js} +3 -3
  87. package/dist/cli/chunks/{chunk-JIUF6NV6.js → chunk-IP7NSFQQ.js} +2 -2
  88. package/dist/cli/chunks/{chunk-3C2K4YMS.js → chunk-IQEJGZV6.js} +3 -3
  89. package/dist/cli/chunks/{chunk-RGH3WGWD.js → chunk-IU4EBTA2.js} +3 -3
  90. package/dist/cli/chunks/{chunk-QW4LN5NK.js → chunk-JBB7E26R.js} +2 -2
  91. package/dist/cli/chunks/{chunk-RYJHREYS.js → chunk-JRYZKBY2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-6EHN7Q2Q.js → chunk-JV4FZUE7.js} +2 -2
  93. package/dist/cli/chunks/{chunk-PZKZY6PB.js → chunk-KF63AYXD.js} +2 -2
  94. package/dist/cli/chunks/{chunk-ZFGND4QK.js → chunk-KPMGTVB4.js} +1 -1
  95. package/dist/cli/chunks/chunk-L2GKMBDP.js +2 -0
  96. package/dist/cli/chunks/{chunk-7FWP7CZY.js → chunk-LHGNNZ76.js} +3 -3
  97. package/dist/cli/chunks/{chunk-HSJ5FQCF.js → chunk-LKN7JQTW.js} +2 -2
  98. package/dist/cli/chunks/{chunk-EH5OCHAJ.js → chunk-LLVGTEHU.js} +1 -1
  99. package/dist/cli/chunks/{chunk-TYVQNYXX.js → chunk-LS3EUMBP.js} +6 -6
  100. package/dist/cli/chunks/{chunk-F2KRT2II.js → chunk-LTBCAFTZ.js} +3 -3
  101. package/dist/cli/chunks/{chunk-PVHO6KLB.js → chunk-LVLBIKJD.js} +1 -1
  102. package/dist/cli/chunks/{chunk-5WJUNRTY.js → chunk-MDZ6RRLX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-W4OQYLYO.js → chunk-MWWAMDHI.js} +1 -1
  104. package/dist/cli/chunks/{chunk-N5ZRUOMR.js → chunk-MXMFGSWR.js} +2 -2
  105. package/dist/cli/chunks/{chunk-L2F7FVIU.js → chunk-N4H2QOT5.js} +2 -2
  106. package/dist/cli/chunks/{chunk-R5RNOLHI.js → chunk-NBWQBQO5.js} +1 -1
  107. package/dist/cli/chunks/{chunk-IVGVOGIZ.js → chunk-NN76NTOX.js} +1 -1
  108. package/dist/cli/chunks/{chunk-OBCKP3G4.js → chunk-NTSXHZTC.js} +2 -2
  109. package/dist/cli/chunks/{chunk-YF5OP6CR.js → chunk-OV5EZO3U.js} +2 -2
  110. package/dist/cli/chunks/{chunk-JQ2ZD3WO.js → chunk-OVDKWCD7.js} +2 -2
  111. package/dist/cli/chunks/{chunk-WBH4C4BG.js → chunk-OVPJQWHW.js} +2 -2
  112. package/dist/cli/chunks/{chunk-6SZKLWZT.js → chunk-OY7MLMEX.js} +5 -5
  113. package/dist/cli/chunks/{chunk-NG2UVPTW.js → chunk-OYMLHX2B.js} +1 -1
  114. package/dist/cli/chunks/{chunk-RVCWSAXI.js → chunk-PI74GOE4.js} +2 -2
  115. package/dist/cli/chunks/{chunk-42WUDDUU.js → chunk-PZTVH2AS.js} +2 -2
  116. package/dist/cli/chunks/{chunk-4PH7O5ZH.js → chunk-QLWNXBRU.js} +2 -2
  117. package/dist/cli/chunks/{chunk-FPHPP5TQ.js → chunk-R2AFVFRF.js} +1 -1
  118. package/dist/cli/chunks/{chunk-MWQTACNA.js → chunk-RKJZWWB7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-FREF6Y4L.js → chunk-ROX7NLS4.js} +2 -2
  120. package/dist/cli/chunks/{chunk-K574FLVB.js → chunk-RTJ2M6V6.js} +2 -2
  121. package/dist/cli/chunks/{chunk-NWFIJNEB.js → chunk-SG47AXJG.js} +1 -1
  122. package/dist/cli/chunks/{chunk-UHTAI4ZB.js → chunk-SGXSB7YO.js} +1 -1
  123. package/dist/cli/chunks/{chunk-PWEIDHT7.js → chunk-SHGKY3QB.js} +2 -2
  124. package/dist/cli/chunks/{chunk-MH73D5TN.js → chunk-SJPZSCZP.js} +2 -2
  125. package/dist/cli/chunks/{chunk-3WV4H33V.js → chunk-SQ3PPISY.js} +1 -1
  126. package/dist/cli/chunks/{chunk-RCI64RIJ.js → chunk-STRDSVH3.js} +2 -2
  127. package/dist/cli/chunks/{chunk-GHQ5PUOV.js → chunk-T35GZXTU.js} +2 -2
  128. package/dist/cli/chunks/{chunk-DRO5NJZA.js → chunk-T62DH4GG.js} +2 -2
  129. package/dist/cli/chunks/{chunk-W2FLULF4.js → chunk-TFHQE6NK.js} +2 -2
  130. package/dist/cli/chunks/{chunk-LML5VTFK.js → chunk-TGLAWI62.js} +1 -1
  131. package/dist/cli/chunks/{chunk-KFXZDQ5J.js → chunk-TISSZFHO.js} +1 -1
  132. package/dist/cli/chunks/{chunk-KPFG4OIM.js → chunk-TJEIOE7F.js} +1 -1
  133. package/dist/cli/chunks/{chunk-57TNBR2P.js → chunk-TTMHIOQ3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-ARMZYHYL.js → chunk-UHQY3GK7.js} +2 -2
  135. package/dist/cli/chunks/{chunk-ADK7DF3G.js → chunk-UMENRGHK.js} +2 -2
  136. package/dist/cli/chunks/{chunk-ZWRQ5VAU.js → chunk-UMNYF5EZ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-G6AV2HGY.js → chunk-UTVRQEZM.js} +3 -3
  138. package/dist/cli/chunks/{chunk-VOYJJ3KA.js → chunk-UYJHYMEQ.js} +2 -2
  139. package/dist/cli/chunks/{chunk-KEEBUVGV.js → chunk-V4AOVDCJ.js} +2 -2
  140. package/dist/cli/chunks/{chunk-HBTC4L53.js → chunk-VIDBBB6F.js} +2 -2
  141. package/dist/cli/chunks/{chunk-PFXX5Q32.js → chunk-VWNHKYK7.js} +2 -2
  142. package/dist/cli/chunks/{chunk-DW6ZMNMR.js → chunk-WYMGK5DX.js} +2 -2
  143. package/dist/cli/chunks/{chunk-CJCT452S.js → chunk-XA7CG3LH.js} +2 -2
  144. package/dist/cli/chunks/{chunk-QFUX7ELG.js → chunk-XX7HUSX2.js} +2 -2
  145. package/dist/cli/chunks/{chunk-WXMSRBQF.js → chunk-XXCYQXK3.js} +2 -2
  146. package/dist/cli/chunks/{chunk-6VKJAMZY.js → chunk-Y2DVFVGI.js} +1 -1
  147. package/dist/cli/chunks/{chunk-JDXLCNKV.js → chunk-Y5SQBI2F.js} +2 -2
  148. package/dist/cli/chunks/{chunk-QXTW7XCS.js → chunk-YAKS3CAB.js} +2 -2
  149. package/dist/cli/chunks/{chunk-Q3JHS3UD.js → chunk-YCBDE2N7.js} +2 -2
  150. package/dist/cli/chunks/{chunk-VNAKBHJI.js → chunk-YDNSLLBS.js} +2 -2
  151. package/dist/cli/chunks/{chunk-S7N4BKI3.js → chunk-YEXPFHV6.js} +2 -2
  152. package/dist/cli/chunks/{chunk-CG2MUD7U.js → chunk-YGB6R5DW.js} +1 -1
  153. package/dist/cli/chunks/{chunk-NNOMDM4N.js → chunk-YL7T3VV7.js} +2 -2
  154. package/dist/cli/chunks/{chunk-U54OOA24.js → chunk-ZHXWGNYM.js} +1 -1
  155. package/dist/cli/chunks/{chunk-NRR23SJV.js → chunk-ZK5JKHP4.js} +1 -1
  156. package/dist/cli/chunks/{chunk-XPLSLHRB.js → chunk-ZN3J6TZD.js} +1 -1
  157. package/dist/cli/chunks/{chunk-RHJVDCLV.js → chunk-ZUG5MOUB.js} +2 -2
  158. package/dist/cli/chunks/{ci-NTRH7PAW.js → ci-YVKDQWIX.js} +2 -2
  159. package/dist/cli/chunks/ci-output-LK3MBXLZ.js +2 -0
  160. package/dist/cli/chunks/{circuit-breaker-4WST3QSA.js → circuit-breaker-7AIXACR7.js} +2 -2
  161. package/dist/cli/chunks/{claude-flow-setup-KB4TKMYI.js → claude-flow-setup-UA7EO6VN.js} +2 -2
  162. package/dist/cli/chunks/client-M72GXFVQ.js +2 -0
  163. package/dist/cli/chunks/{cline-installer-W2ZHQ6WM.js → cline-installer-YDDCKKEV.js} +2 -2
  164. package/dist/cli/chunks/{code-TF2AVR5D.js → code-URB7UAKW.js} +2 -2
  165. package/dist/cli/chunks/{code-index-extractor-RMDRUVQJ.js → code-index-extractor-BL6HWH4Q.js} +2 -2
  166. package/dist/cli/chunks/{codex-installer-VSTRHJHV.js → codex-installer-2AVEO4EA.js} +2 -2
  167. package/dist/cli/chunks/{completions-3Q37QVFR.js → completions-RCKBSSSS.js} +2 -2
  168. package/dist/cli/chunks/{complexity-analyzer-3FNFLACD.js → complexity-analyzer-LEDG62YK.js} +2 -2
  169. package/dist/cli/chunks/{continuedev-installer-VTEXM455.js → continuedev-installer-VOTCEBFH.js} +2 -2
  170. package/dist/cli/chunks/{copilot-installer-AGY7DQUS.js → copilot-installer-NVTGLZX3.js} +2 -2
  171. package/dist/cli/chunks/core-handlers-C32RAMVI.js +2 -0
  172. package/dist/cli/chunks/{cost-tracker-LTZAQBX7.js → cost-tracker-GJIFB2BM.js} +2 -2
  173. package/dist/cli/chunks/{coverage-TT64IOS4.js → coverage-ZTPJWXWE.js} +3 -3
  174. package/dist/cli/chunks/cross-domain-router-UGFUCPKC.js +2 -0
  175. package/dist/cli/chunks/{cursor-installer-OVOJIOHN.js → cursor-installer-CMGJQMHX.js} +2 -2
  176. package/dist/cli/chunks/{daemon-DMFZMXKA.js → daemon-V456IWR3.js} +3 -3
  177. package/dist/cli/chunks/{daemon-XCULEHWY.js → daemon-Y2I3YVIU.js} +4 -4
  178. package/dist/cli/chunks/{dag-attention-scheduler-WW2RX4B5.js → dag-attention-scheduler-ZCBBOD3D.js} +2 -2
  179. package/dist/cli/chunks/{detect-QNWIM232.js → detect-2GHEA4A3.js} +2 -2
  180. package/dist/cli/chunks/{dist-node-6GQIY3CG.js → dist-node-44AGYJCH.js} +2 -2
  181. package/dist/cli/chunks/{domain-handler-6RJPDELX.js → domain-handler-IDLIEP6X.js} +2 -2
  182. package/dist/cli/chunks/{domain-transfer-WK524LBS.js → domain-transfer-KLEXGIRF.js} +2 -2
  183. package/dist/cli/chunks/dream-UFBBXY5W.js +2 -0
  184. package/dist/cli/chunks/{embed-and-insert-pattern-SO6GWJW7.js → embed-and-insert-pattern-DUW6K35A.js} +2 -2
  185. package/dist/cli/chunks/{eval-GL544IPO.js → eval-PR6YWDFM.js} +2 -2
  186. package/dist/cli/chunks/{experience-capture-middleware-BCCJ35OX.js → experience-capture-middleware-CJJJN7CF.js} +3 -3
  187. package/dist/cli/chunks/{fast-paths-CATDDBEU.js → fast-paths-LGLLKX6P.js} +2 -2
  188. package/dist/cli/chunks/{feature-flags-BUXNAORY.js → feature-flags-33D3I4DD.js} +2 -2
  189. package/dist/cli/chunks/{feature-flags-KNNWWP5G.js → feature-flags-QL4NCEGW.js} +2 -2
  190. package/dist/cli/chunks/{file-discovery-S4HF3O7D.js → file-discovery-GKCYJPFZ.js} +2 -2
  191. package/dist/cli/chunks/{fleet-DQVQQONW.js → fleet-QNT6X2YI.js} +3 -3
  192. package/dist/cli/chunks/{gnn-wrapper-G7ABZUG7.js → gnn-wrapper-ELSGT67Z.js} +2 -2
  193. package/dist/cli/chunks/{heartbeat-handler-UFMELIWT.js → heartbeat-handler-ZUI3DOOP.js} +4 -4
  194. package/dist/cli/chunks/heartbeat-scheduler-VQWHSGTY.js +2 -0
  195. package/dist/cli/chunks/hnsw-adapter-BS3NXWGU.js +2 -0
  196. package/dist/cli/chunks/hnsw-index-JP26B4HW.js +2 -0
  197. package/dist/cli/chunks/{hnsw-legacy-bridge-YIILSRXI.js → hnsw-legacy-bridge-EZMM5JWL.js} +2 -2
  198. package/dist/cli/chunks/{hnswlib-node-TSVRMXDH.js → hnswlib-node-G4CE3EOS.js} +2 -2
  199. package/dist/cli/chunks/{hooks-OHQPNK74.js → hooks-LCVXXA55.js} +10 -10
  200. package/dist/cli/chunks/{hypergraph-engine-LY7PJDSL.js → hypergraph-engine-6Z7RQ3HI.js} +2 -2
  201. package/dist/cli/chunks/{hypergraph-handler-YGDYZO6H.js → hypergraph-handler-PLI2GYPK.js} +3 -3
  202. package/dist/cli/chunks/impact-analyzer-WRE4CWPJ.js +2 -0
  203. package/dist/cli/chunks/{init-handler-MTK65LI3.js → init-handler-7VH3QJ5Y.js} +6 -6
  204. package/dist/cli/chunks/init-wizard-OFOEYB75.js +2 -0
  205. package/dist/cli/chunks/kernel-MXNFWNUD.js +2 -0
  206. package/dist/cli/chunks/{kilocode-installer-3IICU4RS.js → kilocode-installer-U3MW62DE.js} +2 -2
  207. package/dist/cli/chunks/{kiro-installer-MXOVQYQA.js → kiro-installer-PPEAC44T.js} +2 -2
  208. package/dist/cli/chunks/knowledge-graph-7JE2TVKJ.js +2 -0
  209. package/dist/cli/chunks/{learning-EV5LSOOM.js → learning-7B5NITDV.js} +3 -3
  210. package/dist/cli/chunks/{llm-router-7LYDJUOT.js → llm-router-BNEPT5OB.js} +4 -4
  211. package/dist/cli/chunks/llm-router-service-GTDVDKSU.js +2 -0
  212. package/dist/cli/chunks/{load-F4PVAMXQ.js → load-VO7ABNHV.js} +2 -2
  213. package/dist/cli/chunks/load-test-JZ4CLSBF.js +2 -0
  214. package/dist/cli/chunks/{mcp-DUYJUEME.js → mcp-THXEINCL.js} +2 -2
  215. package/dist/cli/chunks/{memory-XTTYORAS.js → memory-FZTT7ADM.js} +5 -5
  216. package/dist/cli/chunks/memory-backend-Q54CC5A5.js +2 -0
  217. package/dist/cli/chunks/memory-handlers-IIBJXKHZ.js +2 -0
  218. package/dist/cli/chunks/{multi-model-executor-R6XCTMCF.js → multi-model-executor-HEDVOZ6X.js} +2 -2
  219. package/dist/cli/chunks/{opencode-installer-33ULBU2F.js → opencode-installer-GQ7J5SBG.js} +2 -2
  220. package/dist/cli/chunks/{orchestrator-34ZJEKTJ.js → orchestrator-66JK2OS5.js} +5 -5
  221. package/dist/cli/chunks/pattern-null-store-W33O7FYO.js +2 -0
  222. package/dist/cli/chunks/{pattern-usage-recorder-GZ2M3F2E.js → pattern-usage-recorder-O6XHM2G5.js} +2 -2
  223. package/dist/cli/chunks/{pipeline-SR5OTY45.js → pipeline-UOG6UO6D.js} +2 -2
  224. package/dist/cli/chunks/{platform-VKJFJIAW.js → platform-Q7UH7FZQ.js} +2 -2
  225. package/dist/cli/chunks/{plugin-5C5UBQUQ.js → plugin-7OFLNGOS.js} +2 -2
  226. package/dist/cli/chunks/{prime-radiant-advanced-wasm-KO2PQI3D.js → prime-radiant-advanced-wasm-OSRDK2FW.js} +2 -2
  227. package/dist/cli/chunks/protocol-executor-VGN4M7XY.js +2 -0
  228. package/dist/cli/chunks/{protocol-handler-ZF74NIKA.js → protocol-handler-WLYTX6FS.js} +2 -2
  229. package/dist/cli/chunks/{prove-MO5TQQU4.js → prove-QVNE4V3J.js} +2 -2
  230. package/dist/cli/chunks/qe-reasoning-bank-7VB5LJGS.js +2 -0
  231. package/dist/cli/chunks/{quality-EYIN6AER.js → quality-DNE2RKE5.js} +2 -2
  232. package/dist/cli/chunks/{quality-gate-V6OQM57O.js → quality-gate-2K35GCSI.js} +3 -3
  233. package/dist/cli/chunks/queen-coordinator-HIDMJMMG.js +2 -0
  234. package/dist/cli/chunks/{real-embeddings-AR7TZX7U.js → real-embeddings-SF42ML7G.js} +2 -2
  235. package/dist/cli/chunks/{roocode-installer-46E626VZ.js → roocode-installer-NCEZPF5L.js} +2 -2
  236. package/dist/cli/chunks/router-CTIJS4D7.js +2 -0
  237. package/dist/cli/chunks/routing-feedback-LFYYZS5J.js +2 -0
  238. package/dist/cli/chunks/{routing-handler-ZNRVW6QW.js → routing-handler-4MXXZRYP.js} +2 -2
  239. package/dist/cli/chunks/{ruvector-commands-4L2CQMWS.js → ruvector-commands-WDFMMCMK.js} +2 -2
  240. package/dist/cli/chunks/rvf-dual-writer-MNPMIWVM.js +2 -0
  241. package/dist/cli/chunks/rvf-migration-adapter-DXOKSSNW.js +2 -0
  242. package/dist/cli/chunks/{rvf-migration-coordinator-H4RVGBIA.js → rvf-migration-coordinator-JT7ZCJY7.js} +2 -2
  243. package/dist/cli/chunks/rvf-native-adapter-PZKUKA7R.js +2 -0
  244. package/dist/cli/chunks/{rvf-store-integrity-OJGWWPLL.js → rvf-store-integrity-Q3FGYKFT.js} +2 -2
  245. package/dist/cli/chunks/safe-db-73BLFV2C.js +2 -0
  246. package/dist/cli/chunks/schedule-YVTGTTI4.js +2 -0
  247. package/dist/cli/chunks/scheduler-5DSAFIRQ.js +2 -0
  248. package/dist/cli/chunks/security-CJJ3WJSB.js +13 -0
  249. package/dist/cli/chunks/{shared-rvf-adapter-M6NNIZ5W.js → shared-rvf-adapter-6RGCTLHD.js} +2 -2
  250. package/dist/cli/chunks/{shared-rvf-dual-writer-LHMFCYVE.js → shared-rvf-dual-writer-KIA6Q6MT.js} +2 -2
  251. package/dist/cli/chunks/sqlite-persistence-LRG4IPCU.js +2 -0
  252. package/dist/cli/chunks/{status-handler-GMIOXQIE.js → status-handler-BADQV2KA.js} +2 -2
  253. package/dist/cli/chunks/{structural-health-YZXHVHM6.js → structural-health-VMYEYRZG.js} +2 -2
  254. package/dist/cli/chunks/{sync-GMPCPV5L.js → sync-PXLROLHB.js} +2 -2
  255. package/dist/cli/chunks/{sync-N56UQGCS.js → sync-ULY7T5II.js} +2 -2
  256. package/dist/cli/chunks/{task-handler-VTNRGAXP.js → task-handler-L7E2I267.js} +2 -2
  257. package/dist/cli/chunks/{task-handlers-FYSDH55N.js → task-handlers-6DPKE4AK.js} +3 -3
  258. package/dist/cli/chunks/{test-GQNCKRSP.js → test-WCLURQUT.js} +11 -11
  259. package/dist/cli/chunks/test-scheduling-4CNJA6TW.js +15 -0
  260. package/dist/cli/chunks/{token-bootstrap-76SRNXGG.js → token-bootstrap-GTI24JAL.js} +2 -2
  261. package/dist/cli/chunks/{token-usage-O7CZDP5Q.js → token-usage-DRVG6PKO.js} +2 -2
  262. package/dist/cli/chunks/{transformers-LTU4LSSC.js → transformers-IMDDAMYQ.js} +2 -2
  263. package/dist/cli/chunks/{tree-sitter-wasm-parser-NQSQCMBM.js → tree-sitter-wasm-parser-WBZIHVFA.js} +2 -2
  264. package/dist/cli/chunks/{types-OP6IWE6N.js → types-TXMY5M2K.js} +2 -2
  265. package/dist/cli/chunks/unified-memory-VBQ572X4.js +2 -0
  266. package/dist/cli/chunks/unified-memory-hnsw-J3L74ZRY.js +2 -0
  267. package/dist/cli/chunks/unified-persistence-EM2VYRTQ.js +2 -0
  268. package/dist/cli/chunks/{upgrade-OQWRBZ3R.js → upgrade-6ALSDWDD.js} +2 -2
  269. package/dist/cli/chunks/{validate-TH5SRP3E.js → validate-XF4ZG3LC.js} +2 -2
  270. package/dist/cli/chunks/{validate-swarm-UITL2JUS.js → validate-swarm-P5TAFRDA.js} +2 -2
  271. package/dist/cli/chunks/{vibium-O6PRAG4J.js → vibium-2XDXKNKZ.js} +2 -2
  272. package/dist/cli/chunks/visual-security-GX4S7K6O.js +2 -0
  273. package/dist/cli/chunks/{web-tree-sitter-XBFBY4OF.js → web-tree-sitter-4JVRQPX5.js} +2 -2
  274. package/dist/cli/chunks/{windsurf-installer-DVT5NRNY.js → windsurf-installer-WYJXVDO5.js} +2 -2
  275. package/dist/cli/chunks/witness-chain-QGKMHCNW.js +2 -0
  276. package/dist/cli/chunks/{witness-chain-VRSH2F36.js → witness-chain-RPZ2SE2V.js} +2 -2
  277. package/dist/cli/chunks/{witness-key-manager-GFHRDKQ4.js → witness-key-manager-LXG2VBQQ.js} +2 -2
  278. package/dist/cli/chunks/{workflow-HAZ6YKOG.js → workflow-2OYNO7UU.js} +4 -4
  279. package/dist/cli/chunks/workflow-orchestrator-KWHIJMFV.js +2 -0
  280. package/dist/cli/chunks/{wrappers-5LLLT7GM.js → wrappers-DIJNNFU6.js} +2 -2
  281. package/dist/cli/commands/security.js +167 -100
  282. package/dist/cli/commands/test.js +1 -0
  283. package/dist/cli/utils/ci-output.d.ts +17 -0
  284. package/dist/cli/utils/ci-output.js +34 -2
  285. package/dist/coordination/handlers/handler-types.d.ts +3 -0
  286. package/dist/coordination/handlers/quality-handlers.js +10 -0
  287. package/dist/coordination/handlers/security-handlers.js +168 -72
  288. package/dist/coordination/handlers/test-execution-handlers.js +37 -43
  289. package/dist/coordination/protocols/security-audit.d.ts +3 -0
  290. package/dist/coordination/protocols/security-audit.js +61 -39
  291. package/dist/coordination/result-saver.js +36 -5
  292. package/dist/coordination/task-executor.d.ts +3 -1
  293. package/dist/coordination/task-executor.js +4 -0
  294. package/dist/domains/security-compliance/interfaces.d.ts +5 -0
  295. package/dist/domains/security-compliance/interfaces.js +0 -6
  296. package/dist/domains/security-compliance/scan-discovery.d.ts +12 -0
  297. package/dist/domains/security-compliance/scan-discovery.js +105 -0
  298. package/dist/domains/security-compliance/scan-evidence.d.ts +57 -0
  299. package/dist/domains/security-compliance/scan-evidence.js +2 -0
  300. package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +3 -2
  301. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +109 -65
  302. package/dist/domains/security-compliance/services/semgrep-integration.d.ts +9 -2
  303. package/dist/domains/security-compliance/services/semgrep-integration.js +68 -20
  304. package/dist/domains/test-execution/services/flaky-detector.js +14 -3
  305. package/dist/domains/test-execution/services/retry-handler.js +18 -8
  306. package/dist/domains/test-execution/services/test-executor.js +46 -12
  307. package/dist/init/init-wizard-hooks.js +2 -2
  308. package/dist/integrations/agentic-flow/reasoning-bank/index.js +3 -20
  309. package/dist/integrations/coherence/engines/cohomology-adapter.js +100 -30
  310. package/dist/mcp/bundle.js +499 -478
  311. package/dist/mcp/handlers/domain-handler-configs.d.ts +22 -1
  312. package/dist/mcp/handlers/domain-handler-configs.js +50 -19
  313. package/dist/mcp/handlers/domain-handlers.d.ts +7 -5
  314. package/dist/mcp/handlers/domain-handlers.js +7 -5
  315. package/dist/mcp/protocol-server.js +9 -5
  316. package/dist/mcp/types.d.ts +5 -0
  317. package/dist/shared/llm/router/hybrid-router.d.ts +4 -0
  318. package/dist/shared/llm/router/hybrid-router.js +74 -26
  319. package/dist/shared/llm/router/types.d.ts +9 -2
  320. package/dist/shared/test-runner-verdict.d.ts +29 -0
  321. package/dist/shared/test-runner-verdict.js +43 -0
  322. package/dist/shared/vitest-json-report.d.ts +45 -0
  323. package/dist/shared/vitest-json-report.js +71 -0
  324. package/dist/test-scheduling/executors/vitest-executor.js +18 -6
  325. package/dist/validation/frontier-judge.d.ts +7 -4
  326. package/dist/validation/frontier-judge.js +11 -6
  327. package/package.json +6 -6
  328. package/dist/cli/chunks/adapter-OJF6LAJV.js +0 -2
  329. package/dist/cli/chunks/aqe-learning-engine-FGT474XB.js +0 -2
  330. package/dist/cli/chunks/base-HH765JFV.js +0 -2
  331. package/dist/cli/chunks/browser-workflow-NPM4FUPI.js +0 -2
  332. package/dist/cli/chunks/chunk-OC2CKU7I.js +0 -2
  333. package/dist/cli/chunks/chunk-PHHXHG2W.js +0 -2
  334. package/dist/cli/chunks/chunk-U2AY57XZ.js +0 -5
  335. package/dist/cli/chunks/chunk-WBMRADQP.js +0 -81
  336. package/dist/cli/chunks/ci-output-F57RSD35.js +0 -2
  337. package/dist/cli/chunks/client-GPZEC54E.js +0 -2
  338. package/dist/cli/chunks/core-handlers-YMGHYIBR.js +0 -2
  339. package/dist/cli/chunks/cross-domain-router-ECBNTGYJ.js +0 -2
  340. package/dist/cli/chunks/dream-EHGKCFWH.js +0 -2
  341. package/dist/cli/chunks/heartbeat-scheduler-UFEL2CBW.js +0 -2
  342. package/dist/cli/chunks/hnsw-adapter-BLSD45CX.js +0 -2
  343. package/dist/cli/chunks/hnsw-index-A3RZODEN.js +0 -2
  344. package/dist/cli/chunks/impact-analyzer-OXHD3FOH.js +0 -2
  345. package/dist/cli/chunks/init-wizard-PKZL7QBU.js +0 -2
  346. package/dist/cli/chunks/kernel-XWPM72UJ.js +0 -2
  347. package/dist/cli/chunks/knowledge-graph-FRKR5XWI.js +0 -2
  348. package/dist/cli/chunks/llm-router-service-R7A5HHDM.js +0 -2
  349. package/dist/cli/chunks/load-test-5IKDWSYL.js +0 -2
  350. package/dist/cli/chunks/memory-backend-7VW5QCMO.js +0 -2
  351. package/dist/cli/chunks/memory-handlers-VZH3R2TQ.js +0 -2
  352. package/dist/cli/chunks/pattern-null-store-BU6LCB2W.js +0 -2
  353. package/dist/cli/chunks/protocol-executor-BSP5LWJN.js +0 -2
  354. package/dist/cli/chunks/qe-reasoning-bank-J2RC7P25.js +0 -2
  355. package/dist/cli/chunks/queen-coordinator-XI5AJV2V.js +0 -2
  356. package/dist/cli/chunks/router-VXQYYA3D.js +0 -2
  357. package/dist/cli/chunks/routing-feedback-HZQTASFF.js +0 -2
  358. package/dist/cli/chunks/rvf-dual-writer-BDTLLJER.js +0 -2
  359. package/dist/cli/chunks/rvf-migration-adapter-IB343MDN.js +0 -2
  360. package/dist/cli/chunks/rvf-native-adapter-Y7SN7LHU.js +0 -2
  361. package/dist/cli/chunks/safe-db-2VTKKBJU.js +0 -2
  362. package/dist/cli/chunks/schedule-QJ4CFGJY.js +0 -2
  363. package/dist/cli/chunks/scheduler-2NHDQPC3.js +0 -2
  364. package/dist/cli/chunks/security-JF3BVNRO.js +0 -14
  365. package/dist/cli/chunks/sqlite-persistence-NVVAPZN3.js +0 -2
  366. package/dist/cli/chunks/test-scheduling-GPRXSIRP.js +0 -15
  367. package/dist/cli/chunks/unified-memory-DSTIEDSH.js +0 -2
  368. package/dist/cli/chunks/unified-memory-hnsw-KBV3P4OS.js +0 -2
  369. package/dist/cli/chunks/unified-persistence-XKCOUBKY.js +0 -2
  370. package/dist/cli/chunks/visual-security-TTWSPZTZ.js +0 -2
  371. package/dist/cli/chunks/witness-chain-2KY73HPN.js +0 -2
  372. package/dist/cli/chunks/workflow-orchestrator-UK56AVOT.js +0 -2
@@ -8,7 +8,10 @@
8
8
  */
9
9
  import { DomainHandlerConfig } from './handler-factory';
10
10
  import { TestGenerateParams, TestGenerateResult, TestExecuteParams, CoverageAnalyzeParams, CoverageAnalyzeResult, QualityAssessParams, SecurityScanParams, ContractValidateParams, AccessibilityTestParams, ChaosTestParams } from '../types';
11
+ import type { SecurityScanEvidence } from '../../domains/security-compliance/scan-evidence.js';
12
+ import type { SecurityCoverage } from '../../domains/security-compliance/interfaces.js';
11
13
  import { type RiskDecision } from '../../contracts/verdicts.js';
14
+ import type { EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
12
15
  export interface TestExecuteResult {
13
16
  taskId: string;
14
17
  status: string;
@@ -27,7 +30,10 @@ export interface TestExecuteResult {
27
30
  export interface QualityAssessResult {
28
31
  taskId: string;
29
32
  status: string;
30
- qualityScore: number;
33
+ /** Static analysis score; omitted for measured gates, which have no aggregate score. */
34
+ qualityScore?: number;
35
+ /** Canonical measured checks, present when runGate is true. */
36
+ checks?: EvaluatedQualityCheck[];
31
37
  passed: boolean;
32
38
  metrics: Record<string, number>;
33
39
  recommendations: string[];
@@ -45,9 +51,24 @@ export interface SecurityScanResult {
45
51
  medium: number;
46
52
  low: number;
47
53
  topVulnerabilities: unknown[];
54
+ findings?: unknown[];
48
55
  recommendations: string[];
49
56
  duration: number;
50
57
  savedFiles?: string[];
58
+ informational?: number;
59
+ evidence?: SecurityScanEvidence;
60
+ limitations?: readonly string[];
61
+ coverage?: SecurityCoverage;
62
+ filesScanned?: number;
63
+ jstsFilesScanned?: number;
64
+ otherFilesScanned?: number;
65
+ deepAnalysisPerformed?: boolean;
66
+ analysisDepth?: string;
67
+ scanTypes?: {
68
+ sast: boolean;
69
+ dast: boolean;
70
+ };
71
+ note?: string;
51
72
  }
52
73
  export interface ContractValidateResult {
53
74
  taskId: string;
@@ -406,14 +406,19 @@ export const qualityAssessConfig = {
406
406
  priority: 'p0',
407
407
  defaultTimeout: 180000,
408
408
  buildTaskDescription: (params) => `Assess quality with ${params.runGate ? 'quality gate' : 'metrics analysis'}`,
409
- mapToPayload: (params, routingResult) => ({
410
- runGate: params.runGate || false,
411
- threshold: params.threshold || 80,
412
- metrics: params.metrics || ['coverage', 'complexity', 'maintainability'],
413
- routingTier: routingResult?.decision.tier,
414
- useAgentBooster: routingResult?.useAgentBooster,
415
- compiledContext: routingResult?.compiledContext,
416
- }),
409
+ mapToPayload: (params, routingResult) => {
410
+ if (params.runGate !== undefined && typeof params.runGate !== 'boolean') {
411
+ throw new Error('runGate must be a boolean.');
412
+ }
413
+ return {
414
+ runGate: params.runGate ?? false,
415
+ threshold: params.threshold || 80,
416
+ metrics: params.metrics || ['coverage', 'complexity', 'maintainability'],
417
+ routingTier: routingResult?.decision.tier,
418
+ useAgentBooster: routingResult?.useAgentBooster,
419
+ compiledContext: routingResult?.compiledContext,
420
+ };
421
+ },
417
422
  mapToResult: (taskId, data, duration, savedFiles) => {
418
423
  // ADR-103: attach a schema-validated RiskDecision envelope at the MCP
419
424
  // boundary (additive — existing fields unchanged). Omit rather than
@@ -426,7 +431,8 @@ export const qualityAssessConfig = {
426
431
  return {
427
432
  taskId,
428
433
  status: 'completed',
429
- qualityScore: data.qualityScore || 0,
434
+ ...(typeof data.qualityScore === 'number' ? { qualityScore: data.qualityScore } : {}),
435
+ ...(Array.isArray(data.checks) ? { checks: data.checks } : {}),
430
436
  passed: data.passed || false,
431
437
  metrics: data.metrics || {},
432
438
  recommendations: data.recommendations || [],
@@ -452,25 +458,50 @@ export const securityScanConfig = {
452
458
  scanTypes.push('DAST');
453
459
  return `Security scan (${scanTypes.join(', ')}) for ${params.target || 'project'}`;
454
460
  },
455
- mapToPayload: (params, routingResult) => ({
456
- sast: params.sast !== false,
457
- dast: params.dast || false,
458
- compliance: params.compliance || [],
459
- target: params.target || '.',
460
- routingTier: routingResult?.decision.tier,
461
- useAgentBooster: routingResult?.useAgentBooster,
462
- compiledContext: routingResult?.compiledContext,
463
- }),
461
+ mapToPayload: (params, routingResult) => {
462
+ for (const name of ['sast', 'dast']) {
463
+ if (params[name] !== undefined && typeof params[name] !== 'boolean') {
464
+ throw new Error(`${name} must be a boolean`);
465
+ }
466
+ }
467
+ return {
468
+ sast: params.sast !== false,
469
+ dast: params.dast || false,
470
+ compliance: params.compliance || [],
471
+ target: params.target || '.',
472
+ targetUrl: params.targetUrl,
473
+ routingTier: routingResult?.decision.tier,
474
+ useAgentBooster: routingResult?.useAgentBooster,
475
+ compiledContext: routingResult?.compiledContext,
476
+ };
477
+ },
464
478
  mapToResult: (taskId, data, duration, savedFiles) => ({
465
479
  taskId,
466
- status: 'completed',
480
+ // Legacy task results without receipts cannot establish scan completeness.
481
+ status: data.evidence?.completeness === 'complete' ? 'completed'
482
+ : data.evidence?.completeness === 'partial' ? 'partial'
483
+ : data.evidence ? 'unavailable' : 'unverified',
467
484
  vulnerabilities: data.vulnerabilities || 0,
468
485
  critical: data.critical || 0,
469
486
  high: data.high || 0,
470
487
  medium: data.medium || 0,
471
488
  low: data.low || 0,
489
+ informational: data.informational || 0,
472
490
  topVulnerabilities: data.topVulnerabilities || [],
491
+ findings: data.findings,
473
492
  recommendations: data.recommendations || [],
493
+ evidence: data.evidence,
494
+ limitations: data.limitations || ['Execution receipts unavailable; scan completeness is unverified.'],
495
+ ...(data.evidence ? {
496
+ filesScanned: data.filesScanned,
497
+ jstsFilesScanned: data.jstsFilesScanned,
498
+ otherFilesScanned: data.otherFilesScanned,
499
+ coverage: data.coverage,
500
+ } : {}),
501
+ deepAnalysisPerformed: Boolean(data.evidence && data.deepAnalysisPerformed === true),
502
+ analysisDepth: data.analysisDepth,
503
+ scanTypes: data.scanTypes,
504
+ note: data.note,
474
505
  duration,
475
506
  savedFiles,
476
507
  }),
@@ -35,12 +35,13 @@ export declare function resetTaskExecutor(): void;
35
35
  */
36
36
  export declare const handleTestGenerate: (params: TestGenerateParams) => Promise<ToolResult<TestGenerateResult>>;
37
37
  /**
38
- * Handle test execution tasks
38
+ * Handle test execution tasks using a nonempty list of concrete file paths.
39
+ * Expand glob patterns before calling; the task handler rejects them.
39
40
  *
40
41
  * @example
41
42
  * ```typescript
42
43
  * const result = await handleTestExecute({
43
- * testFiles: ['tests/unit/*.test.ts'],
44
+ * testFiles: ['tests/unit/auth.test.ts', 'tests/unit/session.test.ts'],
44
45
  * parallel: true,
45
46
  * parallelism: 4,
46
47
  * });
@@ -61,14 +62,15 @@ export declare const handleTestExecute: (params: TestExecuteParams) => Promise<T
61
62
  */
62
63
  export declare const handleCoverageAnalyze: (params: CoverageAnalyzeParams) => Promise<ToolResult<CoverageAnalyzeResult>>;
63
64
  /**
64
- * Handle quality assessment tasks
65
+ * Handle quality assessment tasks. With runGate:true, require fresh canonical
66
+ * evidence and return individual measured checks, without a static aggregate
67
+ * score. Missing, stale, or malformed evidence returns an error. threshold and
68
+ * metrics customize analysis-only requests; gate thresholds match the CLI.
65
69
  *
66
70
  * @example
67
71
  * ```typescript
68
72
  * const result = await handleQualityAssess({
69
73
  * runGate: true,
70
- * threshold: 80,
71
- * metrics: ['coverage', 'complexity'],
72
74
  * });
73
75
  * ```
74
76
  */
@@ -42,12 +42,13 @@ export function resetTaskExecutor() {
42
42
  */
43
43
  export const handleTestGenerate = createDomainHandler(testGenerateConfig);
44
44
  /**
45
- * Handle test execution tasks
45
+ * Handle test execution tasks using a nonempty list of concrete file paths.
46
+ * Expand glob patterns before calling; the task handler rejects them.
46
47
  *
47
48
  * @example
48
49
  * ```typescript
49
50
  * const result = await handleTestExecute({
50
- * testFiles: ['tests/unit/*.test.ts'],
51
+ * testFiles: ['tests/unit/auth.test.ts', 'tests/unit/session.test.ts'],
51
52
  * parallel: true,
52
53
  * parallelism: 4,
53
54
  * });
@@ -68,14 +69,15 @@ export const handleTestExecute = createDomainHandler(testExecuteConfig);
68
69
  */
69
70
  export const handleCoverageAnalyze = createDomainHandler(coverageAnalyzeConfig);
70
71
  /**
71
- * Handle quality assessment tasks
72
+ * Handle quality assessment tasks. With runGate:true, require fresh canonical
73
+ * evidence and return individual measured checks, without a static aggregate
74
+ * score. Missing, stale, or malformed evidence returns an error. threshold and
75
+ * metrics customize analysis-only requests; gate thresholds match the CLI.
72
76
  *
73
77
  * @example
74
78
  * ```typescript
75
79
  * const result = await handleQualityAssess({
76
80
  * runGate: true,
77
- * threshold: 80,
78
- * metrics: ['coverage', 'complexity'],
79
81
  * });
80
82
  * ```
81
83
  */
@@ -434,7 +434,10 @@ export class MCPProtocolServer {
434
434
  // the same output, so we can short-circuit repeated calls with an O(1)
435
435
  // fingerprint lookup. Tools without isConcurrencySafe (writes, scans,
436
436
  // executions) always re-run.
437
- const cacheable = tool.definition.isConcurrencySafe === true;
437
+ // Explicit quality gates depend on current measured evidence and its age,
438
+ // not just arguments. A cached approval can outlive or contradict evidence.
439
+ const measuredQualityGate = name === 'quality_assess' && processedCtx.params?.runGate === true;
440
+ const cacheable = tool.definition.isConcurrencySafe === true && !measuredQualityGate;
438
441
  let cacheFingerprint = null;
439
442
  if (cacheable && process.env.AQE_SESSION_CACHE !== 'off') {
440
443
  try {
@@ -821,7 +824,7 @@ export class MCPProtocolServer {
821
824
  description: 'Execute test files in parallel with automatic retry on flaky failures. Example: test_execute_parallel({ testFiles: ["tests/auth.test.ts"], parallel: true })',
822
825
  category: 'domain',
823
826
  parameters: [
824
- { name: 'testFiles', type: 'array', description: 'Test files to execute' },
827
+ { name: 'testFiles', type: 'array', description: 'Nonempty list of concrete test file paths (relative to the project working directory or absolute). Expand glob patterns before calling; glob patterns are rejected.' },
825
828
  { name: 'parallel', type: 'boolean', description: 'Enable parallel execution', default: true },
826
829
  ],
827
830
  },
@@ -849,7 +852,7 @@ export class MCPProtocolServer {
849
852
  category: 'domain',
850
853
  isConcurrencySafe: true,
851
854
  parameters: [
852
- { name: 'runGate', type: 'boolean', description: 'Run quality gate evaluation', default: false },
855
+ { name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score.', default: false },
853
856
  ],
854
857
  },
855
858
  handler: (params) => handleQualityAssess(params),
@@ -858,12 +861,13 @@ export class MCPProtocolServer {
858
861
  this.registerTool({
859
862
  definition: {
860
863
  name: 'security_scan_comprehensive',
861
- description: 'Run SAST and/or DAST security scans with vulnerability classification. Example: security_scan_comprehensive({ target: "src/", sast: true })',
864
+ description: 'Run security scans with execution evidence and explicit coverage limitations. Complete means the declared required scope ran, not that all vulnerabilities are absent. Example: security_scan_comprehensive({ target: "src/", sast: true })',
862
865
  category: 'domain',
863
866
  parameters: [
864
867
  { name: 'sast', type: 'boolean', description: 'Run SAST scan', default: true },
865
868
  { name: 'dast', type: 'boolean', description: 'Run DAST scan', default: false },
866
- { name: 'target', type: 'string', description: 'Target to scan' },
869
+ { name: 'target', type: 'string', description: 'Source file or directory for SAST' },
870
+ { name: 'targetUrl', type: 'string', description: 'URL for a requested DAST scan' },
867
871
  ],
868
872
  },
869
873
  handler: (params) => handleSecurityScan(params),
@@ -176,6 +176,9 @@ export interface TestGenerateParams {
176
176
  * Test execution parameters
177
177
  */
178
178
  export interface TestExecuteParams {
179
+ /** Concrete test file paths for test_execute_parallel; provide a nonempty list.
180
+ * Expand glob patterns before calling. The task handler does not expand them.
181
+ */
179
182
  testFiles?: string[];
180
183
  testSuites?: string[];
181
184
  parallel?: boolean;
@@ -211,6 +214,8 @@ export interface SecurityScanParams {
211
214
  dast?: boolean;
212
215
  compliance?: string[];
213
216
  target?: string;
217
+ /** URL for explicitly requested dynamic scanning. */
218
+ targetUrl?: string;
214
219
  }
215
220
  /**
216
221
  * Contract validation parameters
@@ -113,6 +113,8 @@ export declare class HybridRouter {
113
113
  * Clear decision cache
114
114
  */
115
115
  clearCache(): void;
116
+ /** Select an explicitly pinned model without rules, shared cache, or fallback. */
117
+ private selectStrict;
116
118
  /**
117
119
  * Manual selection - use preferredProvider or default
118
120
  */
@@ -133,6 +135,8 @@ export declare class HybridRouter {
133
135
  * Execute request with fallback chain
134
136
  */
135
137
  private executeWithFallback;
138
+ /** Compare identity independently of the API transport hosting the model. */
139
+ private isSameModel;
136
140
  /**
137
141
  * Create a routing decision with proper model ID normalization (ADR-043)
138
142
  */
@@ -139,8 +139,11 @@ export class HybridRouter {
139
139
  async selectProvider(params) {
140
140
  await this.ensureInitialized();
141
141
  const startTime = Date.now();
142
+ // Strict requests carry their own execution identity. They must neither
143
+ // consume an ordinary cached decision nor replace one used by other callers.
144
+ const cacheDecision = this.config.cacheDecisions && !params.strictModel;
142
145
  // Check cache first
143
- if (this.config.cacheDecisions) {
146
+ if (cacheDecision) {
144
147
  const cacheKey = this.generateCacheKey(params);
145
148
  const cached = this.decisionCache.get(cacheKey);
146
149
  if (cached) {
@@ -152,26 +155,31 @@ export class HybridRouter {
152
155
  this.routerMetrics.recordCacheMiss();
153
156
  }
154
157
  let decision;
155
- switch (this.config.mode) {
156
- case 'manual':
157
- decision = await this.selectManual(params);
158
- break;
159
- case 'rule-based':
160
- decision = await this.selectRuleBased(params);
161
- break;
162
- case 'cost-optimized':
163
- decision = await this.selectCostOptimized(params);
164
- break;
165
- case 'performance-optimized':
166
- decision = await this.selectPerformanceOptimized(params);
167
- break;
168
- default:
169
- decision = await this.selectRuleBased(params);
158
+ if (params.strictModel) {
159
+ decision = this.selectStrict(params);
160
+ }
161
+ else {
162
+ switch (this.config.mode) {
163
+ case 'manual':
164
+ decision = await this.selectManual(params);
165
+ break;
166
+ case 'rule-based':
167
+ decision = await this.selectRuleBased(params);
168
+ break;
169
+ case 'cost-optimized':
170
+ decision = await this.selectCostOptimized(params);
171
+ break;
172
+ case 'performance-optimized':
173
+ decision = await this.selectPerformanceOptimized(params);
174
+ break;
175
+ default:
176
+ decision = await this.selectRuleBased(params);
177
+ }
170
178
  }
171
179
  // Update decision time
172
180
  decision.metadata.decisionTimeMs = Date.now() - startTime;
173
181
  // Cache the decision
174
- if (this.config.cacheDecisions) {
182
+ if (cacheDecision) {
175
183
  const cacheKey = this.generateCacheKey(params);
176
184
  this.decisionCache.set(cacheKey, decision);
177
185
  }
@@ -194,6 +202,9 @@ export class HybridRouter {
194
202
  // applies the same pin independently for advisor escalations.
195
203
  const agentName = params.agentType ?? '';
196
204
  if (shouldCyberPin(agentName) && (isOpus47(decision.model) || isOpus47(decision.providerModelId))) {
205
+ if (params.strictModel) {
206
+ throw createLLMError(`Strict model request for ${decision.model} conflicts with the cyber verification pin for ${agentName}`, 'MODEL_NOT_FOUND', { provider: decision.providerType, model: decision.model, retryable: false });
207
+ }
197
208
  const originalModel = decision.model;
198
209
  const originalProviderModelId = decision.providerModelId;
199
210
  decision.model = applyCyberPin(agentName, decision.model, CYBER_PIN_CHAT_FALLBACK);
@@ -313,6 +324,18 @@ export class HybridRouter {
313
324
  // ============================================================================
314
325
  // Provider Selection Methods
315
326
  // ============================================================================
327
+ /** Select an explicitly pinned model without rules, shared cache, or fallback. */
328
+ selectStrict(params) {
329
+ if (!params.model?.trim()) {
330
+ throw createLLMError('strictModel requires an explicit nonempty model', 'MODEL_NOT_FOUND', { retryable: false });
331
+ }
332
+ const providerType = (params.preferredProvider ?? this.config.defaultProvider);
333
+ const provider = this.providerManager.getProvider(providerType);
334
+ if (!provider) {
335
+ throw createLLMError(`Strict model provider ${providerType} is unavailable`, 'PROVIDER_UNAVAILABLE', { provider: providerType, model: params.model, retryable: false });
336
+ }
337
+ return this.createDecision(provider, providerType, params.model, 'manual');
338
+ }
316
339
  /**
317
340
  * Manual selection - use preferredProvider or default
318
341
  */
@@ -452,7 +475,7 @@ export class HybridRouter {
452
475
  // surfaced by the rule-based E2E test in
453
476
  // tests/e2e/llm-router-real-providers.test.ts.
454
477
  const defaultProviderType = this.config.defaultProvider;
455
- if (defaultProviderType && defaultProviderType !== decision.providerType) {
478
+ if (!params.strictModel && defaultProviderType && defaultProviderType !== decision.providerType) {
456
479
  executionOrder.push({
457
480
  provider: defaultProviderType,
458
481
  model: this.config.defaultModel,
@@ -464,13 +487,15 @@ export class HybridRouter {
464
487
  // openrouter/gemini/azure-openai/bedrock from ADR-043) and
465
488
  // ProviderManager.createProvider() builds all of them. The narrower
466
489
  // list silently excluded users' actual fallback providers.
467
- for (const entry of fallbackChain.entries) {
468
- if (!entry.enabled)
469
- continue;
470
- if (entry.provider === decision.providerType)
471
- continue;
472
- for (const model of entry.models) {
473
- executionOrder.push({ provider: entry.provider, model });
490
+ if (!params.strictModel) {
491
+ for (const entry of fallbackChain.entries) {
492
+ if (!entry.enabled)
493
+ continue;
494
+ if (entry.provider === decision.providerType)
495
+ continue;
496
+ for (const model of entry.models) {
497
+ executionOrder.push({ provider: entry.provider, model });
498
+ }
474
499
  }
475
500
  }
476
501
  // Capability-aware guard: when the request needs tools, drop any candidate
@@ -520,6 +545,17 @@ export class HybridRouter {
520
545
  // ADR-123: persist the charge to the cross-process ledger so budgets
521
546
  // hold across a fleet of processes. ADR-124 M2.3: attribute to the agent.
522
547
  this.providerManager.recordResponseSpend(response, params.agentType);
548
+ // A provider can return an unexpected model even when its request was
549
+ // pinned. Account for the completed call, but do not accept that answer
550
+ // as evidence from the requested model (e.g. a frontier quality judge).
551
+ if (params.strictModel) {
552
+ if (response.provider !== providerType) {
553
+ throw createLLMError(`Strict model provider mismatch: expected ${providerType}, received ${response.provider}`, 'PROVIDER_UNAVAILABLE', { provider: providerType, model, retryable: false });
554
+ }
555
+ if (!this.isSameModel(decision.model, response.model)) {
556
+ throw createLLMError(`Strict model mismatch: expected ${decision.model}, received ${response.model}`, 'MODEL_NOT_FOUND', { provider: providerType, model, retryable: false });
557
+ }
558
+ }
523
559
  const callLatency = Date.now() - callStartTime;
524
560
  // Record success in legacy tracker
525
561
  this.metrics.recordSuccess(providerType);
@@ -585,7 +621,7 @@ export class HybridRouter {
585
621
  // delay (because no need to wait) but DOES continue to the next
586
622
  // entry in executionOrder. Only retryable errors get the delay.
587
623
  const nonRetryable = isLLMError(error) && !error.retryable;
588
- if (!nonRetryable && attempts < fallbackBehavior.maxAttempts) {
624
+ if (!params.strictModel && !nonRetryable && attempts < fallbackBehavior.maxAttempts) {
589
625
  await this.delay(fallbackBehavior.delayMs);
590
626
  }
591
627
  }
@@ -595,6 +631,18 @@ export class HybridRouter {
595
631
  // ============================================================================
596
632
  // Helper Methods
597
633
  // ============================================================================
634
+ /** Compare identity independently of the API transport hosting the model. */
635
+ isSameModel(expected, actual) {
636
+ if (expected === actual)
637
+ return true;
638
+ try {
639
+ return normalizeModelId(expected) === normalizeModelId(actual);
640
+ }
641
+ catch {
642
+ // Unregistered model IDs are only equivalent when they match exactly.
643
+ return false;
644
+ }
645
+ }
598
646
  /**
599
647
  * Create a routing decision with proper model ID normalization (ADR-043)
600
648
  */
@@ -686,9 +686,16 @@ export interface ChatParams {
686
686
  agentType?: string;
687
687
  /** Task complexity hint */
688
688
  complexity?: TaskComplexity;
689
- /** Specific model to use (for manual mode) - canonical or provider-specific ID */
689
+ /** Specific model to use (for manual mode or strictModel) - canonical or provider-specific ID */
690
690
  model?: string;
691
- /** Preferred provider (for manual mode) - supports extended providers */
691
+ /**
692
+ * Require the explicit model on preferredProvider (or the configured default).
693
+ * Bypasses routing rules and decision caching, disallows provider/model
694
+ * fallback, and rejects responses from a different provider or model.
695
+ * Equivalent canonical and provider-specific model IDs are accepted.
696
+ */
697
+ strictModel?: boolean;
698
+ /** Preferred provider (for manual mode or strictModel) - supports extended providers */
692
699
  preferredProvider?: ExtendedProviderType;
693
700
  /** Required capabilities (legacy) */
694
701
  requiredCapabilities?: string[];
@@ -0,0 +1,29 @@
1
+ /** A runner or suite error is not an assertion result. */
2
+ export declare class TestRunnerExecutionError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ interface RunnerCounts {
6
+ passed: number;
7
+ failed: number;
8
+ skipped: number;
9
+ }
10
+ interface RunnerReport {
11
+ success?: boolean;
12
+ numFailedTestSuites?: number;
13
+ numRuntimeErrorTestSuites?: number;
14
+ testResults?: Array<{
15
+ status?: string;
16
+ message?: string;
17
+ assertionResults?: Array<{
18
+ status?: string;
19
+ }>;
20
+ }>;
21
+ }
22
+ /**
23
+ * Preserve ordinary assertion failures, but reject incomplete/failed execution
24
+ * that assertion counts cannot represent. Process status is authoritative even
25
+ * when a runner emits success=true (for example, Vitest unhandled rejections).
26
+ */
27
+ export declare function getTestRunnerExecutionError(runner: string, files: string, exitCode: number | null, counts: RunnerCounts, output: string, report?: RunnerReport): TestRunnerExecutionError | undefined;
28
+ export {};
29
+ //# sourceMappingURL=test-runner-verdict.d.ts.map
@@ -0,0 +1,43 @@
1
+ /** A runner or suite error is not an assertion result. */
2
+ export class TestRunnerExecutionError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'TestRunnerExecutionError';
6
+ }
7
+ }
8
+ /**
9
+ * Preserve ordinary assertion failures, but reject incomplete/failed execution
10
+ * that assertion counts cannot represent. Process status is authoritative even
11
+ * when a runner emits success=true (for example, Vitest unhandled rejections).
12
+ */
13
+ export function getTestRunnerExecutionError(runner, files, exitCode, counts, output, report) {
14
+ const suites = report?.testResults ?? [];
15
+ const suiteErrors = suites.filter(suite => suite.status === 'failed' && (
16
+ // Jest also uses message for ordinary assertion failures; Vitest reserves
17
+ // it for suite errors such as collection and afterAll failures.
18
+ (runner === 'vitest' && suite.message)
19
+ || !suite.assertionResults?.some(assertion => assertion.status === 'failed')));
20
+ let reason;
21
+ if (exitCode === null) {
22
+ reason = 'terminated without an exit code';
23
+ }
24
+ else if (counts.passed + counts.failed + counts.skipped === 0) {
25
+ reason = 'reported zero tests';
26
+ }
27
+ else if (suiteErrors.length > 0 || (report?.numRuntimeErrorTestSuites ?? 0) > 0
28
+ || ((report?.numFailedTestSuites ?? 0) > 0 && counts.failed === 0)) {
29
+ reason = 'reported a suite execution error';
30
+ }
31
+ else if ((exitCode !== 0 || report?.success === false) && counts.failed === 0) {
32
+ reason = 'failed without a failed assertion';
33
+ }
34
+ if (!reason)
35
+ return undefined;
36
+ const diagnostics = [
37
+ ...suiteErrors.map(suite => suite.message).filter(Boolean),
38
+ output.trim(),
39
+ ].filter(Boolean).join('\n').slice(0, 4000);
40
+ return new TestRunnerExecutionError(`${runner} ${reason} for ${files} (exit code ${exitCode ?? 'unknown'}).` +
41
+ (diagnostics ? `\n${diagnostics}` : ''));
42
+ }
43
+ //# sourceMappingURL=test-runner-verdict.js.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Vitest JSON report handling that works on Vitest 4 and 5.
3
+ *
4
+ * Vitest 5 no longer prints the `--reporter=json` document to stdout; it
5
+ * writes `.vitest/json/output.json` and prints only
6
+ * `JSON report written to <path>`. Vitest 4 prints the document to stdout
7
+ * unless `--outputFile` is given, in which case it behaves like Vitest 5.
8
+ *
9
+ * Passing an explicit `--outputFile` therefore gives one contract on both
10
+ * majors: the report is always in a file we own. Every runner integration
11
+ * that spawns `vitest run --reporter=json` must go through this module
12
+ * instead of parsing stdout directly.
13
+ */
14
+ export interface VitestJsonReport {
15
+ /** Absolute path the report will be written to. */
16
+ readonly path: string;
17
+ /** CLI arguments to append to `vitest run --reporter=json`. */
18
+ readonly args: readonly string[];
19
+ /**
20
+ * Return the text that carries the JSON document: the report file when the
21
+ * runner wrote one, otherwise the captured stdout (older runners, or a run
22
+ * that died before reporting).
23
+ */
24
+ read(stdout: string): string;
25
+ /** Remove the temporary report directory. Safe to call more than once. */
26
+ cleanup(): void;
27
+ }
28
+ /**
29
+ * Resolve the JSON document text for a finished Vitest run.
30
+ * Exported separately so the precedence rule is unit-testable without spawning.
31
+ */
32
+ export declare function resolveVitestJsonOutput(stdout: string, reportPath: string | undefined): string;
33
+ /**
34
+ * Create a per-run report location. The directory is unique per call so
35
+ * concurrent runs never read each other's output.
36
+ */
37
+ export declare function createVitestJsonReport(): VitestJsonReport;
38
+ /**
39
+ * True when a command vector (runner command plus arguments) is a
40
+ * `vitest ... --reporter=json` invocation that has not already been given an
41
+ * output file. Pass the runner command as the first element when the caller
42
+ * configures it separately (for example `testRunner: 'vitest'`).
43
+ */
44
+ export declare function needsVitestJsonReportFile(args: readonly string[]): boolean;
45
+ //# sourceMappingURL=vitest-json-report.d.ts.map