agentic-qe 3.15.7 → 3.15.8
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 +122 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-FC4EY447.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-OS5G7KMQ.js → agent-booster-wasm-W3V5P7LE.js} +2 -2
- package/dist/cli/chunks/{agent-handler-PI4I7PME.js → agent-handler-2NQFHAWE.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-J7TXHX4U.js → agent-memory-branch-457ECHHK.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +2 -0
- package/dist/cli/chunks/{arena-FXESDCFR.js → arena-IYBQ3GPY.js} +4 -4
- package/dist/cli/chunks/{arena-OWUGXKNT.js → arena-JV3WSEHU.js} +2 -2
- package/dist/cli/chunks/{audit-EPAWLYIZ.js → audit-5OS3T3K6.js} +3 -3
- package/dist/cli/chunks/base-2XML4WH7.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IYVR5EQY.js → better-sqlite3-IQKBFVAO.js} +2 -2
- package/dist/cli/chunks/{brain-handler-3W2E6TC6.js → brain-handler-KA3SGAFM.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HU7VACJ4.js → branch-enumerator-QZDU2VOQ.js} +2 -2
- package/dist/cli/chunks/{browser-72XOR6E2.js → browser-ZL7OLKJQ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +2 -0
- package/dist/cli/chunks/{chunk-ZRLNACPY.js → chunk-22DOS3PM.js} +2 -2
- package/dist/cli/chunks/{chunk-QVG4ZDXX.js → chunk-2DPHFCMW.js} +2 -2
- package/dist/cli/chunks/{chunk-JFPXCQNP.js → chunk-2GSAAUW3.js} +1 -1
- package/dist/cli/chunks/{chunk-HPG7354V.js → chunk-2JCLACCS.js} +2 -2
- package/dist/cli/chunks/{chunk-44DPYNPE.js → chunk-2QRGIEQV.js} +1 -1
- package/dist/cli/chunks/{chunk-W4X2VTIY.js → chunk-2UN4JOTN.js} +2 -2
- package/dist/cli/chunks/{chunk-2423JAA5.js → chunk-2ZRNXEVI.js} +1 -1
- package/dist/cli/chunks/{chunk-CXTJ47QS.js → chunk-3LFLO2WK.js} +2 -2
- package/dist/cli/chunks/{chunk-QQT6QENQ.js → chunk-3N627QRU.js} +2 -2
- package/dist/cli/chunks/{chunk-LQOVA4YX.js → chunk-4C3RYBTT.js} +2 -2
- package/dist/cli/chunks/{chunk-5PBRBS7D.js → chunk-4C7KE2EL.js} +2 -2
- package/dist/cli/chunks/{chunk-J43DV3ME.js → chunk-4GUVVGJX.js} +1 -1
- package/dist/cli/chunks/{chunk-EL75G2A3.js → chunk-4GYFONJB.js} +1 -1
- package/dist/cli/chunks/{chunk-MJJC6HUK.js → chunk-4I35ARWW.js} +1 -1
- package/dist/cli/chunks/{chunk-6OS7HREG.js → chunk-4NTLGGXO.js} +1 -1
- package/dist/cli/chunks/{chunk-3RM46XFP.js → chunk-4TZLZRZ4.js} +1 -1
- package/dist/cli/chunks/{chunk-BTYKGVJ5.js → chunk-4YUBWU3E.js} +1 -1
- package/dist/cli/chunks/{chunk-6AYRAOCA.js → chunk-52YRSWPS.js} +2 -2
- package/dist/cli/chunks/{chunk-24CENUT4.js → chunk-5DZDLOY6.js} +3 -3
- package/dist/cli/chunks/{chunk-34JLY3U6.js → chunk-5MBNRTT5.js} +2 -2
- package/dist/cli/chunks/{chunk-SQHLC6I5.js → chunk-5ONJ7AV6.js} +1 -1
- package/dist/cli/chunks/{chunk-Y4SAWE45.js → chunk-5YOO5QSE.js} +1 -1
- package/dist/cli/chunks/{chunk-V2SAEMZY.js → chunk-62T7U25U.js} +1 -1
- package/dist/cli/chunks/{chunk-UIYKR2SA.js → chunk-6CKTLVYV.js} +2 -2
- package/dist/cli/chunks/{chunk-2E3XWKEU.js → chunk-6E7EOHMN.js} +2 -2
- package/dist/cli/chunks/{chunk-DGK6GQMO.js → chunk-6GIC2263.js} +2 -2
- package/dist/cli/chunks/{chunk-2RJYA6WK.js → chunk-767SR7WH.js} +2 -2
- package/dist/cli/chunks/{chunk-RCYLCA7E.js → chunk-7C6FMLQR.js} +2 -2
- package/dist/cli/chunks/{chunk-XTJMY3KS.js → chunk-7CVMT64N.js} +1 -1
- package/dist/cli/chunks/{chunk-JK6B3ULP.js → chunk-7DHSHD5B.js} +2 -2
- package/dist/cli/chunks/{chunk-JYXOFN3E.js → chunk-7H3GNRNA.js} +2 -2
- package/dist/cli/chunks/{chunk-7EX4DEQR.js → chunk-7SLEUVPZ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLVQSEZK.js → chunk-7XGM7Q2N.js} +2 -2
- package/dist/cli/chunks/{chunk-RNYX4CPI.js → chunk-A2UGPKCS.js} +2 -2
- package/dist/cli/chunks/{chunk-K7W55B7Q.js → chunk-A6GCO6ZU.js} +2 -2
- package/dist/cli/chunks/{chunk-C2MDBBFF.js → chunk-BEVWCF3Q.js} +3 -3
- package/dist/cli/chunks/{chunk-PZG3542B.js → chunk-BLZEOGQE.js} +2 -2
- package/dist/cli/chunks/{chunk-6PKCQXEW.js → chunk-BQUIZ5QT.js} +2 -2
- package/dist/cli/chunks/{chunk-JY4AIEZ7.js → chunk-BTMEOZYY.js} +1 -1
- package/dist/cli/chunks/{chunk-OA4GR3EZ.js → chunk-CDLG3Q2O.js} +2 -2
- package/dist/cli/chunks/{chunk-FVBFASOD.js → chunk-CQ3SBRDP.js} +2 -2
- package/dist/cli/chunks/{chunk-ZUMDDMDE.js → chunk-CQ5G64EA.js} +2 -2
- package/dist/cli/chunks/{chunk-ED32XJ5R.js → chunk-CRUQ6RXU.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTMZFF25.js → chunk-D4IBIMWI.js} +2 -2
- package/dist/cli/chunks/{chunk-QNQSM2OG.js → chunk-D4O3TJI7.js} +2 -2
- package/dist/cli/chunks/{chunk-IYQ7XNE5.js → chunk-DAFMHM64.js} +2 -2
- package/dist/cli/chunks/{chunk-5KS7HA37.js → chunk-DCYUHCPK.js} +1 -1
- package/dist/cli/chunks/{chunk-Q2T5FXEA.js → chunk-DKFSCJEF.js} +2 -2
- package/dist/cli/chunks/{chunk-ONVALAZN.js → chunk-DN3AKAPY.js} +2 -2
- package/dist/cli/chunks/{chunk-LDXQRNTT.js → chunk-DY37YMMQ.js} +1 -1
- package/dist/cli/chunks/{chunk-NZQPP533.js → chunk-EUVSSIGR.js} +3 -3
- package/dist/cli/chunks/{chunk-V5NGBQAQ.js → chunk-FAYXES7R.js} +2 -2
- package/dist/cli/chunks/{chunk-EV2BYY6T.js → chunk-FEN2DHFM.js} +1 -1
- package/dist/cli/chunks/{chunk-TU4LIIOP.js → chunk-FEPFXXI7.js} +2 -2
- package/dist/cli/chunks/{chunk-Y6A46M3B.js → chunk-FJAO4UX2.js} +2 -2
- package/dist/cli/chunks/{chunk-4G2VNW4C.js → chunk-FWXNFPLS.js} +2 -2
- package/dist/cli/chunks/{chunk-DVPGBDBP.js → chunk-G6CLO74Q.js} +3 -3
- package/dist/cli/chunks/{chunk-RORZ5O5Z.js → chunk-G77Q22EN.js} +2 -2
- package/dist/cli/chunks/{chunk-G762PEFO.js → chunk-GENNJRNK.js} +3 -3
- package/dist/cli/chunks/{chunk-XXAVQACL.js → chunk-GGSTLKY5.js} +1 -1
- package/dist/cli/chunks/{chunk-BB7OLQKO.js → chunk-GSOK4M6V.js} +1 -1
- package/dist/cli/chunks/{chunk-PEKDSJBC.js → chunk-HI6OBDDY.js} +2 -2
- package/dist/cli/chunks/{chunk-MMXG3LL6.js → chunk-HNGNRIZZ.js} +2 -2
- package/dist/cli/chunks/{chunk-N4PMPSJJ.js → chunk-HXCGV5UJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YDZJWDR6.js → chunk-I4U7YCXG.js} +3 -3
- package/dist/cli/chunks/{chunk-I7H4IP7T.js → chunk-I77D65X5.js} +2 -2
- package/dist/cli/chunks/{chunk-WXI2STKQ.js → chunk-IJSFZO7P.js} +2 -2
- package/dist/cli/chunks/{chunk-WTLIEBDH.js → chunk-IMSRWNWF.js} +1 -1
- package/dist/cli/chunks/{chunk-634D2ENF.js → chunk-J6LL25QJ.js} +2 -2
- package/dist/cli/chunks/{chunk-LVEX4GID.js → chunk-J7FLNP5L.js} +2 -2
- package/dist/cli/chunks/{chunk-CIFWOMNX.js → chunk-J7RCI25Q.js} +1 -1
- package/dist/cli/chunks/{chunk-HLZATDD2.js → chunk-JFWQFB3S.js} +2 -2
- package/dist/cli/chunks/{chunk-3JD2USUH.js → chunk-JLTGO5BB.js} +2 -2
- package/dist/cli/chunks/{chunk-SX2YSHE7.js → chunk-JWPYMRIX.js} +1 -1
- package/dist/cli/chunks/{chunk-4DIZ5BT6.js → chunk-K4N2MBCE.js} +2 -2
- package/dist/cli/chunks/{chunk-HSDOOFV7.js → chunk-K5R3WUJP.js} +1 -1
- package/dist/cli/chunks/{chunk-LP4AS2E4.js → chunk-KITKQUBX.js} +1 -1
- package/dist/cli/chunks/{chunk-VCA6YYII.js → chunk-KJNUETCB.js} +1 -1
- package/dist/cli/chunks/{chunk-PXZKPUW6.js → chunk-KMVFBYJO.js} +2 -2
- package/dist/cli/chunks/{chunk-IWQQIXHO.js → chunk-KMZW2P3R.js} +2 -2
- package/dist/cli/chunks/{chunk-2AYBYXOA.js → chunk-KNHLOANK.js} +2 -2
- package/dist/cli/chunks/{chunk-JY4WLN3K.js → chunk-KNQUHGNY.js} +2 -2
- package/dist/cli/chunks/{chunk-LGBN7TKC.js → chunk-KVMKYUOE.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3NOC2R.js → chunk-LHRVSK44.js} +2 -2
- package/dist/cli/chunks/{chunk-IARSGAG7.js → chunk-LPSMVBB3.js} +2 -2
- package/dist/cli/chunks/{chunk-CWPRU7ZI.js → chunk-LVHZK7GW.js} +2 -2
- package/dist/cli/chunks/{chunk-T3ZDVU6F.js → chunk-LZWBUVCK.js} +2 -2
- package/dist/cli/chunks/{chunk-MNCF643K.js → chunk-MMY52Y6R.js} +2 -2
- package/dist/cli/chunks/{chunk-YUC7RJGR.js → chunk-MUDBF2JC.js} +1 -1
- package/dist/cli/chunks/{chunk-XEWXYGJI.js → chunk-MV4S3TEC.js} +2 -2
- package/dist/cli/chunks/{chunk-MRHM4COP.js → chunk-NF63NHJH.js} +2 -2
- package/dist/cli/chunks/{chunk-KPOPBUUJ.js → chunk-NHOMVBCI.js} +2 -2
- package/dist/cli/chunks/{chunk-RXAFLK34.js → chunk-NLYUC63R.js} +2 -2
- package/dist/cli/chunks/{chunk-MHZPC4HJ.js → chunk-NQDYOF35.js} +2 -2
- package/dist/cli/chunks/{chunk-OJEZNLB6.js → chunk-NW7HTOSN.js} +2 -2
- package/dist/cli/chunks/{chunk-6JT73S5B.js → chunk-NWFBF3KT.js} +1 -1
- package/dist/cli/chunks/{chunk-REEIFA6A.js → chunk-NZATJ2C6.js} +2 -2
- package/dist/cli/chunks/{chunk-5KCBX225.js → chunk-O4RRVTXN.js} +2 -2
- package/dist/cli/chunks/{chunk-6BO3WCK7.js → chunk-OCLAMZJG.js} +2 -2
- package/dist/cli/chunks/{chunk-ICPALF4Q.js → chunk-OJWEZYLR.js} +2 -2
- package/dist/cli/chunks/{chunk-Z3VJLWRR.js → chunk-OWBFVAEH.js} +2 -2
- package/dist/cli/chunks/{chunk-LDZWIV2O.js → chunk-P2EA62YS.js} +1 -1
- package/dist/cli/chunks/{chunk-IC2WSSD5.js → chunk-P4UT4LBE.js} +3 -3
- package/dist/cli/chunks/{chunk-FTTFJ7SJ.js → chunk-PICEGWGB.js} +1 -1
- package/dist/cli/chunks/{chunk-AXO7OOOA.js → chunk-PIEKGKW6.js} +2 -2
- package/dist/cli/chunks/{chunk-PQV7E7XH.js → chunk-PJGQ2TKN.js} +2 -2
- package/dist/cli/chunks/{chunk-7UCVYYWL.js → chunk-PPIM7B5G.js} +2 -2
- package/dist/cli/chunks/{chunk-UBYCR3O4.js → chunk-PUYQ6EKC.js} +2 -2
- package/dist/cli/chunks/{chunk-2YVJ5OUL.js → chunk-PWA6XBW4.js} +8 -8
- package/dist/cli/chunks/{chunk-VNW5Q2CX.js → chunk-PZ7FJ4UG.js} +2 -2
- package/dist/cli/chunks/{chunk-DCJW2DPL.js → chunk-QFYUZYRA.js} +4 -4
- package/dist/cli/chunks/{chunk-F62EKVVC.js → chunk-R2NHGESM.js} +2 -2
- package/dist/cli/chunks/{chunk-HTWIGQL4.js → chunk-RG42LDOB.js} +2 -2
- package/dist/cli/chunks/{chunk-UCLN6AME.js → chunk-RSMPJWQH.js} +1 -1
- package/dist/cli/chunks/{chunk-HZFT3P5B.js → chunk-SFPGLUXS.js} +1 -1
- package/dist/cli/chunks/{chunk-5Q22XPTH.js → chunk-SHEVM5PF.js} +2 -2
- package/dist/cli/chunks/{chunk-B7M323VL.js → chunk-SJMZZMHP.js} +2 -2
- package/dist/cli/chunks/{chunk-PG64YV6C.js → chunk-ST7ASEJO.js} +11 -11
- package/dist/cli/chunks/{chunk-WUV5RZUI.js → chunk-SWY6KGMF.js} +2 -2
- package/dist/cli/chunks/{chunk-MDC4G323.js → chunk-T2TDTBFV.js} +1 -1
- package/dist/cli/chunks/{chunk-6FEQ73BF.js → chunk-TC52M542.js} +2 -2
- package/dist/cli/chunks/{chunk-PTK66HEY.js → chunk-TMNEK7TP.js} +2 -2
- package/dist/cli/chunks/{chunk-UY3REQOK.js → chunk-U3BWBP6B.js} +2 -2
- package/dist/cli/chunks/{chunk-PUECC4WI.js → chunk-U7CIY3YR.js} +2 -2
- package/dist/cli/chunks/{chunk-LMEU64TR.js → chunk-UDCYQLTD.js} +2 -2
- package/dist/cli/chunks/{chunk-MNZFEIE5.js → chunk-UKKFZJME.js} +1 -1
- package/dist/cli/chunks/{chunk-BTIBXGVQ.js → chunk-UQLAN5TX.js} +4 -4
- package/dist/cli/chunks/{chunk-UUHIEM2M.js → chunk-UTFMMZ57.js} +3 -3
- package/dist/cli/chunks/{chunk-C2CUPJGR.js → chunk-UTNKMPTC.js} +1 -1
- package/dist/cli/chunks/{chunk-ECSLJJOQ.js → chunk-V4QJ3MMT.js} +1 -1
- package/dist/cli/chunks/{chunk-56ZKQYZY.js → chunk-V7VZSNDK.js} +3 -3
- package/dist/cli/chunks/{chunk-AAA4SHEG.js → chunk-VKFVJCIH.js} +1 -1
- package/dist/cli/chunks/{chunk-VKPKYMCT.js → chunk-VQRBBR27.js} +2 -2
- package/dist/cli/chunks/{chunk-SSP2B2WR.js → chunk-VVK4ECVJ.js} +2 -2
- package/dist/cli/chunks/{chunk-T6W5APYP.js → chunk-VWRNG3UK.js} +1 -1
- package/dist/cli/chunks/{chunk-YFOBQSOW.js → chunk-VWSGWYRB.js} +2 -2
- package/dist/cli/chunks/{chunk-PYHYOKYT.js → chunk-W5A36V3Z.js} +2 -2
- package/dist/cli/chunks/{chunk-EB2PP6X2.js → chunk-WAWKAYPY.js} +1 -1
- package/dist/cli/chunks/{chunk-QWLTHFZW.js → chunk-WLXGUQOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-JPHDMHFG.js → chunk-X3HM7SV4.js} +2 -2
- package/dist/cli/chunks/chunk-X6VYQVUM.js +2 -0
- package/dist/cli/chunks/{chunk-MKFQNCXI.js → chunk-X7ZQIFES.js} +2 -2
- package/dist/cli/chunks/{chunk-GY2SAIXP.js → chunk-XOOBLZXR.js} +2 -2
- package/dist/cli/chunks/{chunk-MQ6OF6DU.js → chunk-XZQVC3GD.js} +1 -1
- package/dist/cli/chunks/{chunk-M63QB466.js → chunk-Y5ZBF7MA.js} +2 -2
- package/dist/cli/chunks/{chunk-EDU72RTW.js → chunk-YNQPHRUZ.js} +1 -1
- package/dist/cli/chunks/{chunk-RRPYWBFX.js → chunk-YRH7KMTU.js} +2 -2
- package/dist/cli/chunks/{chunk-CG5DZCOZ.js → chunk-YTYS2XSY.js} +1 -1
- package/dist/cli/chunks/{chunk-G7YTZTGU.js → chunk-YUP3APSN.js} +1 -1
- package/dist/cli/chunks/{chunk-HXBAQKMH.js → chunk-YVWMJZ6O.js} +2 -2
- package/dist/cli/chunks/{chunk-QJE6ZW2X.js → chunk-Z3LDUPLQ.js} +2 -2
- package/dist/cli/chunks/{chunk-JVYPXW6Y.js → chunk-ZBI7PJFX.js} +2 -2
- package/dist/cli/chunks/{chunk-XNSQZ3O7.js → chunk-ZG7UKWBB.js} +2 -2
- package/dist/cli/chunks/{chunk-H4WHDFB5.js → chunk-ZOHS32SI.js} +2 -2
- package/dist/cli/chunks/{chunk-J26GADQE.js → chunk-ZOVAZTXE.js} +342 -342
- package/dist/cli/chunks/{chunk-VUFRTGML.js → chunk-ZWMFKZEQ.js} +2 -2
- package/dist/cli/chunks/{ci-5HEXJZ2C.js → ci-7NUCRGWO.js} +2 -2
- package/dist/cli/chunks/{ci-config-WU4NPDAM.js → ci-config-VQVECCFI.js} +2 -2
- package/dist/cli/chunks/{ci-output-BJQVXX5E.js → ci-output-P7GQ6TKF.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-3BMGTQCB.js → circuit-breaker-5YP6N6HE.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-GVDGJWMU.js → claude-flow-setup-W5H7CMU6.js} +2 -2
- package/dist/cli/chunks/client-RFUSQRUZ.js +2 -0
- package/dist/cli/chunks/{cline-installer-V4MRGWVA.js → cline-installer-OYANSZ54.js} +2 -2
- package/dist/cli/chunks/{code-A3TGQPEO.js → code-OMT4UEZI.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-YJQSYWD3.js → code-index-extractor-M2JEWKNF.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7N7UQPAH.js → codex-installer-YBS6N5O3.js} +2 -2
- package/dist/cli/chunks/{completions-PPGVYLZS.js → completions-U7GS5RG6.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-XZTFLYV5.js → complexity-analyzer-QSXPIUIU.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-Z5I57RAH.js → continuedev-installer-W5TTT743.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-F5YZ6BHB.js → copilot-installer-KC2RT24C.js} +2 -2
- package/dist/cli/chunks/core-handlers-ZC7QB432.js +2 -0
- package/dist/cli/chunks/{cost-tracker-GO33ZQAP.js → cost-tracker-OQPVR6V4.js} +2 -2
- package/dist/cli/chunks/{coverage-GSHKLY74.js → coverage-TCO2A2NX.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-JJ7IVJZB.js → cursor-installer-MH7GWD4L.js} +2 -2
- package/dist/cli/chunks/daemon-JER6HE2J.js +12 -0
- package/dist/cli/chunks/{daemon-IRL7QRNE.js → daemon-UJEARJZ2.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-ORXSUHPA.js → dag-attention-scheduler-F3SUJU5O.js} +2 -2
- package/dist/cli/chunks/{detect-RHU62KRI.js → detect-5QTCRB32.js} +2 -2
- package/dist/cli/chunks/{dist-node-3VKV4Z6C.js → dist-node-XKZPHDBO.js} +2 -2
- package/dist/cli/chunks/{domain-handler-SFIML4FK.js → domain-handler-V3UEADKW.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-CJ4FA3OC.js → domain-plugins-7PES4UHZ.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-BCRKPCAA.js → domain-transfer-NF7UJW7B.js} +2 -2
- package/dist/cli/chunks/dream-VALD726W.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-VL3HFLPV.js → embed-and-insert-pattern-D2HWORHF.js} +2 -2
- package/dist/cli/chunks/{eval-GGKRI4P5.js → eval-UF2UBAUC.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F72TIRQY.js → experience-capture-middleware-2OUCEHHM.js} +3 -3
- package/dist/cli/chunks/{fast-paths-7KOOF3MA.js → fast-paths-KV5DKKHC.js} +2 -2
- package/dist/cli/chunks/{feature-flags-FNHBTHBH.js → feature-flags-6YWMTNO5.js} +2 -2
- package/dist/cli/chunks/{feature-flags-IOZEWWFU.js → feature-flags-MTW6NMR3.js} +2 -2
- package/dist/cli/chunks/file-discovery-VL73ASNI.js +2 -0
- package/dist/cli/chunks/{fleet-QX5KXTRC.js → fleet-GJ66QFXK.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-OH2DOQP7.js → gnn-wrapper-52V6ANOY.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-W67NXTNE.js → heartbeat-handler-X7NHNRC7.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +2 -0
- package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-6MLLOGOE.js → hnsw-legacy-bridge-DZBE3KMK.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-4UDISJ3G.js → hnswlib-node-2AWWUJAZ.js} +2 -2
- package/dist/cli/chunks/{hooks-NOQJWQ4P.js → hooks-XLPVROL3.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-2OD3APVP.js → hypergraph-engine-6TI7YP6P.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-5AZGMBUM.js → hypergraph-handler-DBIBBOXS.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +2 -0
- package/dist/cli/chunks/{init-guard-SMGJ45PW.js → init-guard-OSO6MIDD.js} +2 -2
- package/dist/cli/chunks/{init-handler-5T4MP2NM.js → init-handler-7S7IHMUF.js} +6 -6
- package/dist/cli/chunks/init-wizard-VH34J4TL.js +2 -0
- package/dist/cli/chunks/kernel-KJD24NO7.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-RLZYLVQJ.js → kilocode-installer-2KBRFXMA.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-LFZOC7VD.js → kiro-installer-5VFR4OQZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +2 -0
- package/dist/cli/chunks/{learning-XRPGLUWR.js → learning-G5NHL3DV.js} +3 -3
- package/dist/cli/chunks/{llm-router-OMK5HYPH.js → llm-router-4EAPPMHS.js} +4 -4
- package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +2 -0
- package/dist/cli/chunks/{load-XADC7KCU.js → load-UYMZPEY6.js} +2 -2
- package/dist/cli/chunks/load-test-OTQ2JQ5F.js +2 -0
- package/dist/cli/chunks/{mcp-PIBKSSVU.js → mcp-NOTDZBW5.js} +2 -2
- package/dist/cli/chunks/{memory-AP7EZERS.js → memory-QL53YIHP.js} +5 -5
- package/dist/cli/chunks/memory-backend-4QSNRRV6.js +2 -0
- package/dist/cli/chunks/{memory-handlers-MOFDNB6E.js → memory-handlers-YFFYRSM6.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-7JJ2FZ33.js → multi-model-executor-PDDDXF2B.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-ZZZ6EBYJ.js → opencode-installer-75D2SKOT.js} +2 -2
- package/dist/cli/chunks/{orchestrator-2H2YKSGJ.js → orchestrator-3WIZBV4T.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-7MJJWC2Z.js → pattern-usage-recorder-TEX2JGHA.js} +2 -2
- package/dist/cli/chunks/{pipeline-LIE5BWQY.js → pipeline-7ATPA6LU.js} +2 -2
- package/dist/cli/chunks/{platform-SMYUNLGX.js → platform-WPSKRJE7.js} +2 -2
- package/dist/cli/chunks/{plugin-LJDIXQNT.js → plugin-UUFOVVMU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-RIDNE5D2.js → prime-radiant-advanced-wasm-PDFSYWKZ.js} +2 -2
- package/dist/cli/chunks/project-root-SRTA6TBL.js +2 -0
- package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +2 -0
- package/dist/cli/chunks/{protocol-handler-YVM66DLI.js → protocol-handler-3VRYRIQB.js} +2 -2
- package/dist/cli/chunks/{prove-ZBDT52GD.js → prove-2NAUROGF.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +2 -0
- package/dist/cli/chunks/{quality-DUKXGDDO.js → quality-ZIEI2WGA.js} +2 -2
- package/dist/cli/chunks/{quality-gate-SM3RXF4V.js → quality-gate-KWJO4SWQ.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +2 -0
- package/dist/cli/chunks/{real-embeddings-4QLQZDB5.js → real-embeddings-TSZ4UIAE.js} +2 -2
- package/dist/cli/chunks/{ref-validation-M3EO32YQ.js → ref-validation-DWFFRETJ.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-S6Q5OLV5.js → roocode-installer-XTZHLUBO.js} +2 -2
- package/dist/cli/chunks/router-AUD4GATI.js +2 -0
- package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +2 -0
- package/dist/cli/chunks/{routing-handler-55FMUACP.js → routing-handler-GG525TDM.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QATKAAPK.js → ruvector-commands-QKRJDM7Z.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-RFXFU6JD.js → rvf-migration-coordinator-FF52OS6Q.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-PKDVXQAW.js → rvf-store-integrity-M6DXTAZ4.js} +2 -2
- package/dist/cli/chunks/safe-db-Q6JUKG2A.js +2 -0
- package/dist/cli/chunks/schedule-44OSMGE5.js +2 -0
- package/dist/cli/chunks/scheduler-V3HO2QQT.js +2 -0
- package/dist/cli/chunks/{security-CMRB6WA3.js → security-EHXSW22U.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-YHLLNFHF.js → shared-rvf-adapter-6EH7UVJL.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-4BGDVPQ7.js → shared-rvf-dual-writer-WML274E7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +2 -0
- package/dist/cli/chunks/{standalone-memory-LUHKQAGM.js → standalone-memory-C7QKAXS4.js} +2 -2
- package/dist/cli/chunks/{status-handler-S6S5PNR7.js → status-handler-VLI7MRLM.js} +2 -2
- package/dist/cli/chunks/{structural-health-PQ7NZAJ4.js → structural-health-3LPG6MQN.js} +2 -2
- package/dist/cli/chunks/{sync-S744AEJC.js → sync-4IMMQEPT.js} +2 -2
- package/dist/cli/chunks/{sync-Q6KRQXU6.js → sync-JFJEJBVK.js} +2 -2
- package/dist/cli/chunks/{task-handler-GAMGEHUW.js → task-handler-IED3K6E4.js} +2 -2
- package/dist/cli/chunks/{task-handlers-6CRDEELN.js → task-handlers-FH6DNTHW.js} +3 -3
- package/dist/cli/chunks/{test-FNH67DBK.js → test-GPKT3CKZ.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-NZA5SHK6.js → test-scheduling-Z42XXZP6.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-CXKG55JD.js → token-bootstrap-HMM3AHXM.js} +2 -2
- package/dist/cli/chunks/{token-usage-M7WWEDJX.js → token-usage-6Y2ERYIY.js} +2 -2
- package/dist/cli/chunks/{transformers-2IFMCK6A.js → transformers-MB63T2XO.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-NMNA6RJC.js → tree-sitter-wasm-parser-56GDQCMR.js} +2 -2
- package/dist/cli/chunks/{types-N7FWTOLD.js → types-J4J6QV3I.js} +2 -2
- package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +2 -0
- package/dist/cli/chunks/unified-persistence-72OCJJKK.js +2 -0
- package/dist/cli/chunks/{upgrade-KDB5RGL7.js → upgrade-U4XU7LFM.js} +2 -2
- package/dist/cli/chunks/{validate-KMUV5FUA.js → validate-B57HA4YK.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-ANZWRCJU.js → validate-swarm-UPPA4M6T.js} +2 -2
- package/dist/cli/chunks/visual-security-7F5UV23J.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-SXXC4NMS.js → web-tree-sitter-GDZMUKOZ.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-2LWSKMBU.js → windsurf-installer-VJRWCHXP.js} +2 -2
- package/dist/cli/chunks/witness-chain-KZ57QUFE.js +2 -0
- package/dist/cli/chunks/{witness-chain-JJMSJFZP.js → witness-chain-LFASSMZK.js} +2 -2
- package/dist/cli/chunks/{witness-chain-repair-OX7VFW6T.js → witness-chain-repair-TPHN4DXN.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-QLSMXHAZ.js → witness-chain-verifier-Z23FVABW.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-3DS4L7LE.js → witness-key-manager-745MJ7WO.js} +2 -2
- package/dist/cli/chunks/{workflow-ARWAMHD3.js → workflow-T245QNQM.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +2 -0
- package/dist/cli/chunks/{wrappers-J6KGTUSJ.js → wrappers-WCAYIQUX.js} +2 -2
- package/dist/coordination/protocols/learning-consolidation.js +6 -12
- package/dist/domains/coverage-analysis/collected-metrics.js +2 -1
- package/dist/domains/learning-optimization/active-patterns.d.ts +55 -0
- package/dist/domains/learning-optimization/active-patterns.js +77 -0
- package/dist/domains/learning-optimization/coordinator.js +12 -9
- package/dist/domains/learning-optimization/services/learning-coordinator.js +15 -17
- package/dist/domains/test-execution/services/retry-handler.js +18 -2
- package/dist/learning/dream/dream-engine.d.ts +27 -1
- package/dist/learning/dream/dream-engine.js +56 -2
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -0
- package/dist/learning/dream/rvcow-branch-manager.js +8 -0
- package/dist/learning/dream/speculative-dreamer.d.ts +8 -0
- package/dist/learning/dream/speculative-dreamer.js +8 -0
- package/dist/mcp/background-workers.d.ts +15 -0
- package/dist/mcp/background-workers.js +71 -0
- package/dist/mcp/bundle.js +409 -406
- package/dist/mcp/entry.js +4 -49
- package/dist/workers/daemon.d.ts +5 -0
- package/dist/workers/daemon.js +16 -2
- package/dist/workers/worker-env.d.ts +45 -0
- package/dist/workers/worker-env.js +76 -0
- package/dist/workers/workers/learning-consolidation.d.ts +20 -0
- package/dist/workers/workers/learning-consolidation.js +53 -22
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-PEOUNYXJ.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +0 -2
- package/dist/cli/chunks/base-QZWK3D5P.js +0 -2
- package/dist/cli/chunks/browser-workflow-ITPX72RX.js +0 -2
- package/dist/cli/chunks/chunk-VJRZFWR5.js +0 -2
- package/dist/cli/chunks/client-S7GNYTZ5.js +0 -2
- package/dist/cli/chunks/core-handlers-CUEPOQIO.js +0 -2
- package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +0 -2
- package/dist/cli/chunks/daemon-3DQCKRYO.js +0 -10
- package/dist/cli/chunks/dream-5AUNJW24.js +0 -2
- package/dist/cli/chunks/file-discovery-AYWF357I.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +0 -2
- package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +0 -2
- package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +0 -2
- package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +0 -2
- package/dist/cli/chunks/init-wizard-MK2325JJ.js +0 -2
- package/dist/cli/chunks/kernel-2NJQQ2KT.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SDISHO62.js +0 -2
- package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +0 -2
- package/dist/cli/chunks/load-test-RPKHLBCC.js +0 -2
- package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +0 -2
- package/dist/cli/chunks/project-root-NBIQF63D.js +0 -2
- package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +0 -2
- package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +0 -2
- package/dist/cli/chunks/router-H5YSIRH2.js +0 -2
- package/dist/cli/chunks/routing-feedback-5R36TJDH.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +0 -2
- package/dist/cli/chunks/safe-db-MSTD2GDH.js +0 -2
- package/dist/cli/chunks/schedule-KST6KIFD.js +0 -2
- package/dist/cli/chunks/scheduler-FTQS6YK3.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +0 -2
- package/dist/cli/chunks/unified-memory-2Z2F446J.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +0 -2
- package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +0 -2
- package/dist/cli/chunks/visual-security-GXYZV7KR.js +0 -2
- package/dist/cli/chunks/witness-chain-52PEIEGK.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{b as u}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{b as u}from"./chunk-KJNUETCB.js";import{a as f,e as d}from"./chunk-J7FLNP5L.js";import"./chunk-K5R3WUJP.js";d();import{existsSync as i,mkdirSync as h,readFileSync as g,writeFileSync as a}from"fs";import{join as p,dirname as v}from"path";var c=class{projectRoot;overwrite;options;generator;constructor(e){this.projectRoot=e.projectRoot,this.overwrite=e.overwrite??!1,this.options=e,this.generator=u()}async install(){let e={success:!0,mcpConfigured:!1,rulesInstalled:!1,errors:[],configPath:"",rulesPath:""};try{let t=this.generator.generateMcpConfig("windsurf",{memoryBackend:this.options.memoryBackend}),r=p(this.projectRoot,t.path);if(e.configPath=r,!i(r)||this.overwrite){let o=v(r);if(i(o)||h(o,{recursive:!0}),i(r)&&this.overwrite){let m=this.mergeExistingConfig(r,t.content);a(r,m)}else a(r,t.content);e.mcpConfigured=!0}let s=this.generator.generateBehavioralRules("windsurf"),n=p(this.projectRoot,s.path);if(e.rulesPath=n,!i(n)||this.overwrite){if(i(n)&&this.overwrite){let o=this.mergeExistingRules(n,s.content);a(n,o)}else a(n,s.content);e.rulesInstalled=!0}}catch(t){e.success=!1,e.errors.push(`Windsurf installation failed: ${f(t)}`)}return e}mergeExistingConfig(e,t){try{let r=JSON.parse(g(e,"utf-8")),s=JSON.parse(t);return r.mcpServers||(r.mcpServers={}),Object.assign(r.mcpServers,s.mcpServers),JSON.stringify(r,null,2)+`
|
|
3
3
|
`}catch{return t}}mergeExistingRules(e,t){try{let r=g(e,"utf-8");return r.includes("Agentic QE")||r.includes("fleet_init")?r:r.trimEnd()+`
|
|
4
4
|
|
|
5
5
|
---
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a as h,b as i,c as j,d as k}from"./chunk-MV4S3TEC.js";import"./chunk-J6LL25QJ.js";import{a,b,c,d,e,f,g}from"./chunk-4GUVVGJX.js";import"./chunk-7XGM7Q2N.js";import"./chunk-UDCYQLTD.js";import"./chunk-FWXNFPLS.js";import"./chunk-7SLEUVPZ.js";import"./chunk-D4O3TJI7.js";import"./chunk-R2NHGESM.js";import"./chunk-RG42LDOB.js";import"./chunk-DN3AKAPY.js";import"./chunk-D4IBIMWI.js";import"./chunk-DKFSCJEF.js";import"./chunk-A2UGPKCS.js";import"./chunk-IJSFZO7P.js";import"./chunk-X6VYQVUM.js";import"./chunk-7H3GNRNA.js";import"./chunk-NHOMVBCI.js";import"./chunk-J7FLNP5L.js";import"./chunk-KVMKYUOE.js";import"./chunk-SHEVM5PF.js";import"./chunk-CQ5G64EA.js";import"./chunk-LPSMVBB3.js";import"./chunk-ZBI7PJFX.js";import"./chunk-K5R3WUJP.js";export{g as CHAIN_REANCHOR_ACTION,a as GENESIS_PREV_HASH,h as WitnessChain,k as _resetWitnessChainForTests,j as createWitnessChain,i as getWitnessChain,d as hashWith,e as serializeEntry,b as sha256,c as shake256,f as signaturePayload};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{a,b,c,d,e,f,g}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g}from"./chunk-BQUIZ5QT.js";import"./chunk-X6VYQVUM.js";import"./chunk-7H3GNRNA.js";import"./chunk-NHOMVBCI.js";import"./chunk-KVMKYUOE.js";import"./chunk-K5R3WUJP.js";export{c as PersistentWitnessChain,a as SPRTAccumulator,b as WitnessChain,f as createPersistentWitnessChain,e as createWitnessChain,d as createWitnessChainSQLitePersistence,g as isWitnessChainFeatureEnabled};
|
package/dist/cli/chunks/{witness-chain-repair-OX7VFW6T.js → witness-chain-repair-TPHN4DXN.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{a as E}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a as E}from"./chunk-MV4S3TEC.js";import"./chunk-J6LL25QJ.js";import{b as R,c as b,e as A,h as y,k as C}from"./chunk-4GUVVGJX.js";import"./chunk-7XGM7Q2N.js";import"./chunk-UDCYQLTD.js";import"./chunk-FWXNFPLS.js";import"./chunk-7SLEUVPZ.js";import"./chunk-D4O3TJI7.js";import"./chunk-R2NHGESM.js";import"./chunk-RG42LDOB.js";import"./chunk-DN3AKAPY.js";import"./chunk-D4IBIMWI.js";import"./chunk-DKFSCJEF.js";import"./chunk-A2UGPKCS.js";import"./chunk-IJSFZO7P.js";import"./chunk-X6VYQVUM.js";import"./chunk-7H3GNRNA.js";import"./chunk-NHOMVBCI.js";import"./chunk-J7FLNP5L.js";import"./chunk-KVMKYUOE.js";import"./chunk-SHEVM5PF.js";import"./chunk-CQ5G64EA.js";import{a as g,b as _}from"./chunk-LPSMVBB3.js";import"./chunk-ZBI7PJFX.js";import"./chunk-K5R3WUJP.js";_();import{existsSync as v}from"node:fs";import{basename as I}from"node:path";var w={includeArchive:!0};function l(e){let r=n=>C(e,n)?e.prepare(`SELECT COUNT(*) AS n FROM ${n}`).get().n:0;return{live:r("witness_chain"),archive:r("witness_chain_archive")}}function O(e){return{status:e.status,entriesChecked:e.entriesChecked,forks:e.forks.length,unacknowledgedForks:e.forks.length-e.acknowledgedForks.length,...e.tamperedAt!==void 0?{tamperedAt:e.tamperedAt}:{},...e.tamperReason?{tamperReason:e.tamperReason}:{}}}function $(e){return e.forkDetails.filter(r=>!r.acknowledged).map(({id:r,parentId:n,prevHash:s,actionHash:c})=>({id:r,parentId:n,prevHash:s,actionHash:c}))}function x(e,r){let n=new Set,s=e.prepare("SELECT prev_hash FROM witness_chain UNION ALL SELECT prev_hash FROM witness_chain_archive").pluck().iterate();for(let t of s)n.add(t);let c=[],a=new Set;for(let t of["witness_chain","witness_chain_archive"]){let f=e.prepare(`SELECT * FROM ${t} ORDER BY id ASC`).iterate();for(let o of f){if(o.id===r||a.has(o.id))continue;a.add(o.id);let i=A(o);!n.has(b(i))&&!n.has(R(i))&&c.push({id:o.id,hash:y(o)})}}return c.sort((t,f)=>t.id-f.id)}function S(e){return`Refusing to repair: tampering detected at id=${e.tamperedAt} (${e.tamperReason}). Only accidental forks can be re-anchored; restore from a backup and investigate.`}function M(e){let r=`${e}.bak-${Math.floor(Date.now()/1e3)}`;if(!v(r))return r;let n=1;for(;v(`${r}-${n}`);)n++;return`${r}-${n}`}function W(e,r){let n=M(e),s=g(e,{readonly:!0,fileMustExist:!0});try{s.prepare("VACUUM INTO ?").run(n)}finally{s.close()}let c=g(n,{readonly:!0,fileMustExist:!0});try{let a=c.pragma("integrity_check",{simple:!0});if(a!=="ok")throw new Error(`backup integrity_check failed: ${String(a)}`);let t=l(c);if(t.live!==r.live||t.archive!==r.archive)throw new Error(`backup holds ${JSON.stringify(t)} witness rows, expected ${JSON.stringify(r)}`)}finally{c.close()}return n}async function L(e,r){let n=r.dryRun===!0,s=new E(e,r.keyManager??void 0);await s.initialize();let c=l(e),a=s.verify(w),t={dryRun:n,before:O(a),rowsBefore:c,rowsAfter:c};if(a.tampered)return{...t,action:"refused",message:S(a),forksAcknowledged:[]};let f=$(a);if(f.length===0){let d=a.forks.length>0?`Nothing to repair: all ${a.forks.length} fork(s) are already re-anchored.`:"Nothing to repair: the audit chain has no forks.";return{...t,action:"none",message:d,forksAcknowledged:[]}}if(n)return{...t,action:"would-reanchor",forksAcknowledged:f.map(d=>d.id),message:`Dry run: would back up the database and append a CHAIN_REANCHOR entry acknowledging ${f.length} fork(s). Nothing was written.`};let o,i=e.transaction(()=>{let d=l(e),p=s.verify(w);if(p.tampered)return{kind:"refused",check:p};let h=$(p);if(h.length===0)return{kind:"noop"};o=W(r.dbPath,d);let m=e.prepare("SELECT * FROM witness_chain ORDER BY id DESC LIMIT 1").get(),T=s.append("CHAIN_REANCHOR",{reason:"fork-repair",issue:"https://github.com/proffesor-for-testing/agentic-qe/issues/753",note:"Acknowledges accidental forks from pre-3.14.5 concurrent appends; no rows were changed.",forkCount:h.length,forks:h,pins:x(e,m.id),verifiedTipId:m.id,verifiedTipHash:y(m),entriesChecked:p.entriesChecked,rows:d,backup:I(o)},r.actor??"aqe-audit-repair"),k=l(e);if(k.live!==d.live+1||k.archive!==d.archive)throw new Error(`row-count check failed: before ${JSON.stringify(d)}, after ${JSON.stringify(k)}`);return{kind:"reanchored",entry:T,forks:h,txAfter:k}}).immediate();if(i.kind==="refused")return{...t,action:"refused",message:S(i.check),forksAcknowledged:[]};if(i.kind==="noop")return{...t,action:"none",message:"Nothing to repair (another process re-anchored first).",forksAcknowledged:[]};let u=s.verify(w),N=u.valid&&!u.tampered;return{...t,action:"reanchored",after:O(u),rowsAfter:i.txAfter,forksAcknowledged:i.forks.map(d=>d.id),reanchorId:i.entry.id,backupPath:o,message:N?`Re-anchored ${i.forks.length} fork(s) with CHAIN_REANCHOR id=${i.entry.id}; chain now ${u.status}. Backup: ${o}`:`Appended CHAIN_REANCHOR id=${i.entry.id}, but the chain still verifies as ${u.status}. Backup: ${o}`}}export{L as repairWitnessChainForks};
|
package/dist/cli/chunks/{witness-chain-verifier-QLSMXHAZ.js → witness-chain-verifier-Z23FVABW.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{g as a,h as b,i as c,j as d,k as e}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{g as a,h as b,i as c,j as d,k as e}from"./chunk-4GUVVGJX.js";import"./chunk-K5R3WUJP.js";export{a as CHAIN_REANCHOR_ACTION,c as WitnessChainVerifier,b as ownHash,e as tableExists,d as verifyWitnessChain};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{a,b,c}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a,b,c}from"./chunk-J6LL25QJ.js";import"./chunk-SHEVM5PF.js";import"./chunk-CQ5G64EA.js";import"./chunk-K5R3WUJP.js";export{a as WitnessKeyManager,c as _resetDefaultWitnessKeyManagerForTests,b as getDefaultWitnessKeyManager};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{b as $}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{b as $}from"./chunk-4YUBWU3E.js";import"./chunk-U3BWBP6B.js";import{a as k,b as W,c as b,g as C}from"./chunk-PPIM7B5G.js";import"./chunk-VKFVJCIH.js";import{c as v}from"./chunk-FWXNFPLS.js";import"./chunk-YTYS2XSY.js";import"./chunk-J7FLNP5L.js";import"./chunk-K5R3WUJP.js";import{Command as D}from"commander";import o from"chalk";function O(f,i){let h=f.indexOf("=");return h>0&&(i[f.substring(0,h)]=f.substring(h+1)),i}function V(f,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let c=(await import("path")).resolve(n);try{console.log(o.blue(`
|
|
3
3
|
Running workflow from: ${n}
|
|
4
4
|
`));let l=k(c);if(!l.success||!l.workflow){console.log(o.red("Failed to parse pipeline:"));for(let d of l.errors)console.log(o.red(` ${d}`));await i(1)}let u={...v(t.params,"params")};if(l.pipeline){for(let d of l.pipeline.stages)if(d.params)for(let[y,p]of Object.entries(d.params))u[y]=p}if(!f.workflowOrchestrator.getWorkflow(l.workflow.id)){let d=f.workflowOrchestrator.registerWorkflow(l.workflow);d.success||(console.log(o.red(`Failed to register workflow: ${d.error.message}`)),await i(1))}let g=await f.workflowOrchestrator.executeWorkflow(l.workflow.id,u);if(!g.success){console.log(o.red(`Failed to start workflow: ${g.error.message}`)),await i(1);return}let a=g.value;if(console.log(o.cyan(` Execution ID: ${a}`)),console.log(o.gray(` Workflow: ${l.workflow.name}`)),console.log(o.gray(` Stages: ${l.workflow.steps.length}`)),console.log(""),t.watch){console.log(o.blue(`Workflow Progress:
|
|
5
5
|
`));let d,y=Date.now();for(;;){let w=f.workflowOrchestrator.getWorkflowStatus(a);if(!w)break;if(!d||d.progress!==w.progress||d.status!==w.status||JSON.stringify(d.currentSteps)!==JSON.stringify(w.currentSteps)){process.stdout.write("\r\x1B[K");let S="\u2588".repeat(Math.floor(w.progress/5))+"\u2591".repeat(20-Math.floor(w.progress/5)),R=w.status==="completed"?o.green:w.status==="failed"?o.red:w.status==="running"?o.yellow:o.gray;console.log(` [${S}] ${w.progress}% - ${R(w.status)}`),w.currentSteps.length>0&&t.verbose&&console.log(o.gray(` Running: ${w.currentSteps.join(", ")}`)),d=w}if(w.status==="completed"||w.status==="failed"||w.status==="cancelled")break;await new Promise(S=>setTimeout(S,500))}let p=f.workflowOrchestrator.getWorkflowStatus(a);if(p){console.log("");let w=p.duration||Date.now()-y;p.status==="completed"?(console.log(o.green("Workflow completed successfully")),console.log(o.gray(` Duration: ${$(w)}`)),console.log(o.gray(` Completed: ${p.completedSteps.length} stages`)),p.skippedSteps.length>0&&console.log(o.yellow(` Skipped: ${p.skippedSteps.length} stages`))):p.status==="failed"?(console.log(o.red("Workflow failed")),console.log(o.red(` Error: ${p.error}`)),console.log(o.gray(` Failed stages: ${p.failedSteps.join(", ")}`))):console.log(o.yellow(`Workflow ${p.status}`))}console.log(""),await i(p?.status==="completed"?0:1);return}else console.log(o.green("Workflow execution started")),console.log(o.gray(` Use 'aqe workflow status ${a}' to check progress`));console.log(""),await i(0)}catch(l){console.error(o.red(`
|
|
@@ -35,10 +35,10 @@ Workflow cancelled: ${n}
|
|
|
35
35
|
`)):console.log(o.red(`
|
|
36
36
|
Failed to cancel workflow: ${t.error.message}
|
|
37
37
|
`)),await i(t.success?0:1)}catch(t){console.error(o.red(`
|
|
38
|
-
Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-
|
|
38
|
+
Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-2IFEUAAK.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
|
|
39
39
|
Browser Workflow Templates:
|
|
40
40
|
`));for(let c of e.data.availableTemplates)console.log(` ${o.cyan(c)}`);console.log("")}else console.log(o.red(`Failed: ${e.error||"Unknown error"}`));await i(0)}catch(n){console.error(o.red(`
|
|
41
|
-
Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-
|
|
41
|
+
Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-2IFEUAAK.js"),{writeOutput:c,toJSON:l}=await import("./ci-output-P7GQ6TKF.js"),s=new e,u={variables:t.var||{}};if(t.yaml)u.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let g=await import("fs"),d=(await import("path")).resolve(n);g.existsSync(d)||(console.log(o.red(`
|
|
42
42
|
File not found: ${d}
|
|
43
43
|
`)),await i(1)),u.workflowYaml=g.readFileSync(d,"utf-8")}else u.templateName=n;else console.log(o.red(`
|
|
44
44
|
Provide a template name or --yaml. Use "workflow browser-list" to see templates.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a,b,d as c,e as d}from"./chunk-WLXGUQOZ.js";import"./chunk-NQDYOF35.js";import"./chunk-7XGM7Q2N.js";import"./chunk-UDCYQLTD.js";import"./chunk-FWXNFPLS.js";import"./chunk-7SLEUVPZ.js";import"./chunk-D4O3TJI7.js";import"./chunk-R2NHGESM.js";import"./chunk-RG42LDOB.js";import"./chunk-DN3AKAPY.js";import"./chunk-D4IBIMWI.js";import"./chunk-DKFSCJEF.js";import"./chunk-A2UGPKCS.js";import"./chunk-PICEGWGB.js";import"./chunk-YTYS2XSY.js";import"./chunk-IJSFZO7P.js";import"./chunk-X6VYQVUM.js";import"./chunk-7H3GNRNA.js";import"./chunk-NHOMVBCI.js";import"./chunk-J7FLNP5L.js";import"./chunk-KVMKYUOE.js";import"./chunk-SHEVM5PF.js";import"./chunk-CQ5G64EA.js";import"./chunk-LPSMVBB3.js";import"./chunk-ZBI7PJFX.js";import"./chunk-K5R3WUJP.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.
|
|
2
|
-
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.8");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-X3HM7SV4.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-X7ZQIFES.js";import"./chunk-7XGM7Q2N.js";import"./chunk-UDCYQLTD.js";import"./chunk-FWXNFPLS.js";import"./chunk-7SLEUVPZ.js";import"./chunk-D4O3TJI7.js";import"./chunk-R2NHGESM.js";import"./chunk-RG42LDOB.js";import"./chunk-DN3AKAPY.js";import"./chunk-D4IBIMWI.js";import"./chunk-DKFSCJEF.js";import"./chunk-A2UGPKCS.js";import"./chunk-IJSFZO7P.js";import"./chunk-X6VYQVUM.js";import"./chunk-7H3GNRNA.js";import"./chunk-NHOMVBCI.js";import"./chunk-J7FLNP5L.js";import"./chunk-KVMKYUOE.js";import"./chunk-SHEVM5PF.js";import"./chunk-CQ5G64EA.js";import"./chunk-LPSMVBB3.js";import"./chunk-ZBI7PJFX.js";import"./chunk-K5R3WUJP.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
|
|
@@ -9,6 +9,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
9
9
|
import { ok, err, ALL_DOMAINS, } from '../../shared/types/index.js';
|
|
10
10
|
import { TimeRange } from '../../shared/value-objects/index.js';
|
|
11
11
|
import { toError } from '../../shared/error-utils.js';
|
|
12
|
+
import { readActivePatterns } from '../../domains/learning-optimization/active-patterns.js';
|
|
12
13
|
const DEFAULT_CONFIG = {
|
|
13
14
|
minPatternsForConsolidation: 5,
|
|
14
15
|
similarityThreshold: 0.85,
|
|
@@ -139,18 +140,11 @@ export class LearningConsolidationProtocol {
|
|
|
139
140
|
* Get patterns for a specific domain
|
|
140
141
|
*/
|
|
141
142
|
async getPatternsForDomain(domain, timeRange) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
pattern.domain === domain &&
|
|
148
|
-
!key.includes(':archived:') &&
|
|
149
|
-
(timeRange.contains(pattern.createdAt) || timeRange.contains(pattern.lastUsedAt))) {
|
|
150
|
-
patterns.push(pattern);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return patterns;
|
|
143
|
+
// #1055: active patterns only — excludes `:creation:` provenance as well
|
|
144
|
+
// as `:archived:` records, before get() and before the scan cap applies.
|
|
145
|
+
const patterns = await readActivePatterns(this.memory);
|
|
146
|
+
return patterns.filter((pattern) => pattern.domain === domain &&
|
|
147
|
+
(timeRange.contains(pattern.createdAt) || timeRange.contains(pattern.lastUsedAt)));
|
|
154
148
|
}
|
|
155
149
|
/**
|
|
156
150
|
* Calculate statistics for a domain's patterns
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* null — never as 0% (a fake low figure) nor as istanbul's 0/0 = 100%.
|
|
8
8
|
*/
|
|
9
9
|
import * as path from 'path';
|
|
10
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
10
11
|
/**
|
|
11
12
|
* The ONE key form for per-file coverage records (#1027 N7): the absolute
|
|
12
13
|
* path. Reports write absolute (istanbul) or project-relative (lcov
|
|
@@ -14,7 +15,7 @@ import * as path from 'path';
|
|
|
14
15
|
* (or the cwd when none is known), so one file never has two records.
|
|
15
16
|
*/
|
|
16
17
|
export function fileCoverageKey(filePath, projectRoot) {
|
|
17
|
-
return path.isAbsolute(filePath) ? path.normalize(filePath) : path.resolve(projectRoot ??
|
|
18
|
+
return path.isAbsolute(filePath) ? path.normalize(filePath) : path.resolve(projectRoot ?? findProjectRoot(), filePath);
|
|
18
19
|
}
|
|
19
20
|
/** Read the canonical key first, then a measured legacy relative key if present. */
|
|
20
21
|
export function fileCoverageLookupKeys(filePath, projectRoot) {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Active learned-pattern reads (#1055)
|
|
3
|
+
*
|
|
4
|
+
* Active learned patterns live at `learning:pattern:<id>`. The same prefix
|
|
5
|
+
* also holds records that are NOT active patterns:
|
|
6
|
+
*
|
|
7
|
+
* - `learning:pattern:creation:<id>`: creation provenance written by
|
|
8
|
+
* `LearningCoordinatorService.recordPatternCreation()` (no `context`)
|
|
9
|
+
* - `learning:pattern:archived:<id>`: archived patterns written by
|
|
10
|
+
* `LearningCoordinatorService.archivePattern()` and the
|
|
11
|
+
* learning-consolidation protocol (full pattern shape)
|
|
12
|
+
*
|
|
13
|
+
* Every reader of active patterns must go through this module so that
|
|
14
|
+
* provenance and archives are excluded before `get()`, and so that those rows
|
|
15
|
+
* cannot use up the search cap and push active patterns out. Records stay
|
|
16
|
+
* untouched; this is read-side classification only.
|
|
17
|
+
*/
|
|
18
|
+
import type { MemoryBackend, RetrieveOptions } from '../../kernel/interfaces.js';
|
|
19
|
+
import type { LearnedPattern } from './interfaces.js';
|
|
20
|
+
export declare const LEARNING_PATTERN_KEY_PREFIX = "learning:pattern:";
|
|
21
|
+
/** Sub-key families under the pattern prefix that are not active patterns. */
|
|
22
|
+
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
|
+
* True when the key is in the active pattern key family
|
|
31
|
+
* (`learning:pattern:<id>`), false for provenance, archives and any other
|
|
32
|
+
* non-active sub-key.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isActivePatternKey(key: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Shape guard for a record read from an active key: it must be an object
|
|
37
|
+
* whose own id maps back to that key, and it must carry a `context` object.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isActivePatternRecord(key: string, value: unknown): value is LearnedPattern;
|
|
40
|
+
export interface ReadActivePatternsOptions {
|
|
41
|
+
/** Namespace passed to `search()` and `get()`. Omit for the backend default. */
|
|
42
|
+
retrieve?: RetrieveOptions;
|
|
43
|
+
/** Override the key-scan cap (tests). */
|
|
44
|
+
scanLimit?: number;
|
|
45
|
+
/** Called when the key scan hit the cap, so results may be incomplete. */
|
|
46
|
+
onTruncated?: (scanned: number) => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read every active learned pattern: list keys, drop non-active key families
|
|
50
|
+
* before `get()`, then drop records that fail the shape guard. Date fields
|
|
51
|
+
* come back from kv as ISO strings and are rehydrated (#491 Bug 3), so
|
|
52
|
+
* `TimeRange.contains(pattern.createdAt)` works for every reader.
|
|
53
|
+
*/
|
|
54
|
+
export declare function readActivePatterns(memory: MemoryBackend, options?: ReadActivePatternsOptions): Promise<LearnedPattern[]>;
|
|
55
|
+
//# sourceMappingURL=active-patterns.d.ts.map
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Active learned-pattern reads (#1055)
|
|
3
|
+
*
|
|
4
|
+
* Active learned patterns live at `learning:pattern:<id>`. The same prefix
|
|
5
|
+
* also holds records that are NOT active patterns:
|
|
6
|
+
*
|
|
7
|
+
* - `learning:pattern:creation:<id>`: creation provenance written by
|
|
8
|
+
* `LearningCoordinatorService.recordPatternCreation()` (no `context`)
|
|
9
|
+
* - `learning:pattern:archived:<id>`: archived patterns written by
|
|
10
|
+
* `LearningCoordinatorService.archivePattern()` and the
|
|
11
|
+
* learning-consolidation protocol (full pattern shape)
|
|
12
|
+
*
|
|
13
|
+
* Every reader of active patterns must go through this module so that
|
|
14
|
+
* provenance and archives are excluded before `get()`, and so that those rows
|
|
15
|
+
* cannot use up the search cap and push active patterns out. Records stay
|
|
16
|
+
* untouched; this is read-side classification only.
|
|
17
|
+
*/
|
|
18
|
+
import { rehydrateDates } from '../../shared/utils/kv-date-rehydrate.js';
|
|
19
|
+
export const LEARNING_PATTERN_KEY_PREFIX = 'learning:pattern:';
|
|
20
|
+
/** Sub-key families under the pattern prefix that are not active patterns. */
|
|
21
|
+
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
|
+
/**
|
|
29
|
+
* True when the key is in the active pattern key family
|
|
30
|
+
* (`learning:pattern:<id>`), false for provenance, archives and any other
|
|
31
|
+
* non-active sub-key.
|
|
32
|
+
*/
|
|
33
|
+
export function isActivePatternKey(key) {
|
|
34
|
+
if (!key.startsWith(LEARNING_PATTERN_KEY_PREFIX))
|
|
35
|
+
return false;
|
|
36
|
+
const rest = key.slice(LEARNING_PATTERN_KEY_PREFIX.length);
|
|
37
|
+
if (rest.length === 0)
|
|
38
|
+
return false;
|
|
39
|
+
const firstSegment = rest.split(':', 1)[0];
|
|
40
|
+
return !NON_ACTIVE_PATTERN_SEGMENTS.includes(firstSegment);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Shape guard for a record read from an active key: it must be an object
|
|
44
|
+
* whose own id maps back to that key, and it must carry a `context` object.
|
|
45
|
+
*/
|
|
46
|
+
export function isActivePatternRecord(key, value) {
|
|
47
|
+
if (!value || typeof value !== 'object')
|
|
48
|
+
return false;
|
|
49
|
+
const record = value;
|
|
50
|
+
if (typeof record.id !== 'string' || key !== `${LEARNING_PATTERN_KEY_PREFIX}${record.id}`) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return !!record.context && typeof record.context === 'object';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read every active learned pattern: list keys, drop non-active key families
|
|
57
|
+
* before `get()`, then drop records that fail the shape guard. Date fields
|
|
58
|
+
* come back from kv as ISO strings and are rehydrated (#491 Bug 3), so
|
|
59
|
+
* `TimeRange.contains(pattern.createdAt)` works for every reader.
|
|
60
|
+
*/
|
|
61
|
+
export async function readActivePatterns(memory, options = {}) {
|
|
62
|
+
const limit = options.scanLimit ?? ACTIVE_PATTERN_KEY_SCAN_LIMIT;
|
|
63
|
+
const keys = await memory.search(`${LEARNING_PATTERN_KEY_PREFIX}*`, limit, options.retrieve);
|
|
64
|
+
if (keys.length >= limit)
|
|
65
|
+
options.onTruncated?.(keys.length);
|
|
66
|
+
const patterns = [];
|
|
67
|
+
for (const key of keys) {
|
|
68
|
+
if (!isActivePatternKey(key))
|
|
69
|
+
continue;
|
|
70
|
+
const value = await memory.get(key, options.retrieve);
|
|
71
|
+
if (isActivePatternRecord(key, value)) {
|
|
72
|
+
patterns.push(rehydrateDates(value, ['createdAt', 'lastUsedAt']));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return patterns;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=active-patterns.js.map
|
|
@@ -3,6 +3,7 @@
|
|
|
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
7
|
import { v4 as uuidv4 } from 'uuid';
|
|
7
8
|
import { toError } from '../../shared/error-utils.js';
|
|
8
9
|
import { rehydrateDates } from '../../shared/utils/kv-date-rehydrate.js';
|
|
@@ -739,17 +740,19 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
739
740
|
const patterns = [];
|
|
740
741
|
const knowledge = [];
|
|
741
742
|
const strategies = [];
|
|
742
|
-
// Export patterns
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
743
|
+
// Export patterns (#1055: active patterns only — creation provenance
|
|
744
|
+
// and archives share the `learning:pattern:` prefix). One read covers
|
|
745
|
+
// 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
|
+
});
|
|
750
|
+
for (const pattern of activePatterns) {
|
|
751
|
+
if (targetDomains.includes(pattern.domain)) {
|
|
752
|
+
patterns.push(pattern);
|
|
750
753
|
}
|
|
751
|
-
this.updateWorkflowProgress(workflowId, Math.round((patterns.length / 100) * 30));
|
|
752
754
|
}
|
|
755
|
+
this.updateWorkflowProgress(workflowId, 30);
|
|
753
756
|
// Export knowledge
|
|
754
757
|
const knowledgeResult = await this.transferService.queryKnowledge({
|
|
755
758
|
limit: 1000,
|
|
@@ -7,6 +7,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
7
7
|
import { ok, err } from '../../../shared/types/index.js';
|
|
8
8
|
import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
|
+
import { readActivePatterns } from '../active-patterns.js';
|
|
10
11
|
import { createQEFlashAttention, } from '../../../integrations/ruvector/wrappers.js';
|
|
11
12
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
import { createSafeRecord } from '../../../shared/utils/safe-record.js';
|
|
@@ -33,6 +34,16 @@ const logger = LoggerFactory.create('learning-optimization/learning-coordinator'
|
|
|
33
34
|
* domain even on installs with hundreds of indexed experiences.
|
|
34
35
|
*/
|
|
35
36
|
const LEARNING_NS = { namespace: 'learning-optimization' };
|
|
37
|
+
/**
|
|
38
|
+
* #1055: active patterns only. `learning:pattern:*` also holds creation
|
|
39
|
+
* provenance and archived patterns written by this service.
|
|
40
|
+
*/
|
|
41
|
+
function readActiveLearnedPatterns(memory) {
|
|
42
|
+
return readActivePatterns(memory, {
|
|
43
|
+
retrieve: LEARNING_NS,
|
|
44
|
+
onTruncated: (scanned) => logger.warn('Active pattern key scan hit its cap; results may be incomplete', { scanned }),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
36
47
|
export class LearningCoordinatorService {
|
|
37
48
|
config;
|
|
38
49
|
memory;
|
|
@@ -251,14 +262,7 @@ Provide:
|
|
|
251
262
|
*/
|
|
252
263
|
async findMatchingPatterns(context, limit = 10) {
|
|
253
264
|
try {
|
|
254
|
-
const patterns =
|
|
255
|
-
const keys = await this.memory.search('learning:pattern:*', 100, LEARNING_NS);
|
|
256
|
-
for (const key of keys) {
|
|
257
|
-
const pattern = await this.memory.get(key, LEARNING_NS);
|
|
258
|
-
if (pattern && this.matchesContext(pattern, context)) {
|
|
259
|
-
patterns.push(pattern);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
265
|
+
const patterns = (await readActiveLearnedPatterns(this.memory)).filter((pattern) => this.matchesContext(pattern, context));
|
|
262
266
|
// Sort by confidence and usage
|
|
263
267
|
patterns.sort((a, b) => {
|
|
264
268
|
const scoreA = a.confidence * 0.6 + (a.successRate * 0.4);
|
|
@@ -384,14 +388,7 @@ Provide:
|
|
|
384
388
|
*/
|
|
385
389
|
async getPatternStats(domain) {
|
|
386
390
|
try {
|
|
387
|
-
const
|
|
388
|
-
const patterns = [];
|
|
389
|
-
for (const key of keys) {
|
|
390
|
-
const pattern = await this.memory.get(key, LEARNING_NS);
|
|
391
|
-
if (pattern && (!domain || pattern.domain === domain)) {
|
|
392
|
-
patterns.push(pattern);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
391
|
+
const patterns = (await readActiveLearnedPatterns(this.memory)).filter((pattern) => !domain || pattern.domain === domain);
|
|
395
392
|
const byType = {
|
|
396
393
|
'test-pattern': 0,
|
|
397
394
|
'fix-pattern': 0,
|
|
@@ -761,7 +758,8 @@ Provide:
|
|
|
761
758
|
return false;
|
|
762
759
|
}
|
|
763
760
|
if (context.tags.length > 0) {
|
|
764
|
-
const
|
|
761
|
+
const patternTags = Array.isArray(pattern.context.tags) ? pattern.context.tags : [];
|
|
762
|
+
const hasMatchingTag = context.tags.some((tag) => patternTags.includes(tag));
|
|
765
763
|
if (!hasMatchingTag) {
|
|
766
764
|
return false;
|
|
767
765
|
}
|
|
@@ -6,7 +6,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
8
8
|
import { jestExactPathPattern, nameFilterArg, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
9
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
10
10
|
import { resolve as resolvePath } from 'node:path';
|
|
11
11
|
import { ok, err } from '../../../shared/types/index.js';
|
|
12
12
|
import { TEST_EXECUTION_CONSTANTS, RETRY_CONSTANTS } from '../../constants.js';
|
|
@@ -14,6 +14,22 @@ import { toError } from '../../../shared/error-utils.js';
|
|
|
14
14
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
15
15
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
16
16
|
import { terminateTestRunner, trackTestRunnerExit } from '../../../shared/test-runner-process.js';
|
|
17
|
+
/**
|
|
18
|
+
* Whether a runner-reported test file and the requested target are the same
|
|
19
|
+
* file. Runners report real paths, so a target given through a symlink must be
|
|
20
|
+
* compared by realpath, falling back to the runner path when a file is missing.
|
|
21
|
+
*/
|
|
22
|
+
function sameTestFile(reported, target, cwd) {
|
|
23
|
+
const canonical = (file) => {
|
|
24
|
+
try {
|
|
25
|
+
return realpathSync(resolvePath(cwd, file));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return runnerFilePath(file, cwd);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return canonical(reported) === canonical(target);
|
|
32
|
+
}
|
|
17
33
|
const DEFAULT_RETRY_CONFIG = {
|
|
18
34
|
simulateForTesting: false,
|
|
19
35
|
simulatedRetrySuccessRate: RETRY_CONSTANTS.DEFAULT_FLAKY_PASS_RATE,
|
|
@@ -462,7 +478,7 @@ export class RetryHandlerService {
|
|
|
462
478
|
// Vitest's positional file filter uses prefix matching. A passing
|
|
463
479
|
// sibling must not clear a failure in the requested file (#972).
|
|
464
480
|
const targetPassed = !targetFile || result.testResults?.some((file) => typeof file.name === 'string'
|
|
465
|
-
&&
|
|
481
|
+
&& sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd())
|
|
466
482
|
&& file.assertionResults?.some(assertion => assertion.status === 'passed'));
|
|
467
483
|
if (exitCode === 0 && result.success !== false
|
|
468
484
|
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0
|
|
@@ -31,7 +31,21 @@ export interface DreamConfig {
|
|
|
31
31
|
activationConfig: ActivationConfig;
|
|
32
32
|
/** Insight generation configuration */
|
|
33
33
|
insightConfig: InsightConfig;
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Enable RVCOW branching for reversible dream cycles (ADR-069).
|
|
36
|
+
* Default: false (#1060).
|
|
37
|
+
*
|
|
38
|
+
* RISK — opt in only for an isolated database connection. The branch is a
|
|
39
|
+
* SQLite SAVEPOINT on the process-wide shared connection, and it stays open
|
|
40
|
+
* for the whole asynchronous dream (up to `maxDurationMs`). Every other
|
|
41
|
+
* write made on that connection in the meantime (memory_store, pattern
|
|
42
|
+
* updates, experience capture) joins the savepoint. A discard (failed
|
|
43
|
+
* validation, error, cancel) rolls those foreground writes back even though
|
|
44
|
+
* they were already acknowledged. Branch validation only inspects
|
|
45
|
+
* `qe_patterns`, which `dream()` does not write, so branching adds little
|
|
46
|
+
* protection to a dream cycle. A compute-then-commit rework is tracked in
|
|
47
|
+
* #1060.
|
|
48
|
+
*/
|
|
35
49
|
enableBranching: boolean;
|
|
36
50
|
/** Validation thresholds for dream branch quality checks */
|
|
37
51
|
branchValidationThresholds: ValidationThresholds;
|
|
@@ -104,6 +118,8 @@ export declare class DreamEngine {
|
|
|
104
118
|
private graph;
|
|
105
119
|
private db;
|
|
106
120
|
private branchManager;
|
|
121
|
+
/** #1060: marks the in-flight dream cycle interrupted (set while dreaming). */
|
|
122
|
+
private interruptActiveDream;
|
|
107
123
|
private currentCycle;
|
|
108
124
|
private initialized;
|
|
109
125
|
private cancelled;
|
|
@@ -138,6 +154,15 @@ export declare class DreamEngine {
|
|
|
138
154
|
* @returns Dream cycle result with insights and statistics
|
|
139
155
|
*/
|
|
140
156
|
dream(durationMs?: number): Promise<DreamCycleResult>;
|
|
157
|
+
/**
|
|
158
|
+
* #1060: build a synchronous handler that records a still-running cycle as
|
|
159
|
+
* 'interrupted'. It runs from close() and from a process store closer,
|
|
160
|
+
* which runs before the shared database closes (closers run newest first).
|
|
161
|
+
* When opt-in branching left a savepoint open, the savepoint is released
|
|
162
|
+
* first so foreground writes made on the shared connection during the
|
|
163
|
+
* dream are committed rather than lost with the connection.
|
|
164
|
+
*/
|
|
165
|
+
private createCycleInterrupter;
|
|
141
166
|
/**
|
|
142
167
|
* Load patterns as concepts for dreaming.
|
|
143
168
|
*
|
|
@@ -203,6 +228,7 @@ export declare class DreamEngine {
|
|
|
203
228
|
getCurrentCycle(): DreamCycle | null;
|
|
204
229
|
private saveCycle;
|
|
205
230
|
private updateCycle;
|
|
231
|
+
private updateCycleSync;
|
|
206
232
|
private saveInsight;
|
|
207
233
|
private getInsightRowById;
|
|
208
234
|
/**
|
|
@@ -21,6 +21,7 @@ import { LoggerFactory } from '../../logging/index.js';
|
|
|
21
21
|
const dreamLogger = LoggerFactory.create('dream-engine');
|
|
22
22
|
import { v4 as uuidv4 } from 'uuid';
|
|
23
23
|
import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
|
|
24
|
+
import { registerStoreCloser } from '../../kernel/process-lifecycle.js';
|
|
24
25
|
import { ConceptGraph } from './concept-graph.js';
|
|
25
26
|
import { SpreadingActivation, } from './spreading-activation.js';
|
|
26
27
|
import { InsightGenerator, } from './insight-generator.js';
|
|
@@ -43,7 +44,8 @@ export const DEFAULT_DREAM_CONFIG = {
|
|
|
43
44
|
minConfidence: 0.5,
|
|
44
45
|
maxInsightsPerCycle: 10,
|
|
45
46
|
},
|
|
46
|
-
|
|
47
|
+
// #1060: off by default; see the RISK note on DreamConfig.enableBranching.
|
|
48
|
+
enableBranching: false,
|
|
47
49
|
branchValidationThresholds: { ...DEFAULT_VALIDATION_THRESHOLDS },
|
|
48
50
|
};
|
|
49
51
|
// ============================================================================
|
|
@@ -206,6 +208,8 @@ export class DreamEngine {
|
|
|
206
208
|
graph = null;
|
|
207
209
|
db = null;
|
|
208
210
|
branchManager = null;
|
|
211
|
+
/** #1060: marks the in-flight dream cycle interrupted (set while dreaming). */
|
|
212
|
+
interruptActiveDream = null;
|
|
209
213
|
currentCycle = null;
|
|
210
214
|
initialized = false;
|
|
211
215
|
cancelled = false;
|
|
@@ -344,13 +348,18 @@ export class DreamEngine {
|
|
|
344
348
|
status: 'running',
|
|
345
349
|
};
|
|
346
350
|
await this.saveCycle(this.currentCycle);
|
|
347
|
-
// ADR-069: Create RVCOW branch before dream consolidation
|
|
351
|
+
// ADR-069: Create RVCOW branch before dream consolidation (opt-in, #1060)
|
|
348
352
|
let branch = null;
|
|
349
353
|
if (this.branchManager) {
|
|
350
354
|
const branchName = `dream-${this.currentCycle.id}-${Date.now()}`;
|
|
351
355
|
branch = this.branchManager.createBranch(branchName);
|
|
352
356
|
this.emitBranchEvent('dream:branch_created', branch);
|
|
353
357
|
}
|
|
358
|
+
// #1060: if the engine closes or the process shuts down mid-dream, record
|
|
359
|
+
// the cycle as interrupted instead of leaving it 'running' forever.
|
|
360
|
+
const interrupt = this.createCycleInterrupter(this.currentCycle, startTime, () => branch);
|
|
361
|
+
this.interruptActiveDream = interrupt;
|
|
362
|
+
const unregisterShutdownGuard = registerStoreCloser(interrupt);
|
|
354
363
|
try {
|
|
355
364
|
// 1. Check we have enough concepts
|
|
356
365
|
const allNodes = await this.graph.getActiveNodes(0);
|
|
@@ -458,6 +467,44 @@ export class DreamEngine {
|
|
|
458
467
|
this.currentCycle = null;
|
|
459
468
|
throw error;
|
|
460
469
|
}
|
|
470
|
+
finally {
|
|
471
|
+
unregisterShutdownGuard();
|
|
472
|
+
if (this.interruptActiveDream === interrupt)
|
|
473
|
+
this.interruptActiveDream = null;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* #1060: build a synchronous handler that records a still-running cycle as
|
|
478
|
+
* 'interrupted'. It runs from close() and from a process store closer,
|
|
479
|
+
* which runs before the shared database closes (closers run newest first).
|
|
480
|
+
* When opt-in branching left a savepoint open, the savepoint is released
|
|
481
|
+
* first so foreground writes made on the shared connection during the
|
|
482
|
+
* dream are committed rather than lost with the connection.
|
|
483
|
+
*/
|
|
484
|
+
createCycleInterrupter(cycle, startTime, getBranch) {
|
|
485
|
+
return () => {
|
|
486
|
+
if (cycle.status !== 'running' || !this.db)
|
|
487
|
+
return;
|
|
488
|
+
const branch = getBranch();
|
|
489
|
+
if (branch && this.branchManager) {
|
|
490
|
+
try {
|
|
491
|
+
this.branchManager.mergeBranch(branch);
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
// Branch already resolved; nothing to release
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
cycle.status = 'interrupted';
|
|
498
|
+
cycle.error = 'Interrupted: engine closed or process shut down during the dream cycle';
|
|
499
|
+
cycle.endTime = new Date();
|
|
500
|
+
cycle.durationMs = Date.now() - startTime;
|
|
501
|
+
try {
|
|
502
|
+
this.updateCycleSync(cycle);
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
// Best effort during shutdown
|
|
506
|
+
}
|
|
507
|
+
};
|
|
461
508
|
}
|
|
462
509
|
// ==========================================================================
|
|
463
510
|
// Pattern Loading
|
|
@@ -753,6 +800,9 @@ export class DreamEngine {
|
|
|
753
800
|
stmt.run(cycle.id, cycle.startTime.toISOString(), cycle.endTime?.toISOString() ?? null, cycle.durationMs ?? null, cycle.conceptsProcessed, cycle.associationsFound, cycle.insightsGenerated, cycle.status, cycle.error ?? null, cycle.startTime.toISOString());
|
|
754
801
|
}
|
|
755
802
|
async updateCycle(cycle) {
|
|
803
|
+
this.updateCycleSync(cycle);
|
|
804
|
+
}
|
|
805
|
+
updateCycleSync(cycle) {
|
|
756
806
|
if (!this.db)
|
|
757
807
|
return;
|
|
758
808
|
const stmt = this.db.prepare(`
|
|
@@ -815,6 +865,10 @@ export class DreamEngine {
|
|
|
815
865
|
* Release resources (does NOT close the shared database)
|
|
816
866
|
*/
|
|
817
867
|
async close() {
|
|
868
|
+
// #1060: a dream still in flight is recorded as interrupted before the
|
|
869
|
+
// engine lets go of the database.
|
|
870
|
+
this.interruptActiveDream?.();
|
|
871
|
+
this.interruptActiveDream = null;
|
|
818
872
|
if (this.graph) {
|
|
819
873
|
await this.graph.close();
|
|
820
874
|
this.graph = null;
|