agentic-qe 3.15.8 → 3.15.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +434 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/bridge/captured-experience-bridge.js +12 -13
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
- package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-SVXSHEET.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WKQH36XL.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
- package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-EKOOFVST.js} +2 -2
- package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-OPS36NFZ.js} +4 -4
- package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-AO5NDZRI.js} +3 -3
- package/dist/cli/chunks/base-GTB6POYE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-TFLVEMMY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-ADBBJPYW.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-HGHUYYL5.js} +2 -2
- package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
- package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-2SXBBUM6.js} +2 -2
- package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-2T7RRL6G.js} +1 -1
- package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-2XGVTYVX.js} +2 -2
- package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-2ZI5FKSF.js} +2 -2
- package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
- package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-37OWRCUN.js} +1 -1
- package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-3P34JFQH.js} +5 -5
- package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-3Y7SPD72.js} +2 -2
- package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-4G63WT4F.js} +2 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
- package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
- package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-5LPYV3TK.js} +1 -1
- package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-62OAY5KJ.js} +1 -1
- package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-6C3II5OM.js} +2 -2
- package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-6GP6W46M.js} +2 -2
- package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-6KIL6CMD.js} +2 -2
- package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-6MVVSSID.js} +1 -1
- package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-6P7424AO.js} +2 -2
- package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-6PX4OXQO.js} +2 -2
- package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-6S3WJGUV.js} +2 -2
- package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-6TB6YOCZ.js} +1 -1
- package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-6X5DHU6Q.js} +1 -1
- package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-6XCMKIZN.js} +1 -1
- package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-7LFZ4CHM.js} +2 -2
- package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-7OZVZIBE.js} +2 -2
- package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-7PJIR4ST.js} +2 -2
- package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-7TB6FK4B.js} +1 -1
- package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-7ZCDZHDB.js} +2 -2
- package/dist/cli/chunks/chunk-A55QKKT2.js +2 -0
- package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-ABFFWZPC.js} +273 -278
- package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-ACWFKES2.js} +2 -2
- package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-AH3ZD3NJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-AI4VYSFS.js} +2 -2
- package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
- package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
- package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-B6LTH6YV.js} +2 -2
- package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
- package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-C522H7XR.js} +54 -33
- package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-CESIR27V.js} +2 -2
- package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-CFBEBXLO.js} +3 -3
- package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-CMBLM26R.js} +2 -2
- package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-CZ2IF6MC.js} +1 -1
- package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-CZGOSJQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-D6DA2KFD.js} +2 -2
- package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-DBMNJSBV.js} +1 -1
- package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-DE4YJQJF.js} +2 -2
- package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-DEF34AFL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZWMFKZEQ.js → chunk-DKAC3E3B.js} +2 -2
- package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-DMFTELBS.js} +2 -2
- package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-DNRWGATA.js} +10 -10
- package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-DT7SIJOA.js} +2 -2
- package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-DURHK377.js} +69 -69
- package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-EAU5KDFO.js} +1 -1
- package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-EDLFX4ZB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-EN2QSKFF.js} +2 -2
- package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-ERQKYIP7.js} +2 -2
- package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-ESUO3GTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-EWFECZ2U.js} +2 -2
- package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-FAUCT5KR.js} +3 -3
- package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-FB6TI3BH.js} +2 -2
- package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-FBXTQNRH.js} +2 -2
- package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-FESZBPUB.js} +2 -2
- package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
- package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-FKL3R5JQ.js} +2 -2
- package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-FPUDRSFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-FZOWULMH.js} +1 -1
- package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-G3CZCUPM.js} +2 -2
- package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-G5I6KGMW.js} +22 -22
- package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-GHBNRMSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-GJHWY3ZX.js} +2 -2
- package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-GJMLK5UT.js} +2 -2
- package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-GRCIBCJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-GWZZ7DAO.js} +2 -2
- package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-GZLZCZ42.js} +2 -2
- package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-H2PYU7MN.js} +1 -1
- package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-H32EPIR2.js} +1 -1
- package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-H74Q7TJN.js} +1 -1
- package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
- package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-I33O4BRQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-IKISCIGH.js} +2 -2
- package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-IPJ7Q3AJ.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-IU2IV4NE.js} +1 -1
- package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-JHIY4VCC.js} +2 -2
- package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-KG336OV3.js} +2 -2
- package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-KI73QCR5.js} +2 -2
- package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-KNQ2ERFX.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-KOBVYY6H.js} +2 -2
- package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-KSIWGGJI.js} +8 -8
- package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-LMS3Y7JD.js} +2 -2
- package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LQEURY7C.js} +1 -1
- package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-LRZY4KS2.js} +2 -2
- package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-M2QV7PT7.js} +2 -2
- package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-MA7JIQ6U.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-MG27QY4D.js} +2 -2
- package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
- package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
- package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
- package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-NGKNYIQZ.js} +1 -1
- package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
- package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-NPPHWFA2.js} +3 -3
- package/dist/cli/chunks/chunk-NSHU347M.js +2 -0
- package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-NVYIZCSR.js} +2 -2
- package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-NW5JUCCG.js} +1 -1
- package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-NZYLNXT6.js} +3 -3
- package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-OBAREPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-ODJNUMV3.js} +2 -2
- package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-OEKP73MC.js} +2 -2
- package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-OPFGRS5S.js} +2 -2
- package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-OY2AHLSF.js} +1 -1
- package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-OY3NJNP2.js} +1 -1
- package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-PCEW6Q2C.js} +1 -1
- package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-PFG6VQ5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-PGYMKGOE.js} +2 -2
- package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-PPSAMXYN.js} +3 -3
- package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
- package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-RPHY2DU6.js} +2 -2
- package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-RWWOHCMG.js} +25 -20
- package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-S75EYIJG.js} +1 -1
- package/dist/cli/chunks/chunk-SKQUUE4F.js +5 -0
- package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
- package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-SU5H66SD.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-SY2IB442.js} +2 -2
- package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-TBLI254A.js} +2 -2
- package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-TNMBRDCA.js} +3 -3
- package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-TYFZXDGZ.js} +2 -2
- package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-U4OICXV2.js} +2 -2
- package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-U53ZB4IX.js} +2 -2
- package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
- package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-UCJMVXO4.js} +2 -2
- package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-UHTTW3IT.js} +2 -2
- package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-V2M2XCR5.js} +1 -1
- package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-V2RSNVMW.js} +1 -1
- package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-V6JBOIMX.js} +1 -1
- package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-VFKF2XO7.js} +1 -1
- package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-VFSYMOAL.js} +2 -2
- package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-VJQYDYAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-VKRTTFB6.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-VWNFAW2M.js} +2 -2
- package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-WBM6N6IM.js} +1 -1
- package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-WDQ7IEZY.js} +2 -2
- package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-WDVRE6GN.js} +2 -2
- package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-WQ4PYWSW.js} +1 -1
- package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-WSF24I3D.js} +2 -2
- package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-XBVUVFJK.js} +2 -2
- package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-XEB3NLJR.js} +2 -2
- package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XFVTGAAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-XLZYRTNO.js} +2 -2
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +6 -0
- package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-Y76IAYQD.js} +1 -1
- package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-YAKGBHO4.js} +2 -2
- package/dist/cli/chunks/{chunk-TC52M542.js → chunk-YBSBABOS.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-YCGP5VFP.js} +2 -2
- package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-YDAQK5UF.js} +1 -1
- package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-YK3BVZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-YK7JN5N7.js} +4 -4
- package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-YKMU4LBV.js} +1 -1
- package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-YYTGXD3R.js} +2 -2
- package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-Z2O2YJAF.js} +2 -2
- package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-Z7IYW5U7.js} +1 -1
- package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-ZG5666GJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-ZXPY654C.js} +1 -1
- package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-MSKMVH5X.js} +2 -2
- package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-7ODMNAUM.js} +2 -2
- package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-FXZ7ZZW3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-4VOUEPOX.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-7D4SGLM4.js} +2 -2
- package/dist/cli/chunks/client-POSVREVS.js +2 -0
- package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-WRRT7BGQ.js} +2 -2
- package/dist/cli/chunks/{code-OMT4UEZI.js → code-ZDJRIL3S.js} +25 -24
- package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-4S4SHM56.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-YTRHNDWR.js} +2 -2
- package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-6N64JUXJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-IIDR66LB.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-SVVFY3S2.js} +2 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
- package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VGFS6IBX.js} +2 -2
- package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-B7MCGNTE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
- package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-UPETT57E.js} +2 -2
- package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
- package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-CQFNZLXU.js} +7 -7
- package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-PJVABHON.js} +2 -2
- package/dist/cli/chunks/{detect-5QTCRB32.js → detect-56SKAGWX.js} +2 -2
- package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-UYTYUMLN.js} +2 -2
- package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-YOYLBYJE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-7TARX2XF.js} +2 -2
- package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
- package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
- package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GNB574IM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-KTZ5SF54.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ITX5LQ57.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-KFHSR5YF.js} +2 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-RLFW3GSX.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-EM2URCYZ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-CBP73QHY.js} +2 -2
- package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-IP7XE34Z.js} +34 -34
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ONAYHU25.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-VINJRAID.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
- package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-RYVV5R3Z.js} +2 -2
- package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-MPRGWMOE.js} +6 -6
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
- package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-OPD7JBRL.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-M4OPUNK2.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
- package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4UWTQLMF.js} +24 -24
- package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-SQ56FF6Z.js} +4 -4
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
- package/dist/cli/chunks/{load-UYMZPEY6.js → load-HPHKDGGL.js} +2 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
- package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
- package/dist/cli/chunks/{memory-QL53YIHP.js → memory-PFQ3KPVJ.js} +5 -5
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-3VDRX6TZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PJ576R63.js} +2 -2
- package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-72QP4UU7.js} +64 -19
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-754YQW7C.js} +2 -2
- package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
- package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-3E3DXLYB.js} +2 -2
- package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-7FUQAKRE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BQRYMUTG.js} +2 -2
- package/dist/cli/chunks/{prove-2NAUROGF.js → prove-H52QGC6B.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
- package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-QO4XPAUM.js} +2 -2
- package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-FBKE5E6F.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-RWGOVOXO.js} +2 -2
- package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-LF76ZOBD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-3BYEBTQ7.js} +2 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
- package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-DST7BVCU.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-XE32PGKC.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
- package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
- package/dist/cli/chunks/{security-EHXSW22U.js → security-VSPNKCDS.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
- package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-O4QUTK6L.js} +2 -2
- package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-Z2BP6EOG.js} +2 -2
- package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-R36WNLQG.js} +2 -2
- package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
- package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-QF5Y3EMZ.js} +2 -2
- package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-43PYE75J.js} +13 -7
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
- package/dist/cli/chunks/{test-GPKT3CKZ.js → test-UWA377D4.js} +16 -16
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-YQZPJRRN.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
- package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-DO6WLMXP.js} +2 -2
- package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-H5RGFKVO.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
- package/dist/cli/chunks/{types-J4J6QV3I.js → types-PJS2FGPF.js} +2 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
- package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4IC4F6AB.js} +2 -2
- package/dist/cli/chunks/{validate-B57HA4YK.js → validate-DHUWW7PF.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-OERQNOX5.js} +2 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-TV7DMKES.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-QZPWSH37.js} +2 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-YXENHB42.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-HL26AGFO.js} +2 -2
- package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-EOVVCN2E.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
- package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
- package/dist/cli/commands/code.js +8 -0
- package/dist/cli/commands/daemon.js +8 -0
- package/dist/cli/commands/fleet.js +27 -15
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +6 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/ci-output.d.ts +9 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/handlers/code-intelligence-handlers.js +74 -7
- package/dist/coordination/handlers/coverage-collection.js +9 -10
- package/dist/coordination/handlers/coverage-handlers.js +31 -4
- package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
- package/dist/coordination/handlers/coverage-runner.js +9 -2
- package/dist/coordination/handlers/coverage-target.d.ts +13 -3
- package/dist/coordination/handlers/coverage-target.js +224 -7
- package/dist/coordination/handlers/handler-types.d.ts +2 -0
- package/dist/coordination/handlers/requirements-handlers.js +16 -2
- package/dist/coordination/handlers/security-handlers.js +11 -1
- package/dist/coordination/handlers/test-execution-handlers.js +57 -12
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.js +1 -1
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +35 -0
- package/dist/coordination/protocols/learning-consolidation-archive.js +34 -0
- package/dist/coordination/protocols/learning-consolidation.d.ts +62 -3
- package/dist/coordination/protocols/learning-consolidation.js +187 -60
- package/dist/coordination/queen-coordinator.d.ts +13 -2
- package/dist/coordination/queen-coordinator.js +43 -8
- package/dist/coordination/queen-event-handlers.js +15 -1
- package/dist/coordination/queen-lifecycle.js +9 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +94 -127
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +11 -1
- package/dist/coordination/queen-types.js +8 -0
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
- package/dist/coordination/task-dag/dag-algorithms.js +162 -0
- package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
- package/dist/coordination/task-dag/dag-obligations.js +83 -0
- package/dist/coordination/task-dag/dag.d.ts +69 -19
- package/dist/coordination/task-dag/dag.js +215 -269
- package/dist/coordination/task-dag/index.d.ts +12 -4
- package/dist/coordination/task-dag/index.js +11 -3
- package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
- package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
- package/dist/coordination/task-dag/scheduler.d.ts +19 -9
- package/dist/coordination/task-dag/scheduler.js +36 -12
- package/dist/coordination/task-dag/types.d.ts +160 -1
- package/dist/coordination/task-dag/types.js +2 -1
- package/dist/coordination/task-executability.d.ts +18 -0
- package/dist/coordination/task-executability.js +31 -0
- package/dist/coordination/task-executor.d.ts +1 -0
- package/dist/coordination/task-executor.js +5 -0
- package/dist/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/coordinator.js +35 -9
- package/dist/domains/code-intelligence/index-path-guard.d.ts +52 -0
- package/dist/domains/code-intelligence/index-path-guard.js +95 -0
- package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
- package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/contract-testing/coordinator.js +3 -1
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +29 -12
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +14 -14
- package/dist/domains/learning-optimization/active-patterns.js +17 -14
- package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
- package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator.js +52 -107
- package/dist/domains/learning-optimization/index.d.ts +1 -1
- package/dist/domains/learning-optimization/interfaces.d.ts +62 -6
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/plugin.js +11 -1
- package/dist/domains/learning-optimization/reward-source.d.ts +50 -0
- package/dist/domains/learning-optimization/reward-source.js +65 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +7 -5
- package/dist/domains/learning-optimization/services/learning-coordinator.js +98 -75
- package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
- package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
- package/dist/domains/security-compliance/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
- package/dist/domains/test-execution/coordinator.d.ts +5 -0
- package/dist/domains/test-execution/coordinator.js +35 -20
- package/dist/domains/test-execution/interfaces.d.ts +41 -0
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +32 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +87 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +31 -9
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/hooks/cross-phase-hooks.js +2 -1
- package/dist/init/fleet-integration.js +2 -0
- package/dist/init/init-wizard-steps.js +2 -0
- package/dist/init/phases/06-code-intelligence.js +2 -0
- package/dist/init/phases/10-workers.js +51 -6
- package/dist/integrations/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/anti-drift-middleware.d.ts +44 -5
- package/dist/kernel/anti-drift-middleware.js +147 -11
- package/dist/kernel/interfaces.d.ts +5 -0
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +24 -4
- package/dist/learning/dream/dream-insights-pruner.js +85 -11
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/skill-validation-learner.d.ts +2 -0
- package/dist/learning/skill-validation-learner.js +29 -21
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +23 -3
- package/dist/mcp/bundle.js +602 -551
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +19 -0
- package/dist/mcp/handlers/domain-handler-configs.js +76 -30
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +37 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +3 -0
- package/dist/mcp/handlers/task-handlers.js +69 -6
- package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
- package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
- package/dist/mcp/metrics/metrics-collector.js +13 -26
- package/dist/mcp/protocol-server.js +10 -3
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +52 -5
- package/dist/mcp/tools/learning-optimization/optimize.js +164 -80
- package/dist/mcp/tools/quality-assessment/gate.js +12 -1
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
- package/dist/memory/crdt/lww-register.js +11 -1
- package/dist/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- package/dist/routing/calibration/ema-calibrator.js +3 -1
- package/dist/shared/base-domain-plugin.d.ts +4 -0
- package/dist/shared/base-domain-plugin.js +6 -0
- package/dist/shared/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/cache.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -1
- package/dist/shared/security/compliance-patterns.js +3 -1
- package/dist/shared/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +32 -0
- package/dist/shared/test-runner-process.js +105 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/index.d.ts +9 -0
- package/dist/shared/types/index.js +13 -0
- package/dist/shared/utils/namespaced-search.d.ts +56 -0
- package/dist/shared/utils/namespaced-search.js +71 -0
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
- package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- package/dist/validation/gate-reexecute.js +7 -4
- package/dist/workers/daemon.d.ts +2 -0
- package/dist/workers/daemon.js +23 -6
- package/dist/workers/namespaced-keys.d.ts +4 -7
- package/dist/workers/namespaced-keys.js +4 -15
- package/dist/workers/quality-daemon/ci-monitor.js +9 -5
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/worker-env.d.ts +16 -8
- package/dist/workers/worker-env.js +25 -12
- package/dist/workers/worker-manager.js +4 -0
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +3 -1
- package/dist/workers/workers/learning-consolidation.js +22 -8
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-W3V5P7LE.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
- package/dist/cli/chunks/base-2XML4WH7.js +0 -2
- package/dist/cli/chunks/browser-ZL7OLKJQ.js +0 -4
- package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
- package/dist/cli/chunks/chunk-4GYFONJB.js +0 -4
- package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
- package/dist/cli/chunks/chunk-7H3GNRNA.js +0 -4
- package/dist/cli/chunks/chunk-EUVSSIGR.js +0 -12
- package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
- package/dist/cli/chunks/chunk-J7RCI25Q.js +0 -2
- package/dist/cli/chunks/chunk-KNHLOANK.js +0 -4
- package/dist/cli/chunks/chunk-KNQUHGNY.js +0 -2
- package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
- package/dist/cli/chunks/chunk-PIEKGKW6.js +0 -12
- package/dist/cli/chunks/chunk-PWA6XBW4.js +0 -120
- package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
- package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
- package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
- package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
- package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
- package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
- package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
- package/dist/cli/chunks/domain-transfer-NF7UJW7B.js +0 -2
- package/dist/cli/chunks/dream-VALD726W.js +0 -2
- package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
- package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
- package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
- package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
- package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
- package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
- package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
- package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
- package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
- package/dist/cli/chunks/mcp-NOTDZBW5.js +0 -2
- package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
- package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
- package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
- package/dist/cli/chunks/pipeline-7ATPA6LU.js +0 -19
- package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
- package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
- package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
- package/dist/cli/chunks/router-AUD4GATI.js +0 -2
- package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
- package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
- package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
- package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
- package/dist/cli/chunks/sync-4IMMQEPT.js +0 -2
- package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
- package/dist/cli/chunks/token-bootstrap-HMM3AHXM.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-56GDQCMR.js +0 -2
- package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
- package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
- package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
- package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
- package/dist/cli/chunks/witness-chain-LFASSMZK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-TPHN4DXN.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
- package/dist/cli/chunks/wrappers-WCAYIQUX.js +0 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - namespaced kv key scans (#1049, #1071)
|
|
3
|
+
*
|
|
4
|
+
* Two problems with reading every key of a family through
|
|
5
|
+
* `MemoryBackend.search()`:
|
|
6
|
+
*
|
|
7
|
+
* 1. Kernel backends disagree on what a namespaced `search` returns: the
|
|
8
|
+
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
9
|
+
* `<namespace>:<key>`. A caller that passes a result straight back to
|
|
10
|
+
* `get(key, { namespace })` double-prefixes the key and reads nothing.
|
|
11
|
+
* 2. `search()` takes a row limit and has no offset or ordering, so a single
|
|
12
|
+
* call with a fixed cap silently drops every key past the cap.
|
|
13
|
+
*
|
|
14
|
+
* `searchAllKeys` addresses both: it returns every matching key, bare and in
|
|
15
|
+
* a stable order.
|
|
16
|
+
*/
|
|
17
|
+
import type { MemoryBackend, RetrieveOptions } from '../../kernel/interfaces.js';
|
|
18
|
+
/**
|
|
19
|
+
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
20
|
+
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
21
|
+
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
22
|
+
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
23
|
+
*/
|
|
24
|
+
export declare function bareSearchKey(found: string, namespace: string, pattern: string): string;
|
|
25
|
+
/** First request size for `searchAllKeys`. Each further request doubles it. */
|
|
26
|
+
export declare const DEFAULT_KEY_SCAN_PAGE_SIZE = 10000;
|
|
27
|
+
export interface SearchAllKeysOptions {
|
|
28
|
+
/** Namespace for the scan. Omit for the backend default. */
|
|
29
|
+
retrieve?: RetrieveOptions;
|
|
30
|
+
/** First request size (tests). Defaults to `DEFAULT_KEY_SCAN_PAGE_SIZE`. */
|
|
31
|
+
pageSize?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Most `search()` requests one scan may make (#1106). The limit doubles each
|
|
35
|
+
* time, so this covers more keys than any store holds (2^31 x the first page)
|
|
36
|
+
* while still guaranteeing the loop ends for a backend that never returns a
|
|
37
|
+
* short page.
|
|
38
|
+
*/
|
|
39
|
+
export declare const MAX_KEY_SCAN_REQUESTS = 32;
|
|
40
|
+
/**
|
|
41
|
+
* Every key matching `pattern`, bare (usable with `get(key, retrieve)`),
|
|
42
|
+
* de-duplicated and sorted.
|
|
43
|
+
*
|
|
44
|
+
* `search()` has no offset, so this widens the request until the backend
|
|
45
|
+
* returns fewer keys than were asked for. That is the only point at which the
|
|
46
|
+
* result is known to be complete; no cap ever truncates it.
|
|
47
|
+
*
|
|
48
|
+
* #1106: a backend that always returns at least `limit` keys (for example
|
|
49
|
+
* one that pads or repeats results) never gives a short page. After
|
|
50
|
+
* MAX_KEY_SCAN_REQUESTS this throws instead of looping forever or returning a
|
|
51
|
+
* list that may be incomplete, because callers select patterns to archive
|
|
52
|
+
* from it. A backend that ignores `limit` and returns every key still ends:
|
|
53
|
+
* the limit doubles past the key count.
|
|
54
|
+
*/
|
|
55
|
+
export declare function searchAllKeys(memory: MemoryBackend, pattern: string, options?: SearchAllKeysOptions): Promise<string[]>;
|
|
56
|
+
//# sourceMappingURL=namespaced-search.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - namespaced kv key scans (#1049, #1071)
|
|
3
|
+
*
|
|
4
|
+
* Two problems with reading every key of a family through
|
|
5
|
+
* `MemoryBackend.search()`:
|
|
6
|
+
*
|
|
7
|
+
* 1. Kernel backends disagree on what a namespaced `search` returns: the
|
|
8
|
+
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
9
|
+
* `<namespace>:<key>`. A caller that passes a result straight back to
|
|
10
|
+
* `get(key, { namespace })` double-prefixes the key and reads nothing.
|
|
11
|
+
* 2. `search()` takes a row limit and has no offset or ordering, so a single
|
|
12
|
+
* call with a fixed cap silently drops every key past the cap.
|
|
13
|
+
*
|
|
14
|
+
* `searchAllKeys` addresses both: it returns every matching key, bare and in
|
|
15
|
+
* a stable order.
|
|
16
|
+
*/
|
|
17
|
+
function globToRegExp(pattern) {
|
|
18
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
19
|
+
return new RegExp(`^${escaped.replace(/\*/g, '.*').replace(/\?/g, '.')}$`, 's');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
23
|
+
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
24
|
+
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
25
|
+
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
26
|
+
*/
|
|
27
|
+
export function bareSearchKey(found, namespace, pattern) {
|
|
28
|
+
if (globToRegExp(pattern).test(found))
|
|
29
|
+
return found;
|
|
30
|
+
return found.startsWith(`${namespace}:`) ? found.slice(namespace.length + 1) : found;
|
|
31
|
+
}
|
|
32
|
+
/** First request size for `searchAllKeys`. Each further request doubles it. */
|
|
33
|
+
export const DEFAULT_KEY_SCAN_PAGE_SIZE = 10_000;
|
|
34
|
+
/**
|
|
35
|
+
* Most `search()` requests one scan may make (#1106). The limit doubles each
|
|
36
|
+
* time, so this covers more keys than any store holds (2^31 x the first page)
|
|
37
|
+
* while still guaranteeing the loop ends for a backend that never returns a
|
|
38
|
+
* short page.
|
|
39
|
+
*/
|
|
40
|
+
export const MAX_KEY_SCAN_REQUESTS = 32;
|
|
41
|
+
/**
|
|
42
|
+
* Every key matching `pattern`, bare (usable with `get(key, retrieve)`),
|
|
43
|
+
* de-duplicated and sorted.
|
|
44
|
+
*
|
|
45
|
+
* `search()` has no offset, so this widens the request until the backend
|
|
46
|
+
* returns fewer keys than were asked for. That is the only point at which the
|
|
47
|
+
* result is known to be complete; no cap ever truncates it.
|
|
48
|
+
*
|
|
49
|
+
* #1106: a backend that always returns at least `limit` keys (for example
|
|
50
|
+
* one that pads or repeats results) never gives a short page. After
|
|
51
|
+
* MAX_KEY_SCAN_REQUESTS this throws instead of looping forever or returning a
|
|
52
|
+
* list that may be incomplete, because callers select patterns to archive
|
|
53
|
+
* from it. A backend that ignores `limit` and returns every key still ends:
|
|
54
|
+
* the limit doubles past the key count.
|
|
55
|
+
*/
|
|
56
|
+
export async function searchAllKeys(memory, pattern, options = {}) {
|
|
57
|
+
let limit = Math.max(1, Math.floor(options.pageSize ?? DEFAULT_KEY_SCAN_PAGE_SIZE));
|
|
58
|
+
let found = await memory.search(pattern, limit, options.retrieve);
|
|
59
|
+
for (let requests = 1; found.length >= limit; requests++) {
|
|
60
|
+
if (requests >= MAX_KEY_SCAN_REQUESTS) {
|
|
61
|
+
throw new Error(`searchAllKeys('${pattern}'): the backend never returned a short page after ${requests} requests ` +
|
|
62
|
+
`(last limit ${limit}); refusing to return a possibly incomplete key list`);
|
|
63
|
+
}
|
|
64
|
+
limit *= 2;
|
|
65
|
+
found = await memory.search(pattern, limit, options.retrieve);
|
|
66
|
+
}
|
|
67
|
+
const namespace = options.retrieve?.namespace;
|
|
68
|
+
const keys = namespace ? found.map((key) => bareSearchKey(key, namespace, pattern)) : found;
|
|
69
|
+
return [...new Set(keys)].sort();
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=namespaced-search.js.map
|
|
@@ -243,8 +243,9 @@ class Parser {
|
|
|
243
243
|
parseIdentifier() {
|
|
244
244
|
let value = this.context;
|
|
245
245
|
const name = this.advance().value;
|
|
246
|
-
// Get initial value from context
|
|
247
|
-
|
|
246
|
+
// Get initial value from context. #1136: own properties only, so an
|
|
247
|
+
// identifier such as `constructor` does not read an inherited member.
|
|
248
|
+
if (typeof value === 'object' && value !== null && Object.hasOwn(value, name)) {
|
|
248
249
|
value = value[name];
|
|
249
250
|
}
|
|
250
251
|
else {
|
|
@@ -254,7 +255,7 @@ class Parser {
|
|
|
254
255
|
while (this.current().type === 'DOT') {
|
|
255
256
|
this.advance(); // consume dot
|
|
256
257
|
const prop = this.expect('IDENTIFIER').value;
|
|
257
|
-
if (value !== null && value !== undefined && typeof value === 'object') {
|
|
258
|
+
if (value !== null && value !== undefined && typeof value === 'object' && Object.hasOwn(value, prop)) {
|
|
258
259
|
value = value[prop];
|
|
259
260
|
}
|
|
260
261
|
else {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* CompositeActionExecutor delegates to for infrastructure-specific actions.
|
|
10
10
|
*/
|
|
11
11
|
import { createEmptyStats } from './types.js';
|
|
12
|
+
import { getOwn, setOwn } from '../../shared/utils/safe-record.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// NoOp Command Runner (for testing)
|
|
14
15
|
// ============================================================================
|
|
@@ -242,10 +243,13 @@ export class InfraActionExecutor {
|
|
|
242
243
|
};
|
|
243
244
|
}
|
|
244
245
|
updateServiceStats(serviceName, field) {
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
// Service names come from the playbook: `constructor` must be just a name (#978).
|
|
247
|
+
let serviceStats = getOwn(this.stats.byService, serviceName);
|
|
248
|
+
if (!serviceStats) {
|
|
249
|
+
serviceStats = { failures: 0, recoveries: 0, successes: 0 };
|
|
250
|
+
setOwn(this.stats.byService, serviceName, serviceStats);
|
|
247
251
|
}
|
|
248
|
-
|
|
252
|
+
serviceStats[field]++;
|
|
249
253
|
}
|
|
250
254
|
sleep(ms) {
|
|
251
255
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { v4 as uuidv4 } from 'uuid';
|
|
15
15
|
import { DEFAULT_INFRA_HEALING_CONFIG, createEmptyStats } from './types.js';
|
|
16
|
+
import { getOwn, setOwn } from '../../shared/utils/safe-record.js';
|
|
16
17
|
import { createTestOutputObserver } from './test-output-observer.js';
|
|
17
18
|
import { createRecoveryPlaybook } from './recovery-playbook.js';
|
|
18
19
|
import { createCoordinationLock } from './coordination-lock.js';
|
|
@@ -59,10 +60,10 @@ export class InfraHealingOrchestrator {
|
|
|
59
60
|
// Update per-service failure counts
|
|
60
61
|
for (const failure of observation.infraFailures) {
|
|
61
62
|
if (failure.serviceName) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.stats.byService
|
|
63
|
+
const bucket = getOwn(this.stats.byService, failure.serviceName)
|
|
64
|
+
?? { failures: 0, recoveries: 0, successes: 0 };
|
|
65
|
+
bucket.failures++;
|
|
66
|
+
setOwn(this.stats.byService, failure.serviceName, bucket);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
}
|
|
@@ -171,11 +172,11 @@ export class InfraHealingOrchestrator {
|
|
|
171
172
|
this.stats.recoveriesFailed = execStats.recoveriesFailed;
|
|
172
173
|
// Merge per-service recovery stats from executor
|
|
173
174
|
for (const [service, execServiceStats] of Object.entries(execStats.byService)) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.stats.byService
|
|
175
|
+
const bucket = getOwn(this.stats.byService, service)
|
|
176
|
+
?? { failures: 0, recoveries: 0, successes: 0 };
|
|
177
|
+
bucket.recoveries = execServiceStats.recoveries;
|
|
178
|
+
bucket.successes = execServiceStats.successes;
|
|
179
|
+
setOwn(this.stats.byService, service, bucket);
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
}
|
|
@@ -59,7 +59,11 @@ export class RecoveryPlaybook {
|
|
|
59
59
|
getRecoveryPlan(serviceName) {
|
|
60
60
|
if (!this.config)
|
|
61
61
|
return undefined;
|
|
62
|
-
|
|
62
|
+
// Own-property lookup only: a name like `constructor` or `toString` must
|
|
63
|
+
// not resolve to an Object.prototype member (#1118).
|
|
64
|
+
return Object.hasOwn(this.config.services, serviceName)
|
|
65
|
+
? this.config.services[serviceName]
|
|
66
|
+
: undefined;
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
69
|
* List all service names defined in the playbook.
|
|
@@ -89,7 +93,9 @@ export class RecoveryPlaybook {
|
|
|
89
93
|
const defaultTimeoutMs = defaults.timeoutMs ?? 10_000;
|
|
90
94
|
const defaultMaxRetries = defaults.maxRetries ?? 3;
|
|
91
95
|
const defaultBackoffMs = defaults.backoffMs ?? [2000, 5000, 10_000];
|
|
92
|
-
|
|
96
|
+
// Null-prototype map so a service named `__proto__` is stored as an own
|
|
97
|
+
// key instead of silently replacing the prototype (#1118).
|
|
98
|
+
const services = Object.create(null);
|
|
93
99
|
if (raw.services) {
|
|
94
100
|
for (const [name, rawService] of Object.entries(raw.services)) {
|
|
95
101
|
services[name] = this.parseService(name, rawService, defaultTimeoutMs, defaultMaxRetries, defaultBackoffMs);
|
|
@@ -137,7 +143,11 @@ export class RecoveryPlaybook {
|
|
|
137
143
|
*/
|
|
138
144
|
interpolate(template) {
|
|
139
145
|
return template.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
|
|
140
|
-
|
|
146
|
+
// Own properties only: `${constructor}` must stay unresolved rather
|
|
147
|
+
// than expand to Object's function source (#1118).
|
|
148
|
+
return Object.hasOwn(this.variables, varName)
|
|
149
|
+
? (this.variables[varName] ?? _match)
|
|
150
|
+
: _match;
|
|
141
151
|
});
|
|
142
152
|
}
|
|
143
153
|
}
|
|
@@ -26,6 +26,7 @@ import { createHash } from 'node:crypto';
|
|
|
26
26
|
import { meetsNoRegression } from './anchor-set.js';
|
|
27
27
|
import { tierAllowsPromotion } from '../learning/provenance-tier.js';
|
|
28
28
|
import { bootstrapDeltaCILow, pairedDeltas } from './paired-bootstrap.js';
|
|
29
|
+
import { getOwn } from '../shared/utils/safe-record.js';
|
|
29
30
|
/** Tag domain-separating the rule fingerprint hash. */
|
|
30
31
|
const RULE_TAG = 'aqe:accept-rule:v1+sig';
|
|
31
32
|
/**
|
|
@@ -137,14 +138,16 @@ export function sealedHash(sealed) {
|
|
|
137
138
|
* unknown version so a missing rule can never silently pass verification.
|
|
138
139
|
*/
|
|
139
140
|
export function gateFingerprint(ruleVersion) {
|
|
140
|
-
|
|
141
|
+
// #1136: own entries only; `constructor` is not a registered rule.
|
|
142
|
+
if (!Object.hasOwn(ACCEPTANCE_RULES, ruleVersion)) {
|
|
141
143
|
throw new Error(`Unknown acceptance rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
|
|
142
144
|
}
|
|
143
145
|
return createHash('sha256').update(RULE_TAG).update('\0').update(ruleVersion).digest('hex');
|
|
144
146
|
}
|
|
145
147
|
/** Re-execute a frozen rule on sealed inputs. Throws for an unknown version. */
|
|
146
148
|
export function reExecuteGate(ruleVersion, sealed) {
|
|
147
|
-
|
|
149
|
+
// #1136: an inherited member (`constructor` is Object) is not a rule.
|
|
150
|
+
const rule = getOwn(ACCEPTANCE_RULES, ruleVersion);
|
|
148
151
|
if (!rule) {
|
|
149
152
|
throw new Error(`Unknown acceptance rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
|
|
150
153
|
}
|
|
@@ -260,14 +263,14 @@ export function pathSealedHash(sealed) {
|
|
|
260
263
|
}
|
|
261
264
|
/** Fingerprint of a path-rule VERSION. Throws for an unregistered rule. */
|
|
262
265
|
export function pathGateFingerprint(ruleVersion) {
|
|
263
|
-
if (!(ruleVersion
|
|
266
|
+
if (!Object.hasOwn(PROMOTION_PATH_RULES, ruleVersion)) {
|
|
264
267
|
throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
|
|
265
268
|
}
|
|
266
269
|
return createHash('sha256').update(PATH_RULE_TAG).update('\0').update(ruleVersion).digest('hex');
|
|
267
270
|
}
|
|
268
271
|
/** Re-execute a frozen path rule on sealed inputs. Throws for an unknown version. */
|
|
269
272
|
export function reExecutePathGate(ruleVersion, sealed) {
|
|
270
|
-
const rule = PROMOTION_PATH_RULES
|
|
273
|
+
const rule = getOwn(PROMOTION_PATH_RULES, ruleVersion);
|
|
271
274
|
if (!rule) {
|
|
272
275
|
throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
|
|
273
276
|
}
|
package/dist/workers/daemon.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ export declare class QEDaemon implements IDaemon {
|
|
|
35
35
|
private workerManager;
|
|
36
36
|
private config;
|
|
37
37
|
private _qualityDaemon?;
|
|
38
|
+
/** #1066: `AQE_DISABLED_WORKERS` ids that match no worker. */
|
|
39
|
+
private unknownDisabledIds;
|
|
38
40
|
constructor(config?: DaemonConfig);
|
|
39
41
|
get running(): boolean;
|
|
40
42
|
get uptime(): number;
|
package/dist/workers/daemon.js
CHANGED
|
@@ -30,11 +30,14 @@ export class QEDaemon {
|
|
|
30
30
|
workerManager;
|
|
31
31
|
config;
|
|
32
32
|
_qualityDaemon;
|
|
33
|
+
/** #1066: `AQE_DISABLED_WORKERS` ids that match no worker. */
|
|
34
|
+
unknownDisabledIds = [];
|
|
33
35
|
constructor(config) {
|
|
34
36
|
this.config = {
|
|
35
37
|
...DEFAULT_CONFIG,
|
|
36
38
|
...config,
|
|
37
|
-
|
|
39
|
+
// #1066: ids are matched without regard to case.
|
|
40
|
+
disabledWorkers: (config?.disabledWorkers ?? parseDisabledWorkers()).map((id) => id.toLowerCase()),
|
|
38
41
|
};
|
|
39
42
|
this.workerManager = new WorkerManagerImpl();
|
|
40
43
|
this.registerWorkers();
|
|
@@ -56,6 +59,11 @@ export class QEDaemon {
|
|
|
56
59
|
return;
|
|
57
60
|
}
|
|
58
61
|
console.info('[Daemon] Starting QE Background Workers...');
|
|
62
|
+
// #1066: reported on start, not construction. fleet_init and shutdown
|
|
63
|
+
// construct the daemon even when AQE_WORKERS_ENABLED=false.
|
|
64
|
+
if (this.unknownDisabledIds.length > 0) {
|
|
65
|
+
console.warn(`[AQE] WARN AQE_DISABLED_WORKERS: unknown worker id(s) ignored: ${this.unknownDisabledIds.join(', ')}`);
|
|
66
|
+
}
|
|
59
67
|
this._running = true;
|
|
60
68
|
this._startedAt = new Date();
|
|
61
69
|
// Start health check timer
|
|
@@ -66,7 +74,19 @@ export class QEDaemon {
|
|
|
66
74
|
this._healthCheckTimer.unref?.();
|
|
67
75
|
// Auto-start workers if configured
|
|
68
76
|
if (this.config.autoStart) {
|
|
69
|
-
|
|
77
|
+
try {
|
|
78
|
+
await this.workerManager.startAll();
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// #1116: a failed start must not leave the daemon reporting running.
|
|
82
|
+
this._running = false;
|
|
83
|
+
this._startedAt = undefined;
|
|
84
|
+
if (this._healthCheckTimer)
|
|
85
|
+
clearInterval(this._healthCheckTimer);
|
|
86
|
+
this._healthCheckTimer = undefined;
|
|
87
|
+
await this.workerManager.stopAll().catch(() => undefined);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
70
90
|
console.info('[Daemon] All workers started');
|
|
71
91
|
}
|
|
72
92
|
// Log registered workers
|
|
@@ -174,10 +194,7 @@ export class QEDaemon {
|
|
|
174
194
|
}
|
|
175
195
|
}
|
|
176
196
|
const knownIds = new Set(allWorkers.map((worker) => worker.config.id));
|
|
177
|
-
|
|
178
|
-
if (unknownIds.length > 0) {
|
|
179
|
-
console.warn(`[AQE] WARN AQE_DISABLED_WORKERS: unknown worker id(s) ignored: ${unknownIds.join(', ')}`);
|
|
180
|
-
}
|
|
197
|
+
this.unknownDisabledIds = this.config.disabledWorkers.filter((id) => !knownIds.has(id));
|
|
181
198
|
}
|
|
182
199
|
performHealthCheck() {
|
|
183
200
|
const health = this.workerManager.getHealth();
|
|
@@ -5,12 +5,9 @@
|
|
|
5
5
|
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
6
6
|
* `<namespace>:<key>`. A worker that passes a search result straight back to
|
|
7
7
|
* `get(key, { namespace })` then double-prefixes the key and reads nothing.
|
|
8
|
+
*
|
|
9
|
+
* The helper lives in `shared/utils/namespaced-search` so domain services can
|
|
10
|
+
* use it too (#1071); it is re-exported here for the workers.
|
|
8
11
|
*/
|
|
9
|
-
|
|
10
|
-
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
11
|
-
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
12
|
-
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
13
|
-
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
14
|
-
*/
|
|
15
|
-
export declare function bareSearchKey(found: string, namespace: string, pattern: string): string;
|
|
12
|
+
export { bareSearchKey } from '../shared/utils/namespaced-search.js';
|
|
16
13
|
//# sourceMappingURL=namespaced-keys.d.ts.map
|
|
@@ -5,20 +5,9 @@
|
|
|
5
5
|
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
6
6
|
* `<namespace>:<key>`. A worker that passes a search result straight back to
|
|
7
7
|
* `get(key, { namespace })` then double-prefixes the key and reads nothing.
|
|
8
|
+
*
|
|
9
|
+
* The helper lives in `shared/utils/namespaced-search` so domain services can
|
|
10
|
+
* use it too (#1071); it is re-exported here for the workers.
|
|
8
11
|
*/
|
|
9
|
-
|
|
10
|
-
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
11
|
-
return new RegExp(`^${escaped.replace(/\*/g, '.*').replace(/\?/g, '.')}$`, 's');
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
15
|
-
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
16
|
-
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
17
|
-
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
18
|
-
*/
|
|
19
|
-
export function bareSearchKey(found, namespace, pattern) {
|
|
20
|
-
if (globToRegExp(pattern).test(found))
|
|
21
|
-
return found;
|
|
22
|
-
return found.startsWith(`${namespace}:`) ? found.slice(namespace.length + 1) : found;
|
|
23
|
-
}
|
|
12
|
+
export { bareSearchKey } from '../shared/utils/namespaced-search.js';
|
|
24
13
|
//# sourceMappingURL=namespaced-keys.js.map
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { execFile } from 'child_process';
|
|
9
9
|
import { promisify } from 'util';
|
|
10
|
+
import { createSafeRecord, getOwn, setOwn } from '../../shared/utils/safe-record.js';
|
|
10
11
|
const execFileAsync = promisify(execFile);
|
|
11
12
|
const DEFAULTS = {
|
|
12
13
|
runsPerWorkflow: 10,
|
|
@@ -95,16 +96,19 @@ export class CIMonitor {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
groupByWorkflow(runs) {
|
|
98
|
-
|
|
99
|
+
// Workflow names come from GitHub: no prototype, so `constructor` is just a name (#978).
|
|
100
|
+
const grouped = createSafeRecord();
|
|
99
101
|
for (const run of runs) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
let bucket = getOwn(grouped, run.name);
|
|
103
|
+
if (!bucket) {
|
|
104
|
+
bucket = [];
|
|
105
|
+
setOwn(grouped, run.name, bucket);
|
|
102
106
|
}
|
|
103
|
-
|
|
107
|
+
bucket.push(run);
|
|
104
108
|
}
|
|
105
109
|
// Limit per workflow
|
|
106
110
|
for (const name of Object.keys(grouped)) {
|
|
107
|
-
grouped
|
|
111
|
+
setOwn(grouped, name, getOwn(grouped, name).slice(0, this.options.runsPerWorkflow));
|
|
108
112
|
}
|
|
109
113
|
return grouped;
|
|
110
114
|
}
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* 'next' priority analysis tasks into the daemon queue.
|
|
7
7
|
*/
|
|
8
8
|
import { watch } from 'fs';
|
|
9
|
-
import { execFile } from 'child_process';
|
|
10
|
-
import { promisify } from 'util';
|
|
11
9
|
import { resolve, join } from 'path';
|
|
12
10
|
import { existsSync, readFileSync } from 'fs';
|
|
13
11
|
import { getGitRefError } from '../../shared/git/ref-validation.js';
|
|
14
|
-
|
|
12
|
+
import { runGit } from '../../shared/git/git-process.js';
|
|
13
|
+
/** A hung git must not stall the watcher; its process group is stopped (#1115). */
|
|
14
|
+
const GIT_TIMEOUT_MS = 10_000;
|
|
15
15
|
const DEFAULTS = {
|
|
16
16
|
repoRoot: process.cwd(),
|
|
17
17
|
debounceMs: 500,
|
|
@@ -100,11 +100,11 @@ export class GitWatcher {
|
|
|
100
100
|
this._polling = true;
|
|
101
101
|
const changedBranches = [];
|
|
102
102
|
try {
|
|
103
|
-
const
|
|
103
|
+
const stdout = await runGit([
|
|
104
104
|
'for-each-ref',
|
|
105
105
|
'--format=%(refname:short) %(objectname:short)',
|
|
106
106
|
'refs/heads/',
|
|
107
|
-
], { cwd: this.options.repoRoot });
|
|
107
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
108
108
|
for (const line of stdout.trim().split('\n')) {
|
|
109
109
|
if (!line)
|
|
110
110
|
continue;
|
|
@@ -162,13 +162,13 @@ export class GitWatcher {
|
|
|
162
162
|
return;
|
|
163
163
|
let changedFiles = [];
|
|
164
164
|
try {
|
|
165
|
-
const
|
|
165
|
+
const stdout = await runGit([
|
|
166
166
|
'diff-tree',
|
|
167
167
|
'--no-commit-id',
|
|
168
168
|
'--name-only',
|
|
169
169
|
'-r',
|
|
170
170
|
commitHash,
|
|
171
|
-
], { cwd: this.options.repoRoot });
|
|
171
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
172
172
|
changedFiles = stdout
|
|
173
173
|
.trim()
|
|
174
174
|
.split('\n')
|
|
@@ -196,11 +196,11 @@ export class GitWatcher {
|
|
|
196
196
|
}
|
|
197
197
|
async snapshotHeads() {
|
|
198
198
|
try {
|
|
199
|
-
const
|
|
199
|
+
const stdout = await runGit([
|
|
200
200
|
'for-each-ref',
|
|
201
201
|
'--format=%(refname:short) %(objectname:short)',
|
|
202
202
|
'refs/heads/',
|
|
203
|
-
], { cwd: this.options.repoRoot });
|
|
203
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
204
204
|
for (const line of stdout.trim().split('\n')) {
|
|
205
205
|
if (!line)
|
|
206
206
|
continue;
|
|
@@ -9,10 +9,13 @@
|
|
|
9
9
|
* value keeps the default behaviour (workers on). `aqe init` writes `true`
|
|
10
10
|
* for normal installs and `false` for `--no-database` installs (#533).
|
|
11
11
|
* - `AQE_DISABLED_WORKERS`: comma-separated worker ids that are not
|
|
12
|
-
* registered (for example `learning-consolidation`).
|
|
12
|
+
* registered (for example `learning-consolidation`). Matched without
|
|
13
|
+
* regard to case (#1066).
|
|
13
14
|
* - `AQE_DREAM_INSIGHTS_RETENTION_DAYS`: retention window for unapplied
|
|
14
|
-
* `dream_insights` rows. Default 30. `0
|
|
15
|
-
*
|
|
15
|
+
* `dream_insights` rows. Default 30. `0`, `off`, `false`, `no`, `disabled`,
|
|
16
|
+
* `none` or `never` disables the sweep. Any other value that is not a whole
|
|
17
|
+
* number of days is rejected with a warning and also disables the sweep, so
|
|
18
|
+
* a typo never deletes anything (#1066).
|
|
16
19
|
*/
|
|
17
20
|
export type WorkerEnv = Readonly<Record<string, string | undefined>>;
|
|
18
21
|
/** Default retention window for unapplied dream insights (days). */
|
|
@@ -23,8 +26,9 @@ export declare const DEFAULT_DREAM_INSIGHTS_RETENTION_DAYS = 30;
|
|
|
23
26
|
*/
|
|
24
27
|
export declare function isWorkersEnabled(env?: WorkerEnv): boolean;
|
|
25
28
|
/**
|
|
26
|
-
* Worker ids listed in `AQE_DISABLED_WORKERS`, trimmed,
|
|
27
|
-
* with empty entries removed.
|
|
29
|
+
* Worker ids listed in `AQE_DISABLED_WORKERS`, trimmed, lower-cased,
|
|
30
|
+
* de-duplicated and with empty entries removed. Worker ids are lower-case, so
|
|
31
|
+
* `Learning-Consolidation` disables `learning-consolidation` (#1066).
|
|
28
32
|
*/
|
|
29
33
|
export declare function parseDisabledWorkers(env?: WorkerEnv): string[];
|
|
30
34
|
export interface DreamInsightsRetention {
|
|
@@ -36,10 +40,14 @@ export interface DreamInsightsRetention {
|
|
|
36
40
|
/**
|
|
37
41
|
* Resolve `AQE_DREAM_INSIGHTS_RETENTION_DAYS`.
|
|
38
42
|
*
|
|
39
|
-
* - unset
|
|
40
|
-
*
|
|
43
|
+
* - unset, empty or whitespace only: default (30 days). Blanking the
|
|
44
|
+
* variable means "unset", not "off" (documented in configuration.md).
|
|
45
|
+
* - `0`, `off`, `false`, `no`, `disabled`, `none`, `never`: sweep disabled
|
|
46
|
+
* (`retentionDays: null`)
|
|
41
47
|
* - a whole number from 1 to 36500: that many days
|
|
42
|
-
* - anything else:
|
|
48
|
+
* - anything else: sweep disabled, with a warning describing the rejected
|
|
49
|
+
* value. The sweep deletes user data, so an unreadable setting fails safe
|
|
50
|
+
* (#1066).
|
|
43
51
|
*/
|
|
44
52
|
export declare function resolveDreamInsightsRetention(env?: WorkerEnv): DreamInsightsRetention;
|
|
45
53
|
//# sourceMappingURL=worker-env.d.ts.map
|
|
@@ -9,12 +9,20 @@
|
|
|
9
9
|
* value keeps the default behaviour (workers on). `aqe init` writes `true`
|
|
10
10
|
* for normal installs and `false` for `--no-database` installs (#533).
|
|
11
11
|
* - `AQE_DISABLED_WORKERS`: comma-separated worker ids that are not
|
|
12
|
-
* registered (for example `learning-consolidation`).
|
|
12
|
+
* registered (for example `learning-consolidation`). Matched without
|
|
13
|
+
* regard to case (#1066).
|
|
13
14
|
* - `AQE_DREAM_INSIGHTS_RETENTION_DAYS`: retention window for unapplied
|
|
14
|
-
* `dream_insights` rows. Default 30. `0
|
|
15
|
-
*
|
|
15
|
+
* `dream_insights` rows. Default 30. `0`, `off`, `false`, `no`, `disabled`,
|
|
16
|
+
* `none` or `never` disables the sweep. Any other value that is not a whole
|
|
17
|
+
* number of days is rejected with a warning and also disables the sweep, so
|
|
18
|
+
* a typo never deletes anything (#1066).
|
|
16
19
|
*/
|
|
17
20
|
const FALSY_VALUES = new Set(['false', '0', 'off', 'no']);
|
|
21
|
+
/**
|
|
22
|
+
* Values of `AQE_DREAM_INSIGHTS_RETENTION_DAYS` that turn the sweep off: the
|
|
23
|
+
* `AQE_WORKERS_ENABLED` falsy set plus a few spellings people use for "keep".
|
|
24
|
+
*/
|
|
25
|
+
const RETENTION_OFF_VALUES = new Set([...FALSY_VALUES, 'disabled', 'disable', 'none', 'never']);
|
|
18
26
|
/** Default retention window for unapplied dream insights (days). */
|
|
19
27
|
export const DEFAULT_DREAM_INSIGHTS_RETENTION_DAYS = 30;
|
|
20
28
|
/** Upper bound accepted for the retention window (100 years). */
|
|
@@ -30,8 +38,9 @@ export function isWorkersEnabled(env = process.env) {
|
|
|
30
38
|
return !FALSY_VALUES.has(raw.trim().toLowerCase());
|
|
31
39
|
}
|
|
32
40
|
/**
|
|
33
|
-
* Worker ids listed in `AQE_DISABLED_WORKERS`, trimmed,
|
|
34
|
-
* with empty entries removed.
|
|
41
|
+
* Worker ids listed in `AQE_DISABLED_WORKERS`, trimmed, lower-cased,
|
|
42
|
+
* de-duplicated and with empty entries removed. Worker ids are lower-case, so
|
|
43
|
+
* `Learning-Consolidation` disables `learning-consolidation` (#1066).
|
|
35
44
|
*/
|
|
36
45
|
export function parseDisabledWorkers(env = process.env) {
|
|
37
46
|
const raw = env.AQE_DISABLED_WORKERS;
|
|
@@ -39,17 +48,21 @@ export function parseDisabledWorkers(env = process.env) {
|
|
|
39
48
|
return [];
|
|
40
49
|
const ids = raw
|
|
41
50
|
.split(',')
|
|
42
|
-
.map((id) => id.trim())
|
|
51
|
+
.map((id) => id.trim().toLowerCase())
|
|
43
52
|
.filter((id) => id.length > 0);
|
|
44
53
|
return Array.from(new Set(ids));
|
|
45
54
|
}
|
|
46
55
|
/**
|
|
47
56
|
* Resolve `AQE_DREAM_INSIGHTS_RETENTION_DAYS`.
|
|
48
57
|
*
|
|
49
|
-
* - unset
|
|
50
|
-
*
|
|
58
|
+
* - unset, empty or whitespace only: default (30 days). Blanking the
|
|
59
|
+
* variable means "unset", not "off" (documented in configuration.md).
|
|
60
|
+
* - `0`, `off`, `false`, `no`, `disabled`, `none`, `never`: sweep disabled
|
|
61
|
+
* (`retentionDays: null`)
|
|
51
62
|
* - a whole number from 1 to 36500: that many days
|
|
52
|
-
* - anything else:
|
|
63
|
+
* - anything else: sweep disabled, with a warning describing the rejected
|
|
64
|
+
* value. The sweep deletes user data, so an unreadable setting fails safe
|
|
65
|
+
* (#1066).
|
|
53
66
|
*/
|
|
54
67
|
export function resolveDreamInsightsRetention(env = process.env) {
|
|
55
68
|
const raw = env.AQE_DREAM_INSIGHTS_RETENTION_DAYS;
|
|
@@ -57,7 +70,7 @@ export function resolveDreamInsightsRetention(env = process.env) {
|
|
|
57
70
|
return { retentionDays: DEFAULT_DREAM_INSIGHTS_RETENTION_DAYS };
|
|
58
71
|
}
|
|
59
72
|
const value = raw.trim().toLowerCase();
|
|
60
|
-
if (value
|
|
73
|
+
if (RETENTION_OFF_VALUES.has(value)) {
|
|
61
74
|
return { retentionDays: null };
|
|
62
75
|
}
|
|
63
76
|
if (/^\d+$/.test(value)) {
|
|
@@ -67,10 +80,10 @@ export function resolveDreamInsightsRetention(env = process.env) {
|
|
|
67
80
|
}
|
|
68
81
|
}
|
|
69
82
|
return {
|
|
70
|
-
retentionDays:
|
|
83
|
+
retentionDays: null,
|
|
71
84
|
warning: `Invalid AQE_DREAM_INSIGHTS_RETENTION_DAYS=${JSON.stringify(raw)}; ` +
|
|
72
85
|
`expected a whole number of days (1-${MAX_DREAM_INSIGHTS_RETENTION_DAYS}), ` +
|
|
73
|
-
`0 or "off".
|
|
86
|
+
`0 or "off". The dream_insights retention sweep is off until this is fixed; nothing is deleted.`,
|
|
74
87
|
};
|
|
75
88
|
}
|
|
76
89
|
//# sourceMappingURL=worker-env.js.map
|
|
@@ -236,6 +236,10 @@ export class WorkerManagerImpl {
|
|
|
236
236
|
async startAll() {
|
|
237
237
|
this.running = true;
|
|
238
238
|
for (const worker of Array.from(this.workers.values())) {
|
|
239
|
+
// #1066: startAll may run in the background (MCP startup), so a stop
|
|
240
|
+
// issued meanwhile must not be followed by more first runs.
|
|
241
|
+
if (!this.running)
|
|
242
|
+
break;
|
|
239
243
|
if (worker.config.enabled) {
|
|
240
244
|
await this.startWorker(worker);
|
|
241
245
|
}
|