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
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
7
8
|
import { createTestExecutionCoordinator } from './coordinator.js';
|
|
8
9
|
import { getGlobalInfraHealing } from '../../strange-loop/infra-healing/global-instance.js';
|
|
9
10
|
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
@@ -60,11 +61,22 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
60
61
|
if (!this.coordinator) {
|
|
61
62
|
return err(new Error('Coordinator not initialized'));
|
|
62
63
|
}
|
|
64
|
+
// #1126: a runner executes the files it is given, so only files and
|
|
65
|
+
// directories (#909 Jest targets) inside the project, passed on as the
|
|
66
|
+
// real paths that were checked. A missing one is still reported by the
|
|
67
|
+
// runner.
|
|
68
|
+
let testFiles;
|
|
69
|
+
if (payload.testFiles !== undefined) {
|
|
70
|
+
const confined = await requirePayloadFiles('execute-tests', 'testFiles', payload.testFiles, { allowMissing: true, allowDirectory: true });
|
|
71
|
+
if (!confined.success)
|
|
72
|
+
return confined;
|
|
73
|
+
testFiles = confined.value;
|
|
74
|
+
}
|
|
63
75
|
// Support both simple and full request formats
|
|
64
|
-
if (
|
|
76
|
+
if (testFiles) {
|
|
65
77
|
// Simple request format
|
|
66
78
|
const request = {
|
|
67
|
-
testFiles
|
|
79
|
+
testFiles,
|
|
68
80
|
parallel: payload.parallel,
|
|
69
81
|
retryCount: payload.retryCount,
|
|
70
82
|
timeout: payload.timeout,
|
|
@@ -75,7 +87,7 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
75
87
|
else if (payload.framework) {
|
|
76
88
|
// Full request format
|
|
77
89
|
const request = {
|
|
78
|
-
testFiles:
|
|
90
|
+
testFiles: [],
|
|
79
91
|
framework: payload.framework,
|
|
80
92
|
timeout: payload.timeout,
|
|
81
93
|
env: payload.env,
|
|
@@ -96,8 +108,11 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
96
108
|
if (!testFiles) {
|
|
97
109
|
return err(new Error('Invalid detect-flaky payload: missing testFiles'));
|
|
98
110
|
}
|
|
111
|
+
const confined = await requirePayloadFiles('detect-flaky', 'testFiles', testFiles, { allowMissing: true, allowDirectory: true });
|
|
112
|
+
if (!confined.success)
|
|
113
|
+
return confined;
|
|
99
114
|
return this.coordinator.detectFlaky({
|
|
100
|
-
testFiles,
|
|
115
|
+
testFiles: confined.value,
|
|
101
116
|
runs: runs ?? 5,
|
|
102
117
|
threshold: threshold ?? 0.1,
|
|
103
118
|
});
|
|
@@ -15,6 +15,7 @@ import { getTestRunnerExecutionError } from '../../../shared/test-runner-verdict
|
|
|
15
15
|
import { createVitestJsonReport, needsVitestJsonReportFile } from '../../../shared/vitest-json-report.js';
|
|
16
16
|
import { isJestCommand, jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
17
17
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
18
|
+
import { redactFailureText } from './runner-test-cases.js';
|
|
18
19
|
const DEFAULT_FLAKY_CONFIG = {
|
|
19
20
|
simulateForTesting: false,
|
|
20
21
|
simulatedFlakinessRate: RETRY_CONSTANTS.DEFAULT_FLAKY_RATE,
|
|
@@ -132,7 +133,8 @@ export class FlakyDetectorService {
|
|
|
132
133
|
async recordExecution(testId, result) {
|
|
133
134
|
// Add to in-memory history
|
|
134
135
|
const history = this.testHistory.get(testId) ?? [];
|
|
135
|
-
history.
|
|
136
|
+
// #1122: test-history is persisted, so failure text is stored redacted.
|
|
137
|
+
history.push(result.error ? { ...result, error: redactFailureText(result.error) } : result);
|
|
136
138
|
// Keep only last 100 executions
|
|
137
139
|
if (history.length > 100) {
|
|
138
140
|
history.shift();
|
|
@@ -336,7 +338,7 @@ export class FlakyDetectorService {
|
|
|
336
338
|
runId,
|
|
337
339
|
passed: code === 0,
|
|
338
340
|
duration,
|
|
339
|
-
error: code !== 0 ? stderr || `Exit code: ${code}` : undefined,
|
|
341
|
+
error: code !== 0 ? redactFailureText(stderr || `Exit code: ${code}`) : undefined,
|
|
340
342
|
timestamp: new Date(),
|
|
341
343
|
context: {
|
|
342
344
|
parallelRuns: 1,
|
|
@@ -365,7 +367,7 @@ export class FlakyDetectorService {
|
|
|
365
367
|
passed: code === 0,
|
|
366
368
|
duration,
|
|
367
369
|
error: code !== 0
|
|
368
|
-
? stderr || `Exit code: ${code}, Parse error: ${parseError}`
|
|
370
|
+
? redactFailureText(stderr || `Exit code: ${code}, Parse error: ${parseError}`)
|
|
369
371
|
: undefined,
|
|
370
372
|
timestamp: new Date(),
|
|
371
373
|
context: {
|
|
@@ -479,8 +481,8 @@ export class FlakyDetectorService {
|
|
|
479
481
|
runId,
|
|
480
482
|
passed: test.status === 'passed',
|
|
481
483
|
duration: test.duration || 0,
|
|
482
|
-
error: test.status === 'failed'
|
|
483
|
-
? test.failureMessages
|
|
484
|
+
error: test.status === 'failed' && test.failureMessages
|
|
485
|
+
? redactFailureText(test.failureMessages.join('\n'))
|
|
484
486
|
: undefined,
|
|
485
487
|
timestamp: new Date(),
|
|
486
488
|
context: {
|
|
@@ -505,8 +507,8 @@ export class FlakyDetectorService {
|
|
|
505
507
|
runId,
|
|
506
508
|
passed: assertion.status === 'passed',
|
|
507
509
|
duration: assertion.duration || 0,
|
|
508
|
-
error: assertion.status === 'failed'
|
|
509
|
-
? assertion.failureMessages
|
|
510
|
+
error: assertion.status === 'failed' && assertion.failureMessages
|
|
511
|
+
? redactFailureText(assertion.failureMessages.join('\n'))
|
|
510
512
|
: undefined,
|
|
511
513
|
timestamp: new Date(),
|
|
512
514
|
context: {
|
|
@@ -14,6 +14,7 @@ import { toError } from '../../../shared/error-utils.js';
|
|
|
14
14
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
15
15
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
16
16
|
import { terminateTestRunner, trackTestRunnerExit } from '../../../shared/test-runner-process.js';
|
|
17
|
+
import { redactFailureText } from './runner-test-cases.js';
|
|
17
18
|
/**
|
|
18
19
|
* Whether a runner-reported test file and the requested target are the same
|
|
19
20
|
* file. Runners report real paths, so a target given through a symlink must be
|
|
@@ -104,6 +105,8 @@ export class RetryHandlerService {
|
|
|
104
105
|
const nowPassing = [];
|
|
105
106
|
const stillFailing = [];
|
|
106
107
|
const flakyDetected = [];
|
|
108
|
+
const unmatched = [];
|
|
109
|
+
const tests = [];
|
|
107
110
|
for (const test of failedTests) {
|
|
108
111
|
const result = await this.retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry);
|
|
109
112
|
stats.totalRetries += result.attempts;
|
|
@@ -118,11 +121,18 @@ export class RetryHandlerService {
|
|
|
118
121
|
else {
|
|
119
122
|
stillFailing.push(test.testId);
|
|
120
123
|
stats.failed++;
|
|
124
|
+
if (result.unmatched)
|
|
125
|
+
unmatched.push(test.testId);
|
|
121
126
|
}
|
|
127
|
+
tests.push({
|
|
128
|
+
testId: test.testId, attempts: result.attempts, passed: result.passed,
|
|
129
|
+
...(result.unmatched ? { unmatched: true } : {}),
|
|
130
|
+
});
|
|
122
131
|
// Record retry history
|
|
123
132
|
await this.recordRetry(test.testId, result);
|
|
124
133
|
}
|
|
125
134
|
stats.flakyDetected = flakyDetected;
|
|
135
|
+
stats.unmatched = unmatched;
|
|
126
136
|
stats.endTime = Date.now();
|
|
127
137
|
this.runStats.set(runId, stats);
|
|
128
138
|
// Persist stats
|
|
@@ -136,6 +146,8 @@ export class RetryHandlerService {
|
|
|
136
146
|
nowPassing: nowPassing.length,
|
|
137
147
|
stillFailing: stillFailing.length,
|
|
138
148
|
flakyDetected,
|
|
149
|
+
unmatched,
|
|
150
|
+
tests,
|
|
139
151
|
};
|
|
140
152
|
return ok(retryResult);
|
|
141
153
|
}
|
|
@@ -218,7 +230,8 @@ export class RetryHandlerService {
|
|
|
218
230
|
}
|
|
219
231
|
async retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry) {
|
|
220
232
|
let attempts = 0;
|
|
221
|
-
|
|
233
|
+
// #1122: the final error is persisted in retry-history, so keep it redacted.
|
|
234
|
+
let lastError = redactFailureText(test.error);
|
|
222
235
|
while (attempts < maxRetries) {
|
|
223
236
|
// Check if should retry
|
|
224
237
|
const shouldRetry = await this.shouldRetry(test.testId, attempts, lastError);
|
|
@@ -232,9 +245,16 @@ export class RetryHandlerService {
|
|
|
232
245
|
if (onRetry) {
|
|
233
246
|
onRetry(test.testId, attempts + 1);
|
|
234
247
|
}
|
|
235
|
-
attempts++;
|
|
236
248
|
// Execute test (simulated - in real implementation, would run actual test)
|
|
237
249
|
const result = await this.executeTest(test);
|
|
250
|
+
// #1141: a filter that selected no test reran nothing. Report that
|
|
251
|
+
// instead of counting it as a retry, and stop: another attempt would
|
|
252
|
+
// select nothing again.
|
|
253
|
+
if (result.unmatched) {
|
|
254
|
+
logger.warn(`Retry of "${test.testName}" matched no test in ${test.file}; nothing was rerun.`);
|
|
255
|
+
return { testId: test.testId, passed: false, attempts, finalError: lastError, unmatched: true };
|
|
256
|
+
}
|
|
257
|
+
attempts++;
|
|
238
258
|
if (result.passed) {
|
|
239
259
|
return {
|
|
240
260
|
testId: test.testId,
|
|
@@ -243,7 +263,7 @@ export class RetryHandlerService {
|
|
|
243
263
|
finalError: undefined,
|
|
244
264
|
};
|
|
245
265
|
}
|
|
246
|
-
lastError = result.error
|
|
266
|
+
lastError = result.error !== undefined ? redactFailureText(result.error) : lastError;
|
|
247
267
|
}
|
|
248
268
|
return {
|
|
249
269
|
testId: test.testId,
|
|
@@ -477,9 +497,16 @@ export class RetryHandlerService {
|
|
|
477
497
|
const result = safeJsonParse(vitestMatch[0]);
|
|
478
498
|
// Vitest's positional file filter uses prefix matching. A passing
|
|
479
499
|
// sibling must not clear a failure in the requested file (#972).
|
|
480
|
-
const
|
|
481
|
-
&& sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd())
|
|
482
|
-
&& file.assertionResults?.some(assertion => assertion.status ===
|
|
500
|
+
const targetHas = (status) => result.testResults?.some((file) => typeof file.name === 'string'
|
|
501
|
+
&& (!targetFile || sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd()))
|
|
502
|
+
&& file.assertionResults?.some(assertion => assertion.status === status)) === true;
|
|
503
|
+
const targetPassed = !targetFile || targetHas('passed');
|
|
504
|
+
const nothingRan = targetFile
|
|
505
|
+
? Array.isArray(result.testResults) && !targetPassed && !targetHas('failed')
|
|
506
|
+
: result.numPassedTests === 0;
|
|
507
|
+
if (nothingRan && result.numFailedTests === 0 && result.numFailedTestSuites === 0) {
|
|
508
|
+
return UNMATCHED;
|
|
509
|
+
}
|
|
483
510
|
if (exitCode === 0 && result.success !== false
|
|
484
511
|
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0
|
|
485
512
|
&& Number.isFinite(result.numPassedTests) && result.numPassedTests > 0
|
|
@@ -501,6 +528,10 @@ export class RetryHandlerService {
|
|
|
501
528
|
const jestMatch = stdout.match(/\{[\s\S]*"numFailedTests"[\s\S]*\}/);
|
|
502
529
|
if (jestMatch) {
|
|
503
530
|
const result = safeJsonParse(jestMatch[0]);
|
|
531
|
+
if (result.numPassedTests === 0 && result.numFailedTests === 0
|
|
532
|
+
&& result.numFailedTestSuites === 0) {
|
|
533
|
+
return UNMATCHED;
|
|
534
|
+
}
|
|
504
535
|
if (exitCode === 0 && result.success !== false
|
|
505
536
|
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0
|
|
506
537
|
&& Number.isFinite(result.numPassedTests) && result.numPassedTests > 0) {
|
|
@@ -517,6 +548,8 @@ export class RetryHandlerService {
|
|
|
517
548
|
const mochaMatch = stdout.match(/\{[\s\S]*"stats"[\s\S]*"failures"[\s\S]*\}/);
|
|
518
549
|
if (mochaMatch) {
|
|
519
550
|
const result = safeJsonParse(mochaMatch[0]);
|
|
551
|
+
if (result.stats?.passes === 0 && result.stats?.failures === 0)
|
|
552
|
+
return UNMATCHED;
|
|
520
553
|
if (exitCode === 0 && result.stats?.failures === 0
|
|
521
554
|
&& Number.isFinite(result.stats?.passes) && result.stats.passes > 0) {
|
|
522
555
|
return { passed: true };
|
|
@@ -538,7 +571,7 @@ export class RetryHandlerService {
|
|
|
538
571
|
const errorOutput = stderr || stdout || `Test failed with exit code ${exitCode}`;
|
|
539
572
|
return {
|
|
540
573
|
passed: false,
|
|
541
|
-
error: errorOutput.substring(0, 1000), // Truncate long error messages
|
|
574
|
+
error: redactFailureText(errorOutput).substring(0, 1000), // Truncate long error messages
|
|
542
575
|
};
|
|
543
576
|
}
|
|
544
577
|
calculateDelay(attempt, backoff, baseDelay, maxDelay) {
|
|
@@ -573,6 +606,7 @@ export class RetryHandlerService {
|
|
|
573
606
|
attempts: result.attempts,
|
|
574
607
|
passed: result.passed,
|
|
575
608
|
error: result.finalError,
|
|
609
|
+
...(result.unmatched ? { unmatched: true } : {}),
|
|
576
610
|
timestamp: new Date(),
|
|
577
611
|
});
|
|
578
612
|
// Keep last 50 entries
|
|
@@ -616,4 +650,9 @@ export class RetryHandlerService {
|
|
|
616
650
|
};
|
|
617
651
|
}
|
|
618
652
|
}
|
|
653
|
+
const UNMATCHED = {
|
|
654
|
+
passed: false,
|
|
655
|
+
unmatched: true,
|
|
656
|
+
error: 'The retry filter matched no test, so nothing was rerun.',
|
|
657
|
+
};
|
|
619
658
|
//# sourceMappingURL=retry-handler.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1170: a run's final outcome after its failed tests were retried.
|
|
3
|
+
*
|
|
4
|
+
* A test that failed and then passed on a retry is passed, and flaky: it
|
|
5
|
+
* leaves `failed`/`failedTests`, its runner test case reads `passed` with
|
|
6
|
+
* `flaky: true`, and the run counts it in `flaky`. A test whose retries all
|
|
7
|
+
* failed, or whose retry matched no test, stays failed.
|
|
8
|
+
*/
|
|
9
|
+
import type { IRetryResult, ITestRunResult } from '../interfaces';
|
|
10
|
+
/**
|
|
11
|
+
* Default retries of a failed test, shared by `aqe test execute` and MCP
|
|
12
|
+
* `test_execute_parallel` so both surfaces rerun a failure the same number of
|
|
13
|
+
* times (#1170).
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_TEST_RETRY_COUNT = 2;
|
|
16
|
+
/** Attach the retry outcome to `run` and move tests that passed on retry from failed to passed. */
|
|
17
|
+
export declare function applyRetryOutcome(run: ITestRunResult, retried: IRetryResult): void;
|
|
18
|
+
//# sourceMappingURL=retry-outcome.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1170: a run's final outcome after its failed tests were retried.
|
|
3
|
+
*
|
|
4
|
+
* A test that failed and then passed on a retry is passed, and flaky: it
|
|
5
|
+
* leaves `failed`/`failedTests`, its runner test case reads `passed` with
|
|
6
|
+
* `flaky: true`, and the run counts it in `flaky`. A test whose retries all
|
|
7
|
+
* failed, or whose retry matched no test, stays failed.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Default retries of a failed test, shared by `aqe test execute` and MCP
|
|
11
|
+
* `test_execute_parallel` so both surfaces rerun a failure the same number of
|
|
12
|
+
* times (#1170).
|
|
13
|
+
*/
|
|
14
|
+
export const DEFAULT_TEST_RETRY_COUNT = 2;
|
|
15
|
+
/** Attach the retry outcome to `run` and move tests that passed on retry from failed to passed. */
|
|
16
|
+
export function applyRetryOutcome(run, retried) {
|
|
17
|
+
const byId = new Map(run.failedTests.map(t => [t.testId, t]));
|
|
18
|
+
const outcomes = retried.tests ?? [];
|
|
19
|
+
const summary = {
|
|
20
|
+
totalRetries: retried.retried,
|
|
21
|
+
nowPassing: retried.nowPassing,
|
|
22
|
+
stillFailing: retried.stillFailing,
|
|
23
|
+
tests: outcomes.map(({ testId, ...outcome }) => ({
|
|
24
|
+
name: byId.get(testId)?.testName ?? testId,
|
|
25
|
+
file: byId.get(testId)?.file ?? '',
|
|
26
|
+
...outcome,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
run.retries = summary;
|
|
30
|
+
const passedOnRetry = new Set(outcomes.filter(o => o.passed && !o.unmatched).map(o => o.testId));
|
|
31
|
+
const recovered = run.failedTests.filter(t => passedOnRetry.has(t.testId));
|
|
32
|
+
if (recovered.length === 0)
|
|
33
|
+
return;
|
|
34
|
+
run.failedTests = run.failedTests.filter(t => !passedOnRetry.has(t.testId));
|
|
35
|
+
run.failed = Math.max(0, run.failed - recovered.length);
|
|
36
|
+
run.passed += recovered.length;
|
|
37
|
+
run.flaky = (run.flaky ?? 0) + recovered.length;
|
|
38
|
+
if (run.failed === 0 && run.status === 'failed')
|
|
39
|
+
run.status = 'passed';
|
|
40
|
+
if (run.testCases) {
|
|
41
|
+
const pending = [...recovered];
|
|
42
|
+
run.testCases = run.testCases.map(testCase => {
|
|
43
|
+
if (testCase.status !== 'failed')
|
|
44
|
+
return testCase;
|
|
45
|
+
const index = pending.findIndex(t => t.testName === testCase.name && t.file === testCase.file);
|
|
46
|
+
if (index < 0)
|
|
47
|
+
return testCase;
|
|
48
|
+
pending.splice(index, 1);
|
|
49
|
+
return { ...testCase, status: 'passed', flaky: true };
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=retry-outcome.js.map
|
|
@@ -6,6 +6,17 @@
|
|
|
6
6
|
* derived from aggregate counts.
|
|
7
7
|
*/
|
|
8
8
|
import type { ITestCaseResult } from '../interfaces';
|
|
9
|
+
/**
|
|
10
|
+
* #1122: failure text goes back over MCP and into saved results, so
|
|
11
|
+
* credential-shaped values (e.g. a connection string) are redacted first.
|
|
12
|
+
* The text is not shortened here; callers apply their own caps.
|
|
13
|
+
*/
|
|
14
|
+
export declare function redactFailureText(text: string): string;
|
|
15
|
+
/** Failed tests with `error` and `stack` redacted (#1122). */
|
|
16
|
+
export declare function redactFailedTests<T extends {
|
|
17
|
+
error: string;
|
|
18
|
+
stack?: string;
|
|
19
|
+
}>(tests: T[]): T[];
|
|
9
20
|
/**
|
|
10
21
|
* Test cases listed in a runner JSON report, or undefined when the report
|
|
11
22
|
* has no per-test entries.
|
|
@@ -5,19 +5,37 @@
|
|
|
5
5
|
* test case with the runner's own name, status and duration; nothing is
|
|
6
6
|
* derived from aggregate counts.
|
|
7
7
|
*/
|
|
8
|
+
import { redactLogText } from '../../../logging/redaction.js';
|
|
8
9
|
const SKIPPED_STATUSES = new Set(['skipped', 'pending', 'todo']);
|
|
9
10
|
/** Upper bound on a reported failure message, so one stack cannot swamp the output. */
|
|
10
11
|
const MAX_FAILURE_MESSAGE_LENGTH = 4000;
|
|
11
12
|
function failureMessageOf(assertion) {
|
|
12
13
|
if (!Array.isArray(assertion.failureMessages))
|
|
13
14
|
return undefined;
|
|
14
|
-
const
|
|
15
|
-
if (!
|
|
15
|
+
const joined = assertion.failureMessages.filter((m) => typeof m === 'string').join('\n').trim();
|
|
16
|
+
if (!joined)
|
|
16
17
|
return undefined;
|
|
18
|
+
const message = redactFailureText(joined);
|
|
17
19
|
return message.length > MAX_FAILURE_MESSAGE_LENGTH
|
|
18
20
|
? `${message.slice(0, MAX_FAILURE_MESSAGE_LENGTH)}… [truncated]`
|
|
19
21
|
: message;
|
|
20
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* #1122: failure text goes back over MCP and into saved results, so
|
|
25
|
+
* credential-shaped values (e.g. a connection string) are redacted first.
|
|
26
|
+
* The text is not shortened here; callers apply their own caps.
|
|
27
|
+
*/
|
|
28
|
+
export function redactFailureText(text) {
|
|
29
|
+
return redactLogText(text, Number.POSITIVE_INFINITY);
|
|
30
|
+
}
|
|
31
|
+
/** Failed tests with `error` and `stack` redacted (#1122). */
|
|
32
|
+
export function redactFailedTests(tests) {
|
|
33
|
+
return tests.map(test => ({
|
|
34
|
+
...test,
|
|
35
|
+
error: redactFailureText(test.error),
|
|
36
|
+
...(typeof test.stack === 'string' ? { stack: redactFailureText(test.stack) } : {}),
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
21
39
|
function toStatus(status) {
|
|
22
40
|
if (status === 'passed' || status === 'failed')
|
|
23
41
|
return status;
|
|
@@ -17,8 +17,8 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
|
|
|
17
17
|
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
18
18
|
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
19
19
|
import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
|
|
20
|
-
import { mergeTestCases, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
21
|
-
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
20
|
+
import { mergeTestCases, redactFailedTests, redactFailureText, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
21
|
+
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
22
22
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
23
23
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
24
24
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
@@ -76,7 +76,7 @@ export class TestExecutorService {
|
|
|
76
76
|
failed: results.failed,
|
|
77
77
|
skipped: results.skipped,
|
|
78
78
|
duration,
|
|
79
|
-
failedTests: results.failedTests,
|
|
79
|
+
failedTests: redactFailedTests(results.failedTests),
|
|
80
80
|
...(results.testCases ? { testCases: results.testCases } : {}),
|
|
81
81
|
coverage: results.coverage,
|
|
82
82
|
fileCoverages: results.fileCoverages,
|
|
@@ -132,7 +132,7 @@ export class TestExecutorService {
|
|
|
132
132
|
failed: aggregated.failed,
|
|
133
133
|
skipped: aggregated.skipped,
|
|
134
134
|
duration,
|
|
135
|
-
failedTests: aggregated.failedTests,
|
|
135
|
+
failedTests: redactFailedTests(aggregated.failedTests),
|
|
136
136
|
...(aggregated.testCases ? { testCases: aggregated.testCases } : {}),
|
|
137
137
|
coverage: aggregated.coverage,
|
|
138
138
|
fileCoverages: aggregated.fileCoverages,
|
|
@@ -260,7 +260,7 @@ export class TestExecutorService {
|
|
|
260
260
|
if (!this.isLLMAnalysisAvailable() || failures.length === 0)
|
|
261
261
|
return null;
|
|
262
262
|
try {
|
|
263
|
-
const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error
|
|
263
|
+
const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error ? redactFailureText(f.error).substring(0, 200) : 'Unknown error'}`).join('\n');
|
|
264
264
|
const response = await this.llmRouter.chat({
|
|
265
265
|
model: this.getModelForTier(this.config.llmModelTier),
|
|
266
266
|
messages: [{
|
|
@@ -624,7 +624,7 @@ Provide:
|
|
|
624
624
|
}
|
|
625
625
|
catch (error) {
|
|
626
626
|
return err(new Error(`Failed to parse test output for ${file}: ${toErrorMessage(error)}\n` +
|
|
627
|
-
`stdout: ${stdout
|
|
627
|
+
`stdout: ${capDiagnostics(stdout, 500)}\nstderr: ${capDiagnostics(stderr, 500)}`));
|
|
628
628
|
}
|
|
629
629
|
}
|
|
630
630
|
/**
|
|
@@ -880,7 +880,7 @@ Provide:
|
|
|
880
880
|
];
|
|
881
881
|
for (const indicator of errorMessages) {
|
|
882
882
|
if (combinedOutput.includes(indicator)) {
|
|
883
|
-
return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${combinedOutput
|
|
883
|
+
return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${capDiagnostics(combinedOutput, 1000)}`));
|
|
884
884
|
}
|
|
885
885
|
}
|
|
886
886
|
}
|
|
@@ -894,7 +894,7 @@ Provide:
|
|
|
894
894
|
}
|
|
895
895
|
// Could not parse output - return error with details
|
|
896
896
|
return err(new Error(`Unable to parse test results for ${file}. Exit code: ${exitCode}\n` +
|
|
897
|
-
`Output: ${combinedOutput
|
|
897
|
+
`Output: ${capDiagnostics(combinedOutput, 500)}`));
|
|
898
898
|
}
|
|
899
899
|
/**
|
|
900
900
|
* Create generic failure entries when we know tests failed but can't parse details
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { LoggerFactory } from '../../logging/index.js';
|
|
11
11
|
import { v4 as uuidv4 } from 'uuid';
|
|
12
|
-
import {
|
|
12
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
13
13
|
import { ok, err, } from '../../shared/types/index.js';
|
|
14
14
|
import { toError } from '../../shared/error-utils.js';
|
|
15
15
|
// Opt-in free-tier local test generation (cross-pollination plan 06, D7-wire/D8/D9).
|
|
@@ -425,7 +425,7 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
|
|
|
425
425
|
return null;
|
|
426
426
|
let code = '';
|
|
427
427
|
try {
|
|
428
|
-
code = await
|
|
428
|
+
code = await readConfinedText(src, { outsideRoot: 'allow' }); // #1161
|
|
429
429
|
}
|
|
430
430
|
catch {
|
|
431
431
|
return null; // unreadable → fall back
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
7
8
|
import { TestGenerationCoordinator, } from './coordinator.js';
|
|
8
9
|
// D9: live routing-feedback so free-tier outcomes lift routing confidence.
|
|
9
10
|
import { RoutingFeedbackCollector } from '../../routing/routing-feedback.js';
|
|
@@ -73,12 +74,16 @@ export class TestGenerationPlugin extends BaseDomainPlugin {
|
|
|
73
74
|
if (!this.coordinator) {
|
|
74
75
|
return err(new Error('Coordinator not initialized'));
|
|
75
76
|
}
|
|
76
|
-
const sourceFiles = payload.sourceFiles;
|
|
77
77
|
const testType = payload.testType;
|
|
78
78
|
const framework = payload.framework;
|
|
79
|
-
if (!sourceFiles || sourceFiles.length === 0) {
|
|
79
|
+
if (!Array.isArray(payload.sourceFiles) || payload.sourceFiles.length === 0) {
|
|
80
80
|
return err(new Error('Invalid generate-tests payload: missing sourceFiles'));
|
|
81
81
|
}
|
|
82
|
+
// #1126: the generator reads each file whole, so only project files.
|
|
83
|
+
const confined = await requirePayloadFiles('generate-tests', 'sourceFiles', payload.sourceFiles, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
84
|
+
if (!confined.success)
|
|
85
|
+
return confined;
|
|
86
|
+
const sourceFiles = confined.value;
|
|
82
87
|
const request = {
|
|
83
88
|
sourceFiles,
|
|
84
89
|
testType: testType ?? 'unit',
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { v4 as uuidv4 } from 'uuid';
|
|
9
9
|
import ts from 'typescript';
|
|
10
|
-
import
|
|
10
|
+
import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
|
|
11
11
|
import * as path from 'path';
|
|
12
12
|
import { ok, err } from '../../../shared/types/index.js';
|
|
13
13
|
import { NomicEmbedder, EMBEDDING_CONFIG } from '../../../shared/embeddings/index.js';
|
|
@@ -45,7 +45,7 @@ export class PatternMatcherService {
|
|
|
45
45
|
// Read file content
|
|
46
46
|
let content;
|
|
47
47
|
try {
|
|
48
|
-
content =
|
|
48
|
+
content = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
|
|
49
49
|
}
|
|
50
50
|
catch {
|
|
51
51
|
return err(new Error(`Cannot read file: ${filePath}`));
|
|
@@ -737,7 +737,7 @@ export class PatternMatcherService {
|
|
|
737
737
|
// Read the file content
|
|
738
738
|
let content;
|
|
739
739
|
try {
|
|
740
|
-
content =
|
|
740
|
+
content = readConfinedTextSync(file, { outsideRoot: 'allow' }); // #1161
|
|
741
741
|
}
|
|
742
742
|
catch {
|
|
743
743
|
// File doesn't exist or can't be read, return empty
|
|
@@ -1068,7 +1068,7 @@ class TypeScriptASTParser {
|
|
|
1068
1068
|
this.sourceCode = content;
|
|
1069
1069
|
}
|
|
1070
1070
|
else {
|
|
1071
|
-
this.sourceCode =
|
|
1071
|
+
this.sourceCode = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
|
|
1072
1072
|
}
|
|
1073
1073
|
this.sourceFile = ts.createSourceFile(path.basename(filePath), this.sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
1074
1074
|
return this.sourceFile;
|
|
@@ -230,7 +230,9 @@ export class TestDataGeneratorService {
|
|
|
230
230
|
const parts = methodPath.split('.');
|
|
231
231
|
let result = f;
|
|
232
232
|
for (const part of parts) {
|
|
233
|
-
|
|
233
|
+
// #1136: a member every object inherits (`constructor`, `toString`)
|
|
234
|
+
// is not a faker method.
|
|
235
|
+
if (result && typeof result === 'object' && part in result && !(part in Object.prototype)) {
|
|
234
236
|
const next = result[part];
|
|
235
237
|
if (typeof next === 'function') {
|
|
236
238
|
result = next();
|
|
@@ -10,7 +10,7 @@ import { generateBehaviorExamples } from './behavior-examples.js';
|
|
|
10
10
|
import { validateBehaviorExamples } from './behavior-example-validation.js';
|
|
11
11
|
import { LoggerFactory } from '../../../logging/index.js';
|
|
12
12
|
import { v4 as uuidv4 } from 'uuid';
|
|
13
|
-
import
|
|
13
|
+
import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import ts from 'typescript';
|
|
16
16
|
import { ok, err } from '../../../shared/types/index.js';
|
|
@@ -445,7 +445,7 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
445
445
|
let codeAnalysis = null;
|
|
446
446
|
let sourceContent = '';
|
|
447
447
|
try {
|
|
448
|
-
sourceContent =
|
|
448
|
+
sourceContent = readConfinedTextSync(sourceFile, { outsideRoot: 'allow' }); // #1161
|
|
449
449
|
codeAnalysis = await this.analyzeSourceCode(sourceContent, sourceFile);
|
|
450
450
|
}
|
|
451
451
|
catch {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { governanceFlags } from './feature-flags.js';
|
|
20
20
|
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
21
21
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
22
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
22
23
|
// ============================================================================
|
|
23
24
|
// Feature Flag Helpers
|
|
24
25
|
// ============================================================================
|
|
@@ -799,7 +800,8 @@ export class EvolutionPipelineIntegration {
|
|
|
799
800
|
* Group array by key function
|
|
800
801
|
*/
|
|
801
802
|
groupBy(array, keyFn) {
|
|
802
|
-
|
|
803
|
+
// #1157: keys come from recorded rule applications.
|
|
804
|
+
const groups = createSafeRecord();
|
|
803
805
|
for (const item of array) {
|
|
804
806
|
const key = keyFn(item);
|
|
805
807
|
if (!groups[key]) {
|
|
@@ -12,6 +12,7 @@ import { join } from 'path';
|
|
|
12
12
|
import { parse as parseYaml } from 'yaml';
|
|
13
13
|
import { getCrossPhaseMemory, } from '../memory/cross-phase-memory.js';
|
|
14
14
|
import { captureHooksConfigSnapshot, validateHookUrl, classifyHookExit, } from './security/index.js';
|
|
15
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
15
16
|
// =============================================================================
|
|
16
17
|
// Hook Executor
|
|
17
18
|
// =============================================================================
|
|
@@ -79,7 +80,8 @@ export class CrossPhaseHookExecutor {
|
|
|
79
80
|
// IMP-07: Runtime kill-switch check
|
|
80
81
|
if (process.env.AQE_HOOKS_DISABLED === 'true')
|
|
81
82
|
return {};
|
|
82
|
-
|
|
83
|
+
// #1157: agent names come from the hooks YAML file.
|
|
84
|
+
const injectedSignals = createSafeRecord();
|
|
83
85
|
const matchingHooks = this.filterManagedHooks(Object.entries(this.config.hooks).filter(([_, hook]) => hook.trigger.event === 'phase-start' &&
|
|
84
86
|
hook.trigger.phase === phaseName));
|
|
85
87
|
for (const [hookName, hook] of matchingHooks) {
|
|
@@ -332,7 +334,8 @@ export class CrossPhaseHookExecutor {
|
|
|
332
334
|
}
|
|
333
335
|
getValueFromPath(obj, path) {
|
|
334
336
|
return path.split('.').reduce((curr, key) => {
|
|
335
|
-
|
|
337
|
+
// #1136: own properties only.
|
|
338
|
+
if (curr && typeof curr === 'object' && Object.hasOwn(curr, key)) {
|
|
336
339
|
return curr[key];
|
|
337
340
|
}
|
|
338
341
|
return undefined;
|