agentic-qe 3.15.9 → 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 +365 -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/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- 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/audit/witness-chain.d.ts +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-TIDSQ3ZK.js +2 -0
- package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/browser-6YJF4FQW.js +4 -0
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/chunk-2CW7VRPH.js +141 -0
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/chunk-2VLYUF7U.js +2 -0
- package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-4RAQ7PJA.js} +8 -8
- package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-672XOJDG.js} +2 -2
- package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-6NA3KZZT.js} +10 -10
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-AUUJBXWX.js} +25 -20
- package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/chunk-EBPJY4DI.js +3 -0
- package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ERN43HOX.js} +430 -433
- package/dist/cli/chunks/chunk-ETVAYGCB.js +180 -0
- package/dist/cli/chunks/chunk-EWPUQCN4.js +2 -0
- package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/chunk-FWSGPE3V.js +12 -0
- package/dist/cli/chunks/chunk-FZHSG75I.js +3 -0
- package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-G4FAPO57.js} +5 -5
- package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/chunk-IENZSO3K.js +4 -0
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/chunk-ITL3IN2E.js +3 -0
- package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-LD5CFK53.js} +54 -33
- package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/chunk-OD5D4LSZ.js +2 -0
- package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/chunk-RBZCA7SD.js +12 -0
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/chunk-UKKYMW3S.js +3 -0
- package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/chunk-VO3DRK4P.js +3 -0
- package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/chunk-X3PZCXWG.js +2 -0
- package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ONKLMVQ2.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/daemon-P574WWBW.js +18 -0
- package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/domain-transfer-DOBI67K6.js +2 -0
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/fleet-FVAUMKUT.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.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-RYUJPA7B.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-GYJ6D4QM.js} +36 -36
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-L4KJHVWS.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-GNNB5FCZ.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-GNSIDRNG.js} +24 -24
- package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-ZM43WGDO.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/mcp-4Y6GDLYK.js +2 -0
- package/dist/cli/chunks/{memory-W5FZGVAD.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-SXXGAQ2G.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-Y44WDOER.js} +69 -25
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/pipeline-EDTS6OSC.js +19 -0
- package/dist/cli/chunks/{platform-KJDABL5C.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.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-BNRONTQV.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-COJ6CX6S.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-WM33ZILE.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.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-P7H6HCAG.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-R5SPVRFP.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-AUDTRX3I.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.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-XNOAI4G4.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/sync-XW5TLZ7M.js +2 -0
- package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-XFSGQELD.js → test-D2XDJNDX.js} +17 -17
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-HBBLPCZ3.js +2 -0
- package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-JTWLBAZJ.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-4ABM72T4.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BTT53TUL.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-K7YX2AO6.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/wrappers-AVZ3GPAL.js +2 -0
- package/dist/cli/commands/fleet.js +23 -13
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +11 -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 +11 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +63 -7
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-handlers.js +10 -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 +18 -3
- package/dist/coordination/handlers/security-handlers.js +45 -21
- package/dist/coordination/handlers/test-execution-handlers.js +25 -7
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
- package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
- package/dist/coordination/protocols/learning-consolidation.js +71 -22
- package/dist/coordination/queen-coordinator.d.ts +1 -1
- package/dist/coordination/queen-coordinator.js +27 -10
- package/dist/coordination/queen-event-handlers.js +13 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +62 -168
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +1 -1
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- 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/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
- package/dist/domains/code-intelligence/index-path-guard.js +20 -50
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
- package/dist/domains/learning-optimization/active-patterns.js +2 -2
- package/dist/domains/learning-optimization/coordinator.js +9 -5
- package/dist/domains/learning-optimization/interfaces.d.ts +8 -2
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
- package/dist/domains/learning-optimization/reward-source.js +8 -1
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
- package/dist/domains/learning-optimization/services/learning-coordinator.js +47 -59
- 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/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- 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/scanners/scanner-orchestrator.js +4 -1
- 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 +6 -0
- package/dist/domains/test-execution/coordinator.js +28 -22
- package/dist/domains/test-execution/interfaces.d.ts +36 -1
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- 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-execution/services/runner-test-cases.d.ts +11 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
- package/dist/domains/test-execution/services/test-executor.js +8 -8
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +5 -2
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/10-workers.js +50 -6
- 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/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
- package/dist/learning/dream/dream-insights-pruner.js +16 -30
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +17 -3
- package/dist/mcp/bundle.js +612 -580
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +7 -0
- package/dist/mcp/handlers/domain-handler-configs.js +19 -5
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +36 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +16 -0
- package/dist/mcp/handlers/task-handlers.js +77 -24
- package/dist/mcp/handlers/validation-pipeline-handler.js +14 -10
- package/dist/mcp/protocol-server.js +10 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/security/schema-validator.js +3 -2
- 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/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +59 -12
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +19 -1
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +17 -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/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- 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/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -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/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -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/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +6 -0
- package/dist/shared/test-runner-process.js +14 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/shared/utils/namespaced-search.d.ts +14 -0
- package/dist/shared/utils/namespaced-search.js +19 -1
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- 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/gate-reexecute.js +7 -4
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/dist/workers/daemon.js +13 -1
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +2 -0
- package/dist/workers/workers/learning-consolidation.js +12 -1
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
- package/dist/cli/chunks/base-67DXSAYM.js +0 -2
- package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
- package/dist/cli/chunks/chunk-2XITOPYV.js +0 -6
- package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
- package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
- package/dist/cli/chunks/chunk-6PXA2BQJ.js +0 -742
- package/dist/cli/chunks/chunk-6YL6JOQB.js +0 -4
- package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
- package/dist/cli/chunks/chunk-AR2E4B7K.js +0 -6
- package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
- package/dist/cli/chunks/chunk-FJ4VTLLK.js +0 -2
- package/dist/cli/chunks/chunk-FV3NHVC7.js +0 -59
- package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
- package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
- package/dist/cli/chunks/chunk-JEP4ULR6.js +0 -21
- package/dist/cli/chunks/chunk-JK2ME6IT.js +0 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
- package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
- package/dist/cli/chunks/chunk-N5PDFGCQ.js +0 -180
- package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
- package/dist/cli/chunks/chunk-P2CXVNKK.js +0 -4
- package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
- package/dist/cli/chunks/chunk-VU2EL424.js +0 -14
- package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
- package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
- package/dist/cli/chunks/chunk-XZJ2O3VC.js +0 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
- package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
- package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
- package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
- package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
- package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
- package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
- package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
- package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
- package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
- package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
- package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
- package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
|
@@ -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,16 +4,24 @@
|
|
|
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';
|
|
11
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
11
12
|
export function registerRequirementsHandlers(ctx) {
|
|
12
13
|
// Register requirements validation handler
|
|
13
14
|
ctx.registerHandler('validate-requirements', async (task) => {
|
|
14
15
|
const payload = task.payload;
|
|
15
16
|
try {
|
|
16
|
-
|
|
17
|
+
// #1126: list requirement files only inside the project.
|
|
18
|
+
let targetPath = process.cwd();
|
|
19
|
+
if (payload.requirementsPath) {
|
|
20
|
+
const confined = await requirePayloadPath('validate-requirements', 'requirementsPath', payload.requirementsPath, { allowDirectory: true, allowMissing: true });
|
|
21
|
+
if (!confined.success)
|
|
22
|
+
return confined;
|
|
23
|
+
targetPath = confined.value;
|
|
24
|
+
}
|
|
17
25
|
// Look for requirements files (markdown, feature files, etc.)
|
|
18
26
|
const reqFiles = await discoverSourceFiles(targetPath, {
|
|
19
27
|
includeTests: false,
|
|
@@ -58,9 +66,16 @@ export function registerRequirementsHandlers(ctx) {
|
|
|
58
66
|
error: 'contractPath is required. Provide a path to an OpenAPI spec, JSON Schema, or Protocol Buffer file.',
|
|
59
67
|
});
|
|
60
68
|
}
|
|
69
|
+
// #1126: read only a regular file inside the project, within the size
|
|
70
|
+
// limit; the result reports its line count and whether it parses. A
|
|
71
|
+
// missing file keeps its valid:false result below.
|
|
72
|
+
const confined = await requirePayloadPath('validate-contracts', 'contractPath', payload.contractPath, { allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
73
|
+
if (!confined.success)
|
|
74
|
+
return confined;
|
|
61
75
|
// Check if the contract file exists
|
|
62
76
|
try {
|
|
63
|
-
|
|
77
|
+
// #1161: read from the descriptor that was validated, not the name.
|
|
78
|
+
const content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
64
79
|
const isJson = payload.contractPath.endsWith('.json');
|
|
65
80
|
const isYaml = payload.contractPath.endsWith('.yaml') || payload.contractPath.endsWith('.yml');
|
|
66
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';
|
|
@@ -13,12 +12,24 @@ import { FilePath } from '../../shared/value-objects/index.js';
|
|
|
13
12
|
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';
|
|
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';
|
|
16
18
|
export function registerSecurityHandlers(ctx) {
|
|
17
19
|
// Register security scan handler - REAL IMPLEMENTATION
|
|
18
20
|
ctx.registerHandler('scan-security', async (task) => {
|
|
19
21
|
const payload = task.payload;
|
|
20
22
|
try {
|
|
21
|
-
|
|
23
|
+
// #1126: read (SAST, manifests, dependencies) only a file or directory
|
|
24
|
+
// inside the project. A DAST-only scan reads no target path.
|
|
25
|
+
let targetPath = path.resolve(payload.target || process.cwd());
|
|
26
|
+
const readsTarget = payload.sast !== false || payload.dependencies === true;
|
|
27
|
+
if (payload.target && payload.target !== '.' && readsTarget) {
|
|
28
|
+
const confined = await requirePayloadPath('scan-security', 'target', payload.target, { allowDirectory: true, allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
29
|
+
if (!confined.success)
|
|
30
|
+
return confined;
|
|
31
|
+
targetPath = confined.value;
|
|
32
|
+
}
|
|
22
33
|
const sastRequested = payload.sast !== false;
|
|
23
34
|
const discoveryResult = sastRequested ? await discoverSecurityFiles(targetPath) : undefined;
|
|
24
35
|
const filesToScan = discoveryResult?.files ?? [];
|
|
@@ -34,6 +45,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
34
45
|
const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
|
|
35
46
|
// Run basic cross-language security patterns on non-JS/TS files
|
|
36
47
|
const crossLangVulns = [];
|
|
48
|
+
// Generic eval/exec matches whose line calls eval() and not exec() (#1170).
|
|
49
|
+
const evalOnlyFindings = new Set();
|
|
37
50
|
// Run secret/CORS patterns on ALL files (not just otherFiles) to catch JS/TS secrets too
|
|
38
51
|
for (const filePath of filesToScan) {
|
|
39
52
|
if (!isSecuritySourceFile(filePath)) {
|
|
@@ -42,13 +55,15 @@ export function registerSecurityHandlers(ctx) {
|
|
|
42
55
|
continue;
|
|
43
56
|
}
|
|
44
57
|
try {
|
|
45
|
-
|
|
58
|
+
// #1161: validate the opened descriptor, not the name checked earlier.
|
|
59
|
+
const source = await readConfinedFile(filePath, { outsideRoot: 'allow' });
|
|
46
60
|
const content = source.toString('utf-8');
|
|
47
61
|
const lines = content.split('\n');
|
|
48
62
|
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'analyzed',
|
|
49
63
|
sourceDigest: createHash('sha256').update(source).digest('hex'),
|
|
50
64
|
readLines: lines.length, analyzedLines: lines.length });
|
|
51
|
-
|
|
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.
|
|
52
67
|
// Pattern: Hardcoded secrets/keys
|
|
53
68
|
// Fix #287: Use \w* around keywords to match SECRET_KEY, JWT_SECRET, API_TOKEN, etc.
|
|
54
69
|
const secretPatterns = [
|
|
@@ -65,7 +80,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
65
80
|
crossLangVulns.push({
|
|
66
81
|
title: pattern.title,
|
|
67
82
|
severity: pattern.severity,
|
|
68
|
-
location: { file:
|
|
83
|
+
location: { file: filePath, line: i + 1 },
|
|
69
84
|
description: `Potential hardcoded secret found at line ${i + 1}`,
|
|
70
85
|
category: 'sensitive-data',
|
|
71
86
|
});
|
|
@@ -80,7 +95,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
80
95
|
crossLangVulns.push({
|
|
81
96
|
title: 'Potential SQL injection',
|
|
82
97
|
severity: 'high',
|
|
83
|
-
location: { file:
|
|
98
|
+
location: { file: filePath, line: i + 1 },
|
|
84
99
|
description: 'String interpolation in SQL query — use parameterized queries',
|
|
85
100
|
category: 'injection',
|
|
86
101
|
});
|
|
@@ -101,7 +116,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
101
116
|
crossLangVulns.push({
|
|
102
117
|
title: 'CORS wildcard origin',
|
|
103
118
|
severity: 'high',
|
|
104
|
-
location: { file:
|
|
119
|
+
location: { file: filePath, line: lines.findIndex(l => corsPattern.test(l)) + 1 },
|
|
105
120
|
description: 'CORS configured with wildcard (*) origin — restrict to specific domains',
|
|
106
121
|
category: 'security-misconfiguration',
|
|
107
122
|
});
|
|
@@ -114,21 +129,26 @@ export function registerSecurityHandlers(ctx) {
|
|
|
114
129
|
crossLangVulns.push({
|
|
115
130
|
title: 'Debug mode enabled',
|
|
116
131
|
severity: 'medium',
|
|
117
|
-
location: { file:
|
|
132
|
+
location: { file: filePath, line: lines.findIndex(l => /DEBUG\s*[=:]\s*(?:True|true|1)/i.test(l)) + 1 },
|
|
118
133
|
description: 'Debug mode should be disabled in production',
|
|
119
134
|
category: 'security-misconfiguration',
|
|
120
135
|
});
|
|
121
136
|
}
|
|
122
|
-
// Pattern: Eval/exec usage
|
|
137
|
+
// Pattern: Eval/exec usage, one finding per matching line (#1170)
|
|
123
138
|
genericRules.set('eval-exec', /\b(?:eval|exec)\s*\(/i.toString());
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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,
|
|
127
144
|
severity: 'high',
|
|
128
|
-
location: { file:
|
|
145
|
+
location: { file: filePath, line: i + 1 },
|
|
129
146
|
description: 'eval/exec can lead to code injection — avoid using with user input',
|
|
130
147
|
category: 'injection',
|
|
131
|
-
}
|
|
148
|
+
};
|
|
149
|
+
crossLangVulns.push(finding);
|
|
150
|
+
if (!/\bexec\s*\(/i.test(lines[i]))
|
|
151
|
+
evalOnlyFindings.add(finding);
|
|
132
152
|
}
|
|
133
153
|
}
|
|
134
154
|
catch (error) {
|
|
@@ -143,7 +163,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
143
163
|
for (const manifest of sastRequested ? depManifests : []) {
|
|
144
164
|
const manifestPath = path.join(targetPath, manifest);
|
|
145
165
|
try {
|
|
146
|
-
|
|
166
|
+
// #1161: a manifest linked out of the project is not read.
|
|
167
|
+
const manifestSource = await readConfinedFile(manifestPath, { outsideRoot: 'allow' });
|
|
147
168
|
const manifestContent = manifestSource.toString('utf-8');
|
|
148
169
|
const manifestLines = manifestContent.split('\n').length;
|
|
149
170
|
fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'analyzed',
|
|
@@ -286,13 +307,16 @@ export function registerSecurityHandlers(ctx) {
|
|
|
286
307
|
};
|
|
287
308
|
const deepAnalysisPerformed = Boolean(sastResult?.evidence?.engines.some(engine => engine.id === 'patterns' && (engine.status === 'completed' || engine.status === 'partial') &&
|
|
288
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));
|
|
289
313
|
// Combine results from all scan sources - SAST, DAST, and cross-language patterns
|
|
290
314
|
const crossLangSeverityCounts = {
|
|
291
|
-
critical:
|
|
292
|
-
high:
|
|
293
|
-
medium:
|
|
294
|
-
low:
|
|
295
|
-
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,
|
|
296
320
|
};
|
|
297
321
|
const depVulns = dependencyScan?.vulnerabilities ?? [];
|
|
298
322
|
const depCount = (severity) => depVulns.filter(v => v.severity === severity).length;
|
|
@@ -307,7 +331,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
307
331
|
const allVulns = [
|
|
308
332
|
...(sastResult?.vulnerabilities || []),
|
|
309
333
|
...(dastResult?.vulnerabilities || []),
|
|
310
|
-
...
|
|
334
|
+
...genericVulns,
|
|
311
335
|
...depVulns,
|
|
312
336
|
];
|
|
313
337
|
const topVulnerabilities = allVulns
|
|
@@ -8,11 +8,12 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
|
-
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
11
|
+
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
12
12
|
import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
|
|
13
13
|
import { jestExactPathPattern, runnerFilePath } from '../../shared/test-runner-args.js';
|
|
14
14
|
import { testCasesFromRunnerReport } from '../../domains/test-execution/services/runner-test-cases.js';
|
|
15
15
|
import { runTestRunnerProcess } from '../../shared/test-runner-process.js';
|
|
16
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
16
17
|
function escapeRegExp(s) {
|
|
17
18
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
18
19
|
}
|
|
@@ -69,9 +70,19 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
69
70
|
if (payload.sourceFiles && payload.sourceFiles.length > 0) {
|
|
70
71
|
sourceFiles = payload.sourceFiles;
|
|
71
72
|
}
|
|
72
|
-
else if (payload.filePath) {
|
|
73
|
+
else if (payload.filePath && !payload.sourceCode) {
|
|
74
|
+
// With sourceCode, filePath is only the import target written into the
|
|
75
|
+
// generated tests (tool contract); it is neither read nor required.
|
|
73
76
|
sourceFiles = [payload.filePath];
|
|
74
77
|
}
|
|
78
|
+
if (sourceFiles.length > 0) {
|
|
79
|
+
// #1126: the generator reads each file whole, so only project files.
|
|
80
|
+
const field = payload.sourceFiles?.length ? 'sourceFiles' : 'filePath';
|
|
81
|
+
const confined = await requirePayloadFiles('generate-tests', field, sourceFiles, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
82
|
+
if (!confined.success)
|
|
83
|
+
return confined;
|
|
84
|
+
sourceFiles = confined.value;
|
|
85
|
+
}
|
|
75
86
|
else if (payload.sourceCode) {
|
|
76
87
|
// Write temporary file for analysis if only source code provided
|
|
77
88
|
// Use correct file extension based on language parameter
|
|
@@ -175,15 +186,22 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
175
186
|
ctx.registerHandler('execute-tests', async (task) => {
|
|
176
187
|
const payload = task.payload;
|
|
177
188
|
try {
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
189
|
+
const requestedFiles = payload.testFiles || [];
|
|
190
|
+
if (requestedFiles.length === 0) {
|
|
180
191
|
return err(new TestRunnerExecutionError('No test files specified. Provide testFiles array with paths to test files.'));
|
|
181
192
|
}
|
|
182
193
|
// Validate test file paths before invoking a runner.
|
|
183
194
|
const safePathPattern = /^[a-zA-Z0-9_./@-]+$/;
|
|
184
|
-
if (
|
|
195
|
+
if (requestedFiles.some(file => !safePathPattern.test(file))) {
|
|
185
196
|
return err(new TestRunnerExecutionError('Some test file paths contain invalid characters and were rejected. Provide concrete paths; expand glob patterns before calling.'));
|
|
186
197
|
}
|
|
198
|
+
// #1126: a runner executes what it is given, so only files and
|
|
199
|
+
// directories (#909 Jest targets) inside the project, run as the real
|
|
200
|
+
// paths that were checked. A missing file is still reported by the runner.
|
|
201
|
+
const confined = await requirePayloadFiles('execute-tests', 'testFiles', requestedFiles, { allowMissing: true, allowDirectory: true });
|
|
202
|
+
if (!confined.success)
|
|
203
|
+
return confined;
|
|
204
|
+
const testFiles = confined.value;
|
|
187
205
|
// A caller-owned MCP task skips the Queen's plugin dispatch. Run through
|
|
188
206
|
// that same domain API here: it owns persistence, measured quality evidence
|
|
189
207
|
// and TestRunStarted/Completed events as well as the runner itself.
|
|
@@ -230,7 +248,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
230
248
|
}
|
|
231
249
|
const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
|
|
232
250
|
if (execution.error) {
|
|
233
|
-
return err(new TestRunnerExecutionError(`${runner} could not complete: ${diagnostics
|
|
251
|
+
return err(new TestRunnerExecutionError(`${runner} could not complete: ${capDiagnostics(diagnostics)}`));
|
|
234
252
|
}
|
|
235
253
|
try {
|
|
236
254
|
const jsonStart = output.indexOf('{');
|
|
@@ -259,7 +277,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
259
277
|
catch {
|
|
260
278
|
// A malformed report cannot establish that the requested tests completed.
|
|
261
279
|
}
|
|
262
|
-
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${diagnostics
|
|
280
|
+
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${capDiagnostics(diagnostics)}`));
|
|
263
281
|
}
|
|
264
282
|
catch (error) {
|
|
265
283
|
return err(toError(error));
|
|
@@ -20,6 +20,19 @@ import { SwarmGraph } from './swarm-graph';
|
|
|
20
20
|
import { MinCutHealthMonitor } from './mincut-health-monitor';
|
|
21
21
|
import { MinCutPersistence } from './mincut-persistence';
|
|
22
22
|
import { SwarmVertex, SwarmEdge, MinCutHealth, MinCutHealthConfig, WeakVertex } from './interfaces';
|
|
23
|
+
/**
|
|
24
|
+
* #1130: Queen health reads the MinCut of the fleet's own topology (domains
|
|
25
|
+
* and long-lived agents). An agent spawned for one task is a leaf with a
|
|
26
|
+
* single edge, so counting it would put every running task below threshold.
|
|
27
|
+
*/
|
|
28
|
+
export interface FleetMinCutHealth extends MinCutHealth {
|
|
29
|
+
/** Status of the topology without task-scoped agents; this one degrades Queen health. */
|
|
30
|
+
readonly fleetStatus: MinCutHealth['status'];
|
|
31
|
+
/** MinCut of the topology without task-scoped agents. `minCutValue` stays the raw value. */
|
|
32
|
+
readonly fleetMinCutValue: number;
|
|
33
|
+
/** Running task-scoped agents left out of `fleetStatus`. */
|
|
34
|
+
readonly taskAgents: number;
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* Configuration for Queen-MinCut integration
|
|
25
38
|
*/
|
|
@@ -56,6 +69,13 @@ export declare class QueenMinCutBridge {
|
|
|
56
69
|
private readonly monitor;
|
|
57
70
|
private readonly persistence;
|
|
58
71
|
private eventSubscriptions;
|
|
72
|
+
/**
|
|
73
|
+
* Agents with a vertex in the graph, from QueenAgentSpawned or from the
|
|
74
|
+
* coordinator when the graph was built. Pruned once they complete (#1130).
|
|
75
|
+
*/
|
|
76
|
+
private readonly spawnedAgentIds;
|
|
77
|
+
/** The subset spawned for a single task (#1130). */
|
|
78
|
+
private readonly taskAgentIds;
|
|
59
79
|
private snapshotTimer;
|
|
60
80
|
private initialized;
|
|
61
81
|
constructor(eventBus: EventBus, agentCoordinator: AgentCoordinator, config?: Partial<QueenMinCutConfig>);
|
|
@@ -100,11 +120,29 @@ export declare class QueenMinCutBridge {
|
|
|
100
120
|
* Convert MinCut alerts to Queen health issues
|
|
101
121
|
*/
|
|
102
122
|
getHealthIssuesFromMinCut(): HealthIssue[];
|
|
123
|
+
/**
|
|
124
|
+
* #1130: nothing publishes QueenAgentTerminated, so a finished task agent
|
|
125
|
+
* stayed in the topology and kept the fleet degraded after its run. Drop the
|
|
126
|
+
* vertex of every tracked agent that completed normally or that the
|
|
127
|
+
* coordinator no longer lists. A failed agent keeps its vertex (see
|
|
128
|
+
* failedAgentIssues), so a crash never makes the fleet look healthier.
|
|
129
|
+
* Returns the tracked agents that failed.
|
|
130
|
+
*/
|
|
131
|
+
private pruneCompletedAgents;
|
|
132
|
+
/** #1130: one issue per failed agent, task-scoped or long-lived. */
|
|
133
|
+
private failedAgentIssues;
|
|
134
|
+
private isTaskAgentVertex;
|
|
135
|
+
/**
|
|
136
|
+
* #1130: MinCut health with the fleet reading next to the raw one. The fleet
|
|
137
|
+
* reading drops task-scoped agents from a copy of the graph; the raw graph,
|
|
138
|
+
* its value and its alerts are unchanged.
|
|
139
|
+
*/
|
|
140
|
+
getFleetMinCutHealth(): FleetMinCutHealth;
|
|
103
141
|
/**
|
|
104
142
|
* Extend Queen health with MinCut metrics
|
|
105
143
|
*/
|
|
106
144
|
extendQueenHealth(baseHealth: QueenHealth): QueenHealth & {
|
|
107
|
-
minCut?:
|
|
145
|
+
minCut?: FleetMinCutHealth;
|
|
108
146
|
};
|
|
109
147
|
/**
|
|
110
148
|
* Extend Queen metrics with MinCut data
|
|
@@ -44,6 +44,13 @@ export class QueenMinCutBridge {
|
|
|
44
44
|
monitor;
|
|
45
45
|
persistence;
|
|
46
46
|
eventSubscriptions = [];
|
|
47
|
+
/**
|
|
48
|
+
* Agents with a vertex in the graph, from QueenAgentSpawned or from the
|
|
49
|
+
* coordinator when the graph was built. Pruned once they complete (#1130).
|
|
50
|
+
*/
|
|
51
|
+
spawnedAgentIds = new Set();
|
|
52
|
+
/** The subset spawned for a single task (#1130). */
|
|
53
|
+
taskAgentIds = new Set();
|
|
47
54
|
snapshotTimer = null;
|
|
48
55
|
initialized = false;
|
|
49
56
|
constructor(eventBus, agentCoordinator, config = {}) {
|
|
@@ -137,6 +144,8 @@ export class QueenMinCutBridge {
|
|
|
137
144
|
// Add agent vertices
|
|
138
145
|
for (const agent of agents) {
|
|
139
146
|
this.addAgentVertex(agent);
|
|
147
|
+
// #1130: tracked so a completed agent is pruned like a spawned one
|
|
148
|
+
this.spawnedAgentIds.add(agent.id);
|
|
140
149
|
}
|
|
141
150
|
// Add edges based on coordination patterns
|
|
142
151
|
this.buildCoordinationEdges(agents);
|
|
@@ -239,7 +248,10 @@ export class QueenMinCutBridge {
|
|
|
239
248
|
subscribeToEvents() {
|
|
240
249
|
// Agent spawned
|
|
241
250
|
const onAgentSpawned = async (event) => {
|
|
242
|
-
const { agentId, domain, type, capabilities } = event.payload;
|
|
251
|
+
const { agentId, domain, type, capabilities, taskId } = event.payload;
|
|
252
|
+
this.spawnedAgentIds.add(agentId);
|
|
253
|
+
if (taskId)
|
|
254
|
+
this.taskAgentIds.add(agentId);
|
|
243
255
|
// Cast to extended AgentInfo with optional properties
|
|
244
256
|
this.addAgentVertex({
|
|
245
257
|
id: agentId,
|
|
@@ -381,7 +393,9 @@ export class QueenMinCutBridge {
|
|
|
381
393
|
}
|
|
382
394
|
// Add issues for weak vertices
|
|
383
395
|
const weakVertices = this.monitor.getWeakVertices();
|
|
384
|
-
|
|
396
|
+
// #1130: a task-scoped agent is a leaf by design, not a weak point of the fleet
|
|
397
|
+
const fleetWeakVertices = weakVertices.filter(weak => !this.isTaskAgentVertex(weak.vertex.id));
|
|
398
|
+
for (const weak of fleetWeakVertices.slice(0, 3)) { // Top 3 weak vertices
|
|
385
399
|
if (weak.riskScore > 0.7) {
|
|
386
400
|
issues.push({
|
|
387
401
|
severity: 'high',
|
|
@@ -393,6 +407,66 @@ export class QueenMinCutBridge {
|
|
|
393
407
|
}
|
|
394
408
|
return issues;
|
|
395
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* #1130: nothing publishes QueenAgentTerminated, so a finished task agent
|
|
412
|
+
* stayed in the topology and kept the fleet degraded after its run. Drop the
|
|
413
|
+
* vertex of every tracked agent that completed normally or that the
|
|
414
|
+
* coordinator no longer lists. A failed agent keeps its vertex (see
|
|
415
|
+
* failedAgentIssues), so a crash never makes the fleet look healthier.
|
|
416
|
+
* Returns the tracked agents that failed.
|
|
417
|
+
*/
|
|
418
|
+
pruneCompletedAgents() {
|
|
419
|
+
if (this.spawnedAgentIds.size === 0)
|
|
420
|
+
return [];
|
|
421
|
+
const byId = new Map(this.agentCoordinator.listAgents().map(agent => [agent.id, agent]));
|
|
422
|
+
const failed = [];
|
|
423
|
+
for (const agentId of this.spawnedAgentIds) {
|
|
424
|
+
const agent = byId.get(agentId);
|
|
425
|
+
if (agent?.status === 'failed') {
|
|
426
|
+
failed.push(agent);
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
if (agent && agent.status !== 'completed')
|
|
430
|
+
continue;
|
|
431
|
+
this.graph.removeVertex(`agent:${agentId}`);
|
|
432
|
+
this.spawnedAgentIds.delete(agentId);
|
|
433
|
+
this.taskAgentIds.delete(agentId);
|
|
434
|
+
}
|
|
435
|
+
return failed;
|
|
436
|
+
}
|
|
437
|
+
/** #1130: one issue per failed agent, task-scoped or long-lived. */
|
|
438
|
+
failedAgentIssues(failed) {
|
|
439
|
+
return failed.map(agent => ({
|
|
440
|
+
severity: 'high',
|
|
441
|
+
message: `Agent ${agent.id} (${agent.type}) failed`,
|
|
442
|
+
timestamp: new Date(),
|
|
443
|
+
domain: agent.domain,
|
|
444
|
+
}));
|
|
445
|
+
}
|
|
446
|
+
isTaskAgentVertex(vertexId) {
|
|
447
|
+
return vertexId.startsWith('agent:') && this.taskAgentIds.has(vertexId.slice('agent:'.length));
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* #1130: MinCut health with the fleet reading next to the raw one. The fleet
|
|
451
|
+
* reading drops task-scoped agents from a copy of the graph; the raw graph,
|
|
452
|
+
* its value and its alerts are unchanged.
|
|
453
|
+
*/
|
|
454
|
+
getFleetMinCutHealth() {
|
|
455
|
+
const raw = this.getMinCutHealth();
|
|
456
|
+
if (this.taskAgentIds.size === 0) {
|
|
457
|
+
return { ...raw, fleetStatus: raw.status, fleetMinCutValue: raw.minCutValue, taskAgents: 0 };
|
|
458
|
+
}
|
|
459
|
+
const fleetGraph = this.graph.clone();
|
|
460
|
+
for (const agentId of this.taskAgentIds)
|
|
461
|
+
fleetGraph.removeVertex(`agent:${agentId}`);
|
|
462
|
+
const fleet = createMinCutHealthMonitor(fleetGraph, this.config).getHealth();
|
|
463
|
+
return {
|
|
464
|
+
...raw,
|
|
465
|
+
fleetStatus: fleet.status,
|
|
466
|
+
fleetMinCutValue: fleet.minCutValue,
|
|
467
|
+
taskAgents: this.taskAgentIds.size,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
396
470
|
/**
|
|
397
471
|
* Extend Queen health with MinCut metrics
|
|
398
472
|
*/
|
|
@@ -400,19 +474,22 @@ export class QueenMinCutBridge {
|
|
|
400
474
|
if (!this.config.includeInQueenHealth) {
|
|
401
475
|
return baseHealth;
|
|
402
476
|
}
|
|
403
|
-
const
|
|
404
|
-
const
|
|
477
|
+
const failedAgents = this.pruneCompletedAgents();
|
|
478
|
+
const minCutHealth = this.getFleetMinCutHealth();
|
|
479
|
+
// #1130: with only task-scoped agents the fleet topology is idle, and the
|
|
480
|
+
// raw alerts describe those agents, not the fleet.
|
|
481
|
+
const minCutIssues = minCutHealth.fleetStatus === 'idle' ? [] : this.getHealthIssuesFromMinCut();
|
|
405
482
|
// Issue #205 fix: Only degrade status for actual critical issues
|
|
406
483
|
// 'idle' status is normal for fresh installs - don't degrade health
|
|
407
484
|
let status = baseHealth.status;
|
|
408
|
-
if (minCutHealth.
|
|
485
|
+
if ((minCutHealth.fleetStatus === 'critical' || failedAgents.length > 0) && status === 'healthy') {
|
|
409
486
|
status = 'degraded';
|
|
410
487
|
}
|
|
411
488
|
// Note: 'idle' status does NOT trigger degradation - it's expected for fresh systems
|
|
412
489
|
return {
|
|
413
490
|
...baseHealth,
|
|
414
491
|
status,
|
|
415
|
-
issues: [...baseHealth.issues, ...minCutIssues],
|
|
492
|
+
issues: [...baseHealth.issues, ...this.failedAgentIssues(failedAgents), ...minCutIssues],
|
|
416
493
|
minCut: minCutHealth,
|
|
417
494
|
};
|
|
418
495
|
}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* deleted. A pattern used or re-scored since it was selected is left active.
|
|
15
15
|
* - The archive copy is read back before the active key is deleted, so a
|
|
16
16
|
* failed write never loses the pattern.
|
|
17
|
+
* The move is implemented in domains/learning-optimization/pattern-archive.ts.
|
|
17
18
|
*/
|
|
18
|
-
import type { MemoryBackend } from '../../kernel/interfaces.js';
|
|
19
19
|
import type { LearnedPattern } from '../../domains/learning-optimization/interfaces.js';
|
|
20
|
-
export type ArchiveOutcome
|
|
20
|
+
export { archiveSelectedPattern, type ArchiveOutcome } from '../../domains/learning-optimization/pattern-archive.js';
|
|
21
21
|
/** Counts of one consolidation run's archive step, for logs and results. */
|
|
22
22
|
export interface ArchiveCounts {
|
|
23
23
|
/** Patterns the retention and trim rules selected for removal. */
|
|
@@ -30,10 +30,6 @@ export interface ArchiveCounts {
|
|
|
30
30
|
failed: number;
|
|
31
31
|
}
|
|
32
32
|
export declare function emptyArchiveCounts(): ArchiveCounts;
|
|
33
|
-
/**
|
|
34
|
-
* Move one selected pattern to its archive key in the learning namespace.
|
|
35
|
-
*/
|
|
36
|
-
export declare function archiveSelectedPattern(memory: MemoryBackend, pattern: LearnedPattern, archivedAt?: Date): Promise<ArchiveOutcome>;
|
|
37
33
|
/** True when the pattern was created less than `graceDays` days ago. */
|
|
38
34
|
export declare function isWithinRetentionGrace(pattern: LearnedPattern, graceDays: number, now?: number): boolean;
|
|
39
35
|
//# sourceMappingURL=learning-consolidation-archive.d.ts.map
|