agentdb 3.0.0-alpha.2 → 3.0.0-alpha.4

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 (1038) hide show
  1. package/README.md +978 -2342
  2. package/dist/agentdb.browser.js +1492 -0
  3. package/dist/agentdb.browser.js.map +7 -0
  4. package/dist/agentdb.browser.min.js +3 -0
  5. package/dist/agentdb.browser.min.js.map +7 -0
  6. package/dist/agentdb.wasm-loader.js +207 -0
  7. package/dist/schemas/frontier-schema.sql +0 -7
  8. package/dist/schemas/schema.sql +0 -7
  9. package/dist/simulation/cli.d.ts +9 -0
  10. package/dist/simulation/cli.d.ts.map +1 -0
  11. package/dist/simulation/cli.js +68 -0
  12. package/dist/simulation/cli.js.map +1 -0
  13. package/dist/simulation/runner.d.ts +21 -0
  14. package/dist/simulation/runner.d.ts.map +1 -0
  15. package/dist/simulation/runner.js +241 -0
  16. package/dist/simulation/runner.js.map +1 -0
  17. package/dist/simulation/scenarios/aidefence-integration.d.ts +24 -0
  18. package/dist/simulation/scenarios/aidefence-integration.d.ts.map +1 -0
  19. package/dist/simulation/scenarios/aidefence-integration.js +124 -0
  20. package/dist/simulation/scenarios/aidefence-integration.js.map +1 -0
  21. package/dist/simulation/scenarios/bmssp-integration.d.ts +23 -0
  22. package/dist/simulation/scenarios/bmssp-integration.d.ts.map +1 -0
  23. package/dist/simulation/scenarios/bmssp-integration.js +104 -0
  24. package/dist/simulation/scenarios/bmssp-integration.js.map +1 -0
  25. package/dist/simulation/scenarios/causal-reasoning.d.ts +16 -0
  26. package/dist/simulation/scenarios/causal-reasoning.d.ts.map +1 -0
  27. package/dist/simulation/scenarios/causal-reasoning.js +108 -0
  28. package/dist/simulation/scenarios/causal-reasoning.js.map +1 -0
  29. package/dist/simulation/scenarios/consciousness-explorer.d.ts +25 -0
  30. package/dist/simulation/scenarios/consciousness-explorer.d.ts.map +1 -0
  31. package/dist/simulation/scenarios/consciousness-explorer.js +108 -0
  32. package/dist/simulation/scenarios/consciousness-explorer.js.map +1 -0
  33. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts +135 -0
  34. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts.map +1 -0
  35. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js +158 -0
  36. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js.map +1 -0
  37. package/dist/simulation/scenarios/domain-examples/index.d.ts +14 -0
  38. package/dist/simulation/scenarios/domain-examples/index.d.ts.map +1 -0
  39. package/dist/simulation/scenarios/domain-examples/index.js +14 -0
  40. package/dist/simulation/scenarios/domain-examples/index.js.map +1 -0
  41. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts +178 -0
  42. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts.map +1 -0
  43. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js +218 -0
  44. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js.map +1 -0
  45. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts +122 -0
  46. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts.map +1 -0
  47. package/dist/simulation/scenarios/domain-examples/medical-imaging.js +129 -0
  48. package/dist/simulation/scenarios/domain-examples/medical-imaging.js.map +1 -0
  49. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts +166 -0
  50. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts.map +1 -0
  51. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js +161 -0
  52. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js.map +1 -0
  53. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts +151 -0
  54. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts.map +1 -0
  55. package/dist/simulation/scenarios/domain-examples/scientific-research.js +187 -0
  56. package/dist/simulation/scenarios/domain-examples/scientific-research.js.map +1 -0
  57. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts +102 -0
  58. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts.map +1 -0
  59. package/dist/simulation/scenarios/domain-examples/trading-systems.js +100 -0
  60. package/dist/simulation/scenarios/domain-examples/trading-systems.js.map +1 -0
  61. package/dist/simulation/scenarios/goalie-integration.d.ts +24 -0
  62. package/dist/simulation/scenarios/goalie-integration.d.ts.map +1 -0
  63. package/dist/simulation/scenarios/goalie-integration.js +121 -0
  64. package/dist/simulation/scenarios/goalie-integration.js.map +1 -0
  65. package/dist/simulation/scenarios/graph-traversal.d.ts +17 -0
  66. package/dist/simulation/scenarios/graph-traversal.d.ts.map +1 -0
  67. package/dist/simulation/scenarios/graph-traversal.js +101 -0
  68. package/dist/simulation/scenarios/graph-traversal.js.map +1 -0
  69. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts +45 -0
  70. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts.map +1 -0
  71. package/dist/simulation/scenarios/latent-space/attention-analysis.js +435 -0
  72. package/dist/simulation/scenarios/latent-space/attention-analysis.js.map +1 -0
  73. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts +55 -0
  74. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts.map +1 -0
  75. package/dist/simulation/scenarios/latent-space/clustering-analysis.js +606 -0
  76. package/dist/simulation/scenarios/latent-space/clustering-analysis.js.map +1 -0
  77. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts +74 -0
  78. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts.map +1 -0
  79. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js +391 -0
  80. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js.map +1 -0
  81. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts +51 -0
  82. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts.map +1 -0
  83. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js +536 -0
  84. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js.map +1 -0
  85. package/dist/simulation/scenarios/latent-space/index.d.ts +35 -0
  86. package/dist/simulation/scenarios/latent-space/index.d.ts.map +1 -0
  87. package/dist/simulation/scenarios/latent-space/index.js +35 -0
  88. package/dist/simulation/scenarios/latent-space/index.js.map +1 -0
  89. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts +52 -0
  90. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts.map +1 -0
  91. package/dist/simulation/scenarios/latent-space/neural-augmentation.js +472 -0
  92. package/dist/simulation/scenarios/latent-space/neural-augmentation.js.map +1 -0
  93. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts +53 -0
  94. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts.map +1 -0
  95. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js +391 -0
  96. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js.map +1 -0
  97. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts +52 -0
  98. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts.map +1 -0
  99. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js +514 -0
  100. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js.map +1 -0
  101. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts +53 -0
  102. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts.map +1 -0
  103. package/dist/simulation/scenarios/latent-space/traversal-optimization.js +595 -0
  104. package/dist/simulation/scenarios/latent-space/traversal-optimization.js.map +1 -0
  105. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts +18 -0
  106. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts.map +1 -0
  107. package/dist/simulation/scenarios/lean-agentic-swarm.js +132 -0
  108. package/dist/simulation/scenarios/lean-agentic-swarm.js.map +1 -0
  109. package/dist/simulation/scenarios/multi-agent-swarm.d.ts +17 -0
  110. package/dist/simulation/scenarios/multi-agent-swarm.d.ts.map +1 -0
  111. package/dist/simulation/scenarios/multi-agent-swarm.js +111 -0
  112. package/dist/simulation/scenarios/multi-agent-swarm.js.map +1 -0
  113. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts +23 -0
  114. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts.map +1 -0
  115. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js +98 -0
  116. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js.map +1 -0
  117. package/dist/simulation/scenarios/reflexion-learning.d.ts +16 -0
  118. package/dist/simulation/scenarios/reflexion-learning.d.ts.map +1 -0
  119. package/dist/simulation/scenarios/reflexion-learning.js +98 -0
  120. package/dist/simulation/scenarios/reflexion-learning.js.map +1 -0
  121. package/dist/simulation/scenarios/research-swarm.d.ts +24 -0
  122. package/dist/simulation/scenarios/research-swarm.d.ts.map +1 -0
  123. package/dist/simulation/scenarios/research-swarm.js +146 -0
  124. package/dist/simulation/scenarios/research-swarm.js.map +1 -0
  125. package/dist/simulation/scenarios/skill-evolution.d.ts +16 -0
  126. package/dist/simulation/scenarios/skill-evolution.d.ts.map +1 -0
  127. package/dist/simulation/scenarios/skill-evolution.js +109 -0
  128. package/dist/simulation/scenarios/skill-evolution.js.map +1 -0
  129. package/dist/simulation/scenarios/stock-market-emergence.d.ts +33 -0
  130. package/dist/simulation/scenarios/stock-market-emergence.d.ts.map +1 -0
  131. package/dist/simulation/scenarios/stock-market-emergence.js +246 -0
  132. package/dist/simulation/scenarios/stock-market-emergence.js.map +1 -0
  133. package/dist/simulation/scenarios/strange-loops.d.ts +18 -0
  134. package/dist/simulation/scenarios/strange-loops.d.ts.map +1 -0
  135. package/dist/simulation/scenarios/strange-loops.js +133 -0
  136. package/dist/simulation/scenarios/strange-loops.js.map +1 -0
  137. package/dist/simulation/scenarios/sublinear-solver.d.ts +22 -0
  138. package/dist/simulation/scenarios/sublinear-solver.d.ts.map +1 -0
  139. package/dist/simulation/scenarios/sublinear-solver.js +82 -0
  140. package/dist/simulation/scenarios/sublinear-solver.js.map +1 -0
  141. package/dist/simulation/scenarios/temporal-lead-solver.d.ts +23 -0
  142. package/dist/simulation/scenarios/temporal-lead-solver.d.ts.map +1 -0
  143. package/dist/simulation/scenarios/temporal-lead-solver.js +90 -0
  144. package/dist/simulation/scenarios/temporal-lead-solver.js.map +1 -0
  145. package/dist/simulation/scenarios/voting-system-consensus.d.ts +27 -0
  146. package/dist/simulation/scenarios/voting-system-consensus.d.ts.map +1 -0
  147. package/dist/simulation/scenarios/voting-system-consensus.js +175 -0
  148. package/dist/simulation/scenarios/voting-system-consensus.js.map +1 -0
  149. package/dist/simulation/types.d.ts +162 -0
  150. package/dist/simulation/types.d.ts.map +1 -0
  151. package/dist/simulation/types.js +5 -0
  152. package/dist/simulation/types.js.map +1 -0
  153. package/dist/simulation/utils/PerformanceOptimizer.d.ts +115 -0
  154. package/dist/simulation/utils/PerformanceOptimizer.d.ts.map +1 -0
  155. package/dist/simulation/utils/PerformanceOptimizer.js +223 -0
  156. package/dist/simulation/utils/PerformanceOptimizer.js.map +1 -0
  157. package/dist/src/backends/GraphBackend.d.ts +8 -8
  158. package/dist/src/backends/GraphBackend.d.ts.map +1 -1
  159. package/dist/src/backends/GraphBackend.js +15 -16
  160. package/dist/src/backends/GraphBackend.js.map +1 -1
  161. package/dist/src/backends/LearningBackend.d.ts +2 -2
  162. package/dist/src/backends/LearningBackend.d.ts.map +1 -1
  163. package/dist/src/backends/LearningBackend.js +10 -11
  164. package/dist/src/backends/LearningBackend.js.map +1 -1
  165. package/dist/src/backends/VectorBackend.d.ts +6 -31
  166. package/dist/src/backends/VectorBackend.d.ts.map +1 -1
  167. package/dist/src/backends/detector.d.ts +3 -25
  168. package/dist/src/backends/detector.d.ts.map +1 -1
  169. package/dist/src/backends/detector.js +15 -119
  170. package/dist/src/backends/detector.js.map +1 -1
  171. package/dist/src/backends/factory.d.ts +32 -16
  172. package/dist/src/backends/factory.d.ts.map +1 -1
  173. package/dist/src/backends/factory.js +70 -133
  174. package/dist/src/backends/factory.js.map +1 -1
  175. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +1 -1
  176. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
  177. package/dist/src/backends/graph/GraphDatabaseAdapter.js +1 -5
  178. package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
  179. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts +2 -2
  180. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts.map +1 -1
  181. package/dist/src/backends/hnswlib/HNSWLibBackend.js +13 -49
  182. package/dist/src/backends/hnswlib/HNSWLibBackend.js.map +1 -1
  183. package/dist/src/backends/index.d.ts +3 -25
  184. package/dist/src/backends/index.d.ts.map +1 -1
  185. package/dist/src/backends/index.js +1 -23
  186. package/dist/src/backends/index.js.map +1 -1
  187. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +93 -0
  188. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +1 -0
  189. package/dist/src/backends/ruvector/GuardedVectorBackend.js +182 -0
  190. package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +1 -0
  191. package/dist/src/backends/ruvector/RuVectorBackend.d.ts +16 -187
  192. package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
  193. package/dist/src/backends/ruvector/RuVectorBackend.js +94 -576
  194. package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
  195. package/dist/src/backends/ruvector/RuVectorLearning.d.ts +4 -0
  196. package/dist/src/backends/ruvector/RuVectorLearning.d.ts.map +1 -1
  197. package/dist/src/backends/ruvector/RuVectorLearning.js +11 -10
  198. package/dist/src/backends/ruvector/RuVectorLearning.js.map +1 -1
  199. package/dist/src/benchmarks/wasm-vector-benchmark.d.ts +10 -0
  200. package/dist/src/benchmarks/wasm-vector-benchmark.d.ts.map +1 -0
  201. package/dist/src/benchmarks/wasm-vector-benchmark.js +196 -0
  202. package/dist/src/benchmarks/wasm-vector-benchmark.js.map +1 -0
  203. package/dist/src/browser/AdvancedFeatures.d.ts.map +1 -1
  204. package/dist/src/browser/AdvancedFeatures.js +10 -3
  205. package/dist/src/browser/AdvancedFeatures.js.map +1 -1
  206. package/dist/src/browser/AttentionBrowser.d.ts.map +1 -1
  207. package/dist/src/browser/AttentionBrowser.js +12 -5
  208. package/dist/src/browser/AttentionBrowser.js.map +1 -1
  209. package/dist/src/browser/HNSWIndex.d.ts +1 -31
  210. package/dist/src/browser/HNSWIndex.d.ts.map +1 -1
  211. package/dist/src/browser/HNSWIndex.js +18 -136
  212. package/dist/src/browser/HNSWIndex.js.map +1 -1
  213. package/dist/src/browser/ProductQuantization.d.ts.map +1 -1
  214. package/dist/src/browser/ProductQuantization.js +1 -0
  215. package/dist/src/browser/ProductQuantization.js.map +1 -1
  216. package/dist/src/browser/index.d.ts +3 -3
  217. package/dist/src/browser/index.d.ts.map +1 -1
  218. package/dist/src/browser/index.js +1 -2
  219. package/dist/src/browser/index.js.map +1 -1
  220. package/dist/src/cli/agentdb-cli.d.ts +2 -16
  221. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  222. package/dist/src/cli/agentdb-cli.js +216 -853
  223. package/dist/src/cli/agentdb-cli.js.map +1 -1
  224. package/dist/src/cli/commands/attention.js +3 -3
  225. package/dist/src/cli/commands/attention.js.map +1 -1
  226. package/dist/src/cli/commands/doctor.d.ts +0 -2
  227. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  228. package/dist/src/cli/commands/doctor.js +1 -106
  229. package/dist/src/cli/commands/doctor.js.map +1 -1
  230. package/dist/src/cli/commands/init.d.ts +1 -2
  231. package/dist/src/cli/commands/init.d.ts.map +1 -1
  232. package/dist/src/cli/commands/init.js +7 -30
  233. package/dist/src/cli/commands/init.js.map +1 -1
  234. package/dist/src/cli/commands/install-embeddings.d.ts.map +1 -1
  235. package/dist/src/cli/commands/install-embeddings.js.map +1 -1
  236. package/dist/src/cli/commands/migrate.d.ts +0 -15
  237. package/dist/src/cli/commands/migrate.d.ts.map +1 -1
  238. package/dist/src/cli/commands/migrate.js +5 -164
  239. package/dist/src/cli/commands/migrate.js.map +1 -1
  240. package/dist/src/cli/commands/simulate-report.js.map +1 -1
  241. package/dist/src/cli/commands/simulate-wizard.js.map +1 -1
  242. package/dist/src/cli/commands/simulate.d.ts +7 -0
  243. package/dist/src/cli/commands/simulate.d.ts.map +1 -0
  244. package/dist/src/cli/commands/simulate.js +100 -0
  245. package/dist/src/cli/commands/simulate.js.map +1 -0
  246. package/dist/src/cli/commands/status.js +1 -5
  247. package/dist/src/cli/commands/status.js.map +1 -1
  248. package/dist/src/cli/lib/attention-config.d.ts +2 -2
  249. package/dist/src/cli/lib/attention-config.d.ts.map +1 -1
  250. package/dist/src/cli/lib/attention-config.js +1 -2
  251. package/dist/src/cli/lib/attention-config.js.map +1 -1
  252. package/dist/src/cli/lib/config-manager.d.ts +110 -0
  253. package/dist/src/cli/lib/config-manager.d.ts.map +1 -0
  254. package/dist/src/cli/lib/config-manager.js +512 -0
  255. package/dist/src/cli/lib/config-manager.js.map +1 -0
  256. package/dist/src/cli/lib/config-validator.d.ts +1 -1
  257. package/dist/src/cli/lib/config-validator.d.ts.map +1 -1
  258. package/dist/src/cli/lib/health-monitor.d.ts +149 -0
  259. package/dist/src/cli/lib/health-monitor.d.ts.map +1 -0
  260. package/dist/src/cli/lib/health-monitor.js +380 -0
  261. package/dist/src/cli/lib/health-monitor.js.map +1 -0
  262. package/dist/src/cli/lib/history-tracker.d.ts +103 -0
  263. package/dist/src/cli/lib/history-tracker.d.ts.map +1 -0
  264. package/dist/src/cli/lib/history-tracker.js +352 -0
  265. package/dist/src/cli/lib/history-tracker.js.map +1 -0
  266. package/dist/src/cli/lib/report-store.d.ts +1 -2
  267. package/dist/src/cli/lib/report-store.d.ts.map +1 -1
  268. package/dist/src/cli/lib/report-store.js +65 -87
  269. package/dist/src/cli/lib/report-store.js.map +1 -1
  270. package/dist/src/cli/lib/simulation-registry.d.ts +1 -1
  271. package/dist/src/cli/lib/simulation-registry.d.ts.map +1 -1
  272. package/dist/src/cli/lib/simulation-registry.js +0 -1
  273. package/dist/src/cli/lib/simulation-registry.js.map +1 -1
  274. package/dist/src/cli/lib/simulation-runner.d.ts +4 -41
  275. package/dist/src/cli/lib/simulation-runner.d.ts.map +1 -1
  276. package/dist/src/cli/lib/simulation-runner.js +6 -251
  277. package/dist/src/cli/lib/simulation-runner.js.map +1 -1
  278. package/dist/src/controllers/AttentionService.d.ts.map +1 -1
  279. package/dist/src/controllers/AttentionService.js +5 -3
  280. package/dist/src/controllers/AttentionService.js.map +1 -1
  281. package/dist/src/controllers/CausalMemoryGraph.d.ts +8 -33
  282. package/dist/src/controllers/CausalMemoryGraph.d.ts.map +1 -1
  283. package/dist/src/controllers/CausalMemoryGraph.js +16 -93
  284. package/dist/src/controllers/CausalMemoryGraph.js.map +1 -1
  285. package/dist/src/controllers/CausalRecall.d.ts +3 -6
  286. package/dist/src/controllers/CausalRecall.d.ts.map +1 -1
  287. package/dist/src/controllers/CausalRecall.js +8 -14
  288. package/dist/src/controllers/CausalRecall.js.map +1 -1
  289. package/dist/src/controllers/ContextSynthesizer.d.ts +1 -1
  290. package/dist/src/controllers/ContextSynthesizer.d.ts.map +1 -1
  291. package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
  292. package/dist/src/controllers/EmbeddingService.js +3 -10
  293. package/dist/src/controllers/EmbeddingService.js.map +1 -1
  294. package/dist/src/controllers/EnhancedEmbeddingService.d.ts +0 -4
  295. package/dist/src/controllers/EnhancedEmbeddingService.d.ts.map +1 -1
  296. package/dist/src/controllers/EnhancedEmbeddingService.js +3 -10
  297. package/dist/src/controllers/EnhancedEmbeddingService.js.map +1 -1
  298. package/dist/src/controllers/ExplainableRecall.d.ts +6 -5
  299. package/dist/src/controllers/ExplainableRecall.d.ts.map +1 -1
  300. package/dist/src/controllers/ExplainableRecall.js +13 -21
  301. package/dist/src/controllers/ExplainableRecall.js.map +1 -1
  302. package/dist/src/controllers/HNSWIndex.d.ts +7 -24
  303. package/dist/src/controllers/HNSWIndex.d.ts.map +1 -1
  304. package/dist/src/controllers/HNSWIndex.js +10 -89
  305. package/dist/src/controllers/HNSWIndex.js.map +1 -1
  306. package/dist/src/controllers/LearningSystem.d.ts +10 -106
  307. package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
  308. package/dist/src/controllers/LearningSystem.js +14 -39
  309. package/dist/src/controllers/LearningSystem.js.map +1 -1
  310. package/dist/src/controllers/MMRDiversityRanker.d.ts +1 -1
  311. package/dist/src/controllers/MMRDiversityRanker.d.ts.map +1 -1
  312. package/dist/src/controllers/MetadataFilter.d.ts +3 -3
  313. package/dist/src/controllers/MetadataFilter.d.ts.map +1 -1
  314. package/dist/src/controllers/MetadataFilter.js +6 -9
  315. package/dist/src/controllers/MetadataFilter.js.map +1 -1
  316. package/dist/src/controllers/NightlyLearner.d.ts +4 -9
  317. package/dist/src/controllers/NightlyLearner.d.ts.map +1 -1
  318. package/dist/src/controllers/NightlyLearner.js +9 -28
  319. package/dist/src/controllers/NightlyLearner.js.map +1 -1
  320. package/dist/src/controllers/QUICClient.d.ts +2 -50
  321. package/dist/src/controllers/QUICClient.d.ts.map +1 -1
  322. package/dist/src/controllers/QUICClient.js +3 -193
  323. package/dist/src/controllers/QUICClient.js.map +1 -1
  324. package/dist/src/controllers/QUICServer.d.ts +4 -4
  325. package/dist/src/controllers/QUICServer.d.ts.map +1 -1
  326. package/dist/src/controllers/QUICServer.js +14 -22
  327. package/dist/src/controllers/QUICServer.js.map +1 -1
  328. package/dist/src/controllers/ReasoningBank.d.ts +4 -14
  329. package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
  330. package/dist/src/controllers/ReasoningBank.js +46 -59
  331. package/dist/src/controllers/ReasoningBank.js.map +1 -1
  332. package/dist/src/controllers/ReflexionMemory.d.ts +7 -80
  333. package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
  334. package/dist/src/controllers/ReflexionMemory.js +214 -372
  335. package/dist/src/controllers/ReflexionMemory.js.map +1 -1
  336. package/dist/src/controllers/SkillLibrary.d.ts +7 -37
  337. package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
  338. package/dist/src/controllers/SkillLibrary.js +96 -212
  339. package/dist/src/controllers/SkillLibrary.js.map +1 -1
  340. package/dist/src/controllers/SyncCoordinator.d.ts +3 -2
  341. package/dist/src/controllers/SyncCoordinator.d.ts.map +1 -1
  342. package/dist/src/controllers/SyncCoordinator.js +5 -117
  343. package/dist/src/controllers/SyncCoordinator.js.map +1 -1
  344. package/dist/src/controllers/WASMVectorSearch.d.ts +9 -20
  345. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  346. package/dist/src/controllers/WASMVectorSearch.js +29 -154
  347. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  348. package/dist/src/controllers/frontier-index.d.ts +14 -0
  349. package/dist/src/controllers/frontier-index.d.ts.map +1 -0
  350. package/dist/src/controllers/frontier-index.js +10 -0
  351. package/dist/src/controllers/frontier-index.js.map +1 -0
  352. package/dist/src/controllers/index.d.ts +17 -8
  353. package/dist/src/controllers/index.d.ts.map +1 -1
  354. package/dist/src/controllers/index.js +12 -6
  355. package/dist/src/controllers/index.js.map +1 -1
  356. package/dist/src/core/AgentDB.d.ts +25 -57
  357. package/dist/src/core/AgentDB.d.ts.map +1 -1
  358. package/dist/src/core/AgentDB.js +115 -137
  359. package/dist/src/core/AgentDB.js.map +1 -1
  360. package/dist/src/db-fallback.d.ts +1 -10
  361. package/dist/src/db-fallback.d.ts.map +1 -1
  362. package/dist/src/db-fallback.js +4 -171
  363. package/dist/src/db-fallback.js.map +1 -1
  364. package/dist/src/db-test.d.ts +13 -0
  365. package/dist/src/db-test.d.ts.map +1 -0
  366. package/dist/src/db-test.js +55 -0
  367. package/dist/src/db-test.js.map +1 -0
  368. package/dist/src/db-unified.d.ts +76 -0
  369. package/dist/src/db-unified.d.ts.map +1 -0
  370. package/dist/src/db-unified.js +279 -0
  371. package/dist/src/db-unified.js.map +1 -0
  372. package/dist/src/examples/quic-sync-example.d.ts +9 -0
  373. package/dist/src/examples/quic-sync-example.d.ts.map +1 -0
  374. package/dist/src/examples/quic-sync-example.js +169 -0
  375. package/dist/src/examples/quic-sync-example.js.map +1 -0
  376. package/dist/src/examples/wasm-vector-usage.d.ts +12 -0
  377. package/dist/src/examples/wasm-vector-usage.d.ts.map +1 -0
  378. package/dist/src/examples/wasm-vector-usage.js +190 -0
  379. package/dist/src/examples/wasm-vector-usage.js.map +1 -0
  380. package/dist/src/index.d.ts +12 -38
  381. package/dist/src/index.d.ts.map +1 -1
  382. package/dist/src/index.js +11 -46
  383. package/dist/src/index.js.map +1 -1
  384. package/dist/src/mcp/agentdb-mcp-server.js +63 -219
  385. package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
  386. package/dist/src/mcp/learning-tools-handlers.d.ts +16 -0
  387. package/dist/src/mcp/learning-tools-handlers.d.ts.map +1 -0
  388. package/dist/src/mcp/learning-tools-handlers.js +105 -0
  389. package/dist/src/mcp/learning-tools-handlers.js.map +1 -0
  390. package/dist/src/optimizations/BatchOperations.d.ts +5 -52
  391. package/dist/src/optimizations/BatchOperations.d.ts.map +1 -1
  392. package/dist/src/optimizations/BatchOperations.js +33 -186
  393. package/dist/src/optimizations/BatchOperations.js.map +1 -1
  394. package/dist/src/optimizations/QueryOptimizer.d.ts +4 -4
  395. package/dist/src/optimizations/QueryOptimizer.d.ts.map +1 -1
  396. package/dist/src/optimizations/QueryOptimizer.js +1 -3
  397. package/dist/src/optimizations/QueryOptimizer.js.map +1 -1
  398. package/dist/src/optimizations/ToolCache.d.ts +4 -4
  399. package/dist/src/optimizations/ToolCache.d.ts.map +1 -1
  400. package/dist/src/optimizations/ToolCache.js.map +1 -1
  401. package/dist/src/optimizations/index.d.ts +1 -1
  402. package/dist/src/optimizations/index.d.ts.map +1 -1
  403. package/dist/src/security/AttestationLog.d.ts +70 -0
  404. package/dist/src/security/AttestationLog.d.ts.map +1 -0
  405. package/dist/src/security/AttestationLog.js +174 -0
  406. package/dist/src/security/AttestationLog.js.map +1 -0
  407. package/dist/src/security/MutationGuard.d.ts +83 -0
  408. package/dist/src/security/MutationGuard.d.ts.map +1 -0
  409. package/dist/src/security/MutationGuard.js +379 -0
  410. package/dist/src/security/MutationGuard.js.map +1 -0
  411. package/dist/src/security/index.d.ts +15 -0
  412. package/dist/src/security/index.d.ts.map +1 -0
  413. package/dist/src/security/index.js +18 -0
  414. package/dist/src/security/index.js.map +1 -0
  415. package/dist/src/security/input-validation.d.ts +12 -12
  416. package/dist/src/security/input-validation.d.ts.map +1 -1
  417. package/dist/src/security/input-validation.js +0 -1
  418. package/dist/src/security/input-validation.js.map +1 -1
  419. package/dist/src/security/limits.d.ts +150 -0
  420. package/dist/src/security/limits.d.ts.map +1 -0
  421. package/dist/src/security/limits.js +288 -0
  422. package/dist/src/security/limits.js.map +1 -0
  423. package/dist/src/security/path-security.d.ts +100 -0
  424. package/dist/src/security/path-security.d.ts.map +1 -0
  425. package/dist/src/security/path-security.js +337 -0
  426. package/dist/src/security/path-security.js.map +1 -0
  427. package/dist/src/security/validation.d.ts +95 -0
  428. package/dist/src/security/validation.d.ts.map +1 -0
  429. package/dist/src/security/validation.js +315 -0
  430. package/dist/src/security/validation.js.map +1 -0
  431. package/dist/src/services/GraphTransformerService.d.ts +79 -0
  432. package/dist/src/services/GraphTransformerService.d.ts.map +1 -0
  433. package/dist/src/services/GraphTransformerService.js +331 -0
  434. package/dist/src/services/GraphTransformerService.js.map +1 -0
  435. package/dist/src/services/LLMRouter.d.ts +7 -61
  436. package/dist/src/services/LLMRouter.d.ts.map +1 -1
  437. package/dist/src/services/LLMRouter.js +25 -295
  438. package/dist/src/services/LLMRouter.js.map +1 -1
  439. package/dist/src/services/SemanticRouter.d.ts +78 -0
  440. package/dist/src/services/SemanticRouter.d.ts.map +1 -0
  441. package/dist/src/services/SemanticRouter.js +149 -0
  442. package/dist/src/services/SemanticRouter.js.map +1 -0
  443. package/dist/src/services/SonaTrajectoryService.d.ts +100 -0
  444. package/dist/src/services/SonaTrajectoryService.d.ts.map +1 -0
  445. package/dist/src/services/SonaTrajectoryService.js +231 -0
  446. package/dist/src/services/SonaTrajectoryService.js.map +1 -0
  447. package/dist/src/types/attention.d.ts +249 -0
  448. package/dist/src/types/attention.d.ts.map +1 -0
  449. package/dist/src/types/attention.js +43 -0
  450. package/dist/src/types/attention.js.map +1 -0
  451. package/dist/src/types/quic.d.ts +518 -0
  452. package/dist/src/types/quic.d.ts.map +1 -0
  453. package/dist/src/types/quic.js +272 -0
  454. package/dist/src/types/quic.js.map +1 -0
  455. package/dist/src/utils/LegacyAttentionAdapter.d.ts +93 -0
  456. package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +1 -0
  457. package/dist/src/utils/LegacyAttentionAdapter.js +241 -0
  458. package/dist/src/utils/LegacyAttentionAdapter.js.map +1 -0
  459. package/dist/src/utils/attention-metrics.d.ts +76 -0
  460. package/dist/src/utils/attention-metrics.d.ts.map +1 -0
  461. package/dist/src/utils/attention-metrics.js +178 -0
  462. package/dist/src/utils/attention-metrics.js.map +1 -0
  463. package/dist/src/utils/vector-math.d.ts +29 -0
  464. package/dist/src/utils/vector-math.d.ts.map +1 -0
  465. package/dist/src/utils/vector-math.js +66 -0
  466. package/dist/src/utils/vector-math.js.map +1 -0
  467. package/examples/README.md +105 -0
  468. package/examples/browser/attention-demo.html +499 -0
  469. package/examples/browser/flash-consolidation.html +598 -0
  470. package/examples/browser/hyperbolic-hierarchy.html +497 -0
  471. package/examples/quickstart.js +43 -0
  472. package/package.json +53 -56
  473. package/simulation/.claude-flow/metrics/agent-metrics.json +1 -0
  474. package/simulation/.claude-flow/metrics/performance.json +87 -0
  475. package/simulation/.claude-flow/metrics/task-metrics.json +10 -0
  476. package/simulation/COMPLETION-STATUS.md +139 -0
  477. package/simulation/FINAL-RESULTS.md +414 -0
  478. package/simulation/FINAL-STATUS.md +281 -0
  479. package/simulation/INTEGRATION-COMPLETE.md +452 -0
  480. package/simulation/MIGRATION-STATUS.md +231 -0
  481. package/simulation/OPTIMIZATION-RESULTS.md +397 -0
  482. package/simulation/PHASE1-COMPLETE.md +163 -0
  483. package/simulation/README.md +848 -0
  484. package/simulation/SIMULATION-RESULTS.md +239 -0
  485. package/simulation/cli.ts +78 -0
  486. package/simulation/configs/default.json +37 -0
  487. package/simulation/data/advanced/aidefence.graph +0 -0
  488. package/simulation/data/advanced/bmssp.graph +0 -0
  489. package/simulation/data/advanced/consciousness.graph +0 -0
  490. package/simulation/data/advanced/goalie.graph +0 -0
  491. package/simulation/data/advanced/psycho-symbolic.graph +0 -0
  492. package/simulation/data/advanced/research-swarm.graph +0 -0
  493. package/simulation/data/advanced/sublinear.graph +0 -0
  494. package/simulation/data/advanced/temporal.graph +0 -0
  495. package/simulation/data/causal.graph +0 -0
  496. package/simulation/data/graph-traversal.graph +0 -0
  497. package/simulation/data/lean-agentic.graph +0 -0
  498. package/simulation/data/reflexion.graph +0 -0
  499. package/simulation/data/skills.graph +0 -0
  500. package/simulation/data/stock-market.graph +0 -0
  501. package/simulation/data/strange-loops.graph +0 -0
  502. package/simulation/data/swarm.graph +0 -0
  503. package/simulation/data/voting-consensus.graph +0 -0
  504. package/simulation/docs/CLI-INTEGRATION-PLAN.md +1038 -0
  505. package/simulation/docs/COMPREHENSIVE-LATENT-SPACE-COMPLETION.md +354 -0
  506. package/simulation/docs/DOCUMENTATION-INDEX.md +226 -0
  507. package/simulation/docs/IMPLEMENTATION-COMPLETE.md +521 -0
  508. package/simulation/docs/OPTIMIZATION-SUMMARY.md +279 -0
  509. package/simulation/docs/README.md +229 -0
  510. package/simulation/docs/SWARM-5-INTEGRATION-SUMMARY.md +528 -0
  511. package/simulation/docs/TESTING-SUMMARY.md +304 -0
  512. package/simulation/docs/architecture/EXTENSION-API.md +868 -0
  513. package/simulation/docs/architecture/INTEGRATION-ARCHITECTURE.md +1138 -0
  514. package/simulation/docs/architecture/OPTIMIZATION-STRATEGY.md +778 -0
  515. package/simulation/docs/architecture/SIMULATION-ARCHITECTURE.md +892 -0
  516. package/simulation/docs/guides/CLI-REFERENCE.md +896 -0
  517. package/simulation/docs/guides/CUSTOM-SIMULATIONS.md +931 -0
  518. package/simulation/docs/guides/DEPLOYMENT.md +832 -0
  519. package/simulation/docs/guides/IMPLEMENTATION-SUMMARY.md +544 -0
  520. package/simulation/docs/guides/MIGRATION-GUIDE.md +591 -0
  521. package/simulation/docs/guides/QUICK-START.md +361 -0
  522. package/simulation/docs/guides/README.md +736 -0
  523. package/simulation/docs/guides/TROUBLESHOOTING.md +817 -0
  524. package/simulation/docs/guides/WIZARD-GUIDE.md +869 -0
  525. package/simulation/docs/reports/latent-space/MASTER-SYNTHESIS.md +345 -0
  526. package/simulation/docs/reports/latent-space/README.md +132 -0
  527. package/simulation/docs/reports/latent-space/attention-analysis-RESULTS.md +238 -0
  528. package/simulation/docs/reports/latent-space/clustering-analysis-RESULTS.md +210 -0
  529. package/simulation/docs/reports/latent-space/hnsw-exploration-RESULTS.md +332 -0
  530. package/simulation/docs/reports/latent-space/hypergraph-exploration-RESULTS.md +37 -0
  531. package/simulation/docs/reports/latent-space/neural-augmentation-RESULTS.md +69 -0
  532. package/simulation/docs/reports/latent-space/quantum-hybrid-RESULTS.md +91 -0
  533. package/simulation/docs/reports/latent-space/self-organizing-hnsw-RESULTS.md +51 -0
  534. package/simulation/docs/reports/latent-space/traversal-optimization-RESULTS.md +238 -0
  535. package/simulation/reports/README.md +397 -0
  536. package/simulation/reports/advanced-simulations-performance.md +1241 -0
  537. package/simulation/reports/aidefence-integration-2025-11-30T01-36-53-486Z.json +30 -0
  538. package/simulation/reports/architecture-analysis.md +1396 -0
  539. package/simulation/reports/basic-scenarios-performance.md +1840 -0
  540. package/simulation/reports/bmssp-integration-2025-11-30T01-36-27-193Z.json +30 -0
  541. package/simulation/reports/bmssp-integration-2025-11-30T03-38-12-887Z.json +30 -0
  542. package/simulation/reports/causal-reasoning-2025-11-29T23-35-21-795Z.json +36 -0
  543. package/simulation/reports/causal-reasoning-2025-11-30T00-58-42-862Z.json +30 -0
  544. package/simulation/reports/causal-reasoning-2025-11-30T00-59-12-546Z.json +40 -0
  545. package/simulation/reports/consciousness-explorer-2025-11-30T01-36-51-269Z.json +31 -0
  546. package/simulation/reports/core-benchmarks.md +727 -0
  547. package/simulation/reports/goalie-integration-2025-11-30T01-36-52-377Z.json +30 -0
  548. package/simulation/reports/graph-traversal-2025-11-29T23-35-35-279Z.json +78 -0
  549. package/simulation/reports/graph-traversal-2025-11-29T23-37-36-697Z.json +30 -0
  550. package/simulation/reports/graph-traversal-2025-11-30T01-03-59-716Z.json +30 -0
  551. package/simulation/reports/graph-traversal-2025-11-30T01-05-10-984Z.json +30 -0
  552. package/simulation/reports/graph-traversal-2025-11-30T01-06-16-334Z.json +30 -0
  553. package/simulation/reports/graph-traversal-2025-11-30T01-06-53-312Z.json +30 -0
  554. package/simulation/reports/graph-traversal-2025-11-30T01-07-51-075Z.json +24 -0
  555. package/simulation/reports/graph-traversal-2025-11-30T01-08-22-179Z.json +42 -0
  556. package/simulation/reports/lean-agentic-swarm-2025-11-29T23-37-23-804Z.json +148 -0
  557. package/simulation/reports/lean-agentic-swarm-2025-11-30T01-31-24-401Z.json +31 -0
  558. package/simulation/reports/lean-agentic-swarm-2025-11-30T03-38-01-470Z.json +31 -0
  559. package/simulation/reports/multi-agent-swarm-2025-11-29T23-35-28-093Z.json +78 -0
  560. package/simulation/reports/multi-agent-swarm-2025-11-30T01-03-54-062Z.json +42 -0
  561. package/simulation/reports/multi-agent-swarm-2025-11-30T01-05-06-092Z.json +42 -0
  562. package/simulation/reports/psycho-symbolic-reasoner-2025-11-30T01-36-50-180Z.json +30 -0
  563. package/simulation/reports/quality-metrics.md +727 -0
  564. package/simulation/reports/reflexion-learning-2025-11-29T23-35-09-774Z.json +48 -0
  565. package/simulation/reports/reflexion-learning-2025-11-29T23-37-16-934Z.json +36 -0
  566. package/simulation/reports/reflexion-learning-2025-11-30T00-07-49-259Z.json +30 -0
  567. package/simulation/reports/reflexion-learning-2025-11-30T00-09-29-319Z.json +51 -0
  568. package/simulation/reports/reflexion-learning-2025-11-30T00-28-37-659Z.json +51 -0
  569. package/simulation/reports/reflexion-learning-2025-11-30T01-31-30-690Z.json +29 -0
  570. package/simulation/reports/reflexion-learning-2025-11-30T03-38-06-937Z.json +29 -0
  571. package/simulation/reports/research-foundations.md +2004 -0
  572. package/simulation/reports/research-swarm-2025-11-30T01-36-54-647Z.json +30 -0
  573. package/simulation/reports/scalability-deployment.md +2404 -0
  574. package/simulation/reports/skill-evolution-2025-11-29T23-35-15-945Z.json +36 -0
  575. package/simulation/reports/skill-evolution-2025-11-30T01-03-17-995Z.json +30 -0
  576. package/simulation/reports/skill-evolution-2025-11-30T01-03-48-441Z.json +30 -0
  577. package/simulation/reports/skill-evolution-2025-11-30T01-05-00-554Z.json +30 -0
  578. package/simulation/reports/skill-evolution-2025-11-30T01-06-11-436Z.json +30 -0
  579. package/simulation/reports/skill-evolution-2025-11-30T01-06-51-979Z.json +30 -0
  580. package/simulation/reports/skill-evolution-2025-11-30T01-07-32-695Z.json +40 -0
  581. package/simulation/reports/stock-market-emergence-2025-11-30T00-11-43-865Z.json +56 -0
  582. package/simulation/reports/stock-market-emergence-2025-11-30T00-28-57-495Z.json +56 -0
  583. package/simulation/reports/strange-loops-2025-11-29T23-37-30-621Z.json +78 -0
  584. package/simulation/reports/strange-loops-2025-11-30T00-07-55-415Z.json +30 -0
  585. package/simulation/reports/strange-loops-2025-11-30T00-09-35-133Z.json +30 -0
  586. package/simulation/reports/strange-loops-2025-11-30T00-48-50-744Z.json +24 -0
  587. package/simulation/reports/strange-loops-2025-11-30T00-54-48-044Z.json +24 -0
  588. package/simulation/reports/strange-loops-2025-11-30T00-57-27-633Z.json +24 -0
  589. package/simulation/reports/strange-loops-2025-11-30T00-57-59-135Z.json +42 -0
  590. package/simulation/reports/sublinear-solver-2025-11-30T01-36-33-134Z.json +30 -0
  591. package/simulation/reports/temporal-lead-solver-2025-11-30T01-36-38-628Z.json +30 -0
  592. package/simulation/reports/use-cases-applications.md +2212 -0
  593. package/simulation/reports/voting-system-consensus-2025-11-30T00-11-37-199Z.json +58 -0
  594. package/simulation/reports/voting-system-consensus-2025-11-30T00-28-47-735Z.json +58 -0
  595. package/simulation/runner.ts +300 -0
  596. package/simulation/scenarios/README-advanced/aidefence-integration.md +63 -0
  597. package/simulation/scenarios/README-advanced/bmssp-integration.md +58 -0
  598. package/simulation/scenarios/README-advanced/consciousness-explorer.md +53 -0
  599. package/simulation/scenarios/README-advanced/goalie-integration.md +61 -0
  600. package/simulation/scenarios/README-advanced/psycho-symbolic-reasoner.md +55 -0
  601. package/simulation/scenarios/README-advanced/research-swarm.md +63 -0
  602. package/simulation/scenarios/README-advanced/sublinear-solver.md +58 -0
  603. package/simulation/scenarios/README-advanced/temporal-lead-solver.md +55 -0
  604. package/simulation/scenarios/README-basic/causal-reasoning.md +39 -0
  605. package/simulation/scenarios/README-basic/graph-traversal.md +41 -0
  606. package/simulation/scenarios/README-basic/lean-agentic-swarm.md +122 -0
  607. package/simulation/scenarios/README-basic/multi-agent-swarm.md +34 -0
  608. package/simulation/scenarios/README-basic/reflexion-learning.md +41 -0
  609. package/simulation/scenarios/README-basic/skill-evolution.md +38 -0
  610. package/simulation/scenarios/README-basic/stock-market-emergence.md +28 -0
  611. package/simulation/scenarios/README-basic/strange-loops.md +36 -0
  612. package/simulation/scenarios/README-basic/voting-system-consensus.md +28 -0
  613. package/simulation/scenarios/README.md +438 -0
  614. package/simulation/scenarios/aidefence-integration.ts +165 -0
  615. package/simulation/scenarios/bmssp-integration.ts +137 -0
  616. package/simulation/scenarios/causal-reasoning.ts +143 -0
  617. package/simulation/scenarios/consciousness-explorer.ts +139 -0
  618. package/simulation/scenarios/domain-examples/.claude-flow/metrics/agent-metrics.json +1 -0
  619. package/simulation/scenarios/domain-examples/.claude-flow/metrics/performance.json +87 -0
  620. package/simulation/scenarios/domain-examples/.claude-flow/metrics/task-metrics.json +10 -0
  621. package/simulation/scenarios/domain-examples/README.md +525 -0
  622. package/simulation/scenarios/domain-examples/e-commerce-recommendations.ts +220 -0
  623. package/simulation/scenarios/domain-examples/index.ts +81 -0
  624. package/simulation/scenarios/domain-examples/iot-sensor-networks.ts +290 -0
  625. package/simulation/scenarios/domain-examples/medical-imaging.ts +181 -0
  626. package/simulation/scenarios/domain-examples/robotics-navigation.ts +214 -0
  627. package/simulation/scenarios/domain-examples/scientific-research.ts +250 -0
  628. package/simulation/scenarios/domain-examples/trading-systems.ts +138 -0
  629. package/simulation/scenarios/goalie-integration.ts +161 -0
  630. package/simulation/scenarios/graph-traversal.ts +129 -0
  631. package/simulation/scenarios/latent-space/OPTIMIZATION-COMPLETE.md +287 -0
  632. package/simulation/scenarios/latent-space/README-attention-analysis.md +170 -0
  633. package/simulation/scenarios/latent-space/README-clustering-analysis.md +239 -0
  634. package/simulation/scenarios/latent-space/README-hnsw-exploration.md +199 -0
  635. package/simulation/scenarios/latent-space/README-hypergraph-exploration.md +279 -0
  636. package/simulation/scenarios/latent-space/README-neural-augmentation.md +267 -0
  637. package/simulation/scenarios/latent-space/README-quantum-hybrid.md +276 -0
  638. package/simulation/scenarios/latent-space/README-self-organizing-hnsw.md +244 -0
  639. package/simulation/scenarios/latent-space/README-traversal-optimization.md +212 -0
  640. package/simulation/scenarios/latent-space/attention-analysis.ts +598 -0
  641. package/simulation/scenarios/latent-space/clustering-analysis.ts +796 -0
  642. package/simulation/scenarios/latent-space/hnsw-exploration.ts +526 -0
  643. package/simulation/scenarios/latent-space/hypergraph-exploration.ts +706 -0
  644. package/simulation/scenarios/latent-space/index.ts +47 -0
  645. package/simulation/scenarios/latent-space/neural-augmentation.ts +604 -0
  646. package/simulation/scenarios/latent-space/quantum-hybrid.ts +508 -0
  647. package/simulation/scenarios/latent-space/self-organizing-hnsw.ts +680 -0
  648. package/simulation/scenarios/latent-space/traversal-optimization.ts +782 -0
  649. package/simulation/scenarios/lean-agentic-swarm.ts +182 -0
  650. package/simulation/scenarios/multi-agent-swarm.ts +146 -0
  651. package/simulation/scenarios/psycho-symbolic-reasoner.ts +136 -0
  652. package/simulation/scenarios/reflexion-learning.ts +132 -0
  653. package/simulation/scenarios/research-swarm.ts +187 -0
  654. package/simulation/scenarios/skill-evolution.ts +135 -0
  655. package/simulation/scenarios/stock-market-emergence.ts +323 -0
  656. package/simulation/scenarios/strange-loops.ts +175 -0
  657. package/simulation/scenarios/sublinear-solver.ts +108 -0
  658. package/simulation/scenarios/temporal-lead-solver.ts +121 -0
  659. package/simulation/scenarios/voting-system-consensus.ts +251 -0
  660. package/simulation/tests/latent-space/attention-analysis.test.ts +204 -0
  661. package/simulation/tests/latent-space/clustering-analysis.test.ts +281 -0
  662. package/simulation/tests/latent-space/hnsw-exploration.test.ts +253 -0
  663. package/simulation/tests/latent-space/hypergraph-exploration.test.ts +295 -0
  664. package/simulation/tests/latent-space/neural-augmentation.test.ts +326 -0
  665. package/simulation/tests/latent-space/quantum-hybrid.test.ts +307 -0
  666. package/simulation/tests/latent-space/self-organizing-hnsw.test.ts +291 -0
  667. package/simulation/tests/latent-space/traversal-optimization.test.ts +261 -0
  668. package/simulation/types.ts +177 -0
  669. package/simulation/utils/PerformanceOptimizer.ts +269 -0
  670. package/src/backends/GraphBackend.ts +290 -0
  671. package/src/backends/LearningBackend.ts +210 -0
  672. package/src/backends/README.md +389 -0
  673. package/src/backends/VectorBackend.ts +147 -0
  674. package/src/backends/detector.ts +283 -0
  675. package/src/backends/factory.ts +279 -0
  676. package/src/backends/graph/GraphDatabaseAdapter.ts +334 -0
  677. package/src/backends/hnswlib/HNSWLibBackend.ts +419 -0
  678. package/src/backends/hnswlib/index.ts +7 -0
  679. package/src/backends/index.ts +32 -0
  680. package/src/backends/ruvector/GuardedVectorBackend.ts +219 -0
  681. package/src/backends/ruvector/RuVectorBackend.ts +343 -0
  682. package/src/backends/ruvector/RuVectorLearning.ts +254 -0
  683. package/src/backends/ruvector/index.ts +9 -0
  684. package/src/benchmarks/wasm-vector-benchmark.ts +250 -0
  685. package/src/browser/AdvancedFeatures.ts +565 -0
  686. package/src/browser/AttentionBrowser.ts +387 -0
  687. package/src/browser/HNSWIndex.ts +494 -0
  688. package/src/browser/ProductQuantization.ts +419 -0
  689. package/src/browser/index.ts +317 -0
  690. package/src/cli/agentdb-cli.ts +2712 -0
  691. package/src/cli/attention-cli-integration.ts +91 -0
  692. package/src/cli/commands/attention.ts +656 -0
  693. package/src/cli/commands/doctor.ts +322 -0
  694. package/src/cli/commands/init.ts +176 -0
  695. package/src/cli/commands/install-embeddings.ts +81 -0
  696. package/src/cli/commands/migrate.ts +545 -0
  697. package/src/cli/commands/simulate-custom.ts +232 -0
  698. package/src/cli/commands/simulate-report.ts +171 -0
  699. package/src/cli/commands/simulate-wizard.ts +379 -0
  700. package/src/cli/commands/simulate.ts +115 -0
  701. package/src/cli/commands/status.ts +156 -0
  702. package/src/cli/examples.sh +83 -0
  703. package/src/cli/lib/attention-config.ts +326 -0
  704. package/src/cli/lib/config-manager.ts +627 -0
  705. package/src/cli/lib/config-validator.ts +261 -0
  706. package/src/cli/lib/health-monitor.ts +513 -0
  707. package/src/cli/lib/help-formatter.ts +406 -0
  708. package/src/cli/lib/history-tracker.ts +503 -0
  709. package/src/cli/lib/report-generator.ts +455 -0
  710. package/src/cli/lib/report-store.ts +582 -0
  711. package/src/cli/lib/simulation-registry.ts +503 -0
  712. package/src/cli/lib/simulation-runner.ts +291 -0
  713. package/src/cli/tests/agentdb-cli.test.ts +58 -0
  714. package/src/cli/tests/attention-cli.test.ts +335 -0
  715. package/src/controllers/AttentionService.ts +770 -0
  716. package/src/controllers/CausalMemoryGraph.ts +773 -0
  717. package/src/controllers/CausalRecall.ts +484 -0
  718. package/src/controllers/ContextSynthesizer.ts +285 -0
  719. package/src/controllers/EmbeddingService.ts +161 -0
  720. package/src/controllers/EnhancedEmbeddingService.ts +143 -0
  721. package/src/controllers/ExplainableRecall.ts +746 -0
  722. package/src/controllers/HNSWIndex.ts +495 -0
  723. package/src/controllers/LearningSystem.ts +1270 -0
  724. package/src/controllers/MMRDiversityRanker.ts +187 -0
  725. package/src/controllers/MetadataFilter.ts +280 -0
  726. package/src/controllers/NightlyLearner.ts +647 -0
  727. package/src/controllers/QUICClient.ts +413 -0
  728. package/src/controllers/QUICServer.ts +498 -0
  729. package/src/controllers/ReasoningBank.ts +665 -0
  730. package/src/controllers/ReflexionMemory.ts +872 -0
  731. package/src/controllers/SkillLibrary.ts +795 -0
  732. package/src/controllers/SyncCoordinator.ts +597 -0
  733. package/src/controllers/WASMVectorSearch.ts +292 -0
  734. package/src/controllers/frontier-index.ts +35 -0
  735. package/src/controllers/index.ts +57 -0
  736. package/src/coordination/MultiDatabaseCoordinator.ts +1107 -0
  737. package/src/coordination/index.ts +24 -0
  738. package/src/core/AgentDB.ts +211 -0
  739. package/src/db-fallback.ts +296 -0
  740. package/src/db-test.ts +59 -0
  741. package/src/db-unified.ts +327 -0
  742. package/src/examples/quic-sync-example.ts +198 -0
  743. package/src/examples/wasm-vector-usage.ts +245 -0
  744. package/src/index.ts +69 -0
  745. package/src/mcp/agentdb-mcp-server.ts +2318 -0
  746. package/src/mcp/attention-mcp-integration.ts +145 -0
  747. package/src/mcp/attention-tools-handlers.ts +586 -0
  748. package/src/mcp/learning-tools-handlers.ts +106 -0
  749. package/src/optimizations/BatchOperations.ts +594 -0
  750. package/src/optimizations/QueryOptimizer.ts +297 -0
  751. package/src/optimizations/ToolCache.ts +355 -0
  752. package/src/optimizations/index.ts +11 -0
  753. package/src/schemas/frontier-schema.sql +378 -0
  754. package/src/schemas/schema.sql +382 -0
  755. package/src/security/AttestationLog.ts +252 -0
  756. package/src/security/MutationGuard.ts +420 -0
  757. package/src/security/index.ts +52 -0
  758. package/src/security/input-validation.ts +543 -0
  759. package/src/security/limits.ts +375 -0
  760. package/src/security/path-security.ts +436 -0
  761. package/src/security/validation.ts +556 -0
  762. package/src/services/GraphTransformerService.ts +389 -0
  763. package/src/services/LLMRouter.ts +380 -0
  764. package/src/services/SemanticRouter.ts +169 -0
  765. package/src/services/SonaTrajectoryService.ts +264 -0
  766. package/src/tests/attention-service.test.ts +492 -0
  767. package/src/tests/wasm-vector-search.test.ts +240 -0
  768. package/src/types/attention.ts +392 -0
  769. package/src/types/quic.ts +772 -0
  770. package/src/utils/LegacyAttentionAdapter.ts +393 -0
  771. package/src/utils/NodeIdMapper.ts +64 -0
  772. package/src/utils/attention-metrics.ts +253 -0
  773. package/src/utils/vector-math.ts +71 -0
  774. package/LICENSE +0 -21
  775. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts +0 -175
  776. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts.map +0 -1
  777. package/dist/src/backends/rvf/AdaptiveIndexTuner.js +0 -559
  778. package/dist/src/backends/rvf/AdaptiveIndexTuner.js.map +0 -1
  779. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts +0 -148
  780. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts.map +0 -1
  781. package/dist/src/backends/rvf/ContrastiveTrainer.js +0 -438
  782. package/dist/src/backends/rvf/ContrastiveTrainer.js.map +0 -1
  783. package/dist/src/backends/rvf/FederatedSessionManager.d.ts +0 -211
  784. package/dist/src/backends/rvf/FederatedSessionManager.d.ts.map +0 -1
  785. package/dist/src/backends/rvf/FederatedSessionManager.js +0 -389
  786. package/dist/src/backends/rvf/FederatedSessionManager.js.map +0 -1
  787. package/dist/src/backends/rvf/FilterBuilder.d.ts +0 -136
  788. package/dist/src/backends/rvf/FilterBuilder.d.ts.map +0 -1
  789. package/dist/src/backends/rvf/FilterBuilder.js +0 -157
  790. package/dist/src/backends/rvf/FilterBuilder.js.map +0 -1
  791. package/dist/src/backends/rvf/NativeAccelerator.d.ts +0 -140
  792. package/dist/src/backends/rvf/NativeAccelerator.d.ts.map +0 -1
  793. package/dist/src/backends/rvf/NativeAccelerator.js +0 -630
  794. package/dist/src/backends/rvf/NativeAccelerator.js.map +0 -1
  795. package/dist/src/backends/rvf/RvfBackend.d.ts +0 -194
  796. package/dist/src/backends/rvf/RvfBackend.d.ts.map +0 -1
  797. package/dist/src/backends/rvf/RvfBackend.js +0 -607
  798. package/dist/src/backends/rvf/RvfBackend.js.map +0 -1
  799. package/dist/src/backends/rvf/RvfSolver.d.ts +0 -175
  800. package/dist/src/backends/rvf/RvfSolver.d.ts.map +0 -1
  801. package/dist/src/backends/rvf/RvfSolver.js +0 -176
  802. package/dist/src/backends/rvf/RvfSolver.js.map +0 -1
  803. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts +0 -143
  804. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts.map +0 -1
  805. package/dist/src/backends/rvf/SelfLearningRvfBackend.js +0 -569
  806. package/dist/src/backends/rvf/SelfLearningRvfBackend.js.map +0 -1
  807. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts +0 -128
  808. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts.map +0 -1
  809. package/dist/src/backends/rvf/SemanticQueryRouter.js +0 -415
  810. package/dist/src/backends/rvf/SemanticQueryRouter.js.map +0 -1
  811. package/dist/src/backends/rvf/SimdFallbacks.d.ts +0 -25
  812. package/dist/src/backends/rvf/SimdFallbacks.d.ts.map +0 -1
  813. package/dist/src/backends/rvf/SimdFallbacks.js +0 -287
  814. package/dist/src/backends/rvf/SimdFallbacks.js.map +0 -1
  815. package/dist/src/backends/rvf/SolverBandit.d.ts +0 -100
  816. package/dist/src/backends/rvf/SolverBandit.d.ts.map +0 -1
  817. package/dist/src/backends/rvf/SolverBandit.js +0 -216
  818. package/dist/src/backends/rvf/SolverBandit.js.map +0 -1
  819. package/dist/src/backends/rvf/SonaLearningBackend.d.ts +0 -157
  820. package/dist/src/backends/rvf/SonaLearningBackend.d.ts.map +0 -1
  821. package/dist/src/backends/rvf/SonaLearningBackend.js +0 -283
  822. package/dist/src/backends/rvf/SonaLearningBackend.js.map +0 -1
  823. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts +0 -77
  824. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +0 -1
  825. package/dist/src/backends/rvf/SqlJsRvfBackend.js +0 -382
  826. package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +0 -1
  827. package/dist/src/backends/rvf/WasmStoreBridge.d.ts +0 -27
  828. package/dist/src/backends/rvf/WasmStoreBridge.d.ts.map +0 -1
  829. package/dist/src/backends/rvf/WasmStoreBridge.js +0 -87
  830. package/dist/src/backends/rvf/WasmStoreBridge.js.map +0 -1
  831. package/dist/src/backends/rvf/validation.d.ts +0 -20
  832. package/dist/src/backends/rvf/validation.d.ts.map +0 -1
  833. package/dist/src/backends/rvf/validation.js +0 -78
  834. package/dist/src/backends/rvf/validation.js.map +0 -1
  835. package/dist/src/benchmark/BenchmarkSuite.d.ts +0 -318
  836. package/dist/src/benchmark/BenchmarkSuite.d.ts.map +0 -1
  837. package/dist/src/benchmark/BenchmarkSuite.js +0 -986
  838. package/dist/src/benchmark/BenchmarkSuite.js.map +0 -1
  839. package/dist/src/benchmark/index.d.ts +0 -29
  840. package/dist/src/benchmark/index.d.ts.map +0 -1
  841. package/dist/src/benchmark/index.js +0 -39
  842. package/dist/src/benchmark/index.js.map +0 -1
  843. package/dist/src/cli/commands/hyperbolic.d.ts +0 -11
  844. package/dist/src/cli/commands/hyperbolic.d.ts.map +0 -1
  845. package/dist/src/cli/commands/hyperbolic.js +0 -428
  846. package/dist/src/cli/commands/hyperbolic.js.map +0 -1
  847. package/dist/src/cli/commands/learn.d.ts +0 -11
  848. package/dist/src/cli/commands/learn.d.ts.map +0 -1
  849. package/dist/src/cli/commands/learn.js +0 -404
  850. package/dist/src/cli/commands/learn.js.map +0 -1
  851. package/dist/src/cli/commands/route.d.ts +0 -11
  852. package/dist/src/cli/commands/route.d.ts.map +0 -1
  853. package/dist/src/cli/commands/route.js +0 -414
  854. package/dist/src/cli/commands/route.js.map +0 -1
  855. package/dist/src/cli/commands/rvf.d.ts +0 -21
  856. package/dist/src/cli/commands/rvf.d.ts.map +0 -1
  857. package/dist/src/cli/commands/rvf.js +0 -448
  858. package/dist/src/cli/commands/rvf.js.map +0 -1
  859. package/dist/src/cli/tests/agentdb-cli.test.d.ts +0 -8
  860. package/dist/src/cli/tests/agentdb-cli.test.d.ts.map +0 -1
  861. package/dist/src/cli/tests/agentdb-cli.test.js +0 -50
  862. package/dist/src/cli/tests/agentdb-cli.test.js.map +0 -1
  863. package/dist/src/cli/tests/attention-cli.test.d.ts +0 -5
  864. package/dist/src/cli/tests/attention-cli.test.d.ts.map +0 -1
  865. package/dist/src/cli/tests/attention-cli.test.js +0 -257
  866. package/dist/src/cli/tests/attention-cli.test.js.map +0 -1
  867. package/dist/src/compatibility/DeprecationWarnings.d.ts +0 -54
  868. package/dist/src/compatibility/DeprecationWarnings.d.ts.map +0 -1
  869. package/dist/src/compatibility/DeprecationWarnings.js +0 -131
  870. package/dist/src/compatibility/DeprecationWarnings.js.map +0 -1
  871. package/dist/src/compatibility/MigrationUtilities.d.ts +0 -30
  872. package/dist/src/compatibility/MigrationUtilities.d.ts.map +0 -1
  873. package/dist/src/compatibility/MigrationUtilities.js +0 -184
  874. package/dist/src/compatibility/MigrationUtilities.js.map +0 -1
  875. package/dist/src/compatibility/V1toV2Adapter.d.ts +0 -76
  876. package/dist/src/compatibility/V1toV2Adapter.d.ts.map +0 -1
  877. package/dist/src/compatibility/V1toV2Adapter.js +0 -198
  878. package/dist/src/compatibility/V1toV2Adapter.js.map +0 -1
  879. package/dist/src/compatibility/VersionDetector.d.ts +0 -32
  880. package/dist/src/compatibility/VersionDetector.d.ts.map +0 -1
  881. package/dist/src/compatibility/VersionDetector.js +0 -144
  882. package/dist/src/compatibility/VersionDetector.js.map +0 -1
  883. package/dist/src/compatibility/index.d.ts +0 -11
  884. package/dist/src/compatibility/index.d.ts.map +0 -1
  885. package/dist/src/compatibility/index.js +0 -10
  886. package/dist/src/compatibility/index.js.map +0 -1
  887. package/dist/src/compatibility/types.d.ts +0 -103
  888. package/dist/src/compatibility/types.d.ts.map +0 -1
  889. package/dist/src/compatibility/types.js +0 -5
  890. package/dist/src/compatibility/types.js.map +0 -1
  891. package/dist/src/controllers/MemoryController.d.ts +0 -161
  892. package/dist/src/controllers/MemoryController.d.ts.map +0 -1
  893. package/dist/src/controllers/MemoryController.js +0 -290
  894. package/dist/src/controllers/MemoryController.js.map +0 -1
  895. package/dist/src/controllers/attention/CrossAttentionController.d.ts +0 -141
  896. package/dist/src/controllers/attention/CrossAttentionController.d.ts.map +0 -1
  897. package/dist/src/controllers/attention/CrossAttentionController.js +0 -325
  898. package/dist/src/controllers/attention/CrossAttentionController.js.map +0 -1
  899. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts +0 -137
  900. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts.map +0 -1
  901. package/dist/src/controllers/attention/MultiHeadAttentionController.js +0 -339
  902. package/dist/src/controllers/attention/MultiHeadAttentionController.js.map +0 -1
  903. package/dist/src/controllers/attention/SelfAttentionController.d.ts +0 -117
  904. package/dist/src/controllers/attention/SelfAttentionController.d.ts.map +0 -1
  905. package/dist/src/controllers/attention/SelfAttentionController.js +0 -205
  906. package/dist/src/controllers/attention/SelfAttentionController.js.map +0 -1
  907. package/dist/src/controllers/attention/index.d.ts +0 -15
  908. package/dist/src/controllers/attention/index.d.ts.map +0 -1
  909. package/dist/src/controllers/attention/index.js +0 -12
  910. package/dist/src/controllers/attention/index.js.map +0 -1
  911. package/dist/src/core/QueryCache.d.ts +0 -138
  912. package/dist/src/core/QueryCache.d.ts.map +0 -1
  913. package/dist/src/core/QueryCache.js +0 -313
  914. package/dist/src/core/QueryCache.js.map +0 -1
  915. package/dist/src/observability/index.d.ts +0 -8
  916. package/dist/src/observability/index.d.ts.map +0 -1
  917. package/dist/src/observability/index.js +0 -8
  918. package/dist/src/observability/index.js.map +0 -1
  919. package/dist/src/observability/integration.d.ts +0 -32
  920. package/dist/src/observability/integration.d.ts.map +0 -1
  921. package/dist/src/observability/integration.js +0 -157
  922. package/dist/src/observability/integration.js.map +0 -1
  923. package/dist/src/observability/telemetry.d.ts +0 -137
  924. package/dist/src/observability/telemetry.d.ts.map +0 -1
  925. package/dist/src/observability/telemetry.js +0 -420
  926. package/dist/src/observability/telemetry.js.map +0 -1
  927. package/dist/src/quantization/index.d.ts +0 -7
  928. package/dist/src/quantization/index.d.ts.map +0 -1
  929. package/dist/src/quantization/index.js +0 -15
  930. package/dist/src/quantization/index.js.map +0 -1
  931. package/dist/src/quantization/vector-quantization.d.ts +0 -388
  932. package/dist/src/quantization/vector-quantization.d.ts.map +0 -1
  933. package/dist/src/quantization/vector-quantization.js +0 -1136
  934. package/dist/src/quantization/vector-quantization.js.map +0 -1
  935. package/dist/src/search/HybridSearch.d.ts +0 -311
  936. package/dist/src/search/HybridSearch.d.ts.map +0 -1
  937. package/dist/src/search/HybridSearch.js +0 -712
  938. package/dist/src/search/HybridSearch.js.map +0 -1
  939. package/dist/src/search/index.d.ts +0 -12
  940. package/dist/src/search/index.d.ts.map +0 -1
  941. package/dist/src/search/index.js +0 -16
  942. package/dist/src/search/index.js.map +0 -1
  943. package/dist/src/services/AttentionService.d.ts +0 -303
  944. package/dist/src/services/AttentionService.d.ts.map +0 -1
  945. package/dist/src/services/AttentionService.js +0 -1167
  946. package/dist/src/services/AttentionService.js.map +0 -1
  947. package/dist/src/simd/index.d.ts +0 -9
  948. package/dist/src/simd/index.d.ts.map +0 -1
  949. package/dist/src/simd/index.js +0 -27
  950. package/dist/src/simd/index.js.map +0 -1
  951. package/dist/src/simd/simd-vector-ops.d.ts +0 -332
  952. package/dist/src/simd/simd-vector-ops.d.ts.map +0 -1
  953. package/dist/src/simd/simd-vector-ops.js +0 -947
  954. package/dist/src/simd/simd-vector-ops.js.map +0 -1
  955. package/dist/src/tests/attention-service.test.d.ts +0 -7
  956. package/dist/src/tests/attention-service.test.d.ts.map +0 -1
  957. package/dist/src/tests/attention-service.test.js +0 -401
  958. package/dist/src/tests/attention-service.test.js.map +0 -1
  959. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts +0 -7
  960. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts.map +0 -1
  961. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js +0 -283
  962. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js.map +0 -1
  963. package/dist/src/tests/query-cache.test.d.ts +0 -7
  964. package/dist/src/tests/query-cache.test.d.ts.map +0 -1
  965. package/dist/src/tests/query-cache.test.js +0 -343
  966. package/dist/src/tests/query-cache.test.js.map +0 -1
  967. package/dist/src/tests/ruvector-integration.test.d.ts +0 -14
  968. package/dist/src/tests/ruvector-integration.test.d.ts.map +0 -1
  969. package/dist/src/tests/ruvector-integration.test.js +0 -1156
  970. package/dist/src/tests/ruvector-integration.test.js.map +0 -1
  971. package/dist/src/tests/unit/auth/crypto.utils.test.d.ts +0 -6
  972. package/dist/src/tests/unit/auth/crypto.utils.test.d.ts.map +0 -1
  973. package/dist/src/tests/unit/auth/crypto.utils.test.js +0 -310
  974. package/dist/src/tests/unit/auth/crypto.utils.test.js.map +0 -1
  975. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts +0 -5
  976. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts.map +0 -1
  977. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js +0 -207
  978. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js.map +0 -1
  979. package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts +0 -5
  980. package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts.map +0 -1
  981. package/dist/src/tests/unit/compatibility/migration-utils.test.js +0 -264
  982. package/dist/src/tests/unit/compatibility/migration-utils.test.js.map +0 -1
  983. package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts +0 -7
  984. package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts.map +0 -1
  985. package/dist/src/tests/unit/compatibility/v1-adapter.test.js +0 -228
  986. package/dist/src/tests/unit/compatibility/v1-adapter.test.js.map +0 -1
  987. package/dist/src/tests/unit/compatibility/version-detector.test.d.ts +0 -10
  988. package/dist/src/tests/unit/compatibility/version-detector.test.d.ts.map +0 -1
  989. package/dist/src/tests/unit/compatibility/version-detector.test.js +0 -162
  990. package/dist/src/tests/unit/compatibility/version-detector.test.js.map +0 -1
  991. package/dist/src/tests/vector-quantization.test.d.ts +0 -5
  992. package/dist/src/tests/vector-quantization.test.d.ts.map +0 -1
  993. package/dist/src/tests/vector-quantization.test.js +0 -338
  994. package/dist/src/tests/vector-quantization.test.js.map +0 -1
  995. package/dist/src/tests/wasm-vector-search.test.d.ts +0 -7
  996. package/dist/src/tests/wasm-vector-search.test.d.ts.map +0 -1
  997. package/dist/src/tests/wasm-vector-search.test.js +0 -193
  998. package/dist/src/tests/wasm-vector-search.test.js.map +0 -1
  999. package/dist/src/types/database.types.d.ts +0 -275
  1000. package/dist/src/types/database.types.d.ts.map +0 -1
  1001. package/dist/src/types/database.types.js +0 -57
  1002. package/dist/src/types/database.types.js.map +0 -1
  1003. package/dist/src/utils/chalk-fallback.d.ts +0 -3
  1004. package/dist/src/utils/chalk-fallback.d.ts.map +0 -1
  1005. package/dist/src/utils/chalk-fallback.js +0 -20
  1006. package/dist/src/utils/chalk-fallback.js.map +0 -1
  1007. package/dist/src/utils/crypto.utils.d.ts +0 -122
  1008. package/dist/src/utils/crypto.utils.d.ts.map +0 -1
  1009. package/dist/src/utils/crypto.utils.js +0 -296
  1010. package/dist/src/utils/crypto.utils.js.map +0 -1
  1011. package/dist/src/utils/similarity.d.ts +0 -11
  1012. package/dist/src/utils/similarity.d.ts.map +0 -1
  1013. package/dist/src/utils/similarity.js +0 -25
  1014. package/dist/src/utils/similarity.js.map +0 -1
  1015. package/dist/src/wasm-loader.d.ts +0 -67
  1016. package/dist/src/wasm-loader.d.ts.map +0 -1
  1017. package/dist/src/wasm-loader.js +0 -78
  1018. package/dist/src/wasm-loader.js.map +0 -1
  1019. package/dist/src/wrappers/agentdb-fast.d.ts +0 -139
  1020. package/dist/src/wrappers/agentdb-fast.d.ts.map +0 -1
  1021. package/dist/src/wrappers/agentdb-fast.js +0 -316
  1022. package/dist/src/wrappers/agentdb-fast.js.map +0 -1
  1023. package/dist/src/wrappers/attention-fallbacks.d.ts +0 -351
  1024. package/dist/src/wrappers/attention-fallbacks.d.ts.map +0 -1
  1025. package/dist/src/wrappers/attention-fallbacks.js +0 -1487
  1026. package/dist/src/wrappers/attention-fallbacks.js.map +0 -1
  1027. package/dist/src/wrappers/embedding-service.d.ts +0 -117
  1028. package/dist/src/wrappers/embedding-service.d.ts.map +0 -1
  1029. package/dist/src/wrappers/embedding-service.js +0 -376
  1030. package/dist/src/wrappers/embedding-service.js.map +0 -1
  1031. package/dist/src/wrappers/gnn-wrapper.d.ts +0 -71
  1032. package/dist/src/wrappers/gnn-wrapper.d.ts.map +0 -1
  1033. package/dist/src/wrappers/gnn-wrapper.js +0 -240
  1034. package/dist/src/wrappers/gnn-wrapper.js.map +0 -1
  1035. package/dist/src/wrappers/index.d.ts +0 -48
  1036. package/dist/src/wrappers/index.d.ts.map +0 -1
  1037. package/dist/src/wrappers/index.js +0 -83
  1038. package/dist/src/wrappers/index.js.map +0 -1
@@ -1,1487 +0,0 @@
1
- /**
2
- * Attention Module Fallbacks
3
- *
4
- * Since @ruvector/attention is completely broken, provide JavaScript fallbacks
5
- * Performance will be slower but functionality will work
6
- *
7
- * Optimized version includes:
8
- * - SIMD-style loop unrolling (8x with separate accumulators)
9
- * - Pre-allocated buffer pools for intermediate results
10
- * - Numerically stable fused softmax operations
11
- * - TypedArray optimizations (Float32Array)
12
- * - Batch processing capabilities
13
- * - Flash attention with improved tiling strategy
14
- */
15
- // ============================================================================
16
- // Security Constants
17
- // ============================================================================
18
- /** Maximum hidden dimension to prevent memory exhaustion */
19
- const MAX_HIDDEN_DIM = 16384;
20
- /** Maximum sequence length for attention */
21
- const MAX_SEQ_LENGTH = 32768;
22
- /** Maximum buffer pool size per dimension */
23
- const MAX_BUFFER_POOL_SIZE = 64;
24
- /** Maximum total memory for buffer pools (64MB) */
25
- const MAX_BUFFER_POOL_MEMORY = 64 * 1024 * 1024;
26
- /** Small epsilon for numerical stability */
27
- const EPSILON = 1e-8;
28
- // ============================================================================
29
- // Validation Helpers
30
- // ============================================================================
31
- /**
32
- * Validate dimension is within safe limits
33
- */
34
- function validateDimension(dim, name) {
35
- if (!Number.isFinite(dim) || dim < 1 || dim > MAX_HIDDEN_DIM) {
36
- throw new Error(`${name} must be between 1 and ${MAX_HIDDEN_DIM}`);
37
- }
38
- }
39
- /**
40
- * Validate sequence length is within safe limits
41
- */
42
- function validateSeqLength(len, name) {
43
- if (!Number.isFinite(len) || len < 1 || len > MAX_SEQ_LENGTH) {
44
- throw new Error(`${name} must be between 1 and ${MAX_SEQ_LENGTH}`);
45
- }
46
- }
47
- /**
48
- * Validate Float32Array input
49
- */
50
- function validateFloat32Array(arr, name) {
51
- if (!(arr instanceof Float32Array)) {
52
- throw new Error(`${name} must be a Float32Array`);
53
- }
54
- }
55
- // ============================================================================
56
- // Buffer Pool Management - Pre-allocated buffers for hot paths
57
- // ============================================================================
58
- /**
59
- * Buffer pool for reusing Float32Arrays to avoid GC pressure
60
- */
61
- class BufferPool {
62
- pools = new Map();
63
- maxPoolSize = MAX_BUFFER_POOL_SIZE;
64
- totalMemory = 0;
65
- acquire(size) {
66
- // Validate size to prevent DoS
67
- if (!Number.isFinite(size) || size < 0 || size > MAX_HIDDEN_DIM * MAX_SEQ_LENGTH) {
68
- throw new Error(`Invalid buffer size: ${size}`);
69
- }
70
- const pool = this.pools.get(size);
71
- if (pool && pool.length > 0) {
72
- return pool.pop();
73
- }
74
- return new Float32Array(size);
75
- }
76
- release(buffer) {
77
- const size = buffer.length;
78
- const bufferBytes = size * 4; // Float32 = 4 bytes
79
- // Check total memory limit before adding to pool
80
- if (this.totalMemory + bufferBytes > MAX_BUFFER_POOL_MEMORY) {
81
- return; // Don't pool, let GC handle it
82
- }
83
- let pool = this.pools.get(size);
84
- if (!pool) {
85
- pool = [];
86
- this.pools.set(size, pool);
87
- }
88
- if (pool.length < this.maxPoolSize) {
89
- buffer.fill(0); // Clear for reuse
90
- pool.push(buffer);
91
- this.totalMemory += bufferBytes;
92
- }
93
- }
94
- clear() {
95
- this.pools.clear();
96
- this.totalMemory = 0;
97
- }
98
- }
99
- // Global buffer pool instance
100
- const globalBufferPool = new BufferPool();
101
- // ============================================================================
102
- // SIMD-Style Optimized Operations
103
- // ============================================================================
104
- /**
105
- * 8x unrolled dot product with separate accumulators
106
- * Mimics SIMD behavior for better CPU pipelining
107
- */
108
- function dotProduct8x(a, b, length) {
109
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
110
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
111
- const unrolledLen = length - (length % 8);
112
- // Main 8x unrolled loop
113
- for (let i = 0; i < unrolledLen; i += 8) {
114
- sum0 += a[i] * b[i];
115
- sum1 += a[i + 1] * b[i + 1];
116
- sum2 += a[i + 2] * b[i + 2];
117
- sum3 += a[i + 3] * b[i + 3];
118
- sum4 += a[i + 4] * b[i + 4];
119
- sum5 += a[i + 5] * b[i + 5];
120
- sum6 += a[i + 6] * b[i + 6];
121
- sum7 += a[i + 7] * b[i + 7];
122
- }
123
- // Handle remainder
124
- for (let i = unrolledLen; i < length; i++) {
125
- sum0 += a[i] * b[i];
126
- }
127
- // Combine accumulators (in pairs to maintain precision)
128
- return (sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7);
129
- }
130
- /**
131
- * 8x unrolled matrix-vector multiplication
132
- * output[i] = sum_j(matrix[i][j] * vector[j])
133
- */
134
- function matVecMul8x(matrix, vector, output, rows, cols) {
135
- const unrolledCols = cols - (cols % 8);
136
- for (let i = 0; i < rows; i++) {
137
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
138
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
139
- const rowOffset = i * cols;
140
- // 8x unrolled inner loop
141
- for (let j = 0; j < unrolledCols; j += 8) {
142
- const idx = rowOffset + j;
143
- sum0 += matrix[idx] * vector[j];
144
- sum1 += matrix[idx + 1] * vector[j + 1];
145
- sum2 += matrix[idx + 2] * vector[j + 2];
146
- sum3 += matrix[idx + 3] * vector[j + 3];
147
- sum4 += matrix[idx + 4] * vector[j + 4];
148
- sum5 += matrix[idx + 5] * vector[j + 5];
149
- sum6 += matrix[idx + 6] * vector[j + 6];
150
- sum7 += matrix[idx + 7] * vector[j + 7];
151
- }
152
- // Handle remainder
153
- for (let j = unrolledCols; j < cols; j++) {
154
- sum0 += matrix[rowOffset + j] * vector[j];
155
- }
156
- output[i] = (sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7);
157
- }
158
- }
159
- /**
160
- * 8x unrolled scaled add: output[i] = a[i] + scale * b[i]
161
- */
162
- // exported for use in attention kernel pipeline
163
- export function scaledAdd8x(output, a, b, scale, length) {
164
- const unrolledLen = length - (length % 8);
165
- for (let i = 0; i < unrolledLen; i += 8) {
166
- output[i] = a[i] + scale * b[i];
167
- output[i + 1] = a[i + 1] + scale * b[i + 1];
168
- output[i + 2] = a[i + 2] + scale * b[i + 2];
169
- output[i + 3] = a[i + 3] + scale * b[i + 3];
170
- output[i + 4] = a[i + 4] + scale * b[i + 4];
171
- output[i + 5] = a[i + 5] + scale * b[i + 5];
172
- output[i + 6] = a[i + 6] + scale * b[i + 6];
173
- output[i + 7] = a[i + 7] + scale * b[i + 7];
174
- }
175
- for (let i = unrolledLen; i < length; i++) {
176
- output[i] = a[i] + scale * b[i];
177
- }
178
- }
179
- // ============================================================================
180
- // Optimized Softmax Operations
181
- // ============================================================================
182
- /**
183
- * Numerically stable softmax with fused max-subtract-exp-sum operation
184
- * Single pass for max finding, second pass for exp and sum
185
- */
186
- function softmaxInPlace(scores, length) {
187
- // Validate length
188
- if (length <= 0 || length > scores.length) {
189
- throw new Error(`Invalid length: ${length}`);
190
- }
191
- // Find max (8x unrolled)
192
- let max0 = -Infinity, max1 = -Infinity, max2 = -Infinity, max3 = -Infinity;
193
- const unrolledLen = length - (length % 4);
194
- for (let i = 0; i < unrolledLen; i += 4) {
195
- if (scores[i] > max0)
196
- max0 = scores[i];
197
- if (scores[i + 1] > max1)
198
- max1 = scores[i + 1];
199
- if (scores[i + 2] > max2)
200
- max2 = scores[i + 2];
201
- if (scores[i + 3] > max3)
202
- max3 = scores[i + 3];
203
- }
204
- let maxVal = Math.max(max0, max1, max2, max3);
205
- for (let i = unrolledLen; i < length; i++) {
206
- if (scores[i] > maxVal)
207
- maxVal = scores[i];
208
- }
209
- // Handle edge case: all -Infinity scores
210
- if (!Number.isFinite(maxVal)) {
211
- // Uniform distribution when all scores are -Infinity
212
- const uniformVal = 1.0 / length;
213
- for (let i = 0; i < length; i++) {
214
- scores[i] = uniformVal;
215
- }
216
- return;
217
- }
218
- // Fused subtract-exp-sum (4x unrolled for better cache usage)
219
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
220
- for (let i = 0; i < unrolledLen; i += 4) {
221
- const e0 = Math.exp(scores[i] - maxVal);
222
- const e1 = Math.exp(scores[i + 1] - maxVal);
223
- const e2 = Math.exp(scores[i + 2] - maxVal);
224
- const e3 = Math.exp(scores[i + 3] - maxVal);
225
- scores[i] = e0;
226
- scores[i + 1] = e1;
227
- scores[i + 2] = e2;
228
- scores[i + 3] = e3;
229
- sum0 += e0;
230
- sum1 += e1;
231
- sum2 += e2;
232
- sum3 += e3;
233
- }
234
- for (let i = unrolledLen; i < length; i++) {
235
- const e = Math.exp(scores[i] - maxVal);
236
- scores[i] = e;
237
- sum0 += e;
238
- }
239
- const sumTotal = sum0 + sum1 + sum2 + sum3;
240
- // Guard against division by zero
241
- if (sumTotal < EPSILON) {
242
- // Uniform distribution when sum is effectively zero
243
- const uniformVal = 1.0 / length;
244
- for (let i = 0; i < length; i++) {
245
- scores[i] = uniformVal;
246
- }
247
- return;
248
- }
249
- const invSum = 1.0 / sumTotal;
250
- // Normalize (4x unrolled)
251
- for (let i = 0; i < unrolledLen; i += 4) {
252
- scores[i] *= invSum;
253
- scores[i + 1] *= invSum;
254
- scores[i + 2] *= invSum;
255
- scores[i + 3] *= invSum;
256
- }
257
- for (let i = unrolledLen; i < length; i++) {
258
- scores[i] *= invSum;
259
- }
260
- }
261
- /**
262
- * Softmax returning new array (when in-place not desired)
263
- */
264
- // exported for use in attention kernel pipeline
265
- export function softmaxOptimized(input) {
266
- const output = globalBufferPool.acquire(input.length);
267
- output.set(input);
268
- softmaxInPlace(output, input.length);
269
- return output;
270
- }
271
- // ============================================================================
272
- // Original Scaled Dot-Product Attention (backward compatible)
273
- // ============================================================================
274
- /**
275
- * Scaled Dot-Product Attention
276
- * The core attention mechanism
277
- */
278
- export function scaledDotProductAttention(query, key, value, mask) {
279
- const dk = query.length;
280
- // Compute attention scores: Q · K^T / sqrt(dk)
281
- let score = 0;
282
- for (let i = 0; i < dk; i++) {
283
- score += query[i] * key[i];
284
- }
285
- score /= Math.sqrt(dk);
286
- // Apply mask if provided
287
- if (mask && mask[0] === 0) {
288
- score = -Infinity;
289
- }
290
- // Softmax (single score version)
291
- const expScore = Math.exp(score);
292
- const weight = expScore; // Simplified for single K,V pair
293
- // Weighted value
294
- const output = value.map(v => v * weight);
295
- return { output, weights: [weight] };
296
- }
297
- // ============================================================================
298
- // Optimized Scaled Dot-Product Attention with TypedArrays
299
- // ============================================================================
300
- /**
301
- * Optimized scaled dot-product attention using TypedArrays and SIMD-style ops
302
- */
303
- export function scaledDotProductAttentionOptimized(query, key, value, mask) {
304
- const dk = query.length;
305
- const scale = 1.0 / Math.sqrt(dk);
306
- // Compute attention score using 8x unrolled dot product
307
- let score = dotProduct8x(query, key, dk) * scale;
308
- // Apply mask if provided
309
- if (mask && mask[0] === 0) {
310
- score = -Infinity;
311
- }
312
- // Softmax (single score version)
313
- const expScore = Math.exp(score);
314
- const weight = expScore;
315
- // Weighted value (using buffer pool)
316
- const output = globalBufferPool.acquire(value.length);
317
- const unrolledLen = value.length - (value.length % 8);
318
- for (let i = 0; i < unrolledLen; i += 8) {
319
- output[i] = value[i] * weight;
320
- output[i + 1] = value[i + 1] * weight;
321
- output[i + 2] = value[i + 2] * weight;
322
- output[i + 3] = value[i + 3] * weight;
323
- output[i + 4] = value[i + 4] * weight;
324
- output[i + 5] = value[i + 5] * weight;
325
- output[i + 6] = value[i + 6] * weight;
326
- output[i + 7] = value[i + 7] * weight;
327
- }
328
- for (let i = unrolledLen; i < value.length; i++) {
329
- output[i] = value[i] * weight;
330
- }
331
- return { output, weights: new Float32Array([weight]) };
332
- }
333
- /**
334
- * Batch scaled dot-product attention for processing multiple queries at once
335
- * Processes multiple Q-K-V triplets efficiently
336
- */
337
- export function batchScaledDotProductAttention(queries, keys, values, masks) {
338
- const batchSize = queries.length;
339
- const outputs = [];
340
- const allWeights = [];
341
- // Process in batches of 4 for cache efficiency
342
- const batchOf4 = batchSize - (batchSize % 4);
343
- for (let b = 0; b < batchOf4; b += 4) {
344
- // Process 4 attention computations
345
- for (let i = 0; i < 4; i++) {
346
- const idx = b + i;
347
- const mask = masks ? masks[idx] : null;
348
- const { output, weights } = scaledDotProductAttentionOptimized(queries[idx], keys[idx], values[idx], mask);
349
- outputs.push(output);
350
- allWeights.push(weights);
351
- }
352
- }
353
- // Handle remainder
354
- for (let b = batchOf4; b < batchSize; b++) {
355
- const mask = masks ? masks[b] : null;
356
- const { output, weights } = scaledDotProductAttentionOptimized(queries[b], keys[b], values[b], mask);
357
- outputs.push(output);
358
- allWeights.push(weights);
359
- }
360
- return { outputs, weights: allWeights };
361
- }
362
- /**
363
- * Full attention computation over sequences (Q, K, V matrices)
364
- * Returns attention output and weights for all query positions
365
- */
366
- export function batchSequenceAttention(queries, // [seqLen * dim] flattened
367
- keys, // [seqLen * dim] flattened
368
- values, // [seqLen * dim] flattened
369
- seqLen, dim, mask // [seqLen * seqLen] attention mask
370
- ) {
371
- const scale = 1.0 / Math.sqrt(dim);
372
- const output = globalBufferPool.acquire(seqLen * dim);
373
- const weights = globalBufferPool.acquire(seqLen * seqLen);
374
- // Compute attention scores for each query position
375
- for (let qi = 0; qi < seqLen; qi++) {
376
- const qOffset = qi * dim;
377
- const scoresOffset = qi * seqLen;
378
- // Compute Q[qi] * K^T for all key positions
379
- for (let ki = 0; ki < seqLen; ki++) {
380
- const kOffset = ki * dim;
381
- let score = 0;
382
- // 8x unrolled dot product
383
- const unrolledDim = dim - (dim % 8);
384
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
385
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
386
- for (let d = 0; d < unrolledDim; d += 8) {
387
- sum0 += queries[qOffset + d] * keys[kOffset + d];
388
- sum1 += queries[qOffset + d + 1] * keys[kOffset + d + 1];
389
- sum2 += queries[qOffset + d + 2] * keys[kOffset + d + 2];
390
- sum3 += queries[qOffset + d + 3] * keys[kOffset + d + 3];
391
- sum4 += queries[qOffset + d + 4] * keys[kOffset + d + 4];
392
- sum5 += queries[qOffset + d + 5] * keys[kOffset + d + 5];
393
- sum6 += queries[qOffset + d + 6] * keys[kOffset + d + 6];
394
- sum7 += queries[qOffset + d + 7] * keys[kOffset + d + 7];
395
- }
396
- for (let d = unrolledDim; d < dim; d++) {
397
- sum0 += queries[qOffset + d] * keys[kOffset + d];
398
- }
399
- score = ((sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7)) * scale;
400
- // Apply mask if provided
401
- if (mask && mask[scoresOffset + ki] === 0) {
402
- score = -1e9; // Large negative instead of -Infinity for numerical stability
403
- }
404
- weights[scoresOffset + ki] = score;
405
- }
406
- // Softmax over the row
407
- softmaxInPlace(new Float32Array(weights.buffer, scoresOffset * 4, seqLen), seqLen);
408
- // Weighted sum of values
409
- const outOffset = qi * dim;
410
- for (let d = 0; d < dim; d++) {
411
- output[outOffset + d] = 0;
412
- }
413
- for (let vi = 0; vi < seqLen; vi++) {
414
- const vOffset = vi * dim;
415
- const w = weights[scoresOffset + vi];
416
- // 8x unrolled weighted add
417
- const unrolledDim = dim - (dim % 8);
418
- for (let d = 0; d < unrolledDim; d += 8) {
419
- output[outOffset + d] += w * values[vOffset + d];
420
- output[outOffset + d + 1] += w * values[vOffset + d + 1];
421
- output[outOffset + d + 2] += w * values[vOffset + d + 2];
422
- output[outOffset + d + 3] += w * values[vOffset + d + 3];
423
- output[outOffset + d + 4] += w * values[vOffset + d + 4];
424
- output[outOffset + d + 5] += w * values[vOffset + d + 5];
425
- output[outOffset + d + 6] += w * values[vOffset + d + 6];
426
- output[outOffset + d + 7] += w * values[vOffset + d + 7];
427
- }
428
- for (let d = unrolledDim; d < dim; d++) {
429
- output[outOffset + d] += w * values[vOffset + d];
430
- }
431
- }
432
- }
433
- return { output, weights };
434
- }
435
- /**
436
- * Multi-Head Attention (JavaScript fallback)
437
- *
438
- * Replaces broken @ruvector/attention.multiHeadAttention
439
- */
440
- export class MultiHeadAttention {
441
- numHeads;
442
- hiddenDim;
443
- headDim;
444
- queryWeights;
445
- keyWeights;
446
- valueWeights;
447
- outputWeights;
448
- constructor(config) {
449
- // Validate config for security
450
- validateDimension(config.hiddenDim, 'hiddenDim');
451
- this.numHeads = Math.min(Math.max(1, config.numHeads || 8), 256);
452
- this.hiddenDim = config.hiddenDim;
453
- this.headDim = Math.floor(this.hiddenDim / this.numHeads);
454
- if (this.headDim < 1) {
455
- throw new Error('headDim must be at least 1 (hiddenDim / numHeads)');
456
- }
457
- // Initialize weights (random)
458
- this.queryWeights = this.initializeWeights();
459
- this.keyWeights = this.initializeWeights();
460
- this.valueWeights = this.initializeWeights();
461
- this.outputWeights = this.initializeOutputWeights();
462
- }
463
- initializeWeights() {
464
- const weights = [];
465
- for (let h = 0; h < this.numHeads; h++) {
466
- const headWeights = [];
467
- for (let i = 0; i < this.headDim; i++) {
468
- const row = [];
469
- for (let j = 0; j < this.hiddenDim; j++) {
470
- row.push((Math.random() - 0.5) * 0.1);
471
- }
472
- headWeights.push(row);
473
- }
474
- weights.push(headWeights);
475
- }
476
- return weights;
477
- }
478
- initializeOutputWeights() {
479
- const weights = [];
480
- for (let i = 0; i < this.hiddenDim; i++) {
481
- const row = [];
482
- for (let j = 0; j < this.hiddenDim; j++) {
483
- row.push((Math.random() - 0.5) * 0.1);
484
- }
485
- weights.push(row);
486
- }
487
- return weights;
488
- }
489
- forward(query, key, value, mask) {
490
- const headOutputs = [];
491
- const allWeights = [];
492
- // Process each head
493
- for (let h = 0; h < this.numHeads; h++) {
494
- // Project to head dimension
495
- const q = this.project(query, this.queryWeights[h]);
496
- const k = this.project(key, this.keyWeights[h]);
497
- const v = this.project(value, this.valueWeights[h]);
498
- // Attention for this head
499
- const { output, weights } = scaledDotProductAttention(q, k, v, mask);
500
- headOutputs.push(output);
501
- allWeights.push(weights);
502
- }
503
- // Concatenate heads
504
- const concatenated = headOutputs.flat();
505
- // Output projection
506
- const output = this.project(concatenated, this.outputWeights);
507
- return { output, attentionWeights: allWeights };
508
- }
509
- project(input, weights) {
510
- const output = [];
511
- for (let i = 0; i < weights.length; i++) {
512
- let sum = 0;
513
- for (let j = 0; j < input.length; j++) {
514
- sum += input[j] * weights[i][j];
515
- }
516
- output.push(sum);
517
- }
518
- return output;
519
- }
520
- }
521
- // ============================================================================
522
- // Optimized Multi-Head Attention with TypedArrays and SIMD-style operations
523
- // ============================================================================
524
- /**
525
- * Optimized Multi-Head Attention using TypedArrays and pre-allocated buffers
526
- *
527
- * Improvements over original:
528
- * - Float32Array instead of number[]
529
- * - Pre-allocated weight matrices in contiguous memory
530
- * - 8x loop unrolling for projections
531
- * - Buffer pool for intermediate results
532
- * - Batch processing support
533
- */
534
- export class MultiHeadAttentionOptimized {
535
- numHeads;
536
- hiddenDim;
537
- headDim;
538
- // Contiguous weight storage for cache efficiency
539
- // Shape: [numHeads * headDim * hiddenDim]
540
- queryWeights;
541
- keyWeights;
542
- valueWeights;
543
- // Shape: [hiddenDim * hiddenDim]
544
- outputWeights;
545
- // Pre-allocated buffers for intermediate results
546
- headBuffer;
547
- projBuffer;
548
- concatBuffer;
549
- constructor(config) {
550
- // Validate config
551
- validateDimension(config.hiddenDim, 'hiddenDim');
552
- this.numHeads = Math.min(Math.max(1, config.numHeads || 8), 256);
553
- this.hiddenDim = config.hiddenDim;
554
- this.headDim = Math.floor(this.hiddenDim / this.numHeads);
555
- if (this.headDim < 1) {
556
- throw new Error('headDim must be at least 1 (hiddenDim / numHeads)');
557
- }
558
- const projSize = this.numHeads * this.headDim * this.hiddenDim;
559
- // Initialize contiguous weight arrays
560
- this.queryWeights = this.initializeProjectionWeights(projSize);
561
- this.keyWeights = this.initializeProjectionWeights(projSize);
562
- this.valueWeights = this.initializeProjectionWeights(projSize);
563
- this.outputWeights = this.initializeOutputWeights();
564
- // Pre-allocate buffers
565
- this.headBuffer = new Float32Array(this.headDim);
566
- this.projBuffer = new Float32Array(this.headDim * 3); // Q, K, V for one head
567
- this.concatBuffer = new Float32Array(this.numHeads * this.headDim);
568
- }
569
- initializeProjectionWeights(size) {
570
- const weights = new Float32Array(size);
571
- const scale = 0.1;
572
- for (let i = 0; i < size; i++) {
573
- weights[i] = (Math.random() - 0.5) * scale;
574
- }
575
- return weights;
576
- }
577
- initializeOutputWeights() {
578
- const size = this.hiddenDim * this.hiddenDim;
579
- const weights = new Float32Array(size);
580
- const scale = 0.1;
581
- for (let i = 0; i < size; i++) {
582
- weights[i] = (Math.random() - 0.5) * scale;
583
- }
584
- return weights;
585
- }
586
- /**
587
- * Forward pass with optimized TypedArray operations
588
- */
589
- forward(query, key, value, mask) {
590
- const allWeights = [];
591
- const headOutputs = [];
592
- // Process each head with optimized projections
593
- for (let h = 0; h < this.numHeads; h++) {
594
- const weightOffset = h * this.headDim * this.hiddenDim;
595
- // Project Q, K, V for this head using 8x unrolled matmul
596
- const q = this.projectOptimized(query, this.queryWeights, weightOffset);
597
- const k = this.projectOptimized(key, this.keyWeights, weightOffset);
598
- const v = this.projectOptimized(value, this.valueWeights, weightOffset);
599
- // Scaled dot-product attention
600
- const { output, weights } = scaledDotProductAttentionOptimized(q, k, v, mask);
601
- headOutputs.push(output);
602
- allWeights.push(weights);
603
- }
604
- // Concatenate heads into pre-allocated buffer
605
- let offset = 0;
606
- for (let h = 0; h < this.numHeads; h++) {
607
- this.concatBuffer.set(headOutputs[h], offset);
608
- offset += headOutputs[h].length;
609
- }
610
- // Output projection
611
- const output = globalBufferPool.acquire(this.hiddenDim);
612
- matVecMul8x(this.outputWeights, this.concatBuffer, output, this.hiddenDim, this.hiddenDim);
613
- return { output, attentionWeights: allWeights };
614
- }
615
- /**
616
- * Batch forward pass for multiple inputs
617
- */
618
- batchForward(queries, keys, values, masks) {
619
- const outputs = [];
620
- const allWeights = [];
621
- for (let i = 0; i < queries.length; i++) {
622
- const mask = masks ? masks[i] : null;
623
- const { output, attentionWeights } = this.forward(queries[i], keys[i], values[i], mask);
624
- outputs.push(output);
625
- allWeights.push(attentionWeights);
626
- }
627
- return { outputs, attentionWeights: allWeights };
628
- }
629
- /**
630
- * Optimized projection using contiguous weight storage and 8x unrolling
631
- */
632
- projectOptimized(input, weights, weightOffset) {
633
- const output = globalBufferPool.acquire(this.headDim);
634
- const inputLen = input.length;
635
- const unrolledLen = inputLen - (inputLen % 8);
636
- for (let i = 0; i < this.headDim; i++) {
637
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
638
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
639
- const rowOffset = weightOffset + i * inputLen;
640
- // 8x unrolled inner loop
641
- for (let j = 0; j < unrolledLen; j += 8) {
642
- sum0 += input[j] * weights[rowOffset + j];
643
- sum1 += input[j + 1] * weights[rowOffset + j + 1];
644
- sum2 += input[j + 2] * weights[rowOffset + j + 2];
645
- sum3 += input[j + 3] * weights[rowOffset + j + 3];
646
- sum4 += input[j + 4] * weights[rowOffset + j + 4];
647
- sum5 += input[j + 5] * weights[rowOffset + j + 5];
648
- sum6 += input[j + 6] * weights[rowOffset + j + 6];
649
- sum7 += input[j + 7] * weights[rowOffset + j + 7];
650
- }
651
- // Handle remainder
652
- for (let j = unrolledLen; j < inputLen; j++) {
653
- sum0 += input[j] * weights[rowOffset + j];
654
- }
655
- output[i] = (sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7);
656
- }
657
- return output;
658
- }
659
- /**
660
- * Release buffers back to pool (call when done with outputs)
661
- */
662
- releaseBuffer(buffer) {
663
- globalBufferPool.release(buffer);
664
- }
665
- /**
666
- * Get weight matrices (for serialization/loading)
667
- */
668
- getWeights() {
669
- return {
670
- query: this.queryWeights,
671
- key: this.keyWeights,
672
- value: this.valueWeights,
673
- output: this.outputWeights,
674
- };
675
- }
676
- /**
677
- * Set weight matrices (for loading pre-trained weights)
678
- */
679
- setWeights(weights) {
680
- this.queryWeights.set(weights.query);
681
- this.keyWeights.set(weights.key);
682
- this.valueWeights.set(weights.value);
683
- this.outputWeights.set(weights.output);
684
- }
685
- }
686
- /**
687
- * Flash Attention (optimized fallback)
688
- *
689
- * Replaces broken @ruvector/attention.flashAttention
690
- * Uses tiling/chunking for better memory efficiency
691
- */
692
- export class FlashAttention {
693
- hiddenDim;
694
- blockSize;
695
- constructor(config) {
696
- this.hiddenDim = config.hiddenDim;
697
- this.blockSize = Math.min(64, this.hiddenDim); // Tile size
698
- }
699
- forward(query, key, value, numHeads = 8) {
700
- const seqLen = query.length;
701
- const headDim = this.hiddenDim / numHeads;
702
- const output = [];
703
- const attentionScores = [];
704
- // Process in blocks for memory efficiency
705
- for (let i = 0; i < seqLen; i += this.blockSize) {
706
- const blockEnd = Math.min(i + this.blockSize, seqLen);
707
- for (let qi = i; qi < blockEnd; qi++) {
708
- const scores = [];
709
- let maxScore = -Infinity;
710
- // Compute attention scores for this query
711
- for (let ki = 0; ki < seqLen; ki++) {
712
- let score = 0;
713
- for (let d = 0; d < query[qi].length; d++) {
714
- score += query[qi][d] * key[ki][d];
715
- }
716
- score /= Math.sqrt(headDim);
717
- scores.push(score);
718
- maxScore = Math.max(maxScore, score);
719
- }
720
- // Numerically stable softmax
721
- const expScores = scores.map(s => Math.exp(s - maxScore));
722
- const sumExp = expScores.reduce((a, b) => a + b, 0);
723
- const weights = expScores.map(e => e / sumExp);
724
- // Weighted sum of values
725
- const outputRow = new Array(value[0].length).fill(0);
726
- for (let vi = 0; vi < seqLen; vi++) {
727
- for (let d = 0; d < value[vi].length; d++) {
728
- outputRow[d] += weights[vi] * value[vi][d];
729
- }
730
- }
731
- output.push(outputRow);
732
- attentionScores.push(weights);
733
- }
734
- }
735
- return { output, attentionScores };
736
- }
737
- }
738
- /**
739
- * Optimized Flash Attention using TypedArrays and improved tiling strategy
740
- *
741
- * Improvements over original:
742
- * - Separate Q and KV block sizes for better memory usage
743
- * - Online softmax computation (memory efficient)
744
- * - Pre-allocated buffers for all intermediate results
745
- * - 8x loop unrolling for score computation
746
- * - Causal masking support
747
- * - Backward pass placeholder for gradient computation
748
- */
749
- export class FlashAttentionOptimized {
750
- hiddenDim;
751
- blockSizeQ;
752
- blockSizeKV;
753
- causal;
754
- // Pre-allocated buffers
755
- scoresBuffer;
756
- expBuffer;
757
- outputBuffer;
758
- maxBuffer;
759
- sumBuffer;
760
- constructor(config) {
761
- // Validate config
762
- validateDimension(config.hiddenDim, 'hiddenDim');
763
- this.hiddenDim = config.hiddenDim;
764
- // Optimal block sizes for L1/L2 cache (typically 32KB-256KB)
765
- // Bounded for security
766
- this.blockSizeQ = Math.min(Math.max(8, config.blockSizeQ || 32), 256);
767
- this.blockSizeKV = Math.min(Math.max(8, config.blockSizeKV || 64), 256);
768
- this.causal = config.causal || false;
769
- // Validate that block sizes don't cause excessive memory allocation
770
- const maxBlockMemory = this.blockSizeQ * this.blockSizeKV * 4 * 2; // scores + exp buffers
771
- const maxOutputMemory = this.blockSizeQ * this.hiddenDim * 4;
772
- if (maxBlockMemory + maxOutputMemory > 64 * 1024 * 1024) { // 64MB limit
773
- throw new Error('Block sizes would require excessive memory allocation');
774
- }
775
- // Pre-allocate buffers for maximum expected sizes
776
- this.scoresBuffer = new Float32Array(this.blockSizeQ * this.blockSizeKV);
777
- this.expBuffer = new Float32Array(this.blockSizeQ * this.blockSizeKV);
778
- this.outputBuffer = new Float32Array(this.blockSizeQ * this.hiddenDim);
779
- this.maxBuffer = new Float32Array(this.blockSizeQ);
780
- this.sumBuffer = new Float32Array(this.blockSizeQ);
781
- }
782
- /**
783
- * Forward pass with optimized tiling strategy
784
- * Uses online softmax for memory efficiency
785
- */
786
- forward(query, // [seqLen * dim] flattened
787
- key, // [seqLen * dim] flattened
788
- value, // [seqLen * dim] flattened
789
- seqLen, dim, numHeads = 8) {
790
- // Validate inputs
791
- validateFloat32Array(query, 'query');
792
- validateFloat32Array(key, 'key');
793
- validateFloat32Array(value, 'value');
794
- validateSeqLength(seqLen, 'seqLen');
795
- validateDimension(dim, 'dim');
796
- // Validate array sizes match expected dimensions
797
- const expectedSize = seqLen * dim;
798
- if (query.length < expectedSize || key.length < expectedSize || value.length < expectedSize) {
799
- throw new Error(`Input arrays too small for seqLen=${seqLen}, dim=${dim}`);
800
- }
801
- const headDim = dim / numHeads;
802
- if (headDim < 1) {
803
- throw new Error('Invalid numHeads: results in headDim < 1');
804
- }
805
- const scale = 1.0 / Math.sqrt(headDim);
806
- // Allocate output arrays
807
- const output = globalBufferPool.acquire(seqLen * dim);
808
- const attentionScores = globalBufferPool.acquire(seqLen * seqLen);
809
- // Initialize output to zero
810
- output.fill(0);
811
- // Process query blocks
812
- for (let qBlockStart = 0; qBlockStart < seqLen; qBlockStart += this.blockSizeQ) {
813
- const qBlockEnd = Math.min(qBlockStart + this.blockSizeQ, seqLen);
814
- const qBlockSize = qBlockEnd - qBlockStart;
815
- // Initialize running max and sum for online softmax
816
- this.maxBuffer.fill(-Infinity);
817
- this.sumBuffer.fill(0);
818
- this.outputBuffer.fill(0);
819
- // Process key-value blocks
820
- const kvEnd = this.causal ? qBlockEnd : seqLen;
821
- for (let kvBlockStart = 0; kvBlockStart < kvEnd; kvBlockStart += this.blockSizeKV) {
822
- const kvBlockEnd = Math.min(kvBlockStart + this.blockSizeKV, kvEnd);
823
- const kvBlockSize = kvBlockEnd - kvBlockStart;
824
- // Compute attention scores for this block (Q_block @ K_block^T)
825
- this.computeBlockScores(query, key, qBlockStart, qBlockEnd, kvBlockStart, kvBlockEnd, dim, scale);
826
- // Apply causal mask if needed
827
- if (this.causal) {
828
- for (let qi = 0; qi < qBlockSize; qi++) {
829
- const globalQi = qBlockStart + qi;
830
- for (let ki = 0; ki < kvBlockSize; ki++) {
831
- const globalKi = kvBlockStart + ki;
832
- if (globalKi > globalQi) {
833
- this.scoresBuffer[qi * kvBlockSize + ki] = -1e9;
834
- }
835
- }
836
- }
837
- }
838
- // Online softmax update and output accumulation
839
- this.updateOnlineSoftmax(value, qBlockSize, kvBlockSize, kvBlockStart, dim);
840
- // Store attention scores
841
- for (let qi = 0; qi < qBlockSize; qi++) {
842
- const globalQi = qBlockStart + qi;
843
- for (let ki = 0; ki < kvBlockSize; ki++) {
844
- const globalKi = kvBlockStart + ki;
845
- attentionScores[globalQi * seqLen + globalKi] = this.scoresBuffer[qi * kvBlockSize + ki];
846
- }
847
- }
848
- }
849
- // Normalize output by sum
850
- for (let qi = 0; qi < qBlockSize; qi++) {
851
- const globalQi = qBlockStart + qi;
852
- const invSum = 1.0 / (this.sumBuffer[qi] + 1e-8);
853
- const outOffset = globalQi * dim;
854
- const localOffset = qi * dim;
855
- // 8x unrolled normalization
856
- const unrolledDim = dim - (dim % 8);
857
- for (let d = 0; d < unrolledDim; d += 8) {
858
- output[outOffset + d] = this.outputBuffer[localOffset + d] * invSum;
859
- output[outOffset + d + 1] = this.outputBuffer[localOffset + d + 1] * invSum;
860
- output[outOffset + d + 2] = this.outputBuffer[localOffset + d + 2] * invSum;
861
- output[outOffset + d + 3] = this.outputBuffer[localOffset + d + 3] * invSum;
862
- output[outOffset + d + 4] = this.outputBuffer[localOffset + d + 4] * invSum;
863
- output[outOffset + d + 5] = this.outputBuffer[localOffset + d + 5] * invSum;
864
- output[outOffset + d + 6] = this.outputBuffer[localOffset + d + 6] * invSum;
865
- output[outOffset + d + 7] = this.outputBuffer[localOffset + d + 7] * invSum;
866
- }
867
- for (let d = unrolledDim; d < dim; d++) {
868
- output[outOffset + d] = this.outputBuffer[localOffset + d] * invSum;
869
- }
870
- }
871
- }
872
- return { output, attentionScores };
873
- }
874
- /**
875
- * Compute attention scores for a block pair with 8x unrolling
876
- */
877
- computeBlockScores(query, key, qStart, qEnd, kStart, kEnd, dim, scale) {
878
- const qBlockSize = qEnd - qStart;
879
- const kBlockSize = kEnd - kStart;
880
- const unrolledDim = dim - (dim % 8);
881
- for (let qi = 0; qi < qBlockSize; qi++) {
882
- const qOffset = (qStart + qi) * dim;
883
- for (let ki = 0; ki < kBlockSize; ki++) {
884
- const kOffset = (kStart + ki) * dim;
885
- // 8x unrolled dot product
886
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
887
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
888
- for (let d = 0; d < unrolledDim; d += 8) {
889
- sum0 += query[qOffset + d] * key[kOffset + d];
890
- sum1 += query[qOffset + d + 1] * key[kOffset + d + 1];
891
- sum2 += query[qOffset + d + 2] * key[kOffset + d + 2];
892
- sum3 += query[qOffset + d + 3] * key[kOffset + d + 3];
893
- sum4 += query[qOffset + d + 4] * key[kOffset + d + 4];
894
- sum5 += query[qOffset + d + 5] * key[kOffset + d + 5];
895
- sum6 += query[qOffset + d + 6] * key[kOffset + d + 6];
896
- sum7 += query[qOffset + d + 7] * key[kOffset + d + 7];
897
- }
898
- for (let d = unrolledDim; d < dim; d++) {
899
- sum0 += query[qOffset + d] * key[kOffset + d];
900
- }
901
- const score = ((sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7)) * scale;
902
- this.scoresBuffer[qi * kBlockSize + ki] = score;
903
- }
904
- }
905
- }
906
- /**
907
- * Online softmax update with output accumulation
908
- * This is the core of flash attention's memory efficiency
909
- */
910
- updateOnlineSoftmax(value, qBlockSize, kvBlockSize, kvBlockStart, dim) {
911
- for (let qi = 0; qi < qBlockSize; qi++) {
912
- // Find new max
913
- let newMax = this.maxBuffer[qi];
914
- for (let ki = 0; ki < kvBlockSize; ki++) {
915
- const score = this.scoresBuffer[qi * kvBlockSize + ki];
916
- if (score > newMax)
917
- newMax = score;
918
- }
919
- // Compute scaling factor for existing values
920
- const oldMax = this.maxBuffer[qi];
921
- const rescale = Math.exp(oldMax - newMax);
922
- // Update running sum with rescaling
923
- let newSum = this.sumBuffer[qi] * rescale;
924
- // Compute exp scores and accumulate
925
- const localOffset = qi * dim;
926
- for (let ki = 0; ki < kvBlockSize; ki++) {
927
- const expScore = Math.exp(this.scoresBuffer[qi * kvBlockSize + ki] - newMax);
928
- this.expBuffer[qi * kvBlockSize + ki] = expScore;
929
- newSum += expScore;
930
- }
931
- // Rescale existing output
932
- if (rescale !== 1.0) {
933
- const unrolledDim = dim - (dim % 8);
934
- for (let d = 0; d < unrolledDim; d += 8) {
935
- this.outputBuffer[localOffset + d] *= rescale;
936
- this.outputBuffer[localOffset + d + 1] *= rescale;
937
- this.outputBuffer[localOffset + d + 2] *= rescale;
938
- this.outputBuffer[localOffset + d + 3] *= rescale;
939
- this.outputBuffer[localOffset + d + 4] *= rescale;
940
- this.outputBuffer[localOffset + d + 5] *= rescale;
941
- this.outputBuffer[localOffset + d + 6] *= rescale;
942
- this.outputBuffer[localOffset + d + 7] *= rescale;
943
- }
944
- for (let d = unrolledDim; d < dim; d++) {
945
- this.outputBuffer[localOffset + d] *= rescale;
946
- }
947
- }
948
- // Add new weighted values
949
- for (let ki = 0; ki < kvBlockSize; ki++) {
950
- const weight = this.expBuffer[qi * kvBlockSize + ki];
951
- const vOffset = (kvBlockStart + ki) * dim;
952
- // 8x unrolled weighted add
953
- const unrolledDim = dim - (dim % 8);
954
- for (let d = 0; d < unrolledDim; d += 8) {
955
- this.outputBuffer[localOffset + d] += weight * value[vOffset + d];
956
- this.outputBuffer[localOffset + d + 1] += weight * value[vOffset + d + 1];
957
- this.outputBuffer[localOffset + d + 2] += weight * value[vOffset + d + 2];
958
- this.outputBuffer[localOffset + d + 3] += weight * value[vOffset + d + 3];
959
- this.outputBuffer[localOffset + d + 4] += weight * value[vOffset + d + 4];
960
- this.outputBuffer[localOffset + d + 5] += weight * value[vOffset + d + 5];
961
- this.outputBuffer[localOffset + d + 6] += weight * value[vOffset + d + 6];
962
- this.outputBuffer[localOffset + d + 7] += weight * value[vOffset + d + 7];
963
- }
964
- for (let d = unrolledDim; d < dim; d++) {
965
- this.outputBuffer[localOffset + d] += weight * value[vOffset + d];
966
- }
967
- }
968
- // Update max and sum
969
- this.maxBuffer[qi] = newMax;
970
- this.sumBuffer[qi] = newSum;
971
- }
972
- }
973
- /**
974
- * Batch forward for processing multiple sequences
975
- */
976
- batchForward(queries, keys, values, seqLens, dim, numHeads = 8) {
977
- const outputs = [];
978
- const allScores = [];
979
- for (let i = 0; i < queries.length; i++) {
980
- const { output, attentionScores } = this.forward(queries[i], keys[i], values[i], seqLens[i], dim, numHeads);
981
- outputs.push(output);
982
- allScores.push(attentionScores);
983
- }
984
- return { outputs, attentionScores: allScores };
985
- }
986
- /**
987
- * Backward pass for gradient computation
988
- * Computes dQ, dK, dV from dOutput using the attention scores from forward pass
989
- *
990
- * Forward pass recap:
991
- * S = Q @ K^T / sqrt(d) (scaled dot-product scores)
992
- * A = softmax(S) (attention weights)
993
- * O = A @ V (output)
994
- *
995
- * Backward pass:
996
- * dV = A^T @ dO (gradient w.r.t. values)
997
- * dA = dO @ V^T (gradient through output)
998
- * dS = A * (dA - sum(dA * A, axis=-1, keepdims=True)) (softmax backward)
999
- * dS = dS / sqrt(d) (apply scaling)
1000
- * dQ = dS @ K (gradient w.r.t. queries)
1001
- * dK = dS^T @ Q (gradient w.r.t. keys)
1002
- */
1003
- backward(dOutput, query, key, value, attentionScores, seqLen, dim) {
1004
- // Validate inputs
1005
- validateFloat32Array(dOutput, 'dOutput');
1006
- validateFloat32Array(query, 'query');
1007
- validateFloat32Array(key, 'key');
1008
- validateFloat32Array(value, 'value');
1009
- validateFloat32Array(attentionScores, 'attentionScores');
1010
- validateSeqLength(seqLen, 'seqLen');
1011
- validateDimension(dim, 'dim');
1012
- const dQuery = globalBufferPool.acquire(seqLen * dim);
1013
- const dKey = globalBufferPool.acquire(seqLen * dim);
1014
- const dValue = globalBufferPool.acquire(seqLen * dim);
1015
- // Initialize gradients to zero
1016
- dQuery.fill(0);
1017
- dKey.fill(0);
1018
- dValue.fill(0);
1019
- // Scaling factor (must match forward pass)
1020
- const numHeads = 8; // Default from forward
1021
- const headDim = dim / numHeads;
1022
- const scale = 1.0 / Math.sqrt(headDim);
1023
- // First: Normalize attention scores to get attention weights A
1024
- // attentionScores contains the raw scores S, we need to apply softmax
1025
- // In the forward pass, scores were stored after softmax, so use them directly
1026
- // But the scores buffer may contain raw scores - we recompute softmax for numerical stability
1027
- // Allocate temporary buffer for attention weights (normalized)
1028
- const attentionWeights = globalBufferPool.acquire(seqLen * seqLen);
1029
- // Apply softmax row-wise to get attention weights A
1030
- for (let i = 0; i < seqLen; i++) {
1031
- const rowOffset = i * seqLen;
1032
- // Find max for numerical stability
1033
- let maxScore = -Infinity;
1034
- for (let j = 0; j < seqLen; j++) {
1035
- const score = attentionScores[rowOffset + j];
1036
- if (score > maxScore)
1037
- maxScore = score;
1038
- }
1039
- // Compute exp and sum
1040
- let sumExp = 0;
1041
- for (let j = 0; j < seqLen; j++) {
1042
- const expVal = Math.exp(attentionScores[rowOffset + j] - maxScore);
1043
- attentionWeights[rowOffset + j] = expVal;
1044
- sumExp += expVal;
1045
- }
1046
- // Normalize
1047
- const invSum = 1.0 / (sumExp + EPSILON);
1048
- for (let j = 0; j < seqLen; j++) {
1049
- attentionWeights[rowOffset + j] *= invSum;
1050
- }
1051
- }
1052
- // Step 1: Compute dV = A^T @ dO
1053
- // dV[j, d] = sum_i A[i, j] * dO[i, d]
1054
- for (let j = 0; j < seqLen; j++) {
1055
- const dVOffset = j * dim;
1056
- for (let i = 0; i < seqLen; i++) {
1057
- const aWeight = attentionWeights[i * seqLen + j]; // A^T[j, i] = A[i, j]
1058
- const dOOffset = i * dim;
1059
- // 8x unrolled accumulation
1060
- const unrolledDim = dim - (dim % 8);
1061
- for (let d = 0; d < unrolledDim; d += 8) {
1062
- dValue[dVOffset + d] += aWeight * dOutput[dOOffset + d];
1063
- dValue[dVOffset + d + 1] += aWeight * dOutput[dOOffset + d + 1];
1064
- dValue[dVOffset + d + 2] += aWeight * dOutput[dOOffset + d + 2];
1065
- dValue[dVOffset + d + 3] += aWeight * dOutput[dOOffset + d + 3];
1066
- dValue[dVOffset + d + 4] += aWeight * dOutput[dOOffset + d + 4];
1067
- dValue[dVOffset + d + 5] += aWeight * dOutput[dOOffset + d + 5];
1068
- dValue[dVOffset + d + 6] += aWeight * dOutput[dOOffset + d + 6];
1069
- dValue[dVOffset + d + 7] += aWeight * dOutput[dOOffset + d + 7];
1070
- }
1071
- for (let d = unrolledDim; d < dim; d++) {
1072
- dValue[dVOffset + d] += aWeight * dOutput[dOOffset + d];
1073
- }
1074
- }
1075
- }
1076
- // Step 2: Compute dA = dO @ V^T
1077
- // dA[i, j] = sum_d dO[i, d] * V[j, d]
1078
- const dAttention = globalBufferPool.acquire(seqLen * seqLen);
1079
- dAttention.fill(0);
1080
- for (let i = 0; i < seqLen; i++) {
1081
- const dOOffset = i * dim;
1082
- const dARowOffset = i * seqLen;
1083
- for (let j = 0; j < seqLen; j++) {
1084
- const vOffset = j * dim;
1085
- let dotProduct = 0;
1086
- // 8x unrolled dot product
1087
- const unrolledDim = dim - (dim % 8);
1088
- let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
1089
- let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
1090
- for (let d = 0; d < unrolledDim; d += 8) {
1091
- sum0 += dOutput[dOOffset + d] * value[vOffset + d];
1092
- sum1 += dOutput[dOOffset + d + 1] * value[vOffset + d + 1];
1093
- sum2 += dOutput[dOOffset + d + 2] * value[vOffset + d + 2];
1094
- sum3 += dOutput[dOOffset + d + 3] * value[vOffset + d + 3];
1095
- sum4 += dOutput[dOOffset + d + 4] * value[vOffset + d + 4];
1096
- sum5 += dOutput[dOOffset + d + 5] * value[vOffset + d + 5];
1097
- sum6 += dOutput[dOOffset + d + 6] * value[vOffset + d + 6];
1098
- sum7 += dOutput[dOOffset + d + 7] * value[vOffset + d + 7];
1099
- }
1100
- dotProduct = (sum0 + sum1) + (sum2 + sum3) + (sum4 + sum5) + (sum6 + sum7);
1101
- for (let d = unrolledDim; d < dim; d++) {
1102
- dotProduct += dOutput[dOOffset + d] * value[vOffset + d];
1103
- }
1104
- dAttention[dARowOffset + j] = dotProduct;
1105
- }
1106
- }
1107
- // Step 3: Compute dS = softmax_backward(dA, A)
1108
- // For softmax: dS_ij = A_ij * (dA_ij - sum_k(A_ik * dA_ik))
1109
- const dScores = globalBufferPool.acquire(seqLen * seqLen);
1110
- for (let i = 0; i < seqLen; i++) {
1111
- const rowOffset = i * seqLen;
1112
- // Compute sum_k(A_ik * dA_ik) for this row
1113
- let sumAdA = 0;
1114
- for (let k = 0; k < seqLen; k++) {
1115
- sumAdA += attentionWeights[rowOffset + k] * dAttention[rowOffset + k];
1116
- }
1117
- // Compute dS_ij = A_ij * (dA_ij - sumAdA) * scale
1118
- for (let j = 0; j < seqLen; j++) {
1119
- const idx = rowOffset + j;
1120
- dScores[idx] = attentionWeights[idx] * (dAttention[idx] - sumAdA) * scale;
1121
- }
1122
- }
1123
- // Step 4: Compute dQ = dS @ K
1124
- // dQ[i, d] = sum_j dS[i, j] * K[j, d]
1125
- for (let i = 0; i < seqLen; i++) {
1126
- const dQOffset = i * dim;
1127
- const dSRowOffset = i * seqLen;
1128
- for (let j = 0; j < seqLen; j++) {
1129
- const dSValue = dScores[dSRowOffset + j];
1130
- const kOffset = j * dim;
1131
- // 8x unrolled accumulation
1132
- const unrolledDim = dim - (dim % 8);
1133
- for (let d = 0; d < unrolledDim; d += 8) {
1134
- dQuery[dQOffset + d] += dSValue * key[kOffset + d];
1135
- dQuery[dQOffset + d + 1] += dSValue * key[kOffset + d + 1];
1136
- dQuery[dQOffset + d + 2] += dSValue * key[kOffset + d + 2];
1137
- dQuery[dQOffset + d + 3] += dSValue * key[kOffset + d + 3];
1138
- dQuery[dQOffset + d + 4] += dSValue * key[kOffset + d + 4];
1139
- dQuery[dQOffset + d + 5] += dSValue * key[kOffset + d + 5];
1140
- dQuery[dQOffset + d + 6] += dSValue * key[kOffset + d + 6];
1141
- dQuery[dQOffset + d + 7] += dSValue * key[kOffset + d + 7];
1142
- }
1143
- for (let d = unrolledDim; d < dim; d++) {
1144
- dQuery[dQOffset + d] += dSValue * key[kOffset + d];
1145
- }
1146
- }
1147
- }
1148
- // Step 5: Compute dK = dS^T @ Q
1149
- // dK[j, d] = sum_i dS[i, j] * Q[i, d]
1150
- for (let j = 0; j < seqLen; j++) {
1151
- const dKOffset = j * dim;
1152
- for (let i = 0; i < seqLen; i++) {
1153
- const dSValue = dScores[i * seqLen + j]; // dS^T[j, i] = dS[i, j]
1154
- const qOffset = i * dim;
1155
- // 8x unrolled accumulation
1156
- const unrolledDim = dim - (dim % 8);
1157
- for (let d = 0; d < unrolledDim; d += 8) {
1158
- dKey[dKOffset + d] += dSValue * query[qOffset + d];
1159
- dKey[dKOffset + d + 1] += dSValue * query[qOffset + d + 1];
1160
- dKey[dKOffset + d + 2] += dSValue * query[qOffset + d + 2];
1161
- dKey[dKOffset + d + 3] += dSValue * query[qOffset + d + 3];
1162
- dKey[dKOffset + d + 4] += dSValue * query[qOffset + d + 4];
1163
- dKey[dKOffset + d + 5] += dSValue * query[qOffset + d + 5];
1164
- dKey[dKOffset + d + 6] += dSValue * query[qOffset + d + 6];
1165
- dKey[dKOffset + d + 7] += dSValue * query[qOffset + d + 7];
1166
- }
1167
- for (let d = unrolledDim; d < dim; d++) {
1168
- dKey[dKOffset + d] += dSValue * query[qOffset + d];
1169
- }
1170
- }
1171
- }
1172
- // Release temporary buffers
1173
- globalBufferPool.release(attentionWeights);
1174
- globalBufferPool.release(dAttention);
1175
- globalBufferPool.release(dScores);
1176
- return { dQuery, dKey, dValue };
1177
- }
1178
- /**
1179
- * Release buffers back to pool
1180
- */
1181
- releaseBuffer(buffer) {
1182
- globalBufferPool.release(buffer);
1183
- }
1184
- }
1185
- // ============================================================================
1186
- // Batch Multi-Head Attention
1187
- // ============================================================================
1188
- /**
1189
- * Batch multi-head attention for processing multiple queries efficiently
1190
- * Combines optimized MHA with batch processing
1191
- */
1192
- export function batchMultiHeadAttention(attention, queries, keys, values, masks) {
1193
- return attention.batchForward(queries, keys, values, masks);
1194
- }
1195
- /**
1196
- * Linear Attention (fallback)
1197
- *
1198
- * O(n) complexity approximation of attention
1199
- */
1200
- export class LinearAttention {
1201
- hiddenDim;
1202
- featureMap;
1203
- constructor(config) {
1204
- this.hiddenDim = config.hiddenDim;
1205
- // ELU feature map
1206
- this.featureMap = (x) => (x > 0 ? x : Math.exp(x) - 1);
1207
- }
1208
- forward(query, key, value) {
1209
- const seqLen = query.length;
1210
- const dim = value[0].length;
1211
- // Apply feature map
1212
- const queryMapped = query.map(q => q.map(this.featureMap));
1213
- const keyMapped = key.map(k => k.map(this.featureMap));
1214
- // Compute K^T V (dimension: [dim, valueDim])
1215
- const ktv = Array.from({ length: this.hiddenDim }, () => Array(dim).fill(0));
1216
- for (let i = 0; i < seqLen; i++) {
1217
- for (let d1 = 0; d1 < this.hiddenDim; d1++) {
1218
- for (let d2 = 0; d2 < dim; d2++) {
1219
- ktv[d1][d2] += keyMapped[i][d1] * value[i][d2];
1220
- }
1221
- }
1222
- }
1223
- // Compute Q (K^T V)
1224
- const output = [];
1225
- for (let i = 0; i < seqLen; i++) {
1226
- const row = [];
1227
- for (let d2 = 0; d2 < dim; d2++) {
1228
- let sum = 0;
1229
- for (let d1 = 0; d1 < this.hiddenDim; d1++) {
1230
- sum += queryMapped[i][d1] * ktv[d1][d2];
1231
- }
1232
- row.push(sum);
1233
- }
1234
- // Normalize
1235
- const normSum = queryMapped[i].reduce((a, b) => a + b, 0);
1236
- output.push(row.map(v => v / (normSum + 1e-8)));
1237
- }
1238
- return { output };
1239
- }
1240
- }
1241
- /**
1242
- * Hyperbolic Attention (simplified fallback)
1243
- *
1244
- * Approximation using hyperbolic geometry
1245
- */
1246
- export class HyperbolicAttention {
1247
- hiddenDim;
1248
- curvature;
1249
- constructor(config) {
1250
- this.hiddenDim = config.hiddenDim;
1251
- this.curvature = -1.0; // Poincaré ball curvature
1252
- }
1253
- forward(query, key, value) {
1254
- // Hyperbolic distance (simplified)
1255
- const distance = this.hyperbolicDistance(query, key);
1256
- // Attention weight based on hyperbolic distance
1257
- const weight = Math.exp(-distance);
1258
- // Weighted value
1259
- const output = value.map(v => v * weight);
1260
- return { output, distance };
1261
- }
1262
- hyperbolicDistance(a, b) {
1263
- // Simplified hyperbolic distance in Poincare ball
1264
- let normDiffSq = 0;
1265
- for (let i = 0; i < a.length; i++) {
1266
- const diff = a[i] - b[i];
1267
- normDiffSq += diff * diff;
1268
- }
1269
- const normASq = a.reduce((sum, v) => sum + v * v, 0);
1270
- const normBSq = b.reduce((sum, v) => sum + v * v, 0);
1271
- const numerator = normDiffSq;
1272
- const denominator = (1 - normASq) * (1 - normBSq);
1273
- // Guard against division by zero and negative values
1274
- if (denominator <= EPSILON) {
1275
- return Infinity; // Points are on or outside the boundary
1276
- }
1277
- const acoshArg = 1 + (2 * numerator) / denominator;
1278
- // Guard against invalid acosh argument (must be >= 1)
1279
- if (!Number.isFinite(acoshArg) || acoshArg < 1) {
1280
- return 0; // Return 0 for identical points or numerical issues
1281
- }
1282
- return Math.acosh(acoshArg);
1283
- }
1284
- }
1285
- /**
1286
- * MoE (Mixture of Experts) Attention (fallback)
1287
- *
1288
- * Routes to different expert attention modules
1289
- */
1290
- export class MoEAttention {
1291
- experts;
1292
- numExperts;
1293
- gatingWeights;
1294
- constructor(config) {
1295
- this.numExperts = config.numExperts || 4;
1296
- this.experts = Array.from({ length: this.numExperts }, () => new MultiHeadAttention(config));
1297
- // Initialize gating network weights
1298
- this.gatingWeights = Array.from({ length: this.numExperts }, () => Array.from({ length: config.hiddenDim }, () => (Math.random() - 0.5) * 0.1));
1299
- }
1300
- forward(query, key, value, topK = 2) {
1301
- // Compute gating scores
1302
- const gatingScores = this.gatingWeights.map(weights => {
1303
- let score = 0;
1304
- for (let i = 0; i < query.length; i++) {
1305
- score += query[i] * weights[i];
1306
- }
1307
- return score;
1308
- });
1309
- // Softmax over top-K experts
1310
- const expScores = gatingScores.map(s => Math.exp(s));
1311
- const sumExp = expScores.reduce((a, b) => a + b, 0);
1312
- const expertWeights = expScores.map(e => e / sumExp);
1313
- // Get top-K experts
1314
- const expertIndices = expertWeights
1315
- .map((weight, idx) => ({ weight, idx }))
1316
- .sort((a, b) => b.weight - a.weight)
1317
- .slice(0, topK);
1318
- // Weighted combination of expert outputs
1319
- const output = new Array(query.length).fill(0);
1320
- for (const { weight, idx } of expertIndices) {
1321
- const expertOutput = this.experts[idx].forward(query, key, value).output;
1322
- for (let i = 0; i < output.length; i++) {
1323
- output[i] += weight * expertOutput[i];
1324
- }
1325
- }
1326
- return { output, expertWeights };
1327
- }
1328
- }
1329
- /**
1330
- * Check if native attention is available
1331
- */
1332
- export function isNativeAttentionAvailable() {
1333
- try {
1334
- // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires -- dynamic native module probe
1335
- const attention = require('@ruvector/attention');
1336
- // Try a simple operation
1337
- attention.flashAttention(new Float32Array([1, 0]), new Float32Array([1, 0]), new Float32Array([1, 0]), 1);
1338
- return true;
1339
- }
1340
- catch {
1341
- return false;
1342
- }
1343
- }
1344
- /**
1345
- * Factory function to create appropriate attention module
1346
- */
1347
- export function createAttention(type, config) {
1348
- switch (type) {
1349
- case 'multi-head':
1350
- return new MultiHeadAttention(config);
1351
- case 'flash':
1352
- return new FlashAttention(config);
1353
- case 'linear':
1354
- return new LinearAttention(config);
1355
- case 'hyperbolic':
1356
- return new HyperbolicAttention(config);
1357
- case 'moe':
1358
- return new MoEAttention(config);
1359
- default:
1360
- return new MultiHeadAttention(config);
1361
- }
1362
- }
1363
- /**
1364
- * Factory function to create optimized attention modules
1365
- */
1366
- export function createAttentionOptimized(type, config) {
1367
- switch (type) {
1368
- case 'multi-head':
1369
- return new MultiHeadAttentionOptimized(config);
1370
- case 'flash':
1371
- return new FlashAttentionOptimized(config);
1372
- default:
1373
- return new MultiHeadAttentionOptimized(config);
1374
- }
1375
- }
1376
- // ============================================================================
1377
- // Utility Functions for TypedArray Conversion
1378
- // ============================================================================
1379
- /**
1380
- * Convert number[] to Float32Array
1381
- */
1382
- export function toFloat32Array(arr) {
1383
- return new Float32Array(arr);
1384
- }
1385
- /**
1386
- * Convert Float32Array to number[]
1387
- */
1388
- export function toNumberArray(arr) {
1389
- return Array.from(arr);
1390
- }
1391
- /**
1392
- * Convert 2D number[][] to flattened Float32Array
1393
- */
1394
- export function flatten2D(arr) {
1395
- const totalLen = arr.reduce((sum, row) => sum + row.length, 0);
1396
- const result = new Float32Array(totalLen);
1397
- let offset = 0;
1398
- for (const row of arr) {
1399
- result.set(row, offset);
1400
- offset += row.length;
1401
- }
1402
- return result;
1403
- }
1404
- /**
1405
- * Unflatten Float32Array to 2D array
1406
- */
1407
- export function unflatten2D(arr, rows, cols) {
1408
- const result = [];
1409
- for (let i = 0; i < rows; i++) {
1410
- result.push(Array.from(arr.slice(i * cols, (i + 1) * cols)));
1411
- }
1412
- return result;
1413
- }
1414
- // ============================================================================
1415
- // Buffer Pool Export for External Memory Management
1416
- // ============================================================================
1417
- /**
1418
- * Get the global buffer pool for external memory management
1419
- */
1420
- export function getBufferPool() {
1421
- return {
1422
- acquire: (size) => globalBufferPool.acquire(size),
1423
- release: (buffer) => globalBufferPool.release(buffer),
1424
- clear: () => globalBufferPool.clear(),
1425
- };
1426
- }
1427
- // ============================================================================
1428
- // Performance Benchmarking Utilities
1429
- // ============================================================================
1430
- /**
1431
- * Get high-resolution time (cross-platform)
1432
- */
1433
- function getTime() {
1434
- if (typeof performance !== 'undefined' && performance.now) {
1435
- return performance.now();
1436
- }
1437
- return Date.now();
1438
- }
1439
- /**
1440
- * Benchmark attention implementation
1441
- */
1442
- export function benchmarkAttention(attention, config) {
1443
- const { seqLen, dim, iterations, numHeads = 8 } = config;
1444
- // Create test data
1445
- const query = new Float32Array(seqLen * dim);
1446
- const key = new Float32Array(seqLen * dim);
1447
- const value = new Float32Array(seqLen * dim);
1448
- // Initialize with random values
1449
- for (let i = 0; i < query.length; i++) {
1450
- query[i] = Math.random() - 0.5;
1451
- key[i] = Math.random() - 0.5;
1452
- value[i] = Math.random() - 0.5;
1453
- }
1454
- // Warmup
1455
- if (attention instanceof FlashAttentionOptimized) {
1456
- attention.forward(query, key, value, seqLen, dim, numHeads);
1457
- }
1458
- else if (attention instanceof MultiHeadAttentionOptimized) {
1459
- const q1 = query.slice(0, dim);
1460
- const k1 = key.slice(0, dim);
1461
- const v1 = value.slice(0, dim);
1462
- attention.forward(q1, k1, v1);
1463
- }
1464
- // Benchmark
1465
- const startTime = getTime();
1466
- for (let i = 0; i < iterations; i++) {
1467
- if (attention instanceof FlashAttentionOptimized) {
1468
- const { output } = attention.forward(query, key, value, seqLen, dim, numHeads);
1469
- attention.releaseBuffer(output);
1470
- }
1471
- else if (attention instanceof MultiHeadAttentionOptimized) {
1472
- const q1 = query.slice(0, dim);
1473
- const k1 = key.slice(0, dim);
1474
- const v1 = value.slice(0, dim);
1475
- const { output } = attention.forward(q1, k1, v1);
1476
- attention.releaseBuffer(output);
1477
- }
1478
- }
1479
- const endTime = getTime();
1480
- const totalTimeMs = endTime - startTime;
1481
- return {
1482
- avgTimeMs: totalTimeMs / iterations,
1483
- opsPerSecond: (iterations * 1000) / totalTimeMs,
1484
- memoryUsed: query.byteLength + key.byteLength + value.byteLength,
1485
- };
1486
- }
1487
- //# sourceMappingURL=attention-fallbacks.js.map