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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run git without blocking the event loop (#1115).
|
|
3
|
+
*
|
|
4
|
+
* Git runs in its own process group, so a timeout stops it together with any
|
|
5
|
+
* wrapper, credential helper or fsmonitor child it started.
|
|
6
|
+
*/
|
|
7
|
+
import { runProcessText } from '../test-runner-process.js';
|
|
8
|
+
/** Git did not finish before its deadline; its result is unknown, not empty. */
|
|
9
|
+
export class GitTimeoutError extends Error {
|
|
10
|
+
constructor(args, timeoutMs) {
|
|
11
|
+
super(`git ${args.join(' ')} timed out after ${Math.max(0, timeoutMs)}ms`);
|
|
12
|
+
this.name = 'GitTimeoutError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve with git's stdout. Rejects with GitTimeoutError when the deadline
|
|
17
|
+
* passes, and with a plain Error when git cannot start or exits non-zero.
|
|
18
|
+
*/
|
|
19
|
+
export async function runGit(args, options) {
|
|
20
|
+
if (options.timeout <= 0)
|
|
21
|
+
throw new GitTimeoutError(args, options.timeout);
|
|
22
|
+
try {
|
|
23
|
+
return await runProcessText('git', args, {
|
|
24
|
+
cwd: options.cwd,
|
|
25
|
+
timeout: options.timeout,
|
|
26
|
+
maxBuffer: options.maxBuffer,
|
|
27
|
+
// Never wait for a credential prompt that no one can answer.
|
|
28
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error.code === 'ETIMEDOUT')
|
|
33
|
+
throw new GitTimeoutError(args, options.timeout);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=git-process.js.map
|
|
@@ -4,4 +4,5 @@
|
|
|
4
4
|
export { GitAnalyzer } from './git-analyzer';
|
|
5
5
|
export type { GitAnalyzerConfig, GitCommit, GitBlameInfo, FileHistory, } from './git-analyzer';
|
|
6
6
|
export { assertSafeGitRef, getGitRefError } from './ref-validation';
|
|
7
|
+
export { GitTimeoutError } from './git-process';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/shared/git/index.js
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1161: read a file inside the project root without a check-then-use race.
|
|
3
|
+
*
|
|
4
|
+
* The payload path guard (#1126) checks a path by name and the handler opens
|
|
5
|
+
* it again later, so a file or symlink swapped in between could be read
|
|
6
|
+
* unchecked. These readers OPEN first and validate what was opened:
|
|
7
|
+
*
|
|
8
|
+
* - the path's realpath is opened with O_NOFOLLOW (a symlink swapped onto the
|
|
9
|
+
* final name fails the open) and O_NONBLOCK (a FIFO cannot hang the open);
|
|
10
|
+
* - the descriptor must be a regular file within the size limit (fstat);
|
|
11
|
+
* - the descriptor's real location (/proc/self/fd/N on Linux; elsewhere the
|
|
12
|
+
* re-resolved realpath, which must be the same inode) must lie inside the
|
|
13
|
+
* project root, so a directory component swapped for a symlink is caught;
|
|
14
|
+
* - the content is read from that same descriptor, and never past the limit,
|
|
15
|
+
* even if the file grows after the fstat.
|
|
16
|
+
*
|
|
17
|
+
* A path spelled outside the root is refused before any filesystem call,
|
|
18
|
+
* unless the caller opts into `outsideRoot: 'allow'` for paths it accepts
|
|
19
|
+
* from a trusted source (the other checks still apply).
|
|
20
|
+
*/
|
|
21
|
+
import { type Stats } from 'node:fs';
|
|
22
|
+
import { CallerInputError } from '../error-utils.js';
|
|
23
|
+
/** Default upper bound for a confined read when the caller names none. */
|
|
24
|
+
export declare const DEFAULT_MAX_CONFINED_READ_BYTES: number;
|
|
25
|
+
export type ConfinedReadReason = 'not-found' | 'not-a-file' | 'outside-project-root' | 'unreadable' | 'too-large';
|
|
26
|
+
export interface ConfinedReadOptions {
|
|
27
|
+
/** Project root; defaults to findProjectRoot(). */
|
|
28
|
+
projectRoot?: string;
|
|
29
|
+
/** Refuse files larger than this; defaults to DEFAULT_MAX_CONFINED_READ_BYTES. */
|
|
30
|
+
maxBytes?: number;
|
|
31
|
+
/**
|
|
32
|
+
* A path spelled outside the project root is refused ('refuse', default),
|
|
33
|
+
* or read without the containment check ('allow') when the caller already
|
|
34
|
+
* trusts it. Paths spelled inside the root are always held to the root.
|
|
35
|
+
*/
|
|
36
|
+
outsideRoot?: 'refuse' | 'allow';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A confined read that was refused; `reason` matches the payload guard's.
|
|
40
|
+
* `code` is the errno code when the filesystem gave one (ENOENT, ELOOP, ...),
|
|
41
|
+
* otherwise the reason in errno style (OUTSIDE_PROJECT_ROOT, NOT_A_FILE,
|
|
42
|
+
* TOO_LARGE), so callers that report error codes keep working.
|
|
43
|
+
*/
|
|
44
|
+
export declare class ConfinedReadError extends CallerInputError {
|
|
45
|
+
readonly filePath: string;
|
|
46
|
+
readonly reason: ConfinedReadReason;
|
|
47
|
+
readonly code: string;
|
|
48
|
+
constructor(filePath: string, reason: ConfinedReadReason, errnoCode?: string);
|
|
49
|
+
}
|
|
50
|
+
/** Flags for opening a checked realpath: read-only, no final symlink, no FIFO wait. */
|
|
51
|
+
export declare const CONFINED_OPEN_FLAGS: number;
|
|
52
|
+
/** True when `candidate` is `root` or lies beneath it (both absolute). */
|
|
53
|
+
export declare function isWithinRoot(root: string, candidate: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Where an OPEN descriptor really points. On Linux, /proc/self/fd/N resolves
|
|
56
|
+
* to the opened file itself. Elsewhere, re-resolve the path and accept it only
|
|
57
|
+
* if it is the same inode as the descriptor, so a swap after the open is
|
|
58
|
+
* detected. Returns null when it cannot be proven.
|
|
59
|
+
*/
|
|
60
|
+
export declare function openedLocation(fd: number, lexical: string, opened: Stats): Promise<string | null>;
|
|
61
|
+
/** Synchronous openedLocation, for callers that read synchronously. */
|
|
62
|
+
export declare function openedLocationSync(fd: number, lexical: string, opened: Stats): string | null;
|
|
63
|
+
/**
|
|
64
|
+
* Read a file by path, confined to the project root and validated on the
|
|
65
|
+
* opened descriptor (see the module comment). Throws ConfinedReadError.
|
|
66
|
+
*/
|
|
67
|
+
export declare function readConfinedFile(filePath: string, options?: ConfinedReadOptions): Promise<Buffer>;
|
|
68
|
+
/** readConfinedFile decoded as UTF-8. */
|
|
69
|
+
export declare function readConfinedText(filePath: string, options?: ConfinedReadOptions): Promise<string>;
|
|
70
|
+
/** Synchronous readConfinedFile, for callers that cannot await. */
|
|
71
|
+
export declare function readConfinedFileSync(filePath: string, options?: ConfinedReadOptions): Buffer;
|
|
72
|
+
/** readConfinedFileSync decoded as UTF-8. */
|
|
73
|
+
export declare function readConfinedTextSync(filePath: string, options?: ConfinedReadOptions): string;
|
|
74
|
+
//# sourceMappingURL=confined-read.d.ts.map
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1161: read a file inside the project root without a check-then-use race.
|
|
3
|
+
*
|
|
4
|
+
* The payload path guard (#1126) checks a path by name and the handler opens
|
|
5
|
+
* it again later, so a file or symlink swapped in between could be read
|
|
6
|
+
* unchecked. These readers OPEN first and validate what was opened:
|
|
7
|
+
*
|
|
8
|
+
* - the path's realpath is opened with O_NOFOLLOW (a symlink swapped onto the
|
|
9
|
+
* final name fails the open) and O_NONBLOCK (a FIFO cannot hang the open);
|
|
10
|
+
* - the descriptor must be a regular file within the size limit (fstat);
|
|
11
|
+
* - the descriptor's real location (/proc/self/fd/N on Linux; elsewhere the
|
|
12
|
+
* re-resolved realpath, which must be the same inode) must lie inside the
|
|
13
|
+
* project root, so a directory component swapped for a symlink is caught;
|
|
14
|
+
* - the content is read from that same descriptor, and never past the limit,
|
|
15
|
+
* even if the file grows after the fstat.
|
|
16
|
+
*
|
|
17
|
+
* A path spelled outside the root is refused before any filesystem call,
|
|
18
|
+
* unless the caller opts into `outsideRoot: 'allow'` for paths it accepts
|
|
19
|
+
* from a trusted source (the other checks still apply).
|
|
20
|
+
*/
|
|
21
|
+
import { constants as fsConstants } from 'node:fs';
|
|
22
|
+
import * as fsSync from 'node:fs';
|
|
23
|
+
import * as fs from 'node:fs/promises';
|
|
24
|
+
import * as path from 'node:path';
|
|
25
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
26
|
+
import { CallerInputError } from '../error-utils.js';
|
|
27
|
+
/** Default upper bound for a confined read when the caller names none. */
|
|
28
|
+
export const DEFAULT_MAX_CONFINED_READ_BYTES = 128 * 1024 * 1024;
|
|
29
|
+
/**
|
|
30
|
+
* A confined read that was refused; `reason` matches the payload guard's.
|
|
31
|
+
* `code` is the errno code when the filesystem gave one (ENOENT, ELOOP, ...),
|
|
32
|
+
* otherwise the reason in errno style (OUTSIDE_PROJECT_ROOT, NOT_A_FILE,
|
|
33
|
+
* TOO_LARGE), so callers that report error codes keep working.
|
|
34
|
+
*/
|
|
35
|
+
export class ConfinedReadError extends CallerInputError {
|
|
36
|
+
filePath;
|
|
37
|
+
reason;
|
|
38
|
+
code;
|
|
39
|
+
constructor(filePath, reason, errnoCode) {
|
|
40
|
+
super(`Cannot read ${filePath}: ${reason}`);
|
|
41
|
+
this.filePath = filePath;
|
|
42
|
+
this.reason = reason;
|
|
43
|
+
this.name = 'ConfinedReadError';
|
|
44
|
+
this.code = errnoCode ?? reason.toUpperCase().replace(/-/g, '_');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Flags for opening a checked realpath: read-only, no final symlink, no FIFO wait. */
|
|
48
|
+
export const CONFINED_OPEN_FLAGS = fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | (fsConstants.O_NONBLOCK ?? 0);
|
|
49
|
+
/** True when `candidate` is `root` or lies beneath it (both absolute). */
|
|
50
|
+
export function isWithinRoot(root, candidate) {
|
|
51
|
+
const relative = path.relative(root, candidate);
|
|
52
|
+
return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Where an OPEN descriptor really points. On Linux, /proc/self/fd/N resolves
|
|
56
|
+
* to the opened file itself. Elsewhere, re-resolve the path and accept it only
|
|
57
|
+
* if it is the same inode as the descriptor, so a swap after the open is
|
|
58
|
+
* detected. Returns null when it cannot be proven.
|
|
59
|
+
*/
|
|
60
|
+
export async function openedLocation(fd, lexical, opened) {
|
|
61
|
+
const sameFile = async (candidate) => {
|
|
62
|
+
const st = await fs.stat(candidate).catch(() => null);
|
|
63
|
+
return st !== null && st.dev === opened.dev && st.ino === opened.ino;
|
|
64
|
+
};
|
|
65
|
+
const viaProc = await fs.realpath(`/proc/self/fd/${fd}`).catch(() => null);
|
|
66
|
+
if (viaProc && path.isAbsolute(viaProc) && await sameFile(viaProc))
|
|
67
|
+
return viaProc;
|
|
68
|
+
const real = await fs.realpath(lexical).catch(() => null);
|
|
69
|
+
if (real && await sameFile(real))
|
|
70
|
+
return real;
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/** Synchronous openedLocation, for callers that read synchronously. */
|
|
74
|
+
export function openedLocationSync(fd, lexical, opened) {
|
|
75
|
+
const sameFile = (candidate) => {
|
|
76
|
+
try {
|
|
77
|
+
const st = fsSync.statSync(candidate);
|
|
78
|
+
return st.dev === opened.dev && st.ino === opened.ino;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const realOrNull = (p) => {
|
|
85
|
+
try {
|
|
86
|
+
return fsSync.realpathSync(p);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const viaProc = realOrNull(`/proc/self/fd/${fd}`);
|
|
93
|
+
if (viaProc && path.isAbsolute(viaProc) && sameFile(viaProc))
|
|
94
|
+
return viaProc;
|
|
95
|
+
const real = realOrNull(lexical);
|
|
96
|
+
if (real && sameFile(real))
|
|
97
|
+
return real;
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function reasonFor(error) {
|
|
101
|
+
const code = error?.code;
|
|
102
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
103
|
+
return 'not-found';
|
|
104
|
+
// ELOOP: a symlink was swapped onto the checked realpath's final name.
|
|
105
|
+
if (code === 'EISDIR' || code === 'ELOOP')
|
|
106
|
+
return 'not-a-file';
|
|
107
|
+
return 'unreadable';
|
|
108
|
+
}
|
|
109
|
+
function fail(filePath, reason, error) {
|
|
110
|
+
return new ConfinedReadError(filePath, reason, error?.code);
|
|
111
|
+
}
|
|
112
|
+
function plan(filePath, rootReal, options) {
|
|
113
|
+
if (typeof filePath !== 'string' || filePath === '' || filePath.includes('\0')) {
|
|
114
|
+
throw fail(String(filePath), 'unreadable');
|
|
115
|
+
}
|
|
116
|
+
const rootLexical = path.resolve(options.projectRoot ?? findProjectRoot());
|
|
117
|
+
const lexical = path.resolve(filePath);
|
|
118
|
+
const inRoot = isWithinRoot(rootLexical, lexical) || isWithinRoot(rootReal, lexical);
|
|
119
|
+
// Spelled outside the root: refused before any filesystem call, so the
|
|
120
|
+
// reason cannot reveal whether an outside path exists.
|
|
121
|
+
if (!inRoot && options.outsideRoot !== 'allow')
|
|
122
|
+
throw fail(filePath, 'outside-project-root');
|
|
123
|
+
return { lexical, rootReal, inRoot, limit: options.maxBytes ?? DEFAULT_MAX_CONFINED_READ_BYTES };
|
|
124
|
+
}
|
|
125
|
+
/** Check the opened descriptor's stat before anything is read. */
|
|
126
|
+
function checkOpened(filePath, st, limit) {
|
|
127
|
+
if (!st.isFile())
|
|
128
|
+
throw fail(filePath, 'not-a-file');
|
|
129
|
+
if (st.size > limit)
|
|
130
|
+
throw fail(filePath, 'too-large');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Read a file by path, confined to the project root and validated on the
|
|
134
|
+
* opened descriptor (see the module comment). Throws ConfinedReadError.
|
|
135
|
+
*/
|
|
136
|
+
export async function readConfinedFile(filePath, options = {}) {
|
|
137
|
+
const root = path.resolve(options.projectRoot ?? findProjectRoot());
|
|
138
|
+
const rootReal = await fs.realpath(root).catch(() => root);
|
|
139
|
+
const p = plan(filePath, rootReal, options);
|
|
140
|
+
let real;
|
|
141
|
+
try {
|
|
142
|
+
real = await fs.realpath(p.lexical);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
throw fail(filePath, reasonFor(error), error);
|
|
146
|
+
}
|
|
147
|
+
if (p.inRoot && !isWithinRoot(p.rootReal, real))
|
|
148
|
+
throw fail(filePath, 'outside-project-root');
|
|
149
|
+
let handle;
|
|
150
|
+
try {
|
|
151
|
+
handle = await fs.open(real, CONFINED_OPEN_FLAGS);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
throw fail(filePath, reasonFor(error), error);
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const st = await handle.stat();
|
|
158
|
+
checkOpened(filePath, st, p.limit);
|
|
159
|
+
if (p.inRoot) {
|
|
160
|
+
const location = await openedLocation(handle.fd, real, st);
|
|
161
|
+
if (!location || !isWithinRoot(p.rootReal, location))
|
|
162
|
+
throw fail(filePath, 'outside-project-root');
|
|
163
|
+
}
|
|
164
|
+
// Read at most limit + 1 bytes from this descriptor: a file that grew
|
|
165
|
+
// after the fstat is refused rather than read without bound.
|
|
166
|
+
const chunks = [];
|
|
167
|
+
let total = 0;
|
|
168
|
+
for (;;) {
|
|
169
|
+
const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, p.limit + 1 - total));
|
|
170
|
+
const { bytesRead } = await handle.read(chunk, 0, chunk.length, null);
|
|
171
|
+
if (bytesRead === 0)
|
|
172
|
+
break;
|
|
173
|
+
chunks.push(chunk.subarray(0, bytesRead));
|
|
174
|
+
total += bytesRead;
|
|
175
|
+
if (total > p.limit)
|
|
176
|
+
throw fail(filePath, 'too-large');
|
|
177
|
+
}
|
|
178
|
+
return Buffer.concat(chunks, total);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (error instanceof ConfinedReadError)
|
|
182
|
+
throw error;
|
|
183
|
+
throw fail(filePath, reasonFor(error), error);
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await handle.close().catch(() => undefined);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** readConfinedFile decoded as UTF-8. */
|
|
190
|
+
export async function readConfinedText(filePath, options = {}) {
|
|
191
|
+
return (await readConfinedFile(filePath, options)).toString('utf-8');
|
|
192
|
+
}
|
|
193
|
+
/** Synchronous readConfinedFile, for callers that cannot await. */
|
|
194
|
+
export function readConfinedFileSync(filePath, options = {}) {
|
|
195
|
+
const root = path.resolve(options.projectRoot ?? findProjectRoot());
|
|
196
|
+
let rootReal = root;
|
|
197
|
+
try {
|
|
198
|
+
rootReal = fsSync.realpathSync(root);
|
|
199
|
+
}
|
|
200
|
+
catch { /* keep the lexical root */ }
|
|
201
|
+
const p = plan(filePath, rootReal, options);
|
|
202
|
+
let real;
|
|
203
|
+
try {
|
|
204
|
+
real = fsSync.realpathSync(p.lexical);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
throw fail(filePath, reasonFor(error), error);
|
|
208
|
+
}
|
|
209
|
+
if (p.inRoot && !isWithinRoot(p.rootReal, real))
|
|
210
|
+
throw fail(filePath, 'outside-project-root');
|
|
211
|
+
let fd;
|
|
212
|
+
try {
|
|
213
|
+
fd = fsSync.openSync(real, CONFINED_OPEN_FLAGS);
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
throw fail(filePath, reasonFor(error), error);
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
const st = fsSync.fstatSync(fd);
|
|
220
|
+
checkOpened(filePath, st, p.limit);
|
|
221
|
+
if (p.inRoot) {
|
|
222
|
+
const location = openedLocationSync(fd, real, st);
|
|
223
|
+
if (!location || !isWithinRoot(p.rootReal, location))
|
|
224
|
+
throw fail(filePath, 'outside-project-root');
|
|
225
|
+
}
|
|
226
|
+
const chunks = [];
|
|
227
|
+
let total = 0;
|
|
228
|
+
for (;;) {
|
|
229
|
+
const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, p.limit + 1 - total));
|
|
230
|
+
const bytesRead = fsSync.readSync(fd, chunk, 0, chunk.length, null);
|
|
231
|
+
if (bytesRead === 0)
|
|
232
|
+
break;
|
|
233
|
+
chunks.push(chunk.subarray(0, bytesRead));
|
|
234
|
+
total += bytesRead;
|
|
235
|
+
if (total > p.limit)
|
|
236
|
+
throw fail(filePath, 'too-large');
|
|
237
|
+
}
|
|
238
|
+
return Buffer.concat(chunks, total);
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (error instanceof ConfinedReadError)
|
|
242
|
+
throw error;
|
|
243
|
+
throw fail(filePath, reasonFor(error), error);
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
try {
|
|
247
|
+
fsSync.closeSync(fd);
|
|
248
|
+
}
|
|
249
|
+
catch { /* already closed */ }
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/** readConfinedFileSync decoded as UTF-8. */
|
|
253
|
+
export function readConfinedTextSync(filePath, options = {}) {
|
|
254
|
+
return readConfinedFileSync(filePath, options).toString('utf-8');
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=confined-read.js.map
|
|
@@ -74,12 +74,12 @@ export declare class FileReader {
|
|
|
74
74
|
*/
|
|
75
75
|
private inProjectRoot;
|
|
76
76
|
/**
|
|
77
|
-
* #1021 round 2b: read an in-root path without a check-then-use
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
77
|
+
* #1021 round 2b / #1161: read an in-root path without a check-then-use
|
|
78
|
+
* race. readConfinedText opens the path once and verifies the opened
|
|
79
|
+
* descriptor (a regular file whose real location lies inside the root) and
|
|
80
|
+
* reads from that same descriptor, so swapping a symlink (file or directory
|
|
81
|
+
* component) between a check and the read cannot redirect it, and a FIFO or
|
|
82
|
+
* device cannot hang or flood the read.
|
|
83
83
|
*/
|
|
84
84
|
private readContained;
|
|
85
85
|
/**
|
|
@@ -7,6 +7,7 @@ import * as path from 'node:path';
|
|
|
7
7
|
import { ok, err } from '../types/index.js';
|
|
8
8
|
import { validatePath } from '../security/path-traversal-validator.js';
|
|
9
9
|
import { safeJsonParse } from '../safe-json.js';
|
|
10
|
+
import { ConfinedReadError, readConfinedText } from './confined-read.js';
|
|
10
11
|
/** Extensions never read, inside or outside the project root. */
|
|
11
12
|
const DENIED_EXTENSIONS = ['.exe', '.bat', '.cmd', '.ps1', '.dll', '.so'];
|
|
12
13
|
export class FileReadError extends Error {
|
|
@@ -65,25 +66,6 @@ function readError(error, absolutePath) {
|
|
|
65
66
|
}
|
|
66
67
|
return new FileReadError(message, absolutePath, nodeError.code, nodeError);
|
|
67
68
|
}
|
|
68
|
-
/**
|
|
69
|
-
* #1021 round 2b: where an OPEN descriptor really points. On Linux,
|
|
70
|
-
* /proc/self/fd/N resolves to the opened file itself. Elsewhere, re-resolve
|
|
71
|
-
* the path and accept it only if it is the same inode as the descriptor, so
|
|
72
|
-
* a swap after the open is detected. Returns null when it cannot be proven.
|
|
73
|
-
*/
|
|
74
|
-
async function openedLocation(fd, lexical, opened) {
|
|
75
|
-
const sameFile = async (candidate) => {
|
|
76
|
-
const st = await fs.stat(candidate).catch(() => null);
|
|
77
|
-
return st !== null && st.dev === opened.dev && st.ino === opened.ino;
|
|
78
|
-
};
|
|
79
|
-
const viaProc = await fs.realpath(`/proc/self/fd/${fd}`).catch(() => null);
|
|
80
|
-
if (viaProc && path.isAbsolute(viaProc) && await sameFile(viaProc))
|
|
81
|
-
return viaProc;
|
|
82
|
-
const real = await fs.realpath(lexical).catch(() => null);
|
|
83
|
-
if (real && await sameFile(real))
|
|
84
|
-
return real;
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
69
|
/** True when `candidate` is `root` or lies beneath it (both absolute). */
|
|
88
70
|
function isWithin(root, candidate) {
|
|
89
71
|
const relative = path.relative(root, candidate);
|
|
@@ -341,38 +323,30 @@ export class FileReader {
|
|
|
341
323
|
return { lexical, rootReal };
|
|
342
324
|
}
|
|
343
325
|
/**
|
|
344
|
-
* #1021 round 2b: read an in-root path without a check-then-use
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
326
|
+
* #1021 round 2b / #1161: read an in-root path without a check-then-use
|
|
327
|
+
* race. readConfinedText opens the path once and verifies the opened
|
|
328
|
+
* descriptor (a regular file whose real location lies inside the root) and
|
|
329
|
+
* reads from that same descriptor, so swapping a symlink (file or directory
|
|
330
|
+
* component) between a check and the read cannot redirect it, and a FIFO or
|
|
331
|
+
* device cannot hang or flood the read.
|
|
350
332
|
*/
|
|
351
333
|
async readContained(filePath, lexical, rootReal) {
|
|
352
334
|
this.stats.totalReads++;
|
|
353
|
-
let handle;
|
|
354
335
|
try {
|
|
355
|
-
|
|
336
|
+
// The lexical root, so a path spelled under a symlinked root still
|
|
337
|
+
// counts as inside; the primitive resolves the root's realpath itself.
|
|
338
|
+
return ok(await readConfinedText(lexical, { projectRoot: this.projectRoot ?? rootReal }));
|
|
356
339
|
}
|
|
357
340
|
catch (error) {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
const opened = await handle.stat();
|
|
362
|
-
const location = await openedLocation(handle.fd, lexical, opened);
|
|
363
|
-
if (!location || !isWithin(rootReal, location)) {
|
|
341
|
+
if (!(error instanceof ConfinedReadError))
|
|
342
|
+
return err(readError(error, lexical));
|
|
343
|
+
if (error.reason === 'outside-project-root') {
|
|
364
344
|
return err(new PathTraversalError(filePath, ['Path resolves outside the project root'], 'critical'));
|
|
365
345
|
}
|
|
366
|
-
if (
|
|
367
|
-
return err(new FileReadError('
|
|
346
|
+
if (error.reason === 'not-a-file') {
|
|
347
|
+
return err(new FileReadError('Not a regular file: ' + lexical, lexical, error.code === 'NOT_A_FILE' ? 'EISDIR' : error.code));
|
|
368
348
|
}
|
|
369
|
-
return
|
|
370
|
-
}
|
|
371
|
-
catch (error) {
|
|
372
|
-
return err(readError(error, lexical));
|
|
373
|
-
}
|
|
374
|
-
finally {
|
|
375
|
-
await handle.close().catch(() => undefined);
|
|
349
|
+
return err(readError({ code: error.reason === 'not-found' ? 'ENOENT' : error.code }, lexical));
|
|
376
350
|
}
|
|
377
351
|
}
|
|
378
352
|
/**
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1126: decide which caller-named paths a task handler may read.
|
|
3
|
+
*
|
|
4
|
+
* A task payload can come from MCP task_submit, task_orchestrate, a domain
|
|
5
|
+
* MCP tool or `aqe task submit`, so every handler that reads a path from its
|
|
6
|
+
* payload applies the same rule as code indexing (#1096) and sast-scan
|
|
7
|
+
* (#1144): a path is read only when its realpath is a regular file (or, for a
|
|
8
|
+
* target to walk, a directory) inside the project root's realpath. A path
|
|
9
|
+
* spelled outside the root is refused before any filesystem call, so the
|
|
10
|
+
* reason does not reveal whether it exists, and an outside directory is never
|
|
11
|
+
* listed. A symlink pointing out, a device such as /dev/zero or a directory
|
|
12
|
+
* is refused by name, and so is a file over the size limit when the handler
|
|
13
|
+
* reads files whole.
|
|
14
|
+
*
|
|
15
|
+
* The check runs inside each handler rather than at one MCP entry point, so
|
|
16
|
+
* no route into the handler can skip it. A refusal is a CallerInputError: it
|
|
17
|
+
* is not retried and does not count toward the domain circuit breaker.
|
|
18
|
+
*/
|
|
19
|
+
import { Result } from '../types';
|
|
20
|
+
/** Largest file a handler reads whole into memory (the #1144 sast limit). */
|
|
21
|
+
export declare const MAX_PAYLOAD_FILE_BYTES: number;
|
|
22
|
+
export type PayloadPathSkipReason = 'not-found' | 'not-a-file' | 'outside-project-root' | 'unreadable' | 'too-large';
|
|
23
|
+
export interface SkippedPayloadPath {
|
|
24
|
+
path: string;
|
|
25
|
+
reason: PayloadPathSkipReason;
|
|
26
|
+
}
|
|
27
|
+
export interface ConfinedPayloadPaths {
|
|
28
|
+
/** Requested paths (as given) that are regular files inside the project root. */
|
|
29
|
+
accepted: string[];
|
|
30
|
+
/** The real path checked for each accepted entry, in the same order. */
|
|
31
|
+
resolved: string[];
|
|
32
|
+
skipped: SkippedPayloadPath[];
|
|
33
|
+
}
|
|
34
|
+
export interface PayloadPathOptions {
|
|
35
|
+
/** Project root; defaults to findProjectRoot(). */
|
|
36
|
+
projectRoot?: string;
|
|
37
|
+
/** Base for relative paths; defaults to process.cwd(), as FileReader does. */
|
|
38
|
+
basePath?: string;
|
|
39
|
+
/** Refuse files larger than this. Omit when the handler does not read files whole. */
|
|
40
|
+
maxBytes?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Accept a path inside the root that does not exist, for handlers that
|
|
43
|
+
* report a missing file themselves (a test runner, a deleted file in a
|
|
44
|
+
* changeset). A missing path outside the root is still refused.
|
|
45
|
+
*/
|
|
46
|
+
allowMissing?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Options for a single caller-named target that may be a directory. */
|
|
49
|
+
export interface PayloadTargetOptions extends PayloadPathOptions {
|
|
50
|
+
/** Accept a directory inside the root as well as a regular file. */
|
|
51
|
+
allowDirectory?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Split `paths` into those a handler may read and those it must refuse.
|
|
55
|
+
* `resolved[i]` is the symlink-free path checked for `accepted[i]` (relative
|
|
56
|
+
* to basePath when the request was relative); a handler opens that path,
|
|
57
|
+
* never the caller's string.
|
|
58
|
+
*/
|
|
59
|
+
export declare function confinePayloadPaths(paths: readonly string[], options?: PayloadTargetOptions): Promise<ConfinedPayloadPaths>;
|
|
60
|
+
/**
|
|
61
|
+
* Handler-side check for a payload path list: `value` must be an array of
|
|
62
|
+
* non-empty path strings, and every entry must pass confinePayloadPaths.
|
|
63
|
+
* Otherwise the whole request is refused and nothing is read. Returns the real
|
|
64
|
+
* paths that were checked; the handler reads those, not the payload strings.
|
|
65
|
+
* `taskType` and `field` name the payload in the error.
|
|
66
|
+
*/
|
|
67
|
+
export declare function requirePayloadFiles(taskType: string, field: string, value: unknown, options?: PayloadTargetOptions): Promise<Result<string[], Error>>;
|
|
68
|
+
/**
|
|
69
|
+
* Handler-side check for one caller-named path (a file, or with
|
|
70
|
+
* allowDirectory a directory to walk). Returns the real path that was
|
|
71
|
+
* checked, which the handler reads instead of the payload string, or an error
|
|
72
|
+
* naming the reason without reading anything.
|
|
73
|
+
*/
|
|
74
|
+
export declare function requirePayloadPath(taskType: string, field: string, value: unknown, options?: PayloadTargetOptions): Promise<Result<string, Error>>;
|
|
75
|
+
//# sourceMappingURL=payload-path-guard.d.ts.map
|