agentic-qe 3.14.2 → 3.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +72 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-AKQYU6UH.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-SD5N32MX.js → agent-booster-wasm-TQOMLWWX.js} +2 -2
- package/dist/cli/chunks/{agent-handler-OZRSJM7F.js → agent-handler-Q3SEMMI2.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NYTRANRN.js → agent-memory-branch-SJXAQSZI.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-MICRPL3N.js +2 -0
- package/dist/cli/chunks/{arena-EX3SC2DP.js → arena-7RC7TBGW.js} +4 -4
- package/dist/cli/chunks/{arena-FOTVSRK4.js → arena-UPB7TKUY.js} +2 -2
- package/dist/cli/chunks/{audit-Q5GHSUQY.js → audit-IXN5R4WB.js} +3 -3
- package/dist/cli/chunks/base-DZK36ITB.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-S7M5R2HS.js → better-sqlite3-RP4DEGK3.js} +2 -2
- package/dist/cli/chunks/{brain-handler-5FSA46R5.js → brain-handler-H5OVZ22L.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-RWAXTGEU.js → branch-enumerator-VPRWDGFJ.js} +2 -2
- package/dist/cli/chunks/{browser-IGDESJGF.js → browser-B6E7JPPJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-ADK54DOE.js +2 -0
- package/dist/cli/chunks/{chunk-E3Q7WNJD.js → chunk-26GM5CWD.js} +3 -3
- package/dist/cli/chunks/{chunk-BWRHOIYC.js → chunk-2GNRW3OD.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCDXJ27H.js → chunk-2IGT5WNQ.js} +1 -1
- package/dist/cli/chunks/{chunk-7SK6IMGZ.js → chunk-2WT7AKKK.js} +2 -2
- package/dist/cli/chunks/{chunk-DVHWLAEO.js → chunk-33VPWGCM.js} +3 -3
- package/dist/cli/chunks/{chunk-NAZVPZJS.js → chunk-37BASGWC.js} +2 -2
- package/dist/cli/chunks/{chunk-Q335R4MR.js → chunk-3ABRGG3C.js} +2 -2
- package/dist/cli/chunks/{chunk-IWFL6EFI.js → chunk-3P6NCFI2.js} +2 -2
- package/dist/cli/chunks/{chunk-4AKGBUYD.js → chunk-42VSQ2MX.js} +3 -3
- package/dist/cli/chunks/{chunk-2LKAMMMI.js → chunk-44WISFTU.js} +2 -2
- package/dist/cli/chunks/{chunk-RFNEHNJV.js → chunk-4C6UJIHB.js} +1 -1
- package/dist/cli/chunks/{chunk-CTCQOYBS.js → chunk-4JBFJTHJ.js} +1 -1
- package/dist/cli/chunks/{chunk-GJAWEUIN.js → chunk-4OUPCTBS.js} +2 -2
- package/dist/cli/chunks/{chunk-2EHFEMRU.js → chunk-4Q35TI6Z.js} +2 -2
- package/dist/cli/chunks/{chunk-N3RN4QTC.js → chunk-4RP5VUBI.js} +2 -2
- package/dist/cli/chunks/{chunk-ZYLSOBOR.js → chunk-4TXAP3YH.js} +1 -1
- package/dist/cli/chunks/{chunk-KZOBLLXW.js → chunk-4UDZLD42.js} +2 -2
- package/dist/cli/chunks/{chunk-UYTWDS2R.js → chunk-4W7QVUNO.js} +2 -2
- package/dist/cli/chunks/{chunk-4ZUZDFAA.js → chunk-4XPPMADQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TENYL5TI.js → chunk-527HQAY7.js} +2 -2
- package/dist/cli/chunks/chunk-5BLFXQEB.js +96 -0
- package/dist/cli/chunks/{chunk-OX6T26CD.js → chunk-5DFHE4H5.js} +3 -3
- package/dist/cli/chunks/{chunk-T46LOLW3.js → chunk-5F6DWHQG.js} +2 -2
- package/dist/cli/chunks/{chunk-FVGTINVR.js → chunk-5FOZO7KM.js} +81 -65
- package/dist/cli/chunks/{chunk-T4C56HBW.js → chunk-5IAB5NRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4MH22236.js → chunk-5P3G6ZW4.js} +1 -1
- package/dist/cli/chunks/{chunk-7AFBNU6K.js → chunk-5Y5TC6BY.js} +2 -2
- package/dist/cli/chunks/{chunk-VSYBMNIR.js → chunk-6F2RM6X2.js} +1 -1
- package/dist/cli/chunks/{chunk-ICKLBATY.js → chunk-72UJXEKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-A7N3YUDJ.js → chunk-74PK3NEW.js} +2 -2
- package/dist/cli/chunks/{chunk-PMUBG2RU.js → chunk-7BUERZYL.js} +2 -2
- package/dist/cli/chunks/{chunk-HZMLNM2T.js → chunk-7FYMDKQH.js} +174 -169
- package/dist/cli/chunks/{chunk-67A6PEZM.js → chunk-7G6UX2QN.js} +2 -2
- package/dist/cli/chunks/{chunk-G2CLZVYI.js → chunk-7JQHPANT.js} +3 -3
- package/dist/cli/chunks/{chunk-TLPL3EQY.js → chunk-7SLAZAVU.js} +2 -2
- package/dist/cli/chunks/{chunk-4UCMTYFQ.js → chunk-7Y2CEXRS.js} +4 -4
- package/dist/cli/chunks/{chunk-2H5YJ5ZK.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-6F4WHN7D.js → chunk-B5XFDFBT.js} +1 -1
- package/dist/cli/chunks/{chunk-5EHLGOWW.js → chunk-B7SWW5A6.js} +2 -2
- package/dist/cli/chunks/{chunk-P64DMQ2C.js → chunk-BN7DKW5D.js} +1 -1
- package/dist/cli/chunks/{chunk-CIESXO73.js → chunk-C46DMCWF.js} +1 -1
- package/dist/cli/chunks/{chunk-HZ6NEJMO.js → chunk-CB5JPRIZ.js} +2 -2
- package/dist/cli/chunks/{chunk-SEHCX4NH.js → chunk-CBOPBYPU.js} +1 -1
- package/dist/cli/chunks/{chunk-LWUJQGCS.js → chunk-CR3QGHVN.js} +2 -2
- package/dist/cli/chunks/{chunk-NHHWLJQF.js → chunk-D4Z2N74A.js} +1 -1
- package/dist/cli/chunks/{chunk-4K27ESCA.js → chunk-DBA3N742.js} +1 -1
- package/dist/cli/chunks/{chunk-2TG24LYQ.js → chunk-DX3C5HPN.js} +1 -1
- package/dist/cli/chunks/{chunk-S4MR6RTE.js → chunk-E3FBW6G2.js} +1 -1
- package/dist/cli/chunks/{chunk-GHUPID5E.js → chunk-ELU4IC3I.js} +1 -1
- package/dist/cli/chunks/{chunk-C7AXRI7E.js → chunk-EY4OQHU3.js} +1 -1
- package/dist/cli/chunks/{chunk-6LMLN5R2.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-UIGEUEBT.js → chunk-FUE6LL72.js} +2 -2
- package/dist/cli/chunks/{chunk-4RT7I7PI.js → chunk-G5C2XVZC.js} +1 -1
- package/dist/cli/chunks/{chunk-WVY22NHZ.js → chunk-G6DCESPU.js} +2 -2
- package/dist/cli/chunks/{chunk-3DFFFXXO.js → chunk-G6ZHTF42.js} +2 -2
- package/dist/cli/chunks/{chunk-CH2TQCV5.js → chunk-GNTVFN7D.js} +1 -1
- package/dist/cli/chunks/{chunk-WMW47QMR.js → chunk-H5ZRV5K5.js} +2 -2
- package/dist/cli/chunks/{chunk-4M6A3PVJ.js → chunk-H6XBM2LY.js} +2 -2
- package/dist/cli/chunks/{chunk-4N44UJGI.js → chunk-HOQQCY2K.js} +2 -2
- package/dist/cli/chunks/{chunk-D4RCV4LY.js → chunk-HRUU7E3D.js} +2 -2
- package/dist/cli/chunks/{chunk-EAJK25IS.js → chunk-HXE5NBJG.js} +1 -1
- package/dist/cli/chunks/{chunk-IUNMW454.js → chunk-I4NDQGKP.js} +2 -2
- package/dist/cli/chunks/{chunk-CJHVOBJY.js → chunk-IFFZR6GY.js} +1 -1
- package/dist/cli/chunks/{chunk-YN6W2XIT.js → chunk-IKIITGU5.js} +3 -3
- package/dist/cli/chunks/{chunk-JIUF6NV6.js → chunk-IP7NSFQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-3C2K4YMS.js → chunk-IQEJGZV6.js} +3 -3
- package/dist/cli/chunks/{chunk-RGH3WGWD.js → chunk-IU4EBTA2.js} +3 -3
- package/dist/cli/chunks/{chunk-QW4LN5NK.js → chunk-JBB7E26R.js} +2 -2
- package/dist/cli/chunks/{chunk-RYJHREYS.js → chunk-JRYZKBY2.js} +2 -2
- package/dist/cli/chunks/{chunk-6EHN7Q2Q.js → chunk-JV4FZUE7.js} +2 -2
- package/dist/cli/chunks/{chunk-PZKZY6PB.js → chunk-KF63AYXD.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFGND4QK.js → chunk-KPMGTVB4.js} +1 -1
- package/dist/cli/chunks/chunk-L2GKMBDP.js +2 -0
- package/dist/cli/chunks/{chunk-7FWP7CZY.js → chunk-LHGNNZ76.js} +3 -3
- package/dist/cli/chunks/{chunk-HSJ5FQCF.js → chunk-LKN7JQTW.js} +2 -2
- package/dist/cli/chunks/{chunk-EH5OCHAJ.js → chunk-LLVGTEHU.js} +1 -1
- package/dist/cli/chunks/{chunk-TYVQNYXX.js → chunk-LS3EUMBP.js} +6 -6
- package/dist/cli/chunks/{chunk-F2KRT2II.js → chunk-LTBCAFTZ.js} +3 -3
- package/dist/cli/chunks/{chunk-PVHO6KLB.js → chunk-LVLBIKJD.js} +1 -1
- package/dist/cli/chunks/{chunk-5WJUNRTY.js → chunk-MDZ6RRLX.js} +2 -2
- package/dist/cli/chunks/{chunk-W4OQYLYO.js → chunk-MWWAMDHI.js} +1 -1
- package/dist/cli/chunks/{chunk-N5ZRUOMR.js → chunk-MXMFGSWR.js} +2 -2
- package/dist/cli/chunks/{chunk-L2F7FVIU.js → chunk-N4H2QOT5.js} +2 -2
- package/dist/cli/chunks/{chunk-R5RNOLHI.js → chunk-NBWQBQO5.js} +1 -1
- package/dist/cli/chunks/{chunk-IVGVOGIZ.js → chunk-NN76NTOX.js} +1 -1
- package/dist/cli/chunks/{chunk-OBCKP3G4.js → chunk-NTSXHZTC.js} +2 -2
- package/dist/cli/chunks/{chunk-YF5OP6CR.js → chunk-OV5EZO3U.js} +2 -2
- package/dist/cli/chunks/{chunk-JQ2ZD3WO.js → chunk-OVDKWCD7.js} +2 -2
- package/dist/cli/chunks/{chunk-WBH4C4BG.js → chunk-OVPJQWHW.js} +2 -2
- package/dist/cli/chunks/{chunk-6SZKLWZT.js → chunk-OY7MLMEX.js} +5 -5
- package/dist/cli/chunks/{chunk-NG2UVPTW.js → chunk-OYMLHX2B.js} +1 -1
- package/dist/cli/chunks/{chunk-RVCWSAXI.js → chunk-PI74GOE4.js} +2 -2
- package/dist/cli/chunks/{chunk-42WUDDUU.js → chunk-PZTVH2AS.js} +2 -2
- package/dist/cli/chunks/{chunk-4PH7O5ZH.js → chunk-QLWNXBRU.js} +2 -2
- package/dist/cli/chunks/{chunk-FPHPP5TQ.js → chunk-R2AFVFRF.js} +1 -1
- package/dist/cli/chunks/{chunk-MWQTACNA.js → chunk-RKJZWWB7.js} +2 -2
- package/dist/cli/chunks/{chunk-FREF6Y4L.js → chunk-ROX7NLS4.js} +2 -2
- package/dist/cli/chunks/{chunk-K574FLVB.js → chunk-RTJ2M6V6.js} +2 -2
- package/dist/cli/chunks/{chunk-NWFIJNEB.js → chunk-SG47AXJG.js} +1 -1
- package/dist/cli/chunks/{chunk-UHTAI4ZB.js → chunk-SGXSB7YO.js} +1 -1
- package/dist/cli/chunks/{chunk-PWEIDHT7.js → chunk-SHGKY3QB.js} +2 -2
- package/dist/cli/chunks/{chunk-MH73D5TN.js → chunk-SJPZSCZP.js} +2 -2
- package/dist/cli/chunks/{chunk-3WV4H33V.js → chunk-SQ3PPISY.js} +1 -1
- package/dist/cli/chunks/{chunk-RCI64RIJ.js → chunk-STRDSVH3.js} +2 -2
- package/dist/cli/chunks/{chunk-GHQ5PUOV.js → chunk-T35GZXTU.js} +2 -2
- package/dist/cli/chunks/{chunk-DRO5NJZA.js → chunk-T62DH4GG.js} +2 -2
- package/dist/cli/chunks/{chunk-W2FLULF4.js → chunk-TFHQE6NK.js} +2 -2
- package/dist/cli/chunks/{chunk-LML5VTFK.js → chunk-TGLAWI62.js} +1 -1
- package/dist/cli/chunks/{chunk-KFXZDQ5J.js → chunk-TISSZFHO.js} +1 -1
- package/dist/cli/chunks/{chunk-KPFG4OIM.js → chunk-TJEIOE7F.js} +1 -1
- package/dist/cli/chunks/{chunk-57TNBR2P.js → chunk-TTMHIOQ3.js} +2 -2
- package/dist/cli/chunks/{chunk-ARMZYHYL.js → chunk-UHQY3GK7.js} +2 -2
- package/dist/cli/chunks/{chunk-ADK7DF3G.js → chunk-UMENRGHK.js} +2 -2
- package/dist/cli/chunks/{chunk-ZWRQ5VAU.js → chunk-UMNYF5EZ.js} +2 -2
- package/dist/cli/chunks/{chunk-G6AV2HGY.js → chunk-UTVRQEZM.js} +3 -3
- package/dist/cli/chunks/{chunk-VOYJJ3KA.js → chunk-UYJHYMEQ.js} +2 -2
- package/dist/cli/chunks/{chunk-KEEBUVGV.js → chunk-V4AOVDCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HBTC4L53.js → chunk-VIDBBB6F.js} +2 -2
- package/dist/cli/chunks/{chunk-PFXX5Q32.js → chunk-VWNHKYK7.js} +2 -2
- package/dist/cli/chunks/{chunk-DW6ZMNMR.js → chunk-WYMGK5DX.js} +2 -2
- package/dist/cli/chunks/{chunk-CJCT452S.js → chunk-XA7CG3LH.js} +2 -2
- package/dist/cli/chunks/{chunk-QFUX7ELG.js → chunk-XX7HUSX2.js} +2 -2
- package/dist/cli/chunks/{chunk-WXMSRBQF.js → chunk-XXCYQXK3.js} +2 -2
- package/dist/cli/chunks/{chunk-6VKJAMZY.js → chunk-Y2DVFVGI.js} +1 -1
- package/dist/cli/chunks/{chunk-JDXLCNKV.js → chunk-Y5SQBI2F.js} +2 -2
- package/dist/cli/chunks/{chunk-QXTW7XCS.js → chunk-YAKS3CAB.js} +2 -2
- package/dist/cli/chunks/{chunk-Q3JHS3UD.js → chunk-YCBDE2N7.js} +2 -2
- package/dist/cli/chunks/{chunk-VNAKBHJI.js → chunk-YDNSLLBS.js} +2 -2
- package/dist/cli/chunks/{chunk-S7N4BKI3.js → chunk-YEXPFHV6.js} +2 -2
- package/dist/cli/chunks/{chunk-CG2MUD7U.js → chunk-YGB6R5DW.js} +1 -1
- package/dist/cli/chunks/{chunk-NNOMDM4N.js → chunk-YL7T3VV7.js} +2 -2
- package/dist/cli/chunks/{chunk-U54OOA24.js → chunk-ZHXWGNYM.js} +1 -1
- package/dist/cli/chunks/{chunk-NRR23SJV.js → chunk-ZK5JKHP4.js} +1 -1
- package/dist/cli/chunks/{chunk-XPLSLHRB.js → chunk-ZN3J6TZD.js} +1 -1
- package/dist/cli/chunks/{chunk-RHJVDCLV.js → chunk-ZUG5MOUB.js} +2 -2
- package/dist/cli/chunks/{ci-NTRH7PAW.js → ci-YVKDQWIX.js} +2 -2
- package/dist/cli/chunks/ci-output-LK3MBXLZ.js +2 -0
- package/dist/cli/chunks/{circuit-breaker-4WST3QSA.js → circuit-breaker-7AIXACR7.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-KB4TKMYI.js → claude-flow-setup-UA7EO6VN.js} +2 -2
- package/dist/cli/chunks/client-M72GXFVQ.js +2 -0
- package/dist/cli/chunks/{cline-installer-W2ZHQ6WM.js → cline-installer-YDDCKKEV.js} +2 -2
- package/dist/cli/chunks/{code-TF2AVR5D.js → code-URB7UAKW.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-RMDRUVQJ.js → code-index-extractor-BL6HWH4Q.js} +2 -2
- package/dist/cli/chunks/{codex-installer-VSTRHJHV.js → codex-installer-2AVEO4EA.js} +2 -2
- package/dist/cli/chunks/{completions-3Q37QVFR.js → completions-RCKBSSSS.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-3FNFLACD.js → complexity-analyzer-LEDG62YK.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-VTEXM455.js → continuedev-installer-VOTCEBFH.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-AGY7DQUS.js → copilot-installer-NVTGLZX3.js} +2 -2
- package/dist/cli/chunks/core-handlers-C32RAMVI.js +2 -0
- package/dist/cli/chunks/{cost-tracker-LTZAQBX7.js → cost-tracker-GJIFB2BM.js} +2 -2
- package/dist/cli/chunks/{coverage-TT64IOS4.js → coverage-ZTPJWXWE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-UGFUCPKC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-OVOJIOHN.js → cursor-installer-CMGJQMHX.js} +2 -2
- package/dist/cli/chunks/{daemon-DMFZMXKA.js → daemon-V456IWR3.js} +3 -3
- package/dist/cli/chunks/{daemon-XCULEHWY.js → daemon-Y2I3YVIU.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-WW2RX4B5.js → dag-attention-scheduler-ZCBBOD3D.js} +2 -2
- package/dist/cli/chunks/{detect-QNWIM232.js → detect-2GHEA4A3.js} +2 -2
- package/dist/cli/chunks/{dist-node-6GQIY3CG.js → dist-node-44AGYJCH.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6RJPDELX.js → domain-handler-IDLIEP6X.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-WK524LBS.js → domain-transfer-KLEXGIRF.js} +2 -2
- package/dist/cli/chunks/dream-UFBBXY5W.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-SO6GWJW7.js → embed-and-insert-pattern-DUW6K35A.js} +2 -2
- package/dist/cli/chunks/{eval-GL544IPO.js → eval-PR6YWDFM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-BCCJ35OX.js → experience-capture-middleware-CJJJN7CF.js} +3 -3
- package/dist/cli/chunks/{fast-paths-CATDDBEU.js → fast-paths-LGLLKX6P.js} +2 -2
- package/dist/cli/chunks/{feature-flags-BUXNAORY.js → feature-flags-33D3I4DD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KNNWWP5G.js → feature-flags-QL4NCEGW.js} +2 -2
- package/dist/cli/chunks/{file-discovery-S4HF3O7D.js → file-discovery-GKCYJPFZ.js} +2 -2
- package/dist/cli/chunks/{fleet-DQVQQONW.js → fleet-QNT6X2YI.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-G7ABZUG7.js → gnn-wrapper-ELSGT67Z.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-UFMELIWT.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-YIILSRXI.js → hnsw-legacy-bridge-EZMM5JWL.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-TSVRMXDH.js → hnswlib-node-G4CE3EOS.js} +2 -2
- package/dist/cli/chunks/{hooks-OHQPNK74.js → hooks-LCVXXA55.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-LY7PJDSL.js → hypergraph-engine-6Z7RQ3HI.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-YGDYZO6H.js → hypergraph-handler-PLI2GYPK.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-WRE4CWPJ.js +2 -0
- package/dist/cli/chunks/{init-handler-MTK65LI3.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-3IICU4RS.js → kilocode-installer-U3MW62DE.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MXOVQYQA.js → kiro-installer-PPEAC44T.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-7JE2TVKJ.js +2 -0
- package/dist/cli/chunks/{learning-EV5LSOOM.js → learning-7B5NITDV.js} +3 -3
- package/dist/cli/chunks/{llm-router-7LYDJUOT.js → llm-router-BNEPT5OB.js} +4 -4
- package/dist/cli/chunks/llm-router-service-GTDVDKSU.js +2 -0
- package/dist/cli/chunks/{load-F4PVAMXQ.js → load-VO7ABNHV.js} +2 -2
- package/dist/cli/chunks/load-test-JZ4CLSBF.js +2 -0
- package/dist/cli/chunks/{mcp-DUYJUEME.js → mcp-THXEINCL.js} +2 -2
- package/dist/cli/chunks/{memory-XTTYORAS.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-R6XCTMCF.js → multi-model-executor-HEDVOZ6X.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-33ULBU2F.js → opencode-installer-GQ7J5SBG.js} +2 -2
- package/dist/cli/chunks/{orchestrator-34ZJEKTJ.js → orchestrator-66JK2OS5.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-W33O7FYO.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GZ2M3F2E.js → pattern-usage-recorder-O6XHM2G5.js} +2 -2
- package/dist/cli/chunks/{pipeline-SR5OTY45.js → pipeline-UOG6UO6D.js} +2 -2
- package/dist/cli/chunks/{platform-VKJFJIAW.js → platform-Q7UH7FZQ.js} +2 -2
- package/dist/cli/chunks/{plugin-5C5UBQUQ.js → plugin-7OFLNGOS.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-KO2PQI3D.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-ZF74NIKA.js → protocol-handler-WLYTX6FS.js} +2 -2
- package/dist/cli/chunks/{prove-MO5TQQU4.js → prove-QVNE4V3J.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-7VB5LJGS.js +2 -0
- package/dist/cli/chunks/{quality-EYIN6AER.js → quality-DNE2RKE5.js} +2 -2
- package/dist/cli/chunks/{quality-gate-V6OQM57O.js → quality-gate-2K35GCSI.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-HIDMJMMG.js +2 -0
- package/dist/cli/chunks/{real-embeddings-AR7TZX7U.js → real-embeddings-SF42ML7G.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-46E626VZ.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-ZNRVW6QW.js → routing-handler-4MXXZRYP.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-4L2CQMWS.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-H4RVGBIA.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-OJGWWPLL.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-M6NNIZ5W.js → shared-rvf-adapter-6RGCTLHD.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LHMFCYVE.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-GMIOXQIE.js → status-handler-BADQV2KA.js} +2 -2
- package/dist/cli/chunks/{structural-health-YZXHVHM6.js → structural-health-VMYEYRZG.js} +2 -2
- package/dist/cli/chunks/{sync-GMPCPV5L.js → sync-PXLROLHB.js} +2 -2
- package/dist/cli/chunks/{sync-N56UQGCS.js → sync-ULY7T5II.js} +2 -2
- package/dist/cli/chunks/{task-handler-VTNRGAXP.js → task-handler-L7E2I267.js} +2 -2
- package/dist/cli/chunks/{task-handlers-FYSDH55N.js → task-handlers-6DPKE4AK.js} +3 -3
- package/dist/cli/chunks/{test-GQNCKRSP.js → test-WCLURQUT.js} +11 -11
- package/dist/cli/chunks/test-scheduling-4CNJA6TW.js +15 -0
- package/dist/cli/chunks/{token-bootstrap-76SRNXGG.js → token-bootstrap-GTI24JAL.js} +2 -2
- package/dist/cli/chunks/{token-usage-O7CZDP5Q.js → token-usage-DRVG6PKO.js} +2 -2
- package/dist/cli/chunks/{transformers-LTU4LSSC.js → transformers-IMDDAMYQ.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-NQSQCMBM.js → tree-sitter-wasm-parser-WBZIHVFA.js} +2 -2
- package/dist/cli/chunks/{types-OP6IWE6N.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-OQWRBZ3R.js → upgrade-6ALSDWDD.js} +2 -2
- package/dist/cli/chunks/{validate-TH5SRP3E.js → validate-XF4ZG3LC.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UITL2JUS.js → validate-swarm-P5TAFRDA.js} +2 -2
- package/dist/cli/chunks/{vibium-O6PRAG4J.js → vibium-2XDXKNKZ.js} +2 -2
- package/dist/cli/chunks/visual-security-GX4S7K6O.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-XBFBY4OF.js → web-tree-sitter-4JVRQPX5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DVT5NRNY.js → windsurf-installer-WYJXVDO5.js} +2 -2
- package/dist/cli/chunks/witness-chain-QGKMHCNW.js +2 -0
- package/dist/cli/chunks/{witness-chain-VRSH2F36.js → witness-chain-RPZ2SE2V.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-GFHRDKQ4.js → witness-key-manager-LXG2VBQQ.js} +2 -2
- package/dist/cli/chunks/{workflow-HAZ6YKOG.js → workflow-2OYNO7UU.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-KWHIJMFV.js +2 -0
- package/dist/cli/chunks/{wrappers-5LLLT7GM.js → wrappers-DIJNNFU6.js} +2 -2
- package/dist/cli/commands/security.js +167 -100
- package/dist/cli/commands/test.js +1 -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/protocol-server.js +9 -5
- package/dist/mcp/types.d.ts +5 -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 +6 -6
- package/dist/cli/chunks/adapter-OJF6LAJV.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-FGT474XB.js +0 -2
- package/dist/cli/chunks/base-HH765JFV.js +0 -2
- package/dist/cli/chunks/browser-workflow-NPM4FUPI.js +0 -2
- package/dist/cli/chunks/chunk-OC2CKU7I.js +0 -2
- package/dist/cli/chunks/chunk-PHHXHG2W.js +0 -2
- package/dist/cli/chunks/chunk-U2AY57XZ.js +0 -5
- package/dist/cli/chunks/chunk-WBMRADQP.js +0 -81
- package/dist/cli/chunks/ci-output-F57RSD35.js +0 -2
- package/dist/cli/chunks/client-GPZEC54E.js +0 -2
- package/dist/cli/chunks/core-handlers-YMGHYIBR.js +0 -2
- package/dist/cli/chunks/cross-domain-router-ECBNTGYJ.js +0 -2
- package/dist/cli/chunks/dream-EHGKCFWH.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-UFEL2CBW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BLSD45CX.js +0 -2
- package/dist/cli/chunks/hnsw-index-A3RZODEN.js +0 -2
- package/dist/cli/chunks/impact-analyzer-OXHD3FOH.js +0 -2
- package/dist/cli/chunks/init-wizard-PKZL7QBU.js +0 -2
- package/dist/cli/chunks/kernel-XWPM72UJ.js +0 -2
- package/dist/cli/chunks/knowledge-graph-FRKR5XWI.js +0 -2
- package/dist/cli/chunks/llm-router-service-R7A5HHDM.js +0 -2
- package/dist/cli/chunks/load-test-5IKDWSYL.js +0 -2
- package/dist/cli/chunks/memory-backend-7VW5QCMO.js +0 -2
- package/dist/cli/chunks/memory-handlers-VZH3R2TQ.js +0 -2
- package/dist/cli/chunks/pattern-null-store-BU6LCB2W.js +0 -2
- package/dist/cli/chunks/protocol-executor-BSP5LWJN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-J2RC7P25.js +0 -2
- package/dist/cli/chunks/queen-coordinator-XI5AJV2V.js +0 -2
- package/dist/cli/chunks/router-VXQYYA3D.js +0 -2
- package/dist/cli/chunks/routing-feedback-HZQTASFF.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-BDTLLJER.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-IB343MDN.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-Y7SN7LHU.js +0 -2
- package/dist/cli/chunks/safe-db-2VTKKBJU.js +0 -2
- package/dist/cli/chunks/schedule-QJ4CFGJY.js +0 -2
- package/dist/cli/chunks/scheduler-2NHDQPC3.js +0 -2
- package/dist/cli/chunks/security-JF3BVNRO.js +0 -14
- package/dist/cli/chunks/sqlite-persistence-NVVAPZN3.js +0 -2
- package/dist/cli/chunks/test-scheduling-GPRXSIRP.js +0 -15
- package/dist/cli/chunks/unified-memory-DSTIEDSH.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-KBV3P4OS.js +0 -2
- package/dist/cli/chunks/unified-persistence-XKCOUBKY.js +0 -2
- package/dist/cli/chunks/visual-security-TTWSPZTZ.js +0 -2
- package/dist/cli/chunks/witness-chain-2KY73HPN.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UK56AVOT.js +0 -2
|
@@ -111,16 +111,25 @@ export class SecurityAuditProtocol {
|
|
|
111
111
|
triagedFindings: this.createEmptyTriagedFindings(),
|
|
112
112
|
overallRiskScore: RiskScore.create(0),
|
|
113
113
|
recommendations: [],
|
|
114
|
-
|
|
114
|
+
incompleteChecks: [],
|
|
115
|
+
deploymentDecision: { allowed: false, reason: 'Audit not completed', blockingIssues: [], warnings: [] },
|
|
115
116
|
};
|
|
116
117
|
// Adjust scope based on trigger
|
|
117
118
|
const auditOptions = this.getAuditOptionsForTrigger(trigger);
|
|
118
119
|
// Phase 1: Vulnerability Scan (SAST)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
if (auditOptions.includeSAST) {
|
|
121
|
+
this.updatePhase('vulnerability-scan');
|
|
122
|
+
const sastResult = await this.scanVulnerabilities(auditOptions);
|
|
123
|
+
if (sastResult.success) {
|
|
124
|
+
this.currentAudit = { ...this.currentAudit, sastResult: sastResult.value };
|
|
125
|
+
await this.publishVulnerabilities(sastResult.value.vulnerabilities);
|
|
126
|
+
if (sastResult.value.evidence?.completeness !== 'complete') {
|
|
127
|
+
this.recordIncompleteCheck('SAST coverage is incomplete or unverified');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this.recordIncompleteCheck('SAST scan did not complete');
|
|
132
|
+
}
|
|
124
133
|
}
|
|
125
134
|
// Phase 2: Dependency Scan
|
|
126
135
|
this.updatePhase('dependency-scan');
|
|
@@ -129,32 +138,51 @@ export class SecurityAuditProtocol {
|
|
|
129
138
|
this.currentAudit = { ...this.currentAudit, dependencyResult: depResult.value };
|
|
130
139
|
await this.publishDependencyVulnerabilities(depResult.value.vulnerabilities);
|
|
131
140
|
}
|
|
141
|
+
else {
|
|
142
|
+
this.recordIncompleteCheck('Dependency scan did not complete');
|
|
143
|
+
}
|
|
132
144
|
// Phase 3: Secret Scan (if enabled)
|
|
133
|
-
if (
|
|
145
|
+
if (auditOptions.includeSecrets) {
|
|
134
146
|
this.updatePhase('secret-scan');
|
|
135
147
|
const secretResult = await this.auditSecrets();
|
|
136
148
|
if (secretResult.success) {
|
|
137
149
|
this.currentAudit = { ...this.currentAudit, secretResult: secretResult.value };
|
|
138
150
|
await this.publishSecretExposures(secretResult.value.secretsFound);
|
|
139
151
|
}
|
|
152
|
+
else {
|
|
153
|
+
this.recordIncompleteCheck('Secret scan is unavailable');
|
|
154
|
+
}
|
|
140
155
|
}
|
|
141
156
|
// Phase 4: DAST Scan (if enabled and URL provided)
|
|
142
|
-
if (
|
|
157
|
+
if (auditOptions.includeDAST && this.config.targetUrl) {
|
|
143
158
|
const dastResult = await this.runDASTScan(this.config.targetUrl);
|
|
144
159
|
if (dastResult.success) {
|
|
145
160
|
this.currentAudit = { ...this.currentAudit, dastResult: dastResult.value };
|
|
161
|
+
this.recordIncompleteCheck('DAST coverage is unverified: the scanner returned no execution receipt');
|
|
146
162
|
await this.publishVulnerabilities(dastResult.value.vulnerabilities);
|
|
147
163
|
}
|
|
164
|
+
else {
|
|
165
|
+
this.recordIncompleteCheck('DAST scan did not complete');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else if (auditOptions.includeDAST) {
|
|
169
|
+
this.recordIncompleteCheck('DAST requested without a target URL');
|
|
148
170
|
}
|
|
149
171
|
// Phase 5: Compliance Validation
|
|
150
|
-
this.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
172
|
+
if (this.config.complianceStandards.length > 0) {
|
|
173
|
+
this.updatePhase('compliance-validation');
|
|
174
|
+
const complianceResult = await this.validateCompliance();
|
|
175
|
+
if (complianceResult.success) {
|
|
176
|
+
this.currentAudit = {
|
|
177
|
+
...this.currentAudit,
|
|
178
|
+
complianceReports: complianceResult.value,
|
|
179
|
+
};
|
|
180
|
+
await this.publishComplianceResults(complianceResult.value);
|
|
181
|
+
this.recordIncompleteCheck('Protocol compliance checks have no verified execution receipt');
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.recordIncompleteCheck('Compliance validation did not complete');
|
|
185
|
+
}
|
|
158
186
|
}
|
|
159
187
|
// Phase 6: Triage Findings
|
|
160
188
|
this.updatePhase('triage');
|
|
@@ -296,26 +324,9 @@ export class SecurityAuditProtocol {
|
|
|
296
324
|
* Audit for exposed secrets/credentials
|
|
297
325
|
*/
|
|
298
326
|
async auditSecrets() {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return err(agentId.error);
|
|
303
|
-
}
|
|
304
|
-
const secretsFound = [];
|
|
305
|
-
// In production, this would scan actual files with patterns like:
|
|
306
|
-
// - API keys: /(?:api[_-]?key|apikey)/gi
|
|
307
|
-
// - Passwords: /(?:password|passwd|pwd)/gi
|
|
308
|
-
// - Tokens: /(?:secret|token|bearer)/gi
|
|
309
|
-
// - Private keys: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/gi
|
|
310
|
-
// For now, report no secrets found (clean scan)
|
|
311
|
-
return ok({
|
|
312
|
-
secretsFound,
|
|
313
|
-
filesScanned: this.config.scanPaths.length * 10, // Estimate
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
return err(toError(error));
|
|
318
|
-
}
|
|
327
|
+
// Agent allocation is not scan execution. Until this protocol has a real
|
|
328
|
+
// secret-scanner adapter, retain an explicit unavailable result.
|
|
329
|
+
return err(new Error('Secret scanning is unavailable in SecurityAuditProtocol: no scanner is implemented.'));
|
|
319
330
|
}
|
|
320
331
|
/**
|
|
321
332
|
* Run DAST scan against target URL
|
|
@@ -383,7 +394,7 @@ export class SecurityAuditProtocol {
|
|
|
383
394
|
return {
|
|
384
395
|
riskScore: RiskScore.create(0),
|
|
385
396
|
recommendations: [],
|
|
386
|
-
deploymentDecision: { allowed:
|
|
397
|
+
deploymentDecision: { allowed: false, reason: 'No audit data', blockingIssues: ['No audit evidence'], warnings: [] },
|
|
387
398
|
};
|
|
388
399
|
}
|
|
389
400
|
// Calculate risk score
|
|
@@ -641,6 +652,14 @@ export class SecurityAuditProtocol {
|
|
|
641
652
|
this.currentAudit = { ...this.currentAudit, phase };
|
|
642
653
|
}
|
|
643
654
|
}
|
|
655
|
+
recordIncompleteCheck(reason) {
|
|
656
|
+
if (this.currentAudit) {
|
|
657
|
+
this.currentAudit = {
|
|
658
|
+
...this.currentAudit,
|
|
659
|
+
incompleteChecks: [...(this.currentAudit.incompleteChecks ?? []), reason],
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
}
|
|
644
663
|
createEmptyTriagedFindings() {
|
|
645
664
|
return {
|
|
646
665
|
critical: [],
|
|
@@ -717,6 +736,9 @@ export class SecurityAuditProtocol {
|
|
|
717
736
|
const recommendations = [];
|
|
718
737
|
if (!this.currentAudit)
|
|
719
738
|
return recommendations;
|
|
739
|
+
for (const check of this.currentAudit.incompleteChecks ?? []) {
|
|
740
|
+
recommendations.push(`Complete the required security check before approving deployment: ${check}`);
|
|
741
|
+
}
|
|
720
742
|
const { triagedFindings, complianceReports } = this.currentAudit;
|
|
721
743
|
// Critical findings
|
|
722
744
|
if (triagedFindings.critical.length > 0) {
|
|
@@ -747,10 +769,10 @@ export class SecurityAuditProtocol {
|
|
|
747
769
|
return recommendations;
|
|
748
770
|
}
|
|
749
771
|
determineDeploymentDecision(_riskScore) {
|
|
750
|
-
const blockingIssues = [];
|
|
772
|
+
const blockingIssues = [...(this.currentAudit?.incompleteChecks ?? [])];
|
|
751
773
|
const warnings = [];
|
|
752
774
|
if (!this.currentAudit) {
|
|
753
|
-
return { allowed:
|
|
775
|
+
return { allowed: false, reason: 'No audit data', blockingIssues: ['No audit evidence'], warnings };
|
|
754
776
|
}
|
|
755
777
|
const { triagedFindings, complianceReports } = this.currentAudit;
|
|
756
778
|
// Check critical vulnerabilities
|
|
@@ -6,6 +6,11 @@ import * as fs from 'fs/promises';
|
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import { createHash } from 'crypto';
|
|
8
8
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
9
|
+
function securityReportExecution(data) {
|
|
10
|
+
return data.evidence?.completeness === 'complete' ? 'completed'
|
|
11
|
+
: data.evidence?.completeness === 'partial' ? 'partial'
|
|
12
|
+
: data.evidence ? 'unavailable' : 'unverified';
|
|
13
|
+
}
|
|
9
14
|
// ============================================================================
|
|
10
15
|
// Test File Patterns by Language/Framework
|
|
11
16
|
// ============================================================================
|
|
@@ -319,6 +324,8 @@ end_of_record
|
|
|
319
324
|
`;
|
|
320
325
|
}
|
|
321
326
|
generateSarif(data) {
|
|
327
|
+
const status = securityReportExecution(data);
|
|
328
|
+
const findings = data.findings ?? data.topVulnerabilities;
|
|
322
329
|
return JSON.stringify({
|
|
323
330
|
$schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
|
|
324
331
|
version: '2.1.0',
|
|
@@ -330,14 +337,23 @@ end_of_record
|
|
|
330
337
|
informationUri: 'https://github.com/ruvnet/agentic-qe',
|
|
331
338
|
},
|
|
332
339
|
},
|
|
333
|
-
|
|
340
|
+
properties: { securityScan: { status, evidence: data.evidence, coverage: data.coverage,
|
|
341
|
+
limitations: data.limitations, analysisDepth: data.analysisDepth } },
|
|
342
|
+
invocations: [{
|
|
343
|
+
executionSuccessful: data.evidence?.completeness === 'complete',
|
|
344
|
+
...(data.evidence?.completeness === 'complete' ? {} : {
|
|
345
|
+
toolExecutionNotifications: [{ level: 'warning',
|
|
346
|
+
message: { text: `Security analysis ${status}; findings do not establish complete coverage.` } }],
|
|
347
|
+
}),
|
|
348
|
+
}],
|
|
349
|
+
results: findings.map((v, i) => ({
|
|
334
350
|
ruleId: `VULN-${String(i + 1).padStart(3, '0')}`,
|
|
335
351
|
level: v.severity === 'critical' ? 'error' : v.severity === 'high' ? 'error' : 'warning',
|
|
336
|
-
message: { text: v.type },
|
|
352
|
+
message: { text: v.type ?? v.title ?? 'Security finding' },
|
|
337
353
|
locations: [{
|
|
338
354
|
physicalLocation: {
|
|
339
|
-
artifactLocation: { uri: v.file },
|
|
340
|
-
region: { startLine: v.line },
|
|
355
|
+
artifactLocation: { uri: v.file ?? v.location?.file ?? '' },
|
|
356
|
+
...((v.line ?? v.location?.line ?? 0) > 0 ? { region: { startLine: v.line ?? v.location?.line } } : {}),
|
|
341
357
|
},
|
|
342
358
|
}],
|
|
343
359
|
})),
|
|
@@ -411,6 +427,14 @@ ${data.gaps.length === 0 ? 'No significant gaps detected.' : data.gaps.map(g =>
|
|
|
411
427
|
|
|
412
428
|
**Generated:** ${new Date().toISOString()}
|
|
413
429
|
**Scanner:** Agentic QE v3 Security
|
|
430
|
+
**Execution:** ${securityReportExecution(data)}
|
|
431
|
+
|
|
432
|
+
## Execution receipts
|
|
433
|
+
|
|
434
|
+
\`\`\`json
|
|
435
|
+
${JSON.stringify({ evidence: data.evidence, coverage: data.coverage, limitations: data.limitations,
|
|
436
|
+
analysisDepth: data.analysisDepth }, null, 2)}
|
|
437
|
+
\`\`\`
|
|
414
438
|
|
|
415
439
|
## Summary
|
|
416
440
|
|
|
@@ -430,6 +454,12 @@ ${data.topVulnerabilities.map(v => `### ${v.type}
|
|
|
430
454
|
- **Line:** ${v.line}
|
|
431
455
|
`).join('\n')}
|
|
432
456
|
|
|
457
|
+
## All findings
|
|
458
|
+
|
|
459
|
+
\`\`\`json
|
|
460
|
+
${JSON.stringify(data.findings ?? data.topVulnerabilities, null, 2)}
|
|
461
|
+
\`\`\`
|
|
462
|
+
|
|
433
463
|
## Recommendations
|
|
434
464
|
|
|
435
465
|
${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
|
|
@@ -443,7 +473,7 @@ ${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
|
|
|
443
473
|
|
|
444
474
|
## Quality Score
|
|
445
475
|
|
|
446
|
-
|
|
476
|
+
${typeof data.qualityScore === 'number' ? `**${data.qualityScore.toFixed(1)}** / 100` : 'N/A — measured gate uses individual checks.'}
|
|
447
477
|
|
|
448
478
|
## Metrics
|
|
449
479
|
|
|
@@ -500,6 +530,7 @@ ${data.recommendations.length === 0 ? 'No recommendations - all quality gates pa
|
|
|
500
530
|
switch (taskType) {
|
|
501
531
|
case 'scan-security':
|
|
502
532
|
return {
|
|
533
|
+
status: securityReportExecution(data),
|
|
503
534
|
vulnerabilities: data.vulnerabilities,
|
|
504
535
|
critical: data.critical,
|
|
505
536
|
high: data.high,
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Handler implementations are extracted into ./handlers/ modules.
|
|
14
14
|
*/
|
|
15
15
|
import { DomainName } from '../shared/types';
|
|
16
|
-
import { EventBus, QEKernel } from '../kernel/interfaces';
|
|
16
|
+
import { EventBus, QEKernel, MemoryBackend } from '../kernel/interfaces';
|
|
17
17
|
import { TaskType, QueenTask } from './queen-coordinator';
|
|
18
18
|
import type { QualityFeedbackLoop } from '../feedback/feedback-loop.js';
|
|
19
19
|
import type { TestGeneratorService } from '../domains/test-generation';
|
|
@@ -63,6 +63,8 @@ export declare class DomainTaskExecutor implements TaskHandlerContext {
|
|
|
63
63
|
private coherenceActionGate;
|
|
64
64
|
private readonly taskHandlers;
|
|
65
65
|
constructor(kernel: QEKernel, eventBus: EventBus, config?: Partial<TaskExecutorConfig>);
|
|
66
|
+
/** Share the initialized kernel store with handlers that consume measured evidence. */
|
|
67
|
+
get memory(): MemoryBackend;
|
|
66
68
|
/** Expose config to handler modules */
|
|
67
69
|
get config(): {
|
|
68
70
|
defaultLanguage: string;
|
|
@@ -150,6 +150,10 @@ export class DomainTaskExecutor {
|
|
|
150
150
|
// ============================================================================
|
|
151
151
|
// TaskHandlerContext implementation (used by handler modules)
|
|
152
152
|
// ============================================================================
|
|
153
|
+
/** Share the initialized kernel store with handlers that consume measured evidence. */
|
|
154
|
+
get memory() {
|
|
155
|
+
return this.kernel.memory;
|
|
156
|
+
}
|
|
153
157
|
/** Expose config to handler modules */
|
|
154
158
|
get config() {
|
|
155
159
|
return this._config;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SecurityScanEvidence } from './scan-evidence.js';
|
|
1
2
|
/**
|
|
2
3
|
* Agentic QE v3 - Security & Compliance Domain Interfaces
|
|
3
4
|
*
|
|
@@ -133,6 +134,8 @@ export interface SASTResult {
|
|
|
133
134
|
readonly vulnerabilities: Vulnerability[];
|
|
134
135
|
readonly summary: ScanSummary;
|
|
135
136
|
readonly coverage: SecurityCoverage;
|
|
137
|
+
/** Absent on legacy adapters; absence does not prove completed analysis. */
|
|
138
|
+
readonly evidence?: SecurityScanEvidence;
|
|
136
139
|
}
|
|
137
140
|
export interface RuleSet {
|
|
138
141
|
readonly id: string;
|
|
@@ -147,6 +150,8 @@ export interface FalsePositiveCheck {
|
|
|
147
150
|
readonly reason?: string;
|
|
148
151
|
}
|
|
149
152
|
export interface SecurityCoverage {
|
|
153
|
+
/** Counter scope; external engine rule coverage is described in evidence. */
|
|
154
|
+
readonly rulesAppliedScope?: 'built-in-patterns';
|
|
150
155
|
readonly filesScanned: number;
|
|
151
156
|
readonly linesScanned: number;
|
|
152
157
|
readonly rulesApplied: number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SecurityDiscoveryEvidence } from './scan-evidence.js';
|
|
2
|
+
export declare function isSecuritySourceFile(filePath: string): boolean;
|
|
3
|
+
export interface SecurityDiscoveryOptions {
|
|
4
|
+
readonly maxFiles?: number;
|
|
5
|
+
readonly maxDepth?: number;
|
|
6
|
+
}
|
|
7
|
+
/** Discover source inputs without turning failures or truncation into empty success. */
|
|
8
|
+
export declare function discoverSecurityFiles(target: string, options?: SecurityDiscoveryOptions): Promise<{
|
|
9
|
+
files: string[];
|
|
10
|
+
discovery: SecurityDiscoveryEvidence;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=scan-discovery.d.ts.map
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
// The established security task's source-language scope. A direct file target
|
|
4
|
+
// is retained even when unsupported, so its scanner disposition is observable.
|
|
5
|
+
const SOURCE_EXTENSIONS = new Set([
|
|
6
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.py', '.pyw', '.go', '.rs',
|
|
7
|
+
'.java', '.kt', '.kts', '.rb', '.cs', '.php', '.swift', '.c', '.h', '.cpp',
|
|
8
|
+
'.hpp', '.cc', '.scala',
|
|
9
|
+
]);
|
|
10
|
+
const EXCLUDED_DIRECTORIES = new Set([
|
|
11
|
+
'node_modules', '.git', 'dist', 'build', 'coverage', '.nyc_output',
|
|
12
|
+
'__pycache__', '.venv', 'venv', '.tox', '.mypy_cache', 'target', '.gradle',
|
|
13
|
+
'vendor', '.bundle', '.agentic-qe', '.claude', '.cache', '.npm', '.yarn',
|
|
14
|
+
'.next', '.nuxt', '.svelte-kit', 'out', '.turbo', 'tmp', 'temp', '.tmp',
|
|
15
|
+
]);
|
|
16
|
+
export function isSecuritySourceFile(filePath) {
|
|
17
|
+
return SOURCE_EXTENSIONS.has(path.extname(filePath).toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
/** Discover source inputs without turning failures or truncation into empty success. */
|
|
20
|
+
export async function discoverSecurityFiles(target, options = {}) {
|
|
21
|
+
const maxFiles = options.maxFiles ?? 5000;
|
|
22
|
+
const maxDepth = options.maxDepth ?? 64;
|
|
23
|
+
if (!Number.isSafeInteger(maxFiles) || maxFiles < 1
|
|
24
|
+
|| !Number.isSafeInteger(maxDepth) || maxDepth < 0) {
|
|
25
|
+
throw new Error('Security discovery requires a positive file limit and non-negative depth limit.');
|
|
26
|
+
}
|
|
27
|
+
const files = [];
|
|
28
|
+
const issues = [];
|
|
29
|
+
const excludedPaths = [];
|
|
30
|
+
const root = path.resolve(target);
|
|
31
|
+
let rootFailed = false;
|
|
32
|
+
let truncated = false;
|
|
33
|
+
function recordError(location, error) {
|
|
34
|
+
const code = error?.code;
|
|
35
|
+
// Raw errors can include source text, arguments, URLs, or credentials.
|
|
36
|
+
issues.push({ path: location, reason: typeof code === 'string' && /^[A-Z0-9_]{1,32}$/.test(code)
|
|
37
|
+
? code : 'DISCOVERY_FAILED' });
|
|
38
|
+
}
|
|
39
|
+
async function walk(directory, depth) {
|
|
40
|
+
if (depth > maxDepth) {
|
|
41
|
+
issues.push({ path: directory, reason: 'DEPTH_LIMIT' });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
let entries;
|
|
45
|
+
try {
|
|
46
|
+
entries = await fs.readdir(directory, { withFileTypes: true });
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
recordError(directory, error);
|
|
50
|
+
if (directory === root)
|
|
51
|
+
rootFailed = true;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
entries.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
if (truncated)
|
|
57
|
+
return;
|
|
58
|
+
const entryPath = path.join(directory, entry.name);
|
|
59
|
+
if (entry.isSymbolicLink()) {
|
|
60
|
+
// Observed symlinks are explicitly excluded; their targets are not
|
|
61
|
+
// claimed as scanned. Discovery does not guarantee an atomic snapshot.
|
|
62
|
+
excludedPaths.push(entryPath);
|
|
63
|
+
}
|
|
64
|
+
else if (entry.isDirectory()) {
|
|
65
|
+
if (EXCLUDED_DIRECTORIES.has(entry.name))
|
|
66
|
+
excludedPaths.push(entryPath);
|
|
67
|
+
else
|
|
68
|
+
await walk(entryPath, depth + 1);
|
|
69
|
+
}
|
|
70
|
+
else if (entry.isFile() && isSecuritySourceFile(entry.name)) {
|
|
71
|
+
if (files.length === maxFiles) {
|
|
72
|
+
issues.push({ path: entryPath, reason: 'FILE_LIMIT' });
|
|
73
|
+
truncated = true;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
files.push(entryPath);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const stat = await fs.lstat(root);
|
|
82
|
+
if (stat.isFile())
|
|
83
|
+
files.push(root);
|
|
84
|
+
else if (stat.isDirectory())
|
|
85
|
+
await walk(root, 0);
|
|
86
|
+
else {
|
|
87
|
+
rootFailed = true;
|
|
88
|
+
issues.push({ path: root, reason: stat.isSymbolicLink() ? 'SYMLINK_TARGET' : 'NOT_REGULAR_INPUT' });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
rootFailed = true;
|
|
93
|
+
recordError(root, error);
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
files,
|
|
97
|
+
discovery: {
|
|
98
|
+
status: rootFailed ? 'failed' : issues.length > 0 ? 'partial' : 'complete',
|
|
99
|
+
policy: 'aqe-security-source-files@1',
|
|
100
|
+
issues,
|
|
101
|
+
excludedPaths,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=scan-discovery.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** Evidence of executed security analysis; findings alone do not establish coverage. */
|
|
2
|
+
export type SecurityFileDisposition = 'analyzed' | 'unsupported' | 'unreadable' | 'excluded' | 'failed' | 'unavailable' | 'not-run';
|
|
3
|
+
export interface SecurityFileEvidence {
|
|
4
|
+
/** Normalized absolute path; normalization does not resolve symlinks. */
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly engineId: string;
|
|
7
|
+
readonly status: SecurityFileDisposition;
|
|
8
|
+
/** SHA-256 of the exact source bytes read by this engine. */
|
|
9
|
+
readonly sourceDigest?: string;
|
|
10
|
+
readonly readLines: number;
|
|
11
|
+
readonly analyzedLines: number;
|
|
12
|
+
/** A bounded error code or static description; never source contents. */
|
|
13
|
+
readonly reason?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SecurityEngineEvidence {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly requested: boolean;
|
|
18
|
+
/** Whether this engine is required for the declared analysis scope. */
|
|
19
|
+
readonly required: boolean;
|
|
20
|
+
readonly status: 'completed' | 'partial' | 'failed' | 'unavailable' | 'disabled' | 'unverified' | 'not-run';
|
|
21
|
+
readonly scope: 'requested-files' | 'parent-directory' | 'url';
|
|
22
|
+
readonly target?: string;
|
|
23
|
+
/** Only populated when input membership was actually established. */
|
|
24
|
+
readonly analyzedFiles?: number;
|
|
25
|
+
readonly ruleIds?: readonly string[];
|
|
26
|
+
/** SHA-256 of selected rule definitions, when these are locally known. */
|
|
27
|
+
readonly rulesetDigest?: string;
|
|
28
|
+
readonly ruleCoverage: 'known' | 'unknown';
|
|
29
|
+
readonly version?: string;
|
|
30
|
+
readonly errors: readonly string[];
|
|
31
|
+
readonly limitations: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export interface SecurityScanEvidence {
|
|
34
|
+
readonly schemaVersion: 1;
|
|
35
|
+
/** Completeness of required declared scope, not absence of vulnerabilities. */
|
|
36
|
+
readonly completeness: 'complete' | 'partial' | 'none';
|
|
37
|
+
/** Unique normalized absolute requested paths, without resolving symlinks. */
|
|
38
|
+
readonly requestedFiles: number;
|
|
39
|
+
readonly requestedPaths: readonly string[];
|
|
40
|
+
readonly duplicateInputs: number;
|
|
41
|
+
/** A path may have separate receipts for independently executed engines. */
|
|
42
|
+
readonly files: readonly SecurityFileEvidence[];
|
|
43
|
+
readonly engines: readonly SecurityEngineEvidence[];
|
|
44
|
+
readonly limitations: readonly string[];
|
|
45
|
+
/** Discovery describes the declared source-file policy, not every repository file. */
|
|
46
|
+
readonly discovery?: SecurityDiscoveryEvidence;
|
|
47
|
+
}
|
|
48
|
+
export interface SecurityDiscoveryEvidence {
|
|
49
|
+
readonly status: 'complete' | 'partial' | 'failed';
|
|
50
|
+
readonly policy: 'aqe-security-source-files@1';
|
|
51
|
+
readonly issues: readonly {
|
|
52
|
+
readonly path: string;
|
|
53
|
+
readonly reason: string;
|
|
54
|
+
}[];
|
|
55
|
+
readonly excludedPaths: readonly string[];
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=scan-evidence.d.ts.map
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Agentic QE v3 - SAST (Static Application Security Testing) Scanner
|
|
3
3
|
* Performs static code analysis to detect security vulnerabilities
|
|
4
4
|
*/
|
|
5
|
+
import { FilePath } from '@shared/value-objects/index.js';
|
|
5
6
|
import { Result } from '@shared/types/index.js';
|
|
6
|
-
import type { FilePath } from '@shared/value-objects/index.js';
|
|
7
7
|
import type { SecurityScannerConfig, Vulnerability, RemediationAdvice, SASTResult, RuleSet, FalsePositiveCheck, MemoryBackend, HybridRouter, ScanStatus } from './scanner-types.js';
|
|
8
8
|
export declare class SASTScanner {
|
|
9
9
|
private readonly config;
|
|
@@ -27,7 +27,7 @@ export declare class SASTScanner {
|
|
|
27
27
|
private runPatternScanning;
|
|
28
28
|
/**
|
|
29
29
|
* Run semgrep scanning when enabled and available.
|
|
30
|
-
*
|
|
30
|
+
* Optional engine failure preserves completed pattern analysis and its findings.
|
|
31
31
|
*/
|
|
32
32
|
private runSemgrepScanning;
|
|
33
33
|
/**
|
|
@@ -54,6 +54,7 @@ export declare class SASTScanner {
|
|
|
54
54
|
/**
|
|
55
55
|
* Analyze a file for security vulnerabilities using pattern-based detection
|
|
56
56
|
*/
|
|
57
|
+
private getApplicablePatterns;
|
|
57
58
|
private analyzeFile;
|
|
58
59
|
/**
|
|
59
60
|
* Find all matches of a security pattern in the file content
|