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
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* Directed acyclic graph where nodes are tasks and edges represent
|
|
6
6
|
* "blocked-by" dependencies. Topological sort via Kahn's algorithm,
|
|
7
7
|
* cycle detection via DFS coloring, critical path via longest-path DP.
|
|
8
|
+
*
|
|
9
|
+
* Issue #1069: every prerequisite edge carries a typed disposition backed
|
|
10
|
+
* by an immutable PrerequisiteReceiptV1. A dependent becomes ready only
|
|
11
|
+
* when every edge is SATISFIED or WAIVED. Removing an unfinished
|
|
12
|
+
* prerequisite leaves a REMOVED tombstone and keeps dependents blocked.
|
|
8
13
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
NodeColor[NodeColor["Gray"] = 1] = "Gray";
|
|
14
|
-
NodeColor[NodeColor["Black"] = 2] = "Black";
|
|
15
|
-
})(NodeColor || (NodeColor = {}));
|
|
14
|
+
import { randomUUID } from 'node:crypto';
|
|
15
|
+
import { criticalPath, findCycles, topologicalSort } from './dag-algorithms.js';
|
|
16
|
+
import { PrerequisiteLedger, TERMINAL_STATUSES as TERMINAL, validateWaiverInput } from './prerequisite-ledger.js';
|
|
17
|
+
import { authorizeWaiver, countStatuses, initialDisposition } from './dag-obligations.js';
|
|
16
18
|
/**
|
|
17
19
|
* Directed acyclic graph for task dependency management.
|
|
18
20
|
*
|
|
@@ -24,15 +26,31 @@ export class TaskDAG {
|
|
|
24
26
|
forwardEdges = new Map();
|
|
25
27
|
reverseEdges = new Map();
|
|
26
28
|
eventHandlers = [];
|
|
29
|
+
ledger;
|
|
30
|
+
waiverPolicy;
|
|
31
|
+
constructor(options = {}) {
|
|
32
|
+
this.ledger = new PrerequisiteLedger(options.graphId ?? `dag-${randomUUID()}`);
|
|
33
|
+
this.waiverPolicy = options.waiverPolicy;
|
|
34
|
+
}
|
|
35
|
+
/** Stable identity of this graph, stamped on every receipt. */
|
|
36
|
+
get graphId() {
|
|
37
|
+
return this.ledger.graphId;
|
|
38
|
+
}
|
|
39
|
+
/** Monotonically increasing revision; advances on every mutation. */
|
|
40
|
+
get graphRevision() {
|
|
41
|
+
return this.ledger.graphRevision;
|
|
42
|
+
}
|
|
27
43
|
/**
|
|
28
|
-
* Add a task to the DAG. Status is 'ready' if
|
|
29
|
-
* otherwise 'blocked'.
|
|
44
|
+
* Add a task to the DAG. Status is 'ready' if every prerequisite is
|
|
45
|
+
* SATISFIED, otherwise 'blocked'. Prerequisites not yet in the graph are
|
|
46
|
+
* recorded as MISSING until they are added.
|
|
30
47
|
* @throws Error if a task with the same ID already exists
|
|
31
48
|
*/
|
|
32
49
|
addTask(input) {
|
|
33
50
|
if (this.nodes.has(input.id)) {
|
|
34
51
|
throw new Error(`Task '${input.id}' already exists in the DAG`);
|
|
35
52
|
}
|
|
53
|
+
this.ledger.bump();
|
|
36
54
|
const blockedBy = input.blockedBy ?? [];
|
|
37
55
|
this.forwardEdges.set(input.id, new Set(blockedBy));
|
|
38
56
|
if (!this.reverseEdges.has(input.id)) {
|
|
@@ -44,14 +62,23 @@ export class TaskDAG {
|
|
|
44
62
|
}
|
|
45
63
|
this.reverseEdges.get(blockerId).add(input.id);
|
|
46
64
|
}
|
|
47
|
-
|
|
65
|
+
this.ledger.addObligation(input.id);
|
|
66
|
+
for (const blockerId of new Set(blockedBy)) {
|
|
67
|
+
const blocker = this.nodes.get(blockerId);
|
|
68
|
+
this.ledger.record(input.id, blockerId, initialDisposition(blocker, this.ledger.isTombstoned(blockerId)), {
|
|
69
|
+
completionEvidenceRef: blocker?.status === 'completed' ? blocker.evidenceRef : undefined,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Blocks array: tasks already in graph that depend on this one.
|
|
73
|
+
// Their MISSING/REMOVED edges are now materialized as UNRESOLVED.
|
|
48
74
|
const blocks = [];
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
for (const depId of this.reverseEdges.get(input.id) ?? []) {
|
|
76
|
+
blocks.push(depId);
|
|
77
|
+
const d = this.ledger.disposition(depId, input.id);
|
|
78
|
+
if (d === 'MISSING' || d === 'REMOVED')
|
|
79
|
+
this.ledger.record(depId, input.id, 'UNRESOLVED');
|
|
53
80
|
}
|
|
54
|
-
const status = this.computeStatus(
|
|
81
|
+
const status = this.computeStatus(input.id);
|
|
55
82
|
const task = {
|
|
56
83
|
id: input.id,
|
|
57
84
|
name: input.name,
|
|
@@ -77,54 +104,43 @@ export class TaskDAG {
|
|
|
77
104
|
return task;
|
|
78
105
|
}
|
|
79
106
|
/**
|
|
80
|
-
* Remove a task
|
|
107
|
+
* Remove a task. A lifecycle operation, not an obligation resolution:
|
|
108
|
+
* dependents keep the edge. An unfinished task's unresolved dependent
|
|
109
|
+
* edges become REMOVED and dependents stay blocked until it is re-added
|
|
110
|
+
* and completed, or the edge is waived. SATISFIED edges survive removal,
|
|
111
|
+
* and the task stays in the obligation denominator as a tombstone.
|
|
81
112
|
* @returns true if removed, false if not found
|
|
113
|
+
* @throws GraphRevisionConflictError if options.expectedRevision is stale
|
|
82
114
|
*/
|
|
83
|
-
removeTask(taskId) {
|
|
84
|
-
|
|
115
|
+
removeTask(taskId, options = {}) {
|
|
116
|
+
const task = this.nodes.get(taskId);
|
|
117
|
+
if (!task)
|
|
85
118
|
return false;
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (reverse) {
|
|
104
|
-
for (const depId of reverse) {
|
|
105
|
-
this.forwardEdges.get(depId)?.delete(taskId);
|
|
106
|
-
const dep = this.nodes.get(depId);
|
|
107
|
-
if (dep) {
|
|
108
|
-
this.nodes.set(depId, {
|
|
109
|
-
...dep,
|
|
110
|
-
blockedBy: dep.blockedBy.filter((id) => id !== taskId),
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
const updated = this.nodes.get(depId);
|
|
114
|
-
if (updated && (updated.status === 'blocked' || updated.status === 'pending')) {
|
|
115
|
-
if (this.computeStatus(Array.from(this.forwardEdges.get(depId) ?? [])) === 'ready') {
|
|
116
|
-
this.setStatus(depId, 'ready');
|
|
117
|
-
unblockedIds.push(depId);
|
|
118
|
-
}
|
|
119
|
+
this.ledger.checkRevision(options.expectedRevision);
|
|
120
|
+
const revision = this.ledger.bump();
|
|
121
|
+
// Detach the removed node's own edges to its blockers
|
|
122
|
+
for (const blockerId of this.forwardEdges.get(taskId) ?? []) {
|
|
123
|
+
this.reverseEdges.get(blockerId)?.delete(taskId);
|
|
124
|
+
const blocker = this.nodes.get(blockerId);
|
|
125
|
+
if (blocker)
|
|
126
|
+
this.nodes.set(blockerId, { ...blocker, blocks: blocker.blocks.filter((id) => id !== taskId) });
|
|
127
|
+
}
|
|
128
|
+
this.ledger.dropEdgesOf(taskId);
|
|
129
|
+
// Fail closed: dependents keep the edge; unfinished work becomes REMOVED
|
|
130
|
+
const affected = [];
|
|
131
|
+
if (task.status !== 'completed') {
|
|
132
|
+
for (const depId of this.reverseEdges.get(taskId) ?? []) {
|
|
133
|
+
if (this.nodes.has(depId) && this.ledger.disposition(depId, taskId) === 'UNRESOLVED') {
|
|
134
|
+
this.ledger.record(depId, taskId, 'REMOVED');
|
|
135
|
+
affected.push(depId);
|
|
119
136
|
}
|
|
120
137
|
}
|
|
121
138
|
}
|
|
139
|
+
this.ledger.tombstone(taskId, task.status);
|
|
122
140
|
this.forwardEdges.delete(taskId);
|
|
123
|
-
this.reverseEdges.delete(taskId);
|
|
124
141
|
this.nodes.delete(taskId);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
142
|
+
// reverseEdges[taskId] is kept so dependents stay linked to the tombstone
|
|
143
|
+
this.emit({ type: 'task-removed', taskId, affectedTaskIds: affected, graphRevision: revision, timestamp: Date.now() });
|
|
128
144
|
return true;
|
|
129
145
|
}
|
|
130
146
|
/** Get a task by ID. */
|
|
@@ -149,6 +165,7 @@ export class TaskDAG {
|
|
|
149
165
|
if (task.status !== 'ready') {
|
|
150
166
|
throw new Error(`Cannot start '${taskId}': status '${task.status}', expected 'ready'`);
|
|
151
167
|
}
|
|
168
|
+
this.ledger.bump();
|
|
152
169
|
this.nodes.set(taskId, {
|
|
153
170
|
...task,
|
|
154
171
|
status: 'in_progress',
|
|
@@ -157,18 +174,27 @@ export class TaskDAG {
|
|
|
157
174
|
});
|
|
158
175
|
}
|
|
159
176
|
/**
|
|
160
|
-
* Mark a task completed
|
|
177
|
+
* Mark a task completed, record SATISFIED on its dependent edges, and
|
|
178
|
+
* unblock dependents whose edges are all SATISFIED or WAIVED.
|
|
161
179
|
* @returns Array of newly unblocked task IDs
|
|
162
180
|
* @throws Error if task not found or not 'in_progress'
|
|
181
|
+
* @throws GraphRevisionConflictError if options.expectedRevision is stale
|
|
163
182
|
*/
|
|
164
|
-
complete(taskId, result) {
|
|
183
|
+
complete(taskId, result, options = {}) {
|
|
165
184
|
const task = this.requireTask(taskId);
|
|
166
185
|
if (task.status !== 'in_progress') {
|
|
167
186
|
throw new Error(`Cannot complete '${taskId}': status '${task.status}', expected 'in_progress'`);
|
|
168
187
|
}
|
|
188
|
+
const evidenceRef = options.evidenceRef;
|
|
189
|
+
if (evidenceRef !== undefined && (typeof evidenceRef !== 'string' || evidenceRef.trim() === '')) {
|
|
190
|
+
throw new Error(`Cannot complete '${taskId}': evidenceRef must be a non-empty string`);
|
|
191
|
+
}
|
|
192
|
+
this.ledger.checkRevision(options.expectedRevision);
|
|
193
|
+
this.ledger.bump();
|
|
169
194
|
const now = Date.now();
|
|
170
|
-
this.nodes.set(taskId, { ...task, status: 'completed', completedAt: now, result });
|
|
195
|
+
this.nodes.set(taskId, { ...task, status: 'completed', completedAt: now, result, evidenceRef });
|
|
171
196
|
this.emit({ type: 'task-completed', taskId, timestamp: now });
|
|
197
|
+
this.recordOnDependents(taskId, 'SATISFIED', ['UNRESOLVED', 'WAIVED'], evidenceRef);
|
|
172
198
|
const unblockedIds = this.unblockDependents(taskId);
|
|
173
199
|
if (unblockedIds.length > 0) {
|
|
174
200
|
this.emit({ type: 'tasks-unblocked', unblockedTaskIds: unblockedIds, timestamp: Date.now() });
|
|
@@ -176,7 +202,8 @@ export class TaskDAG {
|
|
|
176
202
|
return unblockedIds;
|
|
177
203
|
}
|
|
178
204
|
/**
|
|
179
|
-
* Mark a task failed
|
|
205
|
+
* Mark a task failed, record FAILED on its unresolved dependent edges,
|
|
206
|
+
* and cascade cancellation to dependents.
|
|
180
207
|
* @throws Error if task not found or not in 'in_progress'/'ready'
|
|
181
208
|
*/
|
|
182
209
|
fail(taskId, error) {
|
|
@@ -184,71 +211,88 @@ export class TaskDAG {
|
|
|
184
211
|
if (task.status !== 'in_progress' && task.status !== 'ready') {
|
|
185
212
|
throw new Error(`Cannot fail '${taskId}': status '${task.status}', expected 'in_progress' or 'ready'`);
|
|
186
213
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
214
|
+
this.terminate(task, 'failed', error);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Cancel a non-terminal task, record CANCELLED on its unresolved
|
|
218
|
+
* dependent edges, and cascade cancellation to dependents.
|
|
219
|
+
* @throws Error if task not found or already terminal
|
|
220
|
+
*/
|
|
221
|
+
cancel(taskId, reason) {
|
|
222
|
+
const task = this.requireTask(taskId);
|
|
223
|
+
if (TERMINAL.has(task.status)) {
|
|
224
|
+
throw new Error(`Cannot cancel '${taskId}': status '${task.status}' is terminal`);
|
|
225
|
+
}
|
|
226
|
+
this.terminate(task, 'cancelled', reason);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Explicitly waive one prerequisite edge. This is the only way a
|
|
230
|
+
* dependent becomes ready without a SATISFIED receipt. The original edge
|
|
231
|
+
* is kept and a WAIVED receipt carries actor, reason, authority and time.
|
|
232
|
+
* @returns The WAIVED receipt
|
|
233
|
+
* @throws PrerequisiteWaiverError on invalid input, unknown edge,
|
|
234
|
+
* already-resolved edge, terminal dependent, or policy rejection
|
|
235
|
+
* @throws GraphRevisionConflictError if expectedRevision is stale
|
|
236
|
+
*/
|
|
237
|
+
waivePrerequisite(input) {
|
|
238
|
+
const req = validateWaiverInput(input);
|
|
239
|
+
const task = this.nodes.get(req.taskId);
|
|
240
|
+
const baseRevision = this.ledger.graphRevision;
|
|
241
|
+
authorizeWaiver(this.ledger, this.waiverPolicy, req, task, this.forwardEdges.get(req.taskId));
|
|
242
|
+
// A policy that mutated the graph invalidates the decision it just made
|
|
243
|
+
this.ledger.checkRevision(baseRevision);
|
|
244
|
+
const revision = this.ledger.bump();
|
|
245
|
+
const receipt = this.ledger.record(req.taskId, req.prerequisiteId, 'WAIVED', {
|
|
246
|
+
waiver: {
|
|
247
|
+
actor: req.actor,
|
|
248
|
+
reason: req.reason,
|
|
249
|
+
...(req.authorityRef !== undefined ? { authorityRef: req.authorityRef } : {}),
|
|
250
|
+
issuedAt: new Date().toISOString(),
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
const { taskId, prerequisiteId } = req;
|
|
254
|
+
this.emit({ type: 'prerequisite-waived', taskId, prerequisiteId, graphRevision: revision, timestamp: Date.now() });
|
|
255
|
+
// Re-read: an event handler may have changed the task (e.g. cancelled it)
|
|
256
|
+
const latest = this.nodes.get(taskId);
|
|
257
|
+
if ((latest?.status === 'blocked' || latest?.status === 'pending') && this.computeStatus(taskId) === 'ready') {
|
|
258
|
+
this.setStatus(taskId, 'ready');
|
|
259
|
+
this.emit({ type: 'tasks-unblocked', unblockedTaskIds: [taskId], timestamp: Date.now() });
|
|
260
|
+
}
|
|
261
|
+
return receipt;
|
|
262
|
+
}
|
|
263
|
+
/** Current disposition of every prerequisite edge of a task. */
|
|
264
|
+
getPrerequisiteDispositions(taskId) {
|
|
265
|
+
return this.ledger.edgesOf(taskId, this.forwardEdges.get(taskId) ?? []);
|
|
266
|
+
}
|
|
267
|
+
/** Prerequisite edges that currently prevent a task from being ready. */
|
|
268
|
+
getBlockers(taskId) {
|
|
269
|
+
return this.getPrerequisiteDispositions(taskId).filter((e) => e.disposition !== 'SATISFIED' && e.disposition !== 'WAIVED');
|
|
270
|
+
}
|
|
271
|
+
/** Append-only receipt log, optionally filtered by dependent or prerequisite. */
|
|
272
|
+
getReceipts(filter) {
|
|
273
|
+
return this.ledger.receipts(filter);
|
|
274
|
+
}
|
|
275
|
+
/** Tombstones for tasks removed from the graph. */
|
|
276
|
+
getRemovedTasks() {
|
|
277
|
+
return this.ledger.removedTasks();
|
|
278
|
+
}
|
|
279
|
+
/** Obligation accounting against the original task denominator. */
|
|
280
|
+
getObligationSummary() {
|
|
281
|
+
return this.ledger.summarize(this.nodes.values());
|
|
191
282
|
}
|
|
192
283
|
/**
|
|
193
284
|
* Topological sort using Kahn's algorithm.
|
|
194
285
|
* @throws Error if cycles exist
|
|
195
286
|
*/
|
|
196
287
|
topologicalSort() {
|
|
197
|
-
|
|
198
|
-
for (const nodeId of this.nodes.keys()) {
|
|
199
|
-
let count = 0;
|
|
200
|
-
const fwd = this.forwardEdges.get(nodeId);
|
|
201
|
-
if (fwd) {
|
|
202
|
-
for (const dep of fwd) {
|
|
203
|
-
if (this.nodes.has(dep))
|
|
204
|
-
count++;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
inDegree.set(nodeId, count);
|
|
208
|
-
}
|
|
209
|
-
const queue = [];
|
|
210
|
-
for (const [id, deg] of inDegree) {
|
|
211
|
-
if (deg === 0)
|
|
212
|
-
queue.push(id);
|
|
213
|
-
}
|
|
214
|
-
const sorted = [];
|
|
215
|
-
while (queue.length > 0) {
|
|
216
|
-
const nodeId = queue.shift();
|
|
217
|
-
const task = this.nodes.get(nodeId);
|
|
218
|
-
if (task)
|
|
219
|
-
sorted.push(task);
|
|
220
|
-
const dependents = this.reverseEdges.get(nodeId);
|
|
221
|
-
if (dependents) {
|
|
222
|
-
for (const depId of dependents) {
|
|
223
|
-
if (!this.nodes.has(depId))
|
|
224
|
-
continue;
|
|
225
|
-
const newDeg = (inDegree.get(depId) ?? 0) - 1;
|
|
226
|
-
inDegree.set(depId, newDeg);
|
|
227
|
-
if (newDeg === 0)
|
|
228
|
-
queue.push(depId);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
if (sorted.length !== this.nodes.size) {
|
|
233
|
-
throw new Error(`Cycle detected: sorted ${sorted.length} of ${this.nodes.size} tasks`);
|
|
234
|
-
}
|
|
235
|
-
return sorted;
|
|
288
|
+
return topologicalSort(this.graphView());
|
|
236
289
|
}
|
|
237
290
|
/**
|
|
238
291
|
* Detect cycles using DFS with white/gray/black coloring.
|
|
239
292
|
* @returns Array of cycles, or null if acyclic
|
|
240
293
|
*/
|
|
241
294
|
detectCycles() {
|
|
242
|
-
const
|
|
243
|
-
const parent = new Map();
|
|
244
|
-
const cycles = [];
|
|
245
|
-
for (const id of this.nodes.keys())
|
|
246
|
-
color.set(id, NodeColor.White);
|
|
247
|
-
for (const id of this.nodes.keys()) {
|
|
248
|
-
if (color.get(id) === NodeColor.White) {
|
|
249
|
-
this.dfsCycles(id, color, parent, cycles);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
295
|
+
const cycles = findCycles(this.graphView());
|
|
252
296
|
if (cycles.length === 0)
|
|
253
297
|
return null;
|
|
254
298
|
this.emit({ type: 'cycle-detected', cycleNodes: cycles.flat(), timestamp: Date.now() });
|
|
@@ -259,98 +303,29 @@ export class TaskDAG {
|
|
|
259
303
|
* @returns Tasks on the critical path in execution order
|
|
260
304
|
*/
|
|
261
305
|
getCriticalPath() {
|
|
262
|
-
|
|
263
|
-
return [];
|
|
264
|
-
let sorted;
|
|
265
|
-
try {
|
|
266
|
-
sorted = this.topologicalSort();
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
return [];
|
|
270
|
-
}
|
|
271
|
-
const dist = new Map();
|
|
272
|
-
const pred = new Map();
|
|
273
|
-
for (const t of sorted) {
|
|
274
|
-
dist.set(t.id, 1);
|
|
275
|
-
pred.set(t.id, null);
|
|
276
|
-
}
|
|
277
|
-
for (const task of sorted) {
|
|
278
|
-
const d = dist.get(task.id);
|
|
279
|
-
const deps = this.reverseEdges.get(task.id);
|
|
280
|
-
if (deps) {
|
|
281
|
-
for (const depId of deps) {
|
|
282
|
-
if (!this.nodes.has(depId))
|
|
283
|
-
continue;
|
|
284
|
-
if (d + 1 > (dist.get(depId) ?? 1)) {
|
|
285
|
-
dist.set(depId, d + 1);
|
|
286
|
-
pred.set(depId, task.id);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
let maxDist = 0;
|
|
292
|
-
let endNode = null;
|
|
293
|
-
for (const [id, d] of dist) {
|
|
294
|
-
if (d > maxDist) {
|
|
295
|
-
maxDist = d;
|
|
296
|
-
endNode = id;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
if (!endNode)
|
|
300
|
-
return [];
|
|
301
|
-
const path = [];
|
|
302
|
-
let cur = endNode;
|
|
303
|
-
while (cur !== null) {
|
|
304
|
-
const t = this.nodes.get(cur);
|
|
305
|
-
if (t)
|
|
306
|
-
path.unshift(t);
|
|
307
|
-
cur = pred.get(cur) ?? null;
|
|
308
|
-
}
|
|
309
|
-
return path;
|
|
306
|
+
return criticalPath(this.graphView());
|
|
310
307
|
}
|
|
311
308
|
/** Get aggregate statistics about the DAG. */
|
|
312
309
|
getStats() {
|
|
313
|
-
let pending = 0, ready = 0, inProgress = 0, completed = 0;
|
|
314
|
-
let failed = 0, blocked = 0, cancelled = 0;
|
|
315
|
-
for (const task of this.nodes.values()) {
|
|
316
|
-
switch (task.status) {
|
|
317
|
-
case 'pending':
|
|
318
|
-
pending++;
|
|
319
|
-
break;
|
|
320
|
-
case 'ready':
|
|
321
|
-
ready++;
|
|
322
|
-
break;
|
|
323
|
-
case 'in_progress':
|
|
324
|
-
inProgress++;
|
|
325
|
-
break;
|
|
326
|
-
case 'completed':
|
|
327
|
-
completed++;
|
|
328
|
-
break;
|
|
329
|
-
case 'failed':
|
|
330
|
-
failed++;
|
|
331
|
-
break;
|
|
332
|
-
case 'blocked':
|
|
333
|
-
blocked++;
|
|
334
|
-
break;
|
|
335
|
-
case 'cancelled':
|
|
336
|
-
cancelled++;
|
|
337
|
-
break;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
310
|
return {
|
|
341
311
|
totalTasks: this.nodes.size,
|
|
342
|
-
|
|
312
|
+
...countStatuses(this.nodes.values()),
|
|
343
313
|
longestPath: this.getCriticalPath().length,
|
|
344
314
|
hasCycles: this.detectCycles() !== null,
|
|
345
315
|
};
|
|
346
316
|
}
|
|
347
|
-
/**
|
|
317
|
+
/**
|
|
318
|
+
* Remove all tasks, receipts and tombstones from the DAG. The graph
|
|
319
|
+
* revision keeps increasing so stale expectedRevision guards still fail.
|
|
320
|
+
*/
|
|
348
321
|
clear() {
|
|
322
|
+
this.ledger.bump();
|
|
349
323
|
this.nodes.clear();
|
|
350
324
|
this.forwardEdges.clear();
|
|
351
325
|
this.reverseEdges.clear();
|
|
326
|
+
this.ledger.reset();
|
|
352
327
|
}
|
|
353
|
-
/** Serialize the DAG
|
|
328
|
+
/** Serialize the DAG, its receipt log and tombstones. */
|
|
354
329
|
toJSON() {
|
|
355
330
|
const tasks = Array.from(this.nodes.values());
|
|
356
331
|
const edges = [];
|
|
@@ -358,7 +333,15 @@ export class TaskDAG {
|
|
|
358
333
|
for (const depId of deps)
|
|
359
334
|
edges.push({ from: depId, to: taskId });
|
|
360
335
|
}
|
|
361
|
-
return {
|
|
336
|
+
return {
|
|
337
|
+
graphId: this.graphId,
|
|
338
|
+
graphRevision: this.graphRevision,
|
|
339
|
+
tasks,
|
|
340
|
+
edges,
|
|
341
|
+
receipts: this.ledger.receipts(),
|
|
342
|
+
removedTasks: this.ledger.removedTasks(),
|
|
343
|
+
stats: this.getStats(),
|
|
344
|
+
};
|
|
362
345
|
}
|
|
363
346
|
/**
|
|
364
347
|
* Register a handler to receive DAG events.
|
|
@@ -373,21 +356,20 @@ export class TaskDAG {
|
|
|
373
356
|
};
|
|
374
357
|
}
|
|
375
358
|
// --- Internal helpers ---
|
|
359
|
+
graphView() {
|
|
360
|
+
return { nodes: this.nodes, forwardEdges: this.forwardEdges, reverseEdges: this.reverseEdges };
|
|
361
|
+
}
|
|
376
362
|
requireTask(taskId) {
|
|
377
363
|
const task = this.nodes.get(taskId);
|
|
378
364
|
if (!task)
|
|
379
365
|
throw new Error(`Task '${taskId}' not found in the DAG`);
|
|
380
366
|
return task;
|
|
381
367
|
}
|
|
382
|
-
computeStatus(
|
|
383
|
-
|
|
368
|
+
computeStatus(taskId) {
|
|
369
|
+
const blockers = this.forwardEdges.get(taskId);
|
|
370
|
+
if (!blockers || blockers.size === 0)
|
|
384
371
|
return 'ready';
|
|
385
|
-
|
|
386
|
-
const b = this.nodes.get(id);
|
|
387
|
-
if (!b || b.status !== 'completed')
|
|
388
|
-
return 'blocked';
|
|
389
|
-
}
|
|
390
|
-
return 'ready';
|
|
372
|
+
return this.ledger.allResolved(taskId, blockers) ? 'ready' : 'blocked';
|
|
391
373
|
}
|
|
392
374
|
setStatus(taskId, status) {
|
|
393
375
|
const task = this.nodes.get(taskId);
|
|
@@ -398,91 +380,55 @@ export class TaskDAG {
|
|
|
398
380
|
this.emit({ type: 'task-ready', taskId, timestamp: Date.now() });
|
|
399
381
|
}
|
|
400
382
|
}
|
|
383
|
+
/** Commit a failed/cancelled outcome and propagate it to dependent edges. */
|
|
384
|
+
terminate(task, status, error) {
|
|
385
|
+
this.ledger.bump();
|
|
386
|
+
const now = Date.now();
|
|
387
|
+
this.nodes.set(task.id, { ...task, status, completedAt: now, error });
|
|
388
|
+
this.emit({ type: status === 'failed' ? 'task-failed' : 'task-cancelled', taskId: task.id, timestamp: now });
|
|
389
|
+
this.recordOnDependents(task.id, status === 'failed' ? 'FAILED' : 'CANCELLED', ['UNRESOLVED']);
|
|
390
|
+
this.cascadeCancellation(task.id, status);
|
|
391
|
+
}
|
|
392
|
+
/** Record a disposition on every live dependent edge currently in `from`. */
|
|
393
|
+
recordOnDependents(prerequisiteId, disposition, from, completionEvidenceRef) {
|
|
394
|
+
for (const depId of this.reverseEdges.get(prerequisiteId) ?? []) {
|
|
395
|
+
if (!this.nodes.has(depId))
|
|
396
|
+
continue;
|
|
397
|
+
const current = this.ledger.disposition(depId, prerequisiteId);
|
|
398
|
+
if (current && from.includes(current)) {
|
|
399
|
+
this.ledger.record(depId, prerequisiteId, disposition, { completionEvidenceRef });
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
401
403
|
unblockDependents(completedId) {
|
|
402
404
|
const unblockedIds = [];
|
|
403
|
-
const
|
|
404
|
-
if (!deps)
|
|
405
|
-
return unblockedIds;
|
|
406
|
-
for (const depId of deps) {
|
|
405
|
+
for (const depId of this.reverseEdges.get(completedId) ?? []) {
|
|
407
406
|
const dep = this.nodes.get(depId);
|
|
408
407
|
if (!dep || dep.status !== 'blocked')
|
|
409
408
|
continue;
|
|
410
|
-
|
|
411
|
-
if (!fwd)
|
|
412
|
-
continue;
|
|
413
|
-
let allDone = true;
|
|
414
|
-
for (const bId of fwd) {
|
|
415
|
-
const b = this.nodes.get(bId);
|
|
416
|
-
if (!b || b.status !== 'completed') {
|
|
417
|
-
allDone = false;
|
|
418
|
-
break;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
if (allDone) {
|
|
409
|
+
if (this.computeStatus(depId) === 'ready') {
|
|
422
410
|
this.setStatus(depId, 'ready');
|
|
423
411
|
unblockedIds.push(depId);
|
|
424
412
|
}
|
|
425
413
|
}
|
|
426
414
|
return unblockedIds;
|
|
427
415
|
}
|
|
428
|
-
cascadeCancellation(
|
|
429
|
-
const
|
|
430
|
-
if (!deps)
|
|
431
|
-
return;
|
|
432
|
-
for (const depId of deps) {
|
|
416
|
+
cascadeCancellation(sourceId, outcome) {
|
|
417
|
+
for (const depId of this.reverseEdges.get(sourceId) ?? []) {
|
|
433
418
|
const dep = this.nodes.get(depId);
|
|
434
|
-
if (!dep ||
|
|
419
|
+
if (!dep || TERMINAL.has(dep.status))
|
|
435
420
|
continue;
|
|
436
|
-
|
|
437
|
-
const fwd = this.forwardEdges.get(depId);
|
|
438
|
-
if (!fwd)
|
|
421
|
+
if (!this.ledger.hasAny(depId, ['FAILED', 'CANCELLED']))
|
|
439
422
|
continue;
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
if (unsatisfiable) {
|
|
449
|
-
this.nodes.set(depId, {
|
|
450
|
-
...dep,
|
|
451
|
-
status: 'cancelled',
|
|
452
|
-
completedAt: Date.now(),
|
|
453
|
-
error: `Cancelled: upstream task '${failedId}' failed`,
|
|
454
|
-
});
|
|
455
|
-
this.cascadeCancellation(depId);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
dfsCycles(nodeId, color, parent, cycles) {
|
|
460
|
-
color.set(nodeId, NodeColor.Gray);
|
|
461
|
-
const dependencies = this.forwardEdges.get(nodeId);
|
|
462
|
-
if (dependencies) {
|
|
463
|
-
for (const depId of dependencies) {
|
|
464
|
-
if (!this.nodes.has(depId))
|
|
465
|
-
continue;
|
|
466
|
-
const c = color.get(depId);
|
|
467
|
-
if (c === NodeColor.White) {
|
|
468
|
-
parent.set(depId, nodeId);
|
|
469
|
-
this.dfsCycles(depId, color, parent, cycles);
|
|
470
|
-
}
|
|
471
|
-
else if (c === NodeColor.Gray) {
|
|
472
|
-
const cycle = [depId, nodeId];
|
|
473
|
-
let cur = nodeId;
|
|
474
|
-
while (cur !== depId) {
|
|
475
|
-
const p = parent.get(cur);
|
|
476
|
-
if (p === null || p === undefined || p === depId)
|
|
477
|
-
break;
|
|
478
|
-
cycle.push(p);
|
|
479
|
-
cur = p;
|
|
480
|
-
}
|
|
481
|
-
cycles.push(cycle);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
423
|
+
this.nodes.set(depId, {
|
|
424
|
+
...dep,
|
|
425
|
+
status: 'cancelled',
|
|
426
|
+
completedAt: Date.now(),
|
|
427
|
+
error: `Cancelled: upstream task '${sourceId}' ${outcome}`,
|
|
428
|
+
});
|
|
429
|
+
this.recordOnDependents(depId, 'CANCELLED', ['UNRESOLVED']);
|
|
430
|
+
this.cascadeCancellation(depId, 'cancelled');
|
|
484
431
|
}
|
|
485
|
-
color.set(nodeId, NodeColor.Black);
|
|
486
432
|
}
|
|
487
433
|
emit(event) {
|
|
488
434
|
for (const handler of this.eventHandlers) {
|
|
@@ -28,21 +28,29 @@
|
|
|
28
28
|
* const unblocked = scheduler.onTaskComplete('build'); // test may now be ready
|
|
29
29
|
*
|
|
30
30
|
* // Check progress
|
|
31
|
-
* const progress = scheduler.getProgress(); // { completed: 1, total: 4, percentage: 25 }
|
|
31
|
+
* const progress = scheduler.getProgress(); // { completed: 1, total: 4, percentage: 25, ... }
|
|
32
|
+
*
|
|
33
|
+
* // Prerequisites are never resolved by deletion (issue #1069): removing
|
|
34
|
+
* // unfinished work leaves dependents blocked with a REMOVED receipt.
|
|
35
|
+
* // An explicit, attributed waiver is the only bypass.
|
|
36
|
+
* dag.waivePrerequisite({ taskId: 'deploy', prerequisiteId: 'lint', actor: 'release-lead', reason: 'lint gate retired' });
|
|
32
37
|
* ```
|
|
33
38
|
*/
|
|
34
|
-
export type { DAGTaskStatus, DAGTask, AddTaskInput, DAGStats, DAGEventType, DAGEvent, DAGSchedulerConfig, DAGEventHandler, } from './types.js';
|
|
39
|
+
export type { DAGTaskStatus, DAGTask, AddTaskInput, DAGStats, DAGEventType, DAGEvent, DAGSchedulerConfig, DAGEventHandler, PrerequisiteDisposition, PrerequisiteWaiver, PrerequisiteReceiptV1, PrerequisiteEdgeState, WaivePrerequisiteInput, WaiverRequest, WaiverPolicy, TaskDAGOptions, CompleteTaskOptions, RemoveTaskOptions, RemovedTaskRecord, ObligationSummary, DAGProgress, } from './types.js';
|
|
40
|
+
export { PREREQUISITE_RECEIPT_SCHEMA } from './types.js';
|
|
35
41
|
export { TaskDAG } from './dag.js';
|
|
36
42
|
export { DAGScheduler } from './scheduler.js';
|
|
43
|
+
export { GraphRevisionConflictError, PrerequisiteWaiverError, validateWaiverInput, } from './prerequisite-ledger.js';
|
|
37
44
|
import { TaskDAG } from './dag.js';
|
|
38
45
|
import { DAGScheduler } from './scheduler.js';
|
|
39
|
-
import type { DAGSchedulerConfig } from './types.js';
|
|
46
|
+
import type { DAGSchedulerConfig, TaskDAGOptions } from './types.js';
|
|
40
47
|
/**
|
|
41
48
|
* Create a new empty TaskDAG instance.
|
|
42
49
|
*
|
|
50
|
+
* @param options - Optional graph identity and waiver policy
|
|
43
51
|
* @returns A fresh TaskDAG with no tasks
|
|
44
52
|
*/
|
|
45
|
-
export declare function createTaskDAG(): TaskDAG;
|
|
53
|
+
export declare function createTaskDAG(options?: TaskDAGOptions): TaskDAG;
|
|
46
54
|
/**
|
|
47
55
|
* Create a new DAGScheduler wrapping a TaskDAG.
|
|
48
56
|
*
|