agentdb 1.0.0

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.
Files changed (361) hide show
  1. package/LICENSE +38 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/LICENSE-MIT +21 -0
  4. package/README.md +953 -0
  5. package/bin/agentdb.js +485 -0
  6. package/bin/plugin-cli-wrapper.mjs +21 -0
  7. package/dist/cache/query-cache.d.ts +105 -0
  8. package/dist/cache/query-cache.d.ts.map +1 -0
  9. package/dist/cache/query-cache.js +224 -0
  10. package/dist/cache/query-cache.js.map +1 -0
  11. package/dist/cache/query-cache.mjs +219 -0
  12. package/dist/cli/cache/query-cache.d.ts +104 -0
  13. package/dist/cli/cache/query-cache.js +244 -0
  14. package/dist/cli/cli/db-commands.d.ts +48 -0
  15. package/dist/cli/cli/db-commands.js +613 -0
  16. package/dist/cli/commands.d.ts +7 -0
  17. package/dist/cli/commands.d.ts.map +1 -0
  18. package/dist/cli/commands.js +113 -0
  19. package/dist/cli/commands.js.map +1 -0
  20. package/dist/cli/commands.mjs +104 -0
  21. package/dist/cli/core/backend-interface.d.ts +70 -0
  22. package/dist/cli/core/backend-interface.js +15 -0
  23. package/dist/cli/core/native-backend.d.ts +140 -0
  24. package/dist/cli/core/native-backend.js +432 -0
  25. package/dist/cli/core/vector-db.d.ts +126 -0
  26. package/dist/cli/core/vector-db.js +338 -0
  27. package/dist/cli/core/wasm-backend.d.ts +95 -0
  28. package/dist/cli/core/wasm-backend.js +418 -0
  29. package/dist/cli/db-commands.d.ts +49 -0
  30. package/dist/cli/db-commands.d.ts.map +1 -0
  31. package/dist/cli/db-commands.js +533 -0
  32. package/dist/cli/db-commands.js.map +1 -0
  33. package/dist/cli/db-commands.mjs +522 -0
  34. package/dist/cli/generator.d.ts +11 -0
  35. package/dist/cli/generator.d.ts.map +1 -0
  36. package/dist/cli/generator.js +567 -0
  37. package/dist/cli/generator.js.map +1 -0
  38. package/dist/cli/generator.mjs +527 -0
  39. package/dist/cli/help.d.ts +18 -0
  40. package/dist/cli/help.d.ts.map +1 -0
  41. package/dist/cli/help.js +676 -0
  42. package/dist/cli/help.js.map +1 -0
  43. package/dist/cli/help.mjs +667 -0
  44. package/dist/cli/index/hnsw.d.ts +164 -0
  45. package/dist/cli/index/hnsw.js +558 -0
  46. package/dist/cli/plugin-cli.d.ts +7 -0
  47. package/dist/cli/plugin-cli.d.ts.map +1 -0
  48. package/dist/cli/plugin-cli.js +295 -0
  49. package/dist/cli/plugin-cli.js.map +1 -0
  50. package/dist/cli/plugin-cli.mjs +289 -0
  51. package/dist/cli/quantization/product-quantization.d.ts +108 -0
  52. package/dist/cli/quantization/product-quantization.js +350 -0
  53. package/dist/cli/query/query-builder.d.ts +322 -0
  54. package/dist/cli/query/query-builder.js +600 -0
  55. package/dist/cli/templates.d.ts +14 -0
  56. package/dist/cli/templates.d.ts.map +1 -0
  57. package/dist/cli/templates.js +182 -0
  58. package/dist/cli/templates.js.map +1 -0
  59. package/dist/cli/templates.mjs +176 -0
  60. package/dist/cli/types/index.d.ts +116 -0
  61. package/dist/cli/types/index.js +5 -0
  62. package/dist/cli/types.d.ts +91 -0
  63. package/dist/cli/types.d.ts.map +1 -0
  64. package/dist/cli/types.js +6 -0
  65. package/dist/cli/types.js.map +1 -0
  66. package/dist/cli/types.mjs +4 -0
  67. package/dist/cli/wizard/index.d.ts +6 -0
  68. package/dist/cli/wizard/index.d.ts.map +1 -0
  69. package/dist/cli/wizard/index.js +138 -0
  70. package/dist/cli/wizard/index.js.map +1 -0
  71. package/dist/cli/wizard/index.mjs +131 -0
  72. package/dist/cli/wizard/prompts.d.ts +11 -0
  73. package/dist/cli/wizard/prompts.d.ts.map +1 -0
  74. package/dist/cli/wizard/prompts.js +482 -0
  75. package/dist/cli/wizard/prompts.js.map +1 -0
  76. package/dist/cli/wizard/prompts.mjs +470 -0
  77. package/dist/cli/wizard/validator.d.ts +13 -0
  78. package/dist/cli/wizard/validator.d.ts.map +1 -0
  79. package/dist/cli/wizard/validator.js +234 -0
  80. package/dist/cli/wizard/validator.js.map +1 -0
  81. package/dist/cli/wizard/validator.mjs +224 -0
  82. package/dist/core/backend-interface.d.ts +71 -0
  83. package/dist/core/backend-interface.d.ts.map +1 -0
  84. package/dist/core/backend-interface.js +16 -0
  85. package/dist/core/backend-interface.js.map +1 -0
  86. package/dist/core/backend-interface.mjs +12 -0
  87. package/dist/core/native-backend.d.ts +141 -0
  88. package/dist/core/native-backend.d.ts.map +1 -0
  89. package/dist/core/native-backend.js +457 -0
  90. package/dist/core/native-backend.js.map +1 -0
  91. package/dist/core/native-backend.mjs +449 -0
  92. package/dist/core/vector-db.d.ts +127 -0
  93. package/dist/core/vector-db.d.ts.map +1 -0
  94. package/dist/core/vector-db.js +266 -0
  95. package/dist/core/vector-db.js.map +1 -0
  96. package/dist/core/vector-db.mjs +261 -0
  97. package/dist/core/wasm-backend.d.ts +96 -0
  98. package/dist/core/wasm-backend.d.ts.map +1 -0
  99. package/dist/core/wasm-backend.js +393 -0
  100. package/dist/core/wasm-backend.js.map +1 -0
  101. package/dist/core/wasm-backend.mjs +385 -0
  102. package/dist/index/hnsw-optimized.d.ts +75 -0
  103. package/dist/index/hnsw-optimized.d.ts.map +1 -0
  104. package/dist/index/hnsw-optimized.js +412 -0
  105. package/dist/index/hnsw-optimized.js.map +1 -0
  106. package/dist/index/hnsw-optimized.mjs +407 -0
  107. package/dist/index/hnsw.d.ts +165 -0
  108. package/dist/index/hnsw.d.ts.map +1 -0
  109. package/dist/index/hnsw.js +521 -0
  110. package/dist/index/hnsw.js.map +1 -0
  111. package/dist/index/hnsw.mjs +516 -0
  112. package/dist/index.d.ts +57 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +82 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/index.mjs +63 -0
  117. package/dist/mcp-server.d.ts +27 -0
  118. package/dist/mcp-server.d.ts.map +1 -0
  119. package/dist/mcp-server.js +789 -0
  120. package/dist/mcp-server.js.map +1 -0
  121. package/dist/mcp-server.mjs +784 -0
  122. package/dist/plugins/base-plugin.d.ts +114 -0
  123. package/dist/plugins/base-plugin.d.ts.map +1 -0
  124. package/dist/plugins/base-plugin.js +313 -0
  125. package/dist/plugins/base-plugin.js.map +1 -0
  126. package/dist/plugins/base-plugin.mjs +275 -0
  127. package/dist/plugins/implementations/active-learning.d.ts +135 -0
  128. package/dist/plugins/implementations/active-learning.d.ts.map +1 -0
  129. package/dist/plugins/implementations/active-learning.js +372 -0
  130. package/dist/plugins/implementations/active-learning.js.map +1 -0
  131. package/dist/plugins/implementations/active-learning.mjs +367 -0
  132. package/dist/plugins/implementations/actor-critic.d.ts +64 -0
  133. package/dist/plugins/implementations/actor-critic.d.ts.map +1 -0
  134. package/dist/plugins/implementations/actor-critic.js +363 -0
  135. package/dist/plugins/implementations/actor-critic.js.map +1 -0
  136. package/dist/plugins/implementations/actor-critic.mjs +358 -0
  137. package/dist/plugins/implementations/adversarial-training.d.ts +133 -0
  138. package/dist/plugins/implementations/adversarial-training.d.ts.map +1 -0
  139. package/dist/plugins/implementations/adversarial-training.js +409 -0
  140. package/dist/plugins/implementations/adversarial-training.js.map +1 -0
  141. package/dist/plugins/implementations/adversarial-training.mjs +404 -0
  142. package/dist/plugins/implementations/curriculum-learning.d.ts +132 -0
  143. package/dist/plugins/implementations/curriculum-learning.d.ts.map +1 -0
  144. package/dist/plugins/implementations/curriculum-learning.js +354 -0
  145. package/dist/plugins/implementations/curriculum-learning.js.map +1 -0
  146. package/dist/plugins/implementations/curriculum-learning.mjs +349 -0
  147. package/dist/plugins/implementations/decision-transformer.d.ts +77 -0
  148. package/dist/plugins/implementations/decision-transformer.d.ts.map +1 -0
  149. package/dist/plugins/implementations/decision-transformer.js +422 -0
  150. package/dist/plugins/implementations/decision-transformer.js.map +1 -0
  151. package/dist/plugins/implementations/decision-transformer.mjs +417 -0
  152. package/dist/plugins/implementations/federated-learning.d.ts +126 -0
  153. package/dist/plugins/implementations/federated-learning.d.ts.map +1 -0
  154. package/dist/plugins/implementations/federated-learning.js +436 -0
  155. package/dist/plugins/implementations/federated-learning.js.map +1 -0
  156. package/dist/plugins/implementations/federated-learning.mjs +431 -0
  157. package/dist/plugins/implementations/index.d.ts +30 -0
  158. package/dist/plugins/implementations/index.d.ts.map +1 -0
  159. package/dist/plugins/implementations/index.js +45 -0
  160. package/dist/plugins/implementations/index.js.map +1 -0
  161. package/dist/plugins/implementations/index.mjs +31 -0
  162. package/dist/plugins/implementations/multi-task-learning.d.ts +115 -0
  163. package/dist/plugins/implementations/multi-task-learning.d.ts.map +1 -0
  164. package/dist/plugins/implementations/multi-task-learning.js +369 -0
  165. package/dist/plugins/implementations/multi-task-learning.js.map +1 -0
  166. package/dist/plugins/implementations/multi-task-learning.mjs +364 -0
  167. package/dist/plugins/implementations/neural-architecture-search.d.ts +148 -0
  168. package/dist/plugins/implementations/neural-architecture-search.d.ts.map +1 -0
  169. package/dist/plugins/implementations/neural-architecture-search.js +379 -0
  170. package/dist/plugins/implementations/neural-architecture-search.js.map +1 -0
  171. package/dist/plugins/implementations/neural-architecture-search.mjs +374 -0
  172. package/dist/plugins/implementations/q-learning.d.ts +98 -0
  173. package/dist/plugins/implementations/q-learning.d.ts.map +1 -0
  174. package/dist/plugins/implementations/q-learning.js +435 -0
  175. package/dist/plugins/implementations/q-learning.js.map +1 -0
  176. package/dist/plugins/implementations/q-learning.mjs +430 -0
  177. package/dist/plugins/implementations/sarsa.d.ts +103 -0
  178. package/dist/plugins/implementations/sarsa.d.ts.map +1 -0
  179. package/dist/plugins/implementations/sarsa.js +347 -0
  180. package/dist/plugins/implementations/sarsa.js.map +1 -0
  181. package/dist/plugins/implementations/sarsa.mjs +342 -0
  182. package/dist/plugins/index.d.ts +107 -0
  183. package/dist/plugins/index.d.ts.map +1 -0
  184. package/dist/plugins/index.js +179 -0
  185. package/dist/plugins/index.js.map +1 -0
  186. package/dist/plugins/index.mjs +168 -0
  187. package/dist/plugins/interface.d.ts +439 -0
  188. package/dist/plugins/interface.d.ts.map +1 -0
  189. package/dist/plugins/interface.js +12 -0
  190. package/dist/plugins/interface.js.map +1 -0
  191. package/dist/plugins/interface.mjs +10 -0
  192. package/dist/plugins/learning-plugin.interface.d.ts +257 -0
  193. package/dist/plugins/learning-plugin.interface.d.ts.map +1 -0
  194. package/dist/plugins/learning-plugin.interface.js +7 -0
  195. package/dist/plugins/learning-plugin.interface.js.map +1 -0
  196. package/dist/plugins/learning-plugin.interface.mjs +5 -0
  197. package/dist/plugins/plugin-exports.d.ts +71 -0
  198. package/dist/plugins/plugin-exports.d.ts.map +1 -0
  199. package/dist/plugins/plugin-exports.js +78 -0
  200. package/dist/plugins/plugin-exports.js.map +1 -0
  201. package/dist/plugins/plugin-exports.mjs +69 -0
  202. package/dist/plugins/registry.d.ts +206 -0
  203. package/dist/plugins/registry.d.ts.map +1 -0
  204. package/dist/plugins/registry.js +365 -0
  205. package/dist/plugins/registry.js.map +1 -0
  206. package/dist/plugins/registry.mjs +356 -0
  207. package/dist/plugins/validator.d.ts +63 -0
  208. package/dist/plugins/validator.d.ts.map +1 -0
  209. package/dist/plugins/validator.js +464 -0
  210. package/dist/plugins/validator.js.map +1 -0
  211. package/dist/plugins/validator.mjs +458 -0
  212. package/dist/quantization/binary-quantization.d.ts +104 -0
  213. package/dist/quantization/binary-quantization.d.ts.map +1 -0
  214. package/dist/quantization/binary-quantization.js +246 -0
  215. package/dist/quantization/binary-quantization.js.map +1 -0
  216. package/dist/quantization/binary-quantization.mjs +240 -0
  217. package/dist/quantization/optimized-pq.d.ts +138 -0
  218. package/dist/quantization/optimized-pq.d.ts.map +1 -0
  219. package/dist/quantization/optimized-pq.js +320 -0
  220. package/dist/quantization/optimized-pq.js.map +1 -0
  221. package/dist/quantization/optimized-pq.mjs +313 -0
  222. package/dist/quantization/product-quantization.d.ts +109 -0
  223. package/dist/quantization/product-quantization.d.ts.map +1 -0
  224. package/dist/quantization/product-quantization.js +287 -0
  225. package/dist/quantization/product-quantization.js.map +1 -0
  226. package/dist/quantization/product-quantization.mjs +282 -0
  227. package/dist/quantization/scalar-quantization.d.ts +100 -0
  228. package/dist/quantization/scalar-quantization.d.ts.map +1 -0
  229. package/dist/quantization/scalar-quantization.js +324 -0
  230. package/dist/quantization/scalar-quantization.js.map +1 -0
  231. package/dist/quantization/scalar-quantization.mjs +319 -0
  232. package/dist/query/index.d.ts +6 -0
  233. package/dist/query/index.d.ts.map +1 -0
  234. package/dist/query/index.js +9 -0
  235. package/dist/query/index.js.map +1 -0
  236. package/dist/query/index.mjs +4 -0
  237. package/dist/query/query-builder.d.ts +323 -0
  238. package/dist/query/query-builder.d.ts.map +1 -0
  239. package/dist/query/query-builder.js +524 -0
  240. package/dist/query/query-builder.js.map +1 -0
  241. package/dist/query/query-builder.mjs +519 -0
  242. package/dist/reasoning/context-synthesizer.d.ts +57 -0
  243. package/dist/reasoning/context-synthesizer.d.ts.map +1 -0
  244. package/dist/reasoning/context-synthesizer.js +224 -0
  245. package/dist/reasoning/context-synthesizer.js.map +1 -0
  246. package/dist/reasoning/context-synthesizer.mjs +219 -0
  247. package/dist/reasoning/experience-curator.d.ts +66 -0
  248. package/dist/reasoning/experience-curator.d.ts.map +1 -0
  249. package/dist/reasoning/experience-curator.js +288 -0
  250. package/dist/reasoning/experience-curator.js.map +1 -0
  251. package/dist/reasoning/experience-curator.mjs +283 -0
  252. package/dist/reasoning/memory-optimizer.d.ts +69 -0
  253. package/dist/reasoning/memory-optimizer.d.ts.map +1 -0
  254. package/dist/reasoning/memory-optimizer.js +331 -0
  255. package/dist/reasoning/memory-optimizer.js.map +1 -0
  256. package/dist/reasoning/memory-optimizer.mjs +326 -0
  257. package/dist/reasoning/pattern-matcher.d.ts +59 -0
  258. package/dist/reasoning/pattern-matcher.d.ts.map +1 -0
  259. package/dist/reasoning/pattern-matcher.js +229 -0
  260. package/dist/reasoning/pattern-matcher.js.map +1 -0
  261. package/dist/reasoning/pattern-matcher.mjs +224 -0
  262. package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +118 -0
  263. package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +1 -0
  264. package/dist/reasoningbank/adapter/agentdb-adapter.js +477 -0
  265. package/dist/reasoningbank/adapter/agentdb-adapter.js.map +1 -0
  266. package/dist/reasoningbank/adapter/types.d.ts +113 -0
  267. package/dist/reasoningbank/adapter/types.d.ts.map +1 -0
  268. package/dist/reasoningbank/adapter/types.js +9 -0
  269. package/dist/reasoningbank/adapter/types.js.map +1 -0
  270. package/dist/reasoningbank/cli/commands.d.ts +16 -0
  271. package/dist/reasoningbank/cli/commands.d.ts.map +1 -0
  272. package/dist/reasoningbank/cli/commands.js +272 -0
  273. package/dist/reasoningbank/cli/commands.js.map +1 -0
  274. package/dist/reasoningbank/mcp/agentdb-tools.d.ts +319 -0
  275. package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +1 -0
  276. package/dist/reasoningbank/mcp/agentdb-tools.js +301 -0
  277. package/dist/reasoningbank/mcp/agentdb-tools.js.map +1 -0
  278. package/dist/reasoningbank/migration/migrate.d.ts +25 -0
  279. package/dist/reasoningbank/migration/migrate.d.ts.map +1 -0
  280. package/dist/reasoningbank/migration/migrate.js +178 -0
  281. package/dist/reasoningbank/migration/migrate.js.map +1 -0
  282. package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +37 -0
  283. package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +1 -0
  284. package/dist/reasoningbank/reasoning/context-synthesizer.js +114 -0
  285. package/dist/reasoningbank/reasoning/context-synthesizer.js.map +1 -0
  286. package/dist/reasoningbank/reasoning/experience-curator.d.ts +39 -0
  287. package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +1 -0
  288. package/dist/reasoningbank/reasoning/experience-curator.js +98 -0
  289. package/dist/reasoningbank/reasoning/experience-curator.js.map +1 -0
  290. package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +44 -0
  291. package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +1 -0
  292. package/dist/reasoningbank/reasoning/memory-optimizer.js +184 -0
  293. package/dist/reasoningbank/reasoning/memory-optimizer.js.map +1 -0
  294. package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +40 -0
  295. package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +1 -0
  296. package/dist/reasoningbank/reasoning/pattern-matcher.js +87 -0
  297. package/dist/reasoningbank/reasoning/pattern-matcher.js.map +1 -0
  298. package/dist/reasoningbank/sync/quic-sync.d.ts +77 -0
  299. package/dist/reasoningbank/sync/quic-sync.d.ts.map +1 -0
  300. package/dist/reasoningbank/sync/quic-sync.js +165 -0
  301. package/dist/reasoningbank/sync/quic-sync.js.map +1 -0
  302. package/dist/sync/conflict.d.ts +78 -0
  303. package/dist/sync/conflict.d.ts.map +1 -0
  304. package/dist/sync/conflict.js +202 -0
  305. package/dist/sync/conflict.js.map +1 -0
  306. package/dist/sync/conflict.mjs +196 -0
  307. package/dist/sync/coordinator.d.ts +111 -0
  308. package/dist/sync/coordinator.d.ts.map +1 -0
  309. package/dist/sync/coordinator.js +256 -0
  310. package/dist/sync/coordinator.js.map +1 -0
  311. package/dist/sync/coordinator.mjs +250 -0
  312. package/dist/sync/delta.d.ts +81 -0
  313. package/dist/sync/delta.d.ts.map +1 -0
  314. package/dist/sync/delta.js +245 -0
  315. package/dist/sync/delta.js.map +1 -0
  316. package/dist/sync/delta.mjs +238 -0
  317. package/dist/sync/index.d.ts +11 -0
  318. package/dist/sync/index.d.ts.map +1 -0
  319. package/dist/sync/index.js +22 -0
  320. package/dist/sync/index.js.map +1 -0
  321. package/dist/sync/index.mjs +9 -0
  322. package/dist/sync/quic-sync.d.ts +81 -0
  323. package/dist/sync/quic-sync.d.ts.map +1 -0
  324. package/dist/sync/quic-sync.js +329 -0
  325. package/dist/sync/quic-sync.js.map +1 -0
  326. package/dist/sync/quic-sync.mjs +323 -0
  327. package/dist/sync/types.d.ts +168 -0
  328. package/dist/sync/types.d.ts.map +1 -0
  329. package/dist/sync/types.js +8 -0
  330. package/dist/sync/types.js.map +1 -0
  331. package/dist/sync/types.mjs +6 -0
  332. package/dist/types/index.d.ts +117 -0
  333. package/dist/types/index.d.ts.map +1 -0
  334. package/dist/types/index.js +6 -0
  335. package/dist/types/index.js.map +1 -0
  336. package/dist/types/index.mjs +4 -0
  337. package/dist/wasm-loader.d.ts +32 -0
  338. package/dist/wasm-loader.d.ts.map +1 -0
  339. package/dist/wasm-loader.js +75 -0
  340. package/dist/wasm-loader.js.map +1 -0
  341. package/dist/wasm-loader.mjs +64 -0
  342. package/examples/adaptive-learning.ts +284 -0
  343. package/examples/browser/README.md +732 -0
  344. package/examples/browser/adaptive-recommendations/index.html +427 -0
  345. package/examples/browser/collaborative-filtering/index.html +310 -0
  346. package/examples/browser/continual-learning/index.html +736 -0
  347. package/examples/browser/experience-replay/index.html +616 -0
  348. package/examples/browser/index.html +369 -0
  349. package/examples/browser/meta-learning/index.html +789 -0
  350. package/examples/browser/neuro-symbolic/index.html +692 -0
  351. package/examples/browser/pattern-learning/index.html +620 -0
  352. package/examples/browser/quantum-inspired/index.html +728 -0
  353. package/examples/browser/rag/index.html +624 -0
  354. package/examples/browser/swarm-intelligence/index.html +811 -0
  355. package/examples/browser-basic.html +170 -0
  356. package/examples/hnsw-example.ts +148 -0
  357. package/examples/node-basic.js +70 -0
  358. package/examples/quic-sync-example.ts +310 -0
  359. package/examples/quick-start.js +68 -0
  360. package/examples/wasm-example.ts +222 -0
  361. package/package.json +118 -0
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * Query Cache with LRU eviction for ultra-fast repeated queries
4
+ *
5
+ * Provides 50-100x speedup for repeated vector searches by caching results.
6
+ * Uses LRU (Least Recently Used) eviction strategy with TTL (Time To Live).
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const cache = new QueryCache({ maxSize: 1000, ttl: 300000 }); // 5 min TTL
11
+ *
12
+ * // First query: miss, executes full search
13
+ * const results1 = cache.get(key) ?? performSearch();
14
+ * cache.set(key, results1);
15
+ *
16
+ * // Second query: hit, returns cached results (sub-millisecond)
17
+ * const results2 = cache.get(key); // 50-100x faster
18
+ * ```
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.QueryCache = void 0;
22
+ class QueryCache {
23
+ constructor(config = {}) {
24
+ this.cache = new Map();
25
+ // Statistics
26
+ this.stats = {
27
+ hits: 0,
28
+ misses: 0,
29
+ evictions: 0,
30
+ totalAccessTime: 0,
31
+ accessCount: 0
32
+ };
33
+ this.config = {
34
+ maxSize: config.maxSize ?? 1000,
35
+ ttl: config.ttl ?? 300000, // 5 minutes
36
+ enableStats: config.enableStats ?? true
37
+ };
38
+ }
39
+ /**
40
+ * Generate cache key from query parameters
41
+ */
42
+ static generateKey(embedding, k, metric, threshold) {
43
+ // Use first 8 dimensions for key (balance between uniqueness and performance)
44
+ const prefix = embedding.slice(0, 8).map(v => v.toFixed(4)).join(',');
45
+ return `${prefix}:${k}:${metric ?? 'cosine'}:${threshold ?? 0}`;
46
+ }
47
+ /**
48
+ * Get cached results if available and not expired
49
+ */
50
+ get(key) {
51
+ const startTime = performance.now();
52
+ const entry = this.cache.get(key);
53
+ if (!entry) {
54
+ this.recordMiss(startTime);
55
+ return null;
56
+ }
57
+ // Check expiry
58
+ const now = Date.now();
59
+ if (now > entry.expiry) {
60
+ this.cache.delete(key);
61
+ this.recordMiss(startTime);
62
+ return null;
63
+ }
64
+ // Update access metadata
65
+ entry.lastAccessed = now;
66
+ entry.accessCount++;
67
+ this.recordHit(startTime);
68
+ return entry.results;
69
+ }
70
+ /**
71
+ * Store results in cache with LRU eviction
72
+ */
73
+ set(key, results) {
74
+ // Evict if at capacity
75
+ if (this.cache.size >= this.config.maxSize) {
76
+ this.evictLRU();
77
+ }
78
+ const now = Date.now();
79
+ this.cache.set(key, {
80
+ results,
81
+ expiry: now + this.config.ttl,
82
+ lastAccessed: now,
83
+ accessCount: 1
84
+ });
85
+ }
86
+ /**
87
+ * Evict least recently used entry
88
+ */
89
+ evictLRU() {
90
+ let oldestKey = null;
91
+ let oldestTime = Infinity;
92
+ for (const [key, entry] of this.cache.entries()) {
93
+ if (entry.lastAccessed < oldestTime) {
94
+ oldestTime = entry.lastAccessed;
95
+ oldestKey = key;
96
+ }
97
+ }
98
+ if (oldestKey) {
99
+ this.cache.delete(oldestKey);
100
+ if (this.config.enableStats) {
101
+ this.stats.evictions++;
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * Clear all cached entries
107
+ */
108
+ clear() {
109
+ this.cache.clear();
110
+ }
111
+ /**
112
+ * Clear expired entries
113
+ */
114
+ clearExpired() {
115
+ const now = Date.now();
116
+ const toDelete = [];
117
+ for (const [key, entry] of this.cache.entries()) {
118
+ if (now > entry.expiry) {
119
+ toDelete.push(key);
120
+ }
121
+ }
122
+ toDelete.forEach(key => this.cache.delete(key));
123
+ }
124
+ /**
125
+ * Get cache statistics
126
+ */
127
+ getStats() {
128
+ const total = this.stats.hits + this.stats.misses;
129
+ return {
130
+ hits: this.stats.hits,
131
+ misses: this.stats.misses,
132
+ hitRate: total > 0 ? this.stats.hits / total : 0,
133
+ size: this.cache.size,
134
+ evictions: this.stats.evictions,
135
+ avgAccessTime: this.stats.accessCount > 0
136
+ ? this.stats.totalAccessTime / this.stats.accessCount
137
+ : 0
138
+ };
139
+ }
140
+ /**
141
+ * Reset statistics
142
+ */
143
+ resetStats() {
144
+ this.stats = {
145
+ hits: 0,
146
+ misses: 0,
147
+ evictions: 0,
148
+ totalAccessTime: 0,
149
+ accessCount: 0
150
+ };
151
+ }
152
+ recordHit(startTime) {
153
+ if (this.config.enableStats) {
154
+ this.stats.hits++;
155
+ this.stats.totalAccessTime += performance.now() - startTime;
156
+ this.stats.accessCount++;
157
+ }
158
+ }
159
+ recordMiss(startTime) {
160
+ if (this.config.enableStats) {
161
+ this.stats.misses++;
162
+ this.stats.totalAccessTime += performance.now() - startTime;
163
+ this.stats.accessCount++;
164
+ }
165
+ }
166
+ /**
167
+ * Get current cache size
168
+ */
169
+ get size() {
170
+ return this.cache.size;
171
+ }
172
+ /**
173
+ * Check if cache has key
174
+ */
175
+ has(key) {
176
+ const entry = this.cache.get(key);
177
+ if (!entry)
178
+ return false;
179
+ // Check expiry
180
+ if (Date.now() > entry.expiry) {
181
+ this.cache.delete(key);
182
+ return false;
183
+ }
184
+ return true;
185
+ }
186
+ /**
187
+ * Delete specific entry
188
+ */
189
+ delete(key) {
190
+ return this.cache.delete(key);
191
+ }
192
+ /**
193
+ * Get all cache keys
194
+ */
195
+ keys() {
196
+ return Array.from(this.cache.keys());
197
+ }
198
+ /**
199
+ * Get cache configuration
200
+ */
201
+ getConfig() {
202
+ return { ...this.config };
203
+ }
204
+ /**
205
+ * Update cache configuration
206
+ */
207
+ updateConfig(config) {
208
+ if (config.maxSize !== undefined) {
209
+ this.config.maxSize = config.maxSize;
210
+ // Evict excess entries if new size is smaller
211
+ while (this.cache.size > this.config.maxSize) {
212
+ this.evictLRU();
213
+ }
214
+ }
215
+ if (config.ttl !== undefined) {
216
+ this.config.ttl = config.ttl;
217
+ }
218
+ if (config.enableStats !== undefined) {
219
+ this.config.enableStats = config.enableStats;
220
+ }
221
+ }
222
+ }
223
+ exports.QueryCache = QueryCache;
224
+ //# sourceMappingURL=query-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache.js","sourceRoot":"","sources":["../../src/cache/query-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Query Cache with LRU eviction for ultra-fast repeated queries
3
+ *
4
+ * Provides 50-100x speedup for repeated vector searches by caching results.
5
+ * Uses LRU (Least Recently Used) eviction strategy with TTL (Time To Live).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const cache = new QueryCache({ maxSize: 1000, ttl: 300000 }); // 5 min TTL
10
+ *
11
+ * // First query: miss, executes full search
12
+ * const results1 = cache.get(key) ?? performSearch();
13
+ * cache.set(key, results1);
14
+ *
15
+ * // Second query: hit, returns cached results (sub-millisecond)
16
+ * const results2 = cache.get(key); // 50-100x faster
17
+ * ```
18
+ */
19
+ export class QueryCache {
20
+ constructor(config = {}) {
21
+ this.cache = new Map();
22
+ // Statistics
23
+ this.stats = {
24
+ hits: 0,
25
+ misses: 0,
26
+ evictions: 0,
27
+ totalAccessTime: 0,
28
+ accessCount: 0
29
+ };
30
+ this.config = {
31
+ maxSize: config.maxSize ?? 1000,
32
+ ttl: config.ttl ?? 300000, // 5 minutes
33
+ enableStats: config.enableStats ?? true
34
+ };
35
+ }
36
+ /**
37
+ * Generate cache key from query parameters
38
+ */
39
+ static generateKey(embedding, k, metric, threshold) {
40
+ // Use first 8 dimensions for key (balance between uniqueness and performance)
41
+ const prefix = embedding.slice(0, 8).map(v => v.toFixed(4)).join(',');
42
+ return `${prefix}:${k}:${metric ?? 'cosine'}:${threshold ?? 0}`;
43
+ }
44
+ /**
45
+ * Get cached results if available and not expired
46
+ */
47
+ get(key) {
48
+ const startTime = performance.now();
49
+ const entry = this.cache.get(key);
50
+ if (!entry) {
51
+ this.recordMiss(startTime);
52
+ return null;
53
+ }
54
+ // Check expiry
55
+ const now = Date.now();
56
+ if (now > entry.expiry) {
57
+ this.cache.delete(key);
58
+ this.recordMiss(startTime);
59
+ return null;
60
+ }
61
+ // Update access metadata
62
+ entry.lastAccessed = now;
63
+ entry.accessCount++;
64
+ this.recordHit(startTime);
65
+ return entry.results;
66
+ }
67
+ /**
68
+ * Store results in cache with LRU eviction
69
+ */
70
+ set(key, results) {
71
+ // Evict if at capacity
72
+ if (this.cache.size >= this.config.maxSize) {
73
+ this.evictLRU();
74
+ }
75
+ const now = Date.now();
76
+ this.cache.set(key, {
77
+ results,
78
+ expiry: now + this.config.ttl,
79
+ lastAccessed: now,
80
+ accessCount: 1
81
+ });
82
+ }
83
+ /**
84
+ * Evict least recently used entry
85
+ */
86
+ evictLRU() {
87
+ let oldestKey = null;
88
+ let oldestTime = Infinity;
89
+ for (const [key, entry] of this.cache.entries()) {
90
+ if (entry.lastAccessed < oldestTime) {
91
+ oldestTime = entry.lastAccessed;
92
+ oldestKey = key;
93
+ }
94
+ }
95
+ if (oldestKey) {
96
+ this.cache.delete(oldestKey);
97
+ if (this.config.enableStats) {
98
+ this.stats.evictions++;
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Clear all cached entries
104
+ */
105
+ clear() {
106
+ this.cache.clear();
107
+ }
108
+ /**
109
+ * Clear expired entries
110
+ */
111
+ clearExpired() {
112
+ const now = Date.now();
113
+ const toDelete = [];
114
+ for (const [key, entry] of this.cache.entries()) {
115
+ if (now > entry.expiry) {
116
+ toDelete.push(key);
117
+ }
118
+ }
119
+ toDelete.forEach(key => this.cache.delete(key));
120
+ }
121
+ /**
122
+ * Get cache statistics
123
+ */
124
+ getStats() {
125
+ const total = this.stats.hits + this.stats.misses;
126
+ return {
127
+ hits: this.stats.hits,
128
+ misses: this.stats.misses,
129
+ hitRate: total > 0 ? this.stats.hits / total : 0,
130
+ size: this.cache.size,
131
+ evictions: this.stats.evictions,
132
+ avgAccessTime: this.stats.accessCount > 0
133
+ ? this.stats.totalAccessTime / this.stats.accessCount
134
+ : 0
135
+ };
136
+ }
137
+ /**
138
+ * Reset statistics
139
+ */
140
+ resetStats() {
141
+ this.stats = {
142
+ hits: 0,
143
+ misses: 0,
144
+ evictions: 0,
145
+ totalAccessTime: 0,
146
+ accessCount: 0
147
+ };
148
+ }
149
+ recordHit(startTime) {
150
+ if (this.config.enableStats) {
151
+ this.stats.hits++;
152
+ this.stats.totalAccessTime += performance.now() - startTime;
153
+ this.stats.accessCount++;
154
+ }
155
+ }
156
+ recordMiss(startTime) {
157
+ if (this.config.enableStats) {
158
+ this.stats.misses++;
159
+ this.stats.totalAccessTime += performance.now() - startTime;
160
+ this.stats.accessCount++;
161
+ }
162
+ }
163
+ /**
164
+ * Get current cache size
165
+ */
166
+ get size() {
167
+ return this.cache.size;
168
+ }
169
+ /**
170
+ * Check if cache has key
171
+ */
172
+ has(key) {
173
+ const entry = this.cache.get(key);
174
+ if (!entry)
175
+ return false;
176
+ // Check expiry
177
+ if (Date.now() > entry.expiry) {
178
+ this.cache.delete(key);
179
+ return false;
180
+ }
181
+ return true;
182
+ }
183
+ /**
184
+ * Delete specific entry
185
+ */
186
+ delete(key) {
187
+ return this.cache.delete(key);
188
+ }
189
+ /**
190
+ * Get all cache keys
191
+ */
192
+ keys() {
193
+ return Array.from(this.cache.keys());
194
+ }
195
+ /**
196
+ * Get cache configuration
197
+ */
198
+ getConfig() {
199
+ return { ...this.config };
200
+ }
201
+ /**
202
+ * Update cache configuration
203
+ */
204
+ updateConfig(config) {
205
+ if (config.maxSize !== undefined) {
206
+ this.config.maxSize = config.maxSize;
207
+ // Evict excess entries if new size is smaller
208
+ while (this.cache.size > this.config.maxSize) {
209
+ this.evictLRU();
210
+ }
211
+ }
212
+ if (config.ttl !== undefined) {
213
+ this.config.ttl = config.ttl;
214
+ }
215
+ if (config.enableStats !== undefined) {
216
+ this.config.enableStats = config.enableStats;
217
+ }
218
+ }
219
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Query Cache with LRU eviction for ultra-fast repeated queries
3
+ *
4
+ * Provides 50-100x speedup for repeated vector searches by caching results.
5
+ * Uses LRU (Least Recently Used) eviction strategy with TTL (Time To Live).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const cache = new QueryCache({ maxSize: 1000, ttl: 300000 }); // 5 min TTL
10
+ *
11
+ * // First query: miss, executes full search
12
+ * const results1 = cache.get(key) ?? performSearch();
13
+ * cache.set(key, results1);
14
+ *
15
+ * // Second query: hit, returns cached results (sub-millisecond)
16
+ * const results2 = cache.get(key); // 50-100x faster
17
+ * ```
18
+ */
19
+ export interface QueryCacheConfig {
20
+ /** Maximum number of cached queries (default: 1000) */
21
+ maxSize: number;
22
+ /** Time-to-live in milliseconds (default: 300000 = 5 minutes) */
23
+ ttl: number;
24
+ /** Enable cache statistics tracking (default: true) */
25
+ enableStats: boolean;
26
+ }
27
+ export interface CacheEntry<T> {
28
+ results: T;
29
+ expiry: number;
30
+ lastAccessed: number;
31
+ accessCount: number;
32
+ }
33
+ export interface CacheStats {
34
+ hits: number;
35
+ misses: number;
36
+ hitRate: number;
37
+ size: number;
38
+ evictions: number;
39
+ avgAccessTime: number;
40
+ }
41
+ export declare class QueryCache<T = any> {
42
+ private cache;
43
+ private config;
44
+ private stats;
45
+ constructor(config?: Partial<QueryCacheConfig>);
46
+ /**
47
+ * Generate cache key from query parameters
48
+ */
49
+ static generateKey(embedding: number[], k: number, metric?: string, threshold?: number): string;
50
+ /**
51
+ * Get cached results if available and not expired
52
+ */
53
+ get(key: string): T | null;
54
+ /**
55
+ * Store results in cache with LRU eviction
56
+ */
57
+ set(key: string, results: T): void;
58
+ /**
59
+ * Evict least recently used entry
60
+ */
61
+ private evictLRU;
62
+ /**
63
+ * Clear all cached entries
64
+ */
65
+ clear(): void;
66
+ /**
67
+ * Clear expired entries
68
+ */
69
+ clearExpired(): void;
70
+ /**
71
+ * Get cache statistics
72
+ */
73
+ getStats(): CacheStats;
74
+ /**
75
+ * Reset statistics
76
+ */
77
+ resetStats(): void;
78
+ private recordHit;
79
+ private recordMiss;
80
+ /**
81
+ * Get current cache size
82
+ */
83
+ get size(): number;
84
+ /**
85
+ * Check if cache has key
86
+ */
87
+ has(key: string): boolean;
88
+ /**
89
+ * Delete specific entry
90
+ */
91
+ delete(key: string): boolean;
92
+ /**
93
+ * Get all cache keys
94
+ */
95
+ keys(): string[];
96
+ /**
97
+ * Get cache configuration
98
+ */
99
+ getConfig(): Required<QueryCacheConfig>;
100
+ /**
101
+ * Update cache configuration
102
+ */
103
+ updateConfig(config: Partial<QueryCacheConfig>): void;
104
+ }