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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +109 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-AKQYU6UH.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-OY5Y2CUM.js → agent-booster-wasm-TQOMLWWX.js} +2 -2
- package/dist/cli/chunks/{agent-handler-TUOH55LD.js → agent-handler-Q3SEMMI2.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-XM3IYKT3.js → agent-memory-branch-SJXAQSZI.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-MICRPL3N.js +2 -0
- package/dist/cli/chunks/{arena-DOCLIEBL.js → arena-7RC7TBGW.js} +4 -4
- package/dist/cli/chunks/{arena-UMFJZKG7.js → arena-UPB7TKUY.js} +2 -2
- package/dist/cli/chunks/{audit-KZLU5VLW.js → audit-IXN5R4WB.js} +3 -3
- package/dist/cli/chunks/base-DZK36ITB.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-MIEZBNUI.js → better-sqlite3-RP4DEGK3.js} +2 -2
- package/dist/cli/chunks/{brain-handler-6PZN46B7.js → brain-handler-H5OVZ22L.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-XCETHA4F.js → branch-enumerator-VPRWDGFJ.js} +2 -2
- package/dist/cli/chunks/{browser-UEXISDCJ.js → browser-B6E7JPPJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-ADK54DOE.js +2 -0
- package/dist/cli/chunks/{chunk-PS6Y662P.js → chunk-26GM5CWD.js} +3 -3
- package/dist/cli/chunks/{chunk-IGRTQ6VT.js → chunk-2GNRW3OD.js} +2 -2
- package/dist/cli/chunks/{chunk-QIY43XQJ.js → chunk-2IGT5WNQ.js} +1 -1
- package/dist/cli/chunks/{chunk-LSXQPMPI.js → chunk-2WT7AKKK.js} +2 -2
- package/dist/cli/chunks/{chunk-5F5V4QYU.js → chunk-33VPWGCM.js} +3 -3
- package/dist/cli/chunks/{chunk-KXMW7XTJ.js → chunk-37BASGWC.js} +2 -2
- package/dist/cli/chunks/{chunk-5KP62DC3.js → chunk-3ABRGG3C.js} +2 -2
- package/dist/cli/chunks/{chunk-T7XYQX5G.js → chunk-3P6NCFI2.js} +2 -2
- package/dist/cli/chunks/{chunk-EEJP3WTQ.js → chunk-42VSQ2MX.js} +3 -3
- package/dist/cli/chunks/chunk-44WISFTU.js +2 -0
- package/dist/cli/chunks/{chunk-5T6PAUZD.js → chunk-4C6UJIHB.js} +1 -1
- package/dist/cli/chunks/{chunk-5TYGSQOL.js → chunk-4JBFJTHJ.js} +1 -1
- package/dist/cli/chunks/{chunk-FH7SCX2I.js → chunk-4OUPCTBS.js} +2 -2
- package/dist/cli/chunks/{chunk-UUE5CBZQ.js → chunk-4Q35TI6Z.js} +2 -2
- package/dist/cli/chunks/{chunk-HJD52N32.js → chunk-4RP5VUBI.js} +2 -2
- package/dist/cli/chunks/{chunk-GRVR3Y6I.js → chunk-4TXAP3YH.js} +1 -1
- package/dist/cli/chunks/{chunk-IIBXGHZT.js → chunk-4UDZLD42.js} +2 -2
- package/dist/cli/chunks/{chunk-GO66DCIZ.js → chunk-4W7QVUNO.js} +2 -2
- package/dist/cli/chunks/{chunk-AESYVAPH.js → chunk-4XPPMADQ.js} +2 -2
- package/dist/cli/chunks/{chunk-3FFMUB3B.js → chunk-527HQAY7.js} +2 -2
- package/dist/cli/chunks/chunk-5BLFXQEB.js +96 -0
- package/dist/cli/chunks/{chunk-QMTBWHGR.js → chunk-5DFHE4H5.js} +3 -3
- package/dist/cli/chunks/{chunk-AZUC7E5S.js → chunk-5F6DWHQG.js} +2 -2
- package/dist/cli/chunks/{chunk-6HMNN2Y2.js → chunk-5FOZO7KM.js} +81 -65
- package/dist/cli/chunks/{chunk-L4WATX6B.js → chunk-5IAB5NRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-JMULRLD4.js → chunk-5P3G6ZW4.js} +1 -1
- package/dist/cli/chunks/{chunk-ND6JBUVH.js → chunk-5Y5TC6BY.js} +2 -2
- package/dist/cli/chunks/{chunk-DKSLJZVA.js → chunk-6F2RM6X2.js} +1 -1
- package/dist/cli/chunks/{chunk-J7VAD4RG.js → chunk-72UJXEKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-RCHDSUVU.js → chunk-74PK3NEW.js} +2 -2
- package/dist/cli/chunks/{chunk-FHBGALBG.js → chunk-7BUERZYL.js} +2 -2
- package/dist/cli/chunks/{chunk-IYB3GRXF.js → chunk-7FYMDKQH.js} +174 -169
- package/dist/cli/chunks/{chunk-CBWF42ET.js → chunk-7G6UX2QN.js} +2 -2
- package/dist/cli/chunks/{chunk-GH3NJOTC.js → chunk-7JQHPANT.js} +3 -3
- package/dist/cli/chunks/{chunk-J2VF7ZO7.js → chunk-7SLAZAVU.js} +2 -2
- package/dist/cli/chunks/{chunk-GYTWUOKU.js → chunk-7Y2CEXRS.js} +4 -4
- package/dist/cli/chunks/{chunk-7AF55H2D.js → chunk-AB4U6ZNI.js} +2 -2
- package/dist/cli/chunks/chunk-AWNYEAGB.js +2 -0
- package/dist/cli/chunks/chunk-B2ZONZPZ.js +5 -0
- package/dist/cli/chunks/{chunk-FZ47ZCRL.js → chunk-B5XFDFBT.js} +1 -1
- package/dist/cli/chunks/{chunk-TLD727EF.js → chunk-B7SWW5A6.js} +2 -2
- package/dist/cli/chunks/chunk-BN7DKW5D.js +2 -0
- package/dist/cli/chunks/{chunk-UWRMPRY5.js → chunk-C46DMCWF.js} +1 -1
- package/dist/cli/chunks/{chunk-5NSSJUWW.js → chunk-CB5JPRIZ.js} +2 -2
- package/dist/cli/chunks/{chunk-A6RB34Y6.js → chunk-CBOPBYPU.js} +1 -1
- package/dist/cli/chunks/{chunk-FRRRDCXY.js → chunk-CR3QGHVN.js} +2 -2
- package/dist/cli/chunks/{chunk-J33LKXVH.js → chunk-D4Z2N74A.js} +1 -1
- package/dist/cli/chunks/{chunk-HKU5PPS7.js → chunk-DBA3N742.js} +1 -1
- package/dist/cli/chunks/{chunk-JJ4GUO4K.js → chunk-DX3C5HPN.js} +1 -1
- package/dist/cli/chunks/{chunk-NNJ63W77.js → chunk-E3FBW6G2.js} +1 -1
- package/dist/cli/chunks/{chunk-6Z6Y3YBX.js → chunk-ELU4IC3I.js} +1 -1
- package/dist/cli/chunks/{chunk-MFAN5W27.js → chunk-EY4OQHU3.js} +1 -1
- package/dist/cli/chunks/{chunk-S53ZUAVI.js → chunk-F67AV5P2.js} +2 -2
- package/dist/cli/chunks/chunk-FD2JFEQC.js +2 -0
- package/dist/cli/chunks/chunk-FKG5OQFT.js +2 -0
- package/dist/cli/chunks/{chunk-RXPHQ4ZE.js → chunk-FUE6LL72.js} +2 -2
- package/dist/cli/chunks/{chunk-HPQU6XZH.js → chunk-G5C2XVZC.js} +1 -1
- package/dist/cli/chunks/{chunk-N22LMACN.js → chunk-G6DCESPU.js} +2 -2
- package/dist/cli/chunks/{chunk-VUXHJPUS.js → chunk-G6ZHTF42.js} +2 -2
- package/dist/cli/chunks/{chunk-QM6EJHP5.js → chunk-GNTVFN7D.js} +1 -1
- package/dist/cli/chunks/{chunk-B6Y6AF4M.js → chunk-H5ZRV5K5.js} +2 -2
- package/dist/cli/chunks/{chunk-X5G3UDWP.js → chunk-H6XBM2LY.js} +2 -2
- package/dist/cli/chunks/{chunk-KXTN3FR4.js → chunk-HOQQCY2K.js} +2 -2
- package/dist/cli/chunks/{chunk-NAJCQJSK.js → chunk-HRUU7E3D.js} +2 -2
- package/dist/cli/chunks/{chunk-ODNLKYOM.js → chunk-HXE5NBJG.js} +1 -1
- package/dist/cli/chunks/{chunk-CCZZZBAO.js → chunk-I4NDQGKP.js} +2 -2
- package/dist/cli/chunks/{chunk-SEKOMKNG.js → chunk-IFFZR6GY.js} +1 -1
- package/dist/cli/chunks/{chunk-WFJKLM6Z.js → chunk-IKIITGU5.js} +3 -3
- package/dist/cli/chunks/{chunk-PYAH4K2U.js → chunk-IP7NSFQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-3BRR2FLH.js → chunk-IQEJGZV6.js} +3 -3
- package/dist/cli/chunks/{chunk-HRUQWABO.js → chunk-IU4EBTA2.js} +3 -3
- package/dist/cli/chunks/{chunk-5Y2QFSVZ.js → chunk-JBB7E26R.js} +2 -2
- package/dist/cli/chunks/{chunk-ZAHCVRR7.js → chunk-JRYZKBY2.js} +2 -2
- package/dist/cli/chunks/{chunk-PMUF7WU6.js → chunk-JV4FZUE7.js} +2 -2
- package/dist/cli/chunks/{chunk-PS5NIMWJ.js → chunk-KF63AYXD.js} +2 -2
- package/dist/cli/chunks/{chunk-F7TRO2OM.js → chunk-KPMGTVB4.js} +1 -1
- package/dist/cli/chunks/chunk-L2GKMBDP.js +2 -0
- package/dist/cli/chunks/{chunk-LMPK63PO.js → chunk-LHGNNZ76.js} +3 -3
- package/dist/cli/chunks/{chunk-HBAQVJDP.js → chunk-LKN7JQTW.js} +2 -2
- package/dist/cli/chunks/{chunk-JZUWPDVS.js → chunk-LLVGTEHU.js} +1 -1
- package/dist/cli/chunks/{chunk-7XL2D56F.js → chunk-LS3EUMBP.js} +6 -6
- package/dist/cli/chunks/{chunk-MDLLEUFN.js → chunk-LTBCAFTZ.js} +3 -3
- package/dist/cli/chunks/{chunk-S4WIAKPL.js → chunk-LVLBIKJD.js} +1 -1
- package/dist/cli/chunks/{chunk-ERTGGFXZ.js → chunk-MDZ6RRLX.js} +2 -2
- package/dist/cli/chunks/{chunk-OBLHI4HA.js → chunk-MWWAMDHI.js} +1 -1
- package/dist/cli/chunks/{chunk-45S5553E.js → chunk-MXMFGSWR.js} +2 -2
- package/dist/cli/chunks/{chunk-HCCILQGN.js → chunk-N4H2QOT5.js} +2 -2
- package/dist/cli/chunks/{chunk-L66BWYQH.js → chunk-NBWQBQO5.js} +1 -1
- package/dist/cli/chunks/{chunk-RYHCYTFE.js → chunk-NN76NTOX.js} +1 -1
- package/dist/cli/chunks/{chunk-75SC3GEX.js → chunk-NTSXHZTC.js} +2 -2
- package/dist/cli/chunks/{chunk-PZZX57ZA.js → chunk-OV5EZO3U.js} +2 -2
- package/dist/cli/chunks/{chunk-7GF6IRSU.js → chunk-OVDKWCD7.js} +2 -2
- package/dist/cli/chunks/{chunk-DFXQLHQM.js → chunk-OVPJQWHW.js} +2 -2
- package/dist/cli/chunks/{chunk-Y63V33M6.js → chunk-OY7MLMEX.js} +5 -5
- package/dist/cli/chunks/{chunk-LJ63HPPN.js → chunk-OYMLHX2B.js} +1 -1
- package/dist/cli/chunks/{chunk-FPBQ7BXU.js → chunk-PI74GOE4.js} +2 -2
- package/dist/cli/chunks/{chunk-LQDFWLKK.js → chunk-PZTVH2AS.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJEAK7D.js → chunk-QLWNXBRU.js} +2 -2
- package/dist/cli/chunks/{chunk-O7KF3GBV.js → chunk-R2AFVFRF.js} +1 -1
- package/dist/cli/chunks/{chunk-TF33GKWA.js → chunk-RKJZWWB7.js} +2 -2
- package/dist/cli/chunks/{chunk-FOAFRC2W.js → chunk-ROX7NLS4.js} +2 -2
- package/dist/cli/chunks/{chunk-OBKMLOHU.js → chunk-RTJ2M6V6.js} +2 -2
- package/dist/cli/chunks/{chunk-7AYTM426.js → chunk-SG47AXJG.js} +1 -1
- package/dist/cli/chunks/{chunk-3AYNHOWS.js → chunk-SGXSB7YO.js} +1 -1
- package/dist/cli/chunks/{chunk-Z5YU2TDS.js → chunk-SHGKY3QB.js} +2 -2
- package/dist/cli/chunks/{chunk-TT7DF2GX.js → chunk-SJPZSCZP.js} +2 -2
- package/dist/cli/chunks/{chunk-RUEHSOE6.js → chunk-SQ3PPISY.js} +1 -1
- package/dist/cli/chunks/{chunk-NEEZ6M4W.js → chunk-STRDSVH3.js} +2 -2
- package/dist/cli/chunks/{chunk-DKXSJDII.js → chunk-T35GZXTU.js} +2 -2
- package/dist/cli/chunks/{chunk-KHUO4NCW.js → chunk-T62DH4GG.js} +2 -2
- package/dist/cli/chunks/{chunk-6YIMLUH6.js → chunk-TFHQE6NK.js} +2 -2
- package/dist/cli/chunks/{chunk-ZC3HC6FO.js → chunk-TGLAWI62.js} +1 -1
- package/dist/cli/chunks/{chunk-4MT62HKK.js → chunk-TISSZFHO.js} +1 -1
- package/dist/cli/chunks/{chunk-3XRXUVUI.js → chunk-TJEIOE7F.js} +1 -1
- package/dist/cli/chunks/{chunk-TQ2JZVZ3.js → chunk-TTMHIOQ3.js} +2 -2
- package/dist/cli/chunks/{chunk-VEWYUEVY.js → chunk-UHQY3GK7.js} +2 -2
- package/dist/cli/chunks/{chunk-MZ2PJUN6.js → chunk-UMENRGHK.js} +2 -2
- package/dist/cli/chunks/{chunk-H2DX36SC.js → chunk-UMNYF5EZ.js} +2 -2
- package/dist/cli/chunks/{chunk-SZRDEPUY.js → chunk-UTVRQEZM.js} +3 -3
- package/dist/cli/chunks/{chunk-4ZLFUO4I.js → chunk-UYJHYMEQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6DDMHZWH.js → chunk-V4AOVDCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-CGDW47WP.js → chunk-VIDBBB6F.js} +2 -2
- package/dist/cli/chunks/{chunk-6B77GPWL.js → chunk-VWNHKYK7.js} +2 -2
- package/dist/cli/chunks/{chunk-EPBWFTHH.js → chunk-WYMGK5DX.js} +2 -2
- package/dist/cli/chunks/{chunk-3WSH4HD2.js → chunk-XA7CG3LH.js} +2 -2
- package/dist/cli/chunks/{chunk-FFRKTZYP.js → chunk-XX7HUSX2.js} +2 -2
- package/dist/cli/chunks/{chunk-PMREFRPP.js → chunk-XXCYQXK3.js} +2 -2
- package/dist/cli/chunks/{chunk-EHW62JL2.js → chunk-Y2DVFVGI.js} +1 -1
- package/dist/cli/chunks/{chunk-D6RCRTTR.js → chunk-Y5SQBI2F.js} +2 -2
- package/dist/cli/chunks/{chunk-VVP2ROXD.js → chunk-YAKS3CAB.js} +2 -2
- package/dist/cli/chunks/{chunk-C3XNFIOM.js → chunk-YCBDE2N7.js} +2 -2
- package/dist/cli/chunks/{chunk-RVCMZUSJ.js → chunk-YDNSLLBS.js} +2 -2
- package/dist/cli/chunks/{chunk-TGFJUL6M.js → chunk-YEXPFHV6.js} +2 -2
- package/dist/cli/chunks/{chunk-UN7EHLRV.js → chunk-YGB6R5DW.js} +1 -1
- package/dist/cli/chunks/{chunk-JNSTKE3K.js → chunk-YL7T3VV7.js} +2 -2
- package/dist/cli/chunks/{chunk-3TMUCJNJ.js → chunk-ZHXWGNYM.js} +1 -1
- package/dist/cli/chunks/{chunk-DKUKGBJE.js → chunk-ZK5JKHP4.js} +1 -1
- package/dist/cli/chunks/{chunk-IYIMLLUV.js → chunk-ZN3J6TZD.js} +1 -1
- package/dist/cli/chunks/{chunk-3JMSXOU4.js → chunk-ZUG5MOUB.js} +2 -2
- package/dist/cli/chunks/{ci-Q2VX75PS.js → ci-YVKDQWIX.js} +2 -2
- package/dist/cli/chunks/ci-output-LK3MBXLZ.js +2 -0
- package/dist/cli/chunks/{circuit-breaker-JMRLG2XI.js → circuit-breaker-7AIXACR7.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-IMXYALBU.js → claude-flow-setup-UA7EO6VN.js} +2 -2
- package/dist/cli/chunks/client-M72GXFVQ.js +2 -0
- package/dist/cli/chunks/{cline-installer-HWFASEGE.js → cline-installer-YDDCKKEV.js} +2 -2
- package/dist/cli/chunks/{code-3V37TCAD.js → code-URB7UAKW.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-5V54WGFL.js → code-index-extractor-BL6HWH4Q.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UCA5AVE6.js → codex-installer-2AVEO4EA.js} +2 -2
- package/dist/cli/chunks/{completions-2DMRCQU6.js → completions-RCKBSSSS.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-MMQRXBTD.js → complexity-analyzer-LEDG62YK.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-FAARXP3S.js → continuedev-installer-VOTCEBFH.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-AKQALMB5.js → copilot-installer-NVTGLZX3.js} +2 -2
- package/dist/cli/chunks/core-handlers-C32RAMVI.js +2 -0
- package/dist/cli/chunks/{cost-tracker-AXWHDND5.js → cost-tracker-GJIFB2BM.js} +2 -2
- package/dist/cli/chunks/{coverage-ZLSKKCG5.js → coverage-ZTPJWXWE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-UGFUCPKC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UALCQKVD.js → cursor-installer-CMGJQMHX.js} +2 -2
- package/dist/cli/chunks/{daemon-4LNOPJGN.js → daemon-V456IWR3.js} +8 -8
- package/dist/cli/chunks/{daemon-K3DFGCXC.js → daemon-Y2I3YVIU.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-LCQ7MYKC.js → dag-attention-scheduler-ZCBBOD3D.js} +2 -2
- package/dist/cli/chunks/{detect-P7PEN3MZ.js → detect-2GHEA4A3.js} +2 -2
- package/dist/cli/chunks/{dist-node-I72BJC2D.js → dist-node-44AGYJCH.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LROF6KWN.js → domain-handler-IDLIEP6X.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-M2ZSSTPV.js → domain-transfer-KLEXGIRF.js} +2 -2
- package/dist/cli/chunks/dream-UFBBXY5W.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-MTBPUGO4.js → embed-and-insert-pattern-DUW6K35A.js} +2 -2
- package/dist/cli/chunks/{eval-O24ALB3W.js → eval-PR6YWDFM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-7JXEOGRE.js → experience-capture-middleware-CJJJN7CF.js} +3 -3
- package/dist/cli/chunks/{fast-paths-4CFYJV4U.js → fast-paths-LGLLKX6P.js} +2 -2
- package/dist/cli/chunks/{feature-flags-CHPUA7IM.js → feature-flags-33D3I4DD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-E6PIM6ZB.js → feature-flags-QL4NCEGW.js} +2 -2
- package/dist/cli/chunks/{file-discovery-2ANIAUCP.js → file-discovery-GKCYJPFZ.js} +2 -2
- package/dist/cli/chunks/{fleet-2MQ3OGCP.js → fleet-QNT6X2YI.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-P7JW3622.js → gnn-wrapper-ELSGT67Z.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-WWWZSA7V.js → heartbeat-handler-ZUI3DOOP.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-VQWHSGTY.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-BS3NXWGU.js +2 -0
- package/dist/cli/chunks/hnsw-index-JP26B4HW.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-W634ZOTV.js → hnsw-legacy-bridge-EZMM5JWL.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-SLZDLMKM.js → hnswlib-node-G4CE3EOS.js} +2 -2
- package/dist/cli/chunks/{hooks-3BFAZGG7.js → hooks-LCVXXA55.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-XJSGXP2J.js → hypergraph-engine-6Z7RQ3HI.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-RVUWZMOX.js → hypergraph-handler-PLI2GYPK.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-WRE4CWPJ.js +2 -0
- package/dist/cli/chunks/{init-handler-FYOZNNNO.js → init-handler-7VH3QJ5Y.js} +6 -6
- package/dist/cli/chunks/init-wizard-OFOEYB75.js +2 -0
- package/dist/cli/chunks/kernel-MXNFWNUD.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-MAAKFVSB.js → kilocode-installer-U3MW62DE.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-GX3TLZC5.js → kiro-installer-PPEAC44T.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-7JE2TVKJ.js +2 -0
- package/dist/cli/chunks/{learning-T4QZ6C26.js → learning-7B5NITDV.js} +3 -3
- package/dist/cli/chunks/{llm-router-N2M4WXOC.js → llm-router-BNEPT5OB.js} +4 -4
- package/dist/cli/chunks/llm-router-service-GTDVDKSU.js +2 -0
- package/dist/cli/chunks/{load-6RU3G4P2.js → load-VO7ABNHV.js} +2 -2
- package/dist/cli/chunks/load-test-JZ4CLSBF.js +2 -0
- package/dist/cli/chunks/{mcp-EFBO7BAU.js → mcp-THXEINCL.js} +2 -2
- package/dist/cli/chunks/{memory-AXU2M3DN.js → memory-FZTT7ADM.js} +5 -5
- package/dist/cli/chunks/memory-backend-Q54CC5A5.js +2 -0
- package/dist/cli/chunks/memory-handlers-IIBJXKHZ.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-W7AFGVNH.js → multi-model-executor-HEDVOZ6X.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-KJE2RLCH.js → opencode-installer-GQ7J5SBG.js} +2 -2
- package/dist/cli/chunks/{orchestrator-CL6MLGVU.js → orchestrator-66JK2OS5.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-W33O7FYO.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-7SNSJ7K2.js → pattern-usage-recorder-O6XHM2G5.js} +2 -2
- package/dist/cli/chunks/{pipeline-3UU6ON3F.js → pipeline-UOG6UO6D.js} +2 -2
- package/dist/cli/chunks/{platform-SNMPIDIT.js → platform-Q7UH7FZQ.js} +2 -2
- package/dist/cli/chunks/{plugin-65IIUUCU.js → plugin-7OFLNGOS.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-WWWJRLRP.js → prime-radiant-advanced-wasm-OSRDK2FW.js} +2 -2
- package/dist/cli/chunks/protocol-executor-VGN4M7XY.js +2 -0
- package/dist/cli/chunks/{protocol-handler-SEBHCLLJ.js → protocol-handler-WLYTX6FS.js} +2 -2
- package/dist/cli/chunks/{prove-N4X7CCJ4.js → prove-QVNE4V3J.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-7VB5LJGS.js +2 -0
- package/dist/cli/chunks/{quality-LBCJWXMU.js → quality-DNE2RKE5.js} +2 -2
- package/dist/cli/chunks/{quality-gate-KZIQI7QT.js → quality-gate-2K35GCSI.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-HIDMJMMG.js +2 -0
- package/dist/cli/chunks/{real-embeddings-XCZFHFME.js → real-embeddings-SF42ML7G.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-P3O6B7PT.js → roocode-installer-NCEZPF5L.js} +2 -2
- package/dist/cli/chunks/router-CTIJS4D7.js +2 -0
- package/dist/cli/chunks/routing-feedback-LFYYZS5J.js +2 -0
- package/dist/cli/chunks/{routing-handler-OXZ4DOV4.js → routing-handler-4MXXZRYP.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-PSY5IDSL.js → ruvector-commands-WDFMMCMK.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-MNPMIWVM.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-DXOKSSNW.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-4SUT7GTJ.js → rvf-migration-coordinator-JT7ZCJY7.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-PZKUKA7R.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-TCKC22FH.js → rvf-store-integrity-Q3FGYKFT.js} +2 -2
- package/dist/cli/chunks/safe-db-73BLFV2C.js +2 -0
- package/dist/cli/chunks/schedule-YVTGTTI4.js +2 -0
- package/dist/cli/chunks/scheduler-5DSAFIRQ.js +2 -0
- package/dist/cli/chunks/security-CJJ3WJSB.js +13 -0
- package/dist/cli/chunks/{shared-rvf-adapter-ZJFN52C2.js → shared-rvf-adapter-6RGCTLHD.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-V2R37HWV.js → shared-rvf-dual-writer-KIA6Q6MT.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-LRG4IPCU.js +2 -0
- package/dist/cli/chunks/{status-handler-XEKWNVDR.js → status-handler-BADQV2KA.js} +2 -2
- package/dist/cli/chunks/{structural-health-QMIW6WUN.js → structural-health-VMYEYRZG.js} +2 -2
- package/dist/cli/chunks/{sync-H5SXWXPP.js → sync-PXLROLHB.js} +2 -2
- package/dist/cli/chunks/{sync-GDYJ2ULT.js → sync-ULY7T5II.js} +2 -2
- package/dist/cli/chunks/{task-handler-EPLKCQHY.js → task-handler-L7E2I267.js} +2 -2
- package/dist/cli/chunks/{task-handlers-22NTLWTC.js → task-handlers-6DPKE4AK.js} +3 -3
- package/dist/cli/chunks/{test-WHJFRZ3F.js → test-WCLURQUT.js} +11 -11
- package/dist/cli/chunks/test-scheduling-4CNJA6TW.js +15 -0
- package/dist/cli/chunks/{token-bootstrap-BW5WA6PY.js → token-bootstrap-GTI24JAL.js} +2 -2
- package/dist/cli/chunks/{token-usage-4A4O57R6.js → token-usage-DRVG6PKO.js} +2 -2
- package/dist/cli/chunks/{transformers-FYTBRV46.js → transformers-IMDDAMYQ.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-TZIJPLF3.js → tree-sitter-wasm-parser-WBZIHVFA.js} +2 -2
- package/dist/cli/chunks/{types-B2L6LKFA.js → types-TXMY5M2K.js} +2 -2
- package/dist/cli/chunks/unified-memory-VBQ572X4.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-J3L74ZRY.js +2 -0
- package/dist/cli/chunks/unified-persistence-EM2VYRTQ.js +2 -0
- package/dist/cli/chunks/{upgrade-O6U7EA7V.js → upgrade-6ALSDWDD.js} +2 -2
- package/dist/cli/chunks/{validate-FHNZ5XL3.js → validate-XF4ZG3LC.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-YOLLUEHE.js → validate-swarm-P5TAFRDA.js} +2 -2
- package/dist/cli/chunks/{vibium-UXRPEIXB.js → vibium-2XDXKNKZ.js} +2 -2
- package/dist/cli/chunks/visual-security-GX4S7K6O.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-JJ5UIYFD.js → web-tree-sitter-4JVRQPX5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-I4QMQPIL.js → windsurf-installer-WYJXVDO5.js} +2 -2
- package/dist/cli/chunks/witness-chain-QGKMHCNW.js +2 -0
- package/dist/cli/chunks/{witness-chain-BIJ7WDGS.js → witness-chain-RPZ2SE2V.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-3SMMLJLP.js → witness-key-manager-LXG2VBQQ.js} +2 -2
- package/dist/cli/chunks/{workflow-33PUXXJV.js → workflow-2OYNO7UU.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-KWHIJMFV.js +2 -0
- package/dist/cli/chunks/{wrappers-ASAU36VK.js → wrappers-DIJNNFU6.js} +2 -2
- package/dist/cli/commands/daemon.js +3 -0
- package/dist/cli/commands/security.js +167 -100
- package/dist/cli/commands/test.js +1 -0
- package/dist/cli/foreground-command.d.ts +3 -0
- package/dist/cli/foreground-command.js +22 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/utils/ci-output.d.ts +17 -0
- package/dist/cli/utils/ci-output.js +34 -2
- package/dist/coordination/handlers/handler-types.d.ts +3 -0
- package/dist/coordination/handlers/quality-handlers.js +10 -0
- package/dist/coordination/handlers/security-handlers.js +168 -72
- package/dist/coordination/handlers/test-execution-handlers.js +37 -43
- package/dist/coordination/protocols/security-audit.d.ts +3 -0
- package/dist/coordination/protocols/security-audit.js +61 -39
- package/dist/coordination/result-saver.js +36 -5
- package/dist/coordination/task-executor.d.ts +3 -1
- package/dist/coordination/task-executor.js +4 -0
- package/dist/domains/security-compliance/interfaces.d.ts +5 -0
- package/dist/domains/security-compliance/interfaces.js +0 -6
- package/dist/domains/security-compliance/scan-discovery.d.ts +12 -0
- package/dist/domains/security-compliance/scan-discovery.js +105 -0
- package/dist/domains/security-compliance/scan-evidence.d.ts +57 -0
- package/dist/domains/security-compliance/scan-evidence.js +2 -0
- package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +3 -2
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +109 -65
- package/dist/domains/security-compliance/services/semgrep-integration.d.ts +9 -2
- package/dist/domains/security-compliance/services/semgrep-integration.js +68 -20
- package/dist/domains/test-execution/services/flaky-detector.js +14 -3
- package/dist/domains/test-execution/services/retry-handler.js +18 -8
- package/dist/domains/test-execution/services/test-executor.js +46 -12
- package/dist/init/init-wizard-hooks.js +2 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +3 -20
- package/dist/integrations/coherence/engines/cohomology-adapter.js +100 -30
- package/dist/mcp/bundle.js +499 -478
- package/dist/mcp/handlers/domain-handler-configs.d.ts +22 -1
- package/dist/mcp/handlers/domain-handler-configs.js +50 -19
- package/dist/mcp/handlers/domain-handlers.d.ts +7 -5
- package/dist/mcp/handlers/domain-handlers.js +7 -5
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/protocol-server.js +20 -7
- package/dist/mcp/qe-tool-bridge.js +1 -0
- package/dist/mcp/tool-annotations.d.ts +25 -0
- package/dist/mcp/tool-annotations.js +75 -0
- package/dist/mcp/tool-registry.js +17 -12
- package/dist/mcp/tools/base.d.ts +7 -1
- package/dist/mcp/tools/base.js +8 -0
- package/dist/mcp/tools/registry.d.ts +3 -0
- package/dist/mcp/tools/registry.js +1 -0
- package/dist/mcp/types.d.ts +20 -0
- package/dist/shared/llm/router/hybrid-router.d.ts +4 -0
- package/dist/shared/llm/router/hybrid-router.js +74 -26
- package/dist/shared/llm/router/types.d.ts +9 -2
- package/dist/shared/test-runner-verdict.d.ts +29 -0
- package/dist/shared/test-runner-verdict.js +43 -0
- package/dist/shared/vitest-json-report.d.ts +45 -0
- package/dist/shared/vitest-json-report.js +71 -0
- package/dist/test-scheduling/executors/vitest-executor.js +18 -6
- package/dist/validation/frontier-judge.d.ts +7 -4
- package/dist/validation/frontier-judge.js +11 -6
- package/package.json +8 -7
- package/dist/cli/chunks/adapter-I2N7PEKG.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-U4ALUH6A.js +0 -2
- package/dist/cli/chunks/base-RCYIBNHM.js +0 -2
- package/dist/cli/chunks/browser-workflow-L6TDB5O5.js +0 -2
- package/dist/cli/chunks/chunk-CGZ7LTUK.js +0 -2
- package/dist/cli/chunks/chunk-H5LSXVWY.js +0 -5
- package/dist/cli/chunks/chunk-QAE4BOIV.js +0 -2
- package/dist/cli/chunks/chunk-RXHI6CKK.js +0 -81
- package/dist/cli/chunks/chunk-YXN47QOI.js +0 -2
- package/dist/cli/chunks/ci-output-MD5GTVR2.js +0 -2
- package/dist/cli/chunks/client-L4PIXCGV.js +0 -2
- package/dist/cli/chunks/core-handlers-KROSXP4V.js +0 -2
- package/dist/cli/chunks/cross-domain-router-WMTYBOON.js +0 -2
- package/dist/cli/chunks/dream-AV63YQ2Y.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-5IZUGMC2.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-NV2NNBJL.js +0 -2
- package/dist/cli/chunks/hnsw-index-GRJ3KA2O.js +0 -2
- package/dist/cli/chunks/impact-analyzer-YM4QUWVH.js +0 -2
- package/dist/cli/chunks/init-wizard-YESXGIK6.js +0 -2
- package/dist/cli/chunks/kernel-VH5SKESU.js +0 -2
- package/dist/cli/chunks/knowledge-graph-F3NL4WJV.js +0 -2
- package/dist/cli/chunks/llm-router-service-HQYCJMPK.js +0 -2
- package/dist/cli/chunks/load-test-GWRGKWMN.js +0 -2
- package/dist/cli/chunks/memory-backend-7A2PFKPV.js +0 -2
- package/dist/cli/chunks/memory-handlers-65CXN76C.js +0 -2
- package/dist/cli/chunks/pattern-null-store-K2WPRYCP.js +0 -2
- package/dist/cli/chunks/protocol-executor-TJDLEHND.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-CGRMFPDM.js +0 -2
- package/dist/cli/chunks/queen-coordinator-FKP6QZAQ.js +0 -2
- package/dist/cli/chunks/router-KZ5BISAM.js +0 -2
- package/dist/cli/chunks/routing-feedback-O4Y5TTR6.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-NG3UF3D5.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-PUHVTKQY.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-ODXFKZ6G.js +0 -2
- package/dist/cli/chunks/safe-db-BUQDNH2R.js +0 -2
- package/dist/cli/chunks/schedule-ZXNDZNNB.js +0 -2
- package/dist/cli/chunks/scheduler-YUQQWWW3.js +0 -2
- package/dist/cli/chunks/security-RQGUQGSI.js +0 -14
- package/dist/cli/chunks/sqlite-persistence-HVSX46C7.js +0 -2
- package/dist/cli/chunks/test-scheduling-KZVFZOQN.js +0 -15
- package/dist/cli/chunks/unified-memory-AHN4RVBP.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-XB7JPF74.js +0 -2
- package/dist/cli/chunks/unified-persistence-53KWNFQJ.js +0 -2
- package/dist/cli/chunks/visual-security-CRPYS7L7.js +0 -2
- package/dist/cli/chunks/witness-chain-5WCR2CAS.js +0 -2
- 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
|
-
|
|
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
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
|
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
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
*/
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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: '
|
|
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: '
|
|
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
|
|
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: '
|
|
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
|
-
|
|
1450
|
-
|
|
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 = {};
|
|
@@ -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
|
|
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 =
|
|
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: !
|
|
253
|
+
loaded: !normalizedDefinition.lazyLoad,
|
|
249
254
|
loadCount: 0,
|
|
250
255
|
};
|
|
251
|
-
this.tools.set(
|
|
256
|
+
this.tools.set(normalizedDefinition.name, tool);
|
|
252
257
|
this.stats.totalTools++;
|
|
253
258
|
// Track by category
|
|
254
|
-
this.categoryTools.get(
|
|
255
|
-
this.stats.byCategory[
|
|
259
|
+
this.categoryTools.get(normalizedDefinition.category)?.add(normalizedDefinition.name);
|
|
260
|
+
this.stats.byCategory[normalizedDefinition.category]++;
|
|
256
261
|
// Track by domain if specified
|
|
257
|
-
if (
|
|
258
|
-
this.domainTools.get(
|
|
259
|
-
this.stats.byDomain[
|
|
260
|
-
(this.stats.byDomain[
|
|
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 (!
|
|
267
|
+
if (!normalizedDefinition.lazyLoad) {
|
|
263
268
|
this.stats.loadedTools++;
|
|
264
269
|
}
|
|
265
270
|
}
|
package/dist/mcp/tools/base.d.ts
CHANGED
|
@@ -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
|
*/
|
package/dist/mcp/tools/base.js
CHANGED
|
@@ -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
|
/**
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -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
|
*/
|