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
|
@@ -7,6 +7,8 @@ import { ok, err } from '../../../shared/types/index.js';
|
|
|
7
7
|
import { TypeScriptParser } from '../../../shared/parsers/index.js';
|
|
8
8
|
import { FileReader } from '../../../shared/io/index.js';
|
|
9
9
|
import { NomicEmbedder } from '../../../shared/embeddings/index.js';
|
|
10
|
+
import { findProjectRoot } from '../../../kernel/project-root.js';
|
|
11
|
+
import { confineIndexPaths } from '../index-path-guard.js';
|
|
10
12
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
11
13
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
12
14
|
import { existsSync, statSync } from 'fs';
|
|
@@ -51,6 +53,7 @@ export class KnowledgeGraphService {
|
|
|
51
53
|
allEdgesCache;
|
|
52
54
|
tsParser;
|
|
53
55
|
fileReader;
|
|
56
|
+
projectRoot;
|
|
54
57
|
embedder;
|
|
55
58
|
/** ADR-051: Optional LLM router for AI-enhanced extraction */
|
|
56
59
|
llmRouter;
|
|
@@ -73,7 +76,13 @@ export class KnowledgeGraphService {
|
|
|
73
76
|
this.llmRouter = undefined;
|
|
74
77
|
}
|
|
75
78
|
this.tsParser = new TypeScriptParser();
|
|
76
|
-
|
|
79
|
+
// #1096: confine reads to the project root by realpath, so a symlink
|
|
80
|
+
// inside the project cannot pull an outside file into the graph.
|
|
81
|
+
this.projectRoot = this.config.projectRoot ?? this.config.basePath ?? findProjectRoot();
|
|
82
|
+
this.fileReader = new FileReader({
|
|
83
|
+
...(this.config.basePath ? { basePath: this.config.basePath } : {}),
|
|
84
|
+
projectRoot: this.projectRoot,
|
|
85
|
+
});
|
|
77
86
|
this.embedder = new NomicEmbedder({
|
|
78
87
|
enableFallback: true,
|
|
79
88
|
});
|
|
@@ -110,21 +119,35 @@ export class KnowledgeGraphService {
|
|
|
110
119
|
const unsupportedByExt = new Map();
|
|
111
120
|
try {
|
|
112
121
|
const { paths, incremental = false, includeTests = true, languages } = request;
|
|
122
|
+
// #1096: index only regular files whose realpath is inside the project
|
|
123
|
+
// root; everything else is reported in `skipped`, never counted.
|
|
124
|
+
const { accepted, skipped } = await confineIndexPaths(paths, this.projectRoot, this.config.basePath ?? process.cwd());
|
|
125
|
+
let filesIndexed = 0;
|
|
113
126
|
// Clear existing graph if not incremental
|
|
114
127
|
if (!incremental) {
|
|
115
128
|
await this.clear();
|
|
116
129
|
}
|
|
117
|
-
|
|
130
|
+
else {
|
|
131
|
+
// #511: a file deleted since the last index must not leave its old
|
|
132
|
+
// nodes/edges behind, even though it is no longer indexed.
|
|
133
|
+
for (const entry of skipped) {
|
|
134
|
+
if (entry.reason === 'not-found')
|
|
135
|
+
await this.removeFileFromGraph(entry.path);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
for (const path of accepted) {
|
|
118
139
|
try {
|
|
119
140
|
// Filter by language if specified
|
|
120
141
|
if (languages && languages.length > 0) {
|
|
121
142
|
const ext = this.getFileExtension(path);
|
|
122
143
|
if (!this.matchesLanguage(ext, languages)) {
|
|
144
|
+
skipped.push({ path, reason: 'excluded-by-language' });
|
|
123
145
|
continue;
|
|
124
146
|
}
|
|
125
147
|
}
|
|
126
148
|
// Skip test files if not included
|
|
127
149
|
if (!includeTests && this.isTestFile(path)) {
|
|
150
|
+
skipped.push({ path, reason: 'excluded-test-file' });
|
|
128
151
|
continue;
|
|
129
152
|
}
|
|
130
153
|
const ext = this.getFileExtension(path);
|
|
@@ -135,6 +158,7 @@ export class KnowledgeGraphService {
|
|
|
135
158
|
const result = await this.indexFile(path, incremental);
|
|
136
159
|
nodesCreated += result.nodes;
|
|
137
160
|
edgesCreated += result.edges;
|
|
161
|
+
filesIndexed++;
|
|
138
162
|
}
|
|
139
163
|
catch (fileError) {
|
|
140
164
|
errors.push({
|
|
@@ -159,19 +183,20 @@ export class KnowledgeGraphService {
|
|
|
159
183
|
}
|
|
160
184
|
// Store indexing metadata
|
|
161
185
|
await this.storeIndexMetadata({
|
|
162
|
-
filesIndexed
|
|
186
|
+
filesIndexed,
|
|
163
187
|
nodesCreated,
|
|
164
188
|
edgesCreated,
|
|
165
189
|
duration,
|
|
166
190
|
indexedAt: new Date().toISOString(),
|
|
167
191
|
});
|
|
168
192
|
return ok({
|
|
169
|
-
filesIndexed
|
|
193
|
+
filesIndexed,
|
|
170
194
|
nodesCreated,
|
|
171
195
|
edgesCreated,
|
|
172
196
|
duration,
|
|
173
197
|
errors,
|
|
174
198
|
warnings,
|
|
199
|
+
skipped,
|
|
175
200
|
});
|
|
176
201
|
}
|
|
177
202
|
catch (error) {
|
|
@@ -521,7 +546,19 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
|
|
|
521
546
|
// STALE pre-edit text. Eviction guarantees fresh reads; the two reads within
|
|
522
547
|
// this method (entities + imports) still share one cache fill, so they stay
|
|
523
548
|
// mutually consistent.
|
|
524
|
-
|
|
549
|
+
try {
|
|
550
|
+
this.fileReader.invalidateCache(filePath);
|
|
551
|
+
}
|
|
552
|
+
catch {
|
|
553
|
+
// #1096: a path the reader's legacy validator rejects (e.g. a project
|
|
554
|
+
// root outside cwd) is never cached; the read below decides.
|
|
555
|
+
}
|
|
556
|
+
// #1096: a file that cannot be read (removed since it was confined, or
|
|
557
|
+
// blocked by the reader) is an error, not an indexed file node.
|
|
558
|
+
const readable = await this.fileReader.readFile(filePath);
|
|
559
|
+
if (!readable.success) {
|
|
560
|
+
throw readable.error;
|
|
561
|
+
}
|
|
525
562
|
// #511: on an incremental re-index, drop this file's prior nodes/edges
|
|
526
563
|
// first so renamed/removed entities and stale outgoing imports don't
|
|
527
564
|
// linger as phantom dependencies. (A full index already cleared everything.)
|
|
@@ -11,6 +11,7 @@ import { toError, toErrorMessage } from '../../shared/error-utils.js';
|
|
|
11
11
|
import { Version } from '../../shared/value-objects/index.js';
|
|
12
12
|
import { createHttpClient } from '../../shared/http/index.js';
|
|
13
13
|
import { FileReader } from '../../shared/io/index.js';
|
|
14
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
14
15
|
import { createEvent } from '../../shared/events/domain-events.js';
|
|
15
16
|
import { ContractValidatorService } from './services/contract-validator.js';
|
|
16
17
|
import { ApiCompatibilityService } from './services/api-compatibility.js';
|
|
@@ -80,7 +81,8 @@ export class ContractTestingCoordinator extends BaseDomainCoordinator {
|
|
|
80
81
|
this.contractValidator = new ContractValidatorService({ memory, llmRouter });
|
|
81
82
|
this.apiCompatibility = new ApiCompatibilityService(memory);
|
|
82
83
|
this.httpClient = createHttpClient();
|
|
83
|
-
|
|
84
|
+
// #1096: a symlink inside the project must not expose an outside file.
|
|
85
|
+
this.fileReader = new FileReader({ projectRoot: findProjectRoot() });
|
|
84
86
|
// Note: schemaValidator initialized when needed for schema operations
|
|
85
87
|
}
|
|
86
88
|
// ==========================================================================
|
|
@@ -10,6 +10,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
10
10
|
import { ok, err } from '../../../shared/types/index.js';
|
|
11
11
|
import { GitAnalyzer } from '../../../shared/git/index.js';
|
|
12
12
|
import { FileReader } from '../../../shared/io/index.js';
|
|
13
|
+
import { findProjectRoot } from '../../../kernel/project-root.js';
|
|
13
14
|
import { TypeScriptParser } from '../../../shared/parsers/index.js';
|
|
14
15
|
import { toError } from '../../../shared/error-utils.js';
|
|
15
16
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
@@ -79,7 +80,8 @@ export class DefectPredictorService {
|
|
|
79
80
|
// New signature: DefectPredictorDependencies
|
|
80
81
|
this.memory = memoryOrDeps.memory;
|
|
81
82
|
this.gitAnalyzer = memoryOrDeps.gitAnalyzer ?? new GitAnalyzer({ enableCache: true });
|
|
82
|
-
|
|
83
|
+
// #1096: a symlink inside the project must not expose an outside file.
|
|
84
|
+
this.fileReader = memoryOrDeps.fileReader ?? new FileReader({ projectRoot: findProjectRoot() });
|
|
83
85
|
this.tsParser = memoryOrDeps.tsParser ?? new TypeScriptParser();
|
|
84
86
|
this.llmRouter = memoryOrDeps.llmRouter;
|
|
85
87
|
}
|
|
@@ -87,7 +89,7 @@ export class DefectPredictorService {
|
|
|
87
89
|
// Old signature: memory, config, gitAnalyzer, fileReader, tsParser
|
|
88
90
|
this.memory = memoryOrDeps;
|
|
89
91
|
this.gitAnalyzer = gitAnalyzer ?? new GitAnalyzer({ enableCache: true });
|
|
90
|
-
this.fileReader = fileReader ?? new FileReader();
|
|
92
|
+
this.fileReader = fileReader ?? new FileReader({ projectRoot: findProjectRoot() });
|
|
91
93
|
this.tsParser = tsParser ?? new TypeScriptParser();
|
|
92
94
|
this.llmRouter = undefined;
|
|
93
95
|
}
|
|
@@ -17,15 +17,16 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { MemoryBackend, RetrieveOptions } from '../../kernel/interfaces.js';
|
|
19
19
|
import type { LearnedPattern } from './interfaces.js';
|
|
20
|
+
/**
|
|
21
|
+
* The kv namespace every learning-optimization writer uses (#491 Bug 2).
|
|
22
|
+
* A database identifier: never rename it.
|
|
23
|
+
*/
|
|
24
|
+
export declare const LEARNING_NAMESPACE = "learning-optimization";
|
|
25
|
+
/** Retrieve options for reads and deletes in `LEARNING_NAMESPACE` (#1071). */
|
|
26
|
+
export declare const LEARNING_NS: Readonly<RetrieveOptions>;
|
|
20
27
|
export declare const LEARNING_PATTERN_KEY_PREFIX = "learning:pattern:";
|
|
21
28
|
/** Sub-key families under the pattern prefix that are not active patterns. */
|
|
22
29
|
export declare const NON_ACTIVE_PATTERN_SEGMENTS: readonly string[];
|
|
23
|
-
/**
|
|
24
|
-
* Key-scan cap for active pattern reads. Keys are cheap to list, and only
|
|
25
|
-
* active keys are fetched, so the cap is set well above realistic store
|
|
26
|
-
* sizes. When it is reached, `onTruncated` is called.
|
|
27
|
-
*/
|
|
28
|
-
export declare const ACTIVE_PATTERN_KEY_SCAN_LIMIT = 10000;
|
|
29
30
|
/**
|
|
30
31
|
* True when the key is in the active pattern key family
|
|
31
32
|
* (`learning:pattern:<id>`), false for provenance, archives and any other
|
|
@@ -40,14 +41,13 @@ export declare function isActivePatternRecord(key: string, value: unknown): valu
|
|
|
40
41
|
export interface ReadActivePatternsOptions {
|
|
41
42
|
/** Namespace passed to `search()` and `get()`. Omit for the backend default. */
|
|
42
43
|
retrieve?: RetrieveOptions;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
/** Called when the key scan hit the cap, so results may be incomplete. */
|
|
46
|
-
onTruncated?: (scanned: number) => void;
|
|
44
|
+
/** First key-scan request size (tests). The scan always reads every key. */
|
|
45
|
+
scanPageSize?: number;
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
|
-
* Read every active learned pattern: list
|
|
50
|
-
* before `get()`, then drop records that fail the
|
|
48
|
+
* Read every active learned pattern: list every key (no cap, #1071), drop
|
|
49
|
+
* non-active key families before `get()`, then drop records that fail the
|
|
50
|
+
* shape guard. Patterns come back in key order. Date fields
|
|
51
51
|
* come back from kv as ISO strings and are rehydrated (#491 Bug 3), so
|
|
52
52
|
* `TimeRange.contains(pattern.createdAt)` works for every reader.
|
|
53
53
|
*/
|
|
@@ -16,15 +16,17 @@
|
|
|
16
16
|
* untouched; this is read-side classification only.
|
|
17
17
|
*/
|
|
18
18
|
import { rehydrateDates } from '../../shared/utils/kv-date-rehydrate.js';
|
|
19
|
+
import { searchAllKeys } from '../../shared/utils/namespaced-search.js';
|
|
20
|
+
/**
|
|
21
|
+
* The kv namespace every learning-optimization writer uses (#491 Bug 2).
|
|
22
|
+
* A database identifier: never rename it.
|
|
23
|
+
*/
|
|
24
|
+
export const LEARNING_NAMESPACE = 'learning-optimization';
|
|
25
|
+
/** Retrieve options for reads and deletes in `LEARNING_NAMESPACE` (#1071). */
|
|
26
|
+
export const LEARNING_NS = Object.freeze({ namespace: LEARNING_NAMESPACE });
|
|
19
27
|
export const LEARNING_PATTERN_KEY_PREFIX = 'learning:pattern:';
|
|
20
28
|
/** Sub-key families under the pattern prefix that are not active patterns. */
|
|
21
29
|
export const NON_ACTIVE_PATTERN_SEGMENTS = ['creation', 'archived'];
|
|
22
|
-
/**
|
|
23
|
-
* Key-scan cap for active pattern reads. Keys are cheap to list, and only
|
|
24
|
-
* active keys are fetched, so the cap is set well above realistic store
|
|
25
|
-
* sizes. When it is reached, `onTruncated` is called.
|
|
26
|
-
*/
|
|
27
|
-
export const ACTIVE_PATTERN_KEY_SCAN_LIMIT = 10_000;
|
|
28
30
|
/**
|
|
29
31
|
* True when the key is in the active pattern key family
|
|
30
32
|
* (`learning:pattern:<id>`), false for provenance, archives and any other
|
|
@@ -53,16 +55,17 @@ export function isActivePatternRecord(key, value) {
|
|
|
53
55
|
return !!record.context && typeof record.context === 'object';
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
|
-
* Read every active learned pattern: list
|
|
57
|
-
* before `get()`, then drop records that fail the
|
|
58
|
+
* Read every active learned pattern: list every key (no cap, #1071), drop
|
|
59
|
+
* non-active key families before `get()`, then drop records that fail the
|
|
60
|
+
* shape guard. Patterns come back in key order. Date fields
|
|
58
61
|
* come back from kv as ISO strings and are rehydrated (#491 Bug 3), so
|
|
59
62
|
* `TimeRange.contains(pattern.createdAt)` works for every reader.
|
|
60
63
|
*/
|
|
61
64
|
export async function readActivePatterns(memory, options = {}) {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
const keys = await searchAllKeys(memory, `${LEARNING_PATTERN_KEY_PREFIX}*`, {
|
|
66
|
+
retrieve: options.retrieve,
|
|
67
|
+
pageSize: options.scanPageSize,
|
|
68
|
+
});
|
|
66
69
|
const patterns = [];
|
|
67
70
|
for (const key of keys) {
|
|
68
71
|
if (!isActivePatternKey(key))
|
|
@@ -45,9 +45,8 @@ export async function getCurrentStrategy(memory, domain) {
|
|
|
45
45
|
retryCount: 3,
|
|
46
46
|
concurrency: 4,
|
|
47
47
|
},
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
},
|
|
48
|
+
// #1099: the default strategy has never run, so no outcome is expected.
|
|
49
|
+
expectedOutcome: {},
|
|
51
50
|
};
|
|
52
51
|
}
|
|
53
52
|
/**
|
|
@@ -276,9 +276,6 @@ export declare class LearningOptimizationCoordinator extends BaseDomainCoordinat
|
|
|
276
276
|
*/
|
|
277
277
|
importModels(modelExport: ModelExport): Promise<Result<ImportReport>>;
|
|
278
278
|
protected subscribeToEvents(): void;
|
|
279
|
-
private handleTestRunCompleted;
|
|
280
|
-
private handleCoverageGap;
|
|
281
|
-
private handleQualityGate;
|
|
282
279
|
/**
|
|
283
280
|
* Handle experience captured from ExperienceCaptureService
|
|
284
281
|
* This is the bridge between Phase 4 experience capture and the coordinator
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Orchestrates learning workflows across all QE domains
|
|
4
4
|
*/
|
|
5
5
|
import { LoggerFactory } from '../../logging/index.js';
|
|
6
|
-
import { readActivePatterns } from './active-patterns.js';
|
|
6
|
+
import { readActivePatterns, LEARNING_NS } from './active-patterns.js';
|
|
7
|
+
import { partitionByRewardSource } from './reward-source.js';
|
|
8
|
+
import { searchAllKeys } from '../../shared/utils/namespaced-search.js';
|
|
7
9
|
import { v4 as uuidv4 } from 'uuid';
|
|
8
10
|
import { toError } from '../../shared/error-utils.js';
|
|
9
11
|
import { rehydrateDates } from '../../shared/utils/kv-date-rehydrate.js';
|
|
@@ -19,7 +21,6 @@ import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
|
|
|
19
21
|
// CQ-004: Extracted modules
|
|
20
22
|
import * as LearningHelpers from './coordinator-helpers.js';
|
|
21
23
|
import * as ConsensusHelpers from './coordinator-consensus.js';
|
|
22
|
-
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
23
24
|
const DEFAULT_CONFIG = {
|
|
24
25
|
maxConcurrentWorkflows: 3,
|
|
25
26
|
defaultTimeout: 120000, // 2 minutes
|
|
@@ -200,7 +201,10 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
200
201
|
// Get experiences from the last cycle
|
|
201
202
|
const timeRange = TimeRange.lastNDays(1);
|
|
202
203
|
const experiencesResult = await this.getExperiencesForDomain(domain, timeRange);
|
|
203
|
-
|
|
204
|
+
// #1109: the reported `before` value and the optimizer use measured outcomes only.
|
|
205
|
+
const experiences = experiencesResult.success
|
|
206
|
+
? partitionByRewardSource(experiencesResult.value).measured
|
|
207
|
+
: [];
|
|
204
208
|
this.updateWorkflowProgress(workflowId, 20);
|
|
205
209
|
// Mine experiences for patterns
|
|
206
210
|
const insightsResult = await this.learningService.mineExperiences(domain, timeRange);
|
|
@@ -221,12 +225,19 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
221
225
|
const optimizationResult = await this.optimizerService.optimizeStrategy(currentStrategy, objective, experiences);
|
|
222
226
|
if (optimizationResult.success) {
|
|
223
227
|
strategiesOptimized = 1;
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
// #1099: `after` is the fitted expectation and `percentChange` the
|
|
229
|
+
// optimizer's estimate; neither was observed. Report no improvement
|
|
230
|
+
// rather than a 0 stand-in when the metric was never predicted.
|
|
231
|
+
const after = optimizationResult.value.optimizedStrategy.expectedOutcome[objective.metric];
|
|
232
|
+
if (typeof after === 'number') {
|
|
233
|
+
improvements.push({
|
|
234
|
+
metric: objective.metric,
|
|
235
|
+
before: this.calculateMetricValue(experiences, objective.metric),
|
|
236
|
+
after,
|
|
237
|
+
percentChange: optimizationResult.value.improvement * 100,
|
|
238
|
+
estimated: true,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
230
241
|
}
|
|
231
242
|
}
|
|
232
243
|
this.updateWorkflowProgress(workflowId, 80);
|
|
@@ -319,6 +330,7 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
319
330
|
domainsOptimized,
|
|
320
331
|
totalStrategies,
|
|
321
332
|
avgImprovement: totalStrategies > 0 ? totalImprovement / totalStrategies : 0,
|
|
333
|
+
improvementEstimated: true,
|
|
322
334
|
byDomain,
|
|
323
335
|
};
|
|
324
336
|
// Publish event
|
|
@@ -743,19 +755,18 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
743
755
|
// Export patterns (#1055: active patterns only — creation provenance
|
|
744
756
|
// and archives share the `learning:pattern:` prefix). One read covers
|
|
745
757
|
// every target domain; the previous per-domain loop exported each
|
|
746
|
-
// pattern once per target domain.
|
|
747
|
-
const activePatterns = await readActivePatterns(this.memory, {
|
|
748
|
-
onTruncated: (scanned) => logger.warn('Pattern export key scan hit its cap; export may be incomplete', { scanned }),
|
|
749
|
-
});
|
|
758
|
+
// pattern once per target domain. #1071: every key is read, no cap.
|
|
759
|
+
const activePatterns = await readActivePatterns(this.memory, { retrieve: LEARNING_NS });
|
|
750
760
|
for (const pattern of activePatterns) {
|
|
751
761
|
if (targetDomains.includes(pattern.domain)) {
|
|
752
762
|
patterns.push(pattern);
|
|
753
763
|
}
|
|
754
764
|
}
|
|
755
765
|
this.updateWorkflowProgress(workflowId, 30);
|
|
756
|
-
// Export knowledge
|
|
766
|
+
// Export knowledge. #1071: no result cap; queryKnowledge reads every
|
|
767
|
+
// shared item before filtering, so other domains cannot crowd these out.
|
|
757
768
|
const knowledgeResult = await this.transferService.queryKnowledge({
|
|
758
|
-
limit:
|
|
769
|
+
limit: Number.POSITIVE_INFINITY,
|
|
759
770
|
});
|
|
760
771
|
if (knowledgeResult.success) {
|
|
761
772
|
for (const item of knowledgeResult.value) {
|
|
@@ -765,10 +776,13 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
765
776
|
}
|
|
766
777
|
}
|
|
767
778
|
this.updateWorkflowProgress(workflowId, 60);
|
|
768
|
-
// Export strategies
|
|
769
|
-
|
|
779
|
+
// Export strategies from the namespace their writers use (#1071), every
|
|
780
|
+
// key, in key order.
|
|
781
|
+
const strategyKeys = await searchAllKeys(this.memory, 'learning:strategy:optimized:*', {
|
|
782
|
+
retrieve: LEARNING_NS,
|
|
783
|
+
});
|
|
770
784
|
for (const key of strategyKeys) {
|
|
771
|
-
const strategy = await this.memory.get(key);
|
|
785
|
+
const strategy = await this.memory.get(key, LEARNING_NS);
|
|
772
786
|
if (strategy && targetDomains.includes(strategy.domain)) {
|
|
773
787
|
strategies.push(strategy);
|
|
774
788
|
}
|
|
@@ -811,7 +825,7 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
811
825
|
const conflicts = [];
|
|
812
826
|
// Import patterns
|
|
813
827
|
for (const pattern of modelExport.patterns) {
|
|
814
|
-
const existing = await this.memory.get(`learning:pattern:${pattern.id}
|
|
828
|
+
const existing = await this.memory.get(`learning:pattern:${pattern.id}`, { namespace: 'learning-optimization' });
|
|
815
829
|
if (existing) {
|
|
816
830
|
if (existing.confidence < pattern.confidence) {
|
|
817
831
|
// Overwrite with better pattern
|
|
@@ -847,7 +861,8 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
847
861
|
}
|
|
848
862
|
// Import knowledge
|
|
849
863
|
for (const item of modelExport.knowledge) {
|
|
850
|
-
|
|
864
|
+
// #1071: compare against the record in the namespace written below.
|
|
865
|
+
const existing = await this.memory.get(`learning:knowledge:shared:${item.id}`, LEARNING_NS);
|
|
851
866
|
if (existing) {
|
|
852
867
|
if (item.version > existing.version) {
|
|
853
868
|
await this.memory.set(`learning:knowledge:shared:${item.id}`, item, {
|
|
@@ -882,7 +897,8 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
882
897
|
}
|
|
883
898
|
// Import strategies
|
|
884
899
|
for (const strategy of modelExport.strategies) {
|
|
885
|
-
|
|
900
|
+
// #1071: compare against the record in the namespace written below.
|
|
901
|
+
const existing = await this.memory.get(`learning:strategy:optimized:${strategy.id}`, LEARNING_NS);
|
|
886
902
|
if (existing) {
|
|
887
903
|
if (strategy.confidence > existing.confidence) {
|
|
888
904
|
await this.memory.set(`learning:strategy:optimized:${strategy.id}`, strategy, { namespace: 'learning-optimization', persist: true });
|
|
@@ -928,87 +944,13 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
928
944
|
// Event Handling
|
|
929
945
|
// ============================================================================
|
|
930
946
|
subscribeToEvents() {
|
|
931
|
-
//
|
|
932
|
-
|
|
933
|
-
//
|
|
934
|
-
|
|
935
|
-
// Subscribe to quality assessment events
|
|
936
|
-
this.eventBus.subscribe('quality-assessment.QualityGateEvaluated', this.handleQualityGate.bind(this));
|
|
947
|
+
// #1110: TestRunCompleted, CoverageGapDetected and QualityGateEvaluated are
|
|
948
|
+
// recorded by LearningOptimizationPlugin, which owns this coordinator and
|
|
949
|
+
// also records the test-run production metric. Subscribing here as well
|
|
950
|
+
// stored every such event twice.
|
|
937
951
|
// Subscribe to experience capture events (Phase 4 integration)
|
|
938
952
|
this.eventBus.subscribe('learning.ExperienceCaptured', this.handleExperienceCaptured.bind(this));
|
|
939
953
|
}
|
|
940
|
-
async handleTestRunCompleted(event) {
|
|
941
|
-
// Record experience from test run
|
|
942
|
-
const { runId, passed, failed, duration } = event.payload;
|
|
943
|
-
const successRate = (passed + failed) > 0 ? passed / (passed + failed) : 0;
|
|
944
|
-
await this.learningService.recordExperience({
|
|
945
|
-
agentId: {
|
|
946
|
-
value: 'test-execution',
|
|
947
|
-
domain: 'test-execution',
|
|
948
|
-
type: 'tester',
|
|
949
|
-
},
|
|
950
|
-
domain: 'test-execution',
|
|
951
|
-
action: 'test-run',
|
|
952
|
-
state: {
|
|
953
|
-
context: { runId },
|
|
954
|
-
metrics: { passed, failed, duration },
|
|
955
|
-
},
|
|
956
|
-
result: {
|
|
957
|
-
success: successRate > 0.8,
|
|
958
|
-
outcome: { success_rate: successRate, passed, failed },
|
|
959
|
-
duration,
|
|
960
|
-
},
|
|
961
|
-
reward: successRate,
|
|
962
|
-
});
|
|
963
|
-
}
|
|
964
|
-
async handleCoverageGap(event) {
|
|
965
|
-
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
966
|
-
if (!isMeasuredGapPayload(event.payload))
|
|
967
|
-
return;
|
|
968
|
-
// Record as experience for learning
|
|
969
|
-
const { gapId, file, riskScore } = event.payload;
|
|
970
|
-
await this.learningService.recordExperience({
|
|
971
|
-
agentId: {
|
|
972
|
-
value: 'coverage-analysis',
|
|
973
|
-
domain: 'coverage-analysis',
|
|
974
|
-
type: 'analyzer',
|
|
975
|
-
},
|
|
976
|
-
domain: 'coverage-analysis',
|
|
977
|
-
action: 'gap-detection',
|
|
978
|
-
state: {
|
|
979
|
-
context: { gapId, file },
|
|
980
|
-
metrics: { riskScore },
|
|
981
|
-
},
|
|
982
|
-
result: {
|
|
983
|
-
success: true,
|
|
984
|
-
outcome: { risk_score: riskScore },
|
|
985
|
-
duration: 0,
|
|
986
|
-
},
|
|
987
|
-
reward: 1 - riskScore, // Lower risk = higher reward
|
|
988
|
-
});
|
|
989
|
-
}
|
|
990
|
-
async handleQualityGate(event) {
|
|
991
|
-
const { gateId, passed } = event.payload;
|
|
992
|
-
await this.learningService.recordExperience({
|
|
993
|
-
agentId: {
|
|
994
|
-
value: 'quality-assessment',
|
|
995
|
-
domain: 'quality-assessment',
|
|
996
|
-
type: 'validator',
|
|
997
|
-
},
|
|
998
|
-
domain: 'quality-assessment',
|
|
999
|
-
action: 'gate-evaluation',
|
|
1000
|
-
state: {
|
|
1001
|
-
context: { gateId },
|
|
1002
|
-
metrics: { passed: passed ? 1 : 0 },
|
|
1003
|
-
},
|
|
1004
|
-
result: {
|
|
1005
|
-
success: passed,
|
|
1006
|
-
outcome: { gate_passed: passed ? 1 : 0 },
|
|
1007
|
-
duration: 0,
|
|
1008
|
-
},
|
|
1009
|
-
reward: passed ? 1 : 0,
|
|
1010
|
-
});
|
|
1011
|
-
}
|
|
1012
954
|
/**
|
|
1013
955
|
* Handle experience captured from ExperienceCaptureService
|
|
1014
956
|
* This is the bridge between Phase 4 experience capture and the coordinator
|
|
@@ -1232,9 +1174,8 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
1232
1174
|
retryCount: 3,
|
|
1233
1175
|
concurrency: 4,
|
|
1234
1176
|
},
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
},
|
|
1177
|
+
// #1099: the default strategy has never run, so no outcome is expected.
|
|
1178
|
+
expectedOutcome: {},
|
|
1238
1179
|
};
|
|
1239
1180
|
}
|
|
1240
1181
|
async storeStrategy(domain, strategy) {
|
|
@@ -10,5 +10,5 @@ export { LearningCoordinatorService, type LearningCoordinatorConfig as LearningS
|
|
|
10
10
|
export { TransferSpecialistService, type TransferSpecialistConfig, type TransferResult, } from './services/transfer-specialist.js';
|
|
11
11
|
export { MetricsOptimizerService, type MetricsOptimizerConfig, type MetricsSnapshot, } from './services/metrics-optimizer.js';
|
|
12
12
|
export { ProductionIntelService, type ProductionIntelConfig, type ProductionMetric, type ProductionIncident, type ProductionHealth, } from './services/production-intel.js';
|
|
13
|
-
export type { ILearningOptimizationCoordinator, LearningCycleReport, OptimizationReport, CrossDomainSharingReport, LearningDashboard, ModelExport, ImportReport, ImportConflict, Improvement, DomainOptimizationResult, TrendPoint, Milestone, LearnedPattern, PatternType, PatternContext, PatternTemplate, TemplateVariable, PatternStats, IPatternLearningService, Experience, ExperienceResult, StateSnapshot, ResourceUsage, MinedInsights, ExperienceCluster, ExperienceAnomaly, IExperienceMiningService, Knowledge, KnowledgeType, KnowledgeContent, KnowledgeQuery, IKnowledgeSynthesisService, Strategy, OptimizedStrategy, OptimizationObjective, Constraint, ValidationResult, ABTestConfig, ABTestResult, StrategyEvaluation, IStrategyOptimizerService, IPatternRepository, IExperienceRepository, IKnowledgeRepository, IStrategyRepository, PatternLearnedEvent, KnowledgeSharedEvent, StrategyOptimizedEvent, ExperienceRecordedEvent, LearningMilestoneReachedEvent, } from './interfaces.js';
|
|
13
|
+
export type { ILearningOptimizationCoordinator, LearningCycleReport, OptimizationReport, CrossDomainSharingReport, LearningDashboard, ModelExport, ImportReport, ImportConflict, Improvement, DomainOptimizationResult, TrendPoint, Milestone, LearnedPattern, PatternType, PatternContext, PatternTemplate, TemplateVariable, PatternStats, IPatternLearningService, Experience, ExperienceResult, StateSnapshot, ResourceUsage, MinedInsights, ExperienceCluster, ExperienceAnomaly, IExperienceMiningService, Knowledge, KnowledgeType, KnowledgeContent, KnowledgeQuery, IKnowledgeSynthesisService, Strategy, OptimizedStrategy, OptimizationEvaluation, OptimizationObjective, Constraint, ValidationResult, ABTestConfig, ABTestResult, StrategyEvaluation, IStrategyOptimizerService, IPatternRepository, IExperienceRepository, IKnowledgeRepository, IStrategyRepository, PatternLearnedEvent, KnowledgeSharedEvent, StrategyOptimizedEvent, ExperienceRecordedEvent, LearningMilestoneReachedEvent, } from './interfaces.js';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|