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
|
@@ -0,0 +1,147 @@
|
|
|
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
|
+
import { cosineSimilarity } from '../shared/utils/vector-math.js';
|
|
17
|
+
import { safeJsonParse } from '../shared/safe-json.js';
|
|
18
|
+
import { scrubReasoningBlocks } from '../shared/reasoning-scrub.js';
|
|
19
|
+
import { EMBEDDING_ROUND_TRIP_MIN_COSINE } from './embedding-space.js';
|
|
20
|
+
const CURSOR_NAMESPACE = '_system';
|
|
21
|
+
const cursorKey = (spaceId) => `experience-space-verified-rowid:${spaceId}`;
|
|
22
|
+
/**
|
|
23
|
+
* The texts the row's writer may have embedded. Each is only a candidate:
|
|
24
|
+
* a row is attributed only when one reproduces its stored vector.
|
|
25
|
+
* - experience-capture middleware and the CLI hooks: `${domain}: ${task}`,
|
|
26
|
+
* capped at 512 chars (the hooks store task capped at 500, so a longer
|
|
27
|
+
* task cannot be rebuilt and will not match);
|
|
28
|
+
* - ExperienceReplay's start-up backfill: the same, scrubbed (ADR-099);
|
|
29
|
+
* - ExperienceReplay.storeExperience (source 'experience-replay'):
|
|
30
|
+
* `${task} ${strategy} ${keyActions}`, strategy in `agent`, key actions
|
|
31
|
+
* in steps_json.
|
|
32
|
+
*/
|
|
33
|
+
export function legacyExperienceEmbeddingTexts(row) {
|
|
34
|
+
const domainTask = `${row.domain ?? ''}: ${row.task}`;
|
|
35
|
+
const texts = new Set([
|
|
36
|
+
domainTask.slice(0, 512),
|
|
37
|
+
scrubReasoningBlocks(domainTask).slice(0, 512),
|
|
38
|
+
]);
|
|
39
|
+
if (row.source === 'experience-replay') {
|
|
40
|
+
const keyActions = safeJsonParse(row.steps_json || '[]');
|
|
41
|
+
if (Array.isArray(keyActions)) {
|
|
42
|
+
texts.add(`${row.task} ${row.agent ?? ''} ${keyActions.join(' ')}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return [...texts];
|
|
46
|
+
}
|
|
47
|
+
function storedVector(row) {
|
|
48
|
+
if (row.embedding.length < row.embedding_dimension * 4)
|
|
49
|
+
return null;
|
|
50
|
+
const v = [];
|
|
51
|
+
for (let i = 0; i < row.embedding_dimension; i++)
|
|
52
|
+
v.push(row.embedding.readFloatLE(i * 4));
|
|
53
|
+
return v;
|
|
54
|
+
}
|
|
55
|
+
function readCursor(db, spaceId) {
|
|
56
|
+
try {
|
|
57
|
+
const row = db.prepare('SELECT value FROM kv_store WHERE namespace = ? AND key = ?')
|
|
58
|
+
.get(CURSOR_NAMESPACE, cursorKey(spaceId));
|
|
59
|
+
return row ? Number(row.value) || 0 : 0;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return 0; // no kv_store: check from the start
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function writeCursor(db, spaceId, rowid) {
|
|
66
|
+
try {
|
|
67
|
+
db.prepare('INSERT OR REPLACE INTO kv_store (key, namespace, value) VALUES (?, ?, ?)')
|
|
68
|
+
.run(cursorKey(spaceId), CURSOR_NAMESPACE, String(rowid));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Without kv_store the next start checks these rows again.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check up to `limit` legacy rows (vector, no embedding_space_id) and set
|
|
76
|
+
* embedding_space_id on those whose stored vector the active embedder
|
|
77
|
+
* reproduces. Never writes a vector. Stops at the first embedder failure.
|
|
78
|
+
*/
|
|
79
|
+
export async function verifyLegacyExperienceSpaces(db, options) {
|
|
80
|
+
const write = options.write ?? ((fn) => fn());
|
|
81
|
+
const result = { spaceId: null, checked: 0, stamped: [], left: 0 };
|
|
82
|
+
// The cursor is per space, so the space must be known first: embedding
|
|
83
|
+
// anything initializes the embedder if needed.
|
|
84
|
+
let spaceId = options.activeSpaceId();
|
|
85
|
+
const rowsAfter = (cursor) => db.prepare(`
|
|
86
|
+
SELECT rowid, id, task, agent, domain, steps_json, source, embedding, embedding_dimension
|
|
87
|
+
FROM captured_experiences
|
|
88
|
+
WHERE rowid > ? AND embedding IS NOT NULL AND embedding_space_id IS NULL
|
|
89
|
+
AND embedding_dimension > 0 AND consolidated_into IS NULL
|
|
90
|
+
ORDER BY rowid LIMIT ?
|
|
91
|
+
`).all(cursor, options.limit ?? 200);
|
|
92
|
+
let rows = rowsAfter(spaceId ? readCursor(db, spaceId) : 0);
|
|
93
|
+
if (rows.length === 0)
|
|
94
|
+
return result;
|
|
95
|
+
if (!spaceId) {
|
|
96
|
+
await options.embed(legacyExperienceEmbeddingTexts(rows[0])[0]);
|
|
97
|
+
spaceId = options.activeSpaceId();
|
|
98
|
+
if (!spaceId)
|
|
99
|
+
return result;
|
|
100
|
+
rows = rowsAfter(readCursor(db, spaceId));
|
|
101
|
+
}
|
|
102
|
+
result.spaceId = spaceId;
|
|
103
|
+
const stamp = db.prepare(`
|
|
104
|
+
UPDATE captured_experiences SET embedding_space_id = ?
|
|
105
|
+
WHERE id = ? AND embedding_space_id IS NULL AND embedding = ?
|
|
106
|
+
`);
|
|
107
|
+
let lastRowid = 0;
|
|
108
|
+
try {
|
|
109
|
+
for (const row of rows) {
|
|
110
|
+
const stored = storedVector(row);
|
|
111
|
+
let matched = false;
|
|
112
|
+
if (stored) {
|
|
113
|
+
for (const text of legacyExperienceEmbeddingTexts(row)) {
|
|
114
|
+
const recomputed = await options.embed(text);
|
|
115
|
+
if (options.activeSpaceId() !== spaceId)
|
|
116
|
+
return result; // embedder changed mid-pass
|
|
117
|
+
if (recomputed.length === stored.length
|
|
118
|
+
&& cosineSimilarity(stored, recomputed) >= EMBEDDING_ROUND_TRIP_MIN_COSINE) {
|
|
119
|
+
matched = true;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (matched) {
|
|
125
|
+
// Only the provenance column, and only if the vector is still the one checked.
|
|
126
|
+
const changes = (await write(() => stamp.run(spaceId, row.id, row.embedding))).changes;
|
|
127
|
+
if (changes > 0)
|
|
128
|
+
result.stamped.push(row.id);
|
|
129
|
+
else
|
|
130
|
+
result.left++;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
result.left++;
|
|
134
|
+
}
|
|
135
|
+
result.checked++;
|
|
136
|
+
lastRowid = row.rowid;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
// Rows checked so far are not checked again in this space, even when an
|
|
141
|
+
// embedder failure ends the pass early.
|
|
142
|
+
if (lastRowid > 0)
|
|
143
|
+
await write(() => writeCursor(db, spaceId, lastRowid));
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=experience-space-verification.js.map
|
|
@@ -156,10 +156,6 @@ export declare class PatternLifecycleManager {
|
|
|
156
156
|
private _compressionService;
|
|
157
157
|
set compressionService(svc: TemporalCompressionService | null);
|
|
158
158
|
constructor(db: DatabaseType, config?: Partial<PatternLifecycleConfig>);
|
|
159
|
-
/**
|
|
160
|
-
* Ensure required schema extensions exist
|
|
161
|
-
*/
|
|
162
|
-
private ensureSchema;
|
|
163
159
|
/**
|
|
164
160
|
* Get recent experiences from captured_experiences table.
|
|
165
161
|
*/
|
|
@@ -202,6 +198,9 @@ export declare class PatternLifecycleManager {
|
|
|
202
198
|
* Promote pattern to long-term tier
|
|
203
199
|
*/
|
|
204
200
|
promotePattern(patternId: string): boolean;
|
|
201
|
+
/** Whether `patternId` passes the advisory check and the frozen promote rule. */
|
|
202
|
+
private promotionVerified;
|
|
203
|
+
private writePromotion;
|
|
205
204
|
/**
|
|
206
205
|
* Promote all eligible patterns
|
|
207
206
|
*/
|
|
@@ -209,6 +208,16 @@ export declare class PatternLifecycleManager {
|
|
|
209
208
|
promoted: number;
|
|
210
209
|
checked: number;
|
|
211
210
|
};
|
|
211
|
+
/**
|
|
212
|
+
* promoteEligiblePatterns for the MCP server's background workers (#1283):
|
|
213
|
+
* each promotion is queued on the shared connection, so a locked memory.db
|
|
214
|
+
* does not freeze the event loop. Same selection, rule and result.
|
|
215
|
+
*/
|
|
216
|
+
promoteEligiblePatternsWhenUnlocked(): Promise<{
|
|
217
|
+
promoted: number;
|
|
218
|
+
checked: number;
|
|
219
|
+
}>;
|
|
220
|
+
private selectShortTermPatternIds;
|
|
212
221
|
/**
|
|
213
222
|
* Run a promotion sweep — convenience alias for pre-compaction hook.
|
|
214
223
|
* Iterates short-term patterns, checks promotion criteria, promotes eligible ones.
|
|
@@ -225,6 +234,8 @@ export declare class PatternLifecycleManager {
|
|
|
225
234
|
* Deprecate a pattern (soft delete)
|
|
226
235
|
*/
|
|
227
236
|
deprecatePattern(patternId: string, reason?: string): boolean;
|
|
237
|
+
/** Soft-delete a pattern and record why, in one unit so a queued retry repeats both. */
|
|
238
|
+
private writeDeprecation;
|
|
228
239
|
/**
|
|
229
240
|
* Deprecate all patterns that meet deprecation criteria
|
|
230
241
|
*/
|
|
@@ -232,6 +243,15 @@ export declare class PatternLifecycleManager {
|
|
|
232
243
|
deprecated: number;
|
|
233
244
|
checked: number;
|
|
234
245
|
};
|
|
246
|
+
/**
|
|
247
|
+
* deprecateStalePatterns for the MCP server's background workers (#1283):
|
|
248
|
+
* each deprecation is queued on the shared connection. Same criteria and result.
|
|
249
|
+
*/
|
|
250
|
+
deprecateStalePatternsWhenUnlocked(): Promise<{
|
|
251
|
+
deprecated: number;
|
|
252
|
+
checked: number;
|
|
253
|
+
}>;
|
|
254
|
+
private selectActivePatternIds;
|
|
235
255
|
/**
|
|
236
256
|
* Apply confidence decay to patterns that haven't been used recently
|
|
237
257
|
*/
|
|
@@ -239,6 +259,15 @@ export declare class PatternLifecycleManager {
|
|
|
239
259
|
updated: number;
|
|
240
260
|
decayed: number;
|
|
241
261
|
};
|
|
262
|
+
/**
|
|
263
|
+
* applyConfidenceDecay for the MCP server's background workers (#1283): the
|
|
264
|
+
* decay UPDATE is queued on the shared connection. Same cutoff and result.
|
|
265
|
+
*/
|
|
266
|
+
applyConfidenceDecayWhenUnlocked(daysSinceLastRun?: number): Promise<{
|
|
267
|
+
updated: number;
|
|
268
|
+
decayed: number;
|
|
269
|
+
}>;
|
|
270
|
+
private writeConfidenceDecay;
|
|
242
271
|
/**
|
|
243
272
|
* Record pattern usage success/failure
|
|
244
273
|
*/
|
|
@@ -303,6 +332,13 @@ export declare class PatternLifecycleManager {
|
|
|
303
332
|
*/
|
|
304
333
|
private rowToPattern;
|
|
305
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Create a pattern lifecycle manager for the MCP server's background workers
|
|
337
|
+
* (#1283). A database that predates the lifecycle columns gets its ALTER
|
|
338
|
+
* TABLEs through the shared connection's write queue first, so a locked
|
|
339
|
+
* memory.db does not freeze the event loop on the worker's first tick.
|
|
340
|
+
*/
|
|
341
|
+
export declare function createPatternLifecycleManagerWhenUnlocked(db: DatabaseType, config?: Partial<PatternLifecycleConfig>): Promise<PatternLifecycleManager>;
|
|
306
342
|
/**
|
|
307
343
|
* Create a pattern lifecycle manager
|
|
308
344
|
*/
|
|
@@ -15,6 +15,7 @@ import { tierAllowsPromotion, DEFAULT_PROVENANCE_TIER } from './provenance-tier.
|
|
|
15
15
|
import { reExecutePathGate, pathGateFingerprint, pathSealedHash, verifyPathPromotion, } from '../validation/gate-reexecute.js';
|
|
16
16
|
import { LoggerFactory } from '../logging/index.js';
|
|
17
17
|
import { isTemporalCompressionEnabled } from '../integrations/ruvector/feature-flags.js';
|
|
18
|
+
import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
|
|
18
19
|
const logger = LoggerFactory.create('pattern-lifecycle');
|
|
19
20
|
/**
|
|
20
21
|
* Default lifecycle configuration
|
|
@@ -100,69 +101,7 @@ export class PatternLifecycleManager {
|
|
|
100
101
|
this.db = db;
|
|
101
102
|
this.config = { ...DEFAULT_LIFECYCLE_CONFIG, ...config };
|
|
102
103
|
this.asymmetricEngine = new AsymmetricLearningEngine(this.config.asymmetricLearning);
|
|
103
|
-
this.
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Ensure required schema extensions exist
|
|
107
|
-
*/
|
|
108
|
-
ensureSchema() {
|
|
109
|
-
// Add deprecated_at column if not exists
|
|
110
|
-
try {
|
|
111
|
-
this.db.prepare(`
|
|
112
|
-
SELECT deprecated_at FROM qe_patterns LIMIT 1
|
|
113
|
-
`).get();
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
116
|
-
// Column doesn't exist, add it
|
|
117
|
-
logger.debug('Adding missing deprecated_at column', { error: e instanceof Error ? e.message : String(e) });
|
|
118
|
-
this.db.exec(`
|
|
119
|
-
ALTER TABLE qe_patterns ADD COLUMN deprecated_at TEXT DEFAULT NULL
|
|
120
|
-
`);
|
|
121
|
-
console.log('[PatternLifecycle] Added deprecated_at column to qe_patterns');
|
|
122
|
-
}
|
|
123
|
-
// Add consecutive_failures column if not exists
|
|
124
|
-
try {
|
|
125
|
-
this.db.prepare(`
|
|
126
|
-
SELECT consecutive_failures FROM qe_patterns LIMIT 1
|
|
127
|
-
`).get();
|
|
128
|
-
}
|
|
129
|
-
catch (e) {
|
|
130
|
-
logger.debug('Adding missing consecutive_failures column', { error: e instanceof Error ? e.message : String(e) });
|
|
131
|
-
this.db.exec(`
|
|
132
|
-
ALTER TABLE qe_patterns ADD COLUMN consecutive_failures INTEGER DEFAULT 0
|
|
133
|
-
`);
|
|
134
|
-
console.log('[PatternLifecycle] Added consecutive_failures column to qe_patterns');
|
|
135
|
-
}
|
|
136
|
-
// Add promotion_date column if not exists
|
|
137
|
-
try {
|
|
138
|
-
this.db.prepare(`
|
|
139
|
-
SELECT promotion_date FROM qe_patterns LIMIT 1
|
|
140
|
-
`).get();
|
|
141
|
-
}
|
|
142
|
-
catch (e) {
|
|
143
|
-
logger.debug('Adding missing promotion_date column', { error: e instanceof Error ? e.message : String(e) });
|
|
144
|
-
this.db.exec(`
|
|
145
|
-
ALTER TABLE qe_patterns ADD COLUMN promotion_date TEXT DEFAULT NULL
|
|
146
|
-
`);
|
|
147
|
-
console.log('[PatternLifecycle] Added promotion_date column to qe_patterns');
|
|
148
|
-
}
|
|
149
|
-
// ADR-121: provenance_tier — additive, conservative-default migration.
|
|
150
|
-
// The DEFAULT backfills every existing row as 'proxy:structural', which can
|
|
151
|
-
// never over-credit legacy history. Rows re-derived from execution evidence
|
|
152
|
-
// are re-tiered upward through the normal write path (never up-tiered here).
|
|
153
|
-
// Distinct from the lifecycle `tier` (short-term/long-term) column.
|
|
154
|
-
try {
|
|
155
|
-
this.db.prepare(`
|
|
156
|
-
SELECT provenance_tier FROM qe_patterns LIMIT 1
|
|
157
|
-
`).get();
|
|
158
|
-
}
|
|
159
|
-
catch (e) {
|
|
160
|
-
logger.debug('Adding missing provenance_tier column', { error: e instanceof Error ? e.message : String(e) });
|
|
161
|
-
this.db.exec(`
|
|
162
|
-
ALTER TABLE qe_patterns ADD COLUMN provenance_tier TEXT DEFAULT '${DEFAULT_PROVENANCE_TIER}'
|
|
163
|
-
`);
|
|
164
|
-
console.log(`[PatternLifecycle] Added provenance_tier column to qe_patterns (backfilled '${DEFAULT_PROVENANCE_TIER}')`);
|
|
165
|
-
}
|
|
104
|
+
ensurePatternLifecycleSchema(this.db);
|
|
166
105
|
}
|
|
167
106
|
// ============================================================================
|
|
168
107
|
// Experience Extraction
|
|
@@ -431,6 +370,14 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
431
370
|
* Promote pattern to long-term tier
|
|
432
371
|
*/
|
|
433
372
|
promotePattern(patternId) {
|
|
373
|
+
if (!this.promotionVerified(patternId))
|
|
374
|
+
return false;
|
|
375
|
+
this.writePromotion(patternId);
|
|
376
|
+
console.log(`[PatternLifecycle] Promoted pattern ${patternId} to long-term`);
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
/** Whether `patternId` passes the advisory check and the frozen promote rule. */
|
|
380
|
+
promotionVerified(patternId) {
|
|
434
381
|
const check = this.checkPromotion(patternId);
|
|
435
382
|
if (!check.shouldPromote) {
|
|
436
383
|
return false;
|
|
@@ -465,6 +412,9 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
465
412
|
console.warn(`[PatternLifecycle] Refusing to promote ${patternId}: ${rerun.reason} (${verdict.reason})`);
|
|
466
413
|
return false;
|
|
467
414
|
}
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
writePromotion(patternId) {
|
|
468
418
|
this.db.prepare(`
|
|
469
419
|
UPDATE qe_patterns
|
|
470
420
|
SET tier = 'long-term',
|
|
@@ -473,17 +423,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
473
423
|
updated_at = datetime('now')
|
|
474
424
|
WHERE id = ?
|
|
475
425
|
`).run(patternId);
|
|
476
|
-
console.log(`[PatternLifecycle] Promoted pattern ${patternId} to long-term`);
|
|
477
|
-
return true;
|
|
478
426
|
}
|
|
479
427
|
/**
|
|
480
428
|
* Promote all eligible patterns
|
|
481
429
|
*/
|
|
482
430
|
promoteEligiblePatterns() {
|
|
483
|
-
const shortTermPatterns = this.
|
|
484
|
-
SELECT id FROM qe_patterns
|
|
485
|
-
WHERE tier = 'short-term' AND deprecated_at IS NULL
|
|
486
|
-
`).all();
|
|
431
|
+
const shortTermPatterns = this.selectShortTermPatternIds();
|
|
487
432
|
let promoted = 0;
|
|
488
433
|
for (const { id } of shortTermPatterns) {
|
|
489
434
|
if (this.promotePattern(id)) {
|
|
@@ -492,6 +437,29 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
492
437
|
}
|
|
493
438
|
return { promoted, checked: shortTermPatterns.length };
|
|
494
439
|
}
|
|
440
|
+
/**
|
|
441
|
+
* promoteEligiblePatterns for the MCP server's background workers (#1283):
|
|
442
|
+
* each promotion is queued on the shared connection, so a locked memory.db
|
|
443
|
+
* does not freeze the event loop. Same selection, rule and result.
|
|
444
|
+
*/
|
|
445
|
+
async promoteEligiblePatternsWhenUnlocked() {
|
|
446
|
+
const shortTermPatterns = this.selectShortTermPatternIds();
|
|
447
|
+
let promoted = 0;
|
|
448
|
+
for (const { id } of shortTermPatterns) {
|
|
449
|
+
if (!this.promotionVerified(id))
|
|
450
|
+
continue;
|
|
451
|
+
await writeWhenUnlockedOn(this.db, () => this.writePromotion(id));
|
|
452
|
+
console.log(`[PatternLifecycle] Promoted pattern ${id} to long-term`);
|
|
453
|
+
promoted++;
|
|
454
|
+
}
|
|
455
|
+
return { promoted, checked: shortTermPatterns.length };
|
|
456
|
+
}
|
|
457
|
+
selectShortTermPatternIds() {
|
|
458
|
+
return this.db.prepare(`
|
|
459
|
+
SELECT id FROM qe_patterns
|
|
460
|
+
WHERE tier = 'short-term' AND deprecated_at IS NULL
|
|
461
|
+
`).all();
|
|
462
|
+
}
|
|
495
463
|
/**
|
|
496
464
|
* Run a promotion sweep — convenience alias for pre-compaction hook.
|
|
497
465
|
* Iterates short-term patterns, checks promotion criteria, promotes eligible ones.
|
|
@@ -570,6 +538,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
570
538
|
return false;
|
|
571
539
|
}
|
|
572
540
|
const actualReason = reason || check.reason || 'manual';
|
|
541
|
+
this.writeDeprecation(patternId, actualReason);
|
|
542
|
+
console.log(`[PatternLifecycle] Deprecated pattern ${patternId}: ${actualReason}`);
|
|
543
|
+
return true;
|
|
544
|
+
}
|
|
545
|
+
/** Soft-delete a pattern and record why, in one unit so a queued retry repeats both. */
|
|
546
|
+
writeDeprecation(patternId, actualReason) {
|
|
573
547
|
// Move to deprecated state (soft delete)
|
|
574
548
|
this.db.prepare(`
|
|
575
549
|
UPDATE qe_patterns
|
|
@@ -593,17 +567,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
593
567
|
WHERE id = ?
|
|
594
568
|
`).run(JSON.stringify({ deprecation_metadata: metadata }), patternId);
|
|
595
569
|
}
|
|
596
|
-
console.log(`[PatternLifecycle] Deprecated pattern ${patternId}: ${actualReason}`);
|
|
597
|
-
return true;
|
|
598
570
|
}
|
|
599
571
|
/**
|
|
600
572
|
* Deprecate all patterns that meet deprecation criteria
|
|
601
573
|
*/
|
|
602
574
|
deprecateStalePatterns() {
|
|
603
|
-
const activePatterns = this.
|
|
604
|
-
SELECT id FROM qe_patterns
|
|
605
|
-
WHERE deprecated_at IS NULL
|
|
606
|
-
`).all();
|
|
575
|
+
const activePatterns = this.selectActivePatternIds();
|
|
607
576
|
let deprecated = 0;
|
|
608
577
|
for (const { id } of activePatterns) {
|
|
609
578
|
const check = this.checkDeprecation(id);
|
|
@@ -614,6 +583,30 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
614
583
|
}
|
|
615
584
|
return { deprecated, checked: activePatterns.length };
|
|
616
585
|
}
|
|
586
|
+
/**
|
|
587
|
+
* deprecateStalePatterns for the MCP server's background workers (#1283):
|
|
588
|
+
* each deprecation is queued on the shared connection. Same criteria and result.
|
|
589
|
+
*/
|
|
590
|
+
async deprecateStalePatternsWhenUnlocked() {
|
|
591
|
+
const activePatterns = this.selectActivePatternIds();
|
|
592
|
+
let deprecated = 0;
|
|
593
|
+
for (const { id } of activePatterns) {
|
|
594
|
+
const check = this.checkDeprecation(id);
|
|
595
|
+
if (check.shouldDeprecate) {
|
|
596
|
+
const actualReason = check.reason || 'manual';
|
|
597
|
+
await writeWhenUnlockedOn(this.db, () => this.writeDeprecation(id, actualReason));
|
|
598
|
+
console.log(`[PatternLifecycle] Deprecated pattern ${id}: ${actualReason}`);
|
|
599
|
+
deprecated++;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
return { deprecated, checked: activePatterns.length };
|
|
603
|
+
}
|
|
604
|
+
selectActivePatternIds() {
|
|
605
|
+
return this.db.prepare(`
|
|
606
|
+
SELECT id FROM qe_patterns
|
|
607
|
+
WHERE deprecated_at IS NULL
|
|
608
|
+
`).all();
|
|
609
|
+
}
|
|
617
610
|
// ============================================================================
|
|
618
611
|
// Confidence Decay
|
|
619
612
|
// ============================================================================
|
|
@@ -621,6 +614,17 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
621
614
|
* Apply confidence decay to patterns that haven't been used recently
|
|
622
615
|
*/
|
|
623
616
|
applyConfidenceDecay(daysSinceLastRun = 1) {
|
|
617
|
+
return this.writeConfidenceDecay(daysSinceLastRun, Date.now());
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* applyConfidenceDecay for the MCP server's background workers (#1283): the
|
|
621
|
+
* decay UPDATE is queued on the shared connection. Same cutoff and result.
|
|
622
|
+
*/
|
|
623
|
+
async applyConfidenceDecayWhenUnlocked(daysSinceLastRun = 1) {
|
|
624
|
+
const now = Date.now();
|
|
625
|
+
return writeWhenUnlockedOn(this.db, () => this.writeConfidenceDecay(daysSinceLastRun, now));
|
|
626
|
+
}
|
|
627
|
+
writeConfidenceDecay(daysSinceLastRun, now) {
|
|
624
628
|
// EWC++ (#510 item 6): per-row importance-weighted decay. The base decay
|
|
625
629
|
// amount is shielded by `EWC_DECAY_PROTECTION * importance`, where
|
|
626
630
|
// importance = success_rate (clamped) once usage_count >= the trust
|
|
@@ -629,7 +633,7 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
629
633
|
// so it isn't forgotten as fast as new low-value patterns.
|
|
630
634
|
const baseDecayAmount = this.config.confidenceDecayRate * daysSinceLastRun;
|
|
631
635
|
// Get patterns that haven't been used in the decay period
|
|
632
|
-
const cutoffTime =
|
|
636
|
+
const cutoffTime = now - (daysSinceLastRun * 24 * 60 * 60 * 1000);
|
|
633
637
|
const result = this.db.prepare(`
|
|
634
638
|
UPDATE qe_patterns
|
|
635
639
|
SET confidence = MAX(?, confidence * (1 - ? * (1 - ? *
|
|
@@ -931,6 +935,79 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
931
935
|
// ============================================================================
|
|
932
936
|
// Factory
|
|
933
937
|
// ============================================================================
|
|
938
|
+
/**
|
|
939
|
+
* Add the lifecycle columns to qe_patterns if they are missing. Only writes
|
|
940
|
+
* (ALTER TABLE) on a database that predates them.
|
|
941
|
+
*/
|
|
942
|
+
function ensurePatternLifecycleSchema(db) {
|
|
943
|
+
// Add deprecated_at column if not exists
|
|
944
|
+
try {
|
|
945
|
+
db.prepare(`
|
|
946
|
+
SELECT deprecated_at FROM qe_patterns LIMIT 1
|
|
947
|
+
`).get();
|
|
948
|
+
}
|
|
949
|
+
catch (e) {
|
|
950
|
+
// Column doesn't exist, add it
|
|
951
|
+
logger.debug('Adding missing deprecated_at column', { error: e instanceof Error ? e.message : String(e) });
|
|
952
|
+
db.exec(`
|
|
953
|
+
ALTER TABLE qe_patterns ADD COLUMN deprecated_at TEXT DEFAULT NULL
|
|
954
|
+
`);
|
|
955
|
+
console.log('[PatternLifecycle] Added deprecated_at column to qe_patterns');
|
|
956
|
+
}
|
|
957
|
+
// Add consecutive_failures column if not exists
|
|
958
|
+
try {
|
|
959
|
+
db.prepare(`
|
|
960
|
+
SELECT consecutive_failures FROM qe_patterns LIMIT 1
|
|
961
|
+
`).get();
|
|
962
|
+
}
|
|
963
|
+
catch (e) {
|
|
964
|
+
logger.debug('Adding missing consecutive_failures column', { error: e instanceof Error ? e.message : String(e) });
|
|
965
|
+
db.exec(`
|
|
966
|
+
ALTER TABLE qe_patterns ADD COLUMN consecutive_failures INTEGER DEFAULT 0
|
|
967
|
+
`);
|
|
968
|
+
console.log('[PatternLifecycle] Added consecutive_failures column to qe_patterns');
|
|
969
|
+
}
|
|
970
|
+
// Add promotion_date column if not exists
|
|
971
|
+
try {
|
|
972
|
+
db.prepare(`
|
|
973
|
+
SELECT promotion_date FROM qe_patterns LIMIT 1
|
|
974
|
+
`).get();
|
|
975
|
+
}
|
|
976
|
+
catch (e) {
|
|
977
|
+
logger.debug('Adding missing promotion_date column', { error: e instanceof Error ? e.message : String(e) });
|
|
978
|
+
db.exec(`
|
|
979
|
+
ALTER TABLE qe_patterns ADD COLUMN promotion_date TEXT DEFAULT NULL
|
|
980
|
+
`);
|
|
981
|
+
console.log('[PatternLifecycle] Added promotion_date column to qe_patterns');
|
|
982
|
+
}
|
|
983
|
+
// ADR-121: provenance_tier — additive, conservative-default migration.
|
|
984
|
+
// The DEFAULT backfills every existing row as 'proxy:structural', which can
|
|
985
|
+
// never over-credit legacy history. Rows re-derived from execution evidence
|
|
986
|
+
// are re-tiered upward through the normal write path (never up-tiered here).
|
|
987
|
+
// Distinct from the lifecycle `tier` (short-term/long-term) column.
|
|
988
|
+
try {
|
|
989
|
+
db.prepare(`
|
|
990
|
+
SELECT provenance_tier FROM qe_patterns LIMIT 1
|
|
991
|
+
`).get();
|
|
992
|
+
}
|
|
993
|
+
catch (e) {
|
|
994
|
+
logger.debug('Adding missing provenance_tier column', { error: e instanceof Error ? e.message : String(e) });
|
|
995
|
+
db.exec(`
|
|
996
|
+
ALTER TABLE qe_patterns ADD COLUMN provenance_tier TEXT DEFAULT '${DEFAULT_PROVENANCE_TIER}'
|
|
997
|
+
`);
|
|
998
|
+
console.log(`[PatternLifecycle] Added provenance_tier column to qe_patterns (backfilled '${DEFAULT_PROVENANCE_TIER}')`);
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
/**
|
|
1002
|
+
* Create a pattern lifecycle manager for the MCP server's background workers
|
|
1003
|
+
* (#1283). A database that predates the lifecycle columns gets its ALTER
|
|
1004
|
+
* TABLEs through the shared connection's write queue first, so a locked
|
|
1005
|
+
* memory.db does not freeze the event loop on the worker's first tick.
|
|
1006
|
+
*/
|
|
1007
|
+
export async function createPatternLifecycleManagerWhenUnlocked(db, config) {
|
|
1008
|
+
await writeWhenUnlockedOn(db, () => ensurePatternLifecycleSchema(db));
|
|
1009
|
+
return new PatternLifecycleManager(db, config);
|
|
1010
|
+
}
|
|
934
1011
|
/**
|
|
935
1012
|
* Create a pattern lifecycle manager
|
|
936
1013
|
*/
|
|
@@ -20,6 +20,11 @@ export declare class PatternNullStore {
|
|
|
20
20
|
constructor(db: DatabaseType);
|
|
21
21
|
/** Record a failure; consolidates on repeat (pattern, context) pairs. */
|
|
22
22
|
recordNull(record: PatternNullRecord): void;
|
|
23
|
+
/**
|
|
24
|
+
* recordNull() through the shared connection's write queue (#1283), so a
|
|
25
|
+
* locked memory.db does not freeze the MCP server's event loop.
|
|
26
|
+
*/
|
|
27
|
+
recordNullWhenUnlocked(record: PatternNullRecord): Promise<void>;
|
|
23
28
|
/** Batch summaries for retrieval-time surfacing. Missing patterns simply have no entry. */
|
|
24
29
|
getNullSummaries(patternIds: string[]): Map<string, NullSummary>;
|
|
25
30
|
/**
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import { applyMigration } from '../migrations/20260611_add_pattern_nulls_table.js';
|
|
17
|
+
import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
|
|
17
18
|
/** Weight of a context-matched null vs a null from elsewhere (ADR-110: local nulls outweigh remote successes). */
|
|
18
19
|
const CONTEXT_MATCHED_WEIGHT = 0.15;
|
|
19
20
|
const UNMATCHED_WEIGHT = 0.03;
|
|
@@ -38,6 +39,13 @@ export class PatternNullStore {
|
|
|
38
39
|
updated_at = datetime('now')
|
|
39
40
|
`).run(uuidv4(), record.patternId, record.contextFingerprint, record.failureMode, record.trajectoryRef ?? null, record.evidenceClass ?? 'EXECUTED');
|
|
40
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* recordNull() through the shared connection's write queue (#1283), so a
|
|
44
|
+
* locked memory.db does not freeze the MCP server's event loop.
|
|
45
|
+
*/
|
|
46
|
+
recordNullWhenUnlocked(record) {
|
|
47
|
+
return writeWhenUnlockedOn(this.db, () => this.recordNull(record));
|
|
48
|
+
}
|
|
41
49
|
/** Batch summaries for retrieval-time surfacing. Missing patterns simply have no entry. */
|
|
42
50
|
getNullSummaries(patternIds) {
|
|
43
51
|
const out = new Map();
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { LoggerFactory } from '../logging/index.js';
|
|
9
9
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
10
|
+
import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
|
|
10
11
|
import { shouldPromotePattern, calculateQualityScore } from './qe-patterns.js';
|
|
11
12
|
import { getWitnessChain } from '../audit/witness-chain.js';
|
|
12
13
|
import { RELATED_DOMAINS } from './agent-routing.js';
|
|
@@ -76,7 +77,9 @@ export async function promotePattern(patternId, deps) {
|
|
|
76
77
|
const result = await deps.patternStore.promote(patternId);
|
|
77
78
|
if (result.success) {
|
|
78
79
|
try {
|
|
79
|
-
deps.getSqliteStore()
|
|
80
|
+
const store = deps.getSqliteStore();
|
|
81
|
+
// #1283: queued on the shared connection, so a locked memory.db does not freeze the MCP server.
|
|
82
|
+
await writeWhenUnlockedOn(store.getDatabase(), () => store.promotePattern(patternId));
|
|
80
83
|
}
|
|
81
84
|
catch (e) {
|
|
82
85
|
logger.warn('SQLite pattern promotion persist failed', {
|
|
@@ -98,7 +101,7 @@ export async function promotePattern(patternId, deps) {
|
|
|
98
101
|
if (peers.success) {
|
|
99
102
|
for (const { pattern: peer } of peers.value) {
|
|
100
103
|
if (peer.id !== patternId) {
|
|
101
|
-
citationGraph.recordCoOccurrence(patternId, peer.id);
|
|
104
|
+
await writeWhenUnlockedOn(db, () => citationGraph.recordCoOccurrence(patternId, peer.id));
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
}
|
|
@@ -126,7 +129,7 @@ export async function promotePattern(patternId, deps) {
|
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
getWitnessChain()
|
|
129
|
-
.then((wc) => wc.
|
|
132
|
+
.then((wc) => wc.appendWhenUnlocked('PATTERN_PROMOTE', { patternId }, 'reasoning-bank'))
|
|
130
133
|
.catch((e) => {
|
|
131
134
|
logger.warn('Witness chain PATTERN_PROMOTE failed', {
|
|
132
135
|
error: toErrorMessage(e),
|
|
@@ -326,6 +326,12 @@ export declare class PatternStore implements IPatternStore {
|
|
|
326
326
|
* Record pattern usage and update stats
|
|
327
327
|
*/
|
|
328
328
|
recordUsage(id: string, success: boolean, metrics?: Record<string, unknown>, feedback?: string): Promise<Result<void>>;
|
|
329
|
+
/**
|
|
330
|
+
* Run a SQLite write through the store's writeWhenUnlocked queue (#1274):
|
|
331
|
+
* the hourly cleanup timer and fire-and-forget usage recording write here,
|
|
332
|
+
* and must not freeze the MCP server's event loop on a locked memory.db.
|
|
333
|
+
*/
|
|
334
|
+
private persistToSqlite;
|
|
329
335
|
/**
|
|
330
336
|
* Promote pattern from short-term to long-term storage
|
|
331
337
|
*/
|