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,521 @@
1
+ "use strict";
2
+ /**
3
+ * HNSW (Hierarchical Navigable Small World) Index Implementation
4
+ * High-performance approximate nearest neighbor search with O(log n) complexity
5
+ *
6
+ * Algorithm: Hierarchical graph structure with multiple layers
7
+ * - Layer 0: All vectors with dense connections
8
+ * - Higher layers: Sparse long-range connections for efficient navigation
9
+ *
10
+ * Performance targets:
11
+ * - Search: <10ms for 10K vectors
12
+ * - Build: <5s for 10K vectors
13
+ * - Recall: >95% accuracy
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.HNSWIndex = exports.DEFAULT_HNSW_CONFIG = void 0;
17
+ /**
18
+ * Default HNSW configuration optimized for most use cases
19
+ */
20
+ exports.DEFAULT_HNSW_CONFIG = {
21
+ M: 16,
22
+ M0: 32,
23
+ efConstruction: 200,
24
+ efSearch: 50,
25
+ mL: 1 / Math.log(16),
26
+ minVectorsForIndex: 1000,
27
+ autoRebuild: false,
28
+ enabled: true
29
+ };
30
+ /**
31
+ * HNSW Index implementation
32
+ */
33
+ class HNSWIndex {
34
+ constructor(db, config = {}) {
35
+ this.entryPoint = null;
36
+ this.maxLevel = 0;
37
+ this.isBuilt = false;
38
+ this.db = db;
39
+ this.config = { ...exports.DEFAULT_HNSW_CONFIG, ...config };
40
+ this.initializeSchema();
41
+ this.prepareStatements();
42
+ this.loadMetadata();
43
+ }
44
+ /**
45
+ * Initialize HNSW schema in SQLite
46
+ */
47
+ initializeSchema() {
48
+ // Create HNSW nodes table
49
+ this.db.exec(`
50
+ CREATE TABLE IF NOT EXISTS hnsw_nodes (
51
+ id TEXT PRIMARY KEY,
52
+ vector_id TEXT NOT NULL,
53
+ level INTEGER NOT NULL,
54
+ embedding BLOB NOT NULL,
55
+ FOREIGN KEY (vector_id) REFERENCES vectors(id) ON DELETE CASCADE
56
+ );
57
+
58
+ CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_vector ON hnsw_nodes(vector_id);
59
+ CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_level ON hnsw_nodes(level);
60
+ `);
61
+ // Create HNSW edges table
62
+ this.db.exec(`
63
+ CREATE TABLE IF NOT EXISTS hnsw_edges (
64
+ from_id TEXT NOT NULL,
65
+ to_id TEXT NOT NULL,
66
+ level INTEGER NOT NULL,
67
+ distance REAL NOT NULL,
68
+ PRIMARY KEY (from_id, to_id, level),
69
+ FOREIGN KEY (from_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE,
70
+ FOREIGN KEY (to_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE
71
+ );
72
+
73
+ CREATE INDEX IF NOT EXISTS idx_hnsw_edges_from ON hnsw_edges(from_id, level);
74
+ CREATE INDEX IF NOT EXISTS idx_hnsw_edges_to ON hnsw_edges(to_id, level);
75
+ CREATE INDEX IF NOT EXISTS idx_hnsw_edges_level ON hnsw_edges(level);
76
+ `);
77
+ // Create metadata table for index state
78
+ this.db.exec(`
79
+ CREATE TABLE IF NOT EXISTS hnsw_metadata (
80
+ key TEXT PRIMARY KEY,
81
+ value TEXT NOT NULL
82
+ );
83
+ `);
84
+ }
85
+ /**
86
+ * Prepare frequently used SQL statements
87
+ */
88
+ prepareStatements() {
89
+ this.insertNodeStmt = this.db.prepare(`
90
+ INSERT OR REPLACE INTO hnsw_nodes (id, vector_id, level, embedding)
91
+ VALUES (?, ?, ?, ?)
92
+ `);
93
+ this.insertEdgeStmt = this.db.prepare(`
94
+ INSERT OR REPLACE INTO hnsw_edges (from_id, to_id, level, distance)
95
+ VALUES (?, ?, ?, ?)
96
+ `);
97
+ this.getNodeStmt = this.db.prepare(`
98
+ SELECT id, vector_id, level, embedding
99
+ FROM hnsw_nodes
100
+ WHERE id = ?
101
+ `);
102
+ this.getNeighborsStmt = this.db.prepare(`
103
+ SELECT to_id, distance
104
+ FROM hnsw_edges
105
+ WHERE from_id = ? AND level = ?
106
+ ORDER BY distance ASC
107
+ `);
108
+ this.deleteNodeStmt = this.db.prepare(`
109
+ DELETE FROM hnsw_nodes WHERE id = ?
110
+ `);
111
+ this.deleteEdgesStmt = this.db.prepare(`
112
+ DELETE FROM hnsw_edges WHERE from_id = ? OR to_id = ?
113
+ `);
114
+ }
115
+ /**
116
+ * Load metadata from database
117
+ */
118
+ loadMetadata() {
119
+ const stmt = this.db.prepare('SELECT value FROM hnsw_metadata WHERE key = ?');
120
+ const entryPointRow = stmt.get('entry_point');
121
+ if (entryPointRow) {
122
+ this.entryPoint = entryPointRow.value;
123
+ }
124
+ const maxLevelRow = stmt.get('max_level');
125
+ if (maxLevelRow) {
126
+ this.maxLevel = parseInt(maxLevelRow.value, 10);
127
+ }
128
+ const isBuiltRow = stmt.get('is_built');
129
+ if (isBuiltRow) {
130
+ this.isBuilt = isBuiltRow.value === 'true';
131
+ }
132
+ }
133
+ /**
134
+ * Save metadata to database
135
+ */
136
+ saveMetadata() {
137
+ const stmt = this.db.prepare('INSERT OR REPLACE INTO hnsw_metadata (key, value) VALUES (?, ?)');
138
+ if (this.entryPoint) {
139
+ stmt.run('entry_point', this.entryPoint);
140
+ }
141
+ stmt.run('max_level', this.maxLevel.toString());
142
+ stmt.run('is_built', this.isBuilt.toString());
143
+ }
144
+ /**
145
+ * Calculate random level for new node using exponential decay
146
+ */
147
+ randomLevel() {
148
+ let level = 0;
149
+ while (Math.random() < this.config.mL && level < 16) {
150
+ level++;
151
+ }
152
+ return level;
153
+ }
154
+ /**
155
+ * Calculate Euclidean distance between two vectors
156
+ */
157
+ calculateDistance(a, b) {
158
+ let sum = 0;
159
+ for (let i = 0; i < a.length; i++) {
160
+ const diff = a[i] - b[i];
161
+ sum += diff * diff;
162
+ }
163
+ return Math.sqrt(sum);
164
+ }
165
+ /**
166
+ * Serialize embedding to Buffer
167
+ */
168
+ serializeEmbedding(embedding) {
169
+ const buffer = Buffer.allocUnsafe(embedding.length * 4);
170
+ const view = new Float32Array(buffer.buffer, buffer.byteOffset, embedding.length);
171
+ view.set(embedding);
172
+ return buffer;
173
+ }
174
+ /**
175
+ * Deserialize embedding from Buffer
176
+ */
177
+ deserializeEmbedding(buffer) {
178
+ const view = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 4);
179
+ return Array.from(view);
180
+ }
181
+ /**
182
+ * Get node by ID
183
+ */
184
+ getNode(id) {
185
+ const row = this.getNodeStmt.get(id);
186
+ if (!row)
187
+ return null;
188
+ return {
189
+ id: row.id,
190
+ vectorId: row.vector_id,
191
+ level: row.level,
192
+ embedding: this.deserializeEmbedding(row.embedding)
193
+ };
194
+ }
195
+ /**
196
+ * Get neighbors of a node at a specific level
197
+ */
198
+ getNeighbors(nodeId, level) {
199
+ const rows = this.getNeighborsStmt.all(nodeId, level);
200
+ return rows.map(row => ({
201
+ id: row.to_id,
202
+ distance: row.distance
203
+ }));
204
+ }
205
+ /**
206
+ * Search for k nearest neighbors at a specific layer
207
+ */
208
+ searchLayer(query, entryPoints, ef, level) {
209
+ const visited = new Set();
210
+ const candidates = [];
211
+ const results = [];
212
+ // Initialize with entry points
213
+ for (const ep of entryPoints) {
214
+ const node = this.getNode(ep);
215
+ if (!node)
216
+ continue;
217
+ const distance = this.calculateDistance(query, node.embedding);
218
+ candidates.push({ id: ep, distance });
219
+ results.push({ id: ep, distance });
220
+ visited.add(ep);
221
+ }
222
+ // Sort candidates by distance (ascending)
223
+ candidates.sort((a, b) => a.distance - b.distance);
224
+ results.sort((a, b) => a.distance - b.distance);
225
+ // Beam search
226
+ while (candidates.length > 0) {
227
+ const current = candidates.shift();
228
+ // If current is farther than worst result, stop
229
+ if (results.length >= ef && current.distance > results[results.length - 1].distance) {
230
+ break;
231
+ }
232
+ // Explore neighbors
233
+ const neighbors = this.getNeighbors(current.id, level);
234
+ for (const neighbor of neighbors) {
235
+ if (visited.has(neighbor.id))
236
+ continue;
237
+ visited.add(neighbor.id);
238
+ const node = this.getNode(neighbor.id);
239
+ if (!node)
240
+ continue;
241
+ const distance = this.calculateDistance(query, node.embedding);
242
+ // Add to candidates if better than worst result
243
+ if (results.length < ef || distance < results[results.length - 1].distance) {
244
+ candidates.push({ id: neighbor.id, distance });
245
+ results.push({ id: neighbor.id, distance });
246
+ // Keep results sorted and limited to ef
247
+ results.sort((a, b) => a.distance - b.distance);
248
+ if (results.length > ef) {
249
+ results.pop();
250
+ }
251
+ // Keep candidates sorted
252
+ candidates.sort((a, b) => a.distance - b.distance);
253
+ }
254
+ }
255
+ }
256
+ return results;
257
+ }
258
+ /**
259
+ * Select neighbors using heuristic (Alg 4 from HNSW paper)
260
+ */
261
+ selectNeighborsHeuristic(candidates, M) {
262
+ // Simple implementation: select M closest neighbors
263
+ candidates.sort((a, b) => a.distance - b.distance);
264
+ return candidates.slice(0, M);
265
+ }
266
+ /**
267
+ * Add bidirectional link between nodes
268
+ */
269
+ addEdge(fromId, toId, level, distance) {
270
+ this.insertEdgeStmt.run(fromId, toId, level, distance);
271
+ this.insertEdgeStmt.run(toId, fromId, level, distance);
272
+ }
273
+ /**
274
+ * Insert a new node into the HNSW index (optimized version)
275
+ */
276
+ insert(vectorId, embedding) {
277
+ const nodeId = `hnsw_${vectorId}`;
278
+ const level = this.randomLevel();
279
+ // Insert node
280
+ this.insertNodeStmt.run(nodeId, vectorId, level, this.serializeEmbedding(embedding));
281
+ // Update max level
282
+ if (level > this.maxLevel) {
283
+ this.maxLevel = level;
284
+ }
285
+ // If this is the first node, make it the entry point
286
+ if (!this.entryPoint) {
287
+ this.entryPoint = nodeId;
288
+ // Don't save metadata on every insert (batching will handle it)
289
+ return;
290
+ }
291
+ // Search for nearest neighbors at each layer
292
+ let entryPoints = [this.entryPoint];
293
+ // Navigate from top to target level
294
+ for (let lc = this.maxLevel; lc > level; lc--) {
295
+ const nearest = this.searchLayer(embedding, entryPoints, 1, lc);
296
+ if (nearest.length > 0) {
297
+ entryPoints = [nearest[0].id];
298
+ }
299
+ }
300
+ // Cache for prepared statement reuse
301
+ const deleteStmtCache = this.db.prepare(`
302
+ DELETE FROM hnsw_edges
303
+ WHERE (from_id = ? OR to_id = ?) AND level = ?
304
+ `);
305
+ // Insert at all levels from level to 0
306
+ for (let lc = level; lc >= 0; lc--) {
307
+ const M = lc === 0 ? this.config.M0 : this.config.M;
308
+ const candidates = this.searchLayer(embedding, entryPoints, this.config.efConstruction, lc);
309
+ // Select M neighbors
310
+ const neighbors = this.selectNeighborsHeuristic(candidates, M);
311
+ // Add bidirectional links
312
+ for (const neighbor of neighbors) {
313
+ this.addEdge(nodeId, neighbor.id, lc, neighbor.distance);
314
+ }
315
+ // Prune neighbors' connections if needed (optimized)
316
+ for (const neighbor of neighbors) {
317
+ const neighborConnections = this.getNeighbors(neighbor.id, lc);
318
+ if (neighborConnections.length > M) {
319
+ // Need to prune - remove edges and re-add selected ones
320
+ deleteStmtCache.run(neighbor.id, neighbor.id, lc);
321
+ // Re-select neighbors with minimal node fetching
322
+ const node = this.getNode(neighbor.id);
323
+ if (node) {
324
+ // Batch fetch neighbor nodes for distance calculation
325
+ const newCandidates = [];
326
+ for (const nc of neighborConnections) {
327
+ const n = this.getNode(nc.id);
328
+ if (n) {
329
+ newCandidates.push({
330
+ id: nc.id,
331
+ distance: this.calculateDistance(node.embedding, n.embedding)
332
+ });
333
+ }
334
+ }
335
+ const selected = this.selectNeighborsHeuristic(newCandidates, M);
336
+ for (const sel of selected) {
337
+ this.addEdge(neighbor.id, sel.id, lc, sel.distance);
338
+ }
339
+ }
340
+ }
341
+ }
342
+ entryPoints = neighbors.map(n => n.id);
343
+ }
344
+ this.isBuilt = true;
345
+ // Don't save metadata on every insert (batching will handle it)
346
+ }
347
+ /**
348
+ * Search for k nearest neighbors using HNSW index
349
+ */
350
+ search(query, k) {
351
+ if (!this.entryPoint || !this.isBuilt) {
352
+ return [];
353
+ }
354
+ let entryPoints = [this.entryPoint];
355
+ // Navigate from top layer to layer 0
356
+ for (let lc = this.maxLevel; lc > 0; lc--) {
357
+ const nearest = this.searchLayer(query, entryPoints, 1, lc);
358
+ if (nearest.length > 0) {
359
+ entryPoints = [nearest[0].id];
360
+ }
361
+ }
362
+ // Search at layer 0 with efSearch
363
+ const ef = Math.max(this.config.efSearch, k);
364
+ const results = this.searchLayer(query, entryPoints, ef, 0);
365
+ // Convert to final results with full node info
366
+ return results.slice(0, k).map(result => {
367
+ const node = this.getNode(result.id);
368
+ return {
369
+ id: result.id,
370
+ vectorId: node.vectorId,
371
+ distance: result.distance,
372
+ embedding: node.embedding
373
+ };
374
+ });
375
+ }
376
+ /**
377
+ * Build HNSW index from all vectors in database with optimizations
378
+ */
379
+ build() {
380
+ // Clear existing index
381
+ this.clear();
382
+ // Get all vectors from the main vectors table
383
+ const stmt = this.db.prepare('SELECT id, embedding FROM vectors ORDER BY id');
384
+ const rows = stmt.all();
385
+ if (rows.length === 0) {
386
+ console.log('No vectors to index');
387
+ return;
388
+ }
389
+ console.log(`Building HNSW index for ${rows.length} vectors...`);
390
+ const startTime = Date.now();
391
+ // Batch insert optimization: wrap in transaction
392
+ const transaction = this.db.transaction(() => {
393
+ // Insert all vectors into index
394
+ for (const row of rows) {
395
+ const embedding = this.deserializeEmbedding(row.embedding);
396
+ this.insert(row.id, embedding);
397
+ }
398
+ });
399
+ transaction();
400
+ const duration = Date.now() - startTime;
401
+ const perVector = duration / rows.length;
402
+ console.log(`HNSW index built in ${duration}ms (${perVector.toFixed(2)}ms per vector)`);
403
+ this.isBuilt = true;
404
+ this.saveMetadata();
405
+ }
406
+ /**
407
+ * Build index incrementally (non-blocking for large datasets)
408
+ */
409
+ async buildAsync(onProgress) {
410
+ // Clear existing index
411
+ this.clear();
412
+ // Get all vectors from the main vectors table
413
+ const stmt = this.db.prepare('SELECT id, embedding FROM vectors ORDER BY id');
414
+ const rows = stmt.all();
415
+ if (rows.length === 0) {
416
+ console.log('No vectors to index');
417
+ return;
418
+ }
419
+ console.log(`Building HNSW index incrementally for ${rows.length} vectors...`);
420
+ const startTime = Date.now();
421
+ const BATCH_SIZE = 100; // Process in batches to allow async breaks
422
+ for (let i = 0; i < rows.length; i += BATCH_SIZE) {
423
+ const batchStartTime = Date.now();
424
+ const batch = rows.slice(i, i + BATCH_SIZE);
425
+ // Process batch in transaction
426
+ const transaction = this.db.transaction(() => {
427
+ for (const row of batch) {
428
+ const embedding = this.deserializeEmbedding(row.embedding);
429
+ this.insert(row.id, embedding);
430
+ }
431
+ });
432
+ transaction();
433
+ const batchTime = Date.now() - batchStartTime;
434
+ // Report progress
435
+ if (onProgress) {
436
+ onProgress(i + batch.length, rows.length, Date.now() - startTime);
437
+ }
438
+ // Yield to event loop every batch
439
+ await new Promise(resolve => setImmediate(resolve));
440
+ }
441
+ const duration = Date.now() - startTime;
442
+ const perVector = duration / rows.length;
443
+ console.log(`HNSW index built incrementally in ${duration}ms (${perVector.toFixed(2)}ms per vector)`);
444
+ this.isBuilt = true;
445
+ this.saveMetadata();
446
+ }
447
+ /**
448
+ * Clear the entire index
449
+ */
450
+ clear() {
451
+ this.db.exec('DELETE FROM hnsw_edges');
452
+ this.db.exec('DELETE FROM hnsw_nodes');
453
+ this.db.exec('DELETE FROM hnsw_metadata');
454
+ this.entryPoint = null;
455
+ this.maxLevel = 0;
456
+ this.isBuilt = false;
457
+ }
458
+ /**
459
+ * Delete a node from the index
460
+ */
461
+ delete(vectorId) {
462
+ const nodeId = `hnsw_${vectorId}`;
463
+ // Check if node exists
464
+ const node = this.getNode(nodeId);
465
+ if (!node)
466
+ return;
467
+ // If this is the entry point, find a new one
468
+ if (this.entryPoint === nodeId) {
469
+ const stmt = this.db.prepare('SELECT id FROM hnsw_nodes WHERE id != ? LIMIT 1');
470
+ const row = stmt.get(nodeId);
471
+ this.entryPoint = row ? row.id : null;
472
+ }
473
+ // Delete edges
474
+ this.deleteEdgesStmt.run(nodeId, nodeId);
475
+ // Delete node
476
+ this.deleteNodeStmt.run(nodeId);
477
+ // Update metadata
478
+ if (!this.entryPoint) {
479
+ this.isBuilt = false;
480
+ this.maxLevel = 0;
481
+ }
482
+ this.saveMetadata();
483
+ }
484
+ /**
485
+ * Get index statistics
486
+ */
487
+ getStats() {
488
+ const nodeCountStmt = this.db.prepare('SELECT COUNT(*) as count FROM hnsw_nodes');
489
+ const edgeCountStmt = this.db.prepare('SELECT COUNT(*) as count FROM hnsw_edges');
490
+ const nodeCount = nodeCountStmt.get().count;
491
+ const edgeCount = edgeCountStmt.get().count;
492
+ const avgDegree = nodeCount > 0 ? edgeCount / nodeCount : 0;
493
+ return {
494
+ nodeCount,
495
+ edgeCount,
496
+ maxLevel: this.maxLevel,
497
+ isBuilt: this.isBuilt,
498
+ avgDegree
499
+ };
500
+ }
501
+ /**
502
+ * Check if index is ready to use
503
+ */
504
+ isReady() {
505
+ return this.isBuilt && this.entryPoint !== null;
506
+ }
507
+ /**
508
+ * Get configuration
509
+ */
510
+ getConfig() {
511
+ return { ...this.config };
512
+ }
513
+ /**
514
+ * Update configuration (requires rebuild)
515
+ */
516
+ updateConfig(config) {
517
+ this.config = { ...this.config, ...config };
518
+ }
519
+ }
520
+ exports.HNSWIndex = HNSWIndex;
521
+ //# sourceMappingURL=hnsw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hnsw.js","sourceRoot":"","sources":["../../src/index/hnsw.ts"],"names":[],"mappings":"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"}