agentic-qe 3.15.8 → 3.15.10
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 +434 -0
- package/assets/skills/skills-manifest.json +1 -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/agents/claim-verifier/claim-verifier-service.js +13 -8
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/bridge/captured-experience-bridge.js +12 -13
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
- package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-SVXSHEET.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WKQH36XL.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
- package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-EKOOFVST.js} +2 -2
- package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-OPS36NFZ.js} +4 -4
- package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-AO5NDZRI.js} +3 -3
- package/dist/cli/chunks/base-GTB6POYE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-TFLVEMMY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-ADBBJPYW.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-HGHUYYL5.js} +2 -2
- package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
- package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-2SXBBUM6.js} +2 -2
- package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-2T7RRL6G.js} +1 -1
- package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-2XGVTYVX.js} +2 -2
- package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-2ZI5FKSF.js} +2 -2
- package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
- package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-37OWRCUN.js} +1 -1
- package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-3P34JFQH.js} +5 -5
- package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-3Y7SPD72.js} +2 -2
- package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-4G63WT4F.js} +2 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
- package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
- package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-5LPYV3TK.js} +1 -1
- package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-62OAY5KJ.js} +1 -1
- package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-6C3II5OM.js} +2 -2
- package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-6GP6W46M.js} +2 -2
- package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-6KIL6CMD.js} +2 -2
- package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-6MVVSSID.js} +1 -1
- package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-6P7424AO.js} +2 -2
- package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-6PX4OXQO.js} +2 -2
- package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-6S3WJGUV.js} +2 -2
- package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-6TB6YOCZ.js} +1 -1
- package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-6X5DHU6Q.js} +1 -1
- package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-6XCMKIZN.js} +1 -1
- package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-7LFZ4CHM.js} +2 -2
- package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-7OZVZIBE.js} +2 -2
- package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-7PJIR4ST.js} +2 -2
- package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-7TB6FK4B.js} +1 -1
- package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-7ZCDZHDB.js} +2 -2
- package/dist/cli/chunks/chunk-A55QKKT2.js +2 -0
- package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-ABFFWZPC.js} +273 -278
- package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-ACWFKES2.js} +2 -2
- package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-AH3ZD3NJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-AI4VYSFS.js} +2 -2
- package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
- package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
- package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-B6LTH6YV.js} +2 -2
- package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
- package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-C522H7XR.js} +54 -33
- package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-CESIR27V.js} +2 -2
- package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-CFBEBXLO.js} +3 -3
- package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-CMBLM26R.js} +2 -2
- package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-CZ2IF6MC.js} +1 -1
- package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-CZGOSJQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-D6DA2KFD.js} +2 -2
- package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-DBMNJSBV.js} +1 -1
- package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-DE4YJQJF.js} +2 -2
- package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-DEF34AFL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZWMFKZEQ.js → chunk-DKAC3E3B.js} +2 -2
- package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-DMFTELBS.js} +2 -2
- package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-DNRWGATA.js} +10 -10
- package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-DT7SIJOA.js} +2 -2
- package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-DURHK377.js} +69 -69
- package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-EAU5KDFO.js} +1 -1
- package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-EDLFX4ZB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-EN2QSKFF.js} +2 -2
- package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-ERQKYIP7.js} +2 -2
- package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-ESUO3GTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-EWFECZ2U.js} +2 -2
- package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-FAUCT5KR.js} +3 -3
- package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-FB6TI3BH.js} +2 -2
- package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-FBXTQNRH.js} +2 -2
- package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-FESZBPUB.js} +2 -2
- package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
- package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-FKL3R5JQ.js} +2 -2
- package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-FPUDRSFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-FZOWULMH.js} +1 -1
- package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-G3CZCUPM.js} +2 -2
- package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-G5I6KGMW.js} +22 -22
- package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-GHBNRMSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-GJHWY3ZX.js} +2 -2
- package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-GJMLK5UT.js} +2 -2
- package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-GRCIBCJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-GWZZ7DAO.js} +2 -2
- package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-GZLZCZ42.js} +2 -2
- package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-H2PYU7MN.js} +1 -1
- package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-H32EPIR2.js} +1 -1
- package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-H74Q7TJN.js} +1 -1
- package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
- package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-I33O4BRQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-IKISCIGH.js} +2 -2
- package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-IPJ7Q3AJ.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-IU2IV4NE.js} +1 -1
- package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-JHIY4VCC.js} +2 -2
- package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-KG336OV3.js} +2 -2
- package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-KI73QCR5.js} +2 -2
- package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-KNQ2ERFX.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-KOBVYY6H.js} +2 -2
- package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-KSIWGGJI.js} +8 -8
- package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-LMS3Y7JD.js} +2 -2
- package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LQEURY7C.js} +1 -1
- package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-LRZY4KS2.js} +2 -2
- package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-M2QV7PT7.js} +2 -2
- package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-MA7JIQ6U.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-MG27QY4D.js} +2 -2
- package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
- package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
- package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
- package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-NGKNYIQZ.js} +1 -1
- package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
- package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-NPPHWFA2.js} +3 -3
- package/dist/cli/chunks/chunk-NSHU347M.js +2 -0
- package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-NVYIZCSR.js} +2 -2
- package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-NW5JUCCG.js} +1 -1
- package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-NZYLNXT6.js} +3 -3
- package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-OBAREPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-ODJNUMV3.js} +2 -2
- package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-OEKP73MC.js} +2 -2
- package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-OPFGRS5S.js} +2 -2
- package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-OY2AHLSF.js} +1 -1
- package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-OY3NJNP2.js} +1 -1
- package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-PCEW6Q2C.js} +1 -1
- package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-PFG6VQ5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-PGYMKGOE.js} +2 -2
- package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-PPSAMXYN.js} +3 -3
- package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
- package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-RPHY2DU6.js} +2 -2
- package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-RWWOHCMG.js} +25 -20
- package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-S75EYIJG.js} +1 -1
- package/dist/cli/chunks/chunk-SKQUUE4F.js +5 -0
- package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
- package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-SU5H66SD.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-SY2IB442.js} +2 -2
- package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-TBLI254A.js} +2 -2
- package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-TNMBRDCA.js} +3 -3
- package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-TYFZXDGZ.js} +2 -2
- package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-U4OICXV2.js} +2 -2
- package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-U53ZB4IX.js} +2 -2
- package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
- package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-UCJMVXO4.js} +2 -2
- package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-UHTTW3IT.js} +2 -2
- package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-V2M2XCR5.js} +1 -1
- package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-V2RSNVMW.js} +1 -1
- package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-V6JBOIMX.js} +1 -1
- package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-VFKF2XO7.js} +1 -1
- package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-VFSYMOAL.js} +2 -2
- package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-VJQYDYAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-VKRTTFB6.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-VWNFAW2M.js} +2 -2
- package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-WBM6N6IM.js} +1 -1
- package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-WDQ7IEZY.js} +2 -2
- package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-WDVRE6GN.js} +2 -2
- package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-WQ4PYWSW.js} +1 -1
- package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-WSF24I3D.js} +2 -2
- package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-XBVUVFJK.js} +2 -2
- package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-XEB3NLJR.js} +2 -2
- package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XFVTGAAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-XLZYRTNO.js} +2 -2
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +6 -0
- package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-Y76IAYQD.js} +1 -1
- package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-YAKGBHO4.js} +2 -2
- package/dist/cli/chunks/{chunk-TC52M542.js → chunk-YBSBABOS.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-YCGP5VFP.js} +2 -2
- package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-YDAQK5UF.js} +1 -1
- package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-YK3BVZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-YK7JN5N7.js} +4 -4
- package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-YKMU4LBV.js} +1 -1
- package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-YYTGXD3R.js} +2 -2
- package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-Z2O2YJAF.js} +2 -2
- package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-Z7IYW5U7.js} +1 -1
- package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-ZG5666GJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-ZXPY654C.js} +1 -1
- package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-MSKMVH5X.js} +2 -2
- package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-7ODMNAUM.js} +2 -2
- package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-FXZ7ZZW3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-4VOUEPOX.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-7D4SGLM4.js} +2 -2
- package/dist/cli/chunks/client-POSVREVS.js +2 -0
- package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-WRRT7BGQ.js} +2 -2
- package/dist/cli/chunks/{code-OMT4UEZI.js → code-ZDJRIL3S.js} +25 -24
- package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-4S4SHM56.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-YTRHNDWR.js} +2 -2
- package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-6N64JUXJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-IIDR66LB.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-SVVFY3S2.js} +2 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
- package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VGFS6IBX.js} +2 -2
- package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-B7MCGNTE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
- package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-UPETT57E.js} +2 -2
- package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
- package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-CQFNZLXU.js} +7 -7
- package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-PJVABHON.js} +2 -2
- package/dist/cli/chunks/{detect-5QTCRB32.js → detect-56SKAGWX.js} +2 -2
- package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-UYTYUMLN.js} +2 -2
- package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-YOYLBYJE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-7TARX2XF.js} +2 -2
- package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
- package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
- package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GNB574IM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-KTZ5SF54.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ITX5LQ57.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-KFHSR5YF.js} +2 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-RLFW3GSX.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-EM2URCYZ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-CBP73QHY.js} +2 -2
- package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-IP7XE34Z.js} +34 -34
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ONAYHU25.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-VINJRAID.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
- package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-RYVV5R3Z.js} +2 -2
- package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-MPRGWMOE.js} +6 -6
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
- package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-OPD7JBRL.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-M4OPUNK2.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
- package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4UWTQLMF.js} +24 -24
- package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-SQ56FF6Z.js} +4 -4
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
- package/dist/cli/chunks/{load-UYMZPEY6.js → load-HPHKDGGL.js} +2 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
- package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
- package/dist/cli/chunks/{memory-QL53YIHP.js → memory-PFQ3KPVJ.js} +5 -5
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-3VDRX6TZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PJ576R63.js} +2 -2
- package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-72QP4UU7.js} +64 -19
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-754YQW7C.js} +2 -2
- package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
- package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-3E3DXLYB.js} +2 -2
- package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-7FUQAKRE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BQRYMUTG.js} +2 -2
- package/dist/cli/chunks/{prove-2NAUROGF.js → prove-H52QGC6B.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
- package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-QO4XPAUM.js} +2 -2
- package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-FBKE5E6F.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-RWGOVOXO.js} +2 -2
- package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-LF76ZOBD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-3BYEBTQ7.js} +2 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
- package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-DST7BVCU.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-XE32PGKC.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
- package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
- package/dist/cli/chunks/{security-EHXSW22U.js → security-VSPNKCDS.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
- package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-O4QUTK6L.js} +2 -2
- package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-Z2BP6EOG.js} +2 -2
- package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-R36WNLQG.js} +2 -2
- package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
- package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-QF5Y3EMZ.js} +2 -2
- package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-43PYE75J.js} +13 -7
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
- package/dist/cli/chunks/{test-GPKT3CKZ.js → test-UWA377D4.js} +16 -16
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-YQZPJRRN.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
- package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-DO6WLMXP.js} +2 -2
- package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-H5RGFKVO.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
- package/dist/cli/chunks/{types-J4J6QV3I.js → types-PJS2FGPF.js} +2 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
- package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4IC4F6AB.js} +2 -2
- package/dist/cli/chunks/{validate-B57HA4YK.js → validate-DHUWW7PF.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-OERQNOX5.js} +2 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-TV7DMKES.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-QZPWSH37.js} +2 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-YXENHB42.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-HL26AGFO.js} +2 -2
- package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-EOVVCN2E.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
- package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
- package/dist/cli/commands/code.js +8 -0
- package/dist/cli/commands/daemon.js +8 -0
- package/dist/cli/commands/fleet.js +27 -15
- 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/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +6 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/ci-output.d.ts +9 -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/context/sources/git-source.js +6 -2
- package/dist/coordination/handlers/code-intelligence-handlers.js +74 -7
- package/dist/coordination/handlers/coverage-collection.js +9 -10
- package/dist/coordination/handlers/coverage-handlers.js +31 -4
- package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
- package/dist/coordination/handlers/coverage-runner.js +9 -2
- package/dist/coordination/handlers/coverage-target.d.ts +13 -3
- package/dist/coordination/handlers/coverage-target.js +224 -7
- package/dist/coordination/handlers/handler-types.d.ts +2 -0
- package/dist/coordination/handlers/requirements-handlers.js +16 -2
- package/dist/coordination/handlers/security-handlers.js +11 -1
- package/dist/coordination/handlers/test-execution-handlers.js +57 -12
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.js +1 -1
- 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 +35 -0
- package/dist/coordination/protocols/learning-consolidation-archive.js +34 -0
- package/dist/coordination/protocols/learning-consolidation.d.ts +62 -3
- package/dist/coordination/protocols/learning-consolidation.js +187 -60
- package/dist/coordination/queen-coordinator.d.ts +13 -2
- package/dist/coordination/queen-coordinator.js +43 -8
- package/dist/coordination/queen-event-handlers.js +15 -1
- package/dist/coordination/queen-lifecycle.js +9 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +94 -127
- 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 +11 -1
- package/dist/coordination/queen-types.js +8 -0
- 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-dag/dag-algorithms.d.ts +33 -0
- package/dist/coordination/task-dag/dag-algorithms.js +162 -0
- package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
- package/dist/coordination/task-dag/dag-obligations.js +83 -0
- package/dist/coordination/task-dag/dag.d.ts +69 -19
- package/dist/coordination/task-dag/dag.js +215 -269
- package/dist/coordination/task-dag/index.d.ts +12 -4
- package/dist/coordination/task-dag/index.js +11 -3
- package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
- package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
- package/dist/coordination/task-dag/scheduler.d.ts +19 -9
- package/dist/coordination/task-dag/scheduler.js +36 -12
- package/dist/coordination/task-dag/types.d.ts +160 -1
- package/dist/coordination/task-dag/types.js +2 -1
- package/dist/coordination/task-executability.d.ts +18 -0
- package/dist/coordination/task-executability.js +31 -0
- package/dist/coordination/task-executor.d.ts +1 -0
- package/dist/coordination/task-executor.js +5 -0
- package/dist/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/coordinator.js +35 -9
- package/dist/domains/code-intelligence/index-path-guard.d.ts +52 -0
- package/dist/domains/code-intelligence/index-path-guard.js +95 -0
- package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
- package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
- 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/contract-testing/coordinator.js +3 -1
- 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/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 +29 -12
- 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 +14 -14
- package/dist/domains/learning-optimization/active-patterns.js +17 -14
- package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
- package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator.js +52 -107
- package/dist/domains/learning-optimization/index.d.ts +1 -1
- package/dist/domains/learning-optimization/interfaces.d.ts +62 -6
- 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/plugin.js +11 -1
- package/dist/domains/learning-optimization/reward-source.d.ts +50 -0
- package/dist/domains/learning-optimization/reward-source.js +65 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +7 -5
- package/dist/domains/learning-optimization/services/learning-coordinator.js +98 -75
- package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
- package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
- 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/scanner-orchestrator.js +4 -1
- package/dist/domains/test-execution/coordinator.d.ts +5 -0
- package/dist/domains/test-execution/coordinator.js +35 -20
- package/dist/domains/test-execution/interfaces.d.ts +41 -0
- 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/runner-test-cases.d.ts +32 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +87 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +31 -9
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/hooks/cross-phase-hooks.js +2 -1
- package/dist/init/fleet-integration.js +2 -0
- package/dist/init/init-wizard-steps.js +2 -0
- package/dist/init/phases/06-code-intelligence.js +2 -0
- package/dist/init/phases/10-workers.js +51 -6
- 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/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/anti-drift-middleware.d.ts +44 -5
- package/dist/kernel/anti-drift-middleware.js +147 -11
- package/dist/kernel/interfaces.d.ts +5 -0
- 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 +24 -4
- package/dist/learning/dream/dream-insights-pruner.js +85 -11
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- 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/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/skill-validation-learner.d.ts +2 -0
- package/dist/learning/skill-validation-learner.js +29 -21
- 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 +23 -3
- package/dist/mcp/bundle.js +602 -551
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +19 -0
- package/dist/mcp/handlers/domain-handler-configs.js +76 -30
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +37 -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 +3 -0
- package/dist/mcp/handlers/task-handlers.js +69 -6
- package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
- package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
- package/dist/mcp/metrics/metrics-collector.js +13 -26
- package/dist/mcp/protocol-server.js +10 -3
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- 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 +52 -5
- package/dist/mcp/tools/learning-optimization/optimize.js +164 -80
- package/dist/mcp/tools/quality-assessment/gate.js +12 -1
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
- package/dist/memory/crdt/lww-register.js +11 -1
- 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/routing/calibration/ema-calibrator.js +3 -1
- package/dist/shared/base-domain-plugin.d.ts +4 -0
- package/dist/shared/base-domain-plugin.js +6 -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/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/cache.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/security/compliance-patterns.js +3 -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 +32 -0
- package/dist/shared/test-runner-process.js +105 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/index.d.ts +9 -0
- package/dist/shared/types/index.js +13 -0
- package/dist/shared/utils/namespaced-search.d.ts +56 -0
- package/dist/shared/utils/namespaced-search.js +71 -0
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
- package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- package/dist/validation/gate-reexecute.js +7 -4
- package/dist/workers/daemon.d.ts +2 -0
- package/dist/workers/daemon.js +23 -6
- package/dist/workers/namespaced-keys.d.ts +4 -7
- package/dist/workers/namespaced-keys.js +4 -15
- package/dist/workers/quality-daemon/ci-monitor.js +9 -5
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/worker-env.d.ts +16 -8
- package/dist/workers/worker-env.js +25 -12
- package/dist/workers/worker-manager.js +4 -0
- 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 +3 -1
- package/dist/workers/workers/learning-consolidation.js +22 -8
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-W3V5P7LE.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
- package/dist/cli/chunks/base-2XML4WH7.js +0 -2
- package/dist/cli/chunks/browser-ZL7OLKJQ.js +0 -4
- package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
- package/dist/cli/chunks/chunk-4GYFONJB.js +0 -4
- package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
- package/dist/cli/chunks/chunk-7H3GNRNA.js +0 -4
- package/dist/cli/chunks/chunk-EUVSSIGR.js +0 -12
- package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
- package/dist/cli/chunks/chunk-J7RCI25Q.js +0 -2
- package/dist/cli/chunks/chunk-KNHLOANK.js +0 -4
- package/dist/cli/chunks/chunk-KNQUHGNY.js +0 -2
- package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
- package/dist/cli/chunks/chunk-PIEKGKW6.js +0 -12
- package/dist/cli/chunks/chunk-PWA6XBW4.js +0 -120
- package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
- package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
- package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
- package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
- package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
- package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
- package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
- package/dist/cli/chunks/domain-transfer-NF7UJW7B.js +0 -2
- package/dist/cli/chunks/dream-VALD726W.js +0 -2
- package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
- package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
- package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
- package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
- package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
- package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
- package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
- package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
- package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
- package/dist/cli/chunks/mcp-NOTDZBW5.js +0 -2
- package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
- package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
- package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
- package/dist/cli/chunks/pipeline-7ATPA6LU.js +0 -19
- package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
- package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
- package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
- package/dist/cli/chunks/router-AUD4GATI.js +0 -2
- package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
- package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
- package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
- package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
- package/dist/cli/chunks/sync-4IMMQEPT.js +0 -2
- package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
- package/dist/cli/chunks/token-bootstrap-HMM3AHXM.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-56GDQCMR.js +0 -2
- package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
- package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
- package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
- package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
- package/dist/cli/chunks/witness-chain-LFASSMZK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-TPHN4DXN.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
- package/dist/cli/chunks/wrappers-WCAYIQUX.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,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
|
|
@@ -0,0 +1,190 @@
|
|
|
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 * as fs from 'node:fs/promises';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
22
|
+
import { ok, err } from '../types/index.js';
|
|
23
|
+
import { CallerInputError } from '../error-utils.js';
|
|
24
|
+
/** Largest file a handler reads whole into memory (the #1144 sast limit). */
|
|
25
|
+
export const MAX_PAYLOAD_FILE_BYTES = 2 * 1024 * 1024;
|
|
26
|
+
/** True when `candidate` is `root` or lies beneath it (both absolute). */
|
|
27
|
+
function isWithin(root, candidate) {
|
|
28
|
+
const relative = path.relative(root, candidate);
|
|
29
|
+
return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The path the kernel will open for `requested`. path.resolve() collapses
|
|
33
|
+
* `..` as text, but the kernel follows a symlink before applying `..`, so
|
|
34
|
+
* `src/link/../x` opens a file beside the link's target (review of #1162).
|
|
35
|
+
* Keep the caller's spelling and let realpath resolve it the kernel's way.
|
|
36
|
+
*/
|
|
37
|
+
function kernelPath(basePath, requested) {
|
|
38
|
+
return path.isAbsolute(requested) ? requested : `${basePath}${path.sep}${requested}`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* For a path that does not exist: resolve its deepest existing ancestor the
|
|
42
|
+
* kernel's way and append the missing names. Returns null when the ancestor
|
|
43
|
+
* resolves outside the root or a missing name is `..`.
|
|
44
|
+
*/
|
|
45
|
+
async function resolveMissing(raw, rootReal) {
|
|
46
|
+
const missing = [];
|
|
47
|
+
let dir = raw;
|
|
48
|
+
for (;;) {
|
|
49
|
+
missing.unshift(path.basename(dir));
|
|
50
|
+
const parent = path.dirname(dir);
|
|
51
|
+
if (parent === dir)
|
|
52
|
+
return null;
|
|
53
|
+
dir = parent;
|
|
54
|
+
const real = await fs.realpath(dir).catch(() => null);
|
|
55
|
+
if (!real)
|
|
56
|
+
continue;
|
|
57
|
+
if (!isWithin(rootReal, real) || missing.some(name => name === '..'))
|
|
58
|
+
return null;
|
|
59
|
+
return path.join(real, ...missing.filter(name => name !== '.' && name !== ''));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Split `paths` into those a handler may read and those it must refuse.
|
|
64
|
+
* `resolved[i]` is the symlink-free path checked for `accepted[i]` (relative
|
|
65
|
+
* to basePath when the request was relative); a handler opens that path,
|
|
66
|
+
* never the caller's string.
|
|
67
|
+
*/
|
|
68
|
+
export async function confinePayloadPaths(paths, options = {}) {
|
|
69
|
+
const projectRoot = options.projectRoot ?? findProjectRoot();
|
|
70
|
+
const basePath = options.basePath ?? process.cwd();
|
|
71
|
+
const accepted = [];
|
|
72
|
+
const resolved = [];
|
|
73
|
+
const skipped = [];
|
|
74
|
+
const rootLexical = path.resolve(projectRoot);
|
|
75
|
+
const rootReal = await fs.realpath(projectRoot).catch(() => rootLexical);
|
|
76
|
+
const baseReal = await fs.realpath(basePath).catch(() => null);
|
|
77
|
+
// A relative request stays relative, to the base's realpath: the kernel
|
|
78
|
+
// resolves it through the same real directories, and records keep the
|
|
79
|
+
// caller's spelling for ordinary paths ('tests/a.test.ts').
|
|
80
|
+
const accept = (requested, real) => {
|
|
81
|
+
accepted.push(requested);
|
|
82
|
+
resolved.push(!path.isAbsolute(requested) && baseReal ? (path.relative(baseReal, real) || '.') : real);
|
|
83
|
+
};
|
|
84
|
+
for (const requested of paths) {
|
|
85
|
+
const lexical = path.resolve(basePath, requested);
|
|
86
|
+
// Spelled outside the root: refused before any filesystem call, so the
|
|
87
|
+
// reason cannot reveal whether an outside path exists.
|
|
88
|
+
if (!isWithin(rootLexical, lexical) && !isWithin(rootReal, lexical)) {
|
|
89
|
+
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const raw = kernelPath(basePath, requested);
|
|
93
|
+
let real;
|
|
94
|
+
try {
|
|
95
|
+
real = await fs.realpath(raw);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const code = error.code;
|
|
99
|
+
const missing = code === 'ENOENT' || code === 'ENOTDIR';
|
|
100
|
+
// A dangling symlink exists by name: it is not a missing file to accept.
|
|
101
|
+
const dangling = await fs.lstat(raw).then(() => true, () => false);
|
|
102
|
+
const target = missing && !dangling && options.allowMissing ? await resolveMissing(raw, rootReal) : null;
|
|
103
|
+
if (target)
|
|
104
|
+
accept(requested, target);
|
|
105
|
+
else
|
|
106
|
+
skipped.push({ path: requested, reason: missing ? 'not-found' : 'unreadable' });
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (!isWithin(rootReal, real)) {
|
|
110
|
+
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// stat, never open: a FIFO, device or directory is refused unread.
|
|
114
|
+
const stat = await fs.stat(real).catch(() => null);
|
|
115
|
+
if (!stat) {
|
|
116
|
+
skipped.push({ path: requested, reason: 'unreadable' });
|
|
117
|
+
}
|
|
118
|
+
else if (!(stat.isFile() || (options.allowDirectory && stat.isDirectory()))) {
|
|
119
|
+
skipped.push({ path: requested, reason: 'not-a-file' });
|
|
120
|
+
}
|
|
121
|
+
else if (options.maxBytes !== undefined && stat.size > options.maxBytes) {
|
|
122
|
+
skipped.push({ path: requested, reason: 'too-large' });
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
accept(requested, real);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { accepted, resolved, skipped };
|
|
129
|
+
}
|
|
130
|
+
function describe(value) {
|
|
131
|
+
if (value === null)
|
|
132
|
+
return 'null';
|
|
133
|
+
if (Array.isArray(value))
|
|
134
|
+
return 'array';
|
|
135
|
+
return typeof value;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Handler-side check for a payload path list: `value` must be an array of
|
|
139
|
+
* non-empty path strings, and every entry must pass confinePayloadPaths.
|
|
140
|
+
* Otherwise the whole request is refused and nothing is read. Returns the real
|
|
141
|
+
* paths that were checked; the handler reads those, not the payload strings.
|
|
142
|
+
* `taskType` and `field` name the payload in the error.
|
|
143
|
+
*/
|
|
144
|
+
export async function requirePayloadFiles(taskType, field, value, options = {}) {
|
|
145
|
+
const context = `Invalid ${taskType} payload`;
|
|
146
|
+
if (!Array.isArray(value)) {
|
|
147
|
+
return err(new CallerInputError(`${context}: '${field}' must be an array of file paths, got ${describe(value)}`));
|
|
148
|
+
}
|
|
149
|
+
for (let i = 0; i < value.length; i++) {
|
|
150
|
+
const entry = value[i];
|
|
151
|
+
if (typeof entry !== 'string' || entry.trim() === '') {
|
|
152
|
+
return err(new CallerInputError(`${context}: '${field}[${i}]' must be a non-empty string, got ${describe(entry)}`));
|
|
153
|
+
}
|
|
154
|
+
if (entry.includes('\0')) {
|
|
155
|
+
return err(new CallerInputError(`${context}: '${field}[${i}]' contains a null byte`));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const { resolved, skipped } = await confinePayloadPaths(value, options);
|
|
159
|
+
if (skipped.length > 0)
|
|
160
|
+
return err(refusal(context, field, skipped, options));
|
|
161
|
+
return ok(resolved);
|
|
162
|
+
}
|
|
163
|
+
function refusal(context, field, skipped, options) {
|
|
164
|
+
const limit = options.maxBytes !== undefined
|
|
165
|
+
? `, at most ${Math.round(options.maxBytes / (1024 * 1024))} MB each`
|
|
166
|
+
: '';
|
|
167
|
+
const kinds = options.allowDirectory ? 'regular files or directories' : 'regular files';
|
|
168
|
+
return new CallerInputError(`${context}: ${field} cannot be read: ${skipped.map(s => `${s.path} (${s.reason})`).join(', ')}. ` +
|
|
169
|
+
`Pass ${kinds} inside the project${limit}.`);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Handler-side check for one caller-named path (a file, or with
|
|
173
|
+
* allowDirectory a directory to walk). Returns the real path that was
|
|
174
|
+
* checked, which the handler reads instead of the payload string, or an error
|
|
175
|
+
* naming the reason without reading anything.
|
|
176
|
+
*/
|
|
177
|
+
export async function requirePayloadPath(taskType, field, value, options = {}) {
|
|
178
|
+
const context = `Invalid ${taskType} payload`;
|
|
179
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
180
|
+
return err(new CallerInputError(`${context}: '${field}' must be a non-empty path string, got ${describe(value)}`));
|
|
181
|
+
}
|
|
182
|
+
if (value.includes('\0')) {
|
|
183
|
+
return err(new CallerInputError(`${context}: '${field}' contains a null byte`));
|
|
184
|
+
}
|
|
185
|
+
const { resolved, skipped } = await confinePayloadPaths([value], options);
|
|
186
|
+
if (skipped.length > 0)
|
|
187
|
+
return err(refusal(context, field, skipped, options));
|
|
188
|
+
return ok(resolved[0]);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=payload-path-guard.js.map
|
package/dist/shared/llm/cache.js
CHANGED
|
@@ -316,7 +316,10 @@ export class LLMResponseCache {
|
|
|
316
316
|
* Cache a completion response
|
|
317
317
|
*/
|
|
318
318
|
setCompletion(prompt, response, options, ttlMs) {
|
|
319
|
-
|
|
319
|
+
// CompletionResponse does not carry finishReason. In particular, Gemini
|
|
320
|
+
// returns an empty completion for a safety refusal (#912). Return that
|
|
321
|
+
// result to its caller, but never pin it as a reusable completion.
|
|
322
|
+
if (!this.config.cacheCompletions || response.completion.length === 0) {
|
|
320
323
|
return;
|
|
321
324
|
}
|
|
322
325
|
const key = LLMCache.generateKey('completion', prompt, options);
|
|
@@ -278,7 +278,8 @@ export const DEFAULT_CATEGORY_CAPABILITIES = {
|
|
|
278
278
|
*/
|
|
279
279
|
export function getAgentRoutingCategory(agentType) {
|
|
280
280
|
// Direct lookup first
|
|
281
|
-
|
|
281
|
+
// #1136: own entries only; `constructor` is not an agent type.
|
|
282
|
+
if (Object.hasOwn(AGENT_CATEGORY_MAP, agentType)) {
|
|
282
283
|
return AGENT_CATEGORY_MAP[agentType];
|
|
283
284
|
}
|
|
284
285
|
// Pattern-based detection
|
|
@@ -246,7 +246,8 @@ export function validateToolDefinition(tool) {
|
|
|
246
246
|
const params = tool.parameters;
|
|
247
247
|
const props = params.properties || {};
|
|
248
248
|
for (const req of tool.required) {
|
|
249
|
-
|
|
249
|
+
// #1136: own properties only.
|
|
250
|
+
if (!Object.hasOwn(props, req)) {
|
|
250
251
|
errors.push(`Required parameter '${req}' not found in properties`);
|
|
251
252
|
}
|
|
252
253
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Detects security and compliance patterns in source code
|
|
4
4
|
*/
|
|
5
5
|
import { FileReader } from '../io/index.js';
|
|
6
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Pattern Definitions
|
|
8
9
|
// ============================================================================
|
|
@@ -156,7 +157,8 @@ const SECURITY_CONTROLS_PATTERNS = {
|
|
|
156
157
|
export class CompliancePatternAnalyzer {
|
|
157
158
|
fileReader;
|
|
158
159
|
constructor() {
|
|
159
|
-
|
|
160
|
+
// #1096: a symlink inside the project must not expose an outside file.
|
|
161
|
+
this.fileReader = new FileReader({ projectRoot: findProjectRoot() });
|
|
160
162
|
}
|
|
161
163
|
/**
|
|
162
164
|
* Analyze encryption patterns in files
|
|
@@ -35,6 +35,11 @@ export declare function jestExactPathPattern(file: string, cwd?: string): string
|
|
|
35
35
|
/**
|
|
36
36
|
* Literal test-name filter in `--flag=value` form. Mocha uses `--grep`; Jest
|
|
37
37
|
* and Vitest use `--testNamePattern` (the long form of `-t`).
|
|
38
|
+
*
|
|
39
|
+
* `testName` is the full name the runner reported (describe titles, then the
|
|
40
|
+
* test title). Runners match the filter against that name joined with ' '
|
|
41
|
+
* (Jest, Mocha, Vitest 3) or ' > ' (Vitest 4+), so each space matches either
|
|
42
|
+
* separator, and the name is anchored so a retry targets that one test (#1141).
|
|
38
43
|
*/
|
|
39
44
|
export declare function nameFilterArg(runner: NameFilterRunner, testName: string): string;
|
|
40
45
|
/** True when a command vector (runner command plus its arguments) runs Jest. */
|
|
@@ -62,9 +62,14 @@ export function jestExactPathPattern(file, cwd = process.cwd()) {
|
|
|
62
62
|
/**
|
|
63
63
|
* Literal test-name filter in `--flag=value` form. Mocha uses `--grep`; Jest
|
|
64
64
|
* and Vitest use `--testNamePattern` (the long form of `-t`).
|
|
65
|
+
*
|
|
66
|
+
* `testName` is the full name the runner reported (describe titles, then the
|
|
67
|
+
* test title). Runners match the filter against that name joined with ' '
|
|
68
|
+
* (Jest, Mocha, Vitest 3) or ' > ' (Vitest 4+), so each space matches either
|
|
69
|
+
* separator, and the name is anchored so a retry targets that one test (#1141).
|
|
65
70
|
*/
|
|
66
71
|
export function nameFilterArg(runner, testName) {
|
|
67
|
-
const pattern = escapeRegExpLiteral(
|
|
72
|
+
const pattern = `^${testName.split(' ').map(escapeRegExpLiteral).join('(?: > | )')}$`;
|
|
68
73
|
return runner === 'mocha' ? `--grep=${pattern}` : `--testNamePattern=${pattern}`;
|
|
69
74
|
}
|
|
70
75
|
/** True when a command vector (runner command plus its arguments) runs Jest. */
|
|
@@ -7,4 +7,36 @@ export declare function trackTestRunnerExit(proc: ChildProcess): () => void;
|
|
|
7
7
|
* Windows uses taskkill's tree operation while the root PID still exists.
|
|
8
8
|
*/
|
|
9
9
|
export declare function terminateTestRunner(proc: ChildProcess): Promise<void>;
|
|
10
|
+
/** The `spawnSync` result fields a test-runner caller reads. */
|
|
11
|
+
export interface TestRunnerProcessResult {
|
|
12
|
+
status: number | null;
|
|
13
|
+
signal: NodeJS.Signals | null;
|
|
14
|
+
stdout: string;
|
|
15
|
+
stderr: string;
|
|
16
|
+
error?: NodeJS.ErrnoException;
|
|
17
|
+
}
|
|
18
|
+
export interface TestRunnerProcessOptions {
|
|
19
|
+
cwd: string;
|
|
20
|
+
/** Kill the runner and report ETIMEDOUT after this many milliseconds. */
|
|
21
|
+
timeout: number;
|
|
22
|
+
env?: NodeJS.ProcessEnv;
|
|
23
|
+
/** Per-stream output limit; exceeding it kills the runner (ENOBUFS). */
|
|
24
|
+
maxBuffer?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* #1074: run a test runner without blocking the event loop. Resolves with the
|
|
28
|
+
* same fields and failure semantics `spawnSync` reports: exit status or
|
|
29
|
+
* terminating signal, captured UTF-8 stdout/stderr, an ETIMEDOUT error after
|
|
30
|
+
* `timeout`, an ENOBUFS error once a stream exceeds `maxBuffer`, and the
|
|
31
|
+
* spawn error itself when the command cannot start. The runner gets its own
|
|
32
|
+
* process group, so a timeout or overflow stops the whole `npx` tree before
|
|
33
|
+
* the promise settles and before any report file is removed.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runTestRunnerProcess(command: string, args: readonly string[], options: TestRunnerProcessOptions): Promise<TestRunnerProcessResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Stdout of a command that must exit 0, run like runTestRunnerProcess (no
|
|
38
|
+
* blocking, process-group stop on timeout). Rejects with the ETIMEDOUT,
|
|
39
|
+
* ENOBUFS or spawn error, or with an error carrying `status` and `stderr`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runProcessText(command: string, args: readonly string[], options: TestRunnerProcessOptions): Promise<string>;
|
|
10
42
|
//# sourceMappingURL=test-runner-process.d.ts.map
|
|
@@ -207,4 +207,109 @@ export function terminateTestRunner(proc) {
|
|
|
207
207
|
}
|
|
208
208
|
});
|
|
209
209
|
}
|
|
210
|
+
/** `spawnSync`'s default per-stream output limit. */
|
|
211
|
+
const DEFAULT_MAX_BUFFER = 1024 * 1024;
|
|
212
|
+
/** Longest wait for the runner's pipes to close after it has been stopped. */
|
|
213
|
+
const PIPE_RELEASE_GRACE_MS = 3000;
|
|
214
|
+
/**
|
|
215
|
+
* #1074: run a test runner without blocking the event loop. Resolves with the
|
|
216
|
+
* same fields and failure semantics `spawnSync` reports: exit status or
|
|
217
|
+
* terminating signal, captured UTF-8 stdout/stderr, an ETIMEDOUT error after
|
|
218
|
+
* `timeout`, an ENOBUFS error once a stream exceeds `maxBuffer`, and the
|
|
219
|
+
* spawn error itself when the command cannot start. The runner gets its own
|
|
220
|
+
* process group, so a timeout or overflow stops the whole `npx` tree before
|
|
221
|
+
* the promise settles and before any report file is removed.
|
|
222
|
+
*/
|
|
223
|
+
export function runTestRunnerProcess(command, args, options) {
|
|
224
|
+
const maxBuffer = options.maxBuffer ?? DEFAULT_MAX_BUFFER;
|
|
225
|
+
return new Promise(resolve => {
|
|
226
|
+
let stdout = '';
|
|
227
|
+
let stderr = '';
|
|
228
|
+
let error;
|
|
229
|
+
let stopping;
|
|
230
|
+
let releaseTimer;
|
|
231
|
+
let settled = false;
|
|
232
|
+
let proc;
|
|
233
|
+
try {
|
|
234
|
+
proc = spawn(command, [...args], {
|
|
235
|
+
cwd: options.cwd,
|
|
236
|
+
env: options.env ?? process.env,
|
|
237
|
+
detached: process.platform !== 'win32',
|
|
238
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (spawnError) {
|
|
242
|
+
resolve({ status: null, signal: null, stdout, stderr, error: spawnError });
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const untrackExit = trackTestRunnerExit(proc);
|
|
246
|
+
const settle = (status, signal) => {
|
|
247
|
+
if (settled)
|
|
248
|
+
return;
|
|
249
|
+
settled = true;
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
clearTimeout(releaseTimer);
|
|
252
|
+
// Report the signal the runner was stopped with, as spawnSync does.
|
|
253
|
+
const stoppedWith = stopping && !signal ? 'SIGTERM' : signal;
|
|
254
|
+
const result = { status: stopping ? null : status, signal: stoppedWith, stdout, stderr, error };
|
|
255
|
+
const done = () => { untrackExit(); resolve(result); };
|
|
256
|
+
if (stopping)
|
|
257
|
+
stopping.then(done, done);
|
|
258
|
+
else
|
|
259
|
+
done();
|
|
260
|
+
};
|
|
261
|
+
const stop = (code, message) => {
|
|
262
|
+
if (stopping)
|
|
263
|
+
return;
|
|
264
|
+
error = Object.assign(new Error(message), { code, syscall: `spawnSync ${command}` });
|
|
265
|
+
stopping = terminateTestRunner(proc);
|
|
266
|
+
// spawnSync closes the runner's pipes when it kills it. Do the same once
|
|
267
|
+
// the runner is stopped, or after a grace period, so a descendant that
|
|
268
|
+
// left the process group (e.g. a detached server holding the inherited
|
|
269
|
+
// stdout) cannot keep 'close', and so the result, pending forever.
|
|
270
|
+
const release = () => {
|
|
271
|
+
proc.stdout?.destroy();
|
|
272
|
+
proc.stderr?.destroy();
|
|
273
|
+
};
|
|
274
|
+
stopping.then(release, release);
|
|
275
|
+
releaseTimer = setTimeout(release, PIPE_RELEASE_GRACE_MS);
|
|
276
|
+
};
|
|
277
|
+
const timer = setTimeout(() => stop('ETIMEDOUT', `spawnSync ${command} ETIMEDOUT`), options.timeout);
|
|
278
|
+
const collect = (stream) => (chunk) => {
|
|
279
|
+
if (stopping)
|
|
280
|
+
return;
|
|
281
|
+
const next = (stream === 'stdout' ? stdout : stderr) + chunk;
|
|
282
|
+
const kept = next.length > maxBuffer ? next.slice(0, maxBuffer) : next;
|
|
283
|
+
if (stream === 'stdout')
|
|
284
|
+
stdout = kept;
|
|
285
|
+
else
|
|
286
|
+
stderr = kept;
|
|
287
|
+
if (next.length > maxBuffer)
|
|
288
|
+
stop('ENOBUFS', `spawnSync ${command} ENOBUFS`);
|
|
289
|
+
};
|
|
290
|
+
proc.stdout?.setEncoding('utf8').on('data', collect('stdout'));
|
|
291
|
+
proc.stderr?.setEncoding('utf8').on('data', collect('stderr'));
|
|
292
|
+
proc.once('error', (spawnError) => {
|
|
293
|
+
error ??= spawnError;
|
|
294
|
+
// A runner that never started emits no 'close' with a status to wait for.
|
|
295
|
+
if (proc.pid === undefined)
|
|
296
|
+
settle(null, null);
|
|
297
|
+
});
|
|
298
|
+
proc.once('close', (status, signal) => settle(status, signal));
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Stdout of a command that must exit 0, run like runTestRunnerProcess (no
|
|
303
|
+
* blocking, process-group stop on timeout). Rejects with the ETIMEDOUT,
|
|
304
|
+
* ENOBUFS or spawn error, or with an error carrying `status` and `stderr`.
|
|
305
|
+
*/
|
|
306
|
+
export async function runProcessText(command, args, options) {
|
|
307
|
+
const result = await runTestRunnerProcess(command, args, options);
|
|
308
|
+
if (result.error)
|
|
309
|
+
throw result.error;
|
|
310
|
+
if (result.status !== 0) {
|
|
311
|
+
throw Object.assign(new Error(`${command} exited with ${result.status ?? result.signal}: ${result.stderr.trim()}`), { status: result.status, stderr: result.stderr });
|
|
312
|
+
}
|
|
313
|
+
return result.stdout;
|
|
314
|
+
}
|
|
210
315
|
//# sourceMappingURL=test-runner-process.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* A runner or suite error is not an assertion result. Its message carries
|
|
3
|
+
* runner output and is returned over MCP, so it is redacted (#1122).
|
|
4
|
+
*/
|
|
2
5
|
export declare class TestRunnerExecutionError extends Error {
|
|
3
6
|
constructor(message: string);
|
|
4
7
|
}
|
|
@@ -19,6 +22,11 @@ interface RunnerReport {
|
|
|
19
22
|
}>;
|
|
20
23
|
}>;
|
|
21
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Runner output quoted in an error, redacted before it is cut so a secret
|
|
27
|
+
* that straddles the cut cannot survive half-matched (#1122).
|
|
28
|
+
*/
|
|
29
|
+
export declare function capDiagnostics(text: string, maxLength?: number): string;
|
|
22
30
|
/**
|
|
23
31
|
* Preserve ordinary assertion failures, but reject incomplete/failed execution
|
|
24
32
|
* that assertion counts cannot represent. Process status is authoritative even
|
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
import { redactLogText } from '../logging/redaction.js';
|
|
2
|
+
/**
|
|
3
|
+
* A runner or suite error is not an assertion result. Its message carries
|
|
4
|
+
* runner output and is returned over MCP, so it is redacted (#1122).
|
|
5
|
+
*/
|
|
2
6
|
export class TestRunnerExecutionError extends Error {
|
|
3
7
|
constructor(message) {
|
|
4
|
-
super(message);
|
|
8
|
+
super(redactLogText(message, Number.POSITIVE_INFINITY));
|
|
5
9
|
this.name = 'TestRunnerExecutionError';
|
|
6
10
|
}
|
|
7
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Runner output quoted in an error, redacted before it is cut so a secret
|
|
14
|
+
* that straddles the cut cannot survive half-matched (#1122).
|
|
15
|
+
*/
|
|
16
|
+
export function capDiagnostics(text, maxLength = 4000) {
|
|
17
|
+
return redactLogText(text, Number.POSITIVE_INFINITY).slice(0, maxLength);
|
|
18
|
+
}
|
|
8
19
|
/**
|
|
9
20
|
* Preserve ordinary assertion failures, but reject incomplete/failed execution
|
|
10
21
|
* that assertion counts cannot represent. Process status is authoritative even
|
|
@@ -36,8 +47,8 @@ export function getTestRunnerExecutionError(runner, files, exitCode, counts, out
|
|
|
36
47
|
const diagnostics = [
|
|
37
48
|
...suiteErrors.map(suite => suite.message).filter(Boolean),
|
|
38
49
|
output.trim(),
|
|
39
|
-
].filter(Boolean).join('\n')
|
|
50
|
+
].filter(Boolean).join('\n');
|
|
40
51
|
return new TestRunnerExecutionError(`${runner} ${reason} for ${files} (exit code ${exitCode ?? 'unknown'}).` +
|
|
41
|
-
(diagnostics ? `\n${diagnostics}` : ''));
|
|
52
|
+
(diagnostics ? `\n${capDiagnostics(diagnostics)}` : ''));
|
|
42
53
|
}
|
|
43
54
|
//# sourceMappingURL=test-runner-verdict.js.map
|
|
@@ -69,6 +69,15 @@ export interface QualityScore {
|
|
|
69
69
|
}
|
|
70
70
|
export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
71
71
|
export type Priority = 'p0' | 'p1' | 'p2' | 'p3';
|
|
72
|
+
export declare const ALL_PRIORITIES: readonly Priority[];
|
|
73
|
+
/**
|
|
74
|
+
* Type guard for a user-supplied task priority (CLI flags, MCP arguments).
|
|
75
|
+
* Validate at the boundary so an unknown priority is rejected instead of being
|
|
76
|
+
* silently accepted (#1108).
|
|
77
|
+
*/
|
|
78
|
+
export declare function isPriority(value: unknown): value is Priority;
|
|
79
|
+
/** Shared rejection message so `task_submit` and `aqe task submit` stay in parity (#1108). */
|
|
80
|
+
export declare function invalidPriorityMessage(value: unknown): string;
|
|
72
81
|
export interface DomainConfig {
|
|
73
82
|
enabled: boolean;
|
|
74
83
|
maxAgents: number;
|
|
@@ -32,4 +32,17 @@ export function ok(value) {
|
|
|
32
32
|
export function err(error) {
|
|
33
33
|
return { success: false, error };
|
|
34
34
|
}
|
|
35
|
+
export const ALL_PRIORITIES = ['p0', 'p1', 'p2', 'p3'];
|
|
36
|
+
/**
|
|
37
|
+
* Type guard for a user-supplied task priority (CLI flags, MCP arguments).
|
|
38
|
+
* Validate at the boundary so an unknown priority is rejected instead of being
|
|
39
|
+
* silently accepted (#1108).
|
|
40
|
+
*/
|
|
41
|
+
export function isPriority(value) {
|
|
42
|
+
return typeof value === 'string' && ALL_PRIORITIES.includes(value);
|
|
43
|
+
}
|
|
44
|
+
/** Shared rejection message so `task_submit` and `aqe task submit` stay in parity (#1108). */
|
|
45
|
+
export function invalidPriorityMessage(value) {
|
|
46
|
+
return `Invalid priority: ${String(value)}. Valid priorities: ${ALL_PRIORITIES.join(', ')}`;
|
|
47
|
+
}
|
|
35
48
|
//# sourceMappingURL=index.js.map
|