agentic-qe 3.14.1 → 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 (387) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +109 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +7 -7
  5. package/dist/cli/chunks/adapter-AKQYU6UH.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-OY5Y2CUM.js → agent-booster-wasm-TQOMLWWX.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-TUOH55LD.js → agent-handler-Q3SEMMI2.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-XM3IYKT3.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-DOCLIEBL.js → arena-7RC7TBGW.js} +4 -4
  11. package/dist/cli/chunks/{arena-UMFJZKG7.js → arena-UPB7TKUY.js} +2 -2
  12. package/dist/cli/chunks/{audit-KZLU5VLW.js → audit-IXN5R4WB.js} +3 -3
  13. package/dist/cli/chunks/base-DZK36ITB.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-MIEZBNUI.js → better-sqlite3-RP4DEGK3.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-6PZN46B7.js → brain-handler-H5OVZ22L.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-XCETHA4F.js → branch-enumerator-VPRWDGFJ.js} +2 -2
  17. package/dist/cli/chunks/{browser-UEXISDCJ.js → browser-B6E7JPPJ.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-ADK54DOE.js +2 -0
  19. package/dist/cli/chunks/{chunk-PS6Y662P.js → chunk-26GM5CWD.js} +3 -3
  20. package/dist/cli/chunks/{chunk-IGRTQ6VT.js → chunk-2GNRW3OD.js} +2 -2
  21. package/dist/cli/chunks/{chunk-QIY43XQJ.js → chunk-2IGT5WNQ.js} +1 -1
  22. package/dist/cli/chunks/{chunk-LSXQPMPI.js → chunk-2WT7AKKK.js} +2 -2
  23. package/dist/cli/chunks/{chunk-5F5V4QYU.js → chunk-33VPWGCM.js} +3 -3
  24. package/dist/cli/chunks/{chunk-KXMW7XTJ.js → chunk-37BASGWC.js} +2 -2
  25. package/dist/cli/chunks/{chunk-5KP62DC3.js → chunk-3ABRGG3C.js} +2 -2
  26. package/dist/cli/chunks/{chunk-T7XYQX5G.js → chunk-3P6NCFI2.js} +2 -2
  27. package/dist/cli/chunks/{chunk-EEJP3WTQ.js → chunk-42VSQ2MX.js} +3 -3
  28. package/dist/cli/chunks/chunk-44WISFTU.js +2 -0
  29. package/dist/cli/chunks/{chunk-5T6PAUZD.js → chunk-4C6UJIHB.js} +1 -1
  30. package/dist/cli/chunks/{chunk-5TYGSQOL.js → chunk-4JBFJTHJ.js} +1 -1
  31. package/dist/cli/chunks/{chunk-FH7SCX2I.js → chunk-4OUPCTBS.js} +2 -2
  32. package/dist/cli/chunks/{chunk-UUE5CBZQ.js → chunk-4Q35TI6Z.js} +2 -2
  33. package/dist/cli/chunks/{chunk-HJD52N32.js → chunk-4RP5VUBI.js} +2 -2
  34. package/dist/cli/chunks/{chunk-GRVR3Y6I.js → chunk-4TXAP3YH.js} +1 -1
  35. package/dist/cli/chunks/{chunk-IIBXGHZT.js → chunk-4UDZLD42.js} +2 -2
  36. package/dist/cli/chunks/{chunk-GO66DCIZ.js → chunk-4W7QVUNO.js} +2 -2
  37. package/dist/cli/chunks/{chunk-AESYVAPH.js → chunk-4XPPMADQ.js} +2 -2
  38. package/dist/cli/chunks/{chunk-3FFMUB3B.js → chunk-527HQAY7.js} +2 -2
  39. package/dist/cli/chunks/chunk-5BLFXQEB.js +96 -0
  40. package/dist/cli/chunks/{chunk-QMTBWHGR.js → chunk-5DFHE4H5.js} +3 -3
  41. package/dist/cli/chunks/{chunk-AZUC7E5S.js → chunk-5F6DWHQG.js} +2 -2
  42. package/dist/cli/chunks/{chunk-6HMNN2Y2.js → chunk-5FOZO7KM.js} +81 -65
  43. package/dist/cli/chunks/{chunk-L4WATX6B.js → chunk-5IAB5NRZ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-JMULRLD4.js → chunk-5P3G6ZW4.js} +1 -1
  45. package/dist/cli/chunks/{chunk-ND6JBUVH.js → chunk-5Y5TC6BY.js} +2 -2
  46. package/dist/cli/chunks/{chunk-DKSLJZVA.js → chunk-6F2RM6X2.js} +1 -1
  47. package/dist/cli/chunks/{chunk-J7VAD4RG.js → chunk-72UJXEKQ.js} +2 -2
  48. package/dist/cli/chunks/{chunk-RCHDSUVU.js → chunk-74PK3NEW.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FHBGALBG.js → chunk-7BUERZYL.js} +2 -2
  50. package/dist/cli/chunks/{chunk-IYB3GRXF.js → chunk-7FYMDKQH.js} +174 -169
  51. package/dist/cli/chunks/{chunk-CBWF42ET.js → chunk-7G6UX2QN.js} +2 -2
  52. package/dist/cli/chunks/{chunk-GH3NJOTC.js → chunk-7JQHPANT.js} +3 -3
  53. package/dist/cli/chunks/{chunk-J2VF7ZO7.js → chunk-7SLAZAVU.js} +2 -2
  54. package/dist/cli/chunks/{chunk-GYTWUOKU.js → chunk-7Y2CEXRS.js} +4 -4
  55. package/dist/cli/chunks/{chunk-7AF55H2D.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-FZ47ZCRL.js → chunk-B5XFDFBT.js} +1 -1
  59. package/dist/cli/chunks/{chunk-TLD727EF.js → chunk-B7SWW5A6.js} +2 -2
  60. package/dist/cli/chunks/chunk-BN7DKW5D.js +2 -0
  61. package/dist/cli/chunks/{chunk-UWRMPRY5.js → chunk-C46DMCWF.js} +1 -1
  62. package/dist/cli/chunks/{chunk-5NSSJUWW.js → chunk-CB5JPRIZ.js} +2 -2
  63. package/dist/cli/chunks/{chunk-A6RB34Y6.js → chunk-CBOPBYPU.js} +1 -1
  64. package/dist/cli/chunks/{chunk-FRRRDCXY.js → chunk-CR3QGHVN.js} +2 -2
  65. package/dist/cli/chunks/{chunk-J33LKXVH.js → chunk-D4Z2N74A.js} +1 -1
  66. package/dist/cli/chunks/{chunk-HKU5PPS7.js → chunk-DBA3N742.js} +1 -1
  67. package/dist/cli/chunks/{chunk-JJ4GUO4K.js → chunk-DX3C5HPN.js} +1 -1
  68. package/dist/cli/chunks/{chunk-NNJ63W77.js → chunk-E3FBW6G2.js} +1 -1
  69. package/dist/cli/chunks/{chunk-6Z6Y3YBX.js → chunk-ELU4IC3I.js} +1 -1
  70. package/dist/cli/chunks/{chunk-MFAN5W27.js → chunk-EY4OQHU3.js} +1 -1
  71. package/dist/cli/chunks/{chunk-S53ZUAVI.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-RXPHQ4ZE.js → chunk-FUE6LL72.js} +2 -2
  75. package/dist/cli/chunks/{chunk-HPQU6XZH.js → chunk-G5C2XVZC.js} +1 -1
  76. package/dist/cli/chunks/{chunk-N22LMACN.js → chunk-G6DCESPU.js} +2 -2
  77. package/dist/cli/chunks/{chunk-VUXHJPUS.js → chunk-G6ZHTF42.js} +2 -2
  78. package/dist/cli/chunks/{chunk-QM6EJHP5.js → chunk-GNTVFN7D.js} +1 -1
  79. package/dist/cli/chunks/{chunk-B6Y6AF4M.js → chunk-H5ZRV5K5.js} +2 -2
  80. package/dist/cli/chunks/{chunk-X5G3UDWP.js → chunk-H6XBM2LY.js} +2 -2
  81. package/dist/cli/chunks/{chunk-KXTN3FR4.js → chunk-HOQQCY2K.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NAJCQJSK.js → chunk-HRUU7E3D.js} +2 -2
  83. package/dist/cli/chunks/{chunk-ODNLKYOM.js → chunk-HXE5NBJG.js} +1 -1
  84. package/dist/cli/chunks/{chunk-CCZZZBAO.js → chunk-I4NDQGKP.js} +2 -2
  85. package/dist/cli/chunks/{chunk-SEKOMKNG.js → chunk-IFFZR6GY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-WFJKLM6Z.js → chunk-IKIITGU5.js} +3 -3
  87. package/dist/cli/chunks/{chunk-PYAH4K2U.js → chunk-IP7NSFQQ.js} +2 -2
  88. package/dist/cli/chunks/{chunk-3BRR2FLH.js → chunk-IQEJGZV6.js} +3 -3
  89. package/dist/cli/chunks/{chunk-HRUQWABO.js → chunk-IU4EBTA2.js} +3 -3
  90. package/dist/cli/chunks/{chunk-5Y2QFSVZ.js → chunk-JBB7E26R.js} +2 -2
  91. package/dist/cli/chunks/{chunk-ZAHCVRR7.js → chunk-JRYZKBY2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-PMUF7WU6.js → chunk-JV4FZUE7.js} +2 -2
  93. package/dist/cli/chunks/{chunk-PS5NIMWJ.js → chunk-KF63AYXD.js} +2 -2
  94. package/dist/cli/chunks/{chunk-F7TRO2OM.js → chunk-KPMGTVB4.js} +1 -1
  95. package/dist/cli/chunks/chunk-L2GKMBDP.js +2 -0
  96. package/dist/cli/chunks/{chunk-LMPK63PO.js → chunk-LHGNNZ76.js} +3 -3
  97. package/dist/cli/chunks/{chunk-HBAQVJDP.js → chunk-LKN7JQTW.js} +2 -2
  98. package/dist/cli/chunks/{chunk-JZUWPDVS.js → chunk-LLVGTEHU.js} +1 -1
  99. package/dist/cli/chunks/{chunk-7XL2D56F.js → chunk-LS3EUMBP.js} +6 -6
  100. package/dist/cli/chunks/{chunk-MDLLEUFN.js → chunk-LTBCAFTZ.js} +3 -3
  101. package/dist/cli/chunks/{chunk-S4WIAKPL.js → chunk-LVLBIKJD.js} +1 -1
  102. package/dist/cli/chunks/{chunk-ERTGGFXZ.js → chunk-MDZ6RRLX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-OBLHI4HA.js → chunk-MWWAMDHI.js} +1 -1
  104. package/dist/cli/chunks/{chunk-45S5553E.js → chunk-MXMFGSWR.js} +2 -2
  105. package/dist/cli/chunks/{chunk-HCCILQGN.js → chunk-N4H2QOT5.js} +2 -2
  106. package/dist/cli/chunks/{chunk-L66BWYQH.js → chunk-NBWQBQO5.js} +1 -1
  107. package/dist/cli/chunks/{chunk-RYHCYTFE.js → chunk-NN76NTOX.js} +1 -1
  108. package/dist/cli/chunks/{chunk-75SC3GEX.js → chunk-NTSXHZTC.js} +2 -2
  109. package/dist/cli/chunks/{chunk-PZZX57ZA.js → chunk-OV5EZO3U.js} +2 -2
  110. package/dist/cli/chunks/{chunk-7GF6IRSU.js → chunk-OVDKWCD7.js} +2 -2
  111. package/dist/cli/chunks/{chunk-DFXQLHQM.js → chunk-OVPJQWHW.js} +2 -2
  112. package/dist/cli/chunks/{chunk-Y63V33M6.js → chunk-OY7MLMEX.js} +5 -5
  113. package/dist/cli/chunks/{chunk-LJ63HPPN.js → chunk-OYMLHX2B.js} +1 -1
  114. package/dist/cli/chunks/{chunk-FPBQ7BXU.js → chunk-PI74GOE4.js} +2 -2
  115. package/dist/cli/chunks/{chunk-LQDFWLKK.js → chunk-PZTVH2AS.js} +2 -2
  116. package/dist/cli/chunks/{chunk-UCJEAK7D.js → chunk-QLWNXBRU.js} +2 -2
  117. package/dist/cli/chunks/{chunk-O7KF3GBV.js → chunk-R2AFVFRF.js} +1 -1
  118. package/dist/cli/chunks/{chunk-TF33GKWA.js → chunk-RKJZWWB7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-FOAFRC2W.js → chunk-ROX7NLS4.js} +2 -2
  120. package/dist/cli/chunks/{chunk-OBKMLOHU.js → chunk-RTJ2M6V6.js} +2 -2
  121. package/dist/cli/chunks/{chunk-7AYTM426.js → chunk-SG47AXJG.js} +1 -1
  122. package/dist/cli/chunks/{chunk-3AYNHOWS.js → chunk-SGXSB7YO.js} +1 -1
  123. package/dist/cli/chunks/{chunk-Z5YU2TDS.js → chunk-SHGKY3QB.js} +2 -2
  124. package/dist/cli/chunks/{chunk-TT7DF2GX.js → chunk-SJPZSCZP.js} +2 -2
  125. package/dist/cli/chunks/{chunk-RUEHSOE6.js → chunk-SQ3PPISY.js} +1 -1
  126. package/dist/cli/chunks/{chunk-NEEZ6M4W.js → chunk-STRDSVH3.js} +2 -2
  127. package/dist/cli/chunks/{chunk-DKXSJDII.js → chunk-T35GZXTU.js} +2 -2
  128. package/dist/cli/chunks/{chunk-KHUO4NCW.js → chunk-T62DH4GG.js} +2 -2
  129. package/dist/cli/chunks/{chunk-6YIMLUH6.js → chunk-TFHQE6NK.js} +2 -2
  130. package/dist/cli/chunks/{chunk-ZC3HC6FO.js → chunk-TGLAWI62.js} +1 -1
  131. package/dist/cli/chunks/{chunk-4MT62HKK.js → chunk-TISSZFHO.js} +1 -1
  132. package/dist/cli/chunks/{chunk-3XRXUVUI.js → chunk-TJEIOE7F.js} +1 -1
  133. package/dist/cli/chunks/{chunk-TQ2JZVZ3.js → chunk-TTMHIOQ3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-VEWYUEVY.js → chunk-UHQY3GK7.js} +2 -2
  135. package/dist/cli/chunks/{chunk-MZ2PJUN6.js → chunk-UMENRGHK.js} +2 -2
  136. package/dist/cli/chunks/{chunk-H2DX36SC.js → chunk-UMNYF5EZ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-SZRDEPUY.js → chunk-UTVRQEZM.js} +3 -3
  138. package/dist/cli/chunks/{chunk-4ZLFUO4I.js → chunk-UYJHYMEQ.js} +2 -2
  139. package/dist/cli/chunks/{chunk-6DDMHZWH.js → chunk-V4AOVDCJ.js} +2 -2
  140. package/dist/cli/chunks/{chunk-CGDW47WP.js → chunk-VIDBBB6F.js} +2 -2
  141. package/dist/cli/chunks/{chunk-6B77GPWL.js → chunk-VWNHKYK7.js} +2 -2
  142. package/dist/cli/chunks/{chunk-EPBWFTHH.js → chunk-WYMGK5DX.js} +2 -2
  143. package/dist/cli/chunks/{chunk-3WSH4HD2.js → chunk-XA7CG3LH.js} +2 -2
  144. package/dist/cli/chunks/{chunk-FFRKTZYP.js → chunk-XX7HUSX2.js} +2 -2
  145. package/dist/cli/chunks/{chunk-PMREFRPP.js → chunk-XXCYQXK3.js} +2 -2
  146. package/dist/cli/chunks/{chunk-EHW62JL2.js → chunk-Y2DVFVGI.js} +1 -1
  147. package/dist/cli/chunks/{chunk-D6RCRTTR.js → chunk-Y5SQBI2F.js} +2 -2
  148. package/dist/cli/chunks/{chunk-VVP2ROXD.js → chunk-YAKS3CAB.js} +2 -2
  149. package/dist/cli/chunks/{chunk-C3XNFIOM.js → chunk-YCBDE2N7.js} +2 -2
  150. package/dist/cli/chunks/{chunk-RVCMZUSJ.js → chunk-YDNSLLBS.js} +2 -2
  151. package/dist/cli/chunks/{chunk-TGFJUL6M.js → chunk-YEXPFHV6.js} +2 -2
  152. package/dist/cli/chunks/{chunk-UN7EHLRV.js → chunk-YGB6R5DW.js} +1 -1
  153. package/dist/cli/chunks/{chunk-JNSTKE3K.js → chunk-YL7T3VV7.js} +2 -2
  154. package/dist/cli/chunks/{chunk-3TMUCJNJ.js → chunk-ZHXWGNYM.js} +1 -1
  155. package/dist/cli/chunks/{chunk-DKUKGBJE.js → chunk-ZK5JKHP4.js} +1 -1
  156. package/dist/cli/chunks/{chunk-IYIMLLUV.js → chunk-ZN3J6TZD.js} +1 -1
  157. package/dist/cli/chunks/{chunk-3JMSXOU4.js → chunk-ZUG5MOUB.js} +2 -2
  158. package/dist/cli/chunks/{ci-Q2VX75PS.js → ci-YVKDQWIX.js} +2 -2
  159. package/dist/cli/chunks/ci-output-LK3MBXLZ.js +2 -0
  160. package/dist/cli/chunks/{circuit-breaker-JMRLG2XI.js → circuit-breaker-7AIXACR7.js} +2 -2
  161. package/dist/cli/chunks/{claude-flow-setup-IMXYALBU.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-HWFASEGE.js → cline-installer-YDDCKKEV.js} +2 -2
  164. package/dist/cli/chunks/{code-3V37TCAD.js → code-URB7UAKW.js} +2 -2
  165. package/dist/cli/chunks/{code-index-extractor-5V54WGFL.js → code-index-extractor-BL6HWH4Q.js} +2 -2
  166. package/dist/cli/chunks/{codex-installer-UCA5AVE6.js → codex-installer-2AVEO4EA.js} +2 -2
  167. package/dist/cli/chunks/{completions-2DMRCQU6.js → completions-RCKBSSSS.js} +2 -2
  168. package/dist/cli/chunks/{complexity-analyzer-MMQRXBTD.js → complexity-analyzer-LEDG62YK.js} +2 -2
  169. package/dist/cli/chunks/{continuedev-installer-FAARXP3S.js → continuedev-installer-VOTCEBFH.js} +2 -2
  170. package/dist/cli/chunks/{copilot-installer-AKQALMB5.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-AXWHDND5.js → cost-tracker-GJIFB2BM.js} +2 -2
  173. package/dist/cli/chunks/{coverage-ZLSKKCG5.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-UALCQKVD.js → cursor-installer-CMGJQMHX.js} +2 -2
  176. package/dist/cli/chunks/{daemon-4LNOPJGN.js → daemon-V456IWR3.js} +8 -8
  177. package/dist/cli/chunks/{daemon-K3DFGCXC.js → daemon-Y2I3YVIU.js} +4 -4
  178. package/dist/cli/chunks/{dag-attention-scheduler-LCQ7MYKC.js → dag-attention-scheduler-ZCBBOD3D.js} +2 -2
  179. package/dist/cli/chunks/{detect-P7PEN3MZ.js → detect-2GHEA4A3.js} +2 -2
  180. package/dist/cli/chunks/{dist-node-I72BJC2D.js → dist-node-44AGYJCH.js} +2 -2
  181. package/dist/cli/chunks/{domain-handler-LROF6KWN.js → domain-handler-IDLIEP6X.js} +2 -2
  182. package/dist/cli/chunks/{domain-transfer-M2ZSSTPV.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-MTBPUGO4.js → embed-and-insert-pattern-DUW6K35A.js} +2 -2
  185. package/dist/cli/chunks/{eval-O24ALB3W.js → eval-PR6YWDFM.js} +2 -2
  186. package/dist/cli/chunks/{experience-capture-middleware-7JXEOGRE.js → experience-capture-middleware-CJJJN7CF.js} +3 -3
  187. package/dist/cli/chunks/{fast-paths-4CFYJV4U.js → fast-paths-LGLLKX6P.js} +2 -2
  188. package/dist/cli/chunks/{feature-flags-CHPUA7IM.js → feature-flags-33D3I4DD.js} +2 -2
  189. package/dist/cli/chunks/{feature-flags-E6PIM6ZB.js → feature-flags-QL4NCEGW.js} +2 -2
  190. package/dist/cli/chunks/{file-discovery-2ANIAUCP.js → file-discovery-GKCYJPFZ.js} +2 -2
  191. package/dist/cli/chunks/{fleet-2MQ3OGCP.js → fleet-QNT6X2YI.js} +3 -3
  192. package/dist/cli/chunks/{gnn-wrapper-P7JW3622.js → gnn-wrapper-ELSGT67Z.js} +2 -2
  193. package/dist/cli/chunks/{heartbeat-handler-WWWZSA7V.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-W634ZOTV.js → hnsw-legacy-bridge-EZMM5JWL.js} +2 -2
  198. package/dist/cli/chunks/{hnswlib-node-SLZDLMKM.js → hnswlib-node-G4CE3EOS.js} +2 -2
  199. package/dist/cli/chunks/{hooks-3BFAZGG7.js → hooks-LCVXXA55.js} +10 -10
  200. package/dist/cli/chunks/{hypergraph-engine-XJSGXP2J.js → hypergraph-engine-6Z7RQ3HI.js} +2 -2
  201. package/dist/cli/chunks/{hypergraph-handler-RVUWZMOX.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-FYOZNNNO.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-MAAKFVSB.js → kilocode-installer-U3MW62DE.js} +2 -2
  207. package/dist/cli/chunks/{kiro-installer-GX3TLZC5.js → kiro-installer-PPEAC44T.js} +2 -2
  208. package/dist/cli/chunks/knowledge-graph-7JE2TVKJ.js +2 -0
  209. package/dist/cli/chunks/{learning-T4QZ6C26.js → learning-7B5NITDV.js} +3 -3
  210. package/dist/cli/chunks/{llm-router-N2M4WXOC.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-6RU3G4P2.js → load-VO7ABNHV.js} +2 -2
  213. package/dist/cli/chunks/load-test-JZ4CLSBF.js +2 -0
  214. package/dist/cli/chunks/{mcp-EFBO7BAU.js → mcp-THXEINCL.js} +2 -2
  215. package/dist/cli/chunks/{memory-AXU2M3DN.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-W7AFGVNH.js → multi-model-executor-HEDVOZ6X.js} +2 -2
  219. package/dist/cli/chunks/{opencode-installer-KJE2RLCH.js → opencode-installer-GQ7J5SBG.js} +2 -2
  220. package/dist/cli/chunks/{orchestrator-CL6MLGVU.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-7SNSJ7K2.js → pattern-usage-recorder-O6XHM2G5.js} +2 -2
  223. package/dist/cli/chunks/{pipeline-3UU6ON3F.js → pipeline-UOG6UO6D.js} +2 -2
  224. package/dist/cli/chunks/{platform-SNMPIDIT.js → platform-Q7UH7FZQ.js} +2 -2
  225. package/dist/cli/chunks/{plugin-65IIUUCU.js → plugin-7OFLNGOS.js} +2 -2
  226. package/dist/cli/chunks/{prime-radiant-advanced-wasm-WWWJRLRP.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-SEBHCLLJ.js → protocol-handler-WLYTX6FS.js} +2 -2
  229. package/dist/cli/chunks/{prove-N4X7CCJ4.js → prove-QVNE4V3J.js} +2 -2
  230. package/dist/cli/chunks/qe-reasoning-bank-7VB5LJGS.js +2 -0
  231. package/dist/cli/chunks/{quality-LBCJWXMU.js → quality-DNE2RKE5.js} +2 -2
  232. package/dist/cli/chunks/{quality-gate-KZIQI7QT.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-XCZFHFME.js → real-embeddings-SF42ML7G.js} +2 -2
  235. package/dist/cli/chunks/{roocode-installer-P3O6B7PT.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-OXZ4DOV4.js → routing-handler-4MXXZRYP.js} +2 -2
  239. package/dist/cli/chunks/{ruvector-commands-PSY5IDSL.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-4SUT7GTJ.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-TCKC22FH.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-ZJFN52C2.js → shared-rvf-adapter-6RGCTLHD.js} +2 -2
  250. package/dist/cli/chunks/{shared-rvf-dual-writer-V2R37HWV.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-XEKWNVDR.js → status-handler-BADQV2KA.js} +2 -2
  253. package/dist/cli/chunks/{structural-health-QMIW6WUN.js → structural-health-VMYEYRZG.js} +2 -2
  254. package/dist/cli/chunks/{sync-H5SXWXPP.js → sync-PXLROLHB.js} +2 -2
  255. package/dist/cli/chunks/{sync-GDYJ2ULT.js → sync-ULY7T5II.js} +2 -2
  256. package/dist/cli/chunks/{task-handler-EPLKCQHY.js → task-handler-L7E2I267.js} +2 -2
  257. package/dist/cli/chunks/{task-handlers-22NTLWTC.js → task-handlers-6DPKE4AK.js} +3 -3
  258. package/dist/cli/chunks/{test-WHJFRZ3F.js → test-WCLURQUT.js} +11 -11
  259. package/dist/cli/chunks/test-scheduling-4CNJA6TW.js +15 -0
  260. package/dist/cli/chunks/{token-bootstrap-BW5WA6PY.js → token-bootstrap-GTI24JAL.js} +2 -2
  261. package/dist/cli/chunks/{token-usage-4A4O57R6.js → token-usage-DRVG6PKO.js} +2 -2
  262. package/dist/cli/chunks/{transformers-FYTBRV46.js → transformers-IMDDAMYQ.js} +2 -2
  263. package/dist/cli/chunks/{tree-sitter-wasm-parser-TZIJPLF3.js → tree-sitter-wasm-parser-WBZIHVFA.js} +2 -2
  264. package/dist/cli/chunks/{types-B2L6LKFA.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-O6U7EA7V.js → upgrade-6ALSDWDD.js} +2 -2
  269. package/dist/cli/chunks/{validate-FHNZ5XL3.js → validate-XF4ZG3LC.js} +2 -2
  270. package/dist/cli/chunks/{validate-swarm-YOLLUEHE.js → validate-swarm-P5TAFRDA.js} +2 -2
  271. package/dist/cli/chunks/{vibium-UXRPEIXB.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-JJ5UIYFD.js → web-tree-sitter-4JVRQPX5.js} +2 -2
  274. package/dist/cli/chunks/{windsurf-installer-I4QMQPIL.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-BIJ7WDGS.js → witness-chain-RPZ2SE2V.js} +2 -2
  277. package/dist/cli/chunks/{witness-key-manager-3SMMLJLP.js → witness-key-manager-LXG2VBQQ.js} +2 -2
  278. package/dist/cli/chunks/{workflow-33PUXXJV.js → workflow-2OYNO7UU.js} +4 -4
  279. package/dist/cli/chunks/workflow-orchestrator-KWHIJMFV.js +2 -0
  280. package/dist/cli/chunks/{wrappers-ASAU36VK.js → wrappers-DIJNNFU6.js} +2 -2
  281. package/dist/cli/commands/daemon.js +3 -0
  282. package/dist/cli/commands/security.js +167 -100
  283. package/dist/cli/commands/test.js +1 -0
  284. package/dist/cli/foreground-command.d.ts +3 -0
  285. package/dist/cli/foreground-command.js +22 -0
  286. package/dist/cli/index.js +4 -0
  287. package/dist/cli/utils/ci-output.d.ts +17 -0
  288. package/dist/cli/utils/ci-output.js +34 -2
  289. package/dist/coordination/handlers/handler-types.d.ts +3 -0
  290. package/dist/coordination/handlers/quality-handlers.js +10 -0
  291. package/dist/coordination/handlers/security-handlers.js +168 -72
  292. package/dist/coordination/handlers/test-execution-handlers.js +37 -43
  293. package/dist/coordination/protocols/security-audit.d.ts +3 -0
  294. package/dist/coordination/protocols/security-audit.js +61 -39
  295. package/dist/coordination/result-saver.js +36 -5
  296. package/dist/coordination/task-executor.d.ts +3 -1
  297. package/dist/coordination/task-executor.js +4 -0
  298. package/dist/domains/security-compliance/interfaces.d.ts +5 -0
  299. package/dist/domains/security-compliance/interfaces.js +0 -6
  300. package/dist/domains/security-compliance/scan-discovery.d.ts +12 -0
  301. package/dist/domains/security-compliance/scan-discovery.js +105 -0
  302. package/dist/domains/security-compliance/scan-evidence.d.ts +57 -0
  303. package/dist/domains/security-compliance/scan-evidence.js +2 -0
  304. package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +3 -2
  305. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +109 -65
  306. package/dist/domains/security-compliance/services/semgrep-integration.d.ts +9 -2
  307. package/dist/domains/security-compliance/services/semgrep-integration.js +68 -20
  308. package/dist/domains/test-execution/services/flaky-detector.js +14 -3
  309. package/dist/domains/test-execution/services/retry-handler.js +18 -8
  310. package/dist/domains/test-execution/services/test-executor.js +46 -12
  311. package/dist/init/init-wizard-hooks.js +2 -2
  312. package/dist/integrations/agentic-flow/reasoning-bank/index.js +3 -20
  313. package/dist/integrations/coherence/engines/cohomology-adapter.js +100 -30
  314. package/dist/mcp/bundle.js +499 -478
  315. package/dist/mcp/handlers/domain-handler-configs.d.ts +22 -1
  316. package/dist/mcp/handlers/domain-handler-configs.js +50 -19
  317. package/dist/mcp/handlers/domain-handlers.d.ts +7 -5
  318. package/dist/mcp/handlers/domain-handlers.js +7 -5
  319. package/dist/mcp/index.d.ts +1 -0
  320. package/dist/mcp/index.js +1 -0
  321. package/dist/mcp/protocol-server.js +20 -7
  322. package/dist/mcp/qe-tool-bridge.js +1 -0
  323. package/dist/mcp/tool-annotations.d.ts +25 -0
  324. package/dist/mcp/tool-annotations.js +75 -0
  325. package/dist/mcp/tool-registry.js +17 -12
  326. package/dist/mcp/tools/base.d.ts +7 -1
  327. package/dist/mcp/tools/base.js +8 -0
  328. package/dist/mcp/tools/registry.d.ts +3 -0
  329. package/dist/mcp/tools/registry.js +1 -0
  330. package/dist/mcp/types.d.ts +20 -0
  331. package/dist/shared/llm/router/hybrid-router.d.ts +4 -0
  332. package/dist/shared/llm/router/hybrid-router.js +74 -26
  333. package/dist/shared/llm/router/types.d.ts +9 -2
  334. package/dist/shared/test-runner-verdict.d.ts +29 -0
  335. package/dist/shared/test-runner-verdict.js +43 -0
  336. package/dist/shared/vitest-json-report.d.ts +45 -0
  337. package/dist/shared/vitest-json-report.js +71 -0
  338. package/dist/test-scheduling/executors/vitest-executor.js +18 -6
  339. package/dist/validation/frontier-judge.d.ts +7 -4
  340. package/dist/validation/frontier-judge.js +11 -6
  341. package/package.json +8 -7
  342. package/dist/cli/chunks/adapter-I2N7PEKG.js +0 -2
  343. package/dist/cli/chunks/aqe-learning-engine-U4ALUH6A.js +0 -2
  344. package/dist/cli/chunks/base-RCYIBNHM.js +0 -2
  345. package/dist/cli/chunks/browser-workflow-L6TDB5O5.js +0 -2
  346. package/dist/cli/chunks/chunk-CGZ7LTUK.js +0 -2
  347. package/dist/cli/chunks/chunk-H5LSXVWY.js +0 -5
  348. package/dist/cli/chunks/chunk-QAE4BOIV.js +0 -2
  349. package/dist/cli/chunks/chunk-RXHI6CKK.js +0 -81
  350. package/dist/cli/chunks/chunk-YXN47QOI.js +0 -2
  351. package/dist/cli/chunks/ci-output-MD5GTVR2.js +0 -2
  352. package/dist/cli/chunks/client-L4PIXCGV.js +0 -2
  353. package/dist/cli/chunks/core-handlers-KROSXP4V.js +0 -2
  354. package/dist/cli/chunks/cross-domain-router-WMTYBOON.js +0 -2
  355. package/dist/cli/chunks/dream-AV63YQ2Y.js +0 -2
  356. package/dist/cli/chunks/heartbeat-scheduler-5IZUGMC2.js +0 -2
  357. package/dist/cli/chunks/hnsw-adapter-NV2NNBJL.js +0 -2
  358. package/dist/cli/chunks/hnsw-index-GRJ3KA2O.js +0 -2
  359. package/dist/cli/chunks/impact-analyzer-YM4QUWVH.js +0 -2
  360. package/dist/cli/chunks/init-wizard-YESXGIK6.js +0 -2
  361. package/dist/cli/chunks/kernel-VH5SKESU.js +0 -2
  362. package/dist/cli/chunks/knowledge-graph-F3NL4WJV.js +0 -2
  363. package/dist/cli/chunks/llm-router-service-HQYCJMPK.js +0 -2
  364. package/dist/cli/chunks/load-test-GWRGKWMN.js +0 -2
  365. package/dist/cli/chunks/memory-backend-7A2PFKPV.js +0 -2
  366. package/dist/cli/chunks/memory-handlers-65CXN76C.js +0 -2
  367. package/dist/cli/chunks/pattern-null-store-K2WPRYCP.js +0 -2
  368. package/dist/cli/chunks/protocol-executor-TJDLEHND.js +0 -2
  369. package/dist/cli/chunks/qe-reasoning-bank-CGRMFPDM.js +0 -2
  370. package/dist/cli/chunks/queen-coordinator-FKP6QZAQ.js +0 -2
  371. package/dist/cli/chunks/router-KZ5BISAM.js +0 -2
  372. package/dist/cli/chunks/routing-feedback-O4Y5TTR6.js +0 -2
  373. package/dist/cli/chunks/rvf-dual-writer-NG3UF3D5.js +0 -2
  374. package/dist/cli/chunks/rvf-migration-adapter-PUHVTKQY.js +0 -2
  375. package/dist/cli/chunks/rvf-native-adapter-ODXFKZ6G.js +0 -2
  376. package/dist/cli/chunks/safe-db-BUQDNH2R.js +0 -2
  377. package/dist/cli/chunks/schedule-ZXNDZNNB.js +0 -2
  378. package/dist/cli/chunks/scheduler-YUQQWWW3.js +0 -2
  379. package/dist/cli/chunks/security-RQGUQGSI.js +0 -14
  380. package/dist/cli/chunks/sqlite-persistence-HVSX46C7.js +0 -2
  381. package/dist/cli/chunks/test-scheduling-KZVFZOQN.js +0 -15
  382. package/dist/cli/chunks/unified-memory-AHN4RVBP.js +0 -2
  383. package/dist/cli/chunks/unified-memory-hnsw-XB7JPF74.js +0 -2
  384. package/dist/cli/chunks/unified-persistence-53KWNFQJ.js +0 -2
  385. package/dist/cli/chunks/visual-security-CRPYS7L7.js +0 -2
  386. package/dist/cli/chunks/witness-chain-5WCR2CAS.js +0 -2
  387. package/dist/cli/chunks/workflow-orchestrator-RZWCLTT5.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
  */
@@ -3,6 +3,7 @@
3
3
  * Model Context Protocol server and tools
4
4
  */
5
5
  export * from './types';
6
+ export { CONSERVATIVE_TOOL_ANNOTATIONS, BUILT_IN_TOOL_NAMES, BUILT_IN_TOOL_SAFETY_INVENTORY, getBuiltInToolAnnotations, getBuiltInToolSafetyInventory, resolveToolAnnotations, type ResolvedToolAnnotations, } from './tool-annotations';
6
7
  export { ToolRegistry, createToolRegistry } from './tool-registry';
7
8
  export { getConnectionPool, initializeConnectionPool, shutdownConnectionPool, createConnectionPool, type PoolConnection, type ConnectionMetrics, type ConnectionPoolConfig, type PoolStats, DEFAULT_POOL_CONFIG, } from './connection-pool';
8
9
  export { getLoadBalancer, resetLoadBalancer, createLoadBalancer, type AgentLoadInfo, type LoadBalancingStrategy, type LoadBalancerConfig, type LoadBalancerStats, DEFAULT_LOAD_BALANCER_CONFIG, } from './load-balancer';
package/dist/mcp/index.js CHANGED
@@ -4,6 +4,7 @@
4
4
  */
5
5
  // Types
6
6
  export * from './types.js';
7
+ export { CONSERVATIVE_TOOL_ANNOTATIONS, BUILT_IN_TOOL_NAMES, BUILT_IN_TOOL_SAFETY_INVENTORY, getBuiltInToolAnnotations, getBuiltInToolSafetyInventory, resolveToolAnnotations, } from './tool-annotations.js';
7
8
  // Tool Registry (O(1) hash-indexed lookup via Map)
8
9
  export { ToolRegistry, createToolRegistry } from './tool-registry.js';
9
10
  // Connection Pool (ADR-039)
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { createStdioTransport, JSON_RPC_ERRORS, isJsonRpcCodedError, McpError, } from './transport/index.js';
9
9
  import { createToolRegistry } from './tool-registry.js';
10
+ import { resolveToolAnnotations } from './tool-annotations.js';
10
11
  import { MiddlewareChain } from './middleware/middleware-chain.js';
11
12
  import { createMicrocompactMiddleware } from './middleware/microcompact.js';
12
13
  import { SessionStore } from './services/session-store.js';
@@ -374,6 +375,7 @@ export class MCPProtocolServer {
374
375
  const tools = Array.from(this.tools.values()).map((entry) => ({
375
376
  name: entry.definition.name,
376
377
  description: entry.definition.description,
378
+ annotations: entry.definition.annotations,
377
379
  inputSchema: this.buildInputSchema(entry.definition),
378
380
  }));
379
381
  return { tools };
@@ -432,7 +434,10 @@ export class MCPProtocolServer {
432
434
  // the same output, so we can short-circuit repeated calls with an O(1)
433
435
  // fingerprint lookup. Tools without isConcurrencySafe (writes, scans,
434
436
  // executions) always re-run.
435
- 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;
436
441
  let cacheFingerprint = null;
437
442
  if (cacheable && process.env.AQE_SESSION_CACHE !== 'off') {
438
443
  try {
@@ -819,7 +824,7 @@ export class MCPProtocolServer {
819
824
  description: 'Execute test files in parallel with automatic retry on flaky failures. Example: test_execute_parallel({ testFiles: ["tests/auth.test.ts"], parallel: true })',
820
825
  category: 'domain',
821
826
  parameters: [
822
- { 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.' },
823
828
  { name: 'parallel', type: 'boolean', description: 'Enable parallel execution', default: true },
824
829
  ],
825
830
  },
@@ -847,7 +852,7 @@ export class MCPProtocolServer {
847
852
  category: 'domain',
848
853
  isConcurrencySafe: true,
849
854
  parameters: [
850
- { 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 },
851
856
  ],
852
857
  },
853
858
  handler: (params) => handleQualityAssess(params),
@@ -856,12 +861,13 @@ export class MCPProtocolServer {
856
861
  this.registerTool({
857
862
  definition: {
858
863
  name: 'security_scan_comprehensive',
859
- 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 })',
860
865
  category: 'domain',
861
866
  parameters: [
862
867
  { name: 'sast', type: 'boolean', description: 'Run SAST scan', default: true },
863
868
  { name: 'dast', type: 'boolean', description: 'Run DAST scan', default: false },
864
- { 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' },
865
871
  ],
866
872
  },
867
873
  handler: (params) => handleSecurityScan(params),
@@ -1446,8 +1452,15 @@ export class MCPProtocolServer {
1446
1452
  console.error(`[MCP] Registered ${this.tools.size} tools (${bridgedCount} via QE bridge)`);
1447
1453
  }
1448
1454
  registerTool(entry) {
1449
- this.tools.set(entry.definition.name, entry);
1450
- this.registry.register(entry.definition, entry.handler);
1455
+ const normalizedEntry = {
1456
+ ...entry,
1457
+ definition: {
1458
+ ...entry.definition,
1459
+ annotations: resolveToolAnnotations(entry.definition.name, entry.definition.annotations),
1460
+ },
1461
+ };
1462
+ this.tools.set(normalizedEntry.definition.name, normalizedEntry);
1463
+ this.registry.register(normalizedEntry.definition, normalizedEntry.handler);
1451
1464
  }
1452
1465
  buildInputSchema(definition) {
1453
1466
  const properties = {};
@@ -72,6 +72,7 @@ export function registerMissingQETools(registerFn) {
72
72
  name: tool.name,
73
73
  description: tool.description,
74
74
  category: 'domain',
75
+ annotations: tool.annotations,
75
76
  parameters: schemaToParameters(tool),
76
77
  },
77
78
  handler: async (params) => {
@@ -0,0 +1,25 @@
1
+ /**
2
+ * MCP tool safety annotations and the built-in safety inventory.
3
+ *
4
+ * The inventory is deliberately conservative. A tool is marked read-only
5
+ * only when its registered operation is an observation/query with no write or
6
+ * execution path. Every other built-in receives the MCP-safe fallback: it may
7
+ * be destructive, is not assumed idempotent, and may interact with the world.
8
+ * These values guide clients but never replace authorization, sandbox, or
9
+ * policy enforcement.
10
+ */
11
+ import type { ToolAnnotations } from './types';
12
+ export type ResolvedToolAnnotations = Required<Pick<ToolAnnotations, 'readOnlyHint' | 'destructiveHint' | 'idempotentHint' | 'openWorldHint'>> & Pick<ToolAnnotations, 'title'>;
13
+ export interface BuiltInToolSafetyDisposition {
14
+ annotations: ResolvedToolAnnotations;
15
+ reason: string;
16
+ }
17
+ export declare const CONSERVATIVE_TOOL_ANNOTATIONS: ResolvedToolAnnotations;
18
+ /** Complete deterministic inventory of names advertised by both MCP paths. */
19
+ export declare const BUILT_IN_TOOL_NAMES: readonly string[];
20
+ export declare const BUILT_IN_TOOL_SAFETY_INVENTORY: Readonly<Record<string, BuiltInToolSafetyDisposition>>;
21
+ /** Resolve explicit metadata over inventory metadata over conservative defaults. */
22
+ export declare function resolveToolAnnotations(name: string, annotations?: ToolAnnotations): ResolvedToolAnnotations;
23
+ export declare function getBuiltInToolAnnotations(): Readonly<Record<string, ToolAnnotations>>;
24
+ export declare function getBuiltInToolSafetyInventory(): Readonly<Record<string, BuiltInToolSafetyDisposition>>;
25
+ //# sourceMappingURL=tool-annotations.d.ts.map
@@ -0,0 +1,75 @@
1
+ /**
2
+ * MCP tool safety annotations and the built-in safety inventory.
3
+ *
4
+ * The inventory is deliberately conservative. A tool is marked read-only
5
+ * only when its registered operation is an observation/query with no write or
6
+ * execution path. Every other built-in receives the MCP-safe fallback: it may
7
+ * be destructive, is not assumed idempotent, and may interact with the world.
8
+ * These values guide clients but never replace authorization, sandbox, or
9
+ * policy enforcement.
10
+ */
11
+ export const CONSERVATIVE_TOOL_ANNOTATIONS = Object.freeze({
12
+ readOnlyHint: false,
13
+ destructiveHint: true,
14
+ idempotentHint: false,
15
+ openWorldHint: true,
16
+ });
17
+ const HARD_CODED_TOOL_NAMES = [
18
+ 'accessibility_test', 'advisor_consult', 'agent_complete', 'agent_list',
19
+ 'agent_metrics', 'agent_spawn', 'agent_status', 'aqe_health', 'chaos_test',
20
+ 'code_index', 'contract_validate', 'coverage_analyze_sublinear',
21
+ 'cross_phase_cleanup', 'cross_phase_query', 'cross_phase_stats',
22
+ 'cross_phase_store', 'defect_predict', 'fleet_health', 'fleet_init',
23
+ 'fleet_status', 'format_signals', 'infra_healing_feed_output',
24
+ 'infra_healing_recover', 'infra_healing_status', 'memory_delete',
25
+ 'memory_query', 'memory_retrieve', 'memory_share', 'memory_store',
26
+ 'memory_usage', 'migration_check', 'migration_promote', 'migration_status',
27
+ 'model_route', 'phase_end', 'phase_start', 'pipeline_list', 'pipeline_load',
28
+ 'pipeline_run', 'pipeline_validate', 'quality_assess',
29
+ 'requirements_validate', 'routing_economics', 'routing_metrics',
30
+ 'security_scan_comprehensive', 'session_cache_stats', 'task_cancel',
31
+ 'task_list', 'task_orchestrate', 'task_status', 'task_submit',
32
+ 'team_broadcast', 'team_health', 'team_list', 'team_message', 'team_rebalance',
33
+ 'team_scale', 'test_execute_parallel', 'test_generate_enhanced',
34
+ 'validation_pipeline',
35
+ ];
36
+ // QE tools not duplicated by the hard-coded protocol registrations.
37
+ const BRIDGED_TOOL_NAMES = [
38
+ 'qe/analysis/token_usage', 'qe/code/c4',
39
+ 'qe/coherence/audit', 'qe/coherence/check', 'qe/coherence/collapse',
40
+ 'qe/coherence/consensus', 'qe/coverage/gaps',
41
+ 'qe/embeddings/compare', 'qe/embeddings/generate', 'qe/embeddings/search',
42
+ 'qe/embeddings/stats', 'qe/embeddings/store',
43
+ 'qe/learning/dream', 'qe/learning/optimize',
44
+ 'qe/mincut/health', 'qe/mincut/analyze', 'qe/mincut/strengthen',
45
+ 'qe/planning/goap_execute', 'qe/planning/goap_plan', 'qe/planning/goap_status',
46
+ 'qe/quality/gate', 'qe/qx/analyze', 'qe/requirements/quality-criteria',
47
+ 'qe/security/url-validate', 'qe/tests/load', 'qe/tests/schedule',
48
+ 'qe/visual/compare', 'qe/workflows/browser-load',
49
+ ];
50
+ /** Complete deterministic inventory of names advertised by both MCP paths. */
51
+ export const BUILT_IN_TOOL_NAMES = Object.freeze([...HARD_CODED_TOOL_NAMES, ...BRIDGED_TOOL_NAMES].sort());
52
+ function conservativeDisposition() {
53
+ return {
54
+ annotations: CONSERVATIVE_TOOL_ANNOTATIONS,
55
+ reason: 'No narrow side-effect-free guarantee is recorded for this built-in; retain conservative policy defaults.',
56
+ };
57
+ }
58
+ export const BUILT_IN_TOOL_SAFETY_INVENTORY = Object.freeze(Object.fromEntries(BUILT_IN_TOOL_NAMES.map((name) => [name, conservativeDisposition()])));
59
+ /** Resolve explicit metadata over inventory metadata over conservative defaults. */
60
+ export function resolveToolAnnotations(name, annotations) {
61
+ const reviewedDisposition = BUILT_IN_TOOL_SAFETY_INVENTORY[name];
62
+ return Object.freeze({
63
+ ...(reviewedDisposition?.annotations ?? CONSERVATIVE_TOOL_ANNOTATIONS),
64
+ // Dynamic and plugin-supplied names cannot self-assert optimistic hints.
65
+ // Add the name to the reviewed inventory before accepting overrides.
66
+ ...(reviewedDisposition ? annotations : undefined),
67
+ });
68
+ }
69
+ export function getBuiltInToolAnnotations() {
70
+ return Object.fromEntries(Object.entries(BUILT_IN_TOOL_SAFETY_INVENTORY).map(([name, disposition]) => [name, disposition.annotations]));
71
+ }
72
+ export function getBuiltInToolSafetyInventory() {
73
+ return BUILT_IN_TOOL_SAFETY_INVENTORY;
74
+ }
75
+ //# sourceMappingURL=tool-annotations.js.map
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { v4 as uuidv4 } from 'uuid';
8
8
  import { ALL_DOMAINS } from '../shared/types/index.js';
9
+ import { resolveToolAnnotations } from './tool-annotations.js';
9
10
  import { sanitizeInput } from './security/cve-prevention.js';
10
11
  import { toErrorMessage } from '../shared/error-utils.js';
11
12
  import { BatchToolExecutor } from './middleware/batch-executor.js';
@@ -234,32 +235,36 @@ export class ToolRegistry {
234
235
  * Register a tool
235
236
  */
236
237
  register(definition, handler) {
237
- const existing = this.tools.get(definition.name);
238
+ const normalizedDefinition = {
239
+ ...definition,
240
+ annotations: resolveToolAnnotations(definition.name, definition.annotations),
241
+ };
242
+ const existing = this.tools.get(normalizedDefinition.name);
238
243
  if (existing) {
239
244
  // Update existing tool
240
- existing.definition = definition;
245
+ existing.definition = normalizedDefinition;
241
246
  existing.handler = handler;
242
247
  return;
243
248
  }
244
249
  // Register new tool
245
250
  const tool = {
246
- definition,
251
+ definition: normalizedDefinition,
247
252
  handler,
248
- loaded: !definition.lazyLoad,
253
+ loaded: !normalizedDefinition.lazyLoad,
249
254
  loadCount: 0,
250
255
  };
251
- this.tools.set(definition.name, tool);
256
+ this.tools.set(normalizedDefinition.name, tool);
252
257
  this.stats.totalTools++;
253
258
  // Track by category
254
- this.categoryTools.get(definition.category)?.add(definition.name);
255
- this.stats.byCategory[definition.category]++;
259
+ this.categoryTools.get(normalizedDefinition.category)?.add(normalizedDefinition.name);
260
+ this.stats.byCategory[normalizedDefinition.category]++;
256
261
  // Track by domain if specified
257
- if (definition.domain) {
258
- this.domainTools.get(definition.domain)?.add(definition.name);
259
- this.stats.byDomain[definition.domain] =
260
- (this.stats.byDomain[definition.domain] || 0) + 1;
262
+ if (normalizedDefinition.domain) {
263
+ this.domainTools.get(normalizedDefinition.domain)?.add(normalizedDefinition.name);
264
+ this.stats.byDomain[normalizedDefinition.domain] =
265
+ (this.stats.byDomain[normalizedDefinition.domain] || 0) + 1;
261
266
  }
262
- if (!definition.lazyLoad) {
267
+ if (!normalizedDefinition.lazyLoad) {
263
268
  this.stats.loadedTools++;
264
269
  }
265
270
  }
@@ -5,7 +5,7 @@
5
5
  * All domain tools extend this base class.
6
6
  */
7
7
  import { DomainName } from '../../shared/types';
8
- import { ToolResult, ToolResultMetadata } from '../types';
8
+ import { ToolAnnotations, ToolResult, ToolResultMetadata } from '../types';
9
9
  import { MemoryBackend } from '../../kernel/interfaces';
10
10
  /**
11
11
  * Database-free mode: when AQE_MEMORY_BACKEND=memory, the MCP server keeps all
@@ -114,6 +114,7 @@ export interface MCPToolConfig {
114
114
  schema: MCPToolSchema;
115
115
  streaming?: boolean;
116
116
  timeout?: number;
117
+ annotations?: ToolAnnotations;
117
118
  }
118
119
  /**
119
120
  * Streaming callback for long-running operations
@@ -279,6 +280,11 @@ export declare abstract class MCPToolBase<TParams extends Record<string, unknown
279
280
  * Get tool description
280
281
  */
281
282
  get description(): string;
283
+ /**
284
+ * Return the complete, conservative safety metadata for this tool.
285
+ * Missing hints must never be interpreted as permission to skip policy.
286
+ */
287
+ get annotations(): ToolAnnotations;
282
288
  /**
283
289
  * Get domain this tool belongs to
284
290
  */
@@ -5,6 +5,7 @@
5
5
  * All domain tools extend this base class.
6
6
  */
7
7
  import { v4 as uuidv4 } from 'uuid';
8
+ import { resolveToolAnnotations } from '../tool-annotations.js';
8
9
  import { HybridMemoryBackend } from '../../kernel/hybrid-backend.js';
9
10
  import { InMemoryBackend } from '../../kernel/memory-backend.js';
10
11
  import { findProjectRoot } from '../../kernel/unified-memory.js';
@@ -457,6 +458,13 @@ export class MCPToolBase {
457
458
  get description() {
458
459
  return this.config.description;
459
460
  }
461
+ /**
462
+ * Return the complete, conservative safety metadata for this tool.
463
+ * Missing hints must never be interpreted as permission to skip policy.
464
+ */
465
+ get annotations() {
466
+ return resolveToolAnnotations(this.name, this.config.annotations);
467
+ }
460
468
  /**
461
469
  * Get domain this tool belongs to
462
470
  */
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { MCPToolBase } from './base';
8
8
  import { ToolRegistry } from '../tool-registry';
9
+ import type { ToolAnnotations } from '../types';
9
10
  export declare const QE_TOOL_NAMES: {
10
11
  readonly QX_ANALYZE: "qe/qx/analyze";
11
12
  readonly TEST_SCHEDULE: "qe/tests/schedule";
@@ -80,6 +81,7 @@ export declare function getToolsByDomain(domain: string): MCPToolBase[];
80
81
  export declare function getToolDefinition(tool: MCPToolBase): {
81
82
  name: string;
82
83
  description: string;
84
+ annotations: ToolAnnotations;
83
85
  inputSchema: Record<string, unknown>;
84
86
  };
85
87
  /**
@@ -88,6 +90,7 @@ export declare function getToolDefinition(tool: MCPToolBase): {
88
90
  export declare function getAllToolDefinitions(): Array<{
89
91
  name: string;
90
92
  description: string;
93
+ annotations: ToolAnnotations;
91
94
  inputSchema: Record<string, unknown>;
92
95
  }>;
93
96
  /**
@@ -216,6 +216,7 @@ export function getToolDefinition(tool) {
216
216
  return {
217
217
  name: tool.name,
218
218
  description: tool.description,
219
+ annotations: tool.annotations,
219
220
  inputSchema: {
220
221
  ...schema,
221
222
  type: schema.type || 'object',
@@ -15,6 +15,20 @@ export interface ToolParameter {
15
15
  default?: unknown;
16
16
  enum?: string[];
17
17
  }
18
+ /**
19
+ * Optional safety metadata advertised by an MCP tool.
20
+ *
21
+ * These hints help clients make better presentation and confirmation
22
+ * decisions. They are advisory only: authorization, sandboxing, and policy
23
+ * checks remain authoritative for every invocation.
24
+ */
25
+ export interface ToolAnnotations {
26
+ title?: string;
27
+ readOnlyHint?: boolean;
28
+ destructiveHint?: boolean;
29
+ idempotentHint?: boolean;
30
+ openWorldHint?: boolean;
31
+ }
18
32
  /**
19
33
  * MCP tool definition
20
34
  */
@@ -26,6 +40,7 @@ export interface ToolDefinition {
26
40
  domain?: DomainName;
27
41
  lazyLoad?: boolean;
28
42
  isConcurrencySafe?: boolean;
43
+ annotations?: ToolAnnotations;
29
44
  }
30
45
  /**
31
46
  * Tool categories for organization and lazy loading
@@ -161,6 +176,9 @@ export interface TestGenerateParams {
161
176
  * Test execution parameters
162
177
  */
163
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
+ */
164
182
  testFiles?: string[];
165
183
  testSuites?: string[];
166
184
  parallel?: boolean;
@@ -196,6 +214,8 @@ export interface SecurityScanParams {
196
214
  dast?: boolean;
197
215
  compliance?: string[];
198
216
  target?: string;
217
+ /** URL for explicitly requested dynamic scanning. */
218
+ targetUrl?: string;
199
219
  }
200
220
  /**
201
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
  */