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
|
@@ -37,6 +37,8 @@ export interface DAGTask {
|
|
|
37
37
|
result?: unknown;
|
|
38
38
|
/** Error message from failed execution */
|
|
39
39
|
error?: string;
|
|
40
|
+
/** Caller-supplied completion evidence reference (set by complete()) */
|
|
41
|
+
evidenceRef?: string;
|
|
40
42
|
}
|
|
41
43
|
/** Input for adding a task to the DAG */
|
|
42
44
|
export interface AddTaskInput {
|
|
@@ -76,8 +78,21 @@ export interface DAGStats {
|
|
|
76
78
|
/** Whether the graph contains cycles (should always be false for a valid DAG) */
|
|
77
79
|
readonly hasCycles: boolean;
|
|
78
80
|
}
|
|
81
|
+
/** Serialized view of a TaskDAG returned by toJSON() */
|
|
82
|
+
export interface DAGSnapshot {
|
|
83
|
+
readonly graphId: string;
|
|
84
|
+
readonly graphRevision: number;
|
|
85
|
+
readonly tasks: DAGTask[];
|
|
86
|
+
readonly edges: Array<{
|
|
87
|
+
from: string;
|
|
88
|
+
to: string;
|
|
89
|
+
}>;
|
|
90
|
+
readonly receipts: PrerequisiteReceiptV1[];
|
|
91
|
+
readonly removedTasks: RemovedTaskRecord[];
|
|
92
|
+
readonly stats: DAGStats;
|
|
93
|
+
}
|
|
79
94
|
/** Event types emitted by the DAG */
|
|
80
|
-
export type DAGEventType = 'task-ready' | 'task-completed' | 'task-failed' | 'tasks-unblocked' | 'cycle-detected';
|
|
95
|
+
export type DAGEventType = 'task-ready' | 'task-completed' | 'task-failed' | 'task-cancelled' | 'task-removed' | 'prerequisite-waived' | 'tasks-unblocked' | 'cycle-detected';
|
|
81
96
|
/** Event emitted by the DAG when state changes occur */
|
|
82
97
|
export interface DAGEvent {
|
|
83
98
|
/** Type of event that occurred */
|
|
@@ -88,6 +103,12 @@ export interface DAGEvent {
|
|
|
88
103
|
readonly unblockedTaskIds?: string[];
|
|
89
104
|
/** Node IDs involved in detected cycles (for 'cycle-detected' events) */
|
|
90
105
|
readonly cycleNodes?: string[];
|
|
106
|
+
/** Prerequisite ID (for 'prerequisite-waived' events) */
|
|
107
|
+
readonly prerequisiteId?: string;
|
|
108
|
+
/** Dependents whose edge was tombstoned (for 'task-removed' events) */
|
|
109
|
+
readonly affectedTaskIds?: string[];
|
|
110
|
+
/** Graph revision at which the change was committed */
|
|
111
|
+
readonly graphRevision?: number;
|
|
91
112
|
/** Timestamp when the event occurred (epoch ms) */
|
|
92
113
|
readonly timestamp: number;
|
|
93
114
|
}
|
|
@@ -100,4 +121,142 @@ export interface DAGSchedulerConfig {
|
|
|
100
121
|
}
|
|
101
122
|
/** Event handler callback for DAG events */
|
|
102
123
|
export type DAGEventHandler = (event: DAGEvent) => void;
|
|
124
|
+
/**
|
|
125
|
+
* Typed state of one prerequisite edge (dependent -> prerequisite).
|
|
126
|
+
* Only SATISFIED and WAIVED allow a dependent to become ready.
|
|
127
|
+
*/
|
|
128
|
+
export type PrerequisiteDisposition = 'UNRESOLVED' | 'SATISFIED' | 'FAILED' | 'CANCELLED' | 'WAIVED' | 'MISSING' | 'REMOVED';
|
|
129
|
+
/** Schema identifier for PrerequisiteReceiptV1 */
|
|
130
|
+
export declare const PREREQUISITE_RECEIPT_SCHEMA: "aqe.task-prerequisite@1";
|
|
131
|
+
/** Waiver attached to a WAIVED receipt */
|
|
132
|
+
export interface PrerequisiteWaiver {
|
|
133
|
+
/** Who issued the waiver */
|
|
134
|
+
readonly actor: string;
|
|
135
|
+
/** Why the prerequisite is waived */
|
|
136
|
+
readonly reason: string;
|
|
137
|
+
/** Reference to the authority (ticket, policy, approval) backing the waiver */
|
|
138
|
+
readonly authorityRef?: string;
|
|
139
|
+
/** ISO-8601 time the waiver was issued */
|
|
140
|
+
readonly issuedAt: string;
|
|
141
|
+
}
|
|
142
|
+
/** Immutable record of a prerequisite edge changing disposition */
|
|
143
|
+
export interface PrerequisiteReceiptV1 {
|
|
144
|
+
readonly schema: typeof PREREQUISITE_RECEIPT_SCHEMA;
|
|
145
|
+
readonly graphId: string;
|
|
146
|
+
/** Graph revision at which this disposition was committed */
|
|
147
|
+
readonly graphRevision: number;
|
|
148
|
+
/** Dependent task */
|
|
149
|
+
readonly taskId: string;
|
|
150
|
+
/** Prerequisite task */
|
|
151
|
+
readonly prerequisiteId: string;
|
|
152
|
+
readonly disposition: PrerequisiteDisposition;
|
|
153
|
+
/** Evidence bound to a SATISFIED disposition (from complete()) */
|
|
154
|
+
readonly completionEvidenceRef?: string;
|
|
155
|
+
/** Present only on WAIVED receipts */
|
|
156
|
+
readonly waiver?: PrerequisiteWaiver;
|
|
157
|
+
/** ISO-8601 time the disposition was observed */
|
|
158
|
+
readonly observedAt: string;
|
|
159
|
+
}
|
|
160
|
+
/** Current disposition of one prerequisite edge, with its latest receipt */
|
|
161
|
+
export interface PrerequisiteEdgeState {
|
|
162
|
+
readonly prerequisiteId: string;
|
|
163
|
+
readonly disposition: PrerequisiteDisposition;
|
|
164
|
+
readonly receipt: PrerequisiteReceiptV1;
|
|
165
|
+
}
|
|
166
|
+
/** Input for TaskDAG.waivePrerequisite() */
|
|
167
|
+
export interface WaivePrerequisiteInput {
|
|
168
|
+
/** Dependent task whose prerequisite is waived */
|
|
169
|
+
readonly taskId: string;
|
|
170
|
+
/** Prerequisite being waived */
|
|
171
|
+
readonly prerequisiteId: string;
|
|
172
|
+
/** Who is waiving (required, non-empty) */
|
|
173
|
+
readonly actor: string;
|
|
174
|
+
/** Why it is waived (required, non-empty) */
|
|
175
|
+
readonly reason: string;
|
|
176
|
+
/** Optional reference to the authority backing the waiver */
|
|
177
|
+
readonly authorityRef?: string;
|
|
178
|
+
/** Compare-and-swap guard: reject if the graph revision has moved */
|
|
179
|
+
readonly expectedRevision?: number;
|
|
180
|
+
}
|
|
181
|
+
/** Context passed to a waiver policy */
|
|
182
|
+
export interface WaiverRequest {
|
|
183
|
+
readonly graphId: string;
|
|
184
|
+
readonly graphRevision: number;
|
|
185
|
+
readonly taskId: string;
|
|
186
|
+
readonly prerequisiteId: string;
|
|
187
|
+
readonly actor: string;
|
|
188
|
+
readonly reason: string;
|
|
189
|
+
readonly authorityRef?: string;
|
|
190
|
+
readonly currentDisposition: PrerequisiteDisposition;
|
|
191
|
+
}
|
|
192
|
+
/** Policy deciding whether a waiver is authorized; return false to reject */
|
|
193
|
+
export type WaiverPolicy = (request: WaiverRequest) => boolean;
|
|
194
|
+
/** Options for constructing a TaskDAG */
|
|
195
|
+
export interface TaskDAGOptions {
|
|
196
|
+
/** Stable graph identity (defaults to a random UUID-based ID) */
|
|
197
|
+
readonly graphId?: string;
|
|
198
|
+
/** Optional authorization policy applied to every waiver */
|
|
199
|
+
readonly waiverPolicy?: WaiverPolicy;
|
|
200
|
+
}
|
|
201
|
+
/** Options for TaskDAG.complete() */
|
|
202
|
+
export interface CompleteTaskOptions {
|
|
203
|
+
/** Evidence reference bound to the SATISFIED receipts this completion emits */
|
|
204
|
+
readonly evidenceRef?: string;
|
|
205
|
+
/** Compare-and-swap guard: reject if the graph revision has moved */
|
|
206
|
+
readonly expectedRevision?: number;
|
|
207
|
+
}
|
|
208
|
+
/** Options for TaskDAG.removeTask() */
|
|
209
|
+
export interface RemoveTaskOptions {
|
|
210
|
+
/** Compare-and-swap guard: reject if the graph revision has moved */
|
|
211
|
+
readonly expectedRevision?: number;
|
|
212
|
+
}
|
|
213
|
+
/** A task that was removed from the graph, kept as a tombstone */
|
|
214
|
+
export interface RemovedTaskRecord {
|
|
215
|
+
readonly taskId: string;
|
|
216
|
+
/** Status the task had when it was removed */
|
|
217
|
+
readonly statusAtRemoval: DAGTaskStatus;
|
|
218
|
+
readonly graphRevision: number;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Obligation accounting over the original graph. Removed tasks stay in
|
|
222
|
+
* the denominator; completed-then-removed tasks still count as completed.
|
|
223
|
+
*/
|
|
224
|
+
export interface ObligationSummary {
|
|
225
|
+
readonly graphId: string;
|
|
226
|
+
readonly graphRevision: number;
|
|
227
|
+
/** Every task ever added since construction or clear() */
|
|
228
|
+
readonly originalTotal: number;
|
|
229
|
+
/** Tasks currently present in the graph */
|
|
230
|
+
readonly currentTotal: number;
|
|
231
|
+
readonly completed: number;
|
|
232
|
+
readonly failed: number;
|
|
233
|
+
readonly cancelled: number;
|
|
234
|
+
/** Tasks removed before completing */
|
|
235
|
+
readonly removed: number;
|
|
236
|
+
/** Live tasks not yet terminal (pending, blocked, ready, in_progress) */
|
|
237
|
+
readonly notRun: number;
|
|
238
|
+
/** Live edges whose current disposition is WAIVED */
|
|
239
|
+
readonly waivedEdges: number;
|
|
240
|
+
/** Live edges whose current disposition is MISSING */
|
|
241
|
+
readonly missingEdges: number;
|
|
242
|
+
/** Live edges whose current disposition is REMOVED */
|
|
243
|
+
readonly removedEdges: number;
|
|
244
|
+
}
|
|
245
|
+
/** Progress report from DAGScheduler.getProgress() */
|
|
246
|
+
export interface DAGProgress {
|
|
247
|
+
/** Completed obligations (including completed tasks later removed) */
|
|
248
|
+
readonly completed: number;
|
|
249
|
+
/** Original obligation denominator; does not shrink when tasks are removed */
|
|
250
|
+
readonly total: number;
|
|
251
|
+
/** completed / total, rounded */
|
|
252
|
+
readonly percentage: number;
|
|
253
|
+
/** Tasks currently present in the graph */
|
|
254
|
+
readonly currentTotal: number;
|
|
255
|
+
readonly failed: number;
|
|
256
|
+
readonly cancelled: number;
|
|
257
|
+
readonly removed: number;
|
|
258
|
+
readonly notRun: number;
|
|
259
|
+
readonly waivedEdges: number;
|
|
260
|
+
readonly graphRevision: number;
|
|
261
|
+
}
|
|
103
262
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
* Defines the core types for representing tasks as nodes in a directed
|
|
6
6
|
* acyclic graph, with dependency edges controlling execution order.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
/** Schema identifier for PrerequisiteReceiptV1 */
|
|
9
|
+
export const PREREQUISITE_RECEIPT_SCHEMA = 'aqe.task-prerequisite@1';
|
|
9
10
|
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Task executability check (#1075, #1081)
|
|
3
|
+
*
|
|
4
|
+
* A Queen-owned task runs only if the domain plugin it is assigned to has an
|
|
5
|
+
* `executeTask` handler for its type. Anything else used to fall through to
|
|
6
|
+
* the `TaskAssigned` event fallback, which nothing answers, so the task stayed
|
|
7
|
+
* `running` and held a concurrency slot for good.
|
|
8
|
+
*/
|
|
9
|
+
import type { DomainName } from '../shared/types';
|
|
10
|
+
import type { DomainPlugin } from '../kernel/interfaces';
|
|
11
|
+
/**
|
|
12
|
+
* List the domains among `domains` that cannot execute `type`, each with the
|
|
13
|
+
* reason and, where known, the types it does support. An empty list means
|
|
14
|
+
* every domain can run the task.
|
|
15
|
+
*/
|
|
16
|
+
export declare function findDomainsWithoutHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string, domains: readonly DomainName[]): string[];
|
|
17
|
+
export declare function describeMissingHandler(type: string, gaps: readonly string[]): string;
|
|
18
|
+
//# sourceMappingURL=task-executability.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Task executability check (#1075, #1081)
|
|
3
|
+
*
|
|
4
|
+
* A Queen-owned task runs only if the domain plugin it is assigned to has an
|
|
5
|
+
* `executeTask` handler for its type. Anything else used to fall through to
|
|
6
|
+
* the `TaskAssigned` event fallback, which nothing answers, so the task stayed
|
|
7
|
+
* `running` and held a concurrency slot for good.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* List the domains among `domains` that cannot execute `type`, each with the
|
|
11
|
+
* reason and, where known, the types it does support. An empty list means
|
|
12
|
+
* every domain can run the task.
|
|
13
|
+
*/
|
|
14
|
+
export function findDomainsWithoutHandler(domainPlugins, type, domains) {
|
|
15
|
+
const gaps = [];
|
|
16
|
+
for (const domain of domains) {
|
|
17
|
+
const plugin = domainPlugins.get(domain);
|
|
18
|
+
if (!plugin) {
|
|
19
|
+
gaps.push(`${domain} (domain not loaded)`);
|
|
20
|
+
}
|
|
21
|
+
else if (!plugin.executeTask || !plugin.canHandleTask?.(type)) {
|
|
22
|
+
const supported = plugin.getSupportedTaskTypes?.() ?? [];
|
|
23
|
+
gaps.push(supported.length > 0 ? `${domain} (supported: ${supported.join(', ')})` : domain);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return gaps;
|
|
27
|
+
}
|
|
28
|
+
export function describeMissingHandler(type, gaps) {
|
|
29
|
+
return `No handler for task type '${type}' in domain ${gaps.join('; ')}`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=task-executability.js.map
|
|
@@ -114,6 +114,7 @@ export declare class DomainTaskExecutor implements TaskHandlerContext {
|
|
|
114
114
|
*/
|
|
115
115
|
getCodeIntelligenceCoordinator(): Promise<ProjectMetricsCollector | undefined>;
|
|
116
116
|
getQualityAnalyzer(): QualityAnalyzerService;
|
|
117
|
+
getTestExecutionAPI(): Promise<import('../domains/test-execution/interfaces').ITestExecutionAPI | undefined>;
|
|
117
118
|
private registerHandlers;
|
|
118
119
|
/**
|
|
119
120
|
* Get or create Agent Booster adapter (instance-level)
|
|
@@ -273,6 +273,11 @@ export class DomainTaskExecutor {
|
|
|
273
273
|
}
|
|
274
274
|
return this.qualityAnalyzer;
|
|
275
275
|
}
|
|
276
|
+
async getTestExecutionAPI() {
|
|
277
|
+
return this.kernel.getDomainAPIAsync
|
|
278
|
+
? this.kernel.getDomainAPIAsync('test-execution')
|
|
279
|
+
: this.kernel.getDomainAPI('test-execution');
|
|
280
|
+
}
|
|
276
281
|
// ============================================================================
|
|
277
282
|
// Handler Registration (delegates to extracted handler modules)
|
|
278
283
|
// ============================================================================
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - QESONA: Learns and adapts code patterns for improved intelligence
|
|
8
8
|
*/
|
|
9
9
|
import { resolveProjectRootFromPaths } from './project-root-resolver.js';
|
|
10
|
+
import { nothingIndexedError, validateIndexPaths } from './index-path-guard.js';
|
|
11
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
10
12
|
import { LoggerFactory } from '../../logging/index.js';
|
|
11
13
|
import { v4 as uuidv4 } from 'uuid';
|
|
12
14
|
import { err } from '../../shared/types/index.js';
|
|
@@ -86,7 +88,9 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
86
88
|
this.knowledgeGraph = new KnowledgeGraphService({ memory, llmRouter });
|
|
87
89
|
this.semanticAnalyzer = new SemanticAnalyzerService(memory);
|
|
88
90
|
this.impactAnalyzer = new ImpactAnalyzerService(memory, this.knowledgeGraph);
|
|
89
|
-
|
|
91
|
+
// #1096: confine reads (semantic index, GNN) to the project root by
|
|
92
|
+
// realpath, as the knowledge graph does.
|
|
93
|
+
this.fileReader = new FileReader({ projectRoot: findProjectRoot() });
|
|
90
94
|
// Initialize Product Factors Bridge.
|
|
91
95
|
// ADR-112 C2: inject a KG-backed relationship resolver so C4 component
|
|
92
96
|
// diagrams use REAL import/call edges (not the naming heuristic).
|
|
@@ -265,6 +269,13 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
265
269
|
* Index codebase into Knowledge Graph
|
|
266
270
|
*/
|
|
267
271
|
async index(request) {
|
|
272
|
+
// #1096: reject a malformed path list before any work starts. The size
|
|
273
|
+
// cap is enforced where callers hand in lists (task_submit, task_orchestrate,
|
|
274
|
+
// `aqe task submit`); `aqe code index` passes the files it discovered.
|
|
275
|
+
const validPaths = validateIndexPaths(request.paths, 'paths', 'Invalid index payload', Number.POSITIVE_INFINITY);
|
|
276
|
+
if (!validPaths.success) {
|
|
277
|
+
return validPaths;
|
|
278
|
+
}
|
|
268
279
|
const workflowId = uuidv4();
|
|
269
280
|
try {
|
|
270
281
|
this.startWorkflow(workflowId, 'index');
|
|
@@ -291,17 +302,32 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
291
302
|
this.updateWorkflowProgress(workflowId, 10);
|
|
292
303
|
// Perform indexing
|
|
293
304
|
const result = await this.knowledgeGraph.index(request);
|
|
305
|
+
// #1096: paths were requested but none was indexed - fail rather than
|
|
306
|
+
// report success, naming what was skipped and why.
|
|
307
|
+
if (result.success && result.value.filesIndexed === 0 && request.paths.length > 0) {
|
|
308
|
+
const failure = nothingIndexedError(request.paths.length, result.value.skipped ?? [], result.value.errors);
|
|
309
|
+
this.failWorkflow(workflowId, failure.message);
|
|
310
|
+
await this.agentCoordinator.stop(agentResult.value);
|
|
311
|
+
return err(failure);
|
|
312
|
+
}
|
|
294
313
|
if (result.success) {
|
|
295
314
|
this.updateWorkflowProgress(workflowId, 40);
|
|
315
|
+
// #1096: the follow-up steps read file content too, so they only see
|
|
316
|
+
// the files the knowledge graph actually indexed.
|
|
317
|
+
const notIndexed = new Set([
|
|
318
|
+
...(result.value.skipped ?? []).map((s) => s.path),
|
|
319
|
+
...result.value.errors.map((e) => e.file),
|
|
320
|
+
]);
|
|
321
|
+
const indexedPaths = request.paths.filter((p) => !notIndexed.has(p));
|
|
296
322
|
// V3: Index code embeddings in GNN
|
|
297
|
-
if (this.config.enableGNN && this.gnnIndex &&
|
|
298
|
-
await this.indexCodeEmbeddings(
|
|
323
|
+
if (this.config.enableGNN && this.gnnIndex && indexedPaths.length > 0) {
|
|
324
|
+
await this.indexCodeEmbeddings(indexedPaths);
|
|
299
325
|
}
|
|
300
326
|
this.updateWorkflowProgress(workflowId, 60);
|
|
301
327
|
// V3: Collect real project metrics using actual tooling (Phase 5)
|
|
302
|
-
if (this.config.enableMetricCollector && this.metricCollector &&
|
|
328
|
+
if (this.config.enableMetricCollector && this.metricCollector && indexedPaths.length > 0) {
|
|
303
329
|
// Determine project root from the caller's target (or the indexed paths)
|
|
304
|
-
const projectPath = this.getProjectRootFromPaths(
|
|
330
|
+
const projectPath = this.getProjectRootFromPaths(indexedPaths, request.target);
|
|
305
331
|
if (projectPath) {
|
|
306
332
|
await this.collectProjectMetrics(projectPath);
|
|
307
333
|
}
|
|
@@ -311,14 +337,14 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
311
337
|
}
|
|
312
338
|
this.updateWorkflowProgress(workflowId, 70);
|
|
313
339
|
// Index content for semantic search
|
|
314
|
-
if (
|
|
315
|
-
await this.indexForSemanticSearch(
|
|
340
|
+
if (indexedPaths.length > 0) {
|
|
341
|
+
await this.indexForSemanticSearch(indexedPaths);
|
|
316
342
|
}
|
|
317
343
|
this.updateWorkflowProgress(workflowId, 85);
|
|
318
344
|
// V3: Rebuild hypergraph from indexed files (keeps hypergraph in sync with KG)
|
|
319
|
-
if (this.config.enableHypergraph && this.hypergraph &&
|
|
345
|
+
if (this.config.enableHypergraph && this.hypergraph && indexedPaths.length > 0) {
|
|
320
346
|
try {
|
|
321
|
-
const codeIndexResult = await this.buildCodeIndexResultFromPaths(
|
|
347
|
+
const codeIndexResult = await this.buildCodeIndexResultFromPaths(indexedPaths);
|
|
322
348
|
if (codeIndexResult.files.length > 0) {
|
|
323
349
|
await this.hypergraph.buildFromIndexResult(codeIndexResult);
|
|
324
350
|
logger.info(`Hypergraph rebuilt from ${codeIndexResult.files.length} indexed files`);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1096: decide which requested paths code indexing may read.
|
|
3
|
+
*
|
|
4
|
+
* Every index entry point (the `index`/`index-code` tasks, `code_index`,
|
|
5
|
+
* `aqe code index`) ends in KnowledgeGraphService.index, which runs these
|
|
6
|
+
* checks before reading anything. A path is indexed only when its realpath is
|
|
7
|
+
* a regular file inside the project root's realpath, so a symlink pointing out
|
|
8
|
+
* of the project is skipped and reported instead of followed. Callers get the
|
|
9
|
+
* skipped paths back with a reason; nothing skipped counts as indexed.
|
|
10
|
+
*/
|
|
11
|
+
import { Result } from '../../shared/types';
|
|
12
|
+
import type { SkippedIndexPath } from './interfaces';
|
|
13
|
+
export interface ConfinedIndexPaths {
|
|
14
|
+
/** Requested paths (as given) that are regular files inside the project root. */
|
|
15
|
+
accepted: string[];
|
|
16
|
+
skipped: SkippedIndexPath[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Most paths a caller may hand an index request at a boundary (MCP
|
|
20
|
+
* task_submit / task_orchestrate, `aqe task submit`). Lists the tools discover
|
|
21
|
+
* themselves (`aqe code index`, init) are not capped here.
|
|
22
|
+
*/
|
|
23
|
+
export declare const MAX_INDEX_PATHS = 10000;
|
|
24
|
+
/**
|
|
25
|
+
* Validate the shape of a caller-supplied path list at a boundary, so a
|
|
26
|
+
* non-array value fails with a clear message rather than deep inside indexing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateIndexPaths(value: unknown, field?: string, context?: string, maxPaths?: number): Result<string[], Error>;
|
|
29
|
+
/**
|
|
30
|
+
* Boundary check shared by `task_submit` and `aqe task submit`: an `index` or
|
|
31
|
+
* `index-code` task that carries `paths` must carry a well-formed list.
|
|
32
|
+
* Returns undefined when the task is acceptable.
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateIndexTaskPayload(type: string, payload: unknown): Error | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Split `paths` into those that may be indexed and those that must be skipped.
|
|
37
|
+
* Relative paths resolve against `basePath` (default: cwd), as FileReader does.
|
|
38
|
+
*/
|
|
39
|
+
export declare function confineIndexPaths(paths: readonly string[], projectRoot: string, basePath?: string): Promise<ConfinedIndexPaths>;
|
|
40
|
+
/**
|
|
41
|
+
* The error an index entry point returns when paths were requested but none
|
|
42
|
+
* was indexed, so a task fails (and the CLI exits non-zero) instead of
|
|
43
|
+
* reporting success for work that did not happen.
|
|
44
|
+
*/
|
|
45
|
+
export declare function nothingIndexedError(requested: number, skipped: readonly SkippedIndexPath[], errors?: ReadonlyArray<{
|
|
46
|
+
file: string;
|
|
47
|
+
error: string;
|
|
48
|
+
}>): Error;
|
|
49
|
+
//# sourceMappingURL=index-path-guard.d.ts.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1096: decide which requested paths code indexing may read.
|
|
3
|
+
*
|
|
4
|
+
* Every index entry point (the `index`/`index-code` tasks, `code_index`,
|
|
5
|
+
* `aqe code index`) ends in KnowledgeGraphService.index, which runs these
|
|
6
|
+
* checks before reading anything. A path is indexed only when its realpath is
|
|
7
|
+
* a regular file inside the project root's realpath, so a symlink pointing out
|
|
8
|
+
* of the project is skipped and reported instead of followed. Callers get the
|
|
9
|
+
* skipped paths back with a reason; nothing skipped counts as indexed.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'node:fs/promises';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import { ok, err } from '../../shared/types/index.js';
|
|
14
|
+
/** True when `candidate` is `root` or lies beneath it (both absolute). */
|
|
15
|
+
function isWithin(root, candidate) {
|
|
16
|
+
const relative = path.relative(root, candidate);
|
|
17
|
+
return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
18
|
+
}
|
|
19
|
+
function describe(value) {
|
|
20
|
+
if (value === null)
|
|
21
|
+
return 'null';
|
|
22
|
+
if (Array.isArray(value))
|
|
23
|
+
return 'array';
|
|
24
|
+
return typeof value;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Most paths a caller may hand an index request at a boundary (MCP
|
|
28
|
+
* task_submit / task_orchestrate, `aqe task submit`). Lists the tools discover
|
|
29
|
+
* themselves (`aqe code index`, init) are not capped here.
|
|
30
|
+
*/
|
|
31
|
+
export const MAX_INDEX_PATHS = 10_000;
|
|
32
|
+
/**
|
|
33
|
+
* Validate the shape of a caller-supplied path list at a boundary, so a
|
|
34
|
+
* non-array value fails with a clear message rather than deep inside indexing.
|
|
35
|
+
*/
|
|
36
|
+
export function validateIndexPaths(value, field = 'paths', context = 'Invalid index payload', maxPaths = MAX_INDEX_PATHS) {
|
|
37
|
+
if (!Array.isArray(value)) {
|
|
38
|
+
return err(new Error(`${context}: '${field}' must be an array of file paths, got ${describe(value)}`));
|
|
39
|
+
}
|
|
40
|
+
if (value.length > maxPaths) {
|
|
41
|
+
return err(new Error(`${context}: '${field}' has ${value.length} entries; at most ${maxPaths} paths are accepted per request - index a directory target or split the list`));
|
|
42
|
+
}
|
|
43
|
+
for (let i = 0; i < value.length; i++) {
|
|
44
|
+
const entry = value[i];
|
|
45
|
+
if (typeof entry !== 'string' || entry.trim() === '') {
|
|
46
|
+
return err(new Error(`${context}: '${field}[${i}]' must be a non-empty string, got ${describe(entry)}`));
|
|
47
|
+
}
|
|
48
|
+
if (entry.includes('\0')) {
|
|
49
|
+
return err(new Error(`${context}: '${field}[${i}]' contains a null byte`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return ok(value);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Boundary check shared by `task_submit` and `aqe task submit`: an `index` or
|
|
56
|
+
* `index-code` task that carries `paths` must carry a well-formed list.
|
|
57
|
+
* Returns undefined when the task is acceptable.
|
|
58
|
+
*/
|
|
59
|
+
export function validateIndexTaskPayload(type, payload) {
|
|
60
|
+
if (type !== 'index' && type !== 'index-code')
|
|
61
|
+
return undefined;
|
|
62
|
+
if (payload === null || typeof payload !== 'object' || !('paths' in payload))
|
|
63
|
+
return undefined;
|
|
64
|
+
const result = validateIndexPaths(payload.paths);
|
|
65
|
+
return result.success ? undefined : result.error;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Split `paths` into those that may be indexed and those that must be skipped.
|
|
69
|
+
* Relative paths resolve against `basePath` (default: cwd), as FileReader does.
|
|
70
|
+
*/
|
|
71
|
+
export async function confineIndexPaths(paths, projectRoot, basePath = process.cwd()) {
|
|
72
|
+
const accepted = [];
|
|
73
|
+
const skipped = [];
|
|
74
|
+
const rootLexical = path.resolve(projectRoot);
|
|
75
|
+
const rootReal = await fs.realpath(projectRoot).catch(() => rootLexical);
|
|
76
|
+
for (const requested of paths) {
|
|
77
|
+
const lexical = path.resolve(basePath, requested);
|
|
78
|
+
// A path that is not even spelled inside the root is refused before any
|
|
79
|
+
// filesystem call, so the reason cannot reveal whether an outside path
|
|
80
|
+
// exists or is readable.
|
|
81
|
+
if (!isWithin(rootLexical, lexical) && !isWithin(rootReal, lexical)) {
|
|
82
|
+
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
let real;
|
|
86
|
+
try {
|
|
87
|
+
real = await fs.realpath(lexical);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const code = error.code;
|
|
91
|
+
skipped.push({ path: requested, reason: code === 'ENOENT' || code === 'ENOTDIR' ? 'not-found' : 'unreadable' });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!isWithin(rootReal, real)) {
|
|
95
|
+
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const stat = await fs.stat(real).catch(() => null);
|
|
99
|
+
if (!stat) {
|
|
100
|
+
skipped.push({ path: requested, reason: 'unreadable' });
|
|
101
|
+
}
|
|
102
|
+
else if (!stat.isFile()) {
|
|
103
|
+
skipped.push({ path: requested, reason: 'not-a-file' });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
accepted.push(requested);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { accepted, skipped };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The error an index entry point returns when paths were requested but none
|
|
113
|
+
* was indexed, so a task fails (and the CLI exits non-zero) instead of
|
|
114
|
+
* reporting success for work that did not happen.
|
|
115
|
+
*/
|
|
116
|
+
export function nothingIndexedError(requested, skipped, errors = []) {
|
|
117
|
+
const details = [
|
|
118
|
+
...skipped.map((s) => `${s.path} (${s.reason})`),
|
|
119
|
+
...errors.map((e) => `${e.file} (${e.error})`),
|
|
120
|
+
];
|
|
121
|
+
const shown = details.slice(0, 5).join(', ');
|
|
122
|
+
const more = details.length > 5 ? `, and ${details.length - 5} more` : '';
|
|
123
|
+
return new Error(`Nothing was indexed: 0 of ${requested} requested path(s) indexed` + (shown ? ` - ${shown}${more}` : ''));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=index-path-guard.js.map
|
|
@@ -37,6 +37,18 @@ export interface IndexResult {
|
|
|
37
37
|
* no dependency extractor, so `deps`/`impact` will show 0 edges for them (#511).
|
|
38
38
|
*/
|
|
39
39
|
warnings?: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Requested paths that were not indexed, with the reason (#1096): missing,
|
|
42
|
+
* not a regular file, resolving outside the project root (e.g. through a
|
|
43
|
+
* symlink), or excluded by the language/test filters. None of them counts
|
|
44
|
+
* toward `filesIndexed`.
|
|
45
|
+
*/
|
|
46
|
+
skipped?: SkippedIndexPath[];
|
|
47
|
+
}
|
|
48
|
+
export type IndexSkipReason = 'not-found' | 'not-a-file' | 'outside-project-root' | 'unreadable' | 'excluded-by-language' | 'excluded-test-file';
|
|
49
|
+
export interface SkippedIndexPath {
|
|
50
|
+
path: string;
|
|
51
|
+
reason: IndexSkipReason;
|
|
40
52
|
}
|
|
41
53
|
export interface IndexError {
|
|
42
54
|
file: string;
|
|
@@ -46,6 +46,11 @@ export interface KnowledgeGraphConfig {
|
|
|
46
46
|
* doesn't trip the FileReader path-traversal guard.
|
|
47
47
|
*/
|
|
48
48
|
basePath?: string;
|
|
49
|
+
/**
|
|
50
|
+
* #1096: directory that indexing is confined to (by realpath). Defaults to
|
|
51
|
+
* `basePath` when set, otherwise the detected project root.
|
|
52
|
+
*/
|
|
53
|
+
projectRoot?: string;
|
|
49
54
|
}
|
|
50
55
|
/**
|
|
51
56
|
* Dependencies for KnowledgeGraphService
|
|
@@ -70,6 +75,7 @@ export declare class KnowledgeGraphService implements IKnowledgeGraphService {
|
|
|
70
75
|
private allEdgesCache?;
|
|
71
76
|
private readonly tsParser;
|
|
72
77
|
private readonly fileReader;
|
|
78
|
+
private readonly projectRoot;
|
|
73
79
|
private readonly embedder;
|
|
74
80
|
/** ADR-051: Optional LLM router for AI-enhanced extraction */
|
|
75
81
|
private readonly llmRouter?;
|