agentdb 1.0.11 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +196 -838
- package/dist/benchmarks/comprehensive-benchmark.js +664 -0
- package/dist/benchmarks/frontier-benchmark.js +419 -0
- package/dist/benchmarks/reflexion-benchmark.js +370 -0
- package/dist/cli/agentdb-cli.d.ts +117 -0
- package/dist/cli/agentdb-cli.d.ts.map +1 -0
- package/dist/cli/agentdb-cli.js +718 -0
- package/dist/cli/agentdb-cli.js.map +1 -0
- package/dist/controllers/CausalMemoryGraph.d.ts +125 -0
- package/dist/controllers/CausalMemoryGraph.d.ts.map +1 -0
- package/dist/controllers/CausalMemoryGraph.js +323 -0
- package/dist/controllers/CausalMemoryGraph.js.map +1 -0
- package/dist/controllers/CausalRecall.d.ts +111 -0
- package/dist/controllers/CausalRecall.d.ts.map +1 -0
- package/dist/controllers/CausalRecall.js +282 -0
- package/dist/controllers/CausalRecall.js.map +1 -0
- package/dist/controllers/EmbeddingService.d.ts +37 -0
- package/dist/controllers/EmbeddingService.d.ts.map +1 -0
- package/dist/controllers/EmbeddingService.js +119 -0
- package/dist/controllers/EmbeddingService.js.map +1 -0
- package/dist/controllers/ExplainableRecall.d.ts +138 -0
- package/dist/controllers/ExplainableRecall.d.ts.map +1 -0
- package/dist/controllers/ExplainableRecall.js +388 -0
- package/dist/controllers/ExplainableRecall.js.map +1 -0
- package/dist/controllers/NightlyLearner.d.ts +113 -0
- package/dist/controllers/NightlyLearner.d.ts.map +1 -0
- package/dist/controllers/NightlyLearner.js +383 -0
- package/dist/controllers/NightlyLearner.js.map +1 -0
- package/dist/controllers/ReflexionMemory.d.ts +84 -0
- package/dist/controllers/ReflexionMemory.d.ts.map +1 -0
- package/dist/controllers/ReflexionMemory.js +240 -0
- package/dist/controllers/ReflexionMemory.js.map +1 -0
- package/dist/controllers/SkillLibrary.d.ts +96 -0
- package/dist/controllers/SkillLibrary.d.ts.map +1 -0
- package/dist/controllers/SkillLibrary.js +277 -0
- package/dist/controllers/SkillLibrary.js.map +1 -0
- package/dist/controllers/frontier-index.d.ts +14 -0
- package/dist/controllers/frontier-index.d.ts.map +1 -0
- package/dist/controllers/frontier-index.js +10 -0
- package/dist/controllers/frontier-index.js.map +1 -0
- package/dist/controllers/index.d.ts +12 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +9 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/optimizations/BatchOperations.d.ts +61 -0
- package/dist/optimizations/BatchOperations.d.ts.map +1 -0
- package/dist/optimizations/BatchOperations.js +199 -0
- package/dist/optimizations/BatchOperations.js.map +1 -0
- package/dist/optimizations/QueryOptimizer.d.ts +82 -0
- package/dist/optimizations/QueryOptimizer.d.ts.map +1 -0
- package/dist/optimizations/QueryOptimizer.js +226 -0
- package/dist/optimizations/QueryOptimizer.js.map +1 -0
- package/dist/optimizations/index.d.ts +10 -0
- package/dist/optimizations/index.d.ts.map +1 -0
- package/dist/optimizations/index.js +8 -0
- package/dist/optimizations/index.js.map +1 -0
- package/dist/schemas/frontier-schema.sql +341 -0
- package/dist/schemas/schema.sql +382 -0
- package/dist/tests/frontier-features.test.js +665 -0
- package/package.json +54 -117
- package/src/cli/agentdb-cli.ts +861 -0
- package/src/cli/examples.sh +83 -0
- package/src/controllers/CausalMemoryGraph.ts +504 -0
- package/src/controllers/CausalRecall.ts +395 -0
- package/src/controllers/EmbeddingService.ts +141 -0
- package/src/controllers/ExplainableRecall.ts +577 -0
- package/src/controllers/NightlyLearner.ts +475 -0
- package/src/controllers/ReflexionMemory.ts +349 -0
- package/src/controllers/SkillLibrary.ts +391 -0
- package/src/controllers/frontier-index.ts +35 -0
- package/src/controllers/index.ts +13 -0
- package/src/optimizations/BatchOperations.ts +292 -0
- package/src/optimizations/QueryOptimizer.ts +294 -0
- package/src/optimizations/index.ts +11 -0
- package/src/schemas/frontier-schema.sql +341 -0
- package/src/schemas/schema.sql +382 -0
- package/CHANGELOG.md +0 -166
- package/LICENSE +0 -38
- package/LICENSE-APACHE +0 -190
- package/LICENSE-MIT +0 -21
- package/bin/agentdb.js +0 -733
- package/bin/benchmark.js +0 -162
- package/bin/plugin-cli-wrapper.mjs +0 -21
- package/dist/agentdb.js +0 -5352
- package/dist/agentdb.js.map +0 -7
- package/dist/agentdb.min.js +0 -143
- package/dist/agentdb.min.js.map +0 -7
- package/dist/cache/query-cache.d.ts +0 -105
- package/dist/cache/query-cache.d.ts.map +0 -1
- package/dist/cache/query-cache.js +0 -224
- package/dist/cache/query-cache.js.map +0 -1
- package/dist/cache/query-cache.mjs +0 -219
- package/dist/cli/cache/query-cache.d.ts +0 -104
- package/dist/cli/cache/query-cache.js +0 -244
- package/dist/cli/cli/db-commands.d.ts +0 -48
- package/dist/cli/cli/db-commands.js +0 -613
- package/dist/cli/commands.d.ts +0 -7
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -113
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/commands.mjs +0 -104
- package/dist/cli/core/backend-interface.d.ts +0 -70
- package/dist/cli/core/backend-interface.js +0 -15
- package/dist/cli/core/native-backend.d.ts +0 -140
- package/dist/cli/core/native-backend.js +0 -432
- package/dist/cli/core/vector-db.d.ts +0 -126
- package/dist/cli/core/vector-db.js +0 -338
- package/dist/cli/core/wasm-backend.d.ts +0 -95
- package/dist/cli/core/wasm-backend.js +0 -418
- package/dist/cli/db-commands.d.ts +0 -49
- package/dist/cli/db-commands.d.ts.map +0 -1
- package/dist/cli/db-commands.js +0 -533
- package/dist/cli/db-commands.js.map +0 -1
- package/dist/cli/db-commands.mjs +0 -522
- package/dist/cli/generator.d.ts +0 -11
- package/dist/cli/generator.d.ts.map +0 -1
- package/dist/cli/generator.js +0 -567
- package/dist/cli/generator.js.map +0 -1
- package/dist/cli/generator.mjs +0 -527
- package/dist/cli/help.d.ts +0 -18
- package/dist/cli/help.d.ts.map +0 -1
- package/dist/cli/help.js +0 -676
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/help.mjs +0 -667
- package/dist/cli/index/hnsw.d.ts +0 -164
- package/dist/cli/index/hnsw.js +0 -558
- package/dist/cli/plugin-cli.d.ts +0 -7
- package/dist/cli/plugin-cli.d.ts.map +0 -1
- package/dist/cli/plugin-cli.js +0 -295
- package/dist/cli/plugin-cli.js.map +0 -1
- package/dist/cli/plugin-cli.mjs +0 -289
- package/dist/cli/quantization/product-quantization.d.ts +0 -108
- package/dist/cli/quantization/product-quantization.js +0 -350
- package/dist/cli/query/query-builder.d.ts +0 -322
- package/dist/cli/query/query-builder.js +0 -600
- package/dist/cli/templates.d.ts +0 -14
- package/dist/cli/templates.d.ts.map +0 -1
- package/dist/cli/templates.js +0 -182
- package/dist/cli/templates.js.map +0 -1
- package/dist/cli/templates.mjs +0 -176
- package/dist/cli/types/index.d.ts +0 -116
- package/dist/cli/types/index.js +0 -5
- package/dist/cli/types.d.ts +0 -91
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/types.js +0 -6
- package/dist/cli/types.js.map +0 -1
- package/dist/cli/types.mjs +0 -4
- package/dist/cli/wizard/index.d.ts +0 -6
- package/dist/cli/wizard/index.d.ts.map +0 -1
- package/dist/cli/wizard/index.js +0 -138
- package/dist/cli/wizard/index.js.map +0 -1
- package/dist/cli/wizard/index.mjs +0 -131
- package/dist/cli/wizard/prompts.d.ts +0 -11
- package/dist/cli/wizard/prompts.d.ts.map +0 -1
- package/dist/cli/wizard/prompts.js +0 -482
- package/dist/cli/wizard/prompts.js.map +0 -1
- package/dist/cli/wizard/prompts.mjs +0 -470
- package/dist/cli/wizard/validator.d.ts +0 -13
- package/dist/cli/wizard/validator.d.ts.map +0 -1
- package/dist/cli/wizard/validator.js +0 -234
- package/dist/cli/wizard/validator.js.map +0 -1
- package/dist/cli/wizard/validator.mjs +0 -224
- package/dist/core/backend-interface.d.ts +0 -71
- package/dist/core/backend-interface.d.ts.map +0 -1
- package/dist/core/backend-interface.js +0 -16
- package/dist/core/backend-interface.js.map +0 -1
- package/dist/core/backend-interface.mjs +0 -12
- package/dist/core/native-backend.d.ts +0 -141
- package/dist/core/native-backend.d.ts.map +0 -1
- package/dist/core/native-backend.js +0 -457
- package/dist/core/native-backend.js.map +0 -1
- package/dist/core/native-backend.mjs +0 -449
- package/dist/core/vector-db.d.ts +0 -127
- package/dist/core/vector-db.d.ts.map +0 -1
- package/dist/core/vector-db.js +0 -270
- package/dist/core/vector-db.js.map +0 -1
- package/dist/core/vector-db.mjs +0 -265
- package/dist/core/wasm-backend.d.ts +0 -96
- package/dist/core/wasm-backend.d.ts.map +0 -1
- package/dist/core/wasm-backend.js +0 -393
- package/dist/core/wasm-backend.js.map +0 -1
- package/dist/core/wasm-backend.mjs +0 -385
- package/dist/index/hnsw-optimized.d.ts +0 -75
- package/dist/index/hnsw-optimized.d.ts.map +0 -1
- package/dist/index/hnsw-optimized.js +0 -412
- package/dist/index/hnsw-optimized.js.map +0 -1
- package/dist/index/hnsw-optimized.mjs +0 -407
- package/dist/index/hnsw.d.ts +0 -165
- package/dist/index/hnsw.d.ts.map +0 -1
- package/dist/index/hnsw.js +0 -521
- package/dist/index/hnsw.js.map +0 -1
- package/dist/index/hnsw.mjs +0 -516
- package/dist/index.browser.d.ts +0 -47
- package/dist/index.browser.d.ts.map +0 -1
- package/dist/index.browser.js +0 -72
- package/dist/index.browser.js.map +0 -1
- package/dist/index.browser.mjs +0 -54
- package/dist/index.d.ts +0 -59
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -84
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -65
- package/dist/mcp/learning/core/experience-buffer.d.ts +0 -61
- package/dist/mcp/learning/core/experience-buffer.d.ts.map +0 -1
- package/dist/mcp/learning/core/experience-buffer.js +0 -175
- package/dist/mcp/learning/core/experience-buffer.js.map +0 -1
- package/dist/mcp/learning/core/experience-buffer.mjs +0 -170
- package/dist/mcp/learning/core/experience-recorder.d.ts +0 -40
- package/dist/mcp/learning/core/experience-recorder.d.ts.map +0 -1
- package/dist/mcp/learning/core/experience-recorder.js +0 -200
- package/dist/mcp/learning/core/experience-recorder.js.map +0 -1
- package/dist/mcp/learning/core/experience-recorder.mjs +0 -195
- package/dist/mcp/learning/core/learning-manager.d.ts +0 -66
- package/dist/mcp/learning/core/learning-manager.d.ts.map +0 -1
- package/dist/mcp/learning/core/learning-manager.js +0 -252
- package/dist/mcp/learning/core/learning-manager.js.map +0 -1
- package/dist/mcp/learning/core/learning-manager.mjs +0 -247
- package/dist/mcp/learning/core/policy-optimizer.d.ts +0 -53
- package/dist/mcp/learning/core/policy-optimizer.d.ts.map +0 -1
- package/dist/mcp/learning/core/policy-optimizer.js +0 -251
- package/dist/mcp/learning/core/policy-optimizer.js.map +0 -1
- package/dist/mcp/learning/core/policy-optimizer.mjs +0 -246
- package/dist/mcp/learning/core/reward-estimator.d.ts +0 -44
- package/dist/mcp/learning/core/reward-estimator.d.ts.map +0 -1
- package/dist/mcp/learning/core/reward-estimator.js +0 -158
- package/dist/mcp/learning/core/reward-estimator.js.map +0 -1
- package/dist/mcp/learning/core/reward-estimator.mjs +0 -153
- package/dist/mcp/learning/core/session-manager.d.ts +0 -63
- package/dist/mcp/learning/core/session-manager.d.ts.map +0 -1
- package/dist/mcp/learning/core/session-manager.js +0 -202
- package/dist/mcp/learning/core/session-manager.js.map +0 -1
- package/dist/mcp/learning/core/session-manager.mjs +0 -197
- package/dist/mcp/learning/index.d.ts +0 -19
- package/dist/mcp/learning/index.d.ts.map +0 -1
- package/dist/mcp/learning/index.js +0 -30
- package/dist/mcp/learning/index.js.map +0 -1
- package/dist/mcp/learning/index.mjs +0 -19
- package/dist/mcp/learning/tools/mcp-learning-tools.d.ts +0 -369
- package/dist/mcp/learning/tools/mcp-learning-tools.d.ts.map +0 -1
- package/dist/mcp/learning/tools/mcp-learning-tools.js +0 -361
- package/dist/mcp/learning/tools/mcp-learning-tools.js.map +0 -1
- package/dist/mcp/learning/tools/mcp-learning-tools.mjs +0 -356
- package/dist/mcp/learning/types/index.d.ts +0 -138
- package/dist/mcp/learning/types/index.d.ts.map +0 -1
- package/dist/mcp/learning/types/index.js +0 -6
- package/dist/mcp/learning/types/index.js.map +0 -1
- package/dist/mcp/learning/types/index.mjs +0 -4
- package/dist/mcp-server.d.ts +0 -29
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -862
- package/dist/mcp-server.js.map +0 -1
- package/dist/mcp-server.mjs +0 -857
- package/dist/plugins/base-plugin.d.ts +0 -114
- package/dist/plugins/base-plugin.d.ts.map +0 -1
- package/dist/plugins/base-plugin.js +0 -313
- package/dist/plugins/base-plugin.js.map +0 -1
- package/dist/plugins/base-plugin.mjs +0 -275
- package/dist/plugins/implementations/active-learning.d.ts +0 -135
- package/dist/plugins/implementations/active-learning.d.ts.map +0 -1
- package/dist/plugins/implementations/active-learning.js +0 -372
- package/dist/plugins/implementations/active-learning.js.map +0 -1
- package/dist/plugins/implementations/active-learning.mjs +0 -367
- package/dist/plugins/implementations/actor-critic.d.ts +0 -64
- package/dist/plugins/implementations/actor-critic.d.ts.map +0 -1
- package/dist/plugins/implementations/actor-critic.js +0 -363
- package/dist/plugins/implementations/actor-critic.js.map +0 -1
- package/dist/plugins/implementations/actor-critic.mjs +0 -358
- package/dist/plugins/implementations/adversarial-training.d.ts +0 -133
- package/dist/plugins/implementations/adversarial-training.d.ts.map +0 -1
- package/dist/plugins/implementations/adversarial-training.js +0 -409
- package/dist/plugins/implementations/adversarial-training.js.map +0 -1
- package/dist/plugins/implementations/adversarial-training.mjs +0 -404
- package/dist/plugins/implementations/curriculum-learning.d.ts +0 -132
- package/dist/plugins/implementations/curriculum-learning.d.ts.map +0 -1
- package/dist/plugins/implementations/curriculum-learning.js +0 -354
- package/dist/plugins/implementations/curriculum-learning.js.map +0 -1
- package/dist/plugins/implementations/curriculum-learning.mjs +0 -349
- package/dist/plugins/implementations/decision-transformer.d.ts +0 -77
- package/dist/plugins/implementations/decision-transformer.d.ts.map +0 -1
- package/dist/plugins/implementations/decision-transformer.js +0 -422
- package/dist/plugins/implementations/decision-transformer.js.map +0 -1
- package/dist/plugins/implementations/decision-transformer.mjs +0 -417
- package/dist/plugins/implementations/federated-learning.d.ts +0 -126
- package/dist/plugins/implementations/federated-learning.d.ts.map +0 -1
- package/dist/plugins/implementations/federated-learning.js +0 -436
- package/dist/plugins/implementations/federated-learning.js.map +0 -1
- package/dist/plugins/implementations/federated-learning.mjs +0 -431
- package/dist/plugins/implementations/index.d.ts +0 -30
- package/dist/plugins/implementations/index.d.ts.map +0 -1
- package/dist/plugins/implementations/index.js +0 -45
- package/dist/plugins/implementations/index.js.map +0 -1
- package/dist/plugins/implementations/index.mjs +0 -31
- package/dist/plugins/implementations/multi-task-learning.d.ts +0 -115
- package/dist/plugins/implementations/multi-task-learning.d.ts.map +0 -1
- package/dist/plugins/implementations/multi-task-learning.js +0 -369
- package/dist/plugins/implementations/multi-task-learning.js.map +0 -1
- package/dist/plugins/implementations/multi-task-learning.mjs +0 -364
- package/dist/plugins/implementations/neural-architecture-search.d.ts +0 -148
- package/dist/plugins/implementations/neural-architecture-search.d.ts.map +0 -1
- package/dist/plugins/implementations/neural-architecture-search.js +0 -379
- package/dist/plugins/implementations/neural-architecture-search.js.map +0 -1
- package/dist/plugins/implementations/neural-architecture-search.mjs +0 -374
- package/dist/plugins/implementations/q-learning.d.ts +0 -98
- package/dist/plugins/implementations/q-learning.d.ts.map +0 -1
- package/dist/plugins/implementations/q-learning.js +0 -435
- package/dist/plugins/implementations/q-learning.js.map +0 -1
- package/dist/plugins/implementations/q-learning.mjs +0 -430
- package/dist/plugins/implementations/sarsa.d.ts +0 -103
- package/dist/plugins/implementations/sarsa.d.ts.map +0 -1
- package/dist/plugins/implementations/sarsa.js +0 -347
- package/dist/plugins/implementations/sarsa.js.map +0 -1
- package/dist/plugins/implementations/sarsa.mjs +0 -342
- package/dist/plugins/index.d.ts +0 -107
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -179
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/index.mjs +0 -168
- package/dist/plugins/interface.d.ts +0 -439
- package/dist/plugins/interface.d.ts.map +0 -1
- package/dist/plugins/interface.js +0 -12
- package/dist/plugins/interface.js.map +0 -1
- package/dist/plugins/interface.mjs +0 -10
- package/dist/plugins/learning-plugin.interface.d.ts +0 -257
- package/dist/plugins/learning-plugin.interface.d.ts.map +0 -1
- package/dist/plugins/learning-plugin.interface.js +0 -7
- package/dist/plugins/learning-plugin.interface.js.map +0 -1
- package/dist/plugins/learning-plugin.interface.mjs +0 -5
- package/dist/plugins/plugin-exports.d.ts +0 -71
- package/dist/plugins/plugin-exports.d.ts.map +0 -1
- package/dist/plugins/plugin-exports.js +0 -78
- package/dist/plugins/plugin-exports.js.map +0 -1
- package/dist/plugins/plugin-exports.mjs +0 -69
- package/dist/plugins/registry.d.ts +0 -206
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -365
- package/dist/plugins/registry.js.map +0 -1
- package/dist/plugins/registry.mjs +0 -356
- package/dist/plugins/validator.d.ts +0 -63
- package/dist/plugins/validator.d.ts.map +0 -1
- package/dist/plugins/validator.js +0 -464
- package/dist/plugins/validator.js.map +0 -1
- package/dist/plugins/validator.mjs +0 -458
- package/dist/presets.d.ts +0 -65
- package/dist/presets.d.ts.map +0 -1
- package/dist/presets.js +0 -145
- package/dist/presets.js.map +0 -1
- package/dist/presets.mjs +0 -140
- package/dist/quantization/binary-quantization.d.ts +0 -104
- package/dist/quantization/binary-quantization.d.ts.map +0 -1
- package/dist/quantization/binary-quantization.js +0 -246
- package/dist/quantization/binary-quantization.js.map +0 -1
- package/dist/quantization/binary-quantization.mjs +0 -240
- package/dist/quantization/optimized-pq.d.ts +0 -138
- package/dist/quantization/optimized-pq.d.ts.map +0 -1
- package/dist/quantization/optimized-pq.js +0 -320
- package/dist/quantization/optimized-pq.js.map +0 -1
- package/dist/quantization/optimized-pq.mjs +0 -313
- package/dist/quantization/product-quantization.d.ts +0 -109
- package/dist/quantization/product-quantization.d.ts.map +0 -1
- package/dist/quantization/product-quantization.js +0 -287
- package/dist/quantization/product-quantization.js.map +0 -1
- package/dist/quantization/product-quantization.mjs +0 -282
- package/dist/quantization/scalar-quantization.d.ts +0 -100
- package/dist/quantization/scalar-quantization.d.ts.map +0 -1
- package/dist/quantization/scalar-quantization.js +0 -324
- package/dist/quantization/scalar-quantization.js.map +0 -1
- package/dist/quantization/scalar-quantization.mjs +0 -319
- package/dist/query/index.d.ts +0 -6
- package/dist/query/index.d.ts.map +0 -1
- package/dist/query/index.js +0 -9
- package/dist/query/index.js.map +0 -1
- package/dist/query/index.mjs +0 -4
- package/dist/query/query-builder.d.ts +0 -323
- package/dist/query/query-builder.d.ts.map +0 -1
- package/dist/query/query-builder.js +0 -524
- package/dist/query/query-builder.js.map +0 -1
- package/dist/query/query-builder.mjs +0 -519
- package/dist/reasoning/context-synthesizer.d.ts +0 -57
- package/dist/reasoning/context-synthesizer.d.ts.map +0 -1
- package/dist/reasoning/context-synthesizer.js +0 -224
- package/dist/reasoning/context-synthesizer.js.map +0 -1
- package/dist/reasoning/context-synthesizer.mjs +0 -219
- package/dist/reasoning/experience-curator.d.ts +0 -66
- package/dist/reasoning/experience-curator.d.ts.map +0 -1
- package/dist/reasoning/experience-curator.js +0 -288
- package/dist/reasoning/experience-curator.js.map +0 -1
- package/dist/reasoning/experience-curator.mjs +0 -283
- package/dist/reasoning/memory-optimizer.d.ts +0 -69
- package/dist/reasoning/memory-optimizer.d.ts.map +0 -1
- package/dist/reasoning/memory-optimizer.js +0 -331
- package/dist/reasoning/memory-optimizer.js.map +0 -1
- package/dist/reasoning/memory-optimizer.mjs +0 -326
- package/dist/reasoning/pattern-matcher.d.ts +0 -59
- package/dist/reasoning/pattern-matcher.d.ts.map +0 -1
- package/dist/reasoning/pattern-matcher.js +0 -229
- package/dist/reasoning/pattern-matcher.js.map +0 -1
- package/dist/reasoning/pattern-matcher.mjs +0 -224
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +0 -118
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +0 -1
- package/dist/reasoningbank/adapter/agentdb-adapter.js +0 -477
- package/dist/reasoningbank/adapter/agentdb-adapter.js.map +0 -1
- package/dist/reasoningbank/adapter/types.d.ts +0 -113
- package/dist/reasoningbank/adapter/types.d.ts.map +0 -1
- package/dist/reasoningbank/adapter/types.js +0 -9
- package/dist/reasoningbank/adapter/types.js.map +0 -1
- package/dist/reasoningbank/cli/commands.d.ts +0 -16
- package/dist/reasoningbank/cli/commands.d.ts.map +0 -1
- package/dist/reasoningbank/cli/commands.js +0 -272
- package/dist/reasoningbank/cli/commands.js.map +0 -1
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts +0 -319
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +0 -1
- package/dist/reasoningbank/mcp/agentdb-tools.js +0 -301
- package/dist/reasoningbank/mcp/agentdb-tools.js.map +0 -1
- package/dist/reasoningbank/migration/migrate.d.ts +0 -25
- package/dist/reasoningbank/migration/migrate.d.ts.map +0 -1
- package/dist/reasoningbank/migration/migrate.js +0 -178
- package/dist/reasoningbank/migration/migrate.js.map +0 -1
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +0 -37
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +0 -1
- package/dist/reasoningbank/reasoning/context-synthesizer.js +0 -114
- package/dist/reasoningbank/reasoning/context-synthesizer.js.map +0 -1
- package/dist/reasoningbank/reasoning/experience-curator.d.ts +0 -39
- package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +0 -1
- package/dist/reasoningbank/reasoning/experience-curator.js +0 -98
- package/dist/reasoningbank/reasoning/experience-curator.js.map +0 -1
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +0 -44
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +0 -1
- package/dist/reasoningbank/reasoning/memory-optimizer.js +0 -184
- package/dist/reasoningbank/reasoning/memory-optimizer.js.map +0 -1
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +0 -40
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +0 -1
- package/dist/reasoningbank/reasoning/pattern-matcher.js +0 -87
- package/dist/reasoningbank/reasoning/pattern-matcher.js.map +0 -1
- package/dist/reasoningbank/sync/quic-sync.d.ts +0 -77
- package/dist/reasoningbank/sync/quic-sync.d.ts.map +0 -1
- package/dist/reasoningbank/sync/quic-sync.js +0 -165
- package/dist/reasoningbank/sync/quic-sync.js.map +0 -1
- package/dist/sync/conflict.d.ts +0 -78
- package/dist/sync/conflict.d.ts.map +0 -1
- package/dist/sync/conflict.js +0 -202
- package/dist/sync/conflict.js.map +0 -1
- package/dist/sync/conflict.mjs +0 -196
- package/dist/sync/coordinator.d.ts +0 -111
- package/dist/sync/coordinator.d.ts.map +0 -1
- package/dist/sync/coordinator.js +0 -256
- package/dist/sync/coordinator.js.map +0 -1
- package/dist/sync/coordinator.mjs +0 -250
- package/dist/sync/delta.d.ts +0 -81
- package/dist/sync/delta.d.ts.map +0 -1
- package/dist/sync/delta.js +0 -245
- package/dist/sync/delta.js.map +0 -1
- package/dist/sync/delta.mjs +0 -238
- package/dist/sync/index.d.ts +0 -11
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js +0 -22
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/index.mjs +0 -9
- package/dist/sync/quic-sync.d.ts +0 -81
- package/dist/sync/quic-sync.d.ts.map +0 -1
- package/dist/sync/quic-sync.js +0 -329
- package/dist/sync/quic-sync.js.map +0 -1
- package/dist/sync/quic-sync.mjs +0 -323
- package/dist/sync/types.d.ts +0 -168
- package/dist/sync/types.d.ts.map +0 -1
- package/dist/sync/types.js +0 -8
- package/dist/sync/types.js.map +0 -1
- package/dist/sync/types.mjs +0 -6
- package/dist/types/index.d.ts +0 -117
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/index.mjs +0 -4
- package/dist/wasm/sql-wasm-debug.js +0 -6989
- package/dist/wasm/sql-wasm-debug.wasm +0 -0
- package/dist/wasm/sql-wasm.js +0 -188
- package/dist/wasm/sql-wasm.wasm +0 -0
- package/dist/wasm-loader.d.ts +0 -32
- package/dist/wasm-loader.d.ts.map +0 -1
- package/dist/wasm-loader.js +0 -78
- package/dist/wasm-loader.js.map +0 -1
- package/dist/wasm-loader.mjs +0 -67
- package/examples/adaptive-learning.ts +0 -284
- package/examples/browser/README.md +0 -732
- package/examples/browser/adaptive-recommendations/index.html +0 -427
- package/examples/browser/collaborative-filtering/index.html +0 -310
- package/examples/browser/continual-learning/index.html +0 -736
- package/examples/browser/experience-replay/index.html +0 -616
- package/examples/browser/index.html +0 -369
- package/examples/browser/meta-learning/index.html +0 -789
- package/examples/browser/neuro-symbolic/index.html +0 -692
- package/examples/browser/pattern-learning/index.html +0 -620
- package/examples/browser/quantum-inspired/index.html +0 -728
- package/examples/browser/rag/index.html +0 -624
- package/examples/browser/swarm-intelligence/index.html +0 -811
- package/examples/browser-basic.html +0 -170
- package/examples/browser-wasm-real.html +0 -231
- package/examples/hnsw-example.ts +0 -148
- package/examples/mcp-learning-example.ts +0 -220
- package/examples/node-basic.js +0 -70
- package/examples/quic-sync-example.ts +0 -310
- package/examples/quick-start.js +0 -68
- package/examples/test-v1.0.7-cdn.html +0 -190
- package/examples/wasm-example.ts +0 -222
package/dist/agentdb.min.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB v1.0.7 - Browser Bundle
|
|
3
|
-
* Ultra-fast agent memory and vector database
|
|
4
|
-
* Built with sql.js WASM backend for browser support
|
|
5
|
-
* @license MIT OR Apache-2.0
|
|
6
|
-
*/
|
|
7
|
-
var Tn=Object.create;var Rt=Object.defineProperty;var An=Object.getOwnPropertyDescriptor;var Nn=Object.getOwnPropertyNames;var xn=Object.getPrototypeOf,Rn=Object.prototype.hasOwnProperty;var Mn=(A,r,i)=>r in A?Rt(A,r,{enumerable:!0,configurable:!0,writable:!0,value:i}):A[r]=i;var Ge=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(r,i)=>(typeof require<"u"?require:r)[i]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});var Ln=(A,r)=>()=>(r||A((r={exports:{}}).exports,r),r.exports);var On=(A,r,i,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let c of Nn(r))!Rn.call(A,c)&&c!==i&&Rt(A,c,{get:()=>r[c],enumerable:!(a=An(r,c))||a.enumerable});return A};var Ar=(A,r,i)=>(i=A!=null?Tn(xn(A)):{},On(r||!A||!A.__esModule?Rt(i,"default",{value:A,enumerable:!0}):i,A));var ae=(A,r,i)=>Mn(A,typeof r!="symbol"?r+"":r,i);var Mt=Ln((et,fe)=>{var Je=void 0,Ze=function(A){return Je||(Je=new Promise(function(r,i){var a=typeof A<"u"?A:{},c=a.onAbort;a.onAbort=function(e){i(new Error(e)),c&&c(e)},a.postRun=a.postRun||[],a.postRun.push(function(){r(a)}),fe=void 0;var s;s||(s=typeof a<"u"?a:{});var m=typeof window=="object",l=typeof WorkerGlobalScope<"u",p=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";s.onRuntimeInitialized=function(){function e(d,b){switch(typeof b){case"boolean":Sn(d,b?1:0);break;case"number":wn(d,b);break;case"string":En(d,b,-1,-1);break;case"object":if(b===null)_r(d);else if(b.length!=null){var w=Xe(b,$e);_n(d,w,b.length,-1),je(w)}else Ye(d,"Wrong API use : tried to return a value of an unknown type ("+b+").",-1);break;default:_r(d)}}function t(d,b){for(var w=[],T=0;T<d;T+=1){var R=ee(b+4*T,"i32"),I=bn(R);if(I===1||I===2)R=vn(R);else if(I===3)R=gn(R);else if(I===4){I=R,R=pn(I),I=yn(I);for(var K=new Uint8Array(R),Y=0;Y<R;Y+=1)K[Y]=Q[I+Y];R=K}else R=null;w.push(R)}return w}function n(d,b){this.Qa=d,this.db=b,this.Oa=1,this.lb=[]}function o(d,b){if(this.db=b,b=Te(d)+1,this.eb=At(b),this.eb===null)throw Error("Unable to allocate memory for the SQL string");te(d,D,this.eb,b),this.kb=this.eb,this.Za=this.pb=null}function u(d){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),d!=null){var b=this.filename,w="/",T=b;if(w&&(w=typeof w=="string"?w:ft(w),T=b?dt(w+"/"+b):w),b=Yt(!0,!0),T=Wr(T,b),d){if(typeof d=="string"){w=Array(d.length);for(var R=0,I=d.length;R<I;++R)w[R]=d.charCodeAt(R);d=w}Qe(T,b|146),w=we(T,577),hr(w,d,0,d.length,0),wt(w),Qe(T,b)}}this.handleError(C(this.filename,h)),this.db=ee(h,"i32"),Cr(this.db),this.fb={},this.Sa={}}var h=oe(4),f=s.cwrap,C=f("sqlite3_open","number",["string","number"]),O=f("sqlite3_close_v2","number",["number"]),L=f("sqlite3_exec","number",["number","string","number","number","number"]),k=f("sqlite3_changes","number",["number"]),$=f("sqlite3_prepare_v2","number",["number","string","number","number","number"]),gr=f("sqlite3_sql","string",["number"]),Kr=f("sqlite3_normalized_sql","string",["number"]),yr=f("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Jr=f("sqlite3_bind_text","number",["number","number","number","number","number"]),vr=f("sqlite3_bind_blob","number",["number","number","number","number","number"]),Zr=f("sqlite3_bind_double","number",["number","number","number"]),en=f("sqlite3_bind_int","number",["number","number","number"]),tn=f("sqlite3_bind_parameter_index","number",["number","string"]),rn=f("sqlite3_step","number",["number"]),nn=f("sqlite3_errmsg","string",["number"]),sn=f("sqlite3_column_count","number",["number"]),on=f("sqlite3_data_count","number",["number"]),an=f("sqlite3_column_double","number",["number","number"]),wr=f("sqlite3_column_text","string",["number","number"]),cn=f("sqlite3_column_blob","number",["number","number"]),un=f("sqlite3_column_bytes","number",["number","number"]),ln=f("sqlite3_column_type","number",["number","number"]),dn=f("sqlite3_column_name","string",["number","number"]),hn=f("sqlite3_reset","number",["number"]),mn=f("sqlite3_clear_bindings","number",["number"]),fn=f("sqlite3_finalize","number",["number"]),Er=f("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),bn=f("sqlite3_value_type","number",["number"]),pn=f("sqlite3_value_bytes","number",["number"]),gn=f("sqlite3_value_text","string",["number"]),yn=f("sqlite3_value_blob","number",["number"]),vn=f("sqlite3_value_double","number",["number"]),wn=f("sqlite3_result_double","",["number","number"]),_r=f("sqlite3_result_null","",["number"]),En=f("sqlite3_result_text","",["number","string","number","number"]),_n=f("sqlite3_result_blob","",["number","number","number","number"]),Sn=f("sqlite3_result_int","",["number","number"]),Ye=f("sqlite3_result_error","",["number","string","number"]),Sr=f("sqlite3_aggregate_context","number",["number","number"]),Cr=f("RegisterExtensionFunctions","number",["number"]),Tr=f("sqlite3_update_hook","number",["number","number","number"]);n.prototype.bind=function(d){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(d)?this.Cb(d):d!=null&&typeof d=="object"?this.Db(d):!0},n.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var d=rn(this.Qa);switch(d){case 100:return!0;case 101:return!1;default:throw this.db.handleError(d)}},n.prototype.wb=function(d){return d==null&&(d=this.Oa,this.Oa+=1),an(this.Qa,d)},n.prototype.Gb=function(d){if(d==null&&(d=this.Oa,this.Oa+=1),d=wr(this.Qa,d),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(d)},n.prototype.Hb=function(d){return d==null&&(d=this.Oa,this.Oa+=1),wr(this.Qa,d)},n.prototype.getBlob=function(d){d==null&&(d=this.Oa,this.Oa+=1);var b=un(this.Qa,d);d=cn(this.Qa,d);for(var w=new Uint8Array(b),T=0;T<b;T+=1)w[T]=Q[d+T];return w},n.prototype.get=function(d,b){b=b||{},d!=null&&this.bind(d)&&this.step(),d=[];for(var w=on(this.Qa),T=0;T<w;T+=1)switch(ln(this.Qa,T)){case 1:var R=b.useBigInt?this.Gb(T):this.wb(T);d.push(R);break;case 2:d.push(this.wb(T));break;case 3:d.push(this.Hb(T));break;case 4:d.push(this.getBlob(T));break;default:d.push(null)}return d},n.prototype.getColumnNames=function(){for(var d=[],b=sn(this.Qa),w=0;w<b;w+=1)d.push(dn(this.Qa,w));return d},n.prototype.getAsObject=function(d,b){d=this.get(d,b),b=this.getColumnNames();for(var w={},T=0;T<b.length;T+=1)w[b[T]]=d[T];return w},n.prototype.getSQL=function(){return gr(this.Qa)},n.prototype.getNormalizedSQL=function(){return Kr(this.Qa)},n.prototype.run=function(d){return d!=null&&this.bind(d),this.step(),this.reset()},n.prototype.sb=function(d,b){b==null&&(b=this.Oa,this.Oa+=1),d=$t(d);var w=Xe(d,$e);this.lb.push(w),this.db.handleError(Jr(this.Qa,b,w,d.length-1,0))},n.prototype.Bb=function(d,b){b==null&&(b=this.Oa,this.Oa+=1);var w=Xe(d,$e);this.lb.push(w),this.db.handleError(vr(this.Qa,b,w,d.length,0))},n.prototype.rb=function(d,b){b==null&&(b=this.Oa,this.Oa+=1),this.db.handleError((d===(d|0)?en:Zr)(this.Qa,b,d))},n.prototype.Eb=function(d){d==null&&(d=this.Oa,this.Oa+=1),vr(this.Qa,d,0,0,0)},n.prototype.tb=function(d,b){switch(b==null&&(b=this.Oa,this.Oa+=1),typeof d){case"string":this.sb(d,b);return;case"number":this.rb(d,b);return;case"bigint":this.sb(d.toString(),b);return;case"boolean":this.rb(d+0,b);return;case"object":if(d===null){this.Eb(b);return}if(d.length!=null){this.Bb(d,b);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+d+")."},n.prototype.Db=function(d){var b=this;return Object.keys(d).forEach(function(w){var T=tn(b.Qa,w);T!==0&&b.tb(d[w],T)}),!0},n.prototype.Cb=function(d){for(var b=0;b<d.length;b+=1)this.tb(d[b],b+1);return!0},n.prototype.reset=function(){return this.freemem(),mn(this.Qa)===0&&hn(this.Qa)===0},n.prototype.freemem=function(){for(var d;(d=this.lb.pop())!==void 0;)je(d)},n.prototype.free=function(){this.freemem();var d=fn(this.Qa)===0;return delete this.db.fb[this.Qa],this.Qa=0,d},o.prototype.next=function(){if(this.eb===null)return{done:!0};if(this.Za!==null&&(this.Za.free(),this.Za=null),!this.db.db)throw this.mb(),Error("Database closed");var d=Me(),b=oe(4);Ce(h),Ce(b);try{this.db.handleError(yr(this.db.db,this.kb,-1,h,b)),this.kb=ee(b,"i32");var w=ee(h,"i32");return w===0?(this.mb(),{done:!0}):(this.Za=new n(w,this.db),this.db.fb[w]=this.Za,{value:this.Za,done:!1})}catch(T){throw this.pb=lt(this.kb),this.mb(),T}finally{Re(d)}},o.prototype.mb=function(){je(this.eb),this.eb=null},o.prototype.getRemainingSQL=function(){return this.pb!==null?this.pb:lt(this.kb)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(o.prototype[Symbol.iterator]=function(){return this}),u.prototype.run=function(d,b){if(!this.db)throw"Database closed";if(b){d=this.prepare(d,b);try{d.step()}finally{d.free()}}else this.handleError(L(this.db,d,0,0,h));return this},u.prototype.exec=function(d,b,w){if(!this.db)throw"Database closed";var T=Me(),R=null;try{var I=Ct(d),K=oe(4);for(d=[];ee(I,"i8")!==0;){Ce(h),Ce(K),this.handleError(yr(this.db,I,-1,h,K));var Y=ee(h,"i32");if(I=ee(K,"i32"),Y!==0){var X=null;for(R=new n(Y,this),b!=null&&R.bind(b);R.step();)X===null&&(X={columns:R.getColumnNames(),values:[]},d.push(X)),X.values.push(R.get(null,w));R.free()}}return d}catch(J){throw R&&R.free(),J}finally{Re(T)}},u.prototype.each=function(d,b,w,T,R){typeof b=="function"&&(T=w,w=b,b=void 0),d=this.prepare(d,b);try{for(;d.step();)w(d.getAsObject(null,R))}finally{d.free()}if(typeof T=="function")return T()},u.prototype.prepare=function(d,b){if(Ce(h),this.handleError($(this.db,d,-1,h,0)),d=ee(h,"i32"),d===0)throw"Nothing to prepare";var w=new n(d,this);return b!=null&&w.bind(b),this.fb[d]=w},u.prototype.iterateStatements=function(d){return new o(d,this)},u.prototype.export=function(){Object.values(this.fb).forEach(function(b){b.free()}),Object.values(this.Sa).forEach(se),this.Sa={},this.handleError(O(this.db));var d=Hr(this.filename);return this.handleError(C(this.filename,h)),this.db=ee(h,"i32"),Cr(this.db),d},u.prototype.close=function(){this.db!==null&&(Object.values(this.fb).forEach(function(d){d.free()}),Object.values(this.Sa).forEach(se),this.Sa={},this.Ya&&(se(this.Ya),this.Ya=void 0),this.handleError(O(this.db)),ar("/"+this.filename),this.db=null)},u.prototype.handleError=function(d){if(d===0)return null;throw d=nn(this.db),Error(d)},u.prototype.getRowsModified=function(){return k(this.db)},u.prototype.create_function=function(d,b){Object.prototype.hasOwnProperty.call(this.Sa,d)&&(se(this.Sa[d]),delete this.Sa[d]);var w=xe(function(T,R,I){R=t(R,I);try{var K=b.apply(null,R)}catch(Y){Ye(T,Y,-1);return}e(T,K)},"viii");return this.Sa[d]=w,this.handleError(Er(this.db,d,b.length,1,0,w,0,0,0)),this},u.prototype.create_aggregate=function(d,b){var w=b.init||function(){return null},T=b.finalize||function(X){return X},R=b.step;if(!R)throw"An aggregate function must have a step function in "+d;var I={};Object.hasOwnProperty.call(this.Sa,d)&&(se(this.Sa[d]),delete this.Sa[d]),b=d+"__finalize",Object.hasOwnProperty.call(this.Sa,b)&&(se(this.Sa[b]),delete this.Sa[b]);var K=xe(function(X,J,xt){var me=Sr(X,1);Object.hasOwnProperty.call(I,me)||(I[me]=w()),J=t(J,xt),J=[I[me]].concat(J);try{I[me]=R.apply(null,J)}catch(Cn){delete I[me],Ye(X,Cn,-1)}},"viii"),Y=xe(function(X){var J=Sr(X,1);try{var xt=T(I[J])}catch(me){delete I[J],Ye(X,me,-1);return}e(X,xt),delete I[J]},"vi");return this.Sa[d]=K,this.Sa[b]=Y,this.handleError(Er(this.db,d,R.length-1,1,0,0,K,Y,0)),this},u.prototype.updateHook=function(d){this.Ya&&(Tr(this.db,0,0),se(this.Ya),this.Ya=void 0),d&&(this.Ya=xe(function(b,w,T,R,I){switch(w){case 18:b="insert";break;case 23:b="update";break;case 9:b="delete";break;default:throw"unknown operationCode in updateHook callback: "+w}if(T=T?P(D,T):"",R=R?P(D,R):"",I>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";d(b,T,R,Number(I))},"viiiij"),Tr(this.db,this.Ya,0))},s.Database=u};var v={...s},E="./this.program",y=(e,t)=>{throw t},N="",_,x;if(p){var B=Ge("fs");Ge("path"),N=__dirname+"/",x=e=>(e=Pe(e)?new URL(e):e,B.readFileSync(e)),_=async e=>(e=Pe(e)?new URL(e):e,B.readFileSync(e,void 0)),!s.thisProgram&&1<process.argv.length&&(E=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),typeof fe<"u"&&(fe.exports=s),y=(e,t)=>{throw process.exitCode=e,t}}else(m||l)&&(l?N=self.location.href:typeof document<"u"&&document.currentScript&&(N=document.currentScript.src),N=N.startsWith("blob:")?"":N.slice(0,N.replace(/[?#].*/,"").lastIndexOf("/")+1),l&&(x=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),_=async e=>{if(Pe(e))return new Promise((n,o)=>{var u=new XMLHttpRequest;u.open("GET",e,!0),u.responseType="arraybuffer",u.onload=()=>{u.status==200||u.status==0&&u.response?n(u.response):o(u.status)},u.onerror=o,u.send(null)});var t=await fetch(e,{credentials:"same-origin"});if(t.ok)return t.arrayBuffer();throw Error(t.status+" : "+t.url)});var V=s.print||console.log.bind(console),F=s.printErr||console.error.bind(console);Object.assign(s,v),v=null,s.thisProgram&&(E=s.thisProgram);var ce=s.wasmBinary,ze,qe=!1,it,Q,D,_e,z,U,st,G,ot,Pe=e=>e.startsWith("file://");function kt(){var e=ze.buffer;s.HEAP8=Q=new Int8Array(e),s.HEAP16=_e=new Int16Array(e),s.HEAPU8=D=new Uint8Array(e),s.HEAPU16=new Uint16Array(e),s.HEAP32=z=new Int32Array(e),s.HEAPU32=U=new Uint32Array(e),s.HEAPF32=st=new Float32Array(e),s.HEAPF64=ot=new Float64Array(e),s.HEAP64=G=new BigInt64Array(e),s.HEAPU64=new BigUint64Array(e)}var ue=0,Se=null;function ge(e){throw s.onAbort?.(e),e="Aborted("+e+")",F(e),qe=!0,new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.")}var at;async function Mr(e){if(!ce)try{var t=await _(e);return new Uint8Array(t)}catch{}if(e==at&&ce)e=new Uint8Array(ce);else if(x)e=x(e);else throw"both async and sync fetching of the wasm failed";return e}async function Lr(e,t){try{var n=await Mr(e);return await WebAssembly.instantiate(n,t)}catch(o){F(`failed to asynchronously prepare wasm: ${o}`),ge(o)}}async function Or(e){var t=at;if(!ce&&typeof WebAssembly.instantiateStreaming=="function"&&!Pe(t)&&!p)try{var n=fetch(t,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(n,e)}catch(o){F(`wasm streaming compile failed: ${o}`),F("falling back to ArrayBuffer instantiation")}return Lr(t,e)}class ct{constructor(t){ae(this,"name","ExitStatus");this.message=`Program terminated with exit(${t})`,this.status=t}}var Bt=e=>{for(;0<e.length;)e.shift()(s)},Ut=[],Ft=[],Dr=()=>{var e=s.preRun.shift();Ft.unshift(e)};function ee(e,t="i8"){switch(t.endsWith("*")&&(t="*"),t){case"i1":return Q[e];case"i8":return Q[e];case"i16":return _e[e>>1];case"i32":return z[e>>2];case"i64":return G[e>>3];case"float":return st[e>>2];case"double":return ot[e>>3];case"*":return U[e>>2];default:ge(`invalid type for getValue: ${t}`)}}var ut=s.noExitRuntime||!0;function Ce(e){var t="i32";switch(t.endsWith("*")&&(t="*"),t){case"i1":Q[e]=0;break;case"i8":Q[e]=0;break;case"i16":_e[e>>1]=0;break;case"i32":z[e>>2]=0;break;case"i64":G[e>>3]=BigInt(0);break;case"float":st[e>>2]=0;break;case"double":ot[e>>3]=0;break;case"*":U[e>>2]=0;break;default:ge(`invalid type for setValue: ${t}`)}}var Qt=typeof TextDecoder<"u"?new TextDecoder:void 0,P=(e,t=0,n=NaN)=>{var o=t+n;for(n=t;e[n]&&!(n>=o);)++n;if(16<n-t&&e.buffer&&Qt)return Qt.decode(e.subarray(t,n));for(o="";t<n;){var u=e[t++];if(u&128){var h=e[t++]&63;if((u&224)==192)o+=String.fromCharCode((u&31)<<6|h);else{var f=e[t++]&63;u=(u&240)==224?(u&15)<<12|h<<6|f:(u&7)<<18|h<<12|f<<6|e[t++]&63,65536>u?o+=String.fromCharCode(u):(u-=65536,o+=String.fromCharCode(55296|u>>10,56320|u&1023))}}else o+=String.fromCharCode(u)}return o},lt=(e,t)=>e?P(D,e,t):"",Vt=(e,t)=>{for(var n=0,o=e.length-1;0<=o;o--){var u=e[o];u==="."?e.splice(o,1):u===".."?(e.splice(o,1),n++):n&&(e.splice(o,1),n--)}if(t)for(;n;n--)e.unshift("..");return e},dt=e=>{var t=e.charAt(0)==="/",n=e.slice(-1)==="/";return(e=Vt(e.split("/").filter(o=>!!o),!t).join("/"))||t||(e="."),e&&n&&(e+="/"),(t?"/":"")+e},Wt=e=>{var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1);return e=t[0],t=t[1],!e&&!t?".":(t&&(t=t.slice(0,-1)),e+t)},ke=e=>e&&e.match(/([^\/]+|\/)\/*$/)[1],Ir=()=>{if(p){var e=Ge("crypto");return t=>e.randomFillSync(t)}return t=>crypto.getRandomValues(t)},Ht=e=>{(Ht=Ir())(e)},zr=(...e)=>{for(var t="",n=!1,o=e.length-1;-1<=o&&!n;o--){if(n=0<=o?e[o]:"/",typeof n!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";t=n+"/"+t,n=n.charAt(0)==="/"}return t=Vt(t.split("/").filter(u=>!!u),!n).join("/"),(n?"/":"")+t||"."},ht=[],Te=e=>{for(var t=0,n=0;n<e.length;++n){var o=e.charCodeAt(n);127>=o?t++:2047>=o?t+=2:55296<=o&&57343>=o?(t+=4,++n):t+=3}return t},te=(e,t,n,o)=>{if(!(0<o))return 0;var u=n;o=n+o-1;for(var h=0;h<e.length;++h){var f=e.charCodeAt(h);if(55296<=f&&57343>=f){var C=e.charCodeAt(++h);f=65536+((f&1023)<<10)|C&1023}if(127>=f){if(n>=o)break;t[n++]=f}else{if(2047>=f){if(n+1>=o)break;t[n++]=192|f>>6}else{if(65535>=f){if(n+2>=o)break;t[n++]=224|f>>12}else{if(n+3>=o)break;t[n++]=240|f>>18,t[n++]=128|f>>12&63}t[n++]=128|f>>6&63}t[n++]=128|f&63}}return t[n]=0,n-u},$t=(e,t)=>{var n=Array(Te(e)+1);return e=te(e,n,0,n.length),t&&(n.length=e),n},Xt=[];function jt(e,t){Xt[e]={input:[],output:[],cb:t},yt(e,qr)}var qr={open(e){var t=Xt[e.node.rdev];if(!t)throw new g(43);e.tty=t,e.seekable=!1},close(e){e.tty.cb.fsync(e.tty)},fsync(e){e.tty.cb.fsync(e.tty)},read(e,t,n,o){if(!e.tty||!e.tty.cb.xb)throw new g(60);for(var u=0,h=0;h<o;h++){try{var f=e.tty.cb.xb(e.tty)}catch{throw new g(29)}if(f===void 0&&u===0)throw new g(6);if(f==null)break;u++,t[n+h]=f}return u&&(e.node.atime=Date.now()),u},write(e,t,n,o){if(!e.tty||!e.tty.cb.qb)throw new g(60);try{for(var u=0;u<o;u++)e.tty.cb.qb(e.tty,t[n+u])}catch{throw new g(29)}return o&&(e.node.mtime=e.node.ctime=Date.now()),u}},Pr={xb(){e:{if(!ht.length){var e=null;if(p){var t=Buffer.alloc(256),n=0,o=process.stdin.fd;try{n=B.readSync(o,t,0,256)}catch(u){if(u.toString().includes("EOF"))n=0;else throw u}0<n&&(e=t.slice(0,n).toString("utf-8"))}else typeof window<"u"&&typeof window.prompt=="function"&&(e=window.prompt("Input: "),e!==null&&(e+=`
|
|
8
|
-
`));if(!e){e=null;break e}ht=$t(e,!0)}e=ht.shift()}return e},qb(e,t){t===null||t===10?(V(P(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){0<e.output?.length&&(V(P(e.output)),e.output=[])},Tb(){return{Ob:25856,Qb:5,Nb:191,Pb:35387,Mb:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},Ub(){return 0},Vb(){return[24,80]}},kr={qb(e,t){t===null||t===10?(F(P(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){0<e.output?.length&&(F(P(e.output)),e.output=[])}},M={Wa:null,Xa(){return M.createNode(null,"/",16895,0)},createNode(e,t,n,o){if((n&61440)===24576||(n&61440)===4096)throw new g(63);return M.Wa||(M.Wa={dir:{node:{Ta:M.La.Ta,Ua:M.La.Ua,lookup:M.La.lookup,hb:M.La.hb,rename:M.La.rename,unlink:M.La.unlink,rmdir:M.La.rmdir,readdir:M.La.readdir,symlink:M.La.symlink},stream:{Va:M.Ma.Va}},file:{node:{Ta:M.La.Ta,Ua:M.La.Ua},stream:{Va:M.Ma.Va,read:M.Ma.read,write:M.Ma.write,ib:M.Ma.ib,jb:M.Ma.jb}},link:{node:{Ta:M.La.Ta,Ua:M.La.Ua,readlink:M.La.readlink},stream:{}},ub:{node:{Ta:M.La.Ta,Ua:M.La.Ua},stream:Vr}}),n=er(e,t,n,o),H(n.mode)?(n.La=M.Wa.dir.node,n.Ma=M.Wa.dir.stream,n.Na={}):(n.mode&61440)===32768?(n.La=M.Wa.file.node,n.Ma=M.Wa.file.stream,n.Ra=0,n.Na=null):(n.mode&61440)===40960?(n.La=M.Wa.link.node,n.Ma=M.Wa.link.stream):(n.mode&61440)===8192&&(n.La=M.Wa.ub.node,n.Ma=M.Wa.ub.stream),n.atime=n.mtime=n.ctime=Date.now(),e&&(e.Na[t]=n,e.atime=e.mtime=e.ctime=n.atime),n},Sb(e){return e.Na?e.Na.subarray?e.Na.subarray(0,e.Ra):new Uint8Array(e.Na):new Uint8Array(0)},La:{Ta(e){var t={};return t.dev=(e.mode&61440)===8192?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,H(e.mode)?t.size=4096:(e.mode&61440)===32768?t.size=e.Ra:(e.mode&61440)===40960?t.size=e.link.length:t.size=0,t.atime=new Date(e.atime),t.mtime=new Date(e.mtime),t.ctime=new Date(e.ctime),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},Ua(e,t){for(var n of["mode","atime","mtime","ctime"])t[n]!=null&&(e[n]=t[n]);t.size!==void 0&&(t=t.size,e.Ra!=t&&(t==0?(e.Na=null,e.Ra=0):(n=e.Na,e.Na=new Uint8Array(t),n&&e.Na.set(n.subarray(0,Math.min(t,e.Ra))),e.Ra=t)))},lookup(){throw M.vb},hb(e,t,n,o){return M.createNode(e,t,n,o)},rename(e,t,n){try{var o=le(t,n)}catch{}if(o){if(H(e.mode))for(var u in o.Na)throw new g(55);pt(o)}delete e.parent.Na[e.name],t.Na[n]=e,e.name=n,t.ctime=t.mtime=e.parent.ctime=e.parent.mtime=Date.now()},unlink(e,t){delete e.Na[t],e.ctime=e.mtime=Date.now()},rmdir(e,t){var n=le(e,t),o;for(o in n.Na)throw new g(55);delete e.Na[t],e.ctime=e.mtime=Date.now()},readdir(e){return[".","..",...Object.keys(e.Na)]},symlink(e,t,n){return e=M.createNode(e,t,41471,0),e.link=n,e},readlink(e){if((e.mode&61440)!==40960)throw new g(28);return e.link}},Ma:{read(e,t,n,o,u){var h=e.node.Na;if(u>=e.node.Ra)return 0;if(e=Math.min(e.node.Ra-u,o),8<e&&h.subarray)t.set(h.subarray(u,u+e),n);else for(o=0;o<e;o++)t[n+o]=h[u+o];return e},write(e,t,n,o,u,h){if(t.buffer===Q.buffer&&(h=!1),!o)return 0;if(e=e.node,e.mtime=e.ctime=Date.now(),t.subarray&&(!e.Na||e.Na.subarray)){if(h)return e.Na=t.subarray(n,n+o),e.Ra=o;if(e.Ra===0&&u===0)return e.Na=t.slice(n,n+o),e.Ra=o;if(u+o<=e.Ra)return e.Na.set(t.subarray(n,n+o),u),o}h=u+o;var f=e.Na?e.Na.length:0;if(f>=h||(h=Math.max(h,f*(1048576>f?2:1.125)>>>0),f!=0&&(h=Math.max(h,256)),f=e.Na,e.Na=new Uint8Array(h),0<e.Ra&&e.Na.set(f.subarray(0,e.Ra),0)),e.Na.subarray&&t.subarray)e.Na.set(t.subarray(n,n+o),u);else for(h=0;h<o;h++)e.Na[u+h]=t[n+h];return e.Ra=Math.max(e.Ra,u+o),o},Va(e,t,n){if(n===1?t+=e.position:n===2&&(e.node.mode&61440)===32768&&(t+=e.node.Ra),0>t)throw new g(28);return t},ib(e,t,n,o,u){if((e.node.mode&61440)!==32768)throw new g(43);if(e=e.node.Na,u&2||!e||e.buffer!==Q.buffer){u=!0,o=65536*Math.ceil(t/65536);var h=br(65536,o);if(h&&D.fill(0,h,h+o),o=h,!o)throw new g(48);e&&((0<n||n+t<e.length)&&(e.subarray?e=e.subarray(n,n+t):e=Array.prototype.slice.call(e,n,n+t)),Q.set(e,o))}else u=!1,o=e.byteOffset;return{Kb:o,Ab:u}},jb(e,t,n,o){return M.Ma.write(e,t,0,o,n,!1),0}}},Yt=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},mt=null,Gt={},ye=[],Br=1,ne=null,Kt=!1,Jt=!0,Zt={},g=class{constructor(e){ae(this,"name","ErrnoError");this.Pa=e}},Ur=class{constructor(){ae(this,"gb",{});ae(this,"node",null)}get flags(){return this.gb.flags}set flags(e){this.gb.flags=e}get position(){return this.gb.position}set position(e){this.gb.position=e}},Fr=class{constructor(e,t,n,o){ae(this,"La",{});ae(this,"Ma",{});ae(this,"ab",null);e||(e=this),this.parent=e,this.Xa=e.Xa,this.id=Br++,this.name=t,this.mode=n,this.rdev=o,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&365)===365}set read(e){e?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(e){e?this.mode|=146:this.mode&=-147}};function j(e,t={}){if(!e)throw new g(44);t.nb??(t.nb=!0),e.charAt(0)==="/"||(e="//"+e);var n=0;e:for(;40>n;n++){e=e.split("/").filter(C=>!!C);for(var o=mt,u="/",h=0;h<e.length;h++){var f=h===e.length-1;if(f&&t.parent)break;if(e[h]!==".")if(e[h]==="..")u=Wt(u),o=o.parent;else{u=dt(u+"/"+e[h]);try{o=le(o,e[h])}catch(C){if(C?.Pa===44&&f&&t.Jb)return{path:u};throw C}if(!o.ab||f&&!t.nb||(o=o.ab.root),(o.mode&61440)===40960&&(!f||t.$a)){if(!o.La.readlink)throw new g(52);o=o.La.readlink(o),o.charAt(0)==="/"||(o=Wt(u)+"/"+o),e=o+"/"+e.slice(h+1).join("/");continue e}}}return{path:u,node:o}}throw new g(32)}function ft(e){for(var t;;){if(e===e.parent)return e=e.Xa.zb,t?e[e.length-1]!=="/"?`${e}/${t}`:e+t:e;t=t?`${e.name}/${t}`:e.name,e=e.parent}}function bt(e,t){for(var n=0,o=0;o<t.length;o++)n=(n<<5)-n+t.charCodeAt(o)|0;return(e+n>>>0)%ne.length}function pt(e){var t=bt(e.parent.id,e.name);if(ne[t]===e)ne[t]=e.bb;else for(t=ne[t];t;){if(t.bb===e){t.bb=e.bb;break}t=t.bb}}function le(e,t){var n=H(e.mode)?(n=ve(e,"x"))?n:e.La.lookup?0:2:54;if(n)throw new g(n);for(n=ne[bt(e.id,t)];n;n=n.bb){var o=n.name;if(n.parent.id===e.id&&o===t)return n}return e.La.lookup(e,t)}function er(e,t,n,o){return e=new Fr(e,t,n,o),t=bt(e.parent.id,e.name),e.bb=ne[t],ne[t]=e}function H(e){return(e&61440)===16384}function tr(e){var t=["r","w","rw"][e&3];return e&512&&(t+="w"),t}function ve(e,t){if(Jt)return 0;if(!t.includes("r")||e.mode&292){if(t.includes("w")&&!(e.mode&146)||t.includes("x")&&!(e.mode&73))return 2}else return 2;return 0}function rr(e,t){if(!H(e.mode))return 54;try{return le(e,t),20}catch{}return ve(e,"wx")}function nr(e,t,n){try{var o=le(e,t)}catch(u){return u.Pa}if(e=ve(e,"wx"))return e;if(n){if(!H(o.mode))return 54;if(o===o.parent||ft(o)==="/")return 10}else if(H(o.mode))return 31;return 0}function Be(e){if(!e)throw new g(63);return e}function W(e){if(e=ye[e],!e)throw new g(8);return e}function ir(e,t=-1){if(e=Object.assign(new Ur,e),t==-1)e:{for(t=0;4096>=t;t++)if(!ye[t])break e;throw new g(33)}return e.fd=t,ye[t]=e}function Qr(e,t=-1){return e=ir(e,t),e.Ma?.Rb?.(e),e}function gt(e,t,n){var o=e?.Ma.Ua;e=o?e:t,o??(o=t.La.Ua),Be(o),o(e,n)}var Vr={open(e){e.Ma=Gt[e.node.rdev].Ma,e.Ma.open?.(e)},Va(){throw new g(70)}};function yt(e,t){Gt[e]={Ma:t}}function sr(e,t){var n=t==="/";if(n&&mt)throw new g(10);if(!n&&t){var o=j(t,{nb:!1});if(t=o.path,o=o.node,o.ab)throw new g(10);if(!H(o.mode))throw new g(54)}t={type:e,Wb:{},zb:t,Ib:[]},e=e.Xa(t),e.Xa=t,t.root=e,n?mt=e:o&&(o.ab=t,o.Xa&&o.Xa.Ib.push(t))}function Ue(e,t,n){var o=j(e,{parent:!0}).node;if(e=ke(e),!e)throw new g(28);if(e==="."||e==="..")throw new g(20);var u=rr(o,e);if(u)throw new g(u);if(!o.La.hb)throw new g(63);return o.La.hb(o,e,t,n)}function Wr(e,t=438){return Ue(e,t&4095|32768,0)}function Z(e,t=511){return Ue(e,t&1023|16384,0)}function Fe(e,t,n){typeof n>"u"&&(n=t,t=438),Ue(e,t|8192,n)}function vt(e,t){if(!zr(e))throw new g(44);var n=j(t,{parent:!0}).node;if(!n)throw new g(44);t=ke(t);var o=rr(n,t);if(o)throw new g(o);if(!n.La.symlink)throw new g(63);n.La.symlink(n,t,e)}function or(e){var t=j(e,{parent:!0}).node;e=ke(e);var n=le(t,e),o=nr(t,e,!0);if(o)throw new g(o);if(!t.La.rmdir)throw new g(63);if(n.ab)throw new g(10);t.La.rmdir(t,e),pt(n)}function ar(e){var t=j(e,{parent:!0}).node;if(!t)throw new g(44);e=ke(e);var n=le(t,e),o=nr(t,e,!1);if(o)throw new g(o);if(!t.La.unlink)throw new g(63);if(n.ab)throw new g(10);t.La.unlink(t,e),pt(n)}function Ae(e,t){return e=j(e,{$a:!t}).node,Be(e.La.Ta)(e)}function cr(e,t,n,o){gt(e,t,{mode:n&4095|t.mode&-4096,ctime:Date.now(),Fb:o})}function Qe(e,t){e=typeof e=="string"?j(e,{$a:!0}).node:e,cr(null,e,t)}function ur(e,t,n){if(H(t.mode))throw new g(31);if((t.mode&61440)!==32768)throw new g(28);var o=ve(t,"w");if(o)throw new g(o);gt(e,t,{size:n,timestamp:Date.now()})}function we(e,t,n=438){if(e==="")throw new g(44);if(typeof t=="string"){var o={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[t];if(typeof o>"u")throw Error(`Unknown file open mode: ${t}`);t=o}if(n=t&64?n&4095|32768:0,typeof e=="object")o=e;else{var u=e.endsWith("/");e=j(e,{$a:!(t&131072),Jb:!0}),o=e.node,e=e.path}var h=!1;if(t&64)if(o){if(t&128)throw new g(20)}else{if(u)throw new g(31);o=Ue(e,n|511,0),h=!0}if(!o)throw new g(44);if((o.mode&61440)===8192&&(t&=-513),t&65536&&!H(o.mode))throw new g(54);if(!h&&(u=o?(o.mode&61440)===40960?32:H(o.mode)&&(tr(t)!=="r"||t&576)?31:ve(o,tr(t)):44))throw new g(u);return t&512&&!h&&(u=o,u=typeof u=="string"?j(u,{$a:!0}).node:u,ur(null,u,0)),t&=-131713,u=ir({node:o,path:ft(o),flags:t,seekable:!0,position:0,Ma:o.Ma,Lb:[],error:!1}),u.Ma.open&&u.Ma.open(u),h&&Qe(o,n&511),!s.logReadFiles||t&1||e in Zt||(Zt[e]=1),u}function wt(e){if(e.fd===null)throw new g(8);e.ob&&(e.ob=null);try{e.Ma.close&&e.Ma.close(e)}catch(t){throw t}finally{ye[e.fd]=null}e.fd=null}function lr(e,t,n){if(e.fd===null)throw new g(8);if(!e.seekable||!e.Ma.Va)throw new g(70);if(n!=0&&n!=1&&n!=2)throw new g(28);e.position=e.Ma.Va(e,t,n),e.Lb=[]}function dr(e,t,n,o,u){if(0>o||0>u)throw new g(28);if(e.fd===null)throw new g(8);if((e.flags&2097155)===1)throw new g(8);if(H(e.node.mode))throw new g(31);if(!e.Ma.read)throw new g(28);var h=typeof u<"u";if(!h)u=e.position;else if(!e.seekable)throw new g(70);return t=e.Ma.read(e,t,n,o,u),h||(e.position+=t),t}function hr(e,t,n,o,u){if(0>o||0>u)throw new g(28);if(e.fd===null)throw new g(8);if((e.flags&2097155)===0)throw new g(8);if(H(e.node.mode))throw new g(31);if(!e.Ma.write)throw new g(28);e.seekable&&e.flags&1024&&lr(e,0,2);var h=typeof u<"u";if(!h)u=e.position;else if(!e.seekable)throw new g(70);return t=e.Ma.write(e,t,n,o,u,void 0),h||(e.position+=t),t}function Hr(e){var t="binary";if(t!=="utf8"&&t!=="binary")throw Error(`Invalid encoding type "${t}"`);var n,o=we(e,o||0);e=Ae(e).size;var u=new Uint8Array(e);return dr(o,u,0,e,0),t==="utf8"?n=P(u):t==="binary"&&(n=u),wt(o),n}function ie(e,t,n){e=dt("/dev/"+e);var o=Yt(!!t,!!n);ie.yb??(ie.yb=64);var u=ie.yb++<<8|0;yt(u,{open(h){h.seekable=!1},close(){n?.buffer?.length&&n(10)},read(h,f,C,O){for(var L=0,k=0;k<O;k++){try{var $=t()}catch{throw new g(29)}if($===void 0&&L===0)throw new g(6);if($==null)break;L++,f[C+k]=$}return L&&(h.node.atime=Date.now()),L},write(h,f,C,O){for(var L=0;L<O;L++)try{n(f[C+L])}catch{throw new g(29)}return O&&(h.node.mtime=h.node.ctime=Date.now()),L}}),Fe(e,o,u)}var q={};function de(e,t,n){if(t.charAt(0)==="/")return t;if(e=e===-100?"/":W(e).path,t.length==0){if(!n)throw new g(44);return e}return e+"/"+t}function Ve(e,t){z[e>>2]=t.dev,z[e+4>>2]=t.mode,U[e+8>>2]=t.nlink,z[e+12>>2]=t.uid,z[e+16>>2]=t.gid,z[e+20>>2]=t.rdev,G[e+24>>3]=BigInt(t.size),z[e+32>>2]=4096,z[e+36>>2]=t.blocks;var n=t.atime.getTime(),o=t.mtime.getTime(),u=t.ctime.getTime();return G[e+40>>3]=BigInt(Math.floor(n/1e3)),U[e+48>>2]=n%1e3*1e6,G[e+56>>3]=BigInt(Math.floor(o/1e3)),U[e+64>>2]=o%1e3*1e6,G[e+72>>3]=BigInt(Math.floor(u/1e3)),U[e+80>>2]=u%1e3*1e6,G[e+88>>3]=BigInt(t.ino),0}var We=void 0,He=()=>{var e=z[+We>>2];return We+=4,e},Et=0,$r=[0,31,60,91,121,152,182,213,244,274,305,335],Xr=[0,31,59,90,120,151,181,212,243,273,304,334],Ne={},mr=e=>{it=e,ut||0<Et||(s.onExit?.(e),qe=!0),y(e,new ct(e))},jr=e=>{if(!qe)try{if(e(),!(ut||0<Et))try{it=e=it,mr(e)}catch(t){t instanceof ct||t=="unwind"||y(1,t)}}catch(t){t instanceof ct||t=="unwind"||y(1,t)}},_t={},fr=()=>{if(!St){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:E||"./this.program"},t;for(t in _t)_t[t]===void 0?delete e[t]:e[t]=_t[t];var n=[];for(t in e)n.push(`${t}=${e[t]}`);St=n}return St},St,Ct=e=>{var t=Te(e)+1,n=oe(t);return te(e,D,n,t),n},Yr=(e,t,n,o)=>{var u={string:L=>{var k=0;return L!=null&&L!==0&&(k=Ct(L)),k},array:L=>{var k=oe(L.length);return Q.set(L,k),k}};e=s["_"+e];var h=[],f=0;if(o)for(var C=0;C<o.length;C++){var O=u[n[C]];O?(f===0&&(f=Me()),h[C]=O(o[C])):h[C]=o[C]}return n=e(...h),n=(function(L){return f!==0&&Re(f),t==="string"?L?P(D,L):"":t==="boolean"?!!L:L})(n)},$e=0,Xe=(e,t)=>(t=t==1?oe(e.length):At(e.length),e.subarray||e.slice||(e=new Uint8Array(e)),D.set(e,t),t),he,Tt=[],re,se=e=>{he.delete(re.get(e)),re.set(e,null),Tt.push(e)},xe=(e,t)=>{if(!he){he=new WeakMap;var n=re.length;if(he)for(var o=0;o<0+n;o++){var u=re.get(o);u&&he.set(u,o)}}if(n=he.get(e)||0)return n;if(Tt.length)n=Tt.pop();else{try{re.grow(1)}catch(O){throw O instanceof RangeError?"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.":O}n=re.length-1}try{re.set(n,e)}catch(O){if(!(O instanceof TypeError))throw O;if(typeof WebAssembly.Function=="function"){var h=WebAssembly.Function;o={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"},u={parameters:[],results:t[0]=="v"?[]:[o[t[0]]]};for(var f=1;f<t.length;++f)u.parameters.push(o[t[f]]);t=new h(u,e)}else{o=[1],u=t.slice(0,1),t=t.slice(1),f={i:127,p:127,j:126,f:125,d:124,e:111},o.push(96);var C=t.length;128>C?o.push(C):o.push(C%128|128,C>>7);for(h of t)o.push(f[h]);u=="v"?o.push(0):o.push(1,f[u]),t=[0,97,115,109,1,0,0,0,1],h=o.length,128>h?t.push(h):t.push(h%128|128,h>>7),t.push(...o),t.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),t=new WebAssembly.Module(new Uint8Array(t)),t=new WebAssembly.Instance(t,{e:{f:e}}).exports.f}re.set(n,t)}return he.set(e,n),n};ne=Array(4096),sr(M,"/"),Z("/tmp"),Z("/home"),Z("/home/web_user"),(function(){Z("/dev"),yt(259,{read:()=>0,write:(o,u,h,f)=>f,Va:()=>0}),Fe("/dev/null",259),jt(1280,Pr),jt(1536,kr),Fe("/dev/tty",1280),Fe("/dev/tty1",1536);var e=new Uint8Array(1024),t=0,n=()=>(t===0&&(Ht(e),t=e.byteLength),e[--t]);ie("random",n),ie("urandom",n),Z("/dev/shm"),Z("/dev/shm/tmp")})(),(function(){Z("/proc");var e=Z("/proc/self");Z("/proc/self/fd"),sr({Xa(){var t=er(e,"fd",16895,73);return t.Ma={Va:M.Ma.Va},t.La={lookup(n,o){n=+o;var u=W(n);return n={parent:null,Xa:{zb:"fake"},La:{readlink:()=>u.path},id:n+1},n.parent=n},readdir(){return Array.from(ye.entries()).filter(([,n])=>n).map(([n])=>n.toString())}},t}},"/proc/self/fd")})(),M.vb=new g(44),M.vb.stack="<generic error, no stack>";var Gr={a:(e,t,n,o)=>ge(`Assertion failed: ${e?P(D,e):""}, at: `+[t?t?P(D,t):"":"unknown filename",n,o?o?P(D,o):"":"unknown function"]),i:function(e,t){try{return e=e?P(D,e):"",Qe(e,t),0}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return-n.Pa}},L:function(e,t,n){try{if(t=t?P(D,t):"",t=de(e,t),n&-8)return-28;var o=j(t,{$a:!0}).node;return o?(e="",n&4&&(e+="r"),n&2&&(e+="w"),n&1&&(e+="x"),e&&ve(o,e)?-2:0):-44}catch(u){if(typeof q>"u"||u.name!=="ErrnoError")throw u;return-u.Pa}},j:function(e,t){try{var n=W(e);return cr(n,n.node,t,!1),0}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},h:function(e){try{var t=W(e);return gt(t,t.node,{timestamp:Date.now(),Fb:!1}),0}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return-n.Pa}},b:function(e,t,n){We=n;try{var o=W(e);switch(t){case 0:var u=He();if(0>u)break;for(;ye[u];)u++;return Qr(o,u).fd;case 1:case 2:return 0;case 3:return o.flags;case 4:return u=He(),o.flags|=u,0;case 12:return u=He(),_e[u+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(h){if(typeof q>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},g:function(e,t){try{var n=W(e),o=n.node,u=n.Ma.Ta;e=u?n:o,u??(u=o.La.Ta),Be(u);var h=u(e);return Ve(t,h)}catch(f){if(typeof q>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},H:function(e,t){t=-9007199254740992>t||9007199254740992<t?NaN:Number(t);try{if(isNaN(t))return 61;var n=W(e);if(0>t||(n.flags&2097155)===0)throw new g(28);return ur(n,n.node,t),0}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},G:function(e,t){try{if(t===0)return-28;var n=Te("/")+1;return t<n?-68:(te("/",D,e,t),n)}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},K:function(e,t){try{return e=e?P(D,e):"",Ve(t,Ae(e,!0))}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return-n.Pa}},C:function(e,t,n){try{return t=t?P(D,t):"",t=de(e,t),Z(t,n),0}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},J:function(e,t,n,o){try{t=t?P(D,t):"";var u=o&256;return t=de(e,t,o&4096),Ve(n,u?Ae(t,!0):Ae(t))}catch(h){if(typeof q>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},x:function(e,t,n,o){We=o;try{t=t?P(D,t):"",t=de(e,t);var u=o?He():0;return we(t,n,u).fd}catch(h){if(typeof q>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},v:function(e,t,n,o){try{if(t=t?P(D,t):"",t=de(e,t),0>=o)return-28;var u=j(t).node;if(!u)throw new g(44);if(!u.La.readlink)throw new g(28);var h=u.La.readlink(u),f=Math.min(o,Te(h)),C=Q[n+f];return te(h,D,n,o+1),Q[n+f]=C,f}catch(O){if(typeof q>"u"||O.name!=="ErrnoError")throw O;return-O.Pa}},u:function(e){try{return e=e?P(D,e):"",or(e),0}catch(t){if(typeof q>"u"||t.name!=="ErrnoError")throw t;return-t.Pa}},f:function(e,t){try{return e=e?P(D,e):"",Ve(t,Ae(e))}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return-n.Pa}},r:function(e,t,n){try{return t=t?P(D,t):"",t=de(e,t),n===0?ar(t):n===512?or(t):ge("Invalid flags passed to unlinkat"),0}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},q:function(e,t,n){try{t=t?P(D,t):"",t=de(e,t,!0);var o=Date.now(),u,h;if(n){var f=U[n>>2]+4294967296*z[n+4>>2],C=z[n+8>>2];C==1073741823?u=o:C==1073741822?u=null:u=1e3*f+C/1e6,n+=16,f=U[n>>2]+4294967296*z[n+4>>2],C=z[n+8>>2],C==1073741823?h=o:C==1073741822?h=null:h=1e3*f+C/1e6}else h=u=o;if((h??u)!==null){e=u;var O=j(t,{$a:!0}).node;Be(O.La.Ua)(O,{atime:e,mtime:h})}return 0}catch(L){if(typeof q>"u"||L.name!=="ErrnoError")throw L;return-L.Pa}},m:()=>ge(""),l:()=>{ut=!1,Et=0},A:function(e,t){e=-9007199254740992>e||9007199254740992<e?NaN:Number(e),e=new Date(1e3*e),z[t>>2]=e.getSeconds(),z[t+4>>2]=e.getMinutes(),z[t+8>>2]=e.getHours(),z[t+12>>2]=e.getDate(),z[t+16>>2]=e.getMonth(),z[t+20>>2]=e.getFullYear()-1900,z[t+24>>2]=e.getDay();var n=e.getFullYear();z[t+28>>2]=(n%4!==0||n%100===0&&n%400!==0?Xr:$r)[e.getMonth()]+e.getDate()-1|0,z[t+36>>2]=-(60*e.getTimezoneOffset()),n=new Date(e.getFullYear(),6,1).getTimezoneOffset();var o=new Date(e.getFullYear(),0,1).getTimezoneOffset();z[t+32>>2]=(n!=o&&e.getTimezoneOffset()==Math.min(o,n))|0},y:function(e,t,n,o,u,h,f){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return 61;var C=W(o);if((t&2)!==0&&(n&2)===0&&(C.flags&2097155)!==2)throw new g(2);if((C.flags&2097155)===1)throw new g(2);if(!C.Ma.ib)throw new g(43);if(!e)throw new g(28);var O=C.Ma.ib(C,e,u,t,n),L=O.Kb;return z[h>>2]=O.Ab,U[f>>2]=L,0}catch(k){if(typeof q>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},z:function(e,t,n,o,u,h){h=-9007199254740992>h||9007199254740992<h?NaN:Number(h);try{var f=W(u);if(n&2){if(n=h,(f.node.mode&61440)!==32768)throw new g(43);if(!(o&2)){var C=D.slice(e,e+t);f.Ma.jb&&f.Ma.jb(f,C,n,t,o)}}}catch(O){if(typeof q>"u"||O.name!=="ErrnoError")throw O;return-O.Pa}},n:(e,t)=>{if(Ne[e]&&(clearTimeout(Ne[e].id),delete Ne[e]),!t)return 0;var n=setTimeout(()=>{delete Ne[e],jr(()=>pr(e,performance.now()))},t);return Ne[e]={id:n,Xb:t},0},B:(e,t,n,o)=>{var u=new Date().getFullYear(),h=new Date(u,0,1).getTimezoneOffset();u=new Date(u,6,1).getTimezoneOffset(),U[e>>2]=60*Math.max(h,u),z[t>>2]=+(h!=u),t=f=>{var C=Math.abs(f);return`UTC${0<=f?"-":"+"}${String(Math.floor(C/60)).padStart(2,"0")}${String(C%60).padStart(2,"0")}`},e=t(h),t=t(u),u<h?(te(e,D,n,17),te(t,D,o,17)):(te(e,D,o,17),te(t,D,n,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:e=>{var t=D.length;if(e>>>=0,2147483648<e)return!1;for(var n=1;4>=n;n*=2){var o=t*(1+.2/n);o=Math.min(o,e+100663296);e:{o=(Math.min(2147483648,65536*Math.ceil(Math.max(e,o)/65536))-ze.buffer.byteLength+65535)/65536|0;try{ze.grow(o),kt();var u=1;break e}catch{}u=void 0}if(u)return!0}return!1},E:(e,t)=>{var n=0;return fr().forEach((o,u)=>{var h=t+n;for(u=U[e+4*u>>2]=h,h=0;h<o.length;++h)Q[u++]=o.charCodeAt(h);Q[u]=0,n+=o.length+1}),0},F:(e,t)=>{var n=fr();U[e>>2]=n.length;var o=0;return n.forEach(u=>o+=u.length+1),U[t>>2]=o,0},e:function(e){try{var t=W(e);return wt(t),0}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return n.Pa}},p:function(e,t){try{var n=W(e);return Q[t]=n.tty?2:H(n.mode)?3:(n.mode&61440)===40960?7:4,_e[t+2>>1]=0,G[t+8>>3]=BigInt(0),G[t+16>>3]=BigInt(0),0}catch(o){if(typeof q>"u"||o.name!=="ErrnoError")throw o;return o.Pa}},w:function(e,t,n,o){try{e:{var u=W(e);e=t;for(var h,f=t=0;f<n;f++){var C=U[e>>2],O=U[e+4>>2];e+=8;var L=dr(u,Q,C,O,h);if(0>L){var k=-1;break e}if(t+=L,L<O)break;typeof h<"u"&&(h+=L)}k=t}return U[o>>2]=k,0}catch($){if(typeof q>"u"||$.name!=="ErrnoError")throw $;return $.Pa}},D:function(e,t,n,o){t=-9007199254740992>t||9007199254740992<t?NaN:Number(t);try{if(isNaN(t))return 61;var u=W(e);return lr(u,t,n),G[o>>3]=BigInt(u.position),u.ob&&t===0&&n===0&&(u.ob=null),0}catch(h){if(typeof q>"u"||h.name!=="ErrnoError")throw h;return h.Pa}},I:function(e){try{var t=W(e);return t.Ma?.fsync?t.Ma.fsync(t):0}catch(n){if(typeof q>"u"||n.name!=="ErrnoError")throw n;return n.Pa}},t:function(e,t,n,o){try{e:{var u=W(e);e=t;for(var h,f=t=0;f<n;f++){var C=U[e>>2],O=U[e+4>>2];e+=8;var L=hr(u,Q,C,O,h);if(0>L){var k=-1;break e}if(t+=L,L<O)break;typeof h<"u"&&(h+=L)}k=t}return U[o>>2]=k,0}catch($){if(typeof q>"u"||$.name!=="ErrnoError")throw $;return $.Pa}},k:mr},S;(async function(){function e(n){return S=n.exports,ze=S.M,kt(),re=S.O,ue--,s.monitorRunDependencies?.(ue),ue==0&&Se&&(n=Se,Se=null,n()),S}ue++,s.monitorRunDependencies?.(ue);var t={a:Gr};return s.instantiateWasm?new Promise(n=>{s.instantiateWasm(t,(o,u)=>{e(o,u),n(o.exports)})}):(at??(at=s.locateFile?s.locateFile("sql-wasm.wasm",N):N+"sql-wasm.wasm"),e((await Or(t)).instance))})(),s._sqlite3_free=e=>(s._sqlite3_free=S.P)(e),s._sqlite3_value_text=e=>(s._sqlite3_value_text=S.Q)(e),s._sqlite3_prepare_v2=(e,t,n,o,u)=>(s._sqlite3_prepare_v2=S.R)(e,t,n,o,u),s._sqlite3_step=e=>(s._sqlite3_step=S.S)(e),s._sqlite3_reset=e=>(s._sqlite3_reset=S.T)(e),s._sqlite3_exec=(e,t,n,o,u)=>(s._sqlite3_exec=S.U)(e,t,n,o,u),s._sqlite3_finalize=e=>(s._sqlite3_finalize=S.V)(e),s._sqlite3_column_name=(e,t)=>(s._sqlite3_column_name=S.W)(e,t),s._sqlite3_column_text=(e,t)=>(s._sqlite3_column_text=S.X)(e,t),s._sqlite3_column_type=(e,t)=>(s._sqlite3_column_type=S.Y)(e,t),s._sqlite3_errmsg=e=>(s._sqlite3_errmsg=S.Z)(e),s._sqlite3_clear_bindings=e=>(s._sqlite3_clear_bindings=S._)(e),s._sqlite3_value_blob=e=>(s._sqlite3_value_blob=S.$)(e),s._sqlite3_value_bytes=e=>(s._sqlite3_value_bytes=S.aa)(e),s._sqlite3_value_double=e=>(s._sqlite3_value_double=S.ba)(e),s._sqlite3_value_int=e=>(s._sqlite3_value_int=S.ca)(e),s._sqlite3_value_type=e=>(s._sqlite3_value_type=S.da)(e),s._sqlite3_result_blob=(e,t,n,o)=>(s._sqlite3_result_blob=S.ea)(e,t,n,o),s._sqlite3_result_double=(e,t)=>(s._sqlite3_result_double=S.fa)(e,t),s._sqlite3_result_error=(e,t,n)=>(s._sqlite3_result_error=S.ga)(e,t,n),s._sqlite3_result_int=(e,t)=>(s._sqlite3_result_int=S.ha)(e,t),s._sqlite3_result_int64=(e,t)=>(s._sqlite3_result_int64=S.ia)(e,t),s._sqlite3_result_null=e=>(s._sqlite3_result_null=S.ja)(e),s._sqlite3_result_text=(e,t,n,o)=>(s._sqlite3_result_text=S.ka)(e,t,n,o),s._sqlite3_aggregate_context=(e,t)=>(s._sqlite3_aggregate_context=S.la)(e,t),s._sqlite3_column_count=e=>(s._sqlite3_column_count=S.ma)(e),s._sqlite3_data_count=e=>(s._sqlite3_data_count=S.na)(e),s._sqlite3_column_blob=(e,t)=>(s._sqlite3_column_blob=S.oa)(e,t),s._sqlite3_column_bytes=(e,t)=>(s._sqlite3_column_bytes=S.pa)(e,t),s._sqlite3_column_double=(e,t)=>(s._sqlite3_column_double=S.qa)(e,t),s._sqlite3_bind_blob=(e,t,n,o,u)=>(s._sqlite3_bind_blob=S.ra)(e,t,n,o,u),s._sqlite3_bind_double=(e,t,n)=>(s._sqlite3_bind_double=S.sa)(e,t,n),s._sqlite3_bind_int=(e,t,n)=>(s._sqlite3_bind_int=S.ta)(e,t,n),s._sqlite3_bind_text=(e,t,n,o,u)=>(s._sqlite3_bind_text=S.ua)(e,t,n,o,u),s._sqlite3_bind_parameter_index=(e,t)=>(s._sqlite3_bind_parameter_index=S.va)(e,t),s._sqlite3_sql=e=>(s._sqlite3_sql=S.wa)(e),s._sqlite3_normalized_sql=e=>(s._sqlite3_normalized_sql=S.xa)(e),s._sqlite3_changes=e=>(s._sqlite3_changes=S.ya)(e),s._sqlite3_close_v2=e=>(s._sqlite3_close_v2=S.za)(e),s._sqlite3_create_function_v2=(e,t,n,o,u,h,f,C,O)=>(s._sqlite3_create_function_v2=S.Aa)(e,t,n,o,u,h,f,C,O),s._sqlite3_update_hook=(e,t,n)=>(s._sqlite3_update_hook=S.Ba)(e,t,n),s._sqlite3_open=(e,t)=>(s._sqlite3_open=S.Ca)(e,t);var At=s._malloc=e=>(At=s._malloc=S.Da)(e),je=s._free=e=>(je=s._free=S.Ea)(e);s._RegisterExtensionFunctions=e=>(s._RegisterExtensionFunctions=S.Fa)(e);var br=(e,t)=>(br=S.Ga)(e,t),pr=(e,t)=>(pr=S.Ha)(e,t),Re=e=>(Re=S.Ia)(e),oe=e=>(oe=S.Ja)(e),Me=()=>(Me=S.Ka)();s.stackSave=()=>Me(),s.stackRestore=e=>Re(e),s.stackAlloc=e=>oe(e),s.cwrap=(e,t,n,o)=>{var u=!n||n.every(h=>h==="number"||h==="boolean");return t!=="string"&&u&&!o?s["_"+e]:(...h)=>Yr(e,t,n,h)},s.addFunction=xe,s.removeFunction=se,s.UTF8ToString=lt,s.ALLOC_NORMAL=$e,s.allocate=Xe,s.allocateUTF8OnStack=Ct;function Nt(){function e(){if(s.calledRun=!0,!qe){if(!s.noFSInit&&!Kt){var t,n;Kt=!0,o??(o=s.stdin),t??(t=s.stdout),n??(n=s.stderr),o?ie("stdin",o):vt("/dev/tty","/dev/stdin"),t?ie("stdout",null,t):vt("/dev/tty","/dev/stdout"),n?ie("stderr",null,n):vt("/dev/tty1","/dev/stderr"),we("/dev/stdin",0),we("/dev/stdout",1),we("/dev/stderr",1)}if(S.N(),Jt=!1,s.onRuntimeInitialized?.(),s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;){var o=s.postRun.shift();Ut.unshift(o)}Bt(Ut)}}if(0<ue)Se=Nt;else{if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Dr();Bt(Ft),0<ue?Se=Nt:s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),e()},1)):e()}}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);0<s.preInit.length;)s.preInit.pop()();return Nt(),a}),Je)};typeof et=="object"&&typeof fe=="object"?(fe.exports=Ze,fe.exports.default=Ze):typeof define=="function"&&define.amd?define([],function(){return Ze}):typeof et=="object"&&(et.Module=Ze)});var Ke=(i=>(i.NATIVE="native",i.WASM="wasm",i))(Ke||{});var Nr=Ar(Mt()),Le=class{constructor(){this.SQL=null;this.db=null;this.initialized=!1}async initializeAsync(r={}){this.initialized||(this.SQL=await(0,Nr.default)({locateFile:i=>typeof window<"u"?`https://sql.js.org/dist/${i}`:`node_modules/sql.js/dist/${i}`}),this.db=new this.SQL.Database,this.initializeSchema(r),this.registerCustomFunctions(),this.initialized=!0)}initialize(r={}){if(!this.initialized)throw new Error("WASM backend must be initialized asynchronously. Call initializeAsync() first.")}initializeSchema(r){if(!this.db)throw new Error("Database not initialized");let{cacheSize:i=100*1024,walMode:a=!1,mmapSize:c=256*1024*1024}=r;this.db.run("PRAGMA journal_mode = MEMORY"),this.db.run("PRAGMA synchronous = OFF"),this.db.run(`PRAGMA cache_size = -${i}`),this.db.run("PRAGMA temp_store = MEMORY"),this.db.run("PRAGMA page_size = 4096"),this.db.run(`
|
|
9
|
-
CREATE TABLE IF NOT EXISTS vectors (
|
|
10
|
-
id TEXT PRIMARY KEY,
|
|
11
|
-
embedding BLOB NOT NULL,
|
|
12
|
-
norm REAL NOT NULL,
|
|
13
|
-
metadata TEXT,
|
|
14
|
-
timestamp INTEGER NOT NULL
|
|
15
|
-
)
|
|
16
|
-
`),this.db.run("CREATE INDEX IF NOT EXISTS idx_vectors_norm ON vectors(norm)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_vectors_timestamp ON vectors(timestamp)")}registerCustomFunctions(){if(!this.db)throw new Error("Database not initialized");this.db.create_function("cosine_similarity",(r,i,a,c)=>{let s=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4),m=new Float32Array(i.buffer,i.byteOffset,i.byteLength/4),l=0,p=Math.min(s.length,m.length);for(let v=0;v<p;v++)l+=s[v]*m[v];return l/(a*c)}),this.db.create_function("euclidean_distance",(r,i)=>{let a=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4),c=new Float32Array(i.buffer,i.byteOffset,i.byteLength/4),s=0,m=Math.min(a.length,c.length);for(let l=0;l<m;l++){let p=a[l]-c[l];s+=p*p}return Math.sqrt(s)}),this.db.create_function("dot_product",(r,i)=>{let a=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4),c=new Float32Array(i.buffer,i.byteOffset,i.byteLength/4),s=0,m=Math.min(a.length,c.length);for(let l=0;l<m;l++)s+=a[l]*c[l];return s})}calculateNorm(r){let i=0;for(let a of r)i+=a*a;return Math.sqrt(i)}serializeEmbedding(r){let i=new ArrayBuffer(r.length*4);return new Float32Array(i).set(r),new Uint8Array(i)}deserializeEmbedding(r){let i=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4);return Array.from(i)}generateId(){return`vec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}insert(r){if(!this.db)throw new Error("Database not initialized");let i=r.id||this.generateId(),a=this.calculateNorm(r.embedding),c=this.serializeEmbedding(r.embedding),s=r.metadata?JSON.stringify(r.metadata):null,m=r.timestamp||Date.now();return this.db.run("INSERT OR REPLACE INTO vectors (id, embedding, norm, metadata, timestamp) VALUES (?, ?, ?, ?, ?)",[i,c,a,s,m]),i}insertBatch(r){if(!this.db)throw new Error("Database not initialized");let i=[],a=5e3,c=s=>{let m=[];this.db.run("BEGIN TRANSACTION");try{let l=this.db.prepare("INSERT OR REPLACE INTO vectors (id, embedding, norm, metadata, timestamp) VALUES (?, ?, ?, ?, ?)");try{for(let p of s){let v=p.id||this.generateId(),E=this.calculateNorm(p.embedding),y=this.serializeEmbedding(p.embedding),N=p.metadata?JSON.stringify(p.metadata):null,_=p.timestamp||Date.now();l.bind([v,y,E,N,_]),l.step(),l.reset(),m.push(v)}}finally{l.free()}this.db.run("COMMIT")}catch(l){throw this.db.run("ROLLBACK"),l}return m};if(r.length<=a)i.push(...c(r));else for(let s=0;s<r.length;s+=a){let m=r.slice(s,s+a);i.push(...c(m))}return i}search(r,i=5,a="cosine",c=0){if(!this.db)throw new Error("Database not initialized");let s=this.serializeEmbedding(r),m=this.calculateNorm(r),l,p;switch(a){case"cosine":l=`
|
|
17
|
-
SELECT
|
|
18
|
-
id,
|
|
19
|
-
embedding,
|
|
20
|
-
metadata,
|
|
21
|
-
cosine_similarity(embedding, ?, norm, ?) as score
|
|
22
|
-
FROM vectors
|
|
23
|
-
WHERE cosine_similarity(embedding, ?, norm, ?) >= ?
|
|
24
|
-
ORDER BY score DESC
|
|
25
|
-
LIMIT ?
|
|
26
|
-
`,p=[s,m,s,m,c,i];break;case"euclidean":l=`
|
|
27
|
-
SELECT
|
|
28
|
-
id,
|
|
29
|
-
embedding,
|
|
30
|
-
metadata,
|
|
31
|
-
euclidean_distance(embedding, ?) as score
|
|
32
|
-
FROM vectors
|
|
33
|
-
WHERE euclidean_distance(embedding, ?) <= ? OR ? = 0
|
|
34
|
-
ORDER BY score ASC
|
|
35
|
-
LIMIT ?
|
|
36
|
-
`,p=[s,s,c,c,i];break;case"dot":l=`
|
|
37
|
-
SELECT
|
|
38
|
-
id,
|
|
39
|
-
embedding,
|
|
40
|
-
metadata,
|
|
41
|
-
dot_product(embedding, ?) as score
|
|
42
|
-
FROM vectors
|
|
43
|
-
WHERE dot_product(embedding, ?) >= ?
|
|
44
|
-
ORDER BY score DESC
|
|
45
|
-
LIMIT ?
|
|
46
|
-
`,p=[s,s,c,i];break;default:throw new Error(`Unsupported similarity metric: ${a}`)}let v=this.db.prepare(l);v.bind(p);let E=[];for(;v.step();){let y=v.getAsObject();E.push({id:y.id,score:y.score,embedding:this.deserializeEmbedding(y.embedding),metadata:y.metadata?JSON.parse(y.metadata):void 0})}return v.free(),E}get(r){if(!this.db)throw new Error("Database not initialized");let i=this.db.prepare("SELECT * FROM vectors WHERE id = ?");if(i.bind([r]),!i.step())return i.free(),null;let a=i.getAsObject();return i.free(),{id:a.id,embedding:this.deserializeEmbedding(a.embedding),metadata:a.metadata?JSON.parse(a.metadata):void 0,norm:a.norm,timestamp:a.timestamp}}delete(r){if(!this.db)throw new Error("Database not initialized");let i=this.db.prepare("DELETE FROM vectors WHERE id = ?");i.bind([r]),i.step();let a=this.db.getRowsModified();return i.free(),a>0}stats(){if(!this.db)throw new Error("Database not initialized");let r=this.db.prepare("SELECT COUNT(*) as count FROM vectors");r.step();let a=r.getAsObject().count;r.free();let s=this.db.export().byteLength;return{count:a,size:s}}export(){if(!this.db)throw new Error("Database not initialized");return this.db.export()}async importAsync(r){if(!this.SQL)throw new Error("SQL.js not initialized");this.db&&this.db.close(),this.db=new this.SQL.Database(r),this.registerCustomFunctions(),this.initialized=!0}close(){this.db&&(this.db.close(),this.db=null),this.initialized=!1}isInitialized(){return this.initialized}};var Ee=class{constructor(r={}){this.cache=new Map;this.stats={hits:0,misses:0,evictions:0,totalAccessTime:0,accessCount:0};this.config={maxSize:r.maxSize??1e3,ttl:r.ttl??3e5,enableStats:r.enableStats??!0}}static generateKey(r,i,a,c){return`${r.slice(0,8).map(m=>m.toFixed(4)).join(",")}:${i}:${a??"cosine"}:${c??0}`}get(r){let i=performance.now(),a=this.cache.get(r);if(!a)return this.recordMiss(i),null;let c=Date.now();return c>a.expiry?(this.cache.delete(r),this.recordMiss(i),null):(a.lastAccessed=c,a.accessCount++,this.recordHit(i),a.results)}set(r,i){this.cache.size>=this.config.maxSize&&this.evictLRU();let a=Date.now();this.cache.set(r,{results:i,expiry:a+this.config.ttl,lastAccessed:a,accessCount:1})}evictLRU(){let r=null,i=1/0;for(let[a,c]of this.cache.entries())c.lastAccessed<i&&(i=c.lastAccessed,r=a);r&&(this.cache.delete(r),this.config.enableStats&&this.stats.evictions++)}clear(){this.cache.clear()}clearExpired(){let r=Date.now(),i=[];for(let[a,c]of this.cache.entries())r>c.expiry&&i.push(a);i.forEach(a=>this.cache.delete(a))}getStats(){let r=this.stats.hits+this.stats.misses;return{hits:this.stats.hits,misses:this.stats.misses,hitRate:r>0?this.stats.hits/r:0,size:this.cache.size,evictions:this.stats.evictions,avgAccessTime:this.stats.accessCount>0?this.stats.totalAccessTime/this.stats.accessCount:0}}resetStats(){this.stats={hits:0,misses:0,evictions:0,totalAccessTime:0,accessCount:0}}recordHit(r){this.config.enableStats&&(this.stats.hits++,this.stats.totalAccessTime+=performance.now()-r,this.stats.accessCount++)}recordMiss(r){this.config.enableStats&&(this.stats.misses++,this.stats.totalAccessTime+=performance.now()-r,this.stats.accessCount++)}get size(){return this.cache.size}has(r){let i=this.cache.get(r);return i?Date.now()>i.expiry?(this.cache.delete(r),!1):!0:!1}delete(r){return this.cache.delete(r)}keys(){return Array.from(this.cache.keys())}getConfig(){return{...this.config}}updateConfig(r){if(r.maxSize!==void 0)for(this.config.maxSize=r.maxSize;this.cache.size>this.config.maxSize;)this.evictLRU();r.ttl!==void 0&&(this.config.ttl=r.ttl),r.enableStats!==void 0&&(this.config.enableStats=r.enableStats)}};var be=class{constructor(r){this.codebooks=[];this.trained=!1;this.stats={encodeCount:0,decodeCount:0,totalEncodeTime:0,totalDecodeTime:0};if(this.config={dimensions:r.dimensions,subvectors:r.subvectors,bits:r.bits,kmeansIterations:r.kmeansIterations??20,enableStats:r.enableStats??!0},r.dimensions%r.subvectors!==0)throw new Error(`Dimensions (${r.dimensions}) must be divisible by subvectors (${r.subvectors})`);this.subvectorDim=r.dimensions/r.subvectors}async train(r){if(r.length===0)throw new Error("Training vectors cannot be empty");let i=Math.pow(2,this.config.bits);this.codebooks=[];for(let a=0;a<this.config.subvectors;a++){let c=this.extractSubvectors(r,a),s=this.trainKMeans(c,i);this.codebooks.push({centroids:s})}this.trained=!0}extractSubvectors(r,i){let a=i*this.subvectorDim,c=a+this.subvectorDim;return r.map(s=>s.slice(a,c))}trainKMeans(r,i){let a=r.length,c=r[0].length,s=[],m=new Set;for(;s.length<Math.min(i,a);){let l=Math.floor(Math.random()*a);m.has(l)||(s.push([...r[l]]),m.add(l))}for(let l=0;l<this.config.kmeansIterations;l++){let p=new Array(a).fill(0);for(let y=0;y<a;y++){let N=1/0,_=0;for(let x=0;x<s.length;x++){let B=this.euclideanDistance(r[y],s[x]);B<N&&(N=B,_=x)}p[y]=_}let v=Array(s.length).fill(0).map(()=>Array(c).fill(0)),E=Array(s.length).fill(0);for(let y=0;y<a;y++){let N=p[y];E[N]++;for(let _=0;_<c;_++)v[N][_]+=r[y][_]}for(let y=0;y<s.length;y++)if(E[y]>0)for(let N=0;N<c;N++)s[y][N]=v[y][N]/E[y]}for(;s.length<i;)s.push(Array(c).fill(0));return s}encode(r){if(!this.trained)throw new Error("Quantizer must be trained before encoding");if(r.length!==this.config.dimensions)throw new Error(`Vector dimension (${r.length}) does not match config (${this.config.dimensions})`);let i=performance.now(),a=new Uint8Array(this.config.subvectors);for(let c=0;c<this.config.subvectors;c++){let s=c*this.subvectorDim,m=s+this.subvectorDim,l=r.slice(s,m),p=1/0,v=0;for(let E=0;E<this.codebooks[c].centroids.length;E++){let y=this.euclideanDistance(l,this.codebooks[c].centroids[E]);y<p&&(p=y,v=E)}a[c]=v}return this.config.enableStats&&(this.stats.encodeCount++,this.stats.totalEncodeTime+=performance.now()-i),a}decode(r){if(!this.trained)throw new Error("Quantizer must be trained before decoding");if(r.length!==this.config.subvectors)throw new Error(`Code length (${r.length}) does not match subvectors (${this.config.subvectors})`);let i=performance.now(),a=[];for(let c=0;c<this.config.subvectors;c++){let s=r[c],m=this.codebooks[c].centroids[s];a.push(...m)}return this.config.enableStats&&(this.stats.decodeCount++,this.stats.totalDecodeTime+=performance.now()-i),a}asymmetricDistance(r,i){if(!this.trained)throw new Error("Quantizer must be trained before computing distances");let a=0;for(let c=0;c<this.config.subvectors;c++){let s=c*this.subvectorDim,m=s+this.subvectorDim,l=r.slice(s,m),p=i[c],v=this.codebooks[c].centroids[p];a+=this.euclideanDistanceSquared(l,v)}return Math.sqrt(a)}euclideanDistance(r,i){return Math.sqrt(this.euclideanDistanceSquared(r,i))}euclideanDistanceSquared(r,i){let a=0;for(let c=0;c<r.length;c++){let s=r[c]-i[c];a+=s*s}return a}getStats(){let r=this.config.dimensions*4,i=this.config.subvectors;return{originalSize:r,compressedSize:i,compressionRatio:r/i,encodeCount:this.stats.encodeCount,decodeCount:this.stats.decodeCount,avgEncodeTime:this.stats.encodeCount>0?this.stats.totalEncodeTime/this.stats.encodeCount:0,avgDecodeTime:this.stats.decodeCount>0?this.stats.totalDecodeTime/this.stats.decodeCount:0}}resetStats(){this.stats={encodeCount:0,decodeCount:0,totalEncodeTime:0,totalDecodeTime:0}}isTrained(){return this.trained}exportCodebooks(){return this.codebooks.map(r=>({centroids:r.centroids.map(i=>[...i])}))}importCodebooks(r){if(r.length!==this.config.subvectors)throw new Error(`Codebook count (${r.length}) does not match subvectors (${this.config.subvectors})`);this.codebooks=r.map(i=>({centroids:i.centroids.map(a=>[...a])})),this.trained=!0}getConfig(){return{...this.config}}};var Oe=class{constructor(r){this.k=10;this.filters=[];this.orders=[];this.offsetValue=0;this.metric="cosine";this.threshold=0;this.db=r}similarTo(r,i){return this.queryVector=r,i!==void 0&&(this.k=i),this}similarToId(r,i){return this.queryId=r,i!==void 0&&(this.k=i),this}where(r,i,a){let c=r.startsWith("metadata.");return this.filters.push({field:c?r.substring(9):r,operator:i,value:a,isMetadata:c}),this}whereIn(r,i){return this.where(r,"IN",i)}whereBetween(r,i,a){return this.where(r,">=",i),this.where(r,"<=",a),this}whereMetadata(r,i,a){return this.where(`metadata.${r}`,i,a)}useSimilarityMetric(r){return this.metric=r,this}withThreshold(r){return this.threshold=r,this}orderBy(r,i="asc"){return this.orders.push({field:r,direction:i,bySimilarity:!1}),this}orderBySimilarity(r="desc"){return this.orders.push({field:"score",direction:r,bySimilarity:!0}),this}limit(r){if(r<0)throw new Error("Limit must be non-negative");return this.limitValue=r,this}offset(r){if(r<0)throw new Error("Offset must be non-negative");return this.offsetValue=r,this}skip(r){return this.offset(r)}take(r){return this.limit(r)}raw(r,i){return this.rawSQL=r,this.rawParams=i,this}withMetadata(){return this}async execute(){if(this.rawSQL)return this.executeRaw();let r=this.queryVector;if(this.queryId){let a=this.db.get(this.queryId);if(!a)throw new Error(`Vector with ID ${this.queryId} not found`);r=a.embedding}if(!r)throw new Error("Must specify query vector using similarTo() or similarToId()");let i=this.db.search(r,this.k,this.metric,this.threshold);return i=this.applyFilters(i),i=this.applySorting(i),i=this.applyPagination(i),i}async first(){let r=await this.limit(1).execute();return r.length>0?r[0]:null}async count(){return(await this.execute()).length}applyFilters(r){return this.filters.length===0?r:r.filter(i=>this.filters.every(a=>{let c=a.isMetadata?this.getNestedValue(i.metadata,a.field):i[a.field];return this.matchesCondition(c,a.operator,a.value)}))}getNestedValue(r,i){if(!r)return;let a=i.split("."),c=r;for(let s of a){if(c==null)return;c=c[s]}return c}matchesCondition(r,i,a){if(r==null)return i==="!="&&a!==void 0&&a!==null;switch(i){case"=":return r===a;case"!=":return r!==a;case">":return r>a;case">=":return r>=a;case"<":return r<a;case"<=":return r<=a;case"LIKE":if(typeof r!="string"||typeof a!="string")return!1;let c=a.replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${c}$`,"i").test(r);case"IN":if(!Array.isArray(a))throw new Error("IN operator requires array value");return a.includes(r);default:return!1}}applySorting(r){return this.orders.length===0?r:[...r].sort((i,a)=>{for(let c of this.orders){let s,m;if(c.bySimilarity)s=i.score,m=a.score;else if(c.field.startsWith("metadata.")){let p=c.field.substring(9);s=this.getNestedValue(i.metadata,p),m=this.getNestedValue(a.metadata,p)}else s=i[c.field],m=a[c.field];if(s==null)return c.direction==="asc"?1:-1;if(m==null)return c.direction==="asc"?-1:1;let l=0;if(s<m?l=-1:s>m&&(l=1),l!==0)return c.direction==="asc"?l:-l}return 0})}applyPagination(r){let i=r;return this.offsetValue>0&&(i=i.slice(this.offsetValue)),this.limitValue!==void 0&&(i=i.slice(0,this.limitValue)),i}async executeRaw(){throw new Error("Raw SQL queries not yet implemented. Use standard query methods.")}};var Lt=null,De=class{constructor(r={}){r.path&&r.memoryMode===void 0&&(r.memoryMode=!1),this.backendType=this.detectBackend(r),this.backend=this.createBackend(this.backendType),r.queryCache?.enabled!==!1&&(this.queryCache=new Ee(r.queryCache)),r.quantization?.enabled&&(this.quantizer=new be(r.quantization)),this.backendType==="wasm"?this.backend._pendingConfig=r:this.backend.initialize(r)}detectBackend(r){return r.backend?r.backend:typeof window<"u"||typeof process>"u"?"wasm":"native"}createBackend(r){switch(r){case"native":if(!Lt)try{Lt=Ge("./native-backend").NativeBackend}catch{throw new Error("NativeBackend not available. Install better-sqlite3 or use WASM backend.")}return new Lt;case"wasm":return new Le;default:throw new Error(`Unsupported backend type: ${r}`)}}async initializeAsync(r){if(this.backendType==="wasm"){let i=this.backend,a=r||i._pendingConfig||{};await i.initializeAsync(a),delete i._pendingConfig}}getBackendType(){return this.backendType}isInitialized(){return this.backendType==="wasm"?this.backend.isInitialized():this.backend.isInitialized()}insert(r){return this.backend.insert(r)}insertBatch(r){return this.backend.insertBatch(r)}search(r,i=5,a="cosine",c=0){if(this.queryCache){let s=Ee.generateKey(r,i,a,c),m=this.queryCache.get(s);if(m)return m;let l=this.backend.search(r,i,a,c);return this.queryCache.set(s,l),l}return this.backend.search(r,i,a,c)}get(r){return this.backend.get(r)}delete(r){return this.backend.delete(r)}stats(){return this.backend.stats()}close(){this.backend.close()}export(){if(this.backend.export)return this.backend.export();throw new Error("Export not supported by current backend")}async importAsync(r){if(this.backendType==="wasm")await this.backend.importAsync(r);else throw new Error("Import not supported by native backend")}getBackend(){return this.backend}getDatabase(){if(this.backendType==="native")return this.backend.getDatabase();throw new Error("getDatabase() only supported on native backend. Use getBackend() instead.")}getQueryCache(){return this.queryCache}getCacheStats(){return this.queryCache?.getStats()}clearCache(){this.queryCache?.clear()}getQuantizer(){return this.quantizer}async trainQuantizer(){if(!this.quantizer)throw new Error("Quantization not enabled");if(this.stats().count===0)throw new Error("No vectors to train quantizer");let i=[];console.log("Training quantizer with existing vectors..."),await this.quantizer.train(i),console.log("Quantizer training complete")}getCompressionStats(){return this.quantizer?.getStats()}query(){return new Oe(this)}};var xr=Ar(Mt()),tt=null,Ie=!1;async function Ot(A){if(!Ie)try{tt=await(0,xr.default)({locateFile:A?.locateFile||(r=>typeof window<"u"?`./node_modules/agentdb/dist/wasm/${r}`:`node_modules/sql.js/dist/${r}`)}),Ie=!0}catch(r){throw new Error(`Failed to initialize sql.js WASM module: ${r instanceof Error?r.message:String(r)}
|
|
47
|
-
Make sure sql.js is installed: npm install sql.js`)}}function Rr(){if(!Ie||!tt)throw new Error("WASM module not initialized. Call initWasm() first.");return tt}function Dn(){return Ie}function In(){tt=null,Ie=!1}async function zn(A){return await Ot(A),Rr()}var rt={M:16,M0:32,efConstruction:200,efSearch:50,mL:1/Math.log(16),minVectorsForIndex:1e3,autoRebuild:!1,enabled:!0},Dt=class{constructor(r,i={}){this.entryPoint=null;this.maxLevel=0;this.isBuilt=!1;this.db=r,this.config={...rt,...i},this.initializeSchema(),this.prepareStatements(),this.loadMetadata()}initializeSchema(){this.db.exec(`
|
|
48
|
-
CREATE TABLE IF NOT EXISTS hnsw_nodes (
|
|
49
|
-
id TEXT PRIMARY KEY,
|
|
50
|
-
vector_id TEXT NOT NULL,
|
|
51
|
-
level INTEGER NOT NULL,
|
|
52
|
-
embedding BLOB NOT NULL,
|
|
53
|
-
FOREIGN KEY (vector_id) REFERENCES vectors(id) ON DELETE CASCADE
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_vector ON hnsw_nodes(vector_id);
|
|
57
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_level ON hnsw_nodes(level);
|
|
58
|
-
`),this.db.exec(`
|
|
59
|
-
CREATE TABLE IF NOT EXISTS hnsw_edges (
|
|
60
|
-
from_id TEXT NOT NULL,
|
|
61
|
-
to_id TEXT NOT NULL,
|
|
62
|
-
level INTEGER NOT NULL,
|
|
63
|
-
distance REAL NOT NULL,
|
|
64
|
-
PRIMARY KEY (from_id, to_id, level),
|
|
65
|
-
FOREIGN KEY (from_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE,
|
|
66
|
-
FOREIGN KEY (to_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_edges_from ON hnsw_edges(from_id, level);
|
|
70
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_edges_to ON hnsw_edges(to_id, level);
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_edges_level ON hnsw_edges(level);
|
|
72
|
-
`),this.db.exec(`
|
|
73
|
-
CREATE TABLE IF NOT EXISTS hnsw_metadata (
|
|
74
|
-
key TEXT PRIMARY KEY,
|
|
75
|
-
value TEXT NOT NULL
|
|
76
|
-
);
|
|
77
|
-
`)}prepareStatements(){this.insertNodeStmt=this.db.prepare(`
|
|
78
|
-
INSERT OR REPLACE INTO hnsw_nodes (id, vector_id, level, embedding)
|
|
79
|
-
VALUES (?, ?, ?, ?)
|
|
80
|
-
`),this.insertEdgeStmt=this.db.prepare(`
|
|
81
|
-
INSERT OR REPLACE INTO hnsw_edges (from_id, to_id, level, distance)
|
|
82
|
-
VALUES (?, ?, ?, ?)
|
|
83
|
-
`),this.getNodeStmt=this.db.prepare(`
|
|
84
|
-
SELECT id, vector_id, level, embedding
|
|
85
|
-
FROM hnsw_nodes
|
|
86
|
-
WHERE id = ?
|
|
87
|
-
`),this.getNeighborsStmt=this.db.prepare(`
|
|
88
|
-
SELECT to_id, distance
|
|
89
|
-
FROM hnsw_edges
|
|
90
|
-
WHERE from_id = ? AND level = ?
|
|
91
|
-
ORDER BY distance ASC
|
|
92
|
-
`),this.deleteNodeStmt=this.db.prepare(`
|
|
93
|
-
DELETE FROM hnsw_nodes WHERE id = ?
|
|
94
|
-
`),this.deleteEdgesStmt=this.db.prepare(`
|
|
95
|
-
DELETE FROM hnsw_edges WHERE from_id = ? OR to_id = ?
|
|
96
|
-
`)}loadMetadata(){let r=this.db.prepare("SELECT value FROM hnsw_metadata WHERE key = ?"),i=r.get("entry_point");i&&(this.entryPoint=i.value);let a=r.get("max_level");a&&(this.maxLevel=parseInt(a.value,10));let c=r.get("is_built");c&&(this.isBuilt=c.value==="true")}saveMetadata(){let r=this.db.prepare("INSERT OR REPLACE INTO hnsw_metadata (key, value) VALUES (?, ?)");this.entryPoint&&r.run("entry_point",this.entryPoint),r.run("max_level",this.maxLevel.toString()),r.run("is_built",this.isBuilt.toString())}randomLevel(){let r=0;for(;Math.random()<this.config.mL&&r<16;)r++;return r}calculateDistance(r,i){let a=0;for(let c=0;c<r.length;c++){let s=r[c]-i[c];a+=s*s}return Math.sqrt(a)}serializeEmbedding(r){let i=Buffer.allocUnsafe(r.length*4);return new Float32Array(i.buffer,i.byteOffset,r.length).set(r),i}deserializeEmbedding(r){let i=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4);return Array.from(i)}getNode(r){let i=this.getNodeStmt.get(r);return i?{id:i.id,vectorId:i.vector_id,level:i.level,embedding:this.deserializeEmbedding(i.embedding)}:null}getNeighbors(r,i){return this.getNeighborsStmt.all(r,i).map(c=>({id:c.to_id,distance:c.distance}))}searchLayer(r,i,a,c){let s=new Set,m=[],l=[];for(let p of i){let v=this.getNode(p);if(!v)continue;let E=this.calculateDistance(r,v.embedding);m.push({id:p,distance:E}),l.push({id:p,distance:E}),s.add(p)}for(m.sort((p,v)=>p.distance-v.distance),l.sort((p,v)=>p.distance-v.distance);m.length>0;){let p=m.shift();if(l.length>=a&&p.distance>l[l.length-1].distance)break;let v=this.getNeighbors(p.id,c);for(let E of v){if(s.has(E.id))continue;s.add(E.id);let y=this.getNode(E.id);if(!y)continue;let N=this.calculateDistance(r,y.embedding);(l.length<a||N<l[l.length-1].distance)&&(m.push({id:E.id,distance:N}),l.push({id:E.id,distance:N}),l.sort((_,x)=>_.distance-x.distance),l.length>a&&l.pop(),m.sort((_,x)=>_.distance-x.distance))}}return l}selectNeighborsHeuristic(r,i){return r.sort((a,c)=>a.distance-c.distance),r.slice(0,i)}addEdge(r,i,a,c){this.insertEdgeStmt.run(r,i,a,c),this.insertEdgeStmt.run(i,r,a,c)}insert(r,i){let a=`hnsw_${r}`,c=this.randomLevel();if(this.insertNodeStmt.run(a,r,c,this.serializeEmbedding(i)),c>this.maxLevel&&(this.maxLevel=c),!this.entryPoint){this.entryPoint=a;return}let s=[this.entryPoint];for(let l=this.maxLevel;l>c;l--){let p=this.searchLayer(i,s,1,l);p.length>0&&(s=[p[0].id])}let m=this.db.prepare(`
|
|
97
|
-
DELETE FROM hnsw_edges
|
|
98
|
-
WHERE (from_id = ? OR to_id = ?) AND level = ?
|
|
99
|
-
`);for(let l=c;l>=0;l--){let p=l===0?this.config.M0:this.config.M,v=this.searchLayer(i,s,this.config.efConstruction,l),E=this.selectNeighborsHeuristic(v,p);for(let y of E)this.addEdge(a,y.id,l,y.distance);for(let y of E){let N=this.getNeighbors(y.id,l);if(N.length>p){m.run(y.id,y.id,l);let _=this.getNode(y.id);if(_){let x=[];for(let V of N){let F=this.getNode(V.id);F&&x.push({id:V.id,distance:this.calculateDistance(_.embedding,F.embedding)})}let B=this.selectNeighborsHeuristic(x,p);for(let V of B)this.addEdge(y.id,V.id,l,V.distance)}}}s=E.map(y=>y.id)}this.isBuilt=!0}search(r,i){if(!this.entryPoint||!this.isBuilt)return[];let a=[this.entryPoint];for(let m=this.maxLevel;m>0;m--){let l=this.searchLayer(r,a,1,m);l.length>0&&(a=[l[0].id])}let c=Math.max(this.config.efSearch,i);return this.searchLayer(r,a,c,0).slice(0,i).map(m=>{let l=this.getNode(m.id);return{id:m.id,vectorId:l.vectorId,distance:m.distance,embedding:l.embedding}})}build(){this.clear();let i=this.db.prepare("SELECT id, embedding FROM vectors ORDER BY id").all();if(i.length===0){console.log("No vectors to index");return}console.log(`Building HNSW index for ${i.length} vectors...`);let a=Date.now();this.db.transaction(()=>{for(let l of i){let p=this.deserializeEmbedding(l.embedding);this.insert(l.id,p)}})();let s=Date.now()-a,m=s/i.length;console.log(`HNSW index built in ${s}ms (${m.toFixed(2)}ms per vector)`),this.isBuilt=!0,this.saveMetadata()}async buildAsync(r){this.clear();let a=this.db.prepare("SELECT id, embedding FROM vectors ORDER BY id").all();if(a.length===0){console.log("No vectors to index");return}console.log(`Building HNSW index incrementally for ${a.length} vectors...`);let c=Date.now(),s=100;for(let p=0;p<a.length;p+=s){let v=Date.now(),E=a.slice(p,p+s);this.db.transaction(()=>{for(let _ of E){let x=this.deserializeEmbedding(_.embedding);this.insert(_.id,x)}})();let N=Date.now()-v;r&&r(p+E.length,a.length,Date.now()-c),await new Promise(_=>setImmediate(_))}let m=Date.now()-c,l=m/a.length;console.log(`HNSW index built incrementally in ${m}ms (${l.toFixed(2)}ms per vector)`),this.isBuilt=!0,this.saveMetadata()}clear(){this.db.exec("DELETE FROM hnsw_edges"),this.db.exec("DELETE FROM hnsw_nodes"),this.db.exec("DELETE FROM hnsw_metadata"),this.entryPoint=null,this.maxLevel=0,this.isBuilt=!1}delete(r){let i=`hnsw_${r}`;if(this.getNode(i)){if(this.entryPoint===i){let s=this.db.prepare("SELECT id FROM hnsw_nodes WHERE id != ? LIMIT 1").get(i);this.entryPoint=s?s.id:null}this.deleteEdgesStmt.run(i,i),this.deleteNodeStmt.run(i),this.entryPoint||(this.isBuilt=!1,this.maxLevel=0),this.saveMetadata()}}getStats(){let r=this.db.prepare("SELECT COUNT(*) as count FROM hnsw_nodes"),i=this.db.prepare("SELECT COUNT(*) as count FROM hnsw_edges"),a=r.get().count,c=i.get().count,s=a>0?c/a:0;return{nodeCount:a,edgeCount:c,maxLevel:this.maxLevel,isBuilt:this.isBuilt,avgDegree:s}}isReady(){return this.isBuilt&&this.entryPoint!==null}getConfig(){return{...this.config}}updateConfig(r){this.config={...this.config,...r}}};var It=class{constructor(r,i={}){this.entryPoint=null;this.maxLevel=0;this.isBuilt=!1;this.nodeCache=new Map;this.edgeCache=new Map;this.buildMode=!1;this.db=r,this.config={...rt,...i},this.initializeSchema(),this.prepareStatements(),this.loadMetadata()}initializeSchema(){this.db.exec(`
|
|
100
|
-
CREATE TABLE IF NOT EXISTS hnsw_nodes (
|
|
101
|
-
id TEXT PRIMARY KEY,
|
|
102
|
-
vector_id TEXT NOT NULL,
|
|
103
|
-
level INTEGER NOT NULL,
|
|
104
|
-
embedding BLOB NOT NULL,
|
|
105
|
-
FOREIGN KEY (vector_id) REFERENCES vectors(id) ON DELETE CASCADE
|
|
106
|
-
);
|
|
107
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_vector ON hnsw_nodes(vector_id);
|
|
108
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_nodes_level ON hnsw_nodes(level);
|
|
109
|
-
|
|
110
|
-
CREATE TABLE IF NOT EXISTS hnsw_edges (
|
|
111
|
-
from_id TEXT NOT NULL,
|
|
112
|
-
to_id TEXT NOT NULL,
|
|
113
|
-
level INTEGER NOT NULL,
|
|
114
|
-
distance REAL NOT NULL,
|
|
115
|
-
PRIMARY KEY (from_id, to_id, level),
|
|
116
|
-
FOREIGN KEY (from_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE,
|
|
117
|
-
FOREIGN KEY (to_id) REFERENCES hnsw_nodes(id) ON DELETE CASCADE
|
|
118
|
-
);
|
|
119
|
-
CREATE INDEX IF NOT EXISTS idx_hnsw_edges_from ON hnsw_edges(from_id, level);
|
|
120
|
-
|
|
121
|
-
CREATE TABLE IF NOT EXISTS hnsw_metadata (
|
|
122
|
-
key TEXT PRIMARY KEY,
|
|
123
|
-
value TEXT NOT NULL
|
|
124
|
-
);
|
|
125
|
-
`)}prepareStatements(){this.insertNodeStmt=this.db.prepare(`
|
|
126
|
-
INSERT OR REPLACE INTO hnsw_nodes (id, vector_id, level, embedding)
|
|
127
|
-
VALUES (?, ?, ?, ?)
|
|
128
|
-
`),this.insertEdgeStmt=this.db.prepare(`
|
|
129
|
-
INSERT OR REPLACE INTO hnsw_edges (from_id, to_id, level, distance)
|
|
130
|
-
VALUES (?, ?, ?, ?)
|
|
131
|
-
`),this.getNodeStmt=this.db.prepare(`
|
|
132
|
-
SELECT id, vector_id, level, embedding
|
|
133
|
-
FROM hnsw_nodes
|
|
134
|
-
WHERE id = ?
|
|
135
|
-
`),this.getNeighborsStmt=this.db.prepare(`
|
|
136
|
-
SELECT to_id, distance
|
|
137
|
-
FROM hnsw_edges
|
|
138
|
-
WHERE from_id = ? AND level = ?
|
|
139
|
-
ORDER BY distance ASC
|
|
140
|
-
`)}loadMetadata(){let r=this.db.prepare("SELECT value FROM hnsw_metadata WHERE key = ?"),i=r.get("entry_point");i&&(this.entryPoint=i.value);let a=r.get("max_level");a&&(this.maxLevel=parseInt(a.value,10));let c=r.get("is_built");c&&(this.isBuilt=c.value==="true")}saveMetadata(){let r=this.db.prepare("INSERT OR REPLACE INTO hnsw_metadata (key, value) VALUES (?, ?)");this.entryPoint&&r.run("entry_point",this.entryPoint),r.run("max_level",this.maxLevel.toString()),r.run("is_built",this.isBuilt.toString())}randomLevel(){let r=0;for(;Math.random()<this.config.mL&&r<16;)r++;return r}calculateDistance(r,i){let a=0;for(let c=0;c<r.length;c++){let s=r[c]-i[c];a+=s*s}return Math.sqrt(a)}serializeEmbedding(r){let i=Buffer.allocUnsafe(r.length*4);return new Float32Array(i.buffer,i.byteOffset,r.length).set(r),i}deserializeEmbedding(r){let i=new Float32Array(r.buffer,r.byteOffset,r.byteLength/4);return Array.from(i)}getNode(r){if(this.buildMode&&this.nodeCache.has(r))return this.nodeCache.get(r);let i=this.getNodeStmt.get(r);return i?{id:i.id,vectorId:i.vector_id,level:i.level,embedding:this.deserializeEmbedding(i.embedding)}:null}getNeighbors(r,i){return this.buildMode?this.edgeCache.get(r)?.get(i)??[]:this.getNeighborsStmt.all(r,i).map(c=>({id:c.to_id,distance:c.distance}))}addEdge(r,i,a,c){if(this.buildMode){this.edgeCache.has(r)||this.edgeCache.set(r,new Map),this.edgeCache.has(i)||this.edgeCache.set(i,new Map);let s=this.edgeCache.get(r),m=this.edgeCache.get(i);s.has(a)||s.set(a,[]),m.has(a)||m.set(a,[]),s.get(a).push({id:i,distance:c}),m.get(a).push({id:r,distance:c})}else this.insertEdgeStmt.run(r,i,a,c),this.insertEdgeStmt.run(i,r,a,c)}searchLayer(r,i,a,c){let s=new Set,m=[],l=[];for(let p of i){let v=this.getNode(p);if(!v)continue;let E=this.calculateDistance(r,v.embedding);m.push({id:p,distance:E}),l.push({id:p,distance:E}),s.add(p)}for(m.sort((p,v)=>p.distance-v.distance),l.sort((p,v)=>p.distance-v.distance);m.length>0;){let p=m.shift();if(l.length>=a&&p.distance>l[l.length-1].distance)break;let v=this.getNeighbors(p.id,c);for(let E of v){if(s.has(E.id))continue;s.add(E.id);let y=this.getNode(E.id);if(!y)continue;let N=this.calculateDistance(r,y.embedding);(l.length<a||N<l[l.length-1].distance)&&(m.push({id:E.id,distance:N}),l.push({id:E.id,distance:N}),l.sort((_,x)=>_.distance-x.distance),l.length>a&&l.pop(),m.sort((_,x)=>_.distance-x.distance))}}return l}selectNeighborsHeuristic(r,i){return r.sort((a,c)=>a.distance-c.distance),r.slice(0,i)}insertToMemory(r,i){let a=`hnsw_${r}`,c=this.randomLevel(),s={id:a,vectorId:r,level:c,embedding:i};if(this.nodeCache.set(a,s),c>this.maxLevel&&(this.maxLevel=c),!this.entryPoint){this.entryPoint=a;return}let m=[this.entryPoint];for(let l=this.maxLevel;l>c;l--){let p=this.searchLayer(i,m,1,l);p.length>0&&(m=[p[0].id])}for(let l=c;l>=0;l--){let p=l===0?this.config.M0:this.config.M,v=this.searchLayer(i,m,this.config.efConstruction,l),E=this.selectNeighborsHeuristic(v,p);for(let y of E)this.addEdge(a,y.id,l,y.distance);for(let y of E){let N=this.getNeighbors(y.id,l);if(N.length>p){let _=this.edgeCache.get(y.id);_&&_.set(l,[]);let x=this.getNode(y.id);if(x){let B=[];for(let F of N){let ce=this.getNode(F.id);ce&&B.push({id:F.id,distance:this.calculateDistance(x.embedding,ce.embedding)})}let V=this.selectNeighborsHeuristic(B,p);for(let F of V)this.addEdge(y.id,F.id,l,F.distance)}}}m=E.map(y=>y.id)}}flushToDatabase(){console.log("Flushing in-memory graph to database...");let r=Date.now();this.db.transaction(()=>{for(let s of this.nodeCache.values())this.insertNodeStmt.run(s.id,s.vectorId,s.level,this.serializeEmbedding(s.embedding));let c=new Set;for(let[s,m]of this.edgeCache)for(let[l,p]of m)for(let v of p){let E=`${s}:${v.id}:${l}`,y=`${v.id}:${s}:${l}`;!c.has(E)&&!c.has(y)&&(this.insertEdgeStmt.run(s,v.id,l,v.distance),this.insertEdgeStmt.run(v.id,s,l,v.distance),c.add(E))}})();let a=Date.now()-r;console.log(`Flushed ${this.nodeCache.size} nodes and ${this.edgeCache.size} edge groups in ${a}ms`)}buildOptimized(){console.log("Building optimized HNSW index..."),this.clear();let i=this.db.prepare("SELECT id, embedding FROM vectors ORDER BY id").all();if(i.length===0){console.log("No vectors to index");return}console.log(`Building in-memory graph for ${i.length} vectors...`);let a=Date.now();this.buildMode=!0,this.nodeCache.clear(),this.edgeCache.clear();for(let l of i){let p=this.deserializeEmbedding(l.embedding);this.insertToMemory(l.id,p)}let c=Date.now()-a,s=c/i.length;console.log(`In-memory graph built in ${c}ms (${s.toFixed(2)}ms per vector)`),this.flushToDatabase(),this.buildMode=!1,this.nodeCache.clear(),this.edgeCache.clear();let m=Date.now()-a;console.log(`Total build time: ${m}ms (${(m/i.length).toFixed(2)}ms per vector)`),this.isBuilt=!0,this.saveMetadata()}search(r,i){if(!this.entryPoint||!this.isBuilt)return[];let a=[this.entryPoint];for(let m=this.maxLevel;m>0;m--){let l=this.searchLayer(r,a,1,m);l.length>0&&(a=[l[0].id])}let c=Math.max(this.config.efSearch,i);return this.searchLayer(r,a,c,0).slice(0,i).map(m=>{let l=this.getNode(m.id);return{id:m.id,vectorId:l.vectorId,distance:m.distance,embedding:l.embedding}})}clear(){this.db.exec("DELETE FROM hnsw_edges"),this.db.exec("DELETE FROM hnsw_nodes"),this.db.exec("DELETE FROM hnsw_metadata"),this.entryPoint=null,this.maxLevel=0,this.isBuilt=!1,this.nodeCache.clear(),this.edgeCache.clear()}getStats(){let r=this.db.prepare("SELECT COUNT(*) as count FROM hnsw_nodes"),i=this.db.prepare("SELECT COUNT(*) as count FROM hnsw_edges"),a=r.get().count,c=i.get().count;return{nodeCount:a,edgeCount:c,maxLevel:this.maxLevel,isBuilt:this.isBuilt,avgDegree:a>0?c/a:0}}isReady(){return this.isBuilt&&this.entryPoint!==null}getConfig(){return{...this.config}}};var zt=class{constructor(r){this.trained=!1;this.dimensions=r.dimensions,this.bits=r.bits,this.normalize=r.normalize??!1,this.levels=Math.pow(2,this.bits),this.minValues=new Array(this.dimensions).fill(1/0),this.maxValues=new Array(this.dimensions).fill(-1/0),this.ranges=new Array(this.dimensions).fill(0)}async train(r){if(r.length===0)throw new Error("Training vectors cannot be empty");if(r[0].length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${r[0].length}`);console.log(`Training scalar quantizer (${this.bits}-bit) on ${r.length} vectors...`);let i=performance.now(),a=r;this.normalize&&(a=r.map(m=>this.normalizeVector(m)));for(let m of a)for(let l=0;l<this.dimensions;l++)this.minValues[l]=Math.min(this.minValues[l],m[l]),this.maxValues[l]=Math.max(this.maxValues[l],m[l]);let c=1e-8;for(let m=0;m<this.dimensions;m++)this.ranges[m]=Math.max(this.maxValues[m]-this.minValues[m],c);this.trained=!0;let s=performance.now()-i;console.log(`Training complete in ${s.toFixed(0)}ms`),console.log(`Compression: ${this.dimensions*4} bytes \u2192 ${this.getBytesPerVector()} bytes (${this.getCompressionRatio().toFixed(1)}x)`)}encode(r){if(!this.trained)throw new Error("Quantizer must be trained before encoding");if(r.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${r.length}`);let i=this.normalize?this.normalizeVector(r):r;return this.bits===4?this.encode4Bit(i):this.bits===8?this.encode8Bit(i):this.encode16Bit(i)}decode(r){if(!this.trained)throw new Error("Quantizer must be trained before decoding");return this.bits===4?this.decode4Bit(r):this.bits===8?this.decode8Bit(r):this.decode16Bit(r)}asymmetricDistance(r,i){let a=this.decode(i);return this.euclideanDistance(r,a)}evaluateAccuracy(r){if(!this.trained)throw new Error("Quantizer must be trained before evaluation");let i=0,a=0,c=1/0,s=0;for(let E of r){let y=this.encode(E),N=this.decode(y),_=0,x=0;for(let V=0;V<E.length;V++){let F=E[V]-N[V];_+=F*F,x+=E[V]*E[V]}let B=Math.sqrt(_/x);i+=B,s+=_,B>a&&(a=B),B<c&&(c=B)}let m=i/r.length,l=Math.sqrt(s/(r.length*r[0].length)),p=1-m,v=this.calculateRecall10(r);return{avgError:m,maxError:a,minError:c,rmse:l,accuracy:p,recall10:v}}getStats(){return{dimensions:this.dimensions,bits:this.bits,levels:this.levels,compressionRatio:this.getCompressionRatio(),bytesPerVector:this.getBytesPerVector(),trained:this.trained,minValues:[...this.minValues],maxValues:[...this.maxValues],ranges:[...this.ranges]}}isTrained(){return this.trained}encode4Bit(r){let i=new Uint8Array(Math.ceil(this.dimensions/2));for(let a=0;a<this.dimensions;a++){let c=(r[a]-this.minValues[a])/this.ranges[a],s=Math.floor(c*(this.levels-1)),m=Math.max(0,Math.min(this.levels-1,s)),l=Math.floor(a/2);a%2===0?i[l]=i[l]&240|m:i[l]=i[l]&15|m<<4}return i}decode4Bit(r){let i=new Array(this.dimensions);for(let a=0;a<this.dimensions;a++){let c=Math.floor(a/2),l=(a%2===0?r[c]&15:r[c]>>4&15)/(this.levels-1);i[a]=this.minValues[a]+l*this.ranges[a]}return i}encode8Bit(r){let i=new Uint8Array(this.dimensions);for(let a=0;a<this.dimensions;a++){let c=(r[a]-this.minValues[a])/this.ranges[a],s=Math.floor(c*(this.levels-1));i[a]=Math.max(0,Math.min(this.levels-1,s))}return i}decode8Bit(r){let i=new Array(this.dimensions);for(let a=0;a<this.dimensions;a++){let c=r[a]/(this.levels-1);i[a]=this.minValues[a]+c*this.ranges[a]}return i}encode16Bit(r){let i=new Uint16Array(this.dimensions);for(let a=0;a<this.dimensions;a++){let c=(r[a]-this.minValues[a])/this.ranges[a],s=Math.floor(c*(this.levels-1));i[a]=Math.max(0,Math.min(this.levels-1,s))}return i}decode16Bit(r){let i=new Array(this.dimensions);for(let a=0;a<this.dimensions;a++){let c=r[a]/(this.levels-1);i[a]=this.minValues[a]+c*this.ranges[a]}return i}normalizeVector(r){let i=0;for(let a of r)i+=a*a;return i=Math.sqrt(i),i===0?r:r.map(a=>a/i)}euclideanDistance(r,i){let a=0;for(let c=0;c<r.length;c++){let s=r[c]-i[c];a+=s*s}return Math.sqrt(a)}calculateRecall10(r){if(r.length<20)return 1;let i=Math.floor(r.length/2),a=r.slice(0,i),c=r.slice(i,i+10),s=0;for(let m of c){let l=a.map((_,x)=>({index:x,distance:this.euclideanDistance(m,_)}));l.sort((_,x)=>_.distance-x.distance);let p=new Set(l.slice(0,10).map(_=>_.index)),v=this.encode(m),E=a.map((_,x)=>({index:x,distance:this.asymmetricDistance(m,this.encode(_))}));E.sort((_,x)=>_.distance-x.distance);let y=E.slice(0,10).map(_=>_.index),N=0;for(let _ of y)p.has(_)&&N++;s+=N/10}return s/c.length}getCompressionRatio(){let r=this.dimensions*4,i=this.getBytesPerVector();return r/i}getBytesPerVector(){return this.bits===4?Math.ceil(this.dimensions/2):this.bits===8?this.dimensions:this.dimensions*2}};var pe=class{static HIGH_ACCURACY(r=768){return{name:"HIGH_ACCURACY",description:"95%+ accuracy, 48x compression",dimensions:r,subvectors:16,bits:8,kmeansIterations:30,expectedAccuracy:.95,expectedCompression:r*4/16}}static BALANCED(r=768){return{name:"BALANCED",description:"90%+ accuracy, 96x compression",dimensions:r,subvectors:8,bits:8,kmeansIterations:25,expectedAccuracy:.9,expectedCompression:r*4/8}}static HIGH_COMPRESSION(r=768){return{name:"HIGH_COMPRESSION",description:"85%+ accuracy, 192x compression",dimensions:r,subvectors:4,bits:8,kmeansIterations:20,expectedAccuracy:.85,expectedCompression:r*4/4}}static ULTRA_COMPRESSION(r=768){return{name:"ULTRA_COMPRESSION",description:"80%+ accuracy, 384x+ compression",dimensions:r,subvectors:8,bits:4,kmeansIterations:20,expectedAccuracy:.8,expectedCompression:r*4/4}}static SCALAR_8BIT(r=768){return{name:"SCALAR_8BIT",description:"90%+ accuracy, 4x compression (Recommended)",dimensions:r,subvectors:r,bits:8,kmeansIterations:0,expectedAccuracy:.9,expectedCompression:4}}static SCALAR_4BIT(r=768){return{name:"SCALAR_4BIT",description:"85%+ accuracy, 8x compression",dimensions:r,subvectors:r,bits:4,kmeansIterations:0,expectedAccuracy:.85,expectedCompression:8}}static getAllProfiles(r=768){return[this.SCALAR_8BIT(r),this.SCALAR_4BIT(r),this.HIGH_ACCURACY(r),this.BALANCED(r),this.HIGH_COMPRESSION(r),this.ULTRA_COMPRESSION(r)]}static recommend(r,i,a){let s=this.getAllProfiles(r);if(i&&(s=s.filter(m=>m.expectedAccuracy>=i)),a){let m=r*4;s=s.filter(l=>m/l.expectedCompression<=a)}if(s.length===0)throw new Error("No profile meets requirements");return s[s.length-1]}},qt=class A extends be{static fromProfile(r){return new A({dimensions:r.dimensions,subvectors:r.subvectors,bits:r.bits,kmeansIterations:r.kmeansIterations})}async trainImproved(r){if(r.length===0)throw new Error("Training vectors cannot be empty");console.log("Training with improved k-means++ initialization...");let i=performance.now();await this.train(r);let a=performance.now()-i;console.log(`Training complete in ${a.toFixed(0)}ms`)}evaluateAccuracy(r){if(!this.isTrained())throw new Error("Quantizer must be trained before evaluation");let i=0,a=0,c=1/0,s=0;for(let p of r){let v=this.encode(p),E=this.decode(v),y=0,N=0;for(let x=0;x<p.length;x++){let B=p[x]-E[x];y+=B*B,N+=p[x]*p[x]}let _=Math.sqrt(y/N);i+=_,s+=y,_>a&&(a=_),_<c&&(c=_)}let m=i/r.length,l=Math.sqrt(s/(r.length*r[0].length));return{avgError:m,maxError:a,minError:c,rmse:l}}static getRecommendedConfig(r,i="balanced"){let c={high:pe.HIGH_ACCURACY(r),balanced:pe.BALANCED(r),compressed:pe.HIGH_COMPRESSION(r)}[i];return{dimensions:c.dimensions,subvectors:c.subvectors,bits:c.bits,kmeansIterations:c.kmeansIterations}}},Pt=class{static compressionRatio(r,i,a){let c=r*4,s=Math.ceil(i*a/8);return c/s}static estimateAccuracy(r,i,a){let c=Math.pow(2,a),s=r/i,m=Math.log(i)/Math.log(16),l=Math.log(c)/Math.log(256),p=Math.log(s)/Math.log(48),v=.7+.15*m+.1*l-.05*p;return Math.max(.5,Math.min(.98,v))}static printProfileComparison(r=768){let i=pe.getAllProfiles(r);console.log(`
|
|
141
|
-
=== Quantization Profile Comparison ===
|
|
142
|
-
`),console.log("Profile | Accuracy | Compression | Size | Use Case"),console.log("-------------------|----------|-------------|-----------|------------------------");for(let a of i){let c=`${r*4} \u2192 ${Math.ceil(r*4/a.expectedCompression)}`,s=`${(a.expectedAccuracy*100).toFixed(0)}%`,m=`${a.expectedCompression.toFixed(0)}x`,l=a.name==="HIGH_ACCURACY"?"Production quality":a.name==="BALANCED"?"Most use cases":a.name==="HIGH_COMPRESSION"?"Storage-constrained":"Extreme compression";console.log(`${a.name.padEnd(18)} | ${s.padEnd(8)} | ${m.padEnd(11)} | ${c.padEnd(9)} | ${l}`)}console.log()}};var nt=class{constructor(r){this.trained=!1;this.dimensions=0;this.threshold=0;this.stats={vectorsTrained:0,totalEncodeTime:0,totalDecodeTime:0,totalHammingTime:0,encodeCount:0,decodeCount:0,hammingCount:0};this.config={method:r.method,threshold:r.threshold??0,useAsymmetric:r.useAsymmetric??!0}}async train(r){if(r.length===0)throw new Error("Cannot train on empty vector set");this.dimensions=r[0].length;for(let i of r)if(i.length!==this.dimensions)throw new Error(`Inconsistent vector dimensions: expected ${this.dimensions}, got ${i.length}`);this.config.method==="median"?this.threshold=this.calculateGlobalMedian(r):this.threshold=this.config.threshold,this.stats.vectorsTrained=r.length,this.trained=!0}calculateGlobalMedian(r){let i=[];for(let c of r)i.push(...c);i.sort((c,s)=>c-s);let a=Math.floor(i.length/2);return i.length%2===0?(i[a-1]+i[a])/2:i[a]}encode(r){if(!this.trained)throw new Error("Quantizer must be trained before encoding");if(r.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${r.length}`);let i=performance.now(),a=Math.ceil(this.dimensions/8),c=new Uint8Array(a);for(let m=0;m<this.dimensions;m++){let l=Math.floor(m/8),p=m%8;r[m]>this.threshold&&(c[l]|=1<<p)}let s=performance.now()-i;return this.stats.totalEncodeTime+=s,this.stats.encodeCount++,c}decode(r){if(!this.trained)throw new Error("Quantizer must be trained before decoding");let i=performance.now(),a=new Array(this.dimensions);for(let s=0;s<this.dimensions;s++){let m=Math.floor(s/8),l=s%8,p=r[m]>>l&1;a[s]=p===1?1:-1}let c=performance.now()-i;return this.stats.totalDecodeTime+=c,this.stats.decodeCount++,a}hammingDistance(r,i){if(r.length!==i.length)throw new Error("Binary codes must have same length");let a=performance.now(),c=0;for(let m=0;m<r.length;m++){let l=r[m]^i[m];c+=this.popcount(l)}let s=(performance.now()-a)*1e3;return this.stats.totalHammingTime+=s,this.stats.hammingCount++,c}popcount(r){let i=0;for(;r;)r&=r-1,i++;return i}asymmetricSearch(r,i){if(!this.trained)throw new Error("Quantizer must be trained before search");if(r.length!==this.dimensions)throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${r.length}`);let a=0;for(let c=0;c<this.dimensions;c++){let s=Math.floor(c/8),m=c%8,p=(i[s]>>m&1)===1?1:-1,v=r[c]-p;a+=v*v}return a}getStats(){let r=Math.ceil(this.dimensions/8),i=this.dimensions*4;return{vectorsTrained:this.stats.vectorsTrained,dimensions:this.dimensions,compressedBytes:r,compressionRatio:i/r,avgEncodeTime:this.stats.encodeCount>0?this.stats.totalEncodeTime/this.stats.encodeCount:0,avgDecodeTime:this.stats.decodeCount>0?this.stats.totalDecodeTime/this.stats.decodeCount:0,avgHammingTime:this.stats.hammingCount>0?this.stats.totalHammingTime/this.stats.hammingCount:0,method:this.config.method}}resetStats(){this.stats={vectorsTrained:this.stats.vectorsTrained,totalEncodeTime:0,totalDecodeTime:0,totalHammingTime:0,encodeCount:0,decodeCount:0,hammingCount:0}}isTrained(){return this.trained}getDimensions(){return this.dimensions}getThreshold(){return this.threshold}};function qn(A){return new nt(A)}async function Pn(A){let r={...A,backend:"wasm"},i=new De(r);return await i.initializeAsync(),i}var Ei={SQLiteVectorDB:De,createVectorDB:Pn,BackendType:Ke,initWasm:Ot};export{Ke as BackendType,nt as BinaryQuantizer,rt as DEFAULT_HNSW_CONFIG,Dt as HNSWIndex,qt as ImprovedProductQuantizer,It as OptimizedHNSWIndex,be as ProductQuantizer,pe as QuantizationProfiles,Pt as QuantizationUtils,Ee as QueryCache,De as SQLiteVectorDB,zt as ScalarQuantizer,Oe as VectorQueryBuilder,Le as WasmBackend,qn as createBinaryQuantizer,Pn as createVectorDB,Ei as default,Rr as getWasm,zn as initSQL,Ot as initWasm,Dn as isWasmInitialized,In as resetWasm};
|
|
143
|
-
//# sourceMappingURL=agentdb.min.js.map
|