agentic-qe 3.15.15 → 3.15.17
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 +168 -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-OMILP6KH.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
- package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
- package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
- package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
- package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
- package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
- package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
- package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
- package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
- package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
- package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
- package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
- package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
- package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
- package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
- package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
- package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
- package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
- package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
- package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
- package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
- package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
- package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
- package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
- package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
- package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
- package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
- package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
- package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
- package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
- package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
- package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
- package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
- package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
- package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
- package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
- package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
- package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
- package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
- package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
- package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
- package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
- package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
- package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
- package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
- package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
- package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
- package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
- package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
- package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
- package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
- package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
- package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
- package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
- package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
- package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
- package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
- package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
- package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
- package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
- package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
- package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
- package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
- package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
- package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
- package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
- package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
- package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
- package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
- package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
- package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
- package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
- package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
- package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
- package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
- package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
- package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
- package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
- package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
- package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
- package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
- package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
- package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
- package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
- package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
- package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
- package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
- package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
- package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
- package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
- package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
- package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
- package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
- package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
- package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
- package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
- package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
- package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
- package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
- package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
- package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
- package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
- package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
- package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
- package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
- package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
- package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
- package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
- package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
- package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
- package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
- package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
- package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
- package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
- package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
- package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
- package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
- package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
- package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
- package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
- package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
- package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
- package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
- package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
- package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
- package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
- package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
- package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
- package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
- package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
- package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
- package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
- package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
- package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
- package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
- package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
- package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
- package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
- package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
- package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
- package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
- package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
- package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
- package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
- package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
- package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
- package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
- package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
- package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
- package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
- package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
- package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
- package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
- package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
- package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
- package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
- package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
- package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
- package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
- package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
- package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
- package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
- package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
- package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
- package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
- package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
- package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
- package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
- package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
- package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
- package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
- package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
- package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
- package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
- package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
- package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
- package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
- package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
- package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
- package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
- package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
- package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
- package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
- package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
- package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
- package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
- package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
- package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
- package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
- package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
- package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
- package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
- package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
- package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
- package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
- package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
- package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
- package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
- package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
- package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
- package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
- package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
- package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
- package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
- package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
- package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
- package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
- package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
- package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
- package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
- package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
- package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
- package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
- package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
- package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
- package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
- package/dist/cli/chunks/router-PLM3MWME.js +2 -0
- package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
- package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
- package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
- package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
- package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
- package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
- package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
- package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
- package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
- package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
- package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
- package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
- package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
- package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
- package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
- package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
- package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
- package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
- package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
- package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
- package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
- package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
- package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
- package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
- package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
- package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
- package/dist/cli/chunks/wrappers-CYQBOMPL.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/commands/test.js +26 -4
- 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 +137 -59
- 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 +37 -7
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
- package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
- package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
- 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.d.ts +3 -1
- package/dist/domains/test-execution/coordinator.js +21 -7
- package/dist/domains/test-execution/interfaces.d.ts +17 -0
- package/dist/domains/test-execution/plugin.js +8 -2
- package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
- package/dist/domains/test-execution/services/flaky-detector.js +26 -8
- package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
- package/dist/domains/test-execution/services/retry-handler.js +56 -12
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
- package/dist/domains/test-execution/services/test-executor.js +97 -14
- 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/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +37 -17
- package/dist/init/platform-config-generator.d.ts +10 -0
- package/dist/init/platform-config-generator.js +26 -1
- 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 +32 -0
- package/dist/kernel/unified-memory.js +76 -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 +76 -0
- package/dist/learning/embedder-endpoint-client.js +201 -13
- package/dist/learning/embedding-space-registry.d.ts +75 -0
- package/dist/learning/embedding-space-registry.js +142 -0
- 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.d.ts +3 -0
- package/dist/learning/real-embeddings.js +52 -12
- 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 +699 -619
- 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/embeddings/index.d.ts +2 -2
- package/dist/shared/embeddings/index.js +1 -1
- package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
- package/dist/shared/embeddings/nomic-embedder.js +19 -11
- package/dist/shared/embeddings/ollama-client.d.ts +28 -2
- package/dist/shared/embeddings/ollama-client.js +84 -22
- package/dist/shared/embeddings/types.d.ts +15 -0
- package/dist/shared/embeddings/types.js +4 -0
- package/dist/shared/llm/spend-ledger.d.ts +9 -0
- package/dist/shared/llm/spend-ledger.js +64 -39
- package/dist/shared/pytest-junit-report.d.ts +93 -0
- package/dist/shared/pytest-junit-report.js +241 -0
- 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 +119 -0
- package/dist/shared/test-runner-project.js +301 -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-4D4CWP72.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-TX2CHQD7.js +0 -2
- 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/copilot-installer-BHPDSELY.js +0 -3
- 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-O6FK3FVF.js +0 -34
- 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
|
@@ -223,31 +223,38 @@ export class PatternEvolution {
|
|
|
223
223
|
*/
|
|
224
224
|
async trackVersion(patternId, embedding, changes = [], trigger = 'manual') {
|
|
225
225
|
this.ensureInitialized();
|
|
226
|
-
// Get current version count
|
|
227
|
-
const countStmt = this.prepared.get('getVersionCount');
|
|
228
|
-
const countResult = countStmt?.get(patternId);
|
|
229
|
-
const newVersion = (countResult?.count ?? 0) + 1;
|
|
230
|
-
// Get pattern quality/success rate
|
|
231
|
-
const patternStmt = this.prepared.get('getPattern');
|
|
232
|
-
const pattern = patternStmt?.get(patternId);
|
|
233
226
|
const id = uuidv4();
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
227
|
+
const embeddingBuffer = this.floatArrayToBuffer(embedding);
|
|
228
|
+
// #1283: read the version count and insert the new version as one queued
|
|
229
|
+
// unit, so a locked memory.db does not freeze the MCP server and two
|
|
230
|
+
// concurrent calls cannot both claim the same version number.
|
|
231
|
+
const version = await this.write(() => {
|
|
232
|
+
// Get current version count
|
|
233
|
+
const countStmt = this.prepared.get('getVersionCount');
|
|
234
|
+
const countResult = countStmt?.get(patternId);
|
|
235
|
+
const newVersion = (countResult?.count ?? 0) + 1;
|
|
236
|
+
// Get pattern quality/success rate
|
|
237
|
+
const patternStmt = this.prepared.get('getPattern');
|
|
238
|
+
const pattern = patternStmt?.get(patternId);
|
|
239
|
+
const tracked = {
|
|
240
|
+
id,
|
|
241
|
+
patternId,
|
|
242
|
+
version: newVersion,
|
|
243
|
+
embedding,
|
|
244
|
+
changes,
|
|
245
|
+
qualityScore: pattern?.quality_score ?? 0.5,
|
|
246
|
+
successRate: pattern?.success_rate ?? 0.5,
|
|
247
|
+
timestamp: new Date(),
|
|
248
|
+
trigger,
|
|
249
|
+
};
|
|
250
|
+
// Store in database
|
|
251
|
+
const insertStmt = this.prepared.get('insertVersion');
|
|
252
|
+
if (insertStmt) {
|
|
253
|
+
insertStmt.run(id, patternId, newVersion, embeddingBuffer, embedding.length, JSON.stringify(changes), tracked.qualityScore, tracked.successRate, trigger);
|
|
254
|
+
}
|
|
255
|
+
return tracked;
|
|
256
|
+
});
|
|
257
|
+
const newVersion = version.version;
|
|
251
258
|
// Update embedding cache
|
|
252
259
|
this.embeddingCache.set(patternId, embedding);
|
|
253
260
|
// Record evolution event
|
|
@@ -429,7 +436,8 @@ export class PatternEvolution {
|
|
|
429
436
|
*/
|
|
430
437
|
async mergePatterns(patternId1, patternId2, mergedName) {
|
|
431
438
|
this.ensureInitialized();
|
|
432
|
-
|
|
439
|
+
const db = this.db;
|
|
440
|
+
if (!db)
|
|
433
441
|
return null;
|
|
434
442
|
const patternStmt = this.prepared.get('getPattern');
|
|
435
443
|
const p1 = patternStmt?.get(patternId1);
|
|
@@ -442,13 +450,13 @@ export class PatternEvolution {
|
|
|
442
450
|
: [p2, p1];
|
|
443
451
|
// Update retained pattern name if provided
|
|
444
452
|
if (mergedName) {
|
|
445
|
-
this.db.prepare(`UPDATE qe_patterns SET name = ? WHERE id = ?`).run(mergedName, retained.id);
|
|
453
|
+
await this.write(() => db.prepare(`UPDATE qe_patterns SET name = ? WHERE id = ?`).run(mergedName, retained.id));
|
|
446
454
|
}
|
|
447
455
|
// Combine usage counts and recalculate success rate
|
|
448
456
|
const totalUsage = (retained.usage_count ?? 0) + (archived.usage_count ?? 0);
|
|
449
457
|
const totalSuccess = (retained.successful_uses ?? 0) + (archived.successful_uses ?? 0);
|
|
450
458
|
const newSuccessRate = totalUsage > 0 ? totalSuccess / totalUsage : 0;
|
|
451
|
-
this.db.prepare(`
|
|
459
|
+
await this.write(() => db.prepare(`
|
|
452
460
|
UPDATE qe_patterns SET
|
|
453
461
|
usage_count = ?,
|
|
454
462
|
successful_uses = ?,
|
|
@@ -460,14 +468,15 @@ export class PatternEvolution {
|
|
|
460
468
|
END,
|
|
461
469
|
updated_at = datetime('now')
|
|
462
470
|
WHERE id = ?
|
|
463
|
-
`).run(totalUsage, totalSuccess, newSuccessRate, archived.last_used_at, archived.last_used_at, archived.last_used_at, retained.id);
|
|
471
|
+
`).run(totalUsage, totalSuccess, newSuccessRate, archived.last_used_at, archived.last_used_at, archived.last_used_at, retained.id));
|
|
464
472
|
// Record merge relationship
|
|
465
473
|
const relStmt = this.prepared.get('insertRelationship');
|
|
466
474
|
if (relStmt) {
|
|
467
|
-
|
|
475
|
+
const relId = uuidv4();
|
|
476
|
+
await this.write(() => relStmt.run(relId, archived.id, retained.id, 'merged', 1.0));
|
|
468
477
|
}
|
|
469
478
|
// Archive the lower quality pattern (mark as archived)
|
|
470
|
-
this.db.prepare(`UPDATE qe_patterns SET tier = 'archived' WHERE id = ?`).run(archived.id);
|
|
479
|
+
await this.write(() => db.prepare(`UPDATE qe_patterns SET tier = 'archived' WHERE id = ?`).run(archived.id));
|
|
471
480
|
// Record events
|
|
472
481
|
await this.recordEvent(retained.id, 'merged', { absorbedFrom: archived.id });
|
|
473
482
|
await this.recordEvent(archived.id, 'archived', { mergedInto: retained.id });
|
|
@@ -497,8 +506,9 @@ export class PatternEvolution {
|
|
|
497
506
|
for (const candidate of pruneCandidates) {
|
|
498
507
|
if (candidate.reason === 'low-quality' || candidate.reason === 'obsolete') {
|
|
499
508
|
// Actually delete the pattern
|
|
500
|
-
|
|
501
|
-
|
|
509
|
+
const db = this.db;
|
|
510
|
+
if (db) {
|
|
511
|
+
await this.write(() => db.prepare(`DELETE FROM qe_patterns WHERE id = ?`).run(candidate.patternId));
|
|
502
512
|
this.embeddingCache.delete(candidate.patternId);
|
|
503
513
|
await this.recordEvent(candidate.patternId, 'pruned', { reason: candidate.reason });
|
|
504
514
|
pruned++;
|
|
@@ -560,10 +570,18 @@ export class PatternEvolution {
|
|
|
560
570
|
details,
|
|
561
571
|
timestamp: new Date(),
|
|
562
572
|
};
|
|
563
|
-
insertStmt.run(event.id, patternId, eventType, JSON.stringify(details));
|
|
573
|
+
await this.write(() => insertStmt.run(event.id, patternId, eventType, JSON.stringify(details)));
|
|
564
574
|
this.recentEvents.push(event);
|
|
565
575
|
}
|
|
566
576
|
}
|
|
577
|
+
/**
|
|
578
|
+
* Run a write through the shared connection's writeWhenUnlocked queue, so a
|
|
579
|
+
* locked memory.db does not freeze the MCP server's event loop while the
|
|
580
|
+
* hourly consolidation timer merges and prunes patterns (#1274).
|
|
581
|
+
*/
|
|
582
|
+
write(fn) {
|
|
583
|
+
return this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(fn) : Promise.resolve(fn());
|
|
584
|
+
}
|
|
567
585
|
/**
|
|
568
586
|
* Get statistics
|
|
569
587
|
*/
|
|
@@ -75,7 +75,7 @@ export class TrajectoryTracker {
|
|
|
75
75
|
// Load recent trajectories into buffer
|
|
76
76
|
await this.loadRecentTrajectories();
|
|
77
77
|
// Clean up orphaned trajectories from previous sessions (started > 1 hour ago, never completed)
|
|
78
|
-
this.cleanupOrphanedTrajectories();
|
|
78
|
+
await this.cleanupOrphanedTrajectories();
|
|
79
79
|
this.initialized = true;
|
|
80
80
|
console.log('[TrajectoryTracker] Initialized');
|
|
81
81
|
}
|
|
@@ -83,18 +83,20 @@ export class TrajectoryTracker {
|
|
|
83
83
|
* Clean up orphaned trajectories that were started but never completed.
|
|
84
84
|
* Marks them as failed with an auto-close reason. Runs at initialization.
|
|
85
85
|
*/
|
|
86
|
-
cleanupOrphanedTrajectories() {
|
|
87
|
-
|
|
86
|
+
async cleanupOrphanedTrajectories() {
|
|
87
|
+
const db = this.db;
|
|
88
|
+
if (!db || !this.unifiedMemory)
|
|
88
89
|
return;
|
|
89
90
|
try {
|
|
90
|
-
|
|
91
|
+
// #1263: retried asynchronously, so a locked DB does not freeze the MCP server.
|
|
92
|
+
const result = await this.unifiedMemory.writeWhenUnlocked(() => db.prepare(`
|
|
91
93
|
UPDATE qe_trajectories
|
|
92
94
|
SET success = 0,
|
|
93
95
|
ended_at = datetime('now'),
|
|
94
96
|
feedback = 'auto-closed: orphaned trajectory from previous session'
|
|
95
97
|
WHERE success IS NULL
|
|
96
98
|
AND started_at < datetime('now', '-1 hour')
|
|
97
|
-
`).run();
|
|
99
|
+
`).run());
|
|
98
100
|
if (result.changes > 0) {
|
|
99
101
|
this.stats.trajectoriesAbandoned += result.changes;
|
|
100
102
|
console.log(`[TrajectoryTracker] Cleaned up ${result.changes} orphaned trajectories`);
|
|
@@ -238,10 +240,13 @@ export class TrajectoryTracker {
|
|
|
238
240
|
startedAt,
|
|
239
241
|
context: options.context,
|
|
240
242
|
});
|
|
241
|
-
// Persist to SQLite
|
|
243
|
+
// Persist to SQLite. Queued (#1283): task_orchestrate starts a trajectory
|
|
244
|
+
// inside the tool call, and a locked memory.db must not freeze the MCP
|
|
245
|
+
// server's event loop. The later end update queues after this insert.
|
|
242
246
|
const insertStmt = this.prepared.get('insertTrajectory');
|
|
243
247
|
if (insertStmt) {
|
|
244
|
-
insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
|
|
248
|
+
const run = () => insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
|
|
249
|
+
await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
|
|
245
250
|
}
|
|
246
251
|
this.stats.trajectoriesStarted++;
|
|
247
252
|
// Set auto-end timeout
|
|
@@ -344,12 +349,15 @@ export class TrajectoryTracker {
|
|
|
344
349
|
endedAt,
|
|
345
350
|
feedback,
|
|
346
351
|
};
|
|
347
|
-
// Persist to SQLite
|
|
352
|
+
// Persist to SQLite. Queued (#1274): task completion events end
|
|
353
|
+
// trajectories in the background, and a locked memory.db must not freeze
|
|
354
|
+
// the MCP server's event loop.
|
|
348
355
|
const updateStmt = this.prepared.get('updateTrajectory');
|
|
349
356
|
if (updateStmt) {
|
|
350
|
-
updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
|
|
357
|
+
const run = () => updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
|
|
351
358
|
feedback ?? null, null, // related_patterns - computed later
|
|
352
359
|
trajectoryId);
|
|
360
|
+
await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
|
|
353
361
|
}
|
|
354
362
|
// Remove from active, add to recent buffer
|
|
355
363
|
this.activeTrajectories.delete(trajectoryId);
|
|
@@ -84,6 +84,14 @@ export declare class EmbeddingCache {
|
|
|
84
84
|
* Persist entry to disk
|
|
85
85
|
*/
|
|
86
86
|
private persistToDisk;
|
|
87
|
+
/**
|
|
88
|
+
* Run a write on the cache's connection without blocking the caller
|
|
89
|
+
* (#1283). On the shared memory.db connection it goes through the write
|
|
90
|
+
* queue, so a locked database does not freeze the MCP server's event loop;
|
|
91
|
+
* on a private (legacy) connection it runs at once. A failure is logged,
|
|
92
|
+
* since the in-memory cache is already up to date.
|
|
93
|
+
*/
|
|
94
|
+
private persist;
|
|
87
95
|
/**
|
|
88
96
|
* Flush writes that were queued during async DB initialization
|
|
89
97
|
*/
|
|
@@ -24,6 +24,7 @@ import { join } from 'path';
|
|
|
24
24
|
import { existsSync, mkdirSync } from 'fs';
|
|
25
25
|
import { getUnifiedMemory, findProjectRoot } from '../../../kernel/unified-memory.js';
|
|
26
26
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
27
|
+
import { writeWhenUnlockedOn } from '../../../shared/sqlite-write-queue.js';
|
|
27
28
|
/**
|
|
28
29
|
* Embedding cache with LRU eviction and persistent storage
|
|
29
30
|
*/
|
|
@@ -183,8 +184,7 @@ export class EmbeddingCache {
|
|
|
183
184
|
const cache = this.memoryCache.get(namespace);
|
|
184
185
|
const deleted = cache?.delete(key) || false;
|
|
185
186
|
if (deleted && this.persistent && this.db) {
|
|
186
|
-
|
|
187
|
-
stmt.run(key, namespace);
|
|
187
|
+
this.persist('delete', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(key, namespace));
|
|
188
188
|
}
|
|
189
189
|
return deleted;
|
|
190
190
|
}
|
|
@@ -196,8 +196,7 @@ export class EmbeddingCache {
|
|
|
196
196
|
const cache = this.memoryCache.get(namespace);
|
|
197
197
|
cache?.clear();
|
|
198
198
|
if (this.persistent && this.db) {
|
|
199
|
-
|
|
200
|
-
stmt.run(namespace);
|
|
199
|
+
this.persist('clear', (db) => db.prepare('DELETE FROM embeddings WHERE namespace = ?').run(namespace));
|
|
201
200
|
}
|
|
202
201
|
}
|
|
203
202
|
else {
|
|
@@ -205,7 +204,7 @@ export class EmbeddingCache {
|
|
|
205
204
|
cache.clear();
|
|
206
205
|
}
|
|
207
206
|
if (this.persistent && this.db) {
|
|
208
|
-
this.db.exec('DELETE FROM embeddings');
|
|
207
|
+
this.persist('clear', (db) => db.exec('DELETE FROM embeddings'));
|
|
209
208
|
}
|
|
210
209
|
}
|
|
211
210
|
}
|
|
@@ -243,8 +242,8 @@ export class EmbeddingCache {
|
|
|
243
242
|
if (lruKey) {
|
|
244
243
|
cache.delete(lruKey);
|
|
245
244
|
if (this.persistent && this.db) {
|
|
246
|
-
const
|
|
247
|
-
|
|
245
|
+
const evicted = lruKey;
|
|
246
|
+
this.persist('evict', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(evicted, namespace));
|
|
248
247
|
}
|
|
249
248
|
}
|
|
250
249
|
}
|
|
@@ -259,17 +258,32 @@ export class EmbeddingCache {
|
|
|
259
258
|
const metadataJson = embedding.metadata
|
|
260
259
|
? JSON.stringify(embedding.metadata)
|
|
261
260
|
: null;
|
|
262
|
-
const
|
|
261
|
+
const lastAccess = Date.now();
|
|
262
|
+
this.persist('persist', (db) => db.prepare(`
|
|
263
263
|
INSERT OR REPLACE INTO embeddings
|
|
264
264
|
(key, namespace, vector, dimension, text, timestamp, quantization, metadata, last_access)
|
|
265
265
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
266
|
-
`);
|
|
267
|
-
stmt.run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, Date.now());
|
|
266
|
+
`).run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, lastAccess));
|
|
268
267
|
}
|
|
269
268
|
catch (error) {
|
|
270
269
|
console.warn('Failed to persist embedding:', error);
|
|
271
270
|
}
|
|
272
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* Run a write on the cache's connection without blocking the caller
|
|
274
|
+
* (#1283). On the shared memory.db connection it goes through the write
|
|
275
|
+
* queue, so a locked database does not freeze the MCP server's event loop;
|
|
276
|
+
* on a private (legacy) connection it runs at once. A failure is logged,
|
|
277
|
+
* since the in-memory cache is already up to date.
|
|
278
|
+
*/
|
|
279
|
+
persist(action, write) {
|
|
280
|
+
const db = this.db;
|
|
281
|
+
if (!db)
|
|
282
|
+
return;
|
|
283
|
+
writeWhenUnlockedOn(db, () => write(db)).catch((error) => {
|
|
284
|
+
console.warn(`Failed to ${action} embedding cache entry:`, error);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
273
287
|
/**
|
|
274
288
|
* Flush writes that were queued during async DB initialization
|
|
275
289
|
*/
|
|
@@ -77,6 +77,17 @@ export declare class DeltaTracker {
|
|
|
77
77
|
initialize(): void;
|
|
78
78
|
private prepareStatements;
|
|
79
79
|
private ensureInitialized;
|
|
80
|
+
/**
|
|
81
|
+
* createGenesis() through the shared connection's write queue (#1283). The
|
|
82
|
+
* version check and the insert run as one queued unit.
|
|
83
|
+
*/
|
|
84
|
+
createGenesisWhenUnlocked(patternId: string, snapshot: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
|
|
85
|
+
/**
|
|
86
|
+
* recordDelta() through the shared connection's write queue (#1283). Reading
|
|
87
|
+
* the current version, the insert and retention run as one queued unit, so
|
|
88
|
+
* two deltas cannot get the same version number.
|
|
89
|
+
*/
|
|
90
|
+
recordDeltaWhenUnlocked(patternId: string, before: object, after: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
|
|
80
91
|
/**
|
|
81
92
|
* Create a genesis snapshot for a pattern (version 0).
|
|
82
93
|
* The full object is stored in metadata.snapshot; patches are empty.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @module integrations/ruvector/delta-tracker
|
|
9
9
|
*/
|
|
10
10
|
import { v4 as uuidv4 } from 'uuid';
|
|
11
|
+
import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
|
|
11
12
|
import * as fastJsonPatchNs from 'fast-json-patch';
|
|
12
13
|
// fast-json-patch ships two entry points with different export shapes: its CJS
|
|
13
14
|
// entry (index.js) attaches named exports directly via Object.assign(exports,
|
|
@@ -156,6 +157,21 @@ export class DeltaTracker {
|
|
|
156
157
|
// --------------------------------------------------------------------------
|
|
157
158
|
// Public API
|
|
158
159
|
// --------------------------------------------------------------------------
|
|
160
|
+
/**
|
|
161
|
+
* createGenesis() through the shared connection's write queue (#1283). The
|
|
162
|
+
* version check and the insert run as one queued unit.
|
|
163
|
+
*/
|
|
164
|
+
createGenesisWhenUnlocked(patternId, snapshot, metadata) {
|
|
165
|
+
return writeWhenUnlockedOn(this.db, () => this.createGenesis(patternId, snapshot, metadata));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* recordDelta() through the shared connection's write queue (#1283). Reading
|
|
169
|
+
* the current version, the insert and retention run as one queued unit, so
|
|
170
|
+
* two deltas cannot get the same version number.
|
|
171
|
+
*/
|
|
172
|
+
recordDeltaWhenUnlocked(patternId, before, after, metadata) {
|
|
173
|
+
return writeWhenUnlockedOn(this.db, () => this.recordDelta(patternId, before, after, metadata));
|
|
174
|
+
}
|
|
159
175
|
/**
|
|
160
176
|
* Create a genesis snapshot for a pattern (version 0).
|
|
161
177
|
* The full object is stored in metadata.snapshot; patches are empty.
|
|
@@ -95,6 +95,8 @@ export declare class PersistentSONAEngine {
|
|
|
95
95
|
private initPromise;
|
|
96
96
|
private pendingSaves;
|
|
97
97
|
private saveTimer;
|
|
98
|
+
/** The deferred batch currently being written, if any (#1283). */
|
|
99
|
+
private flushInFlight;
|
|
98
100
|
private consecutiveSaveFailures;
|
|
99
101
|
private serverClient;
|
|
100
102
|
constructor(config: PersistentSONAConfig);
|
|
@@ -419,6 +421,14 @@ export declare class PersistentSONAEngine {
|
|
|
419
421
|
* Schedule batched save
|
|
420
422
|
*/
|
|
421
423
|
private scheduleSave;
|
|
424
|
+
/**
|
|
425
|
+
* Write the batched patterns. Each write is queued on the shared connection
|
|
426
|
+
* (#1283): in the MCP server a locked memory.db no longer freezes the event
|
|
427
|
+
* loop for the whole busy_timeout per pattern; the write retries
|
|
428
|
+
* asynchronously instead. A row that still fails stays pending and the batch
|
|
429
|
+
* is retried with backoff, as before.
|
|
430
|
+
*/
|
|
431
|
+
private flushPendingSaves;
|
|
422
432
|
/**
|
|
423
433
|
* Update pattern usage in SQLite
|
|
424
434
|
*/
|
|
@@ -29,6 +29,7 @@ import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
|
|
|
29
29
|
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
30
30
|
import { safeJsonParse } from '../../shared/safe-json.js';
|
|
31
31
|
import { LoggerFactory } from '../../logging/index.js';
|
|
32
|
+
import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
|
|
32
33
|
const logger = LoggerFactory.create('sona-persistence');
|
|
33
34
|
// ============================================================================
|
|
34
35
|
// Schema (added to unified-memory.ts as part of migration)
|
|
@@ -112,6 +113,8 @@ export class PersistentSONAEngine {
|
|
|
112
113
|
initPromise = null;
|
|
113
114
|
pendingSaves = new Map();
|
|
114
115
|
saveTimer = null;
|
|
116
|
+
/** The deferred batch currently being written, if any (#1283). */
|
|
117
|
+
flushInFlight = null;
|
|
115
118
|
consecutiveSaveFailures = 0;
|
|
116
119
|
serverClient = null;
|
|
117
120
|
constructor(config) {
|
|
@@ -801,6 +804,10 @@ export class PersistentSONAEngine {
|
|
|
801
804
|
* Close the engine
|
|
802
805
|
*/
|
|
803
806
|
async close() {
|
|
807
|
+
// Let a deferred batch that is already writing finish first (#1283); it
|
|
808
|
+
// may schedule a retry, which the clearTimeout below then cancels.
|
|
809
|
+
if (this.flushInFlight)
|
|
810
|
+
await this.flushInFlight;
|
|
804
811
|
// Flush pending saves
|
|
805
812
|
if (this.saveTimer) {
|
|
806
813
|
clearTimeout(this.saveTimer);
|
|
@@ -808,9 +815,9 @@ export class PersistentSONAEngine {
|
|
|
808
815
|
}
|
|
809
816
|
if (this.pendingSaves.size > 0) {
|
|
810
817
|
const failures = [];
|
|
811
|
-
for (const pattern of this.pendingSaves.values()) {
|
|
818
|
+
for (const pattern of Array.from(this.pendingSaves.values())) {
|
|
812
819
|
try {
|
|
813
|
-
this.savePatternToDb(pattern);
|
|
820
|
+
await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
|
|
814
821
|
this.pendingSaves.delete(pattern.id);
|
|
815
822
|
}
|
|
816
823
|
catch (error) {
|
|
@@ -1085,33 +1092,51 @@ export class PersistentSONAEngine {
|
|
|
1085
1092
|
}
|
|
1086
1093
|
this.saveTimer = setTimeout(() => {
|
|
1087
1094
|
this.saveTimer = null;
|
|
1088
|
-
const
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
}
|
|
1094
|
-
catch (error) {
|
|
1095
|
-
logger.warn('Deferred SONA save failed; retaining pending pattern', {
|
|
1096
|
-
patternId: pattern.id, error: toErrorMessage(error),
|
|
1097
|
-
});
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
if (this.pendingSaves.size > 0) {
|
|
1101
|
-
this.consecutiveSaveFailures++;
|
|
1102
|
-
// Stop after five failed batches; close() can still flush retained rows.
|
|
1103
|
-
if (this.consecutiveSaveFailures < 5 && this.db?.open) {
|
|
1104
|
-
this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
else {
|
|
1108
|
-
this.consecutiveSaveFailures = 0;
|
|
1109
|
-
}
|
|
1095
|
+
const flush = this.flushPendingSaves().finally(() => {
|
|
1096
|
+
if (this.flushInFlight === flush)
|
|
1097
|
+
this.flushInFlight = null;
|
|
1098
|
+
});
|
|
1099
|
+
this.flushInFlight = flush;
|
|
1110
1100
|
}, delayMs);
|
|
1111
1101
|
// The initial batch must flush on natural exit; only failure retries are optional.
|
|
1112
1102
|
if (this.consecutiveSaveFailures > 0)
|
|
1113
1103
|
this.saveTimer.unref();
|
|
1114
1104
|
}
|
|
1105
|
+
/**
|
|
1106
|
+
* Write the batched patterns. Each write is queued on the shared connection
|
|
1107
|
+
* (#1283): in the MCP server a locked memory.db no longer freezes the event
|
|
1108
|
+
* loop for the whole busy_timeout per pattern; the write retries
|
|
1109
|
+
* asynchronously instead. A row that still fails stays pending and the batch
|
|
1110
|
+
* is retried with backoff, as before.
|
|
1111
|
+
*/
|
|
1112
|
+
async flushPendingSaves() {
|
|
1113
|
+
const patterns = Array.from(this.pendingSaves.values());
|
|
1114
|
+
let failed = 0;
|
|
1115
|
+
for (const pattern of patterns) {
|
|
1116
|
+
try {
|
|
1117
|
+
await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
|
|
1118
|
+
// A newer snapshot queued during the write stays pending.
|
|
1119
|
+
if (this.pendingSaves.get(pattern.id) === pattern)
|
|
1120
|
+
this.pendingSaves.delete(pattern.id);
|
|
1121
|
+
}
|
|
1122
|
+
catch (error) {
|
|
1123
|
+
failed++;
|
|
1124
|
+
logger.warn('Deferred SONA save failed; retaining pending pattern', {
|
|
1125
|
+
patternId: pattern.id, error: toErrorMessage(error),
|
|
1126
|
+
});
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
if (failed > 0) {
|
|
1130
|
+
this.consecutiveSaveFailures++;
|
|
1131
|
+
// Stop after five failed batches; close() can still flush retained rows.
|
|
1132
|
+
if (this.consecutiveSaveFailures < 5 && this.db?.open) {
|
|
1133
|
+
this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
else {
|
|
1137
|
+
this.consecutiveSaveFailures = 0;
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1115
1140
|
/**
|
|
1116
1141
|
* Update pattern usage in SQLite
|
|
1117
1142
|
*/
|
|
@@ -69,6 +69,9 @@ export declare class UnifiedMemoryManager {
|
|
|
69
69
|
private initialized;
|
|
70
70
|
private vectorsLoaded;
|
|
71
71
|
private initPromise;
|
|
72
|
+
/** Tail of the FIFO write queue and how many writes are in it (#1263). */
|
|
73
|
+
private writeQueue;
|
|
74
|
+
private queuedWrites;
|
|
72
75
|
private preparedStatements;
|
|
73
76
|
private vectorIndex;
|
|
74
77
|
private crdtStore;
|
|
@@ -79,6 +82,8 @@ export declare class UnifiedMemoryManager {
|
|
|
79
82
|
private constructor();
|
|
80
83
|
static getInstance(config?: Partial<UnifiedMemoryConfig>): UnifiedMemoryManager;
|
|
81
84
|
static getInstanceAsync(config?: Partial<UnifiedMemoryConfig>): Promise<UnifiedMemoryManager>;
|
|
85
|
+
/** The shared instance when it is initialized; never creates one. */
|
|
86
|
+
static peekInitialized(): UnifiedMemoryManager | null;
|
|
82
87
|
static resetInstance(): void;
|
|
83
88
|
initialize(options?: {
|
|
84
89
|
signal?: AbortSignal;
|
|
@@ -115,6 +120,19 @@ export declare class UnifiedMemoryManager {
|
|
|
115
120
|
*/
|
|
116
121
|
private migrateToV11GoapExecutionSteps;
|
|
117
122
|
private loadVectorIndex;
|
|
123
|
+
/**
|
|
124
|
+
* Run a write on the shared connection (#1263). Under the MCP server's lock
|
|
125
|
+
* wait cap each attempt blocks for at most the cap and the write retries
|
|
126
|
+
* asynchronously, so a locked memory.db does not freeze the event loop. The
|
|
127
|
+
* write still fails with SQLITE_BUSY once the configured busyTimeout has
|
|
128
|
+
* passed. Without a cap (CLI) this is one attempt with the full busyTimeout.
|
|
129
|
+
*
|
|
130
|
+
* Writes run one at a time in call order (FIFO), so a later write to the
|
|
131
|
+
* same key cannot land before an earlier one that is still retrying. A
|
|
132
|
+
* failed write does not hold up the next. With nothing queued the first
|
|
133
|
+
* attempt runs synchronously, as the write did before.
|
|
134
|
+
*/
|
|
135
|
+
writeWhenUnlocked<T>(fn: () => T): Promise<T>;
|
|
118
136
|
kvSet(key: string, value: unknown, namespace?: string, ttl?: number): Promise<void>;
|
|
119
137
|
kvGet<T>(key: string, namespace?: string): Promise<T | undefined>;
|
|
120
138
|
kvDelete(key: string, namespace?: string): Promise<boolean>;
|
|
@@ -211,5 +229,19 @@ export declare class UnifiedMemoryManager {
|
|
|
211
229
|
}
|
|
212
230
|
export declare function getUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): UnifiedMemoryManager;
|
|
213
231
|
export declare function initializeUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): Promise<UnifiedMemoryManager>;
|
|
232
|
+
/**
|
|
233
|
+
* The shared memory.db connection when UnifiedMemory is already initialized,
|
|
234
|
+
* else null. Never opens it: callers that run before it keep their
|
|
235
|
+
* no-database behavior (#1298).
|
|
236
|
+
*/
|
|
237
|
+
export declare function getOpenUnifiedMemoryDatabase(): DatabaseType | null;
|
|
214
238
|
export declare function resetUnifiedMemory(): void;
|
|
239
|
+
/**
|
|
240
|
+
* Run a write on `db` through the shared manager's writeWhenUnlocked queue
|
|
241
|
+
* when `db` is that manager's connection (#1274), for modules that hold only
|
|
242
|
+
* the raw connection. The write then neither blocks the MCP server's event
|
|
243
|
+
* loop for the whole busy_timeout nor lands before an earlier queued write.
|
|
244
|
+
* A write on any other connection runs now, as before.
|
|
245
|
+
*/
|
|
246
|
+
export declare function writeWhenUnlockedOn<T>(db: DatabaseType, fn: () => T): Promise<T>;
|
|
215
247
|
//# sourceMappingURL=unified-memory.d.ts.map
|