agentic-qe 3.15.15 → 3.15.16
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 +90 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/audit/witness-chain.d.ts +7 -0
- package/dist/audit/witness-chain.js +10 -0
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-45NWEKVS.js} +2 -2
- package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-LVHMYFEF.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
- package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-CZKHXDDS.js} +2 -2
- package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-ELDZH3CZ.js} +4 -4
- package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-5MT4T47Z.js} +3 -3
- package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-6TGYPC2B.js} +2 -2
- package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-HQWZFO52.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-WVILM4SO.js} +2 -2
- package/dist/cli/chunks/{browser-6LACARWE.js → browser-RX5ALU3H.js} +2 -2
- package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
- package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-24OX5TQJ.js} +1 -1
- package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-24QHCVX6.js} +1 -1
- package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-2H4XH6FT.js} +2 -2
- package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-2YZ4G6NW.js} +1 -1
- package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
- package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-32GN3JKR.js} +1 -1
- package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-3HD7E6HN.js} +2 -2
- package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-4D4DENG6.js} +2 -2
- package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-4LQFBY5L.js} +6 -6
- package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-4NFQLP6R.js} +1 -1
- package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-525CFDUE.js} +2 -2
- package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
- package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-5JZRZI4S.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-5LAVKGLH.js} +2 -2
- package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
- package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-5PBLPQ5T.js} +2 -2
- package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
- package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-5SPCGMBB.js} +2 -2
- package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-5V3TI2LG.js} +1 -1
- package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-5VZL4UVN.js} +2 -2
- package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-63GMRQ25.js} +1 -1
- package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-63ZKI4PX.js} +6 -6
- package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-67Z5R7RJ.js} +2 -2
- package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-6DPYNAOK.js} +2 -2
- package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-6ICX3FEG.js} +3 -3
- package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-6XXZDV2C.js} +2 -2
- package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-6ZBXSOX6.js} +2 -2
- package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-72XSEQMW.js} +2 -2
- package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-7TE5ONQQ.js} +1 -1
- package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-A5GBXCP5.js} +2 -2
- package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-AAMLQ2LF.js} +3 -3
- package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
- package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-AGRV5B3T.js} +2 -2
- package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-AJMJNQMP.js} +1 -1
- package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-AR67RJPY.js} +2 -2
- package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-ASEOFRIG.js} +2 -2
- package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-BEKDKVQT.js} +2 -2
- package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-BY5OF7OH.js} +2 -2
- package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-C5FP5GW3.js} +2 -2
- package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-C6D5AHBO.js} +2 -2
- package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-CAKMOVZ6.js} +2 -2
- package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-CEYSYSK5.js} +2 -2
- package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-CGGUM2YJ.js} +2 -2
- package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-CJSHWQXP.js} +2 -2
- package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-CRPIYUTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-D6COXLYE.js} +2 -2
- package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-DTMAS2GB.js} +2 -2
- package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-DVYHMDFR.js} +470 -411
- package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
- package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-E3D4GPLP.js} +3 -3
- package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-EA4YQVKS.js} +1 -1
- package/dist/cli/chunks/{chunk-4D4CWP72.js → chunk-EGYE5UPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-EK7OLYOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-F742SZAX.js} +2 -2
- package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-FBDVGRSC.js} +1 -1
- package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-FDDC72IA.js} +2 -2
- package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-FL64OUBA.js} +2 -2
- package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-FLNAW7C4.js} +2 -2
- package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-G5RHFBAY.js} +2 -2
- package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-GAHNO6JJ.js} +2 -2
- package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-GFWHUQSF.js} +2 -2
- package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-GJYHWYXR.js} +2 -2
- package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-GQ6TUIKY.js} +1 -1
- package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-GSKMOPL7.js} +2 -2
- package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-HCH4Y6XX.js} +2 -2
- package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-HGWXF45W.js} +1 -1
- package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-HJ6ZGVTB.js} +2 -2
- package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-HLUXXCHF.js} +1 -1
- package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-HVRRLYX6.js} +4 -4
- package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-I7MQIM2U.js} +1 -1
- package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-IESR7TNB.js} +2 -2
- package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-IHRXZZQM.js} +1 -1
- package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-IOKYCMTJ.js} +6 -6
- package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-IOQ6ZQ5W.js} +1 -1
- package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-IOYG4VFL.js} +2 -2
- package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-IUBJVHNB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-J442IZLE.js} +1 -1
- package/dist/cli/chunks/{chunk-G242G224.js → chunk-J4ELZNLY.js} +2 -2
- package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
- package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
- package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-JHQCRRJI.js} +2 -2
- package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-JQ3DYUMS.js} +2 -2
- package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-KITOPKRG.js} +2 -2
- package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-KKU2QGSJ.js} +2 -2
- package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
- package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-KNSRL6NO.js} +2 -2
- package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-KPRCB5LT.js} +2 -2
- package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-KQYJ4VQ5.js} +1 -1
- package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-KU2AUFGX.js} +2 -2
- package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-KVF4NXGQ.js} +2 -2
- package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-KXCLACFG.js} +2 -2
- package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-L2DWPVNJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-L6QSTQME.js} +2 -2
- package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-LE4QJREF.js} +1 -1
- package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-LKTTUHLF.js} +2 -2
- package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-LQLPB2T6.js} +2 -2
- package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-LRSX2FJM.js} +1 -1
- package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
- package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
- package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-MAFQV4U4.js} +2 -2
- package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-MD43XRX5.js} +1 -1
- package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-MI5MFHRA.js} +2 -2
- package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-MO55CVMT.js} +32 -32
- package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-N7HL5PHH.js} +1 -1
- package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
- package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-NDJ7P2EP.js} +1 -1
- package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-NO3IV5Q5.js} +1 -1
- package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-NQXXI77K.js} +2 -2
- package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-NVEWF4JV.js} +1 -1
- package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-NZU4ACBZ.js} +2 -2
- package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
- package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-OAEE6JWQ.js} +2 -2
- package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-OCV2XEWQ.js} +2 -2
- package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-P3EYRILV.js} +2 -2
- package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PEQDY4BO.js} +2 -2
- package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-PF7RBAYL.js} +2 -2
- package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-PHT5N7SC.js} +2 -2
- package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-PINSJCM3.js} +1 -1
- package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-PPUZWYUG.js} +2 -2
- package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-QPEOLAAS.js} +1 -1
- package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-QQWBWEJS.js} +18 -18
- package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-QVDCVD5D.js} +2 -2
- package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-RJIEG3NA.js} +2 -2
- package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-RV74I3YO.js} +2 -2
- package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-S75SOOZL.js} +2 -2
- package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-SASBO5Y5.js} +2 -2
- package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-SDLWKRVL.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-SHKOCGNK.js} +2 -2
- package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-SI6DPU5D.js} +1 -1
- package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-SJ6Y4725.js} +2 -2
- package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-SR52XP5F.js} +1 -1
- package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-SSUAAX3F.js} +2 -2
- package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-SSYAQZXA.js} +2 -2
- package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-SUDMM5SO.js} +2 -2
- package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-TIUKLYAI.js} +1 -1
- package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-TVGI32MB.js} +33 -33
- package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-U2A7NHZA.js} +2 -2
- package/dist/cli/chunks/{chunk-TX2CHQD7.js → chunk-UE5ZOZR2.js} +2 -2
- package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-UHEOGZLX.js} +11 -11
- package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
- package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-V5NHZV7S.js} +2 -2
- package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-VJCIEHEF.js} +1 -1
- package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-VMDFFTCK.js} +1 -1
- package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
- package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-VWPM27GU.js} +2 -2
- package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-VXFLJNCA.js} +2 -2
- package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-W5HQUIML.js} +2 -2
- package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-WP4RETKG.js} +2 -2
- package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-XIIQ5QTT.js} +2 -2
- package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-XIQW7EFL.js} +2 -2
- package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-XWUWX7BV.js} +4 -4
- package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-Y4PFUMOU.js} +1 -1
- package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
- package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-YLMNVLDK.js} +1 -1
- package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-YNMJEDN5.js} +2 -2
- package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-YPBSUGMI.js} +1 -1
- package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-YRAX7SFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-YTHTQPWR.js} +1 -1
- package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-YU2BDRSD.js} +1 -1
- package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
- package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-ZFL436FN.js} +2 -2
- package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-ZJH5MU2I.js} +2 -2
- package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-ZQ2XW3IP.js} +2 -2
- package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
- package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-MFUR4CWV.js} +2 -2
- package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-PNDLQ6XV.js} +2 -2
- package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-PFZ4M7NC.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-5HH6NLZN.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-QCKYLGLC.js} +2 -2
- package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
- package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-EASVPFXR.js} +2 -2
- package/dist/cli/chunks/{code-WY3GJXHX.js → code-UJXDVYRK.js} +4 -3
- package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-BZJ3UDP4.js} +2 -2
- package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-XSQZUVOZ.js} +2 -2
- package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-OWOOJFI2.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-KP5TOHDT.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-IFKQXLHM.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-BHPDSELY.js → copilot-installer-IGJ6KGQY.js} +2 -2
- package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-MMDDNKZB.js} +2 -2
- package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-LUH2B7NT.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-4YLM5GWM.js} +2 -2
- package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
- package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-MZKVM4CJ.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-X4CYW665.js} +2 -2
- package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-7BM2XINO.js} +2 -2
- package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-Y5APLEYB.js} +2 -2
- package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-X3ZRJNAH.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-2UW5KQJB.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-35W4CIBV.js} +2 -2
- package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
- package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
- package/dist/cli/chunks/{eval-OQELIWJK.js → eval-4QA2SROK.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
- package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-FIORX6GN.js} +2 -2
- package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-6LYI2T4G.js} +2 -2
- package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-ZOO7LMIC.js} +2 -2
- package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
- package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-7WF53H4F.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-DEKKMOVW.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
- package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-4YOQC6L4.js} +2 -2
- package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-TAOKV4EJ.js} +23 -22
- package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-BODRJLHL.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-RKMYJNTU.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
- package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-MXHSLSB2.js} +2 -2
- package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-HUE57IFW.js} +6 -6
- package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
- package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-S333IKYQ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-WM5DLQWC.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
- package/dist/cli/chunks/{learning-FZTD72CF.js → learning-LNHMQLH5.js} +3 -3
- package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-EWFXYZZR.js} +4 -4
- package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
- package/dist/cli/chunks/{load-YKTPOYBE.js → load-FGYGWVDK.js} +2 -2
- package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
- package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-2FHNAAOM.js} +2 -2
- package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DZMQ73AB.js} +5 -5
- package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
- package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-6F2UAEUW.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-XY3BGOTZ.js} +2 -2
- package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-B4CNKUOS.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
- package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-FG5RKVRO.js} +2 -2
- package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-3BT4KEVJ.js} +2 -2
- package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-WI4RIN7O.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
- package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
- package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
- package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-WNODKPGW.js} +2 -2
- package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-5RHAEPYZ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
- package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-WPHR7BGQ.js} +2 -2
- package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-4RKTEZMX.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
- package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
- package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-TPAWHOHH.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-7AVHFNDI.js} +2 -2
- package/dist/cli/chunks/router-EP34O3KB.js +2 -0
- package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
- package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-YKEDVJSH.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-JUAMM354.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
- package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
- package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
- package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
- package/dist/cli/chunks/{security-A3IMVLFM.js → security-ORDN3RD2.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
- package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-OXRJYZXN.js} +2 -2
- package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-BCX5D4HY.js} +2 -2
- package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-LFG7RUU6.js} +2 -2
- package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
- package/dist/cli/chunks/{sync-NTUR53PI.js → sync-YJEE2K2L.js} +2 -2
- package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
- package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-CILP36I7.js} +4 -4
- package/dist/cli/chunks/{test-O6FK3FVF.js → test-SD457QJ6.js} +4 -4
- package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-ISI2O4Q5.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
- package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-XOC5KG7S.js} +2 -2
- package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-LSLQAARK.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
- package/dist/cli/chunks/{types-4AOKZYOX.js → types-5BLCGLCR.js} +2 -2
- package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
- package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
- package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-RQJYLK3J.js} +2 -2
- package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-QBHWXXCK.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-IKXBKFB5.js} +2 -2
- package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-HQGDZT5D.js} +2 -2
- package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
- package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-RXYQNFJB.js} +2 -2
- package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-FBKCA4H6.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
- package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
- package/dist/cli/commands/code.js +4 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/task-result.d.ts +11 -0
- package/dist/cli/utils/task-result.js +39 -0
- package/dist/coordination/handlers/test-execution-handlers.js +92 -58
- package/dist/coordination/mincut/mincut-persistence.js +29 -25
- package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
- package/dist/domains/code-intelligence/coordinator.js +46 -13
- package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
- package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
- package/dist/domains/quality-assessment/coordinator.js +2 -1
- package/dist/domains/test-execution/coordinator.js +10 -5
- package/dist/domains/test-execution/interfaces.d.ts +12 -0
- package/dist/domains/test-execution/plugin.js +6 -2
- package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
- package/dist/domains/test-execution/services/retry-handler.js +14 -9
- package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
- package/dist/domains/test-execution/services/test-executor.js +28 -9
- package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
- package/dist/domains/visual-accessibility/coordinator.js +15 -7
- package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
- package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
- package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
- package/dist/feedback/coverage-learner.js +13 -9
- package/dist/feedback/test-outcome-tracker.js +13 -9
- package/dist/governance/witness-chain.d.ts +5 -0
- package/dist/governance/witness-chain.js +22 -6
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
- package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
- package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
- package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
- package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
- package/dist/integrations/ruvector/delta-tracker.js +16 -0
- package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
- package/dist/integrations/ruvector/sona-persistence.js +49 -24
- package/dist/kernel/unified-memory.d.ts +24 -0
- package/dist/kernel/unified-memory.js +63 -8
- package/dist/learning/aqe-learning-engine.js +1 -1
- package/dist/learning/embed-and-insert-pattern.js +4 -2
- package/dist/learning/embedder-endpoint-client.d.ts +31 -0
- package/dist/learning/embedder-endpoint-client.js +103 -10
- package/dist/learning/embedding-space.d.ts +12 -0
- package/dist/learning/embedding-space.js +17 -0
- package/dist/learning/experience-capture-middleware.js +25 -13
- package/dist/learning/experience-capture.js +1 -1
- package/dist/learning/experience-consolidation.d.ts +18 -0
- package/dist/learning/experience-consolidation.js +55 -8
- package/dist/learning/experience-space-verification.d.ts +71 -0
- package/dist/learning/experience-space-verification.js +147 -0
- package/dist/learning/pattern-lifecycle.d.ts +40 -4
- package/dist/learning/pattern-lifecycle.js +153 -76
- package/dist/learning/pattern-null-store.d.ts +5 -0
- package/dist/learning/pattern-null-store.js +8 -0
- package/dist/learning/pattern-promotion.js +6 -3
- package/dist/learning/pattern-store.d.ts +6 -0
- package/dist/learning/pattern-store.js +19 -6
- package/dist/learning/qe-reasoning-bank.js +2 -2
- package/dist/learning/real-embeddings.js +3 -1
- package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
- package/dist/learning/real-qe-reasoning-bank.js +77 -47
- package/dist/learning/rvf-pattern-store.js +6 -2
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +10 -0
- package/dist/mcp/bundle.js +641 -570
- package/dist/mcp/entry.js +4 -0
- package/dist/mcp/handlers/domain-handler-configs.js +2 -0
- package/dist/mcp/handlers/trajectory-judge.js +1 -1
- package/dist/mcp/protocol-server.js +1 -0
- package/dist/mcp/tools/visual-accessibility/index.js +8 -2
- package/dist/mcp/types.d.ts +6 -0
- package/dist/optimization/session-cache.d.ts +17 -1
- package/dist/optimization/session-cache.js +40 -36
- package/dist/planning/goap-planner.d.ts +6 -0
- package/dist/planning/goap-planner.js +35 -19
- package/dist/planning/plan-executor.js +24 -15
- package/dist/routing/co-execution-repository.js +12 -9
- package/dist/routing/routing-feedback.d.ts +8 -0
- package/dist/routing/routing-feedback.js +46 -24
- package/dist/routing/routing-outcomes-migration.js +7 -2
- package/dist/shared/llm/spend-ledger.d.ts +9 -0
- package/dist/shared/llm/spend-ledger.js +64 -39
- package/dist/shared/sqlite-lock-wait.d.ts +27 -0
- package/dist/shared/sqlite-lock-wait.js +37 -0
- package/dist/shared/sqlite-write-queue.d.ts +28 -0
- package/dist/shared/sqlite-write-queue.js +38 -0
- package/dist/shared/test-runner-project.d.ts +69 -0
- package/dist/shared/test-runner-project.js +186 -0
- package/dist/skills/security-visual-testing/index.d.ts +3 -1
- package/dist/skills/security-visual-testing/index.js +49 -35
- package/dist/skills/security-visual-testing/types.d.ts +19 -3
- package/dist/workers/workers/heartbeat-scheduler.js +5 -5
- package/dist/workers/workers/learning-consolidation.js +8 -7
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
- package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
- package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
- package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
- package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
- package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
- package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
- package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
- package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
- package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
- package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
- package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
- package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
- package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
- package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
- package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
- package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
- package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
- package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
- package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
- package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
- package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
- package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
- package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
- package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
- package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
- package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
- package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
- package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
- package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
- package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
- package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
- package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
- package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
- package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
- package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
- package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
- package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
- package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
- package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
- package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
- package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
- package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
- package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
- package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
- package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
- package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
- package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
- package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
- package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
- package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
- package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
- package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
- package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
- package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
|
@@ -82,35 +82,60 @@ export function parseEndpoint(endpoint) {
|
|
|
82
82
|
safeUrl: url.toString().replace(/\/$/, ''),
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* #1216: a connect or request timeout. The host did not answer within the
|
|
87
|
+
* budget, so the breaker opens on the first one instead of counting it as one
|
|
88
|
+
* failure of `failureThreshold`.
|
|
89
|
+
*/
|
|
90
|
+
export class EmbedderEndpointTimeoutError extends Error {
|
|
91
|
+
phase;
|
|
92
|
+
limitMs;
|
|
93
|
+
constructor(phase, limitMs) {
|
|
94
|
+
super(`[EmbedderEndpointClient] ${phase} timeout after ${limitMs}ms`);
|
|
95
|
+
this.phase = phase;
|
|
96
|
+
this.limitMs = limitMs;
|
|
97
|
+
this.name = 'EmbedderEndpointTimeoutError';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
85
100
|
/**
|
|
86
101
|
* Circuit breaker state.
|
|
87
102
|
*
|
|
88
|
-
* Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold
|
|
103
|
+
* Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold`,
|
|
104
|
+
* or at once on a timeout (#1216): timeouts arrive one timeout apart, so with a
|
|
105
|
+
* 30 s request timeout and a 60 s window they would never add up to three.
|
|
89
106
|
* While open, every request fast-fails until the window expires. On recovery
|
|
90
107
|
* (window elapses), the breaker calls `onRecover` so the client can invalidate
|
|
91
108
|
* cached endpoint identity — endpoint restarts often coincide with model swaps.
|
|
109
|
+
* Whenever it opens, it calls `onTrip` so the client can abandon requests
|
|
110
|
+
* still waiting on the host.
|
|
92
111
|
*/
|
|
93
112
|
class CircuitBreaker {
|
|
94
113
|
threshold;
|
|
95
114
|
windowMs;
|
|
96
115
|
onRecover;
|
|
116
|
+
onTrip;
|
|
97
117
|
failures = [];
|
|
98
118
|
trippedAt = null;
|
|
99
|
-
constructor(threshold, windowMs, onRecover = () => { }) {
|
|
119
|
+
constructor(threshold, windowMs, onRecover = () => { }, onTrip = () => { }) {
|
|
100
120
|
this.threshold = threshold;
|
|
101
121
|
this.windowMs = windowMs;
|
|
102
122
|
this.onRecover = onRecover;
|
|
123
|
+
this.onTrip = onTrip;
|
|
103
124
|
}
|
|
104
125
|
recordSuccess() {
|
|
105
126
|
this.failures = [];
|
|
106
127
|
this.trippedAt = null;
|
|
107
128
|
}
|
|
108
|
-
recordFailure() {
|
|
129
|
+
recordFailure(tripNow = false) {
|
|
130
|
+
// Requests abandoned when the breaker opened fail too; they must not
|
|
131
|
+
// extend the window.
|
|
132
|
+
if (this.trippedAt !== null)
|
|
133
|
+
return;
|
|
109
134
|
const now = Date.now();
|
|
110
135
|
this.failures = this.failures.filter((t) => now - t < this.windowMs);
|
|
111
136
|
this.failures.push(now);
|
|
112
|
-
if (this.failures.length >= this.threshold) {
|
|
113
|
-
this.
|
|
137
|
+
if (tripNow || this.failures.length >= this.threshold) {
|
|
138
|
+
this.trip();
|
|
114
139
|
}
|
|
115
140
|
}
|
|
116
141
|
isOpen() {
|
|
@@ -128,6 +153,7 @@ class CircuitBreaker {
|
|
|
128
153
|
/** #1204: open (or re-open) the breaker for a full window from now. */
|
|
129
154
|
trip() {
|
|
130
155
|
this.trippedAt = Date.now();
|
|
156
|
+
this.onTrip();
|
|
131
157
|
}
|
|
132
158
|
/** For tests / observability */
|
|
133
159
|
getState() {
|
|
@@ -145,6 +171,14 @@ export class EmbedderEndpointClient {
|
|
|
145
171
|
cachedIdentity = null;
|
|
146
172
|
/** True while a probe is in flight — prevents the embed() lazy-probe race. */
|
|
147
173
|
probeInFlight = null;
|
|
174
|
+
/**
|
|
175
|
+
* #1216: set when the breaker window elapsed and no probe has succeeded
|
|
176
|
+
* since. The next probe is the breaker's half-open trial; it runs in the
|
|
177
|
+
* background so no caller waits on a host that may still not answer.
|
|
178
|
+
*/
|
|
179
|
+
trialPending = false;
|
|
180
|
+
/** #1216: requests waiting on the host, abandoned when the breaker opens. */
|
|
181
|
+
inFlight = new Set();
|
|
148
182
|
constructor(options) {
|
|
149
183
|
this.opts = {
|
|
150
184
|
endpoint: options.endpoint,
|
|
@@ -177,6 +211,35 @@ export class EmbedderEndpointClient {
|
|
|
177
211
|
// On breaker recovery, drop identity so the next embed() re-probes.
|
|
178
212
|
// Endpoint restarts (the common cause of recovery) often change models.
|
|
179
213
|
this.cachedIdentity = null;
|
|
214
|
+
this.trialPending = true;
|
|
215
|
+
}, () => this.abandonInFlight());
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* #1216: the breaker opened, so the host is treated as down. Requests that
|
|
219
|
+
* are still waiting on it fail now rather than each waiting out its own
|
|
220
|
+
* timeout.
|
|
221
|
+
*/
|
|
222
|
+
abandonInFlight() {
|
|
223
|
+
if (this.inFlight.size === 0)
|
|
224
|
+
return;
|
|
225
|
+
const err = new Error(`[EmbedderEndpointClient] circuit breaker opened for ${this.parsed.safeUrl} — request abandoned`);
|
|
226
|
+
for (const reject of [...this.inFlight])
|
|
227
|
+
reject(err);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* #1216: true while the endpoint is not known to work: the breaker is open,
|
|
231
|
+
* or its window elapsed and the trial probe has not succeeded yet.
|
|
232
|
+
*/
|
|
233
|
+
needsTrial() {
|
|
234
|
+
return this.breaker.isOpen() || this.trialPending;
|
|
235
|
+
}
|
|
236
|
+
/** Start the half-open trial probe in the background (one at a time). */
|
|
237
|
+
startTrialProbe() {
|
|
238
|
+
if (this.probeInFlight)
|
|
239
|
+
return;
|
|
240
|
+
this.probe().catch(() => {
|
|
241
|
+
// Still failing: keep fast-failing for another full window.
|
|
242
|
+
this.breaker.trip();
|
|
180
243
|
});
|
|
181
244
|
}
|
|
182
245
|
/** Public, redacted endpoint URL for logs/metrics. */
|
|
@@ -201,6 +264,14 @@ export class EmbedderEndpointClient {
|
|
|
201
264
|
}
|
|
202
265
|
// Identity gate: every embed call must have a verified identity behind it.
|
|
203
266
|
if (this.cachedIdentity === null) {
|
|
267
|
+
if (this.trialPending) {
|
|
268
|
+
// #1216: half-open. The endpoint failed until a window ago and may
|
|
269
|
+
// still not answer. Probe it in the background as the single trial
|
|
270
|
+
// and fail fast here; callers after a successful trial embed again.
|
|
271
|
+
this.startTrialProbe();
|
|
272
|
+
throw new Error(`[EmbedderEndpointClient] circuit breaker half-open for ${this.parsed.safeUrl} — ` +
|
|
273
|
+
`trial probe running, fast-failing`);
|
|
274
|
+
}
|
|
204
275
|
await this.ensureProbed();
|
|
205
276
|
}
|
|
206
277
|
try {
|
|
@@ -210,7 +281,7 @@ export class EmbedderEndpointClient {
|
|
|
210
281
|
return vectors;
|
|
211
282
|
}
|
|
212
283
|
catch (err) {
|
|
213
|
-
this.breaker.recordFailure();
|
|
284
|
+
this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
|
|
214
285
|
throw err;
|
|
215
286
|
}
|
|
216
287
|
}
|
|
@@ -242,7 +313,7 @@ export class EmbedderEndpointClient {
|
|
|
242
313
|
this.breaker.recordSuccess();
|
|
243
314
|
}
|
|
244
315
|
catch (err) {
|
|
245
|
-
this.breaker.recordFailure();
|
|
316
|
+
this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
|
|
246
317
|
throw err;
|
|
247
318
|
}
|
|
248
319
|
if (!vec || vec.length !== this.opts.expectedDim) {
|
|
@@ -262,6 +333,7 @@ export class EmbedderEndpointClient {
|
|
|
262
333
|
fingerprint,
|
|
263
334
|
endpoint: this.parsed.safeUrl,
|
|
264
335
|
};
|
|
336
|
+
this.trialPending = false;
|
|
265
337
|
return this.cachedIdentity;
|
|
266
338
|
}
|
|
267
339
|
getCachedIdentity() {
|
|
@@ -374,18 +446,30 @@ export class EmbedderEndpointClient {
|
|
|
374
446
|
const requestTimeoutMs = this.opts.requestTimeoutMs;
|
|
375
447
|
return new Promise((resolve, reject) => {
|
|
376
448
|
let settled = false;
|
|
449
|
+
// #1285: removes this request's listeners from its socket. Keep-alive
|
|
450
|
+
// sockets serve many requests; listeners left behind pile up and a
|
|
451
|
+
// finished request's timeout handler would fire for a later request.
|
|
452
|
+
let detachFromSocket = () => { };
|
|
377
453
|
const safeResolve = (val) => {
|
|
378
454
|
if (settled)
|
|
379
455
|
return;
|
|
380
456
|
settled = true;
|
|
457
|
+
detachFromSocket();
|
|
458
|
+
this.inFlight.delete(abandon);
|
|
381
459
|
resolve(val);
|
|
382
460
|
};
|
|
383
461
|
const safeReject = (err) => {
|
|
384
462
|
if (settled)
|
|
385
463
|
return;
|
|
386
464
|
settled = true;
|
|
465
|
+
detachFromSocket();
|
|
466
|
+
this.inFlight.delete(abandon);
|
|
387
467
|
reject(err);
|
|
388
468
|
};
|
|
469
|
+
const abandon = (err) => {
|
|
470
|
+
safeReject(err);
|
|
471
|
+
req.destroy(err);
|
|
472
|
+
};
|
|
389
473
|
const req = requestFn(reqOptions, (res) => {
|
|
390
474
|
const chunks = [];
|
|
391
475
|
res.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
@@ -426,18 +510,27 @@ export class EmbedderEndpointClient {
|
|
|
426
510
|
else {
|
|
427
511
|
onConnect();
|
|
428
512
|
}
|
|
429
|
-
|
|
513
|
+
const onTimeout = () => {
|
|
430
514
|
// Distinguish phase for the error message.
|
|
431
515
|
const phase = socket.connecting ? 'connect' : 'request';
|
|
432
516
|
const limit = socket.connecting ? connectTimeoutMs : requestTimeoutMs;
|
|
433
|
-
const err = new
|
|
517
|
+
const err = new EmbedderEndpointTimeoutError(phase, limit);
|
|
434
518
|
// Reject FIRST, then destroy. If we destroy first, the 'error' event
|
|
435
519
|
// races us and we might lose the timeout-specific message.
|
|
436
520
|
safeReject(err);
|
|
437
521
|
req.destroy(err);
|
|
438
|
-
}
|
|
522
|
+
};
|
|
523
|
+
socket.on('timeout', onTimeout);
|
|
524
|
+
detachFromSocket = () => {
|
|
525
|
+
socket.removeListener('timeout', onTimeout);
|
|
526
|
+
socket.removeListener('connect', onConnect);
|
|
527
|
+
};
|
|
528
|
+
// Settled before the socket was assigned: nothing of ours may stay on it.
|
|
529
|
+
if (settled)
|
|
530
|
+
detachFromSocket();
|
|
439
531
|
});
|
|
440
532
|
req.on('error', (err) => safeReject(err));
|
|
533
|
+
this.inFlight.add(abandon);
|
|
441
534
|
req.write(body);
|
|
442
535
|
req.end();
|
|
443
536
|
});
|
|
@@ -57,6 +57,18 @@ export declare const EMBEDDING_RUNTIME_UNAVAILABLE_CAUSE: string;
|
|
|
57
57
|
export declare function reportEmbeddingRuntimeUnavailable(): void;
|
|
58
58
|
/** @internal test-only seam */
|
|
59
59
|
export declare function __resetEmbeddingRuntimeNoticeForTests(): void;
|
|
60
|
+
/**
|
|
61
|
+
* #1217: record the embedding space of a vector stored on a
|
|
62
|
+
* captured_experiences row. ExperienceReplay compares only vectors of the
|
|
63
|
+
* active space. On a table without the column (it is added by
|
|
64
|
+
* ExperienceReplay's schema) the vector stays without provenance: it is never
|
|
65
|
+
* compared, and ExperienceReplay re-embeds it at its next start.
|
|
66
|
+
*/
|
|
67
|
+
export declare function recordExperienceEmbeddingSpace(db: {
|
|
68
|
+
prepare(sql: string): {
|
|
69
|
+
run(...params: unknown[]): unknown;
|
|
70
|
+
};
|
|
71
|
+
}, experienceId: string, spaceId: string | undefined): void;
|
|
60
72
|
/** Sidecar path used to bind a persistent ANN index to one embedding space. */
|
|
61
73
|
export declare function embeddingSpaceManifestPath(indexPath: string): string;
|
|
62
74
|
/**
|
|
@@ -120,6 +120,23 @@ export function reportEmbeddingRuntimeUnavailable() {
|
|
|
120
120
|
export function __resetEmbeddingRuntimeNoticeForTests() {
|
|
121
121
|
embeddingRuntimeNoticeShown = false;
|
|
122
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* #1217: record the embedding space of a vector stored on a
|
|
125
|
+
* captured_experiences row. ExperienceReplay compares only vectors of the
|
|
126
|
+
* active space. On a table without the column (it is added by
|
|
127
|
+
* ExperienceReplay's schema) the vector stays without provenance: it is never
|
|
128
|
+
* compared, and ExperienceReplay re-embeds it at its next start.
|
|
129
|
+
*/
|
|
130
|
+
export function recordExperienceEmbeddingSpace(db, experienceId, spaceId) {
|
|
131
|
+
if (!spaceId)
|
|
132
|
+
return;
|
|
133
|
+
try {
|
|
134
|
+
db.prepare('UPDATE captured_experiences SET embedding_space_id = ? WHERE id = ?').run(spaceId, experienceId);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Older table without the column; see above.
|
|
138
|
+
}
|
|
139
|
+
}
|
|
123
140
|
/** Sidecar path used to bind a persistent ANN index to one embedding space. */
|
|
124
141
|
export function embeddingSpaceManifestPath(indexPath) {
|
|
125
142
|
return `${indexPath}.space.json`;
|
|
@@ -16,6 +16,7 @@ import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
|
16
16
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
17
17
|
import { createLogger } from '../logging/logger-factory.js';
|
|
18
18
|
import { isLearnableResult } from './learnable-result.js';
|
|
19
|
+
import { recordExperienceEmbeddingSpace } from './embedding-space.js';
|
|
19
20
|
const ecLogger = createLogger('ExperienceCapture');
|
|
20
21
|
// ============================================================================
|
|
21
22
|
// Active Experience Tracking
|
|
@@ -308,8 +309,9 @@ async function persistExperience(context, outcome) {
|
|
|
308
309
|
console.warn('[ExperienceCaptureMiddleware] Memory manager not available');
|
|
309
310
|
return;
|
|
310
311
|
}
|
|
312
|
+
const memory = memoryManager;
|
|
311
313
|
try {
|
|
312
|
-
const db =
|
|
314
|
+
const db = memory.getDatabase();
|
|
313
315
|
if (!db)
|
|
314
316
|
return;
|
|
315
317
|
const stmt = db.prepare(`
|
|
@@ -318,9 +320,11 @@ async function persistExperience(context, outcome) {
|
|
|
318
320
|
routing_json, steps_json, result_json, error, started_at, completed_at, source)
|
|
319
321
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?)
|
|
320
322
|
`);
|
|
321
|
-
|
|
323
|
+
// #1274: queued, so a locked memory.db does not freeze the MCP server's
|
|
324
|
+
// event loop while experiences are captured.
|
|
325
|
+
await memory.writeWhenUnlocked(() => stmt.run(outcome.id, context.task, context.agent, context.domain, outcome.success ? 1 : 0, outcome.quality, outcome.durationMs, context.modelTier || null, safeJsonStringify(context.routing), safeJsonStringify(outcome.steps), safeJsonStringify(outcome.result), outcome.error || null, context.startedAt.toISOString(), 'middleware'));
|
|
322
326
|
// Fire-and-forget: compute and store embedding for this experience
|
|
323
|
-
computeExperienceEmbedding(
|
|
327
|
+
computeExperienceEmbedding(memory, outcome.id, context.task, context.domain).catch((e) => { ecLogger.warn('Embedding computation failed', { error: e instanceof Error ? e.message : String(e), experienceId: outcome.id, domain: context.domain }); });
|
|
324
328
|
}
|
|
325
329
|
catch (error) {
|
|
326
330
|
console.error('[ExperienceCaptureMiddleware] Failed to persist experience:', error);
|
|
@@ -330,19 +334,26 @@ async function persistExperience(context, outcome) {
|
|
|
330
334
|
* Compute and store embedding for a captured experience (async, non-blocking).
|
|
331
335
|
* Uses the shared ONNX transformer model (all-MiniLM-L6-v2, 384-dim).
|
|
332
336
|
*/
|
|
333
|
-
async function computeExperienceEmbedding(
|
|
337
|
+
async function computeExperienceEmbedding(memory, experienceId, task, domain) {
|
|
334
338
|
try {
|
|
335
|
-
const { computeRealEmbedding } = await import('./real-embeddings.js');
|
|
339
|
+
const { computeRealEmbedding, getActiveEmbeddingSpaceIdentity } = await import('./real-embeddings.js');
|
|
336
340
|
const text = `${domain}: ${task}`.slice(0, 512); // Cap input length
|
|
337
341
|
const embedding = await computeRealEmbedding(text);
|
|
338
342
|
if (!embedding || embedding.length === 0)
|
|
339
343
|
return;
|
|
340
344
|
const buffer = Buffer.from(new Float32Array(embedding).buffer);
|
|
341
|
-
db.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
345
|
+
const db = memory.getDatabase();
|
|
346
|
+
await memory.writeWhenUnlocked(() => {
|
|
347
|
+
const updated = db.prepare(`
|
|
348
|
+
UPDATE captured_experiences
|
|
349
|
+
SET embedding = ?, embedding_dimension = ?
|
|
350
|
+
WHERE id = ? AND embedding IS NULL
|
|
351
|
+
`).run(buffer, embedding.length, experienceId);
|
|
352
|
+
// #1217 (ADR-097): store the vector's embedding space with it.
|
|
353
|
+
if (updated.changes > 0) {
|
|
354
|
+
recordExperienceEmbeddingSpace(db, experienceId, getActiveEmbeddingSpaceIdentity()?.spaceId);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
346
357
|
}
|
|
347
358
|
catch {
|
|
348
359
|
// Non-critical — embedding will be backfilled later if needed
|
|
@@ -354,8 +365,9 @@ async function computeExperienceEmbedding(db, experienceId, task, domain) {
|
|
|
354
365
|
async function persistToSonaPatterns(context, outcome) {
|
|
355
366
|
if (!memoryManager)
|
|
356
367
|
return;
|
|
368
|
+
const memory = memoryManager;
|
|
357
369
|
try {
|
|
358
|
-
const db =
|
|
370
|
+
const db = memory.getDatabase();
|
|
359
371
|
if (!db)
|
|
360
372
|
return;
|
|
361
373
|
// Only store successful patterns with decent quality
|
|
@@ -368,12 +380,12 @@ async function persistToSonaPatterns(context, outcome) {
|
|
|
368
380
|
confidence, usage_count, metadata, created_at, updated_at)
|
|
369
381
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
|
|
370
382
|
`);
|
|
371
|
-
stmt.run(`sona-${outcome.id}`, 'task-execution', context.domain, context.agent, safeJsonStringify({ task: context.task.slice(0, 200) }), outcome.quality, 1, outcome.quality, outcome.quality, 1, safeJsonStringify({
|
|
383
|
+
await memory.writeWhenUnlocked(() => stmt.run(`sona-${outcome.id}`, 'task-execution', context.domain, context.agent, safeJsonStringify({ task: context.task.slice(0, 200) }), outcome.quality, 1, outcome.quality, outcome.quality, 1, safeJsonStringify({
|
|
372
384
|
experienceId: outcome.id,
|
|
373
385
|
durationMs: outcome.durationMs,
|
|
374
386
|
stepsCount: outcome.steps.length,
|
|
375
387
|
modelTier: context.modelTier,
|
|
376
|
-
}));
|
|
388
|
+
})));
|
|
377
389
|
}
|
|
378
390
|
catch (error) {
|
|
379
391
|
// Log but don't fail - sona_patterns might not exist
|
|
@@ -234,7 +234,7 @@ export class ExperienceCaptureService {
|
|
|
234
234
|
const contextFingerprint = `${experience.domain ?? 'unknown'}:${experience.agent ?? 'unknown'}`;
|
|
235
235
|
for (const patternId of experience.appliedPatterns) {
|
|
236
236
|
try {
|
|
237
|
-
this.nullRecorder({
|
|
237
|
+
await this.nullRecorder({
|
|
238
238
|
patternId,
|
|
239
239
|
contextFingerprint,
|
|
240
240
|
failureMode: experience.testOutcome ?? experience.feedback ?? 'task-failure',
|
|
@@ -70,6 +70,11 @@ export interface ConsolidationConfig {
|
|
|
70
70
|
contradictionSimilarityThreshold: number;
|
|
71
71
|
/** Min quality gap that turns a near-duplicate into a contradiction (0-1). */
|
|
72
72
|
contradictionQualityDelta: number;
|
|
73
|
+
/**
|
|
74
|
+
* #1281: embedding space (ADR-097 spaceId) whose vectors Phase 1 compares.
|
|
75
|
+
* Defaults to the active embedder's space.
|
|
76
|
+
*/
|
|
77
|
+
embeddingSpaceId?: string;
|
|
73
78
|
}
|
|
74
79
|
export declare class ExperienceConsolidator {
|
|
75
80
|
private readonly config;
|
|
@@ -94,9 +99,22 @@ export declare class ExperienceConsolidator {
|
|
|
94
99
|
bootstrapDomain(domain: string): Promise<ConsolidationResult>;
|
|
95
100
|
private clusterAndMerge;
|
|
96
101
|
private reinforceQuality;
|
|
102
|
+
private reinforceQualityNow;
|
|
97
103
|
private archiveValueless;
|
|
104
|
+
private archiveValuelessNow;
|
|
98
105
|
private hardDeleteExcess;
|
|
106
|
+
private hardDeleteExcessNow;
|
|
107
|
+
/** #1281: the embedding space Phase 1 compares vectors in, or null if unknown. */
|
|
108
|
+
private resolveEmbeddingSpaceId;
|
|
109
|
+
/** Tables created before #1217 have no embedding_space_id column. */
|
|
110
|
+
private hasEmbeddingSpaceColumn;
|
|
99
111
|
private ensureInitialized;
|
|
112
|
+
/**
|
|
113
|
+
* Queue a write on the shared connection (#1283): the learning worker runs
|
|
114
|
+
* consolidation inside the MCP server, where a locked memory.db must not
|
|
115
|
+
* freeze the event loop. On any other connection the write runs at once.
|
|
116
|
+
*/
|
|
117
|
+
private write;
|
|
100
118
|
private bufferToFloatArray;
|
|
101
119
|
}
|
|
102
120
|
/**
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* Ensures the Exp counter is monotonically non-decreasing.
|
|
16
16
|
*/
|
|
17
17
|
import { v4 as uuidv4 } from 'uuid';
|
|
18
|
-
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
18
|
+
import { getUnifiedMemory, writeWhenUnlockedOn } from '../kernel/unified-memory.js';
|
|
19
|
+
import { ensureEndpointEmbeddingSpaceIdentity, getActiveEmbeddingSpaceIdentity } from './real-embeddings.js';
|
|
19
20
|
import { HNSWEmbeddingIndex } from '../integrations/embeddings/index/HNSWIndex.js';
|
|
20
21
|
const DEFAULT_CONFIG = {
|
|
21
22
|
mergeSimilarityThreshold: 0.85,
|
|
@@ -111,9 +112,9 @@ export class ExperienceConsolidator {
|
|
|
111
112
|
result.merged = clusterResult.merged;
|
|
112
113
|
result.contradicted = clusterResult.contradicted;
|
|
113
114
|
// Phase 2: Quality Reinforcement
|
|
114
|
-
result.qualityUpdated = this.reinforceQuality(domain);
|
|
115
|
+
result.qualityUpdated = await this.reinforceQuality(domain);
|
|
115
116
|
// Phase 3: Archive Valueless
|
|
116
|
-
result.archived = this.archiveValueless(domain);
|
|
117
|
+
result.archived = await this.archiveValueless(domain);
|
|
117
118
|
// Safety valve: when the domain still exceeds hardThreshold after the
|
|
118
119
|
// soft phases, archive (not delete) the oldest low-quality excess.
|
|
119
120
|
// Result is attributed to `archived` — `hardDeleted` stays 0 since
|
|
@@ -121,7 +122,7 @@ export class ExperienceConsolidator {
|
|
|
121
122
|
const afterCount = this.db.prepare("SELECT COUNT(*) as cnt FROM captured_experiences WHERE domain = ? AND consolidated_into IS NULL").get(domain).cnt;
|
|
122
123
|
let safetyValveArchived = 0;
|
|
123
124
|
if (afterCount > this.config.hardThreshold) {
|
|
124
|
-
safetyValveArchived = this.hardDeleteExcess(domain, afterCount);
|
|
125
|
+
safetyValveArchived = await this.hardDeleteExcess(domain, afterCount);
|
|
125
126
|
result.archived += safetyValveArchived;
|
|
126
127
|
}
|
|
127
128
|
result.activeRemaining = afterCount - safetyValveArchived;
|
|
@@ -150,7 +151,8 @@ export class ExperienceConsolidator {
|
|
|
150
151
|
Object.assign(this.config, savedConfig);
|
|
151
152
|
// Set bootstrap flag
|
|
152
153
|
try {
|
|
153
|
-
|
|
154
|
+
const bootstrappedAt = new Date().toISOString();
|
|
155
|
+
await this.write(() => this.db.prepare("INSERT OR REPLACE INTO kv_store (key, value, namespace) VALUES (?, ?, 'system')").run(`consolidation_bootstrap_${domain}`, bootstrappedAt));
|
|
154
156
|
}
|
|
155
157
|
catch {
|
|
156
158
|
// kv_store may not exist in all setups
|
|
@@ -163,6 +165,12 @@ export class ExperienceConsolidator {
|
|
|
163
165
|
// Phase 1: Cluster & Merge
|
|
164
166
|
// ============================================================================
|
|
165
167
|
async clusterAndMerge(domain) {
|
|
168
|
+
// #1281 (ADR-097): a cosine between vectors of different embedding spaces
|
|
169
|
+
// is meaningless, even at the same dimension. Only vectors recorded in the
|
|
170
|
+
// active space are compared; without a known space nothing is merged.
|
|
171
|
+
const spaceId = await this.resolveEmbeddingSpaceId();
|
|
172
|
+
if (!spaceId || !this.hasEmbeddingSpaceColumn())
|
|
173
|
+
return { merged: 0, contradicted: 0 };
|
|
166
174
|
// Get active experiences with embeddings, sorted by quality DESC
|
|
167
175
|
const candidates = this.db.prepare(`
|
|
168
176
|
SELECT id, task, domain, quality, success, application_count,
|
|
@@ -170,8 +178,9 @@ export class ExperienceConsolidator {
|
|
|
170
178
|
embedding, embedding_dimension, started_at
|
|
171
179
|
FROM captured_experiences
|
|
172
180
|
WHERE domain = ? AND consolidated_into IS NULL AND embedding IS NOT NULL
|
|
181
|
+
AND embedding_space_id = ?
|
|
173
182
|
ORDER BY quality DESC
|
|
174
|
-
`).all(domain);
|
|
183
|
+
`).all(domain, spaceId);
|
|
175
184
|
if (candidates.length < 2)
|
|
176
185
|
return { merged: 0, contradicted: 0 };
|
|
177
186
|
// Build a temporary HNSW index for this domain
|
|
@@ -293,7 +302,7 @@ export class ExperienceConsolidator {
|
|
|
293
302
|
boostSurvivor.run(mergedIds.length, boost, row.id);
|
|
294
303
|
logConsolidation.run(uuidv4(), domain, 'merge', JSON.stringify(mergedIds), row.id, JSON.stringify({ count: mergedIds.length, boost }));
|
|
295
304
|
});
|
|
296
|
-
transaction
|
|
305
|
+
await writeWhenUnlockedOn(this.db, transaction);
|
|
297
306
|
}
|
|
298
307
|
// Apply contradiction suppressions in a transaction. The loser is
|
|
299
308
|
// soft-suppressed (consolidated_into = 'contradicted'), so it is excluded
|
|
@@ -306,7 +315,7 @@ export class ExperienceConsolidator {
|
|
|
306
315
|
}
|
|
307
316
|
logConsolidation.run(uuidv4(), domain, 'contradiction', JSON.stringify(contradictedIds), row.id, JSON.stringify({ count: contradictedIds.length, survivorQuality: row.quality }));
|
|
308
317
|
});
|
|
309
|
-
tx
|
|
318
|
+
await writeWhenUnlockedOn(this.db, tx);
|
|
310
319
|
}
|
|
311
320
|
}
|
|
312
321
|
// Clean up HNSW index
|
|
@@ -317,6 +326,10 @@ export class ExperienceConsolidator {
|
|
|
317
326
|
// Phase 2: Quality Reinforcement
|
|
318
327
|
// ============================================================================
|
|
319
328
|
reinforceQuality(domain) {
|
|
329
|
+
// Read and update in one queued unit, so the update uses current values.
|
|
330
|
+
return this.write(() => this.reinforceQualityNow(domain));
|
|
331
|
+
}
|
|
332
|
+
reinforceQualityNow(domain) {
|
|
320
333
|
// Get experiences with application history
|
|
321
334
|
const experiences = this.db.prepare(`
|
|
322
335
|
SELECT ce.id, ce.quality, ce.consolidation_count,
|
|
@@ -366,6 +379,9 @@ export class ExperienceConsolidator {
|
|
|
366
379
|
// Phase 3: Archive Valueless
|
|
367
380
|
// ============================================================================
|
|
368
381
|
archiveValueless(domain) {
|
|
382
|
+
return this.write(() => this.archiveValuelessNow(domain));
|
|
383
|
+
}
|
|
384
|
+
archiveValuelessNow(domain) {
|
|
369
385
|
const cutoffDate = new Date();
|
|
370
386
|
cutoffDate.setDate(cutoffDate.getDate() - this.config.archiveMinAgeDays);
|
|
371
387
|
const cutoffStr = cutoffDate.toISOString().replace('T', ' ').slice(0, 19);
|
|
@@ -415,6 +431,9 @@ export class ExperienceConsolidator {
|
|
|
415
431
|
// ConsolidationResult.hardDeleted is kept zero for that reason; the
|
|
416
432
|
// archive count is rolled into Phase 3's `archived` total.
|
|
417
433
|
hardDeleteExcess(domain, currentCount) {
|
|
434
|
+
return this.write(() => this.hardDeleteExcessNow(domain, currentCount));
|
|
435
|
+
}
|
|
436
|
+
hardDeleteExcessNow(domain, currentCount) {
|
|
418
437
|
const excess = currentCount - this.config.hardThreshold;
|
|
419
438
|
if (excess <= 0)
|
|
420
439
|
return 0;
|
|
@@ -455,11 +474,39 @@ export class ExperienceConsolidator {
|
|
|
455
474
|
// ============================================================================
|
|
456
475
|
// Utilities
|
|
457
476
|
// ============================================================================
|
|
477
|
+
/** #1281: the embedding space Phase 1 compares vectors in, or null if unknown. */
|
|
478
|
+
async resolveEmbeddingSpaceId() {
|
|
479
|
+
if (this.config.embeddingSpaceId)
|
|
480
|
+
return this.config.embeddingSpaceId;
|
|
481
|
+
const active = getActiveEmbeddingSpaceIdentity()?.spaceId;
|
|
482
|
+
if (active)
|
|
483
|
+
return active;
|
|
484
|
+
try {
|
|
485
|
+
// A configured endpoint's identity, as the pattern stores resolve it (#754).
|
|
486
|
+
return (await ensureEndpointEmbeddingSpaceIdentity())?.spaceId ?? null;
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/** Tables created before #1217 have no embedding_space_id column. */
|
|
493
|
+
hasEmbeddingSpaceColumn() {
|
|
494
|
+
const columns = this.db.prepare('PRAGMA table_info(captured_experiences)').all();
|
|
495
|
+
return columns.some(c => c.name === 'embedding_space_id');
|
|
496
|
+
}
|
|
458
497
|
ensureInitialized() {
|
|
459
498
|
if (!this.initialized || !this.db) {
|
|
460
499
|
throw new Error('ExperienceConsolidator not initialized. Call initialize() first.');
|
|
461
500
|
}
|
|
462
501
|
}
|
|
502
|
+
/**
|
|
503
|
+
* Queue a write on the shared connection (#1283): the learning worker runs
|
|
504
|
+
* consolidation inside the MCP server, where a locked memory.db must not
|
|
505
|
+
* freeze the event loop. On any other connection the write runs at once.
|
|
506
|
+
*/
|
|
507
|
+
write(fn) {
|
|
508
|
+
return writeWhenUnlockedOn(this.db, fn);
|
|
509
|
+
}
|
|
463
510
|
bufferToFloatArray(buffer, dimension) {
|
|
464
511
|
const arr = [];
|
|
465
512
|
for (let i = 0; i < dimension; i++) {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute legacy experience vectors to an embedding space (#1217)
|
|
3
|
+
*
|
|
4
|
+
* captured_experiences rows written before #1217 carry a vector but no
|
|
5
|
+
* embedding_space_id, so ExperienceReplay never compares them. Their vectors
|
|
6
|
+
* are learning data and are never overwritten here. Instead each row's text is
|
|
7
|
+
* re-embedded with the recipe its writer used; when the result matches the
|
|
8
|
+
* stored vector (cosine >= EMBEDDING_ROUND_TRIP_MIN_COSINE), the stored vector
|
|
9
|
+
* came from the active space and only embedding_space_id is set. A row that
|
|
10
|
+
* does not match (another space, or text that can no longer be rebuilt) is
|
|
11
|
+
* left as it is: it stays excluded from comparison.
|
|
12
|
+
*
|
|
13
|
+
* Progress is kept per space in kv_store, so rows that did not match are not
|
|
14
|
+
* re-checked on every start; a different active space starts over.
|
|
15
|
+
*/
|
|
16
|
+
interface VerifiableDatabase {
|
|
17
|
+
prepare(sql: string): {
|
|
18
|
+
all(...params: unknown[]): unknown[];
|
|
19
|
+
get(...params: unknown[]): unknown;
|
|
20
|
+
run(...params: unknown[]): {
|
|
21
|
+
changes: number;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface LegacyExperienceRow {
|
|
26
|
+
rowid: number;
|
|
27
|
+
id: string;
|
|
28
|
+
task: string;
|
|
29
|
+
agent: string | null;
|
|
30
|
+
domain: string | null;
|
|
31
|
+
steps_json: string | null;
|
|
32
|
+
source: string | null;
|
|
33
|
+
embedding: Buffer;
|
|
34
|
+
embedding_dimension: number;
|
|
35
|
+
}
|
|
36
|
+
export interface ExperienceSpaceVerificationOptions {
|
|
37
|
+
/** Embed text in the active space; throws when the embedder fails. */
|
|
38
|
+
embed: (text: string) => Promise<number[]>;
|
|
39
|
+
/** The active embedding space, read after embedding. */
|
|
40
|
+
activeSpaceId: () => string | undefined;
|
|
41
|
+
/** Rows to check in this pass. */
|
|
42
|
+
limit?: number;
|
|
43
|
+
/** Runs a write (e.g. UnifiedMemoryManager.writeWhenUnlocked). */
|
|
44
|
+
write?: <T>(fn: () => T) => Promise<T> | T;
|
|
45
|
+
}
|
|
46
|
+
export interface ExperienceSpaceVerificationResult {
|
|
47
|
+
spaceId: string | null;
|
|
48
|
+
checked: number;
|
|
49
|
+
stamped: string[];
|
|
50
|
+
left: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The texts the row's writer may have embedded. Each is only a candidate:
|
|
54
|
+
* a row is attributed only when one reproduces its stored vector.
|
|
55
|
+
* - experience-capture middleware and the CLI hooks: `${domain}: ${task}`,
|
|
56
|
+
* capped at 512 chars (the hooks store task capped at 500, so a longer
|
|
57
|
+
* task cannot be rebuilt and will not match);
|
|
58
|
+
* - ExperienceReplay's start-up backfill: the same, scrubbed (ADR-099);
|
|
59
|
+
* - ExperienceReplay.storeExperience (source 'experience-replay'):
|
|
60
|
+
* `${task} ${strategy} ${keyActions}`, strategy in `agent`, key actions
|
|
61
|
+
* in steps_json.
|
|
62
|
+
*/
|
|
63
|
+
export declare function legacyExperienceEmbeddingTexts(row: LegacyExperienceRow): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Check up to `limit` legacy rows (vector, no embedding_space_id) and set
|
|
66
|
+
* embedding_space_id on those whose stored vector the active embedder
|
|
67
|
+
* reproduces. Never writes a vector. Stops at the first embedder failure.
|
|
68
|
+
*/
|
|
69
|
+
export declare function verifyLegacyExperienceSpaces(db: VerifiableDatabase, options: ExperienceSpaceVerificationOptions): Promise<ExperienceSpaceVerificationResult>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=experience-space-verification.d.ts.map
|