agentic-qe 3.15.10 → 3.15.11
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 +114 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-TIDSQ3ZK.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-EKOOFVST.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-6YJF4FQW.js} +2 -2
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-2CW7VRPH.js} +8 -8
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-2VLYUF7U.js} +2 -2
- package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-4RAQ7PJA.js} +2 -2
- package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-672XOJDG.js} +1 -1
- package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-6NA3KZZT.js} +3 -3
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-AUUJBXWX.js} +2 -2
- package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SJYIX54.js → chunk-EBPJY4DI.js} +2 -2
- package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-ERN43HOX.js} +151 -149
- package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-ETVAYGCB.js} +11 -11
- package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-EWPUQCN4.js} +2 -2
- package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FWSGPE3V.js} +3 -3
- package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-FZHSG75I.js} +2 -2
- package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-G4FAPO57.js} +2 -2
- package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-WSF24I3D.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-IENZSO3K.js} +2 -2
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-ITL3IN2E.js} +2 -2
- package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-NSHU347M.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-LD5CFK53.js} +32 -32
- package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-OD5D4LSZ.js} +2 -2
- package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-RBZCA7SD.js} +2 -2
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-UKKYMW3S.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-PPSAMXYN.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/{chunk-N6PIIK6G.js → chunk-VO3DRK4P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-X3PZCXWG.js} +1 -1
- package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-MSKMVH5X.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ZDJRIL3S.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-B7MCGNTE.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-P574WWBW.js} +4 -4
- package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-56SKAGWX.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-DOBI67K6.js} +2 -2
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GNB574IM.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/{fleet-2Y3ZE6CE.js → fleet-FVAUMKUT.js} +22 -22
- package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-GYJ6D4QM.js} +30 -30
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-GNSIDRNG.js} +3 -3
- package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-HPHKDGGL.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-4Y6GDLYK.js} +2 -2
- package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-Y44WDOER.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-EDTS6OSC.js} +2 -2
- package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-H52QGC6B.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-RWGOVOXO.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-VSPNKCDS.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-XW5TLZ7M.js} +2 -2
- package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-UWA377D4.js → test-D2XDJNDX.js} +11 -11
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-HBBLPCZ3.js} +2 -2
- package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-PJS2FGPF.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-K7YX2AO6.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-AVZ3GPAL.js} +2 -2
- package/dist/cli/commands/fleet.js +4 -1
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/test.js +5 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +2 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +3 -2
- package/dist/coordination/handlers/security-handlers.js +34 -20
- package/dist/coordination/queen-coordinator.js +8 -3
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +5 -14
- package/dist/domains/test-execution/interfaces.d.ts +11 -1
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +3 -1
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/mcp/bundle.js +486 -481
- package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
- package/dist/mcp/handlers/domain-handler-configs.js +8 -2
- package/dist/mcp/handlers/task-handlers.d.ts +13 -0
- package/dist/mcp/handlers/task-handlers.js +42 -16
- package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
- package/dist/mcp/protocol-server.js +8 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +7 -0
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
- package/dist/cli/chunks/base-GTB6POYE.js +0 -2
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
- package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
- package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
- package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
- package/dist/cli/chunks/chunk-DURHK377.js +0 -742
- package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
- package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
- package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
- package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
- package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
- package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
- package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
- package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
- package/dist/cli/chunks/client-POSVREVS.js +0 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
- package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
- package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
- package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caller-facing summary of a coverage runner's stderr.
|
|
3
|
+
*
|
|
4
|
+
* #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
|
|
5
|
+
* #1139 error backstop never sees it, so it is redacted here. Redaction runs
|
|
6
|
+
* BEFORE slicing: a slice boundary that cut a token or connection string in
|
|
7
|
+
* half would leave a fragment the redaction patterns no longer recognise.
|
|
8
|
+
* The collector therefore keeps a wide raw window at each end of the stream;
|
|
9
|
+
* each window is redacted whole, and only then are the short head and tail
|
|
10
|
+
* taken from it. A secret cut by a window edge lies far outside the part
|
|
11
|
+
* that is kept.
|
|
12
|
+
*/
|
|
13
|
+
/** Raw stderr kept at each end of the stream, before redaction. */
|
|
14
|
+
export declare const STDERR_WINDOW_BYTES: number;
|
|
15
|
+
/**
|
|
16
|
+
* Summarise a runner's stderr for a caller: the FIRST error-looking line (or
|
|
17
|
+
* the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
|
|
18
|
+
* loses the cause when a long stack follows it — a vitest config syntax error
|
|
19
|
+
* prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
|
|
20
|
+
* `tail` are the raw windows at each end; both are redacted before slicing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function summarizeStderr(head: string, tail: string, totalBytes: number): string;
|
|
23
|
+
//# sourceMappingURL=coverage-stderr.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caller-facing summary of a coverage runner's stderr.
|
|
3
|
+
*
|
|
4
|
+
* #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
|
|
5
|
+
* #1139 error backstop never sees it, so it is redacted here. Redaction runs
|
|
6
|
+
* BEFORE slicing: a slice boundary that cut a token or connection string in
|
|
7
|
+
* half would leave a fragment the redaction patterns no longer recognise.
|
|
8
|
+
* The collector therefore keeps a wide raw window at each end of the stream;
|
|
9
|
+
* each window is redacted whole, and only then are the short head and tail
|
|
10
|
+
* taken from it. A secret cut by a window edge lies far outside the part
|
|
11
|
+
* that is kept.
|
|
12
|
+
*/
|
|
13
|
+
import { redactLogText } from '../../logging/redaction.js';
|
|
14
|
+
/** Raw stderr kept at each end of the stream, before redaction. */
|
|
15
|
+
export const STDERR_WINDOW_BYTES = 64 * 1024;
|
|
16
|
+
const STDERR_TAIL_BYTES = 2048;
|
|
17
|
+
const STDERR_HEAD_BYTES = 4096;
|
|
18
|
+
const STDERR_PREFIX_BYTES = 512;
|
|
19
|
+
const ERROR_LINE_RE = /^.*(?:error|\[[A-Z][A-Z_]{2,}\]|ERR_[A-Z_]+).*$/im;
|
|
20
|
+
/**
|
|
21
|
+
* Summarise a runner's stderr for a caller: the FIRST error-looking line (or
|
|
22
|
+
* the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
|
|
23
|
+
* loses the cause when a long stack follows it — a vitest config syntax error
|
|
24
|
+
* prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
|
|
25
|
+
* `tail` are the raw windows at each end; both are redacted before slicing.
|
|
26
|
+
*/
|
|
27
|
+
export function summarizeStderr(head, tail, totalBytes) {
|
|
28
|
+
const safeTail = redactLogText(tail, Number.POSITIVE_INFINITY);
|
|
29
|
+
if (totalBytes <= STDERR_TAIL_BYTES)
|
|
30
|
+
return safeTail.trim();
|
|
31
|
+
const safeHead = redactLogText(head, Number.POSITIVE_INFINITY).slice(0, STDERR_HEAD_BYTES);
|
|
32
|
+
const tailPart = safeTail.slice(-STDERR_TAIL_BYTES);
|
|
33
|
+
const errorLine = ERROR_LINE_RE.exec(safeHead)?.[0]?.trim();
|
|
34
|
+
const prefix = (errorLine ?? safeHead.slice(0, STDERR_PREFIX_BYTES)).trim();
|
|
35
|
+
if (prefix && tailPart.includes(prefix))
|
|
36
|
+
return tailPart.trim();
|
|
37
|
+
return `${prefix}\n…\n${tailPart.trim()}`;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=coverage-stderr.js.map
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* and the CLI `coverage` command can share it.
|
|
20
20
|
*/
|
|
21
21
|
import * as fs from 'fs';
|
|
22
|
+
import { readConfinedText, readConfinedTextSync } from '../../shared/io/confined-read.js';
|
|
22
23
|
import * as os from 'os';
|
|
23
24
|
import * as path from 'path';
|
|
24
25
|
import { loadCoverageData, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
|
|
@@ -99,7 +100,7 @@ function packageCanUseRootRunner(pkgDir, rootDir) {
|
|
|
99
100
|
}
|
|
100
101
|
function readPackageJson(dir) {
|
|
101
102
|
try {
|
|
102
|
-
const parsed = JSON.parse(
|
|
103
|
+
const parsed = JSON.parse(readConfinedTextSync(path.join(dir, 'package.json'), { outsideRoot: 'allow' }));
|
|
103
104
|
return typeof parsed === 'object' && parsed !== null ? parsed : null;
|
|
104
105
|
}
|
|
105
106
|
catch {
|
|
@@ -128,7 +129,7 @@ function readWorkspacePatterns(dir) {
|
|
|
128
129
|
// Only the block-list `packages:` form is read; the flow form gives no
|
|
129
130
|
// patterns, so the root is not adopted (fails safe).
|
|
130
131
|
try {
|
|
131
|
-
const yaml =
|
|
132
|
+
const yaml = readConfinedTextSync(path.join(dir, 'pnpm-workspace.yaml'), { outsideRoot: 'allow' });
|
|
132
133
|
isRoot = true;
|
|
133
134
|
let inPackages = false;
|
|
134
135
|
for (const raw of yaml.split(/\r?\n/)) {
|
|
@@ -326,7 +327,9 @@ export function isCoverageReportFile(filePath) {
|
|
|
326
327
|
export async function loadCoverageReportFile(filePath) {
|
|
327
328
|
let content;
|
|
328
329
|
try {
|
|
329
|
-
|
|
330
|
+
// #1161: read from the validated descriptor, not the name checked earlier;
|
|
331
|
+
// a report linked out of the project, or to a device, is not read.
|
|
332
|
+
content = await readConfinedText(filePath, { outsideRoot: 'allow' });
|
|
330
333
|
}
|
|
331
334
|
catch {
|
|
332
335
|
return null;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* now co-located with the handlers that use them.
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs/promises';
|
|
8
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
8
9
|
import * as path from 'path';
|
|
9
10
|
import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
|
|
10
11
|
import { safeJsonParse } from '../../shared/safe-json.js';
|
|
@@ -32,7 +33,8 @@ export async function loadCoverageData(targetPath) {
|
|
|
32
33
|
];
|
|
33
34
|
for (const coveragePath of coverageLocations) {
|
|
34
35
|
try {
|
|
35
|
-
|
|
36
|
+
// #1161: a report linked out of the project, or to a device, is not read.
|
|
37
|
+
const content = await readConfinedText(coveragePath, { outsideRoot: 'allow' });
|
|
36
38
|
if (coveragePath.endsWith('coverage-summary.json')) {
|
|
37
39
|
return parseCoverageSummaryJson(content);
|
|
38
40
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Extracted from task-executor.ts registerHandlers().
|
|
5
5
|
* Covers: validate-requirements, validate-contracts
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
7
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
8
8
|
import { ok, err } from '../../shared/types/index.js';
|
|
9
9
|
import { toError, toErrorMessage } from '../../shared/error-utils.js';
|
|
10
10
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
@@ -74,7 +74,8 @@ export function registerRequirementsHandlers(ctx) {
|
|
|
74
74
|
return confined;
|
|
75
75
|
// Check if the contract file exists
|
|
76
76
|
try {
|
|
77
|
-
|
|
77
|
+
// #1161: read from the descriptor that was validated, not the name.
|
|
78
|
+
const content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
78
79
|
const isJson = payload.contractPath.endsWith('.json');
|
|
79
80
|
const isYaml = payload.contractPath.endsWith('.yaml') || payload.contractPath.endsWith('.yml');
|
|
80
81
|
// Basic structural validation
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Extracted from task-executor.ts registerHandlers().
|
|
5
5
|
* Covers: scan-security
|
|
6
6
|
*/
|
|
7
|
-
import * as fs from 'fs/promises';
|
|
8
7
|
import * as path from 'path';
|
|
9
8
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
9
|
import { createHash } from 'node:crypto';
|
|
@@ -14,6 +13,8 @@ import { generateSecurityRecommendations } from './handler-utils.js';
|
|
|
14
13
|
import { discoverSecurityFiles, isSecuritySourceFile } from '../../domains/security-compliance/scan-discovery.js';
|
|
15
14
|
import { runDependencyAdvisoryScan } from '../../domains/security-compliance/dependency-advisory-engine.js';
|
|
16
15
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
16
|
+
import { dropGenericEvalCoveredBySast, GENERIC_EVAL_EXEC_TITLE } from '../../domains/security-compliance/generic-finding-dedup.js';
|
|
17
|
+
import { readConfinedFile } from '../../shared/io/confined-read.js';
|
|
17
18
|
export function registerSecurityHandlers(ctx) {
|
|
18
19
|
// Register security scan handler - REAL IMPLEMENTATION
|
|
19
20
|
ctx.registerHandler('scan-security', async (task) => {
|
|
@@ -44,6 +45,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
44
45
|
const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
|
|
45
46
|
// Run basic cross-language security patterns on non-JS/TS files
|
|
46
47
|
const crossLangVulns = [];
|
|
48
|
+
// Generic eval/exec matches whose line calls eval() and not exec() (#1170).
|
|
49
|
+
const evalOnlyFindings = new Set();
|
|
47
50
|
// Run secret/CORS patterns on ALL files (not just otherFiles) to catch JS/TS secrets too
|
|
48
51
|
for (const filePath of filesToScan) {
|
|
49
52
|
if (!isSecuritySourceFile(filePath)) {
|
|
@@ -52,13 +55,15 @@ export function registerSecurityHandlers(ctx) {
|
|
|
52
55
|
continue;
|
|
53
56
|
}
|
|
54
57
|
try {
|
|
55
|
-
|
|
58
|
+
// #1161: validate the opened descriptor, not the name checked earlier.
|
|
59
|
+
const source = await readConfinedFile(filePath, { outsideRoot: 'allow' });
|
|
56
60
|
const content = source.toString('utf-8');
|
|
57
61
|
const lines = content.split('\n');
|
|
58
62
|
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'analyzed',
|
|
59
63
|
sourceDigest: createHash('sha256').update(source).digest('hex'),
|
|
60
64
|
readLines: lines.length, analyzedLines: lines.length });
|
|
61
|
-
|
|
65
|
+
// #1170: report the scanned path, as SAST does, so a finding names the
|
|
66
|
+
// real file and the same line from both engines can be matched.
|
|
62
67
|
// Pattern: Hardcoded secrets/keys
|
|
63
68
|
// Fix #287: Use \w* around keywords to match SECRET_KEY, JWT_SECRET, API_TOKEN, etc.
|
|
64
69
|
const secretPatterns = [
|
|
@@ -75,7 +80,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
75
80
|
crossLangVulns.push({
|
|
76
81
|
title: pattern.title,
|
|
77
82
|
severity: pattern.severity,
|
|
78
|
-
location: { file:
|
|
83
|
+
location: { file: filePath, line: i + 1 },
|
|
79
84
|
description: `Potential hardcoded secret found at line ${i + 1}`,
|
|
80
85
|
category: 'sensitive-data',
|
|
81
86
|
});
|
|
@@ -90,7 +95,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
90
95
|
crossLangVulns.push({
|
|
91
96
|
title: 'Potential SQL injection',
|
|
92
97
|
severity: 'high',
|
|
93
|
-
location: { file:
|
|
98
|
+
location: { file: filePath, line: i + 1 },
|
|
94
99
|
description: 'String interpolation in SQL query — use parameterized queries',
|
|
95
100
|
category: 'injection',
|
|
96
101
|
});
|
|
@@ -111,7 +116,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
111
116
|
crossLangVulns.push({
|
|
112
117
|
title: 'CORS wildcard origin',
|
|
113
118
|
severity: 'high',
|
|
114
|
-
location: { file:
|
|
119
|
+
location: { file: filePath, line: lines.findIndex(l => corsPattern.test(l)) + 1 },
|
|
115
120
|
description: 'CORS configured with wildcard (*) origin — restrict to specific domains',
|
|
116
121
|
category: 'security-misconfiguration',
|
|
117
122
|
});
|
|
@@ -124,21 +129,26 @@ export function registerSecurityHandlers(ctx) {
|
|
|
124
129
|
crossLangVulns.push({
|
|
125
130
|
title: 'Debug mode enabled',
|
|
126
131
|
severity: 'medium',
|
|
127
|
-
location: { file:
|
|
132
|
+
location: { file: filePath, line: lines.findIndex(l => /DEBUG\s*[=:]\s*(?:True|true|1)/i.test(l)) + 1 },
|
|
128
133
|
description: 'Debug mode should be disabled in production',
|
|
129
134
|
category: 'security-misconfiguration',
|
|
130
135
|
});
|
|
131
136
|
}
|
|
132
|
-
// Pattern: Eval/exec usage
|
|
137
|
+
// Pattern: Eval/exec usage, one finding per matching line (#1170)
|
|
133
138
|
genericRules.set('eval-exec', /\b(?:eval|exec)\s*\(/i.toString());
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
for (let i = 0; i < lines.length; i++) {
|
|
140
|
+
if (!/\b(?:eval|exec)\s*\(/i.test(lines[i]))
|
|
141
|
+
continue;
|
|
142
|
+
const finding = {
|
|
143
|
+
title: GENERIC_EVAL_EXEC_TITLE,
|
|
137
144
|
severity: 'high',
|
|
138
|
-
location: { file:
|
|
145
|
+
location: { file: filePath, line: i + 1 },
|
|
139
146
|
description: 'eval/exec can lead to code injection — avoid using with user input',
|
|
140
147
|
category: 'injection',
|
|
141
|
-
}
|
|
148
|
+
};
|
|
149
|
+
crossLangVulns.push(finding);
|
|
150
|
+
if (!/\bexec\s*\(/i.test(lines[i]))
|
|
151
|
+
evalOnlyFindings.add(finding);
|
|
142
152
|
}
|
|
143
153
|
}
|
|
144
154
|
catch (error) {
|
|
@@ -153,7 +163,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
153
163
|
for (const manifest of sastRequested ? depManifests : []) {
|
|
154
164
|
const manifestPath = path.join(targetPath, manifest);
|
|
155
165
|
try {
|
|
156
|
-
|
|
166
|
+
// #1161: a manifest linked out of the project is not read.
|
|
167
|
+
const manifestSource = await readConfinedFile(manifestPath, { outsideRoot: 'allow' });
|
|
157
168
|
const manifestContent = manifestSource.toString('utf-8');
|
|
158
169
|
const manifestLines = manifestContent.split('\n').length;
|
|
159
170
|
fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'analyzed',
|
|
@@ -296,13 +307,16 @@ export function registerSecurityHandlers(ctx) {
|
|
|
296
307
|
};
|
|
297
308
|
const deepAnalysisPerformed = Boolean(sastResult?.evidence?.engines.some(engine => engine.id === 'patterns' && (engine.status === 'completed' || engine.status === 'partial') &&
|
|
298
309
|
(engine.analyzedFiles ?? 0) > 0));
|
|
310
|
+
// #1170: a generic eval() match on a line SAST reported as CWE-95 is the
|
|
311
|
+
// same finding, so it is counted once, as SAST reported it.
|
|
312
|
+
const genericVulns = await dropGenericEvalCoveredBySast(crossLangVulns, sastResult?.vulnerabilities ?? [], finding => evalOnlyFindings.has(finding));
|
|
299
313
|
// Combine results from all scan sources - SAST, DAST, and cross-language patterns
|
|
300
314
|
const crossLangSeverityCounts = {
|
|
301
|
-
critical:
|
|
302
|
-
high:
|
|
303
|
-
medium:
|
|
304
|
-
low:
|
|
305
|
-
informational:
|
|
315
|
+
critical: genericVulns.filter(v => v.severity === 'critical').length,
|
|
316
|
+
high: genericVulns.filter(v => v.severity === 'high').length,
|
|
317
|
+
medium: genericVulns.filter(v => v.severity === 'medium').length,
|
|
318
|
+
low: genericVulns.filter(v => v.severity === 'low').length,
|
|
319
|
+
informational: genericVulns.filter(v => v.severity === 'informational').length,
|
|
306
320
|
};
|
|
307
321
|
const depVulns = dependencyScan?.vulnerabilities ?? [];
|
|
308
322
|
const depCount = (severity) => depVulns.filter(v => v.severity === severity).length;
|
|
@@ -317,7 +331,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
317
331
|
const allVulns = [
|
|
318
332
|
...(sastResult?.vulnerabilities || []),
|
|
319
333
|
...(dastResult?.vulnerabilities || []),
|
|
320
|
-
...
|
|
334
|
+
...genericVulns,
|
|
321
335
|
...depVulns,
|
|
322
336
|
];
|
|
323
337
|
const topVulnerabilities = allVulns
|
|
@@ -51,7 +51,7 @@ import { DEFAULT_QUEEN_CONFIG, getTaskDomains, initializeTaskDomainMap, } from '
|
|
|
51
51
|
export { DOMAIN_GROUPS, TASK_DOMAIN_MAP } from './queen-types.js';
|
|
52
52
|
// Extracted modules
|
|
53
53
|
import { subscribeToEvents, computeDomainHealthFromAgents } from './queen-event-handlers.js';
|
|
54
|
-
import { findDomainsWithoutHandler, describeMissingHandler } from './task-executability.js';
|
|
54
|
+
import { findDomainsWithoutHandler, resolveTaskDomains, describeMissingHandler } from './task-executability.js';
|
|
55
55
|
import { enqueueTask, removeFromQueues, getQueuePosition, processQueue, listTasks as listTasksImpl, assignTask, dispatchStolenTask, canDomainExecuteTask, } from './queen-task-management.js';
|
|
56
56
|
import { triggerWorkStealing as triggerWorkStealingImpl, startWorkStealingTimer } from './queen-work-stealing.js';
|
|
57
57
|
import { isMinCutAwarePlugin, injectMinCutBridgeIntoPlugins, loadState, saveState, startMetricsCollectionTimer, cleanupCompletedTasks as cleanupCompletedTasksImpl, getEnabledDomains, } from './queen-lifecycle.js';
|
|
@@ -296,9 +296,9 @@ export class QueenCoordinator {
|
|
|
296
296
|
* accept the type unchanged.
|
|
297
297
|
*/
|
|
298
298
|
validateTaskExecutable(type, targetDomains = []) {
|
|
299
|
-
const candidates =
|
|
299
|
+
const candidates = resolveTaskDomains(type, targetDomains, this.domainPlugins);
|
|
300
300
|
if (candidates.length === 0) {
|
|
301
|
-
return err(new Error(`Unknown task type '${type}': no domain is configured for it. Pass a target domain.`));
|
|
301
|
+
return err(new Error(`Unknown task type '${type}': no domain is configured for it and no loaded domain handles it. Pass a target domain.`));
|
|
302
302
|
}
|
|
303
303
|
if (!this.domainPlugins)
|
|
304
304
|
return ok(undefined);
|
|
@@ -314,6 +314,11 @@ export class QueenCoordinator {
|
|
|
314
314
|
const taskId = `task_${uuidv4()}`;
|
|
315
315
|
const task = {
|
|
316
316
|
...taskInput,
|
|
317
|
+
// #1170: a plugin task type with no configured domain (e.g. sast-scan)
|
|
318
|
+
// runs in the domains that handle it, so routing and queueing see them.
|
|
319
|
+
targetDomains: getTaskDomains(taskInput.type).length > 0
|
|
320
|
+
? taskInput.targetDomains
|
|
321
|
+
: [...resolveTaskDomains(taskInput.type, taskInput.targetDomains, this.domainPlugins)],
|
|
317
322
|
id: taskId,
|
|
318
323
|
createdAt: new Date(),
|
|
319
324
|
timeout: taskInput.timeout || this.config.defaultTaskTimeout,
|
|
@@ -14,5 +14,17 @@ import type { DomainPlugin } from '../kernel/interfaces';
|
|
|
14
14
|
* every domain can run the task.
|
|
15
15
|
*/
|
|
16
16
|
export declare function findDomainsWithoutHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string, domains: readonly DomainName[]): string[];
|
|
17
|
+
/**
|
|
18
|
+
* #1170: the loaded domains whose plugin executes `type`. A plugin task type
|
|
19
|
+
* such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
|
|
20
|
+
* no target domain is routed to the domains that handle it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findDomainsWithHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string): DomainName[];
|
|
23
|
+
/**
|
|
24
|
+
* The domains a task may run in: the caller's target domains, else the
|
|
25
|
+
* domains configured for its type, else (#1170) the loaded domains whose
|
|
26
|
+
* plugin handles the type.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveTaskDomains(type: string, targetDomains: readonly DomainName[], domainPlugins?: ReadonlyMap<DomainName, DomainPlugin>): readonly DomainName[];
|
|
17
29
|
export declare function describeMissingHandler(type: string, gaps: readonly string[]): string;
|
|
18
30
|
//# sourceMappingURL=task-executability.d.ts.map
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* the `TaskAssigned` event fallback, which nothing answers, so the task stayed
|
|
7
7
|
* `running` and held a concurrency slot for good.
|
|
8
8
|
*/
|
|
9
|
+
import { getTaskDomains } from './queen-types.js';
|
|
9
10
|
/**
|
|
10
11
|
* List the domains among `domains` that cannot execute `type`, each with the
|
|
11
12
|
* reason and, where known, the types it does support. An empty list means
|
|
@@ -25,6 +26,32 @@ export function findDomainsWithoutHandler(domainPlugins, type, domains) {
|
|
|
25
26
|
}
|
|
26
27
|
return gaps;
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* #1170: the loaded domains whose plugin executes `type`. A plugin task type
|
|
31
|
+
* such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
|
|
32
|
+
* no target domain is routed to the domains that handle it.
|
|
33
|
+
*/
|
|
34
|
+
export function findDomainsWithHandler(domainPlugins, type) {
|
|
35
|
+
const domains = [];
|
|
36
|
+
for (const [domain, plugin] of domainPlugins) {
|
|
37
|
+
if (plugin.executeTask && plugin.canHandleTask?.(type))
|
|
38
|
+
domains.push(domain);
|
|
39
|
+
}
|
|
40
|
+
return domains;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The domains a task may run in: the caller's target domains, else the
|
|
44
|
+
* domains configured for its type, else (#1170) the loaded domains whose
|
|
45
|
+
* plugin handles the type.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveTaskDomains(type, targetDomains, domainPlugins) {
|
|
48
|
+
if (targetDomains.length > 0)
|
|
49
|
+
return targetDomains;
|
|
50
|
+
const configured = getTaskDomains(type);
|
|
51
|
+
if (configured.length > 0 || !domainPlugins)
|
|
52
|
+
return configured;
|
|
53
|
+
return findDomainsWithHandler(domainPlugins, type);
|
|
54
|
+
}
|
|
28
55
|
export function describeMissingHandler(type, gaps) {
|
|
29
56
|
return `No handler for task type '${type}' in domain ${gaps.join('; ')}`;
|
|
30
57
|
}
|
|
@@ -49,6 +49,12 @@ export declare class WorkflowOrchestrator implements IWorkflowOrchestrator {
|
|
|
49
49
|
*/
|
|
50
50
|
rejectStep(executionId: string, stepId: string, reason?: string): boolean;
|
|
51
51
|
isActionRegistered(domain: DomainName, action: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* #1157: a registered action by domain and action name. Both names come from
|
|
54
|
+
* pipeline YAML, so only own registry entries count: `toString` or
|
|
55
|
+
* `constructor` is an unregistered action, not an Object.prototype member.
|
|
56
|
+
*/
|
|
57
|
+
private lookupAction;
|
|
52
58
|
getRegisteredActions(domain: DomainName): string[];
|
|
53
59
|
getDomainsWithActions(): DomainName[];
|
|
54
60
|
spawnWorkflowAgent(workflowId: string, stepId: string, domain: DomainName): Promise<Result<string, Error>>;
|
|
@@ -209,7 +209,18 @@ export class WorkflowOrchestrator {
|
|
|
209
209
|
// Public Utility Methods
|
|
210
210
|
// ============================================================================
|
|
211
211
|
isActionRegistered(domain, action) {
|
|
212
|
-
return
|
|
212
|
+
return this.lookupAction(domain, action) !== undefined;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* #1157: a registered action by domain and action name. Both names come from
|
|
216
|
+
* pipeline YAML, so only own registry entries count: `toString` or
|
|
217
|
+
* `constructor` is an unregistered action, not an Object.prototype member.
|
|
218
|
+
*/
|
|
219
|
+
lookupAction(domain, action) {
|
|
220
|
+
const actions = Object.hasOwn(this.actionRegistry, domain)
|
|
221
|
+
? this.actionRegistry[domain]
|
|
222
|
+
: undefined;
|
|
223
|
+
return actions && Object.hasOwn(actions, action) ? actions[action] : undefined;
|
|
213
224
|
}
|
|
214
225
|
getRegisteredActions(domain) {
|
|
215
226
|
return Object.keys(this.actionRegistry[domain] || {});
|
|
@@ -612,9 +623,9 @@ export class WorkflowOrchestrator {
|
|
|
612
623
|
return actionResult.value;
|
|
613
624
|
}
|
|
614
625
|
// Fall back to registered domain actions
|
|
615
|
-
const
|
|
616
|
-
if (
|
|
617
|
-
const actionResult = await Promise.race([
|
|
626
|
+
const domainAction = this.lookupAction(step.domain, step.action);
|
|
627
|
+
if (domainAction) {
|
|
628
|
+
const actionResult = await Promise.race([domainAction(input, context), timeoutPromise]);
|
|
618
629
|
if (!actionResult.success)
|
|
619
630
|
throw actionResult.error;
|
|
620
631
|
return actionResult.value;
|
|
@@ -624,12 +635,12 @@ export class WorkflowOrchestrator {
|
|
|
624
635
|
}
|
|
625
636
|
async executeRollback(rollback, context) {
|
|
626
637
|
try {
|
|
627
|
-
const
|
|
628
|
-
if (!
|
|
638
|
+
const domainAction = this.lookupAction(rollback.domain, rollback.action);
|
|
639
|
+
if (!domainAction) {
|
|
629
640
|
console.warn(`Rollback action '${rollback.action}' not registered for domain '${rollback.domain}'. Skipping rollback.`);
|
|
630
641
|
return;
|
|
631
642
|
}
|
|
632
|
-
const result = await
|
|
643
|
+
const result = await domainAction(rollback.input || {}, context);
|
|
633
644
|
if (!result.success)
|
|
634
645
|
console.error(`Rollback failed for ${rollback.domain}.${rollback.action}:`, result.error);
|
|
635
646
|
}
|
|
@@ -669,8 +680,11 @@ export class WorkflowOrchestrator {
|
|
|
669
680
|
for (const part of parts) {
|
|
670
681
|
if (current === null || current === undefined)
|
|
671
682
|
return undefined;
|
|
672
|
-
|
|
683
|
+
// #1157: paths come from pipeline YAML (conditions, input/output
|
|
684
|
+
// mappings); an inherited member such as `constructor` is absent.
|
|
685
|
+
if (typeof current === 'object' && Object.hasOwn(current, part)) {
|
|
673
686
|
current = current[part];
|
|
687
|
+
}
|
|
674
688
|
else
|
|
675
689
|
return undefined;
|
|
676
690
|
}
|
|
@@ -15,6 +15,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import * as path from 'path';
|
|
17
17
|
import * as fs from 'fs/promises';
|
|
18
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
18
19
|
import { ok, err } from '../../../shared/types/index.js';
|
|
19
20
|
import { CodeIntelligenceEvents, createEvent, } from '../../../shared/events/domain-events.js';
|
|
20
21
|
import { toError } from '../../../shared/error-utils.js';
|
|
@@ -319,7 +320,7 @@ export class ProductFactorsBridgeService {
|
|
|
319
320
|
async getProjectMetadata(projectPath) {
|
|
320
321
|
try {
|
|
321
322
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
322
|
-
const content = await
|
|
323
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
323
324
|
const pkg = safeJsonParse(content);
|
|
324
325
|
return {
|
|
325
326
|
name: pkg.name || 'Project',
|
|
@@ -344,14 +345,16 @@ export class ProductFactorsBridgeService {
|
|
|
344
345
|
catch {
|
|
345
346
|
return systems;
|
|
346
347
|
}
|
|
347
|
-
const content = await
|
|
348
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
348
349
|
const pkg = safeJsonParse(content);
|
|
349
350
|
const allDeps = {
|
|
350
351
|
...pkg.dependencies,
|
|
351
352
|
...pkg.devDependencies,
|
|
352
353
|
};
|
|
353
354
|
for (const [depName] of Object.entries(allDeps)) {
|
|
354
|
-
|
|
355
|
+
// #1157: dependency names come from package.json; a package named
|
|
356
|
+
// `constructor` is not a known external system.
|
|
357
|
+
const pattern = Object.hasOwn(EXTERNAL_SYSTEM_PATTERNS, depName) ? EXTERNAL_SYSTEM_PATTERNS[depName] : undefined;
|
|
355
358
|
if (pattern) {
|
|
356
359
|
systems.push({
|
|
357
360
|
id: sanitizeId(depName),
|
|
@@ -636,7 +639,7 @@ export class ProductFactorsBridgeService {
|
|
|
636
639
|
// Simple hash based on package.json and file count
|
|
637
640
|
try {
|
|
638
641
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
639
|
-
const content = await
|
|
642
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
640
643
|
return this.hashString(content);
|
|
641
644
|
}
|
|
642
645
|
catch {
|
|
@@ -19,6 +19,15 @@
|
|
|
19
19
|
import * as fs from 'fs/promises';
|
|
20
20
|
import * as path from 'path';
|
|
21
21
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
22
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
23
|
+
/**
|
|
24
|
+
* #1161: coverage reports are found under caller-named directories, so read
|
|
25
|
+
* them from a validated descriptor: a report linked out of the project, or to
|
|
26
|
+
* a device such as /dev/zero, is refused instead of read.
|
|
27
|
+
*/
|
|
28
|
+
function readCoverageFile(file) {
|
|
29
|
+
return readConfinedText(file, { outsideRoot: 'allow' });
|
|
30
|
+
}
|
|
22
31
|
// ============================================================================
|
|
23
32
|
// LCOV Parser
|
|
24
33
|
// ============================================================================
|
|
@@ -28,7 +37,7 @@ import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
|
28
37
|
* LCOV format is the most common output from Istanbul, nyc, c8, etc.
|
|
29
38
|
*/
|
|
30
39
|
export async function parseLCOV(lcovPath, projectRoot) {
|
|
31
|
-
const content = await
|
|
40
|
+
const content = await readCoverageFile(lcovPath);
|
|
32
41
|
return parseLCOVContent(content, projectRoot || path.dirname(lcovPath));
|
|
33
42
|
}
|
|
34
43
|
/**
|
|
@@ -221,7 +230,7 @@ export function parseLCOVContent(content, projectRoot) {
|
|
|
221
230
|
* Parse JSON coverage data (Istanbul/Vitest format)
|
|
222
231
|
*/
|
|
223
232
|
export async function parseJSONCoverage(jsonPath, projectRoot) {
|
|
224
|
-
const content = await
|
|
233
|
+
const content = await readCoverageFile(jsonPath);
|
|
225
234
|
const data = safeJsonParse(content);
|
|
226
235
|
const root = projectRoot || path.dirname(jsonPath);
|
|
227
236
|
const files = new Map();
|
|
@@ -334,7 +343,7 @@ export async function parseJSONCoverage(jsonPath, projectRoot) {
|
|
|
334
343
|
* <report><package><class><method><counter type="LINE" missed="X" covered="Y"/></method></class></package></report>
|
|
335
344
|
*/
|
|
336
345
|
export async function parseJaCoCo(xmlPath, projectRoot) {
|
|
337
|
-
const content = await
|
|
346
|
+
const content = await readCoverageFile(xmlPath);
|
|
338
347
|
return parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
|
|
339
348
|
}
|
|
340
349
|
export function parseJaCoCoContent(content, projectRoot) {
|
|
@@ -437,7 +446,7 @@ function parseJaCoCoCounters(xml) {
|
|
|
437
446
|
* <Root CoveredStatements="X" TotalStatements="Y"><Assembly><Namespace><Type><Member Statement="..."/></Type></Namespace></Assembly></Root>
|
|
438
447
|
*/
|
|
439
448
|
export async function parseDotcover(xmlPath, projectRoot) {
|
|
440
|
-
const content = await
|
|
449
|
+
const content = await readCoverageFile(xmlPath);
|
|
441
450
|
return parseDotcoverContent(content, projectRoot || path.dirname(xmlPath));
|
|
442
451
|
}
|
|
443
452
|
export function parseDotcoverContent(content, projectRoot) {
|
|
@@ -531,7 +540,7 @@ export function parseDotcoverContent(content, projectRoot) {
|
|
|
531
540
|
* Also handles tarpaulin LCOV output by delegating to parseLCOVContent.
|
|
532
541
|
*/
|
|
533
542
|
export async function parseTarpaulin(filePath, projectRoot) {
|
|
534
|
-
const content = await
|
|
543
|
+
const content = await readCoverageFile(filePath);
|
|
535
544
|
const root = projectRoot || path.dirname(filePath);
|
|
536
545
|
// If it looks like LCOV, delegate
|
|
537
546
|
if (content.includes('SF:') && content.includes('end_of_record')) {
|
|
@@ -603,7 +612,7 @@ export function parseTarpaulinContent(content, projectRoot) {
|
|
|
603
612
|
* pkg/file.go:startLine.startCol,endLine.endCol numStatements count
|
|
604
613
|
*/
|
|
605
614
|
export async function parseGoCover(coverPath, projectRoot) {
|
|
606
|
-
const content = await
|
|
615
|
+
const content = await readCoverageFile(coverPath);
|
|
607
616
|
return parseGoCoverContent(content, projectRoot || path.dirname(coverPath));
|
|
608
617
|
}
|
|
609
618
|
export function parseGoCoverContent(content, projectRoot) {
|
|
@@ -681,7 +690,7 @@ export function parseGoCoverContent(content, projectRoot) {
|
|
|
681
690
|
* but sets the format and language appropriately.
|
|
682
691
|
*/
|
|
683
692
|
export async function parseKover(xmlPath, projectRoot) {
|
|
684
|
-
const content = await
|
|
693
|
+
const content = await readCoverageFile(xmlPath);
|
|
685
694
|
const report = parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
|
|
686
695
|
report.format = 'kover';
|
|
687
696
|
report.language = 'kotlin';
|
|
@@ -698,7 +707,7 @@ export async function parseKover(xmlPath, projectRoot) {
|
|
|
698
707
|
* { "targets": [ { "files": [ { "path": "...", "lineCoverage": 0.85, "coveredLines": N, "executableLines": N, "functions": [...] } ] } ] }
|
|
699
708
|
*/
|
|
700
709
|
export async function parseXcresult(jsonPath, projectRoot) {
|
|
701
|
-
const content = await
|
|
710
|
+
const content = await readCoverageFile(jsonPath);
|
|
702
711
|
return parseXcresultContent(content, projectRoot || path.dirname(jsonPath));
|
|
703
712
|
}
|
|
704
713
|
export function parseXcresultContent(content, projectRoot) {
|
|
@@ -830,7 +839,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
|
|
|
830
839
|
return parseXcresult(coveragePath, projectRoot);
|
|
831
840
|
}
|
|
832
841
|
// Content-based detection
|
|
833
|
-
const content = await
|
|
842
|
+
const content = await readCoverageFile(coveragePath);
|
|
834
843
|
const trimmed = content.trim();
|
|
835
844
|
if (trimmed.startsWith('{')) {
|
|
836
845
|
// Check for tarpaulin JSON structure
|
|
@@ -869,7 +878,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
|
|
|
869
878
|
// Language-based fallback: try the first format associated with the language
|
|
870
879
|
if (language) {
|
|
871
880
|
const langLower = language.toLowerCase();
|
|
872
|
-
const hints = LANGUAGE_FORMAT_HINTS[langLower];
|
|
881
|
+
const hints = Object.hasOwn(LANGUAGE_FORMAT_HINTS, langLower) ? LANGUAGE_FORMAT_HINTS[langLower] : undefined; // #1157
|
|
873
882
|
if (hints && hints.length > 0) {
|
|
874
883
|
try {
|
|
875
884
|
return await parseCoverage(coveragePath, projectRoot, hints[0]);
|
|
@@ -36,6 +36,8 @@ export interface PatternContext {
|
|
|
36
36
|
readonly testType?: string;
|
|
37
37
|
readonly codeContext?: string;
|
|
38
38
|
readonly tags: string[];
|
|
39
|
+
/** Explicit strategy objective; absent means no requested direction. */
|
|
40
|
+
readonly objective?: Pick<OptimizationObjective, 'metric' | 'direction'>;
|
|
39
41
|
}
|
|
40
42
|
export interface PatternTemplate {
|
|
41
43
|
readonly type: 'code' | 'prompt' | 'workflow' | 'config';
|
|
@@ -290,7 +290,8 @@ Provide:
|
|
|
290
290
|
let output = pattern.template.content;
|
|
291
291
|
// Replace template variables
|
|
292
292
|
for (const variable of pattern.template.variables) {
|
|
293
|
-
|
|
293
|
+
// #1157: the variable name comes from a stored pattern; read own values only.
|
|
294
|
+
const value = (Object.hasOwn(variables, variable.name) ? variables[variable.name] : undefined) ?? variable.defaultValue;
|
|
294
295
|
if (variable.required && value === undefined) {
|
|
295
296
|
return err(new Error(`Required variable ${variable.name} not provided`));
|
|
296
297
|
}
|