agentic-qe 3.13.5 → 3.13.7
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 +73 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-UIYF2P3E.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-XDKGG2GP.js → agent-booster-wasm-UOGKPGRU.js} +2 -2
- package/dist/cli/chunks/{agent-handler-CTPXGR5P.js → agent-handler-Q5R4WGEK.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-MG5OV7AY.js → agent-memory-branch-NHG52BFD.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-CKTFFDJ4.js +2 -0
- package/dist/cli/chunks/{arena-FAHVOHNG.js → arena-IV4MYEYB.js} +2 -2
- package/dist/cli/chunks/{arena-NYO4EUNQ.js → arena-PMAHTPQB.js} +4 -4
- package/dist/cli/chunks/{audit-6544RL5D.js → audit-PVN2O2AU.js} +3 -3
- package/dist/cli/chunks/base-I3FB7F6R.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-MTEONNCQ.js → better-sqlite3-4KVBGOT6.js} +2 -2
- package/dist/cli/chunks/{brain-handler-DPKCUQUC.js → brain-handler-GSJJVXQW.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-SU2KHC2C.js → branch-enumerator-OQU3U6FI.js} +2 -2
- package/dist/cli/chunks/{browser-ITDN72YJ.js → browser-CXOMLHII.js} +2 -2
- package/dist/cli/chunks/browser-workflow-NQ5SWXEP.js +2 -0
- package/dist/cli/chunks/{chunk-EROQSNGD.js → chunk-224MLOCT.js} +2 -2
- package/dist/cli/chunks/{chunk-JX5IY2YK.js → chunk-2LJNRAUF.js} +1 -1
- package/dist/cli/chunks/{chunk-YGMCRJSC.js → chunk-2QAJDG4E.js} +2 -2
- package/dist/cli/chunks/{chunk-W7H46LAX.js → chunk-3KVQOIOI.js} +1 -1
- package/dist/cli/chunks/{chunk-6L5V3JGJ.js → chunk-3MDGSITG.js} +1 -1
- package/dist/cli/chunks/{chunk-AKZ6PWHM.js → chunk-3SBO6CDL.js} +2 -2
- package/dist/cli/chunks/{chunk-D4P6BKGF.js → chunk-45QJQSLD.js} +3 -3
- package/dist/cli/chunks/{chunk-EXXWOOUL.js → chunk-46H7GRXK.js} +3 -3
- package/dist/cli/chunks/{chunk-74QRMQFR.js → chunk-4LGZGIQL.js} +2 -2
- package/dist/cli/chunks/{chunk-KAVYTFAS.js → chunk-4PNXUJMO.js} +2 -2
- package/dist/cli/chunks/{chunk-3XKCC7LE.js → chunk-5EFWFB3L.js} +1 -1
- package/dist/cli/chunks/{chunk-JID7JO7K.js → chunk-5FWWHLQ3.js} +2 -2
- package/dist/cli/chunks/{chunk-CD4YWKJ2.js → chunk-5LGNTDKU.js} +2 -2
- package/dist/cli/chunks/{chunk-IS3P5VBL.js → chunk-5VE4GP67.js} +2 -2
- package/dist/cli/chunks/{chunk-YG45ZONW.js → chunk-6COKVAQM.js} +2 -2
- package/dist/cli/chunks/{chunk-EPMUAKU2.js → chunk-6F5UFJIA.js} +2 -2
- package/dist/cli/chunks/{chunk-IC5JGTM4.js → chunk-6VMQH2G3.js} +1 -1
- package/dist/cli/chunks/{chunk-AX4XIG4G.js → chunk-6YUBBESI.js} +2 -2
- package/dist/cli/chunks/{chunk-54C3OHES.js → chunk-75MQX436.js} +1 -1
- package/dist/cli/chunks/{chunk-THQ5ZBWP.js → chunk-7644FEFM.js} +2 -2
- package/dist/cli/chunks/{chunk-XNGYWOAK.js → chunk-77OIG5EX.js} +2 -2
- package/dist/cli/chunks/{chunk-WZI2REDL.js → chunk-7CYA7JBH.js} +2 -2
- package/dist/cli/chunks/{chunk-VRV7CXEM.js → chunk-7F2KPWTO.js} +1 -1
- package/dist/cli/chunks/{chunk-G47WJMHM.js → chunk-7XA2YLCK.js} +1 -1
- package/dist/cli/chunks/chunk-7ZSEZOEQ.js +15 -0
- package/dist/cli/chunks/{chunk-OGUPLNRY.js → chunk-A3QP6NWO.js} +1 -1
- package/dist/cli/chunks/{chunk-6ZCAZ3TR.js → chunk-A3XAWNOW.js} +2 -2
- package/dist/cli/chunks/{chunk-ZUIPUO7Q.js → chunk-ABWZERCN.js} +1 -1
- package/dist/cli/chunks/chunk-AF7EKTC3.js +2 -0
- package/dist/cli/chunks/{chunk-LELWVGN6.js → chunk-ALN3LOMK.js} +1 -1
- package/dist/cli/chunks/{chunk-UGER2PGN.js → chunk-AUJZUMJ2.js} +4 -4
- package/dist/cli/chunks/{chunk-ND7IWTVQ.js → chunk-AXHKDE6N.js} +2 -2
- package/dist/cli/chunks/{chunk-YFD6K7AS.js → chunk-BCF6GEFU.js} +23 -23
- package/dist/cli/chunks/{chunk-6H3I36DL.js → chunk-BP63FIKW.js} +2 -2
- package/dist/cli/chunks/{chunk-YSWI3APU.js → chunk-BUHD5KMR.js} +2 -2
- package/dist/cli/chunks/{chunk-PSD2L2JB.js → chunk-BX32VXZP.js} +2 -2
- package/dist/cli/chunks/{chunk-2QI3OJAC.js → chunk-C4LN2HKE.js} +3 -3
- package/dist/cli/chunks/{chunk-K55D3PAR.js → chunk-CMDMOKGH.js} +3 -3
- package/dist/cli/chunks/{chunk-HBYVYLBN.js → chunk-COM3MXBJ.js} +2 -2
- package/dist/cli/chunks/{chunk-42KQE5H6.js → chunk-CPDTUQGT.js} +3 -3
- package/dist/cli/chunks/{chunk-YU4U3BUY.js → chunk-CT5ZBNWB.js} +1 -1
- package/dist/cli/chunks/{chunk-TU5S33SD.js → chunk-DM3S4WNW.js} +2 -2
- package/dist/cli/chunks/{chunk-GHSP4AC5.js → chunk-DNAB56KC.js} +1 -1
- package/dist/cli/chunks/{chunk-VE5STFDP.js → chunk-DPEI46VM.js} +2 -2
- package/dist/cli/chunks/{chunk-DIRFXY3J.js → chunk-DRTXG2DG.js} +2 -2
- package/dist/cli/chunks/{chunk-SQDHFTGQ.js → chunk-DXLDSACI.js} +3 -3
- package/dist/cli/chunks/{chunk-SN57SNLU.js → chunk-EPYGDRMU.js} +2 -2
- package/dist/cli/chunks/{chunk-MX35PIGJ.js → chunk-EV7S4J35.js} +2 -2
- package/dist/cli/chunks/{chunk-OF5UL3FA.js → chunk-EXIV2D3R.js} +1 -1
- package/dist/cli/chunks/{chunk-2KPGJ4LO.js → chunk-EXXAQ3ZT.js} +2 -2
- package/dist/cli/chunks/{chunk-NVZ3QROA.js → chunk-F55LPGNQ.js} +2 -2
- package/dist/cli/chunks/{chunk-OJZ5LI3O.js → chunk-FFJ4T5P7.js} +1 -1
- package/dist/cli/chunks/{chunk-CHFZHORO.js → chunk-FT3I5BNS.js} +5 -5
- package/dist/cli/chunks/{chunk-OUWZTYRZ.js → chunk-FWU55NEY.js} +2 -2
- package/dist/cli/chunks/chunk-GAYYOIRM.js +2 -0
- package/dist/cli/chunks/{chunk-ZWLFEZQC.js → chunk-GC5TDDOT.js} +1 -1
- package/dist/cli/chunks/{chunk-5YIGAWBO.js → chunk-GDCPI6GS.js} +2 -2
- package/dist/cli/chunks/{chunk-DK7MV2W3.js → chunk-GIRACYH4.js} +1 -1
- package/dist/cli/chunks/{chunk-UUFLYBUO.js → chunk-GK6U2SQ2.js} +2 -2
- package/dist/cli/chunks/{chunk-2XZWYKXQ.js → chunk-GYQEFUG7.js} +1 -1
- package/dist/cli/chunks/{chunk-7LR4VP2I.js → chunk-H6SKPDAR.js} +1 -1
- package/dist/cli/chunks/{chunk-76OWM3ZO.js → chunk-H7GTLWPW.js} +2 -2
- package/dist/cli/chunks/{chunk-AJYJFIKO.js → chunk-HA6OYSPC.js} +2 -2
- package/dist/cli/chunks/{chunk-QLD2WVWN.js → chunk-HFZYYDV5.js} +2 -2
- package/dist/cli/chunks/{chunk-HZV3J4VQ.js → chunk-HG2QGS2M.js} +2 -2
- package/dist/cli/chunks/{chunk-PKCVQ2I4.js → chunk-HPSL2WBW.js} +1 -1
- package/dist/cli/chunks/{chunk-FW6OPDA6.js → chunk-HT4NYS4F.js} +1 -1
- package/dist/cli/chunks/{chunk-EGI6SKQD.js → chunk-HYQZHUGU.js} +4 -4
- package/dist/cli/chunks/{chunk-2RZ2S6YR.js → chunk-IE3FM6U3.js} +2 -2
- package/dist/cli/chunks/chunk-IVNRCF65.js +2 -0
- package/dist/cli/chunks/{chunk-FQPYD6YE.js → chunk-J5TFIVO2.js} +1 -1
- package/dist/cli/chunks/{chunk-43BXSNKU.js → chunk-J6EK6TC2.js} +2 -2
- package/dist/cli/chunks/{chunk-WDDU4I5Z.js → chunk-JDPYQDKI.js} +1 -1
- package/dist/cli/chunks/{chunk-ZE3WS57T.js → chunk-KS2HVX52.js} +2 -2
- package/dist/cli/chunks/{chunk-DFBJPOJR.js → chunk-L4I2JS74.js} +2 -2
- package/dist/cli/chunks/{chunk-2CF3XZAS.js → chunk-L74WFBDA.js} +2 -2
- package/dist/cli/chunks/{chunk-QIHKSRUZ.js → chunk-LBMJYLGR.js} +2 -2
- package/dist/cli/chunks/{chunk-S2EUFKHL.js → chunk-LHYN6YTN.js} +2 -2
- package/dist/cli/chunks/{chunk-JTUTZUED.js → chunk-LPUWOM7Y.js} +2 -2
- package/dist/cli/chunks/{chunk-6BEMH5K5.js → chunk-LY7UPFTJ.js} +1 -1
- package/dist/cli/chunks/{chunk-LARAXKTZ.js → chunk-MBLO72OZ.js} +2 -2
- package/dist/cli/chunks/{chunk-7A4EXSMN.js → chunk-ME4KYCIL.js} +2 -2
- package/dist/cli/chunks/{chunk-YIEMVVUH.js → chunk-MPGZE4PD.js} +2 -2
- package/dist/cli/chunks/{chunk-AKYOY5KR.js → chunk-MYCMFN33.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOD37GNG.js → chunk-N2PG6TYS.js} +3 -3
- package/dist/cli/chunks/{chunk-RKXN5TVS.js → chunk-NGBJH26X.js} +1 -1
- package/dist/cli/chunks/{chunk-HMNBNGNO.js → chunk-NLK5WBOS.js} +1 -1
- package/dist/cli/chunks/{chunk-PNDWHSZO.js → chunk-NQPS7FM5.js} +2 -2
- package/dist/cli/chunks/{chunk-GUO6JZMS.js → chunk-NY332ER7.js} +2 -2
- package/dist/cli/chunks/{chunk-64GTU5LR.js → chunk-OCAJJUPV.js} +2 -2
- package/dist/cli/chunks/{chunk-DVYNBMMP.js → chunk-ON57SN44.js} +2 -2
- package/dist/cli/chunks/{chunk-BAJK26EI.js → chunk-ORV3E477.js} +2 -2
- package/dist/cli/chunks/{chunk-BX5MY65W.js → chunk-P354IPGG.js} +1 -1
- package/dist/cli/chunks/{chunk-FYWTMDID.js → chunk-PTQYCACC.js} +2 -2
- package/dist/cli/chunks/{chunk-V2T7QEPV.js → chunk-Q6BYBRNA.js} +1 -1
- package/dist/cli/chunks/{chunk-Q3J5OTZ2.js → chunk-Q6LE7RY6.js} +1 -1
- package/dist/cli/chunks/{chunk-7SQXEYII.js → chunk-QDTIOZHQ.js} +2 -2
- package/dist/cli/chunks/{chunk-BI6OTPC6.js → chunk-QFHUATTI.js} +2 -2
- package/dist/cli/chunks/{chunk-KRCIC4JK.js → chunk-QGZLVH3E.js} +2 -2
- package/dist/cli/chunks/{chunk-RDHBUCKQ.js → chunk-QM2QPZOR.js} +10 -10
- package/dist/cli/chunks/{chunk-557BFPDB.js → chunk-QV7PAJHO.js} +2 -2
- package/dist/cli/chunks/{chunk-7M4X6WTF.js → chunk-QVQYDUMR.js} +2 -2
- package/dist/cli/chunks/{chunk-WLY2J6JP.js → chunk-QVXMF6DS.js} +2 -2
- package/dist/cli/chunks/{chunk-PEHSTLU7.js → chunk-RBFX56HK.js} +1 -1
- package/dist/cli/chunks/{chunk-6RV3W2UZ.js → chunk-RJ5G3IZY.js} +1 -1
- package/dist/cli/chunks/{chunk-Z5YNYVFO.js → chunk-RQ4GKJ6H.js} +1 -1
- package/dist/cli/chunks/{chunk-GITS44TM.js → chunk-RSJVIUDH.js} +2 -2
- package/dist/cli/chunks/{chunk-7PHF2JM3.js → chunk-S2SNDC2D.js} +1 -1
- package/dist/cli/chunks/{chunk-G73XY2NK.js → chunk-S3RAJZ2A.js} +2 -2
- package/dist/cli/chunks/{chunk-7BLXINIL.js → chunk-S6CNNFVF.js} +25 -25
- package/dist/cli/chunks/{chunk-L6I2Q6UQ.js → chunk-SI56H5MC.js} +1 -1
- package/dist/cli/chunks/{chunk-OQ4HOHBI.js → chunk-TMTWC6M6.js} +2 -2
- package/dist/cli/chunks/{chunk-BUN4WBPW.js → chunk-U5SAFRHE.js} +2 -2
- package/dist/cli/chunks/{chunk-NFE4RV2Q.js → chunk-ULKMV4XT.js} +2 -2
- package/dist/cli/chunks/{chunk-ELC3UEML.js → chunk-UMWO6V7E.js} +1 -1
- package/dist/cli/chunks/{chunk-R4VDRE75.js → chunk-UOFNGPDM.js} +1 -1
- package/dist/cli/chunks/{chunk-ZMA5OWIQ.js → chunk-UZRZCM2M.js} +4 -4
- package/dist/cli/chunks/{chunk-U5GGDJ44.js → chunk-VA4JFEA6.js} +2 -2
- package/dist/cli/chunks/{chunk-AAGOBPIJ.js → chunk-VHQZBUOP.js} +2 -2
- package/dist/cli/chunks/{chunk-3EWWP3AO.js → chunk-VLWOF654.js} +1 -1
- package/dist/cli/chunks/{chunk-UWM4CCK7.js → chunk-VPQP342J.js} +1 -1
- package/dist/cli/chunks/{chunk-M7456ZW5.js → chunk-VXTNM7PA.js} +1 -1
- package/dist/cli/chunks/{chunk-VNRWJ5JZ.js → chunk-W3T6WFQK.js} +2 -2
- package/dist/cli/chunks/{chunk-23AO43XW.js → chunk-X5R4M2PW.js} +1 -1
- package/dist/cli/chunks/{chunk-JOJ2UFHM.js → chunk-XI2EEMNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4Z7JP7CD.js → chunk-XNQWCGR5.js} +2 -2
- package/dist/cli/chunks/{chunk-RGBYJAKQ.js → chunk-XQWHBFR4.js} +3 -3
- package/dist/cli/chunks/{chunk-4E2NA2GY.js → chunk-XVCB7KRX.js} +2 -2
- package/dist/cli/chunks/{chunk-QHX7VLVT.js → chunk-XVZZETXQ.js} +2 -2
- package/dist/cli/chunks/{chunk-MF6OT43N.js → chunk-XZMMFR2F.js} +1 -1
- package/dist/cli/chunks/{chunk-APMLMLSL.js → chunk-XZP7AYHS.js} +1 -1
- package/dist/cli/chunks/{chunk-CPIAZGHF.js → chunk-Y2NOIPIR.js} +2 -2
- package/dist/cli/chunks/{chunk-5I5KMIFY.js → chunk-YIAAXMQN.js} +2 -2
- package/dist/cli/chunks/{chunk-L6H4MWVN.js → chunk-YJUME3OF.js} +2 -2
- package/dist/cli/chunks/{chunk-WSSFH23M.js → chunk-YSB6GH53.js} +1 -1
- package/dist/cli/chunks/{chunk-GWBV26SE.js → chunk-Z7KEY7LW.js} +2 -2
- package/dist/cli/chunks/{chunk-PDOL3FGO.js → chunk-ZIN7U72B.js} +3 -3
- package/dist/cli/chunks/{chunk-ZQ7XQLLV.js → chunk-ZRETM57V.js} +3 -3
- package/dist/cli/chunks/{chunk-XACF7ZLM.js → chunk-ZWOIE55K.js} +2 -2
- package/dist/cli/chunks/{ci-IRCNFD32.js → ci-CXCKYXKG.js} +2 -2
- package/dist/cli/chunks/{ci-output-NFOUNDJ2.js → ci-output-OOHIVRSH.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GB7SQRD2.js → circuit-breaker-32GSBTWS.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-STFKPPVL.js → claude-flow-setup-4S5KMQV7.js} +2 -2
- package/dist/cli/chunks/client-63SX5VIZ.js +2 -0
- package/dist/cli/chunks/{cline-installer-MLKKIHIV.js → cline-installer-WPHR3JAY.js} +2 -2
- package/dist/cli/chunks/{code-ZRCJC42H.js → code-UN2SHAOD.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-VWDYYQY2.js → code-index-extractor-ML7FPQRV.js} +2 -2
- package/dist/cli/chunks/{codex-installer-I5BTWYQV.js → codex-installer-CNQM7D2K.js} +2 -2
- package/dist/cli/chunks/{completions-5JCAFTQV.js → completions-ULBMFDYW.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-6JLLAPGO.js → complexity-analyzer-DNOF6MWS.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-YBOLMUZR.js → continuedev-installer-SALVVLBA.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-GDBJZBXS.js → copilot-installer-2QQT7KAX.js} +2 -2
- package/dist/cli/chunks/core-handlers-LMFAYPU2.js +2 -0
- package/dist/cli/chunks/{cost-tracker-NEAVGEZI.js → cost-tracker-KJHJMCPN.js} +2 -2
- package/dist/cli/chunks/{coverage-DXS5XNAA.js → coverage-A4XD3KK2.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-SVZLA5ZT.js +2 -0
- package/dist/cli/chunks/{cursor-installer-3KEMFIFA.js → cursor-installer-HKSSBI5E.js} +2 -2
- package/dist/cli/chunks/{daemon-JN377KTA.js → daemon-HMRQGUXY.js} +4 -4
- package/dist/cli/chunks/{daemon-FT2J6VY4.js → daemon-PHEIMUIL.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-EJFEWFXI.js → dag-attention-scheduler-WLUSL2PN.js} +2 -2
- package/dist/cli/chunks/{detect-E5MN6N3L.js → detect-CVP3I7EK.js} +2 -2
- package/dist/cli/chunks/{dist-node-ZFSAQMFD.js → dist-node-BGMG54IM.js} +2 -2
- package/dist/cli/chunks/{domain-handler-S7VFZ2MY.js → domain-handler-BBKVSCEY.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-LGHT3FN4.js → domain-transfer-YGSL3GPA.js} +2 -2
- package/dist/cli/chunks/dream-SHNPRLRM.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-OVQS6IKK.js → embed-and-insert-pattern-QSHUNRQG.js} +2 -2
- package/dist/cli/chunks/{eval-45UWDD2R.js → eval-K3EQBGVU.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-XDRJSNPY.js → experience-capture-middleware-EVQXI6U2.js} +3 -3
- package/dist/cli/chunks/{fast-paths-VEDCJL75.js → fast-paths-RCUTEKJN.js} +2 -2
- package/dist/cli/chunks/{feature-flags-TGA3NWVL.js → feature-flags-CG4UQ3QX.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NOTQVBLP.js → feature-flags-WNH7NIHC.js} +2 -2
- package/dist/cli/chunks/{file-discovery-AHMR6IGX.js → file-discovery-HEK73IOG.js} +2 -2
- package/dist/cli/chunks/{fleet-CQBUCH2S.js → fleet-DYJZVSGZ.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-SOZCIONJ.js → gnn-wrapper-562P4VXW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6XNV4DGM.js → heartbeat-handler-XHIRKGM2.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-U72YZ3NB.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-U2GLM5AE.js +2 -0
- package/dist/cli/chunks/hnsw-index-32LSC37N.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-UILVP37N.js → hnsw-legacy-bridge-H2PYZ2TT.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OHJQOSAH.js → hnswlib-node-3AJM5KVO.js} +2 -2
- package/dist/cli/chunks/{hooks-QVDOGEHG.js → hooks-N7F7Z362.js} +47 -47
- package/dist/cli/chunks/hybrid-router-4IEDWMTZ.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-YMVPBXZS.js → hypergraph-engine-MVY2ADYA.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-SHUNZXUK.js → hypergraph-handler-IOS5X4ZI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-22V4R3YH.js +2 -0
- package/dist/cli/chunks/{init-handler-JE5FYJAV.js → init-handler-UWEA63JI.js} +6 -6
- package/dist/cli/chunks/init-wizard-PPI7JDU6.js +2 -0
- package/dist/cli/chunks/kernel-PL2K5MLT.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TVP4YOOK.js → kilocode-installer-LUH2XG4P.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-XBSGANX7.js → kiro-installer-F2ZG3FIZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-AOE6FEQR.js +2 -0
- package/dist/cli/chunks/learning-XBMJWGAV.js +119 -0
- package/dist/cli/chunks/{llm-router-FXXJHARR.js → llm-router-DRX7E7XI.js} +4 -4
- package/dist/cli/chunks/llm-router-service-3XZI7TE5.js +2 -0
- package/dist/cli/chunks/{load-IVF6G2SK.js → load-Y4QJSQQS.js} +2 -2
- package/dist/cli/chunks/load-test-6DIMN4MM.js +2 -0
- package/dist/cli/chunks/{mcp-VXSDVG3H.js → mcp-62XB5F5Q.js} +2 -2
- package/dist/cli/chunks/{memory-BINJV3M6.js → memory-ONR7ZN3X.js} +7 -7
- package/dist/cli/chunks/memory-backend-UAMIFHQQ.js +2 -0
- package/dist/cli/chunks/memory-handlers-4IAS3VY7.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-RJHYK6JI.js → multi-model-executor-6IUW6I3H.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-VCTF5ETL.js → opencode-installer-W47DIP2D.js} +2 -2
- package/dist/cli/chunks/{orchestrator-5SKZ2BOK.js → orchestrator-FKO5AACT.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-35S3ZRS6.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-AY2DAOQO.js → pattern-usage-recorder-VEPEFTCF.js} +2 -2
- package/dist/cli/chunks/{pipeline-EMBMC75N.js → pipeline-RIITAMZ2.js} +2 -2
- package/dist/cli/chunks/{platform-GADIFXCI.js → platform-SA5TZEZD.js} +2 -2
- package/dist/cli/chunks/{plugin-Q234ZAAY.js → plugin-F4AN3WVB.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-CXXKYB2P.js → prime-radiant-advanced-wasm-Y35DFGMR.js} +2 -2
- package/dist/cli/chunks/protocol-executor-PHJMZT27.js +2 -0
- package/dist/cli/chunks/{protocol-handler-ZZRFBVNA.js → protocol-handler-UCURNXLA.js} +2 -2
- package/dist/cli/chunks/{prove-7674ATXK.js → prove-WS57IMPA.js} +2 -2
- package/dist/cli/chunks/provider-manager-TKDL73H3.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-DHEF6CTL.js +2 -0
- package/dist/cli/chunks/{quality-QCIGVN2S.js → quality-6UEGUSJX.js} +2 -2
- package/dist/cli/chunks/{quality-gate-AKV564GE.js → quality-gate-Z4FU2NR2.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-57MCIW2B.js +2 -0
- package/dist/cli/chunks/{real-embeddings-74POUVMX.js → real-embeddings-DFB2TSY3.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-INBL5AG7.js → roocode-installer-TVENBIIA.js} +2 -2
- package/dist/cli/chunks/router-V656FUDE.js +2 -0
- package/dist/cli/chunks/routing-feedback-77GLEBXR.js +2 -0
- package/dist/cli/chunks/{routing-handler-C7HMM7RL.js → routing-handler-LZFOVMDI.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-PT6LRVCW.js → ruvector-commands-HYSHR2XO.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-PRKROTP3.js → rvf-dual-writer-ZDCAEQDN.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-ZI2XW4UX.js → rvf-migration-adapter-64U4XRDC.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-5JTGP35V.js → rvf-migration-coordinator-C3WP56PE.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-34Q74G5N.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-3B5TZTFR.js → rvf-store-integrity-HNVPA6JZ.js} +2 -2
- package/dist/cli/chunks/safe-db-Y754OIYY.js +2 -0
- package/dist/cli/chunks/schedule-GMKXLREO.js +2 -0
- package/dist/cli/chunks/scheduler-OIHBKLRQ.js +2 -0
- package/dist/cli/chunks/{security-IMIWSAHW.js → security-KIR5E67V.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-UDKJNX6I.js → shared-rvf-adapter-AEMVXITE.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-FQOBQ6S5.js → shared-rvf-dual-writer-J55TEO2S.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-QLTL46UG.js +2 -0
- package/dist/cli/chunks/{status-handler-7WON7M7F.js → status-handler-65JO3QZE.js} +2 -2
- package/dist/cli/chunks/{structural-health-JTKTO3A4.js → structural-health-Y5ZIQWSV.js} +2 -2
- package/dist/cli/chunks/{sync-6ABYTAOL.js → sync-DCMEOJAW.js} +2 -2
- package/dist/cli/chunks/{sync-UJSHBY3B.js → sync-TSFE2JJR.js} +2 -2
- package/dist/cli/chunks/{task-handler-5TZNOCCB.js → task-handler-RWGEJWEH.js} +2 -2
- package/dist/cli/chunks/{task-handlers-G7ZUGBHM.js → task-handlers-BXS6YXRM.js} +3 -3
- package/dist/cli/chunks/{test-BSJ6MVTG.js → test-3W2FHMQX.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-OSJJXIYQ.js → test-scheduling-XNH4DWBN.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-MRNFR4YI.js → token-bootstrap-MB3MJMZM.js} +2 -2
- package/dist/cli/chunks/{token-usage-YQN7ND7G.js → token-usage-YO56DQAT.js} +2 -2
- package/dist/cli/chunks/{transformers-QL3AG25C.js → transformers-VQ6LTFGM.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-BECZRRZP.js → tree-sitter-wasm-parser-XSFCTQKS.js} +2 -2
- package/dist/cli/chunks/{types-FQSNLPWS.js → types-72CNMUHH.js} +2 -2
- package/dist/cli/chunks/unified-memory-EG7MANFS.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-GBZ5WSQU.js +2 -0
- package/dist/cli/chunks/unified-persistence-NZRIIHU5.js +2 -0
- package/dist/cli/chunks/{upgrade-2ICXXV6D.js → upgrade-P6ZEWWUQ.js} +2 -2
- package/dist/cli/chunks/{validate-LPAUH2F4.js → validate-Q6HN2RTN.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-VWVE2GM7.js → validate-swarm-JAOHXMJD.js} +2 -2
- package/dist/cli/chunks/{vibium-U3LBEI4K.js → vibium-2A7PDY4D.js} +2 -2
- package/dist/cli/chunks/visual-security-IEPJVARC.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-QGZXQPXU.js → web-tree-sitter-YE53Z4LF.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-GGLQJWUI.js → windsurf-installer-RPTAPUTS.js} +2 -2
- package/dist/cli/chunks/{witness-chain-47A2AXUS.js → witness-chain-CTWDOKUD.js} +2 -2
- package/dist/cli/chunks/witness-chain-ZNAEFUIY.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-FVS7UOWM.js → witness-key-manager-UC3ZLEZI.js} +2 -2
- package/dist/cli/chunks/{workflow-KIZPLTYW.js → workflow-ZETHCXEN.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-B4BRRXDJ.js +2 -0
- package/dist/cli/chunks/{wrappers-ER6XCMT6.js → wrappers-JJCXXF7Y.js} +2 -2
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +16 -27
- package/dist/cli/commands/learning.js +66 -0
- package/dist/cli/commands/memory.js +3 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +2 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +14 -0
- package/dist/kernel/hybrid-backend.d.ts +3 -2
- package/dist/kernel/hybrid-backend.js +6 -2
- package/dist/kernel/interfaces.d.ts +12 -2
- package/dist/kernel/memory-backend.d.ts +3 -2
- package/dist/kernel/memory-backend.js +11 -1
- package/dist/kernel/native-hnsw-backend.js +8 -6
- package/dist/kernel/unified-memory.d.ts +3 -1
- package/dist/kernel/unified-memory.js +59 -9
- package/dist/learning/real-embeddings.js +1 -1
- package/dist/learning/sqlite-persistence.d.ts +3 -2
- package/dist/learning/sqlite-persistence.js +7 -8
- package/dist/mcp/bundle.js +277 -277
- package/dist/mcp/handlers/memory-handlers.d.ts +2 -0
- package/dist/mcp/handlers/memory-handlers.js +15 -7
- package/dist/mcp/types.d.ts +10 -0
- package/package.json +4 -2
- package/dist/cli/chunks/adapter-QGJAFSG5.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-ZU735SG7.js +0 -2
- package/dist/cli/chunks/base-EKTX2PRE.js +0 -2
- package/dist/cli/chunks/browser-workflow-BUPIMI3E.js +0 -2
- package/dist/cli/chunks/chunk-BKI5NFQ5.js +0 -2
- package/dist/cli/chunks/chunk-ELKWYWTD.js +0 -2
- package/dist/cli/chunks/chunk-WAELEQP5.js +0 -2
- package/dist/cli/chunks/chunk-X53GJW2E.js +0 -15
- package/dist/cli/chunks/client-M4WF22UT.js +0 -2
- package/dist/cli/chunks/core-handlers-3MNFXL44.js +0 -2
- package/dist/cli/chunks/cross-domain-router-Q5X6ZLJY.js +0 -2
- package/dist/cli/chunks/dream-5QB6JABW.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-ZRLIMPKO.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-R4VAEQ2B.js +0 -2
- package/dist/cli/chunks/hnsw-index-GTUOS6DF.js +0 -2
- package/dist/cli/chunks/hybrid-router-CYEXFWDT.js +0 -2
- package/dist/cli/chunks/impact-analyzer-HMJ7LAXR.js +0 -2
- package/dist/cli/chunks/init-wizard-OIK6S3PQ.js +0 -2
- package/dist/cli/chunks/kernel-NZCGR72Y.js +0 -2
- package/dist/cli/chunks/knowledge-graph-HA7XW46B.js +0 -2
- package/dist/cli/chunks/learning-O4ZXQVRE.js +0 -117
- package/dist/cli/chunks/llm-router-service-FVGQSXYC.js +0 -2
- package/dist/cli/chunks/load-test-IQTO35GE.js +0 -2
- package/dist/cli/chunks/memory-backend-YGSOJ7SI.js +0 -2
- package/dist/cli/chunks/memory-handlers-BJNFJZFP.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4WN5O2PF.js +0 -2
- package/dist/cli/chunks/protocol-executor-EYTJXPXY.js +0 -2
- package/dist/cli/chunks/provider-manager-TM3JHYLL.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-6JLFP3HE.js +0 -2
- package/dist/cli/chunks/queen-coordinator-OKGOKGHI.js +0 -2
- package/dist/cli/chunks/router-J45OF4SP.js +0 -2
- package/dist/cli/chunks/routing-feedback-VTZFH57X.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-BDPUBFNP.js +0 -2
- package/dist/cli/chunks/safe-db-FHJBWJIB.js +0 -2
- package/dist/cli/chunks/schedule-LP7YYT4P.js +0 -2
- package/dist/cli/chunks/scheduler-BOZWGKJG.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-TDM36AHF.js +0 -2
- package/dist/cli/chunks/unified-memory-6PHUOZRH.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-WYSFH3PS.js +0 -2
- package/dist/cli/chunks/unified-persistence-QBGHDCCO.js +0 -2
- package/dist/cli/chunks/visual-security-LH7DRCDS.js +0 -2
- package/dist/cli/chunks/witness-chain-2BDZOPJ2.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UYOPFK2T.js +0 -2
|
@@ -59,6 +59,7 @@ export class ExperienceReplay {
|
|
|
59
59
|
db = null;
|
|
60
60
|
prepared = new Map();
|
|
61
61
|
initialized = false;
|
|
62
|
+
initializationPromise = null;
|
|
62
63
|
// Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
|
|
63
64
|
hnswIndex;
|
|
64
65
|
// Mapping from HNSW numeric IDs to experience string IDs
|
|
@@ -95,6 +96,19 @@ export class ExperienceReplay {
|
|
|
95
96
|
async initialize() {
|
|
96
97
|
if (this.initialized)
|
|
97
98
|
return;
|
|
99
|
+
if (this.initializationPromise)
|
|
100
|
+
return this.initializationPromise;
|
|
101
|
+
this.initializationPromise = this.initializeOnce();
|
|
102
|
+
try {
|
|
103
|
+
await this.initializationPromise;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// Allow a later caller to retry after a failed initialization.
|
|
107
|
+
this.initializationPromise = null;
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async initializeOnce() {
|
|
98
112
|
this.unifiedMemory = getUnifiedMemory();
|
|
99
113
|
await this.unifiedMemory.initialize();
|
|
100
114
|
this.db = this.unifiedMemory.getDatabase();
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* This is a facade over UnifiedMemoryManager that maintains
|
|
10
10
|
* backward compatibility with existing MemoryBackend interface.
|
|
11
11
|
*/
|
|
12
|
-
import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult } from './interfaces';
|
|
12
|
+
import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult, VectorSearchProvenance } from './interfaces';
|
|
13
13
|
import { UnifiedMemoryManager } from './unified-memory';
|
|
14
14
|
/**
|
|
15
15
|
* SQLite connection configuration (legacy - kept for API compatibility)
|
|
@@ -123,7 +123,8 @@ export declare class HybridMemoryBackend implements MemoryBackend {
|
|
|
123
123
|
* Vector similarity search
|
|
124
124
|
* Now uses unified memory's persistent vector storage
|
|
125
125
|
*/
|
|
126
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
126
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
127
|
+
getVectorSearchProvenance(): VectorSearchProvenance;
|
|
127
128
|
/**
|
|
128
129
|
* Store vector embedding
|
|
129
130
|
* Now persists to unified memory.db
|
|
@@ -154,9 +154,9 @@ export class HybridMemoryBackend {
|
|
|
154
154
|
* Vector similarity search
|
|
155
155
|
* Now uses unified memory's persistent vector storage
|
|
156
156
|
*/
|
|
157
|
-
async vectorSearch(embedding, k) {
|
|
157
|
+
async vectorSearch(embedding, k, keyPrefix) {
|
|
158
158
|
this.ensureInitialized();
|
|
159
|
-
const results = await this.unifiedMemory.vectorSearch(embedding, k);
|
|
159
|
+
const results = await this.unifiedMemory.vectorSearch(embedding, k, undefined, keyPrefix);
|
|
160
160
|
// Convert to VectorSearchResult format
|
|
161
161
|
return results.map(r => ({
|
|
162
162
|
key: r.id,
|
|
@@ -164,6 +164,10 @@ export class HybridMemoryBackend {
|
|
|
164
164
|
metadata: r.metadata,
|
|
165
165
|
}));
|
|
166
166
|
}
|
|
167
|
+
getVectorSearchProvenance() {
|
|
168
|
+
this.ensureInitialized();
|
|
169
|
+
return this.unifiedMemory.getVectorSearchProvenance();
|
|
170
|
+
}
|
|
167
171
|
/**
|
|
168
172
|
* Store vector embedding
|
|
169
173
|
* Now persists to unified memory.db
|
|
@@ -215,8 +215,10 @@ export interface MemoryBackend extends Initializable, Disposable {
|
|
|
215
215
|
has(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
216
216
|
/** Search by pattern (`options.namespace` mirrors `get`). */
|
|
217
217
|
search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
|
|
218
|
-
/** Vector similarity search (HNSW) */
|
|
219
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
218
|
+
/** Vector similarity search (HNSW), optionally scoped by logical key prefix. */
|
|
219
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
220
|
+
/** Describe the index and guarantees used by vectorSearch. */
|
|
221
|
+
getVectorSearchProvenance?(): VectorSearchProvenance;
|
|
220
222
|
/** Store vector embedding */
|
|
221
223
|
storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
|
|
222
224
|
/**
|
|
@@ -232,6 +234,14 @@ export interface MemoryBackend extends Initializable, Disposable {
|
|
|
232
234
|
*/
|
|
233
235
|
hasCodeIntelligenceIndex(): Promise<boolean>;
|
|
234
236
|
}
|
|
237
|
+
export interface VectorSearchProvenance {
|
|
238
|
+
backend: 'in-memory' | 'native-hnsw' | 'progressive-hnsw';
|
|
239
|
+
indexType: 'flat' | 'hnsw';
|
|
240
|
+
approximate: boolean;
|
|
241
|
+
estimatedRecall: number;
|
|
242
|
+
/** Largest K covered by request-independent HNSW traversal breadth. */
|
|
243
|
+
qualifiedMaxK?: number;
|
|
244
|
+
}
|
|
235
245
|
export interface StoreOptions {
|
|
236
246
|
ttl?: number;
|
|
237
247
|
namespace?: string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Agentic QE v3 - Memory Backend
|
|
3
3
|
* Hybrid memory implementation (in-memory + optional persistence)
|
|
4
4
|
*/
|
|
5
|
-
import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult } from './interfaces';
|
|
5
|
+
import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult, VectorSearchProvenance } from './interfaces';
|
|
6
6
|
export declare class InMemoryBackend implements MemoryBackend {
|
|
7
7
|
private store;
|
|
8
8
|
private vectors;
|
|
@@ -14,7 +14,8 @@ export declare class InMemoryBackend implements MemoryBackend {
|
|
|
14
14
|
delete(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
15
15
|
has(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
16
16
|
search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
|
|
17
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
17
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
18
|
+
getVectorSearchProvenance(): VectorSearchProvenance;
|
|
18
19
|
storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
|
|
19
20
|
private buildKey;
|
|
20
21
|
private cleanup;
|
|
@@ -76,9 +76,11 @@ export class InMemoryBackend {
|
|
|
76
76
|
}
|
|
77
77
|
return results;
|
|
78
78
|
}
|
|
79
|
-
async vectorSearch(embedding, k) {
|
|
79
|
+
async vectorSearch(embedding, k, keyPrefix) {
|
|
80
80
|
const results = [];
|
|
81
81
|
for (const [key, entry] of this.vectors.entries()) {
|
|
82
|
+
if (keyPrefix && !key.startsWith(keyPrefix))
|
|
83
|
+
continue;
|
|
82
84
|
const score = cosineSimilarity(embedding, entry.embedding);
|
|
83
85
|
results.push({ key, score, metadata: entry.metadata });
|
|
84
86
|
}
|
|
@@ -87,6 +89,14 @@ export class InMemoryBackend {
|
|
|
87
89
|
.sort((a, b) => b.score - a.score)
|
|
88
90
|
.slice(0, k);
|
|
89
91
|
}
|
|
92
|
+
getVectorSearchProvenance() {
|
|
93
|
+
return {
|
|
94
|
+
backend: 'in-memory',
|
|
95
|
+
indexType: 'flat',
|
|
96
|
+
approximate: false,
|
|
97
|
+
estimatedRecall: 1,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
90
100
|
async storeVector(key, embedding, metadata) {
|
|
91
101
|
this.vectors.set(key, { embedding, metadata });
|
|
92
102
|
}
|
|
@@ -275,12 +275,14 @@ export class NativeHnswBackend {
|
|
|
275
275
|
const start = performance.now();
|
|
276
276
|
const normalizedQuery = this.normalizeVector(query);
|
|
277
277
|
const actualK = Math.min(k, this.liveIds.size);
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
|
|
278
|
+
// Keep the HNSW traversal breadth independent of the requested result
|
|
279
|
+
// count throughout the index's qualified range. hnswlib effectively uses
|
|
280
|
+
// max(k, efSearch) as its candidate breadth, so forwarding small K values
|
|
281
|
+
// directly can make top-20 and top-100 explore different graphs. Query a
|
|
282
|
+
// stable efSearch-sized pool with 2x defensive dedup headroom, then
|
|
283
|
+
// truncate. Requests above efSearch remain approximate and use 2x their K.
|
|
284
|
+
const searchBreadth = Math.min(this.liveIds.size, Math.max(actualK, this.config.efSearch) * 2);
|
|
285
|
+
const native = this.nativeIndex.searchKnn(toNumberArray(normalizedQuery), searchBreadth);
|
|
284
286
|
// Convert hnswlib-node distances to similarity scores.
|
|
285
287
|
// cosine space: distance = 1 - cos_sim, so similarity = 1 - distance
|
|
286
288
|
// l2 space: distance = sum((x_i - y_i)^2), no clean similarity;
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* - unified-memory.ts: UnifiedMemoryManager class (this file, facade)
|
|
23
23
|
*/
|
|
24
24
|
import { type Database as DatabaseType, type Statement } from 'better-sqlite3';
|
|
25
|
+
import type { VectorSearchProvenance } from './interfaces.js';
|
|
25
26
|
export { validateTableName, ALLOWED_TABLE_NAMES } from '../shared/sql-safety.js';
|
|
26
27
|
export { BinaryHeap, UnifiedHnswIndex, createHnswIndex } from './unified-memory-hnsw.js';
|
|
27
28
|
import { type CRDTStore, type CRDTStoreState, type CRDTStoreDelta } from '../memory/crdt/index.js';
|
|
@@ -157,11 +158,12 @@ export declare class UnifiedMemoryManager {
|
|
|
157
158
|
metadata?: unknown;
|
|
158
159
|
} | undefined>;
|
|
159
160
|
vectorDelete(id: string): Promise<boolean>;
|
|
160
|
-
vectorSearch(query: number[], k?: number, namespace?: string): Promise<Array<{
|
|
161
|
+
vectorSearch(query: number[], k?: number, namespace?: string, keyPrefix?: string): Promise<Array<{
|
|
161
162
|
id: string;
|
|
162
163
|
score: number;
|
|
163
164
|
metadata?: unknown;
|
|
164
165
|
}>>;
|
|
166
|
+
getVectorSearchProvenance(): VectorSearchProvenance;
|
|
165
167
|
vectorCount(namespace?: string): Promise<number>;
|
|
166
168
|
/**
|
|
167
169
|
* Count rows in a table. Used by fleet_status to report learning metrics.
|
|
@@ -27,7 +27,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
|
|
|
27
27
|
import * as fs from 'fs';
|
|
28
28
|
import * as os from 'os';
|
|
29
29
|
import * as path from 'path';
|
|
30
|
-
import { MEMORY_CONSTANTS } from './constants.js';
|
|
30
|
+
import { HNSW_CONSTANTS, MEMORY_CONSTANTS } from './constants.js';
|
|
31
31
|
import { LoggerFactory } from '../logging/index.js';
|
|
32
32
|
import { HashChainGate } from '../integrations/ruvector/proof-gate.js';
|
|
33
33
|
const logger = LoggerFactory.create('unified-memory');
|
|
@@ -733,23 +733,52 @@ export class UnifiedMemoryManager {
|
|
|
733
733
|
this.vectorIndex.remove(id);
|
|
734
734
|
return result.changes > 0;
|
|
735
735
|
}
|
|
736
|
-
async vectorSearch(query, k = 10, namespace) {
|
|
736
|
+
async vectorSearch(query, k = 10, namespace, keyPrefix) {
|
|
737
737
|
this.ensureInitialized();
|
|
738
|
+
if (!Number.isInteger(k) || k <= 0)
|
|
739
|
+
return [];
|
|
738
740
|
if (!this.vectorsLoaded) {
|
|
739
741
|
await this.loadVectorIndex();
|
|
740
742
|
}
|
|
741
|
-
|
|
743
|
+
// Logical namespaces are encoded in vector ids (`namespace:key`), while
|
|
744
|
+
// the vectors table namespace identifies the physical backend. Widen the
|
|
745
|
+
// ANN query until enough logical matches are found so global top-K results
|
|
746
|
+
// cannot hide a valid namespaced hit.
|
|
747
|
+
const indexSize = this.vectorIndex.size();
|
|
748
|
+
// Unscoped searches need exactly K ranked candidates. Let the backend use
|
|
749
|
+
// its request-independent efSearch breadth so changing K within that
|
|
750
|
+
// qualified range cannot change the traversal. Logical namespace filters
|
|
751
|
+
// still require oversampling and iterative expansion because matching
|
|
752
|
+
// keys may be hidden behind global neighbors from other namespaces.
|
|
753
|
+
const isScoped = Boolean(namespace || keyPrefix);
|
|
754
|
+
let candidateCount = Math.min(indexSize, Math.max(isScoped ? k * 2 : k, 1));
|
|
755
|
+
const namespaceRows = namespace
|
|
756
|
+
? this.db.prepare('SELECT id, namespace, metadata FROM vectors WHERE namespace = ?').all(namespace)
|
|
757
|
+
: undefined;
|
|
758
|
+
const namespaceMap = namespaceRows
|
|
759
|
+
? new Map(namespaceRows.map(row => [row.id, row]))
|
|
760
|
+
: undefined;
|
|
761
|
+
let results = this.vectorIndex.search(query, candidateCount);
|
|
762
|
+
while (isScoped &&
|
|
763
|
+
results.filter(result => (!keyPrefix || result.id.startsWith(keyPrefix)) &&
|
|
764
|
+
(!namespaceMap || namespaceMap.has(result.id))).length < k &&
|
|
765
|
+
candidateCount < indexSize) {
|
|
766
|
+
candidateCount = Math.min(indexSize, candidateCount * 2);
|
|
767
|
+
results = this.vectorIndex.search(query, candidateCount);
|
|
768
|
+
}
|
|
742
769
|
if (results.length === 0)
|
|
743
770
|
return [];
|
|
744
|
-
const
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
771
|
+
const metadataMap = namespaceMap ?? (() => {
|
|
772
|
+
const ids = results.map(r => r.id);
|
|
773
|
+
const placeholders = ids.map(() => '?').join(',');
|
|
774
|
+
const rows = this.db.prepare(`SELECT id, namespace, metadata FROM vectors WHERE id IN (${placeholders})`).all(...ids);
|
|
775
|
+
return new Map(rows.map(row => [row.id, row]));
|
|
776
|
+
})();
|
|
748
777
|
if (namespace) {
|
|
749
778
|
const filteredResults = [];
|
|
750
779
|
for (const result of results) {
|
|
751
780
|
const row = metadataMap.get(result.id);
|
|
752
|
-
if (row && row.namespace === namespace) {
|
|
781
|
+
if (row && row.namespace === namespace && (!keyPrefix || result.id.startsWith(keyPrefix))) {
|
|
753
782
|
filteredResults.push({
|
|
754
783
|
id: result.id, score: result.score,
|
|
755
784
|
metadata: row.metadata ? safeJsonParse(row.metadata) : undefined,
|
|
@@ -760,7 +789,10 @@ export class UnifiedMemoryManager {
|
|
|
760
789
|
}
|
|
761
790
|
return filteredResults;
|
|
762
791
|
}
|
|
763
|
-
|
|
792
|
+
const scopedResults = keyPrefix
|
|
793
|
+
? results.filter(result => result.id.startsWith(keyPrefix)).slice(0, k)
|
|
794
|
+
: results.slice(0, k);
|
|
795
|
+
return scopedResults.map(result => {
|
|
764
796
|
const row = metadataMap.get(result.id);
|
|
765
797
|
return {
|
|
766
798
|
id: result.id, score: result.score,
|
|
@@ -768,6 +800,24 @@ export class UnifiedMemoryManager {
|
|
|
768
800
|
};
|
|
769
801
|
});
|
|
770
802
|
}
|
|
803
|
+
getVectorSearchProvenance() {
|
|
804
|
+
const provider = this.vectorIndex.getProvider();
|
|
805
|
+
if (!provider.isNativeBackend()) {
|
|
806
|
+
return {
|
|
807
|
+
backend: 'progressive-hnsw',
|
|
808
|
+
indexType: 'flat',
|
|
809
|
+
approximate: false,
|
|
810
|
+
estimatedRecall: 1,
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
return {
|
|
814
|
+
backend: 'native-hnsw',
|
|
815
|
+
indexType: 'hnsw',
|
|
816
|
+
approximate: true,
|
|
817
|
+
estimatedRecall: this.vectorIndex.recall(),
|
|
818
|
+
qualifiedMaxK: HNSW_CONSTANTS.EF_SEARCH,
|
|
819
|
+
};
|
|
820
|
+
}
|
|
771
821
|
async vectorCount(namespace) {
|
|
772
822
|
this.ensureInitialized();
|
|
773
823
|
if (namespace) {
|
|
@@ -137,7 +137,7 @@ async function initializeModel(config = {}) {
|
|
|
137
137
|
catch {
|
|
138
138
|
throw new Error('In-process embeddings require the optional package "@huggingface/transformers", ' +
|
|
139
139
|
'which is not installed. Either run `npm install @huggingface/transformers`, or ' +
|
|
140
|
-
'configure an embedding endpoint (EmbeddingConfig.endpoint /
|
|
140
|
+
'configure an embedding endpoint (EmbeddingConfig.endpoint / AQE_EMBEDDER_ENDPOINT) ' +
|
|
141
141
|
'so no local model is loaded.');
|
|
142
142
|
}
|
|
143
143
|
pipeline = transformers.pipeline;
|
|
@@ -224,8 +224,9 @@ export declare class SQLitePatternStore {
|
|
|
224
224
|
};
|
|
225
225
|
/**
|
|
226
226
|
* Backfill embeddings for patterns that don't have them.
|
|
227
|
-
* Uses real all-MiniLM-L6-v2 transformer embeddings via @
|
|
228
|
-
*
|
|
227
|
+
* Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
|
|
228
|
+
* or the configured external endpoint. Refuses hash proxies because mixing
|
|
229
|
+
* embedding spaces makes semantic retrieval results invalid.
|
|
229
230
|
* Skips bench/test patterns (id LIKE 'bench-%').
|
|
230
231
|
*
|
|
231
232
|
* @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
|
|
@@ -923,8 +923,9 @@ export class SQLitePatternStore {
|
|
|
923
923
|
}
|
|
924
924
|
/**
|
|
925
925
|
* Backfill embeddings for patterns that don't have them.
|
|
926
|
-
* Uses real all-MiniLM-L6-v2 transformer embeddings via @
|
|
927
|
-
*
|
|
926
|
+
* Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
|
|
927
|
+
* or the configured external endpoint. Refuses hash proxies because mixing
|
|
928
|
+
* embedding spaces makes semantic retrieval results invalid.
|
|
928
929
|
* Skips bench/test patterns (id LIKE 'bench-%').
|
|
929
930
|
*
|
|
930
931
|
* @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
|
|
@@ -957,7 +958,7 @@ export class SQLitePatternStore {
|
|
|
957
958
|
let processed = 0;
|
|
958
959
|
let skipped = 0;
|
|
959
960
|
let errors = 0;
|
|
960
|
-
|
|
961
|
+
const method = 'transformer';
|
|
961
962
|
// Process in batches: compute embeddings async, then insert in sync transaction
|
|
962
963
|
for (let i = 0; i < patternsWithout.length; i += batchSize) {
|
|
963
964
|
const batch = patternsWithout.slice(i, i + batchSize);
|
|
@@ -996,11 +997,9 @@ export class SQLitePatternStore {
|
|
|
996
997
|
throw new Error(`[SQLitePatternStore] external embedder endpoint failed during backfill; ` +
|
|
997
998
|
`aborting to protect HNSW index. Original error: ${toErrorMessage(e)}`);
|
|
998
999
|
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
method = 'hash-fallback';
|
|
1003
|
-
embeddings = textsWithIds.map(t => hashEmbedding(t.text, dimension));
|
|
1000
|
+
throw new Error(`[SQLitePatternStore] semantic embedding unavailable; refusing to write hash proxies. ` +
|
|
1001
|
+
`Install @huggingface/transformers or configure AQE_EMBEDDER_ENDPOINT. ` +
|
|
1002
|
+
`Original error: ${toErrorMessage(e)}`);
|
|
1004
1003
|
}
|
|
1005
1004
|
// Insert computed embeddings in a sync transaction
|
|
1006
1005
|
const embeddingTag = method === 'transformer' ? 'transformer-backfill' : 'hash-backfill';
|