agentic-qe 3.15.8 → 3.15.9
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 +183 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
- package/dist/bridge/captured-experience-bridge.js +12 -13
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-W3V5P7LE.js → agent-booster-wasm-427FRKWG.js} +2 -2
- package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-RIYHTHVZ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WSUCUHOO.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +2 -0
- package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-KRIBMIXX.js} +2 -2
- package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-YAJZX6MC.js} +4 -4
- package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-7ZNOXWP3.js} +3 -3
- package/dist/cli/chunks/base-67DXSAYM.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-ZQAT4I6H.js} +2 -2
- package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-452WCPZC.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-IJFXJRPN.js} +2 -2
- package/dist/cli/chunks/{browser-ZL7OLKJQ.js → browser-CT3MTV6G.js} +2 -2
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +2 -0
- package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-2BA45H64.js} +2 -2
- package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-2HL3UM5P.js} +2 -2
- package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-2I2UPJS7.js} +2 -2
- package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-2TDIS6YK.js} +2 -2
- package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-2URBI52G.js} +2 -2
- package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-2XITOPYV.js} +2 -2
- package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-2YH62JCN.js} +2 -2
- package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-32UTLDNY.js} +2 -2
- package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-37BIGMJI.js} +1 -1
- package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-3CJCROMW.js} +2 -2
- package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-3LYU7BLY.js} +2 -2
- package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-47TYABPD.js} +3 -3
- package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-47V7FQGX.js} +2 -2
- package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-4JCY45KV.js} +2 -2
- package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-4SUOVLJ6.js} +2 -2
- package/dist/cli/chunks/{chunk-J7RCI25Q.js → chunk-4URT6JO2.js} +1 -1
- package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-4V27J6YN.js} +2 -2
- package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-4W4DYVSH.js} +1 -1
- package/dist/cli/chunks/chunk-55HRSNGN.js +2 -0
- package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-5D2I7JUP.js} +2 -2
- package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-5JWGCIQW.js} +1 -1
- package/dist/cli/chunks/chunk-5LAAZLUC.js +4 -0
- package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-5NS3USRW.js} +1 -1
- package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-6EPHNJTL.js} +1 -1
- package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-6OOYIO3W.js} +2 -2
- package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-6PXA2BQJ.js} +58 -58
- package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-6YL6JOQB.js} +2 -2
- package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-72AMFDC7.js} +1 -1
- package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-763SUL4B.js} +2 -2
- package/dist/cli/chunks/{chunk-4GYFONJB.js → chunk-7DMA5NYL.js} +1 -1
- package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-7JKB3Q7O.js} +1 -1
- package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-7KII4CQG.js} +2 -2
- package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-7QGYJ5OY.js} +1 -1
- package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-7QTB5VJZ.js} +2 -2
- package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-7X2Y727E.js} +1 -1
- package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-A4RU67VX.js} +2 -2
- package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-A6YIH4C4.js} +2 -2
- package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-ABFDB4X3.js} +1 -1
- package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-AJ4YDSOI.js} +2 -2
- package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-AOFO4N32.js} +2 -2
- package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-AQTVVLNP.js} +1 -1
- package/dist/cli/chunks/chunk-AR2E4B7K.js +6 -0
- package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-AVB5QY2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-BHKXMIWX.js} +2 -2
- package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-BXO536GT.js} +3 -3
- package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-C6RTMTEH.js} +1 -1
- package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-CTZJUV5I.js} +1 -1
- package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-D6XVGFTI.js} +2 -2
- package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-DDPPSSHW.js} +1 -1
- package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-DGTLJNJH.js} +2 -2
- package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-DINZR5CF.js} +1 -1
- package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-EFBLP43U.js} +2 -2
- package/dist/cli/chunks/chunk-ETG7O5E5.js +5 -0
- package/dist/cli/chunks/{chunk-KNHLOANK.js → chunk-F2SQPP6U.js} +2 -2
- package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-F3PQZX44.js} +1 -1
- package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-F4JYIRW2.js} +2 -2
- package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-FJ4VTLLK.js} +2 -2
- package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-FL3OYGCS.js} +2 -2
- package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-FLASM2XB.js} +2 -2
- package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-FV3NHVC7.js} +22 -22
- package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-FV7VAG74.js} +1 -1
- package/dist/cli/chunks/{chunk-PWA6XBW4.js → chunk-G3BKZNFL.js} +5 -5
- package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-GBUIG3FS.js} +1 -1
- package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-GCWSX2NY.js} +4 -4
- package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-GII5WVAK.js} +1 -1
- package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-GKPQ2GRR.js} +2 -2
- package/dist/cli/chunks/chunk-GR3JYE5A.js +2 -0
- package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-H3KBIWTO.js} +2 -2
- package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-HAROIAJE.js} +1 -1
- package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-HCYQHWI2.js} +2 -2
- package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-HGTWAZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-HTZJSQ3C.js} +2 -2
- package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-HWK5L7IJ.js} +2 -2
- package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-HZ5NC6U5.js} +1 -1
- package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-I6S35FRO.js} +2 -2
- package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-ICP2ORGI.js} +2 -2
- package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-IFEIY3NQ.js} +2 -2
- package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-J3DTDJDT.js} +2 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +2 -0
- package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-J5KNRVXR.js} +1 -1
- package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-JAV5WPSY.js} +2 -2
- package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-JEP4ULR6.js} +2 -2
- package/dist/cli/chunks/{chunk-TC52M542.js → chunk-JK2ME6IT.js} +2 -2
- package/dist/cli/chunks/chunk-JNNZK7KH.js +2 -0
- package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-JP4P3P3D.js} +2 -2
- package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-JUVHZG7I.js} +1 -1
- package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-JWGRWMZP.js} +2 -2
- package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-K5DJXMAA.js} +2 -2
- package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-KFUUIAR4.js} +2 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +180 -0
- package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-KIKWJM6J.js} +2 -2
- package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-KIXYKUCI.js} +1 -1
- package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-KLGYIEJK.js} +3 -3
- package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-KR3M44CF.js} +3 -3
- package/dist/cli/chunks/chunk-KTSLTZSG.js +2 -0
- package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-KVBEGOJE.js} +2 -2
- package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-L42JPFCC.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-LCJTEUDC.js} +370 -370
- package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-LEAKYZ37.js} +2 -2
- package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LMU5DUDK.js} +1 -1
- package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-MZS32SYS.js} +1 -1
- package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-N3KEY4XJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-N3NP6PTT.js} +2 -2
- package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-N5PDFGCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-NDKLQW6N.js} +2 -2
- package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-NHZIWIQZ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-NTAD5UX4.js} +2 -2
- package/dist/cli/chunks/{chunk-7H3GNRNA.js → chunk-O3JLOVZX.js} +2 -2
- package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-OCESWNAZ.js} +3 -3
- package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-OG2UI6A3.js} +2 -2
- package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-OXTFSIGN.js} +1 -1
- package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-OXZLKP6C.js} +1 -1
- package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-P2CXVNKK.js} +2 -2
- package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-P73W2K7T.js} +1 -1
- package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-PBZI2ZPV.js} +3 -3
- package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-PMCRCEW5.js} +2 -2
- package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-PVIA2FPD.js} +2 -2
- package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-PX2B5TS2.js} +2 -2
- package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-Q3JVJRVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-QQ5SZH4D.js} +2 -2
- package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-QTVWUQTB.js} +1 -1
- package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-REUFWGMA.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-SNBYYO6F.js} +2 -2
- package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-SVHUYVUR.js} +2 -2
- package/dist/cli/chunks/{chunk-PIEKGKW6.js → chunk-THAY7WHO.js} +2 -2
- package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-TNMQVG4A.js} +2 -2
- package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-TSYQDRNK.js} +1 -1
- package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-TUYJ53V4.js} +2 -2
- package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-UNUTC6TX.js} +2 -2
- package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-UOJBR4J3.js} +2 -2
- package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-UOWHE77F.js} +2 -2
- package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-UYLYMWV5.js} +2 -2
- package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-V5PXQSFS.js} +2 -2
- package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-VCMINU7K.js} +2 -2
- package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-VQHVHVSF.js} +2 -2
- package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-VRGCKBF7.js} +2 -2
- package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-VU2EL424.js} +1 -1
- package/dist/cli/chunks/{chunk-KNQUHGNY.js → chunk-VXZJOKOX.js} +2 -2
- package/dist/cli/chunks/{chunk-EUVSSIGR.js → chunk-VYLM2YV5.js} +3 -3
- package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-W32YU3VI.js} +2 -2
- package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-W5VJRDDG.js} +2 -2
- package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-WGDR2KIR.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-WRRCQ2UE.js} +1 -1
- package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-XDBD4GXO.js} +2 -2
- package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-XOLDMK23.js} +2 -2
- package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-XOVNZT7F.js} +1 -1
- package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-XQ3DDY7X.js} +2 -2
- package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-XUIA5KMS.js} +2 -2
- package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-XWIUFYM3.js} +1 -1
- package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XYCKHYBM.js} +2 -2
- package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-XZJ2O3VC.js} +1 -1
- package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-YRBBBUJX.js} +5 -5
- package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-YZGSJG34.js} +1 -1
- package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-YZYDTABJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-ZANDSVCK.js} +2 -2
- package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-ZBDRLF43.js} +2 -2
- package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-ZVSLCEVC.js} +3 -3
- package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-ZXBCCO2H.js} +2 -2
- package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-7SGRCFPS.js} +2 -2
- package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-MX3URPZA.js} +2 -2
- package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-M47NJY6D.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-5GAK45SW.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-YXYSRH4Y.js} +2 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +2 -0
- package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-DLJ5QD5N.js} +2 -2
- package/dist/cli/chunks/{code-OMT4UEZI.js → code-ONKLMVQ2.js} +25 -24
- package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-2232LGZN.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-UOWLYCMH.js} +2 -2
- package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-MHX7GCC7.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-43ZUJKZU.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-6Q5JR4FF.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-CZUMVHSI.js} +2 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +2 -0
- package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VS5ZW3XN.js} +2 -2
- package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-VWKTWZ6D.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +2 -0
- package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-YIFEMORH.js} +2 -2
- package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-SHWJSJW5.js} +7 -7
- package/dist/cli/chunks/daemon-YIFT46FH.js +34 -0
- package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-TCC2WM46.js} +2 -2
- package/dist/cli/chunks/{detect-5QTCRB32.js → detect-IGTWSQMA.js} +2 -2
- package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-TCOTJVQX.js} +2 -2
- package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-55ZVYODR.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-GJRWOHQP.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-NF7UJW7B.js → domain-transfer-6EF75EKU.js} +2 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-XAMNIKQL.js} +2 -2
- package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GO22R4OZ.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-F2BRMJ3Y.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-6RGPYALD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-MIWQIOHU.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ZGS3KLPH.js} +2 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +2 -0
- package/dist/cli/chunks/fleet-ADL57COA.js +44 -0
- package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-ALBJVW6T.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-ZMM53NDY.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +2 -0
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-RYUJPA7B.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-XM6XF3YV.js} +2 -2
- package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-X62O7TJO.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ZBWUPTVD.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-DUMF6SJV.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +2 -0
- package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-S4I2R46S.js} +2 -2
- package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-L4KJHVWS.js} +6 -6
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +2 -0
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-GNNB5FCZ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-HR6ZAH7T.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +2 -0
- package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4IEEOHJS.js} +3 -3
- package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-ZFMORP36.js} +4 -4
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +2 -0
- package/dist/cli/chunks/{load-UYMZPEY6.js → load-ZM43WGDO.js} +2 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +2 -0
- package/dist/cli/chunks/{mcp-NOTDZBW5.js → mcp-CRZKZE37.js} +2 -2
- package/dist/cli/chunks/{memory-QL53YIHP.js → memory-W5FZGVAD.js} +5 -5
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +2 -0
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-SXXGAQ2G.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PIRBUAB5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-H5SQCQTB.js} +11 -10
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-XZTWDI2T.js} +2 -2
- package/dist/cli/chunks/{pipeline-7ATPA6LU.js → pipeline-5LMLBIJ7.js} +2 -2
- package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-KJDABL5C.js} +2 -2
- package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-V4KSBVVM.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-JDHTKQAT.js} +2 -2
- package/dist/cli/chunks/project-root-X72FSM2F.js +2 -0
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +2 -0
- package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BNRONTQV.js} +2 -2
- package/dist/cli/chunks/{prove-2NAUROGF.js → prove-ELLL6XMX.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +2 -0
- package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-NH2QA4D4.js} +2 -2
- package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-JTKLF7GW.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-J3KCKLPB.js} +2 -2
- package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-HNXQRP4F.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-COJ6CX6S.js} +2 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +2 -0
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +2 -0
- package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-WM33ZILE.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-BBLXEA7A.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-P7H6HCAG.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-R5SPVRFP.js} +2 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +2 -0
- package/dist/cli/chunks/schedule-RO55OQXG.js +2 -0
- package/dist/cli/chunks/scheduler-XXMJCH24.js +2 -0
- package/dist/cli/chunks/{security-EHXSW22U.js → security-AUDTRX3I.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-PVDGBGI2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-LZ2GMSS2.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +2 -0
- package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-XNOAI4G4.js} +2 -2
- package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-K72XZE4T.js} +2 -2
- package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-NF3YY7U5.js} +2 -2
- package/dist/cli/chunks/{sync-4IMMQEPT.js → sync-UVXA6CT2.js} +2 -2
- package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-VBD5Y3E2.js} +2 -2
- package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-24S3WFVJ.js} +13 -7
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +9 -0
- package/dist/cli/chunks/{test-GPKT3CKZ.js → test-XFSGQELD.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-VYUQ4CDE.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-HMM3AHXM.js → token-bootstrap-EDK6FNQ3.js} +2 -2
- package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-VLQ6WO2L.js} +2 -2
- package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-TOFMWWNM.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-56GDQCMR.js → tree-sitter-wasm-parser-MI3NZKUD.js} +2 -2
- package/dist/cli/chunks/{types-J4J6QV3I.js → types-JTWLBAZJ.js} +2 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +2 -0
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +2 -0
- package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4ABM72T4.js} +2 -2
- package/dist/cli/chunks/{validate-B57HA4YK.js → validate-UDJCWKXI.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-TODOUWNN.js} +2 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-WBMAJPM5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-BTT53TUL.js} +2 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +2 -0
- package/dist/cli/chunks/{witness-chain-LFASSMZK.js → witness-chain-TATPXQRK.js} +2 -2
- package/dist/cli/chunks/{witness-chain-repair-TPHN4DXN.js → witness-chain-repair-2HGJGE7O.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-FRY3LMGH.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-X7QHQQWL.js} +2 -2
- package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-QMZPAWQW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +2 -0
- package/dist/cli/chunks/{wrappers-WCAYIQUX.js → wrappers-ZD5NBHYI.js} +2 -2
- package/dist/cli/commands/code.js +8 -0
- package/dist/cli/commands/daemon.js +8 -0
- package/dist/cli/commands/fleet.js +14 -9
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +14 -2
- package/dist/coordination/handlers/coverage-collection.js +9 -10
- package/dist/coordination/handlers/coverage-handlers.js +21 -3
- 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/test-execution-handlers.js +32 -5
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.js +1 -1
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +39 -0
- package/dist/coordination/protocols/learning-consolidation-archive.js +57 -0
- package/dist/coordination/protocols/learning-consolidation.d.ts +38 -3
- package/dist/coordination/protocols/learning-consolidation.js +128 -50
- package/dist/coordination/queen-coordinator.d.ts +12 -1
- package/dist/coordination/queen-coordinator.js +24 -1
- package/dist/coordination/queen-event-handlers.js +2 -1
- package/dist/coordination/queen-lifecycle.js +9 -0
- package/dist/coordination/queen-task-management.js +113 -40
- package/dist/coordination/queen-types.d.ts +10 -0
- package/dist/coordination/queen-types.js +8 -0
- 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/domains/code-intelligence/coordinator.js +35 -9
- package/dist/domains/code-intelligence/index-path-guard.d.ts +49 -0
- package/dist/domains/code-intelligence/index-path-guard.js +125 -0
- package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
- 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/contract-testing/coordinator.js +3 -1
- package/dist/domains/defect-intelligence/services/defect-predictor.js +4 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +12 -12
- package/dist/domains/learning-optimization/active-patterns.js +15 -12
- 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 +43 -102
- package/dist/domains/learning-optimization/index.d.ts +1 -1
- package/dist/domains/learning-optimization/interfaces.d.ts +56 -4
- package/dist/domains/learning-optimization/plugin.js +11 -1
- package/dist/domains/learning-optimization/reward-source.d.ts +37 -0
- package/dist/domains/learning-optimization/reward-source.js +58 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +4 -4
- package/dist/domains/learning-optimization/services/learning-coordinator.js +59 -23
- 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/test-execution/interfaces.d.ts +16 -0
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +21 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +69 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +24 -2
- 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 +2 -1
- 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/learning/dream/dream-insights-pruner.d.ts +18 -4
- package/dist/learning/dream/dream-insights-pruner.js +99 -11
- package/dist/learning/skill-validation-learner.d.ts +2 -0
- package/dist/learning/skill-validation-learner.js +29 -21
- package/dist/mcp/background-workers.js +8 -2
- package/dist/mcp/bundle.js +507 -483
- package/dist/mcp/handlers/domain-handler-configs.d.ts +14 -0
- package/dist/mcp/handlers/domain-handler-configs.js +68 -30
- package/dist/mcp/handlers/handler-factory.js +1 -0
- package/dist/mcp/handlers/task-handlers.js +37 -1
- 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 +8 -3
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +34 -3
- package/dist/mcp/tools/learning-optimization/optimize.js +106 -70
- package/dist/memory/crdt/lww-register.js +11 -1
- 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/llm/cache.js +4 -1
- package/dist/shared/security/compliance-patterns.js +3 -1
- package/dist/shared/test-runner-process.d.ts +26 -0
- package/dist/shared/test-runner-process.js +91 -0
- 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 +42 -0
- package/dist/shared/utils/namespaced-search.js +53 -0
- 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/workers/daemon.d.ts +2 -0
- package/dist/workers/daemon.js +10 -5
- 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/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/learning-consolidation.d.ts +1 -1
- package/dist/workers/workers/learning-consolidation.js +11 -8
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-FC4EY447.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-workflow-2IFEUAAK.js +0 -2
- package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
- package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
- package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
- 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/chunk-ZWMFKZEQ.js +0 -3
- 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/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/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/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/task-handlers-FH6DNTHW.js +0 -9
- 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/workflow-orchestrator-ZNWEUYBN.js +0 -2
|
@@ -28,14 +28,21 @@
|
|
|
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
|
*/
|
|
39
|
+
export { PREREQUISITE_RECEIPT_SCHEMA } from './types.js';
|
|
34
40
|
// ============================================================================
|
|
35
41
|
// Class Exports
|
|
36
42
|
// ============================================================================
|
|
37
43
|
export { TaskDAG } from './dag.js';
|
|
38
44
|
export { DAGScheduler } from './scheduler.js';
|
|
45
|
+
export { GraphRevisionConflictError, PrerequisiteWaiverError, validateWaiverInput, } from './prerequisite-ledger.js';
|
|
39
46
|
// ============================================================================
|
|
40
47
|
// Factory Functions
|
|
41
48
|
// ============================================================================
|
|
@@ -44,10 +51,11 @@ import { DAGScheduler } from './scheduler.js';
|
|
|
44
51
|
/**
|
|
45
52
|
* Create a new empty TaskDAG instance.
|
|
46
53
|
*
|
|
54
|
+
* @param options - Optional graph identity and waiver policy
|
|
47
55
|
* @returns A fresh TaskDAG with no tasks
|
|
48
56
|
*/
|
|
49
|
-
export function createTaskDAG() {
|
|
50
|
-
return new TaskDAG();
|
|
57
|
+
export function createTaskDAG(options) {
|
|
58
|
+
return new TaskDAG(options);
|
|
51
59
|
}
|
|
52
60
|
/**
|
|
53
61
|
* Create a new DAGScheduler wrapping a TaskDAG.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Prerequisite Ledger
|
|
3
|
+
* Issue #1069: typed prerequisite dispositions and receipts for TaskDAG
|
|
4
|
+
*
|
|
5
|
+
* Holds the graph identity, the monotonically increasing graph revision,
|
|
6
|
+
* the current disposition of every prerequisite edge, an append-only log
|
|
7
|
+
* of PrerequisiteReceiptV1 records, and tombstones for removed tasks so the
|
|
8
|
+
* original obligation denominator survives node removal.
|
|
9
|
+
*/
|
|
10
|
+
import { type DAGTask, type DAGTaskStatus, type ObligationSummary, type PrerequisiteDisposition, type PrerequisiteEdgeState, type PrerequisiteReceiptV1, type PrerequisiteWaiver, type RemovedTaskRecord, type WaivePrerequisiteInput } from './types.js';
|
|
11
|
+
/** Task statuses that end execution */
|
|
12
|
+
export declare const TERMINAL_STATUSES: ReadonlySet<DAGTaskStatus>;
|
|
13
|
+
/** Thrown when an operation's expectedRevision does not match the graph */
|
|
14
|
+
export declare class GraphRevisionConflictError extends Error {
|
|
15
|
+
readonly expectedRevision: number;
|
|
16
|
+
readonly actualRevision: number;
|
|
17
|
+
constructor(expectedRevision: number, actualRevision: number);
|
|
18
|
+
}
|
|
19
|
+
/** Thrown when a waiver request is invalid or rejected by policy */
|
|
20
|
+
export declare class PrerequisiteWaiverError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validate a waiver request at the API boundary.
|
|
25
|
+
* @returns The normalized (trimmed) request
|
|
26
|
+
* @throws PrerequisiteWaiverError on missing or malformed fields
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateWaiverInput(input: WaivePrerequisiteInput): WaivePrerequisiteInput;
|
|
29
|
+
/** Extra fields attached to a receipt */
|
|
30
|
+
interface ReceiptDetails {
|
|
31
|
+
readonly completionEvidenceRef?: string;
|
|
32
|
+
readonly waiver?: PrerequisiteWaiver;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Ledger of prerequisite edge dispositions for one TaskDAG.
|
|
36
|
+
* Receipts are frozen and never rewritten; the latest receipt per edge
|
|
37
|
+
* is the edge's current disposition.
|
|
38
|
+
*/
|
|
39
|
+
export declare class PrerequisiteLedger {
|
|
40
|
+
readonly graphId: string;
|
|
41
|
+
private revision;
|
|
42
|
+
private readonly current;
|
|
43
|
+
private readonly log;
|
|
44
|
+
private readonly tombstones;
|
|
45
|
+
private readonly obligations;
|
|
46
|
+
constructor(graphId: string);
|
|
47
|
+
/** Current graph revision (0 for a fresh graph) */
|
|
48
|
+
get graphRevision(): number;
|
|
49
|
+
/** @throws GraphRevisionConflictError if expected is set and stale */
|
|
50
|
+
checkRevision(expected?: number): void;
|
|
51
|
+
/** Advance the revision for a committed mutation. */
|
|
52
|
+
bump(): number;
|
|
53
|
+
/** Append a receipt and make it the edge's current disposition. */
|
|
54
|
+
record(taskId: string, prerequisiteId: string, disposition: PrerequisiteDisposition, details?: ReceiptDetails): PrerequisiteReceiptV1;
|
|
55
|
+
/** Current disposition of an edge, or undefined if the edge is unknown. */
|
|
56
|
+
disposition(taskId: string, prerequisiteId: string): PrerequisiteDisposition | undefined;
|
|
57
|
+
/** True when every listed prerequisite edge is SATISFIED or WAIVED. */
|
|
58
|
+
allResolved(taskId: string, prerequisiteIds: Iterable<string>): boolean;
|
|
59
|
+
/** True when any edge of the task has one of the given dispositions. */
|
|
60
|
+
hasAny(taskId: string, dispositions: readonly PrerequisiteDisposition[]): boolean;
|
|
61
|
+
/** Current edge states for a dependent, in the given prerequisite order. */
|
|
62
|
+
edgesOf(taskId: string, prerequisiteIds: Iterable<string>): PrerequisiteEdgeState[];
|
|
63
|
+
/** Count live edges by disposition across the given dependents. */
|
|
64
|
+
countEdges(taskIds: Iterable<string>, disposition: PrerequisiteDisposition): number;
|
|
65
|
+
/** Append-only receipt log, optionally filtered. */
|
|
66
|
+
receipts(filter?: {
|
|
67
|
+
taskId?: string;
|
|
68
|
+
prerequisiteId?: string;
|
|
69
|
+
}): PrerequisiteReceiptV1[];
|
|
70
|
+
/** Drop a removed task's own edges from the current projection (log is kept). */
|
|
71
|
+
dropEdgesOf(taskId: string): void;
|
|
72
|
+
/** Register a task as an obligation; re-adding clears any tombstone. */
|
|
73
|
+
addObligation(taskId: string): void;
|
|
74
|
+
tombstone(taskId: string, statusAtRemoval: DAGTaskStatus): void;
|
|
75
|
+
isTombstoned(taskId: string): boolean;
|
|
76
|
+
removedTasks(): RemovedTaskRecord[];
|
|
77
|
+
get obligationCount(): number;
|
|
78
|
+
/** Obligation accounting over live tasks plus tombstones. */
|
|
79
|
+
summarize(liveTasks: Iterable<DAGTask>): ObligationSummary;
|
|
80
|
+
/** Reset all state except the revision, which stays monotonic. */
|
|
81
|
+
reset(): void;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=prerequisite-ledger.d.ts.map
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Prerequisite Ledger
|
|
3
|
+
* Issue #1069: typed prerequisite dispositions and receipts for TaskDAG
|
|
4
|
+
*
|
|
5
|
+
* Holds the graph identity, the monotonically increasing graph revision,
|
|
6
|
+
* the current disposition of every prerequisite edge, an append-only log
|
|
7
|
+
* of PrerequisiteReceiptV1 records, and tombstones for removed tasks so the
|
|
8
|
+
* original obligation denominator survives node removal.
|
|
9
|
+
*/
|
|
10
|
+
import { PREREQUISITE_RECEIPT_SCHEMA, } from './types.js';
|
|
11
|
+
/** Dispositions that let a dependent become ready */
|
|
12
|
+
const RESOLVING = new Set([
|
|
13
|
+
'SATISFIED',
|
|
14
|
+
'WAIVED',
|
|
15
|
+
]);
|
|
16
|
+
/** Task statuses that end execution */
|
|
17
|
+
export const TERMINAL_STATUSES = new Set([
|
|
18
|
+
'completed',
|
|
19
|
+
'failed',
|
|
20
|
+
'cancelled',
|
|
21
|
+
]);
|
|
22
|
+
const MAX_ACTOR_LENGTH = 256;
|
|
23
|
+
const MAX_REASON_LENGTH = 4096;
|
|
24
|
+
const MAX_REF_LENGTH = 1024;
|
|
25
|
+
/** Thrown when an operation's expectedRevision does not match the graph */
|
|
26
|
+
export class GraphRevisionConflictError extends Error {
|
|
27
|
+
expectedRevision;
|
|
28
|
+
actualRevision;
|
|
29
|
+
constructor(expectedRevision, actualRevision) {
|
|
30
|
+
super(`Graph revision conflict: expected ${expectedRevision}, graph is at ${actualRevision}`);
|
|
31
|
+
this.expectedRevision = expectedRevision;
|
|
32
|
+
this.actualRevision = actualRevision;
|
|
33
|
+
this.name = 'GraphRevisionConflictError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Thrown when a waiver request is invalid or rejected by policy */
|
|
37
|
+
export class PrerequisiteWaiverError extends Error {
|
|
38
|
+
constructor(message) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.name = 'PrerequisiteWaiverError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function requireText(value, field, maxLength) {
|
|
44
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
45
|
+
throw new PrerequisiteWaiverError(`Waiver '${field}' must be a non-empty string`);
|
|
46
|
+
}
|
|
47
|
+
const trimmed = value.trim();
|
|
48
|
+
if (trimmed.length > maxLength) {
|
|
49
|
+
throw new PrerequisiteWaiverError(`Waiver '${field}' exceeds ${maxLength} characters`);
|
|
50
|
+
}
|
|
51
|
+
return trimmed;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate a waiver request at the API boundary.
|
|
55
|
+
* @returns The normalized (trimmed) request
|
|
56
|
+
* @throws PrerequisiteWaiverError on missing or malformed fields
|
|
57
|
+
*/
|
|
58
|
+
export function validateWaiverInput(input) {
|
|
59
|
+
if (input === null || typeof input !== 'object') {
|
|
60
|
+
throw new PrerequisiteWaiverError('Waiver input must be an object');
|
|
61
|
+
}
|
|
62
|
+
const authorityRef = input.authorityRef === undefined
|
|
63
|
+
? undefined
|
|
64
|
+
: requireText(input.authorityRef, 'authorityRef', MAX_REF_LENGTH);
|
|
65
|
+
const expectedRevision = input.expectedRevision;
|
|
66
|
+
if (expectedRevision !== undefined && !Number.isInteger(expectedRevision)) {
|
|
67
|
+
throw new PrerequisiteWaiverError(`Waiver 'expectedRevision' must be an integer`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
taskId: requireText(input.taskId, 'taskId', MAX_REF_LENGTH),
|
|
71
|
+
prerequisiteId: requireText(input.prerequisiteId, 'prerequisiteId', MAX_REF_LENGTH),
|
|
72
|
+
actor: requireText(input.actor, 'actor', MAX_ACTOR_LENGTH),
|
|
73
|
+
reason: requireText(input.reason, 'reason', MAX_REASON_LENGTH),
|
|
74
|
+
authorityRef,
|
|
75
|
+
expectedRevision,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Ledger of prerequisite edge dispositions for one TaskDAG.
|
|
80
|
+
* Receipts are frozen and never rewritten; the latest receipt per edge
|
|
81
|
+
* is the edge's current disposition.
|
|
82
|
+
*/
|
|
83
|
+
export class PrerequisiteLedger {
|
|
84
|
+
graphId;
|
|
85
|
+
revision = 0;
|
|
86
|
+
current = new Map();
|
|
87
|
+
log = [];
|
|
88
|
+
tombstones = new Map();
|
|
89
|
+
obligations = new Set();
|
|
90
|
+
constructor(graphId) {
|
|
91
|
+
this.graphId = graphId;
|
|
92
|
+
}
|
|
93
|
+
/** Current graph revision (0 for a fresh graph) */
|
|
94
|
+
get graphRevision() {
|
|
95
|
+
return this.revision;
|
|
96
|
+
}
|
|
97
|
+
/** @throws GraphRevisionConflictError if expected is set and stale */
|
|
98
|
+
checkRevision(expected) {
|
|
99
|
+
if (expected !== undefined && expected !== this.revision) {
|
|
100
|
+
throw new GraphRevisionConflictError(expected, this.revision);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Advance the revision for a committed mutation. */
|
|
104
|
+
bump() {
|
|
105
|
+
return ++this.revision;
|
|
106
|
+
}
|
|
107
|
+
/** Append a receipt and make it the edge's current disposition. */
|
|
108
|
+
record(taskId, prerequisiteId, disposition, details = {}) {
|
|
109
|
+
const receipt = Object.freeze({
|
|
110
|
+
schema: PREREQUISITE_RECEIPT_SCHEMA,
|
|
111
|
+
graphId: this.graphId,
|
|
112
|
+
graphRevision: this.revision,
|
|
113
|
+
taskId,
|
|
114
|
+
prerequisiteId,
|
|
115
|
+
disposition,
|
|
116
|
+
...(details.completionEvidenceRef !== undefined
|
|
117
|
+
? { completionEvidenceRef: details.completionEvidenceRef }
|
|
118
|
+
: {}),
|
|
119
|
+
...(details.waiver ? { waiver: Object.freeze({ ...details.waiver }) } : {}),
|
|
120
|
+
observedAt: new Date().toISOString(),
|
|
121
|
+
});
|
|
122
|
+
let edges = this.current.get(taskId);
|
|
123
|
+
if (!edges) {
|
|
124
|
+
edges = new Map();
|
|
125
|
+
this.current.set(taskId, edges);
|
|
126
|
+
}
|
|
127
|
+
edges.set(prerequisiteId, receipt);
|
|
128
|
+
this.log.push(receipt);
|
|
129
|
+
return receipt;
|
|
130
|
+
}
|
|
131
|
+
/** Current disposition of an edge, or undefined if the edge is unknown. */
|
|
132
|
+
disposition(taskId, prerequisiteId) {
|
|
133
|
+
return this.current.get(taskId)?.get(prerequisiteId)?.disposition;
|
|
134
|
+
}
|
|
135
|
+
/** True when every listed prerequisite edge is SATISFIED or WAIVED. */
|
|
136
|
+
allResolved(taskId, prerequisiteIds) {
|
|
137
|
+
for (const id of prerequisiteIds) {
|
|
138
|
+
const d = this.disposition(taskId, id);
|
|
139
|
+
if (!d || !RESOLVING.has(d))
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
/** True when any edge of the task has one of the given dispositions. */
|
|
145
|
+
hasAny(taskId, dispositions) {
|
|
146
|
+
const edges = this.current.get(taskId);
|
|
147
|
+
if (!edges)
|
|
148
|
+
return false;
|
|
149
|
+
for (const receipt of edges.values()) {
|
|
150
|
+
if (dispositions.includes(receipt.disposition))
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
/** Current edge states for a dependent, in the given prerequisite order. */
|
|
156
|
+
edgesOf(taskId, prerequisiteIds) {
|
|
157
|
+
const edges = this.current.get(taskId);
|
|
158
|
+
const states = [];
|
|
159
|
+
if (!edges)
|
|
160
|
+
return states;
|
|
161
|
+
for (const id of prerequisiteIds) {
|
|
162
|
+
const receipt = edges.get(id);
|
|
163
|
+
if (receipt)
|
|
164
|
+
states.push({ prerequisiteId: id, disposition: receipt.disposition, receipt });
|
|
165
|
+
}
|
|
166
|
+
return states;
|
|
167
|
+
}
|
|
168
|
+
/** Count live edges by disposition across the given dependents. */
|
|
169
|
+
countEdges(taskIds, disposition) {
|
|
170
|
+
let count = 0;
|
|
171
|
+
for (const id of taskIds) {
|
|
172
|
+
const edges = this.current.get(id);
|
|
173
|
+
if (!edges)
|
|
174
|
+
continue;
|
|
175
|
+
for (const receipt of edges.values()) {
|
|
176
|
+
if (receipt.disposition === disposition)
|
|
177
|
+
count++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return count;
|
|
181
|
+
}
|
|
182
|
+
/** Append-only receipt log, optionally filtered. */
|
|
183
|
+
receipts(filter = {}) {
|
|
184
|
+
return this.log.filter((r) => (filter.taskId === undefined || r.taskId === filter.taskId) &&
|
|
185
|
+
(filter.prerequisiteId === undefined || r.prerequisiteId === filter.prerequisiteId));
|
|
186
|
+
}
|
|
187
|
+
/** Drop a removed task's own edges from the current projection (log is kept). */
|
|
188
|
+
dropEdgesOf(taskId) {
|
|
189
|
+
this.current.delete(taskId);
|
|
190
|
+
}
|
|
191
|
+
/** Register a task as an obligation; re-adding clears any tombstone. */
|
|
192
|
+
addObligation(taskId) {
|
|
193
|
+
this.obligations.add(taskId);
|
|
194
|
+
this.tombstones.delete(taskId);
|
|
195
|
+
}
|
|
196
|
+
tombstone(taskId, statusAtRemoval) {
|
|
197
|
+
this.tombstones.set(taskId, Object.freeze({
|
|
198
|
+
taskId,
|
|
199
|
+
statusAtRemoval,
|
|
200
|
+
graphRevision: this.revision,
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
isTombstoned(taskId) {
|
|
204
|
+
return this.tombstones.has(taskId);
|
|
205
|
+
}
|
|
206
|
+
removedTasks() {
|
|
207
|
+
return Array.from(this.tombstones.values());
|
|
208
|
+
}
|
|
209
|
+
get obligationCount() {
|
|
210
|
+
return this.obligations.size;
|
|
211
|
+
}
|
|
212
|
+
/** Obligation accounting over live tasks plus tombstones. */
|
|
213
|
+
summarize(liveTasks) {
|
|
214
|
+
let completed = 0, failed = 0, cancelled = 0, notRun = 0, removed = 0;
|
|
215
|
+
const liveIds = [];
|
|
216
|
+
for (const task of liveTasks) {
|
|
217
|
+
liveIds.push(task.id);
|
|
218
|
+
if (task.status === 'completed')
|
|
219
|
+
completed++;
|
|
220
|
+
else if (task.status === 'failed')
|
|
221
|
+
failed++;
|
|
222
|
+
else if (task.status === 'cancelled')
|
|
223
|
+
cancelled++;
|
|
224
|
+
else
|
|
225
|
+
notRun++;
|
|
226
|
+
}
|
|
227
|
+
for (const record of this.tombstones.values()) {
|
|
228
|
+
if (record.statusAtRemoval === 'completed')
|
|
229
|
+
completed++;
|
|
230
|
+
else
|
|
231
|
+
removed++;
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
graphId: this.graphId,
|
|
235
|
+
graphRevision: this.revision,
|
|
236
|
+
originalTotal: this.obligations.size,
|
|
237
|
+
currentTotal: liveIds.length,
|
|
238
|
+
completed, failed, cancelled, removed, notRun,
|
|
239
|
+
waivedEdges: this.countEdges(liveIds, 'WAIVED'),
|
|
240
|
+
missingEdges: this.countEdges(liveIds, 'MISSING'),
|
|
241
|
+
removedEdges: this.countEdges(liveIds, 'REMOVED'),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/** Reset all state except the revision, which stays monotonic. */
|
|
245
|
+
reset() {
|
|
246
|
+
this.current.clear();
|
|
247
|
+
this.log.length = 0;
|
|
248
|
+
this.tombstones.clear();
|
|
249
|
+
this.obligations.clear();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=prerequisite-ledger.js.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* by priority level first (p0 > p1 > p2 > p3), then by number of
|
|
8
8
|
* downstream dependents (most blocking tasks first).
|
|
9
9
|
*/
|
|
10
|
-
import type { DAGTask, DAGSchedulerConfig } from './types.js';
|
|
10
|
+
import type { CompleteTaskOptions, DAGProgress, DAGTask, DAGSchedulerConfig } from './types.js';
|
|
11
11
|
import type { TaskDAG } from './dag.js';
|
|
12
12
|
/**
|
|
13
13
|
* DAG-aware task scheduler with priority and dependency ordering.
|
|
@@ -65,9 +65,10 @@ export declare class DAGScheduler {
|
|
|
65
65
|
*
|
|
66
66
|
* @param taskId - ID of the completed task
|
|
67
67
|
* @param result - Optional result data from the task
|
|
68
|
+
* @param options - Optional completion evidence and revision guard
|
|
68
69
|
* @returns Array of newly schedulable tasks
|
|
69
70
|
*/
|
|
70
|
-
onTaskComplete(taskId: string, result?: unknown): DAGTask[];
|
|
71
|
+
onTaskComplete(taskId: string, result?: unknown, options?: CompleteTaskOptions): DAGTask[];
|
|
71
72
|
/**
|
|
72
73
|
* Handle task failure and cascade cancellations.
|
|
73
74
|
*
|
|
@@ -90,22 +91,31 @@ export declare class DAGScheduler {
|
|
|
90
91
|
/**
|
|
91
92
|
* Get progress information for the DAG execution.
|
|
92
93
|
*
|
|
93
|
-
*
|
|
94
|
+
* The denominator is the original obligation count: removing a task
|
|
95
|
+
* does not shrink it, so deleting unfinished work cannot raise the
|
|
96
|
+
* percentage. Completed tasks that were later removed still count.
|
|
97
|
+
*
|
|
98
|
+
* @returns Completed count, original total, percentage and disposition counts
|
|
94
99
|
*/
|
|
95
|
-
getProgress():
|
|
96
|
-
completed: number;
|
|
97
|
-
total: number;
|
|
98
|
-
percentage: number;
|
|
99
|
-
};
|
|
100
|
+
getProgress(): DAGProgress;
|
|
100
101
|
/**
|
|
101
102
|
* Check whether all tasks have reached a terminal state.
|
|
102
103
|
*
|
|
103
104
|
* A DAG execution is complete when every task is either
|
|
104
|
-
* 'completed', 'failed', or 'cancelled'.
|
|
105
|
+
* 'completed', 'failed', or 'cancelled'. This is an operational
|
|
106
|
+
* signal only; use isSatisfied() to ask whether the objective was met.
|
|
105
107
|
*
|
|
106
108
|
* @returns true if all tasks are in a terminal state
|
|
107
109
|
*/
|
|
108
110
|
isComplete(): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Check whether every original obligation completed. Failed, cancelled
|
|
113
|
+
* and removed-before-completion tasks make this false even when
|
|
114
|
+
* isComplete() is true.
|
|
115
|
+
*
|
|
116
|
+
* @returns true if every task ever added has completed
|
|
117
|
+
*/
|
|
118
|
+
isSatisfied(): boolean;
|
|
109
119
|
/**
|
|
110
120
|
* Sort tasks by priority (highest first) then by downstream
|
|
111
121
|
* dependent count (most blocking first).
|
|
@@ -110,10 +110,11 @@ export class DAGScheduler {
|
|
|
110
110
|
*
|
|
111
111
|
* @param taskId - ID of the completed task
|
|
112
112
|
* @param result - Optional result data from the task
|
|
113
|
+
* @param options - Optional completion evidence and revision guard
|
|
113
114
|
* @returns Array of newly schedulable tasks
|
|
114
115
|
*/
|
|
115
|
-
onTaskComplete(taskId, result) {
|
|
116
|
-
const unblockedIds = this.dag.complete(taskId, result);
|
|
116
|
+
onTaskComplete(taskId, result, options) {
|
|
117
|
+
const unblockedIds = this.dag.complete(taskId, result, options);
|
|
117
118
|
const tasks = [];
|
|
118
119
|
for (const id of unblockedIds) {
|
|
119
120
|
const task = this.dag.getTask(id);
|
|
@@ -164,23 +165,35 @@ export class DAGScheduler {
|
|
|
164
165
|
/**
|
|
165
166
|
* Get progress information for the DAG execution.
|
|
166
167
|
*
|
|
167
|
-
*
|
|
168
|
+
* The denominator is the original obligation count: removing a task
|
|
169
|
+
* does not shrink it, so deleting unfinished work cannot raise the
|
|
170
|
+
* percentage. Completed tasks that were later removed still count.
|
|
171
|
+
*
|
|
172
|
+
* @returns Completed count, original total, percentage and disposition counts
|
|
168
173
|
*/
|
|
169
174
|
getProgress() {
|
|
170
|
-
const
|
|
171
|
-
const total =
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
const s = this.dag.getObligationSummary();
|
|
176
|
+
const total = s.originalTotal;
|
|
177
|
+
const percentage = total === 0 ? 100 : Math.round((s.completed / total) * 100);
|
|
178
|
+
return {
|
|
179
|
+
completed: s.completed,
|
|
180
|
+
total,
|
|
181
|
+
percentage,
|
|
182
|
+
currentTotal: s.currentTotal,
|
|
183
|
+
failed: s.failed,
|
|
184
|
+
cancelled: s.cancelled,
|
|
185
|
+
removed: s.removed,
|
|
186
|
+
notRun: s.notRun,
|
|
187
|
+
waivedEdges: s.waivedEdges,
|
|
188
|
+
graphRevision: s.graphRevision,
|
|
189
|
+
};
|
|
178
190
|
}
|
|
179
191
|
/**
|
|
180
192
|
* Check whether all tasks have reached a terminal state.
|
|
181
193
|
*
|
|
182
194
|
* A DAG execution is complete when every task is either
|
|
183
|
-
* 'completed', 'failed', or 'cancelled'.
|
|
195
|
+
* 'completed', 'failed', or 'cancelled'. This is an operational
|
|
196
|
+
* signal only; use isSatisfied() to ask whether the objective was met.
|
|
184
197
|
*
|
|
185
198
|
* @returns true if all tasks are in a terminal state
|
|
186
199
|
*/
|
|
@@ -192,6 +205,17 @@ export class DAGScheduler {
|
|
|
192
205
|
const terminal = stats.completed + stats.failed + stats.cancelled;
|
|
193
206
|
return terminal === stats.totalTasks;
|
|
194
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Check whether every original obligation completed. Failed, cancelled
|
|
210
|
+
* and removed-before-completion tasks make this false even when
|
|
211
|
+
* isComplete() is true.
|
|
212
|
+
*
|
|
213
|
+
* @returns true if every task ever added has completed
|
|
214
|
+
*/
|
|
215
|
+
isSatisfied() {
|
|
216
|
+
const s = this.dag.getObligationSummary();
|
|
217
|
+
return s.completed === s.originalTotal;
|
|
218
|
+
}
|
|
195
219
|
// --------------------------------------------------------------------------
|
|
196
220
|
// Internal Helpers
|
|
197
221
|
// --------------------------------------------------------------------------
|