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
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
6
6
|
import { ok, err } from '../../../shared/types/index.js';
|
|
7
7
|
import { toError } from '../../../shared/error-utils.js';
|
|
8
|
-
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
9
8
|
import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
|
|
9
|
+
import { partitionByRewardSource } from '../reward-source.js';
|
|
10
10
|
const DEFAULT_CONFIG = {
|
|
11
11
|
defaultConfidenceLevel: 0.95,
|
|
12
12
|
minSamplesForOptimization: 20,
|
|
@@ -14,6 +14,12 @@ const DEFAULT_CONFIG = {
|
|
|
14
14
|
improvementThreshold: 0.05,
|
|
15
15
|
explorationRate: 0.1,
|
|
16
16
|
};
|
|
17
|
+
/** Namespace every optimizer record is written under. */
|
|
18
|
+
const LEARNING_NS = { namespace: 'learning-optimization' };
|
|
19
|
+
/** Share of the most recent experiences held out from fitting (#1099). */
|
|
20
|
+
const HELD_OUT_FRACTION = 0.2;
|
|
21
|
+
/** Relative tolerance within which an observed outcome matches the prediction. */
|
|
22
|
+
const VALIDATION_TOLERANCE = 0.2;
|
|
17
23
|
/**
|
|
18
24
|
* SEC-003: Dangerous keys that could lead to prototype pollution
|
|
19
25
|
*/
|
|
@@ -41,29 +47,54 @@ export class MetricsOptimizerService {
|
|
|
41
47
|
/**
|
|
42
48
|
* Optimize a strategy for a given objective
|
|
43
49
|
*/
|
|
44
|
-
async optimizeStrategy(currentStrategy, objective,
|
|
50
|
+
async optimizeStrategy(currentStrategy, objective, input) {
|
|
45
51
|
try {
|
|
52
|
+
// #1109: fit and validate on measured outcomes only.
|
|
53
|
+
const { measured: experiences, assignedExcluded } = partitionByRewardSource(input);
|
|
46
54
|
if (experiences.length < this.config.minSamplesForOptimization) {
|
|
47
|
-
|
|
55
|
+
const excluded = assignedExcluded > 0
|
|
56
|
+
? ` (${assignedExcluded} with an assigned reward excluded)`
|
|
57
|
+
: '';
|
|
58
|
+
return err(new Error(`Need at least ${this.config.minSamplesForOptimization} measured experiences for optimization${excluded}`));
|
|
48
59
|
}
|
|
49
|
-
//
|
|
50
|
-
|
|
60
|
+
// #1099: fit on the older experiences and validate on the most recent
|
|
61
|
+
// ones, which the fit never saw, so confidence is a held-out measurement
|
|
62
|
+
// rather than a score on the data the optimizer was fitted to.
|
|
63
|
+
const ordered = [...experiences].sort((a, b) => timeOf(a) - timeOf(b));
|
|
64
|
+
const heldOutSize = Math.max(1, Math.floor(ordered.length * HELD_OUT_FRACTION));
|
|
65
|
+
const training = ordered.slice(0, -heldOutSize);
|
|
66
|
+
const heldOut = ordered.slice(-heldOutSize);
|
|
51
67
|
// Generate optimized parameters
|
|
52
|
-
const optimizedParameters = await this.optimizeParameters(currentStrategy.parameters,
|
|
68
|
+
const optimizedParameters = await this.optimizeParameters(currentStrategy.parameters, training, objective);
|
|
53
69
|
// Create optimized strategy
|
|
54
70
|
const optimizedStrategy = {
|
|
55
71
|
name: `${currentStrategy.name}-optimized`,
|
|
56
72
|
parameters: optimizedParameters,
|
|
57
|
-
expectedOutcome: this.predictOutcome(optimizedParameters,
|
|
73
|
+
expectedOutcome: this.predictOutcome(optimizedParameters, training),
|
|
74
|
+
};
|
|
75
|
+
// Validate the fitted expectation against the held-out experiences
|
|
76
|
+
const validationResults = await this.validateOptimization(currentStrategy, optimizedStrategy, heldOut);
|
|
77
|
+
// The optimized strategy has never run, so its improvement cannot be
|
|
78
|
+
// observed. It is modelled as the change in parameter score between the
|
|
79
|
+
// two strategies on the held-out experiences, and labelled an estimate.
|
|
80
|
+
const improvement = this.calculateImprovement(this.scoreParameters(currentStrategy.parameters, heldOut, objective), this.scoreParameters(optimizedParameters, heldOut, objective), objective);
|
|
81
|
+
// Confidence is the share of held-out experiences whose observed
|
|
82
|
+
// outcome matched the fitted expectation.
|
|
83
|
+
const confidence = validationResults.length > 0
|
|
84
|
+
? validationResults.filter((r) => r.passed).length / validationResults.length
|
|
85
|
+
: 0;
|
|
86
|
+
const unmeasured = [];
|
|
87
|
+
if (improvement === undefined)
|
|
88
|
+
unmeasured.push('improvement');
|
|
89
|
+
if (validationResults.length === 0)
|
|
90
|
+
unmeasured.push('confidence');
|
|
91
|
+
const evaluation = {
|
|
92
|
+
method: 'held-out',
|
|
93
|
+
trainingSamples: training.length,
|
|
94
|
+
heldOutSamples: heldOut.length,
|
|
95
|
+
estimated: improvement === undefined ? [] : ['improvement'],
|
|
96
|
+
...(unmeasured.length > 0 ? { unmeasured } : {}),
|
|
58
97
|
};
|
|
59
|
-
// Validate optimization
|
|
60
|
-
const validationResults = await this.validateOptimization(currentStrategy, optimizedStrategy, experiences.slice(-10) // Use recent experiences for validation
|
|
61
|
-
);
|
|
62
|
-
// Calculate improvement
|
|
63
|
-
const optimizedPerformance = this.evaluateStrategyPerformance(optimizedStrategy, experiences, objective);
|
|
64
|
-
const improvement = this.calculateImprovement(currentPerformance, optimizedPerformance, objective);
|
|
65
|
-
// Calculate confidence
|
|
66
|
-
const confidence = this.calculateOptimizationConfidence(experiences.length, improvement, validationResults);
|
|
67
98
|
const domain = this.inferDomainFromExperiences(experiences);
|
|
68
99
|
const result = {
|
|
69
100
|
id: uuidv4(),
|
|
@@ -71,9 +102,10 @@ export class MetricsOptimizerService {
|
|
|
71
102
|
objective,
|
|
72
103
|
currentStrategy,
|
|
73
104
|
optimizedStrategy,
|
|
74
|
-
improvement,
|
|
105
|
+
improvement: improvement ?? 0,
|
|
75
106
|
confidence,
|
|
76
107
|
validationResults,
|
|
108
|
+
evaluation,
|
|
77
109
|
};
|
|
78
110
|
// Store optimization result
|
|
79
111
|
await this.storeOptimizationResult(result);
|
|
@@ -88,9 +120,24 @@ export class MetricsOptimizerService {
|
|
|
88
120
|
*/
|
|
89
121
|
async runABTest(strategyA, strategyB, testConfig) {
|
|
90
122
|
try {
|
|
91
|
-
//
|
|
92
|
-
const metricsA = await this.collectStrategyMetrics(strategyA, testConfig.metric
|
|
93
|
-
const metricsB = await this.collectStrategyMetrics(strategyB, testConfig.metric
|
|
123
|
+
// Recorded observations only (#1099): never pad with simulated samples.
|
|
124
|
+
const metricsA = await this.collectStrategyMetrics(strategyA, testConfig.metric);
|
|
125
|
+
const metricsB = await this.collectStrategyMetrics(strategyB, testConfig.metric);
|
|
126
|
+
// An arm with no recorded sample is never evidence, whatever minSamples says.
|
|
127
|
+
const minSamples = Math.max(1, testConfig.minSamples);
|
|
128
|
+
if (metricsA.length < minSamples || metricsB.length < minSamples) {
|
|
129
|
+
const insufficient = {
|
|
130
|
+
winner: 'inconclusive',
|
|
131
|
+
evidenceStatus: 'insufficient-evidence',
|
|
132
|
+
unmeasured: [testConfig.metric, 'stdDev', 'pValue'],
|
|
133
|
+
strategyAMetrics: { samples: metricsA.length },
|
|
134
|
+
strategyBMetrics: { samples: metricsB.length },
|
|
135
|
+
sampleSizeA: metricsA.length,
|
|
136
|
+
sampleSizeB: metricsB.length,
|
|
137
|
+
};
|
|
138
|
+
await this.storeABTestResult(strategyA, strategyB, insufficient);
|
|
139
|
+
return ok(insufficient);
|
|
140
|
+
}
|
|
94
141
|
// Calculate statistics
|
|
95
142
|
const meanA = this.calculateMean(metricsA);
|
|
96
143
|
const meanB = this.calculateMean(metricsB);
|
|
@@ -100,7 +147,7 @@ export class MetricsOptimizerService {
|
|
|
100
147
|
const pValue = this.calculatePValue(metricsA, metricsB);
|
|
101
148
|
// Determine winner
|
|
102
149
|
let winner;
|
|
103
|
-
if (pValue < 1 - testConfig.confidenceLevel) {
|
|
150
|
+
if (pValue !== undefined && pValue < 1 - testConfig.confidenceLevel) {
|
|
104
151
|
winner = meanA > meanB ? 'A' : 'B';
|
|
105
152
|
}
|
|
106
153
|
else {
|
|
@@ -118,7 +165,10 @@ export class MetricsOptimizerService {
|
|
|
118
165
|
stdDev: stdB,
|
|
119
166
|
samples: metricsB.length,
|
|
120
167
|
},
|
|
121
|
-
|
|
168
|
+
// Neither arm varied, so the t statistic is undefined (#1099).
|
|
169
|
+
...(pValue === undefined
|
|
170
|
+
? { unmeasured: ['pValue'], pValueUnavailableReason: 'zero-variance' }
|
|
171
|
+
: { pValue }),
|
|
122
172
|
sampleSizeA: metricsA.length,
|
|
123
173
|
sampleSizeB: metricsB.length,
|
|
124
174
|
};
|
|
@@ -154,7 +204,8 @@ export class MetricsOptimizerService {
|
|
|
154
204
|
return ok({
|
|
155
205
|
name: 'default-strategy',
|
|
156
206
|
parameters: this.getDefaultParameters(context),
|
|
157
|
-
|
|
207
|
+
// #1099: nothing was measured for the default, so expect nothing.
|
|
208
|
+
expectedOutcome: {},
|
|
158
209
|
});
|
|
159
210
|
}
|
|
160
211
|
// Sort by score and return best
|
|
@@ -168,8 +219,21 @@ export class MetricsOptimizerService {
|
|
|
168
219
|
/**
|
|
169
220
|
* Evaluate strategy performance
|
|
170
221
|
*/
|
|
171
|
-
async evaluateStrategy(strategy,
|
|
222
|
+
async evaluateStrategy(strategy, input) {
|
|
172
223
|
try {
|
|
224
|
+
// #1109: an assigned reward says nothing about how the strategy performed.
|
|
225
|
+
const { measured: experiences, assignedExcluded } = partitionByRewardSource(input);
|
|
226
|
+
if (experiences.length === 0) {
|
|
227
|
+
return ok({
|
|
228
|
+
strategy,
|
|
229
|
+
metrics: {},
|
|
230
|
+
strengths: [],
|
|
231
|
+
weaknesses: [],
|
|
232
|
+
improvementAreas: [],
|
|
233
|
+
evidenceStatus: 'insufficient-evidence',
|
|
234
|
+
...(assignedExcluded > 0 ? { assignedRewardsExcluded: assignedExcluded } : {}),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
173
237
|
// Calculate metrics
|
|
174
238
|
const metrics = {};
|
|
175
239
|
const successRate = this.calculateSuccessRate(experiences);
|
|
@@ -250,12 +314,12 @@ export class MetricsOptimizerService {
|
|
|
250
314
|
*/
|
|
251
315
|
async getMetricsHistory(strategyId, limit = 100) {
|
|
252
316
|
try {
|
|
253
|
-
const keys = await this.
|
|
317
|
+
const keys = await this.searchLearningKeys(`learning:metrics:history:${strategyId}:*`, limit);
|
|
254
318
|
const snapshots = [];
|
|
255
319
|
for (const key of keys) {
|
|
256
320
|
// #493: rehydrate `timestamp` at the kv-read seam — without this,
|
|
257
321
|
// the sort below throws once any snapshot exists in the kv.
|
|
258
|
-
const snapshot = rehydrateDates(await this.memory.get(key), ['timestamp']);
|
|
322
|
+
const snapshot = rehydrateDates(await this.memory.get(key, LEARNING_NS), ['timestamp']);
|
|
259
323
|
if (snapshot) {
|
|
260
324
|
snapshots.push(snapshot);
|
|
261
325
|
}
|
|
@@ -295,15 +359,14 @@ export class MetricsOptimizerService {
|
|
|
295
359
|
// ============================================================================
|
|
296
360
|
// Private Helper Methods
|
|
297
361
|
// ============================================================================
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
return count > 0 ? totalScore / count : 0;
|
|
362
|
+
/**
|
|
363
|
+
* Keys matching `pattern` under LEARNING_NS, ready for a namespaced get().
|
|
364
|
+
* In-memory search includes its namespace; SQLite returns a bare key.
|
|
365
|
+
*/
|
|
366
|
+
async searchLearningKeys(pattern, limit) {
|
|
367
|
+
const prefix = `${LEARNING_NS.namespace}:`;
|
|
368
|
+
const found = await this.memory.search(pattern, limit, LEARNING_NS);
|
|
369
|
+
return found.map((key) => (key.startsWith(prefix) ? key.slice(prefix.length) : key));
|
|
307
370
|
}
|
|
308
371
|
async optimizeParameters(currentParams, experiences, objective) {
|
|
309
372
|
const optimized = { ...currentParams };
|
|
@@ -391,11 +454,18 @@ export class MetricsOptimizerService {
|
|
|
391
454
|
}
|
|
392
455
|
async validateOptimization(_current, optimized, validationExperiences) {
|
|
393
456
|
const results = [];
|
|
457
|
+
// Nothing was predicted, so there is nothing to validate.
|
|
458
|
+
const expected = Object.entries(optimized.expectedOutcome);
|
|
459
|
+
if (expected.length === 0)
|
|
460
|
+
return results;
|
|
394
461
|
for (const exp of validationExperiences) {
|
|
395
|
-
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
462
|
+
// A metric the experience did not record is not evidence either way.
|
|
463
|
+
const comparable = expected.filter(([key]) => typeof exp.result.outcome[key] === 'number');
|
|
464
|
+
if (comparable.length === 0)
|
|
465
|
+
continue;
|
|
466
|
+
const passed = comparable.every(([key, value]) => {
|
|
467
|
+
const actual = exp.result.outcome[key];
|
|
468
|
+
return Math.abs(actual - value) / Math.max(value, 1) < VALIDATION_TOLERANCE;
|
|
399
469
|
});
|
|
400
470
|
results.push({
|
|
401
471
|
testId: exp.id,
|
|
@@ -405,23 +475,14 @@ export class MetricsOptimizerService {
|
|
|
405
475
|
}
|
|
406
476
|
return results;
|
|
407
477
|
}
|
|
478
|
+
/** Relative change; undefined when there is no baseline to compare with. */
|
|
408
479
|
calculateImprovement(currentPerf, optimizedPerf, objective) {
|
|
409
480
|
if (currentPerf === 0)
|
|
410
|
-
return
|
|
481
|
+
return undefined;
|
|
411
482
|
const diff = optimizedPerf - currentPerf;
|
|
412
483
|
const improvement = objective.direction === 'maximize' ? diff / currentPerf : -diff / currentPerf;
|
|
413
484
|
return Math.max(-1, Math.min(1, improvement));
|
|
414
485
|
}
|
|
415
|
-
calculateOptimizationConfidence(sampleSize, improvement, validationResults) {
|
|
416
|
-
// Base confidence from sample size
|
|
417
|
-
const sampleConfidence = Math.min(1, sampleSize / (this.config.minSamplesForOptimization * 2));
|
|
418
|
-
// Validation pass rate
|
|
419
|
-
const passRate = validationResults.filter((r) => r.passed).length /
|
|
420
|
-
Math.max(validationResults.length, 1);
|
|
421
|
-
// Improvement significance
|
|
422
|
-
const improvementConfidence = Math.abs(improvement) > this.config.improvementThreshold ? 1 : 0.5;
|
|
423
|
-
return sampleConfidence * 0.3 + passRate * 0.5 + improvementConfidence * 0.2;
|
|
424
|
-
}
|
|
425
486
|
inferDomainFromExperiences(experiences) {
|
|
426
487
|
const domainCounts = new Map();
|
|
427
488
|
for (const exp of experiences) {
|
|
@@ -437,22 +498,21 @@ export class MetricsOptimizerService {
|
|
|
437
498
|
}
|
|
438
499
|
return maxDomain;
|
|
439
500
|
}
|
|
440
|
-
|
|
441
|
-
|
|
501
|
+
/**
|
|
502
|
+
* Values of `metric` recorded for this strategy through trackMetrics(),
|
|
503
|
+
* whose strategy id is the strategy name. Only recorded observations are
|
|
504
|
+
* returned; the caller decides whether there are enough (#1099).
|
|
505
|
+
*/
|
|
506
|
+
async collectStrategyMetrics(strategy, metric) {
|
|
507
|
+
const keys = await this.searchLearningKeys(`learning:metrics:history:${strategy.name}:*`, 1000);
|
|
442
508
|
const metrics = [];
|
|
443
509
|
for (const key of keys) {
|
|
444
|
-
const snapshot = await this.memory.get(key);
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
metrics.push(
|
|
510
|
+
const snapshot = await this.memory.get(key, LEARNING_NS);
|
|
511
|
+
const value = snapshot?.metrics[metric];
|
|
512
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
513
|
+
metrics.push(value);
|
|
448
514
|
}
|
|
449
515
|
}
|
|
450
|
-
// If not enough real data, generate simulated data
|
|
451
|
-
while (metrics.length < minSamples) {
|
|
452
|
-
const expected = strategy.expectedOutcome[metric] || 0.5;
|
|
453
|
-
const variation = (secureRandom() - 0.5) * 0.2;
|
|
454
|
-
metrics.push(expected + variation);
|
|
455
|
-
}
|
|
456
516
|
return metrics;
|
|
457
517
|
}
|
|
458
518
|
calculateMean(values) {
|
|
@@ -467,6 +527,7 @@ export class MetricsOptimizerService {
|
|
|
467
527
|
const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
|
|
468
528
|
return Math.sqrt(squaredDiffs.reduce((a, b) => a + b, 0) / values.length);
|
|
469
529
|
}
|
|
530
|
+
/** Undefined when neither group varies: the test statistic is undefined. */
|
|
470
531
|
calculatePValue(groupA, groupB) {
|
|
471
532
|
// Simplified p-value calculation using Welch's t-test approximation
|
|
472
533
|
const meanA = this.calculateMean(groupA);
|
|
@@ -477,7 +538,7 @@ export class MetricsOptimizerService {
|
|
|
477
538
|
const nB = groupB.length;
|
|
478
539
|
const se = Math.sqrt(varA / nA + varB / nB);
|
|
479
540
|
if (se === 0)
|
|
480
|
-
return
|
|
541
|
+
return undefined;
|
|
481
542
|
const t = Math.abs(meanA - meanB) / se;
|
|
482
543
|
// Approximate p-value using normal distribution
|
|
483
544
|
const pValue = 2 * (1 - this.normalCDF(t));
|
|
@@ -590,7 +651,7 @@ export class MetricsOptimizerService {
|
|
|
590
651
|
}
|
|
591
652
|
async updateAggregatedMetrics(strategyId, metrics) {
|
|
592
653
|
const key = `learning:metrics:aggregated:${strategyId}`;
|
|
593
|
-
const existing = await this.memory.get(key);
|
|
654
|
+
const existing = await this.memory.get(key, LEARNING_NS);
|
|
594
655
|
const aggregated = existing?.metrics || {};
|
|
595
656
|
for (const [metricName, value] of Object.entries(metrics)) {
|
|
596
657
|
// SEC-003: Guard against prototype pollution
|
|
@@ -627,4 +688,9 @@ export class MetricsOptimizerService {
|
|
|
627
688
|
}, { namespace: 'learning-optimization', ttl: 86400 * 7 });
|
|
628
689
|
}
|
|
629
690
|
}
|
|
691
|
+
/** Epoch milliseconds of an experience; kv reads may hand back an ISO string. */
|
|
692
|
+
function timeOf(experience) {
|
|
693
|
+
const ms = new Date(experience.timestamp).getTime();
|
|
694
|
+
return Number.isNaN(ms) ? 0 : ms;
|
|
695
|
+
}
|
|
630
696
|
//# sourceMappingURL=metrics-optimizer.js.map
|
|
@@ -6,6 +6,8 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
6
6
|
import { ok, err, ALL_DOMAINS } from '../../../shared/types/index.js';
|
|
7
7
|
import { toError } from '../../../shared/error-utils.js';
|
|
8
8
|
import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
|
|
9
|
+
import { searchAllKeys } from '../../../shared/utils/namespaced-search.js';
|
|
10
|
+
import { LEARNING_NS } from '../active-patterns.js';
|
|
9
11
|
const DEFAULT_CONFIG = {
|
|
10
12
|
maxKnowledgeItems: 1000,
|
|
11
13
|
relevanceThreshold: 0.5,
|
|
@@ -56,32 +58,35 @@ export class TransferSpecialistService {
|
|
|
56
58
|
async queryKnowledge(query) {
|
|
57
59
|
try {
|
|
58
60
|
const results = [];
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
// Secondary domain/type indexes store IDs, not Knowledge objects, and
|
|
62
|
+
// shareKnowledge() need not create them. Read canonical shared records
|
|
63
|
+
// from the same namespace as both writers, then filter and rank before
|
|
64
|
+
// applying the caller's result limit. #1071: every key is read (the
|
|
65
|
+
// config value only sizes the first scan request), so the domain filter
|
|
66
|
+
// sees every item instead of an arbitrary first page.
|
|
67
|
+
const keys = await searchAllKeys(this.memory, 'learning:knowledge:shared:*', {
|
|
68
|
+
retrieve: LEARNING_NS,
|
|
69
|
+
pageSize: this.config.maxKnowledgeItems,
|
|
70
|
+
});
|
|
67
71
|
for (const key of keys) {
|
|
68
72
|
// #493: rehydrate Date fields at the kv-read seam. `createdAt` is
|
|
69
73
|
// consumed by validateRelevance().getTime() and `expiresAt` is
|
|
70
74
|
// compared via `new Date() > knowledge.expiresAt` — both broken
|
|
71
75
|
// when the field is a string after JSON round-trip.
|
|
72
|
-
const knowledge = rehydrateDates(await this.memory.get(key), ['createdAt', 'expiresAt']);
|
|
76
|
+
const knowledge = rehydrateDates(await this.memory.get(key, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
|
|
73
77
|
if (knowledge && this.matchesQuery(knowledge, query)) {
|
|
74
78
|
results.push(knowledge);
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
|
-
// Sort by relevance score
|
|
78
|
-
|
|
81
|
+
// Sort by relevance score; equal scores fall back to id order so the
|
|
82
|
+
// caller's limit always keeps the same items (#1071).
|
|
83
|
+
results.sort((a, b) => b.relevanceScore - a.relevanceScore || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
79
84
|
// Apply semantic search if embedding provided
|
|
80
85
|
if (query.embedding && query.embedding.length > 0) {
|
|
81
86
|
const vectorResults = await this.memory.vectorSearch(query.embedding, query.limit || 10);
|
|
82
87
|
for (const vr of vectorResults) {
|
|
83
88
|
// #493: rehydrate Date fields at the kv-read seam.
|
|
84
|
-
const knowledge = rehydrateDates(await this.memory.get(vr.key), ['createdAt', 'expiresAt']);
|
|
89
|
+
const knowledge = rehydrateDates(await this.memory.get(vr.key, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
|
|
85
90
|
if (knowledge &&
|
|
86
91
|
!results.some((r) => r.id === knowledge.id) &&
|
|
87
92
|
this.matchesQuery(knowledge, query)) {
|
|
@@ -253,7 +258,7 @@ export class TransferSpecialistService {
|
|
|
253
258
|
*/
|
|
254
259
|
async getKnowledgeById(id) {
|
|
255
260
|
// #493: rehydrate Date fields at the kv-read seam.
|
|
256
|
-
const knowledge = rehydrateDates(await this.memory.get(`learning:knowledge:shared:${id}
|
|
261
|
+
const knowledge = rehydrateDates(await this.memory.get(`learning:knowledge:shared:${id}`, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
|
|
257
262
|
return knowledge || null;
|
|
258
263
|
}
|
|
259
264
|
/**
|
|
@@ -261,11 +266,16 @@ export class TransferSpecialistService {
|
|
|
261
266
|
*/
|
|
262
267
|
async bulkTransfer(sourceProject, targetProject, filter) {
|
|
263
268
|
try {
|
|
264
|
-
|
|
269
|
+
// #1071: read project knowledge from the namespace it is written to
|
|
270
|
+
// below, every key, in key order. The scan is a glob (and
|
|
271
|
+
// case-insensitive on SQLite), so keep only this project's own
|
|
272
|
+
// `<prefix><id>` keys: `ALPHA` or `alpha:sub` must not leak into `alpha`.
|
|
273
|
+
const prefix = `learning:knowledge:project:${sourceProject}:`;
|
|
274
|
+
const keys = (await searchAllKeys(this.memory, `${prefix}*`, { retrieve: LEARNING_NS })).filter((key) => key.startsWith(prefix) && !key.slice(prefix.length).includes(':'));
|
|
265
275
|
const results = [];
|
|
266
276
|
for (const key of keys) {
|
|
267
277
|
// #493: rehydrate Date fields at the kv-read seam.
|
|
268
|
-
const knowledge = rehydrateDates(await this.memory.get(key), ['createdAt', 'expiresAt']);
|
|
278
|
+
const knowledge = rehydrateDates(await this.memory.get(key, LEARNING_NS), ['createdAt', 'expiresAt']);
|
|
269
279
|
if (!knowledge)
|
|
270
280
|
continue;
|
|
271
281
|
// Apply filter
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { FilePath } from '../../shared/value-objects/index.js';
|
|
8
|
+
import { confineSastFiles, MAX_SAST_FILE_BYTES } from './sast-path-guard.js';
|
|
7
9
|
import { SecurityComplianceCoordinator, } from './coordinator.js';
|
|
8
10
|
import { SecurityScannerService, } from './services/security-scanner.js';
|
|
9
11
|
import { SecurityAuditorService, } from './services/security-auditor.js';
|
|
@@ -97,11 +99,23 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
|
|
|
97
99
|
if (!this.securityScanner) {
|
|
98
100
|
return err(new Error('Security scanner not initialized'));
|
|
99
101
|
}
|
|
100
|
-
const
|
|
101
|
-
if (!
|
|
102
|
+
const requested = payload.files;
|
|
103
|
+
if (!requested || requested.length === 0) {
|
|
102
104
|
return err(new Error('Invalid sast-scan payload: missing files'));
|
|
103
105
|
}
|
|
104
|
-
|
|
106
|
+
// #1125: a payload that crossed a JSON boundary (task_submit,
|
|
107
|
+
// task_orchestrate, fleet run) carries plain path strings.
|
|
108
|
+
if (requested.some(f => typeof f === 'string' ? f.trim() === '' : !(f instanceof FilePath))) {
|
|
109
|
+
return err(new Error('Invalid sast-scan payload: files must be non-empty file paths'));
|
|
110
|
+
}
|
|
111
|
+
// Every file must be a regular file inside the project, within the
|
|
112
|
+
// size limit; otherwise nothing is read.
|
|
113
|
+
const { accepted, skipped } = await confineSastFiles(requested.map(f => typeof f === 'string' ? f : f.value));
|
|
114
|
+
if (skipped.length > 0) {
|
|
115
|
+
return err(new Error(`Invalid sast-scan payload: these files cannot be scanned: ${skipped.map(s => `${s.path} (${s.reason})`).join(', ')}. ` +
|
|
116
|
+
`Pass regular files inside the project, at most ${MAX_SAST_FILE_BYTES / (1024 * 1024)} MB each.`));
|
|
117
|
+
}
|
|
118
|
+
return this.securityScanner.scanFiles(accepted.map(f => FilePath.create(f)));
|
|
105
119
|
}],
|
|
106
120
|
['dast-scan', async (payload) => {
|
|
107
121
|
if (!this.securityScanner) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SkippedPayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
2
|
+
/** Largest file the pattern scanner reads whole into memory. */
|
|
3
|
+
export declare const MAX_SAST_FILE_BYTES: number;
|
|
4
|
+
export interface ConfinedSastFiles {
|
|
5
|
+
accepted: string[];
|
|
6
|
+
skipped: SkippedPayloadPath[];
|
|
7
|
+
}
|
|
8
|
+
export declare function confineSastFiles(paths: readonly string[], projectRoot?: string): Promise<ConfinedSastFiles>;
|
|
9
|
+
//# sourceMappingURL=sast-path-guard.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1125 review: decide which requested files the sast-scan task may read.
|
|
3
|
+
*
|
|
4
|
+
* The task reads every file it is given. Its payload can come from MCP
|
|
5
|
+
* task_submit, so the same rule as code indexing (#1096) applies: a file is
|
|
6
|
+
* scanned only when its realpath is a regular file inside the project root's
|
|
7
|
+
* realpath. A symlink out of the project, a device such as /dev/zero or a
|
|
8
|
+
* directory is refused by name, and so is a file over the size limit.
|
|
9
|
+
*/
|
|
10
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
11
|
+
import { confinePayloadPaths, MAX_PAYLOAD_FILE_BYTES, } from '../../shared/io/payload-path-guard.js';
|
|
12
|
+
/** Largest file the pattern scanner reads whole into memory. */
|
|
13
|
+
export const MAX_SAST_FILE_BYTES = MAX_PAYLOAD_FILE_BYTES;
|
|
14
|
+
export async function confineSastFiles(paths, projectRoot = findProjectRoot()) {
|
|
15
|
+
return confinePayloadPaths(paths, { projectRoot, maxBytes: MAX_SAST_FILE_BYTES });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=sast-path-guard.js.map
|
|
@@ -21,43 +21,38 @@ export async function testAuthorizationBypass(parsedUrl, authHeaders, crawledUrl
|
|
|
21
21
|
for (const endpoint of protectedEndpoints) {
|
|
22
22
|
if (crawledUrls >= maxDepth * 15)
|
|
23
23
|
break;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
const testUrl = new URL(endpoint, parsedUrl.origin).toString();
|
|
25
|
+
// Try with authentication
|
|
26
|
+
const authResponse = await fetch(testUrl, {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
headers: { ...authHeaders },
|
|
29
|
+
signal: AbortSignal.timeout(5000),
|
|
30
|
+
});
|
|
31
|
+
if (authResponse.ok) {
|
|
32
|
+
crawledUrls++;
|
|
33
|
+
// Try without authentication
|
|
34
|
+
const unauthResponse = await fetch(testUrl, {
|
|
28
35
|
method: 'GET',
|
|
29
|
-
headers: { ...authHeaders },
|
|
30
36
|
signal: AbortSignal.timeout(5000),
|
|
31
37
|
});
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
description: `Endpoint ${endpoint} is accessible without authentication`,
|
|
48
|
-
severity: 'high',
|
|
49
|
-
category: 'broken-auth',
|
|
50
|
-
location: { file: testUrl },
|
|
51
|
-
remediation: { description: 'Implement proper authentication checks', estimatedEffort: 'moderate', automatable: false },
|
|
52
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
53
|
-
});
|
|
54
|
-
}
|
|
38
|
+
if (unauthResponse.ok && unauthResponse.status === 200) {
|
|
39
|
+
const authText = await authResponse.text();
|
|
40
|
+
const unauthText = await unauthResponse.text();
|
|
41
|
+
if (authText.length > 100 && unauthText.length > 100 &&
|
|
42
|
+
Math.abs(authText.length - unauthText.length) < authText.length * 0.1) {
|
|
43
|
+
vulnerabilities.push({
|
|
44
|
+
id: uuidv4(),
|
|
45
|
+
title: 'Missing Authentication on Protected Endpoint',
|
|
46
|
+
description: `Endpoint ${endpoint} is accessible without authentication`,
|
|
47
|
+
severity: 'high',
|
|
48
|
+
category: 'broken-auth',
|
|
49
|
+
location: { file: testUrl },
|
|
50
|
+
remediation: { description: 'Implement proper authentication checks', estimatedEffort: 'moderate', automatable: false },
|
|
51
|
+
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
52
|
+
});
|
|
55
53
|
}
|
|
56
54
|
}
|
|
57
55
|
}
|
|
58
|
-
catch {
|
|
59
|
-
// Endpoint not accessible - expected
|
|
60
|
-
}
|
|
61
56
|
}
|
|
62
57
|
return crawledUrls;
|
|
63
58
|
}
|
|
@@ -74,33 +69,28 @@ export async function testIDOR(parsedUrl, authHeaders, crawledUrls, maxDepth, vu
|
|
|
74
69
|
for (const endpoint of idorEndpoints.slice(0, 2)) {
|
|
75
70
|
if (crawledUrls >= maxDepth * 15)
|
|
76
71
|
break;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
}
|
|
72
|
+
const testUrl = new URL(endpoint, parsedUrl.origin).toString();
|
|
73
|
+
const response = await fetch(testUrl, {
|
|
74
|
+
method: 'GET',
|
|
75
|
+
headers: { ...authHeaders },
|
|
76
|
+
signal: AbortSignal.timeout(5000),
|
|
77
|
+
});
|
|
78
|
+
if (response.ok) {
|
|
79
|
+
crawledUrls++;
|
|
80
|
+
const text = await response.text();
|
|
81
|
+
if (text.includes('email') || text.includes('password') || text.includes('phone')) {
|
|
82
|
+
vulnerabilities.push({
|
|
83
|
+
id: uuidv4(),
|
|
84
|
+
title: 'Potential Insecure Direct Object Reference (IDOR)',
|
|
85
|
+
description: `Endpoint ${endpoint} may expose other users' data`,
|
|
86
|
+
severity: 'high',
|
|
87
|
+
category: 'access-control',
|
|
88
|
+
location: { file: testUrl },
|
|
89
|
+
remediation: { description: 'Implement proper authorization checks for resource access', estimatedEffort: 'moderate', automatable: false },
|
|
90
|
+
references: ['https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References'],
|
|
91
|
+
});
|
|
99
92
|
}
|
|
100
93
|
}
|
|
101
|
-
catch {
|
|
102
|
-
// Endpoint not accessible
|
|
103
|
-
}
|
|
104
94
|
}
|
|
105
95
|
return crawledUrls;
|
|
106
96
|
}
|