@noyrax/5d-database-plugin 0.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/ADR_VORSCHLAEGE.md +247 -0
- package/CHROMADB_SETUP.md +69 -0
- package/IMPROVEMENT_ROADMAP.md +435 -0
- package/INSTALLATION_READINESS.md +150 -0
- package/KNOWN_ISSUES.md +210 -0
- package/LICENSE +21 -0
- package/MCP_SERVER_SETUP.md +359 -0
- package/MCP_SERVER_TEST_REPORT.md +206 -0
- package/NOYRAX_INTEGRATION.md +224 -0
- package/QUICK_START.md +316 -0
- package/README.md +240 -0
- package/SETUP_NEW_PROJECT.md +260 -0
- package/SYSTEM_ANALYSIS_REPORT.md +341 -0
- package/out/api/adr-api.d.ts +22 -0
- package/out/api/adr-api.d.ts.map +1 -0
- package/out/api/adr-api.js +38 -0
- package/out/api/adr-api.js.map +1 -0
- package/out/api/bootstrap-api.d.ts +43 -0
- package/out/api/bootstrap-api.d.ts.map +1 -0
- package/out/api/bootstrap-api.js +88 -0
- package/out/api/bootstrap-api.js.map +1 -0
- package/out/api/change-api.d.ts +30 -0
- package/out/api/change-api.d.ts.map +1 -0
- package/out/api/change-api.js +54 -0
- package/out/api/change-api.js.map +1 -0
- package/out/api/context-builder.d.ts +81 -0
- package/out/api/context-builder.d.ts.map +1 -0
- package/out/api/context-builder.js +288 -0
- package/out/api/context-builder.js.map +1 -0
- package/out/api/cross-dimension-api.d.ts +43 -0
- package/out/api/cross-dimension-api.d.ts.map +1 -0
- package/out/api/cross-dimension-api.js +55 -0
- package/out/api/cross-dimension-api.js.map +1 -0
- package/out/api/dependency-api.d.ts +26 -0
- package/out/api/dependency-api.d.ts.map +1 -0
- package/out/api/dependency-api.js +46 -0
- package/out/api/dependency-api.js.map +1 -0
- package/out/api/learning-path-api.d.ts +49 -0
- package/out/api/learning-path-api.d.ts.map +1 -0
- package/out/api/learning-path-api.js +174 -0
- package/out/api/learning-path-api.js.map +1 -0
- package/out/api/module-api.d.ts +26 -0
- package/out/api/module-api.d.ts.map +1 -0
- package/out/api/module-api.js +46 -0
- package/out/api/module-api.js.map +1 -0
- package/out/api/search-api.d.ts +64 -0
- package/out/api/search-api.d.ts.map +1 -0
- package/out/api/search-api.js +235 -0
- package/out/api/search-api.js.map +1 -0
- package/out/api/self-explanation-api.d.ts +71 -0
- package/out/api/self-explanation-api.d.ts.map +1 -0
- package/out/api/self-explanation-api.js +153 -0
- package/out/api/self-explanation-api.js.map +1 -0
- package/out/api/semantic-search-api.d.ts +64 -0
- package/out/api/semantic-search-api.d.ts.map +1 -0
- package/out/api/semantic-search-api.js +205 -0
- package/out/api/semantic-search-api.js.map +1 -0
- package/out/api/symbol-api.d.ts +22 -0
- package/out/api/symbol-api.d.ts.map +1 -0
- package/out/api/symbol-api.js +38 -0
- package/out/api/symbol-api.js.map +1 -0
- package/out/api/vector-api.d.ts +26 -0
- package/out/api/vector-api.d.ts.map +1 -0
- package/out/api/vector-api.js +49 -0
- package/out/api/vector-api.js.map +1 -0
- package/out/cli/embedding-cli.d.ts +3 -0
- package/out/cli/embedding-cli.d.ts.map +1 -0
- package/out/cli/embedding-cli.js +151 -0
- package/out/cli/embedding-cli.js.map +1 -0
- package/out/cli/ingest-cli.d.ts +3 -0
- package/out/cli/ingest-cli.d.ts.map +1 -0
- package/out/cli/ingest-cli.js +145 -0
- package/out/cli/ingest-cli.js.map +1 -0
- package/out/cli/mcp-server-cli.d.ts +3 -0
- package/out/cli/mcp-server-cli.d.ts.map +1 -0
- package/out/cli/mcp-server-cli.js +159 -0
- package/out/cli/mcp-server-cli.js.map +1 -0
- package/out/cli/query-cli.d.ts +3 -0
- package/out/cli/query-cli.d.ts.map +1 -0
- package/out/cli/query-cli.js +217 -0
- package/out/cli/query-cli.js.map +1 -0
- package/out/cli/semantic-search-cli.d.ts +3 -0
- package/out/cli/semantic-search-cli.d.ts.map +1 -0
- package/out/cli/semantic-search-cli.js +196 -0
- package/out/cli/semantic-search-cli.js.map +1 -0
- package/out/cli/test-chromadb.d.ts +3 -0
- package/out/cli/test-chromadb.d.ts.map +1 -0
- package/out/cli/test-chromadb.js +204 -0
- package/out/cli/test-chromadb.js.map +1 -0
- package/out/cli/test-v-dimension.d.ts +3 -0
- package/out/cli/test-v-dimension.d.ts.map +1 -0
- package/out/cli/test-v-dimension.js +330 -0
- package/out/cli/test-v-dimension.js.map +1 -0
- package/out/cli/tool-cli.d.ts +3 -0
- package/out/cli/tool-cli.d.ts.map +1 -0
- package/out/cli/tool-cli.js +237 -0
- package/out/cli/tool-cli.js.map +1 -0
- package/out/cli/verify-openai-key.d.ts +3 -0
- package/out/cli/verify-openai-key.d.ts.map +1 -0
- package/out/cli/verify-openai-key.js +141 -0
- package/out/cli/verify-openai-key.js.map +1 -0
- package/out/cli/verify-vss-status.d.ts +3 -0
- package/out/cli/verify-vss-status.d.ts.map +1 -0
- package/out/cli/verify-vss-status.js +185 -0
- package/out/cli/verify-vss-status.js.map +1 -0
- package/out/core/chromadb-vector-database.d.ts +52 -0
- package/out/core/chromadb-vector-database.d.ts.map +1 -0
- package/out/core/chromadb-vector-database.js +276 -0
- package/out/core/chromadb-vector-database.js.map +1 -0
- package/out/core/docs-path-resolver.d.ts +43 -0
- package/out/core/docs-path-resolver.d.ts.map +1 -0
- package/out/core/docs-path-resolver.js +137 -0
- package/out/core/docs-path-resolver.js.map +1 -0
- package/out/core/id-mapper.d.ts +68 -0
- package/out/core/id-mapper.d.ts.map +1 -0
- package/out/core/id-mapper.js +132 -0
- package/out/core/id-mapper.js.map +1 -0
- package/out/core/migration-manager.d.ts +75 -0
- package/out/core/migration-manager.d.ts.map +1 -0
- package/out/core/migration-manager.js +212 -0
- package/out/core/migration-manager.js.map +1 -0
- package/out/core/multi-db-manager.d.ts +84 -0
- package/out/core/multi-db-manager.d.ts.map +1 -0
- package/out/core/multi-db-manager.js +206 -0
- package/out/core/multi-db-manager.js.map +1 -0
- package/out/core/transaction-manager.d.ts +69 -0
- package/out/core/transaction-manager.d.ts.map +1 -0
- package/out/core/transaction-manager.js +138 -0
- package/out/core/transaction-manager.js.map +1 -0
- package/out/core/vector-database-factory.d.ts +25 -0
- package/out/core/vector-database-factory.d.ts.map +1 -0
- package/out/core/vector-database-factory.js +82 -0
- package/out/core/vector-database-factory.js.map +1 -0
- package/out/core/vector-database-interface.d.ts +50 -0
- package/out/core/vector-database-interface.d.ts.map +1 -0
- package/out/core/vector-database-interface.js +3 -0
- package/out/core/vector-database-interface.js.map +1 -0
- package/out/core/vss-loader.d.ts +29 -0
- package/out/core/vss-loader.d.ts.map +1 -0
- package/out/core/vss-loader.js +150 -0
- package/out/core/vss-loader.js.map +1 -0
- package/out/core/vss-manager.d.ts +81 -0
- package/out/core/vss-manager.d.ts.map +1 -0
- package/out/core/vss-manager.js +323 -0
- package/out/core/vss-manager.js.map +1 -0
- package/out/core/vss-vector-database.d.ts +71 -0
- package/out/core/vss-vector-database.d.ts.map +1 -0
- package/out/core/vss-vector-database.js +284 -0
- package/out/core/vss-vector-database.js.map +1 -0
- package/out/embedding/embedding-generator.d.ts +45 -0
- package/out/embedding/embedding-generator.d.ts.map +1 -0
- package/out/embedding/embedding-generator.js +143 -0
- package/out/embedding/embedding-generator.js.map +1 -0
- package/out/embedding/embedding-pipeline.d.ts +42 -0
- package/out/embedding/embedding-pipeline.d.ts.map +1 -0
- package/out/embedding/embedding-pipeline.js +290 -0
- package/out/embedding/embedding-pipeline.js.map +1 -0
- package/out/extension.d.ts +10 -0
- package/out/extension.d.ts.map +1 -0
- package/out/extension.js +164 -0
- package/out/extension.js.map +1 -0
- package/out/ingestors/adr-ingestor.d.ts +41 -0
- package/out/ingestors/adr-ingestor.d.ts.map +1 -0
- package/out/ingestors/adr-ingestor.js +329 -0
- package/out/ingestors/adr-ingestor.js.map +1 -0
- package/out/ingestors/base-ingestor.d.ts +30 -0
- package/out/ingestors/base-ingestor.d.ts.map +1 -0
- package/out/ingestors/base-ingestor.js +3 -0
- package/out/ingestors/base-ingestor.js.map +1 -0
- package/out/ingestors/change-ingestor.d.ts +36 -0
- package/out/ingestors/change-ingestor.d.ts.map +1 -0
- package/out/ingestors/change-ingestor.js +216 -0
- package/out/ingestors/change-ingestor.js.map +1 -0
- package/out/ingestors/dependency-ingestor.d.ts +32 -0
- package/out/ingestors/dependency-ingestor.d.ts.map +1 -0
- package/out/ingestors/dependency-ingestor.js +194 -0
- package/out/ingestors/dependency-ingestor.js.map +1 -0
- package/out/ingestors/module-ingestor.d.ts +27 -0
- package/out/ingestors/module-ingestor.d.ts.map +1 -0
- package/out/ingestors/module-ingestor.js +137 -0
- package/out/ingestors/module-ingestor.js.map +1 -0
- package/out/ingestors/symbol-ingestor.d.ts +26 -0
- package/out/ingestors/symbol-ingestor.d.ts.map +1 -0
- package/out/ingestors/symbol-ingestor.js +183 -0
- package/out/ingestors/symbol-ingestor.js.map +1 -0
- package/out/mcp/resources/adrs.d.ts +13 -0
- package/out/mcp/resources/adrs.d.ts.map +1 -0
- package/out/mcp/resources/adrs.js +26 -0
- package/out/mcp/resources/adrs.js.map +1 -0
- package/out/mcp/resources/changes.d.ts +13 -0
- package/out/mcp/resources/changes.d.ts.map +1 -0
- package/out/mcp/resources/changes.js +26 -0
- package/out/mcp/resources/changes.js.map +1 -0
- package/out/mcp/resources/dependencies.d.ts +13 -0
- package/out/mcp/resources/dependencies.d.ts.map +1 -0
- package/out/mcp/resources/dependencies.js +26 -0
- package/out/mcp/resources/dependencies.js.map +1 -0
- package/out/mcp/resources/modules.d.ts +13 -0
- package/out/mcp/resources/modules.d.ts.map +1 -0
- package/out/mcp/resources/modules.js +26 -0
- package/out/mcp/resources/modules.js.map +1 -0
- package/out/mcp/resources/symbols.d.ts +13 -0
- package/out/mcp/resources/symbols.d.ts.map +1 -0
- package/out/mcp/resources/symbols.js +26 -0
- package/out/mcp/resources/symbols.js.map +1 -0
- package/out/mcp/server.d.ts +29 -0
- package/out/mcp/server.d.ts.map +1 -0
- package/out/mcp/server.js +300 -0
- package/out/mcp/server.js.map +1 -0
- package/out/mcp/tools/architecture-mining.d.ts +46 -0
- package/out/mcp/tools/architecture-mining.d.ts.map +1 -0
- package/out/mcp/tools/architecture-mining.js +272 -0
- package/out/mcp/tools/architecture-mining.js.map +1 -0
- package/out/mcp/tools/bootstrap.d.ts +9 -0
- package/out/mcp/tools/bootstrap.d.ts.map +1 -0
- package/out/mcp/tools/bootstrap.js +14 -0
- package/out/mcp/tools/bootstrap.js.map +1 -0
- package/out/mcp/tools/cross-analysis.d.ts +18 -0
- package/out/mcp/tools/cross-analysis.d.ts.map +1 -0
- package/out/mcp/tools/cross-analysis.js +23 -0
- package/out/mcp/tools/cross-analysis.js.map +1 -0
- package/out/mcp/tools/gap-analysis.d.ts +34 -0
- package/out/mcp/tools/gap-analysis.d.ts.map +1 -0
- package/out/mcp/tools/gap-analysis.js +106 -0
- package/out/mcp/tools/gap-analysis.js.map +1 -0
- package/out/mcp/tools/learning-path.d.ts +10 -0
- package/out/mcp/tools/learning-path.d.ts.map +1 -0
- package/out/mcp/tools/learning-path.js +18 -0
- package/out/mcp/tools/learning-path.js.map +1 -0
- package/out/mcp/tools/query-dependencies.d.ts +18 -0
- package/out/mcp/tools/query-dependencies.d.ts.map +1 -0
- package/out/mcp/tools/query-dependencies.js +31 -0
- package/out/mcp/tools/query-dependencies.js.map +1 -0
- package/out/mcp/tools/query-modules.d.ts +17 -0
- package/out/mcp/tools/query-modules.d.ts.map +1 -0
- package/out/mcp/tools/query-modules.js +22 -0
- package/out/mcp/tools/query-modules.js.map +1 -0
- package/out/mcp/tools/query-symbols.d.ts +18 -0
- package/out/mcp/tools/query-symbols.d.ts.map +1 -0
- package/out/mcp/tools/query-symbols.js +32 -0
- package/out/mcp/tools/query-symbols.js.map +1 -0
- package/out/mcp/tools/semantic-discovery.d.ts +12 -0
- package/out/mcp/tools/semantic-discovery.d.ts.map +1 -0
- package/out/mcp/tools/semantic-discovery.js +35 -0
- package/out/mcp/tools/semantic-discovery.js.map +1 -0
- package/out/mcp/tools/system-explanation.d.ts +9 -0
- package/out/mcp/tools/system-explanation.d.ts.map +1 -0
- package/out/mcp/tools/system-explanation.js +14 -0
- package/out/mcp/tools/system-explanation.js.map +1 -0
- package/out/mcp/types.d.ts +19 -0
- package/out/mcp/types.d.ts.map +1 -0
- package/out/mcp/types.js +6 -0
- package/out/mcp/types.js.map +1 -0
- package/out/models/adr.d.ts +26 -0
- package/out/models/adr.d.ts.map +1 -0
- package/out/models/adr.js +3 -0
- package/out/models/adr.js.map +1 -0
- package/out/models/change.d.ts +42 -0
- package/out/models/change.d.ts.map +1 -0
- package/out/models/change.js +3 -0
- package/out/models/change.js.map +1 -0
- package/out/models/dependency.d.ts +37 -0
- package/out/models/dependency.d.ts.map +1 -0
- package/out/models/dependency.js +3 -0
- package/out/models/dependency.js.map +1 -0
- package/out/models/entity-reference.d.ts +20 -0
- package/out/models/entity-reference.d.ts.map +1 -0
- package/out/models/entity-reference.js +19 -0
- package/out/models/entity-reference.js.map +1 -0
- package/out/models/module.d.ts +26 -0
- package/out/models/module.d.ts.map +1 -0
- package/out/models/module.js +3 -0
- package/out/models/module.js.map +1 -0
- package/out/models/symbol.d.ts +31 -0
- package/out/models/symbol.d.ts.map +1 -0
- package/out/models/symbol.js +3 -0
- package/out/models/symbol.js.map +1 -0
- package/out/repositories/adr-repository.d.ts +41 -0
- package/out/repositories/adr-repository.d.ts.map +1 -0
- package/out/repositories/adr-repository.js +128 -0
- package/out/repositories/adr-repository.js.map +1 -0
- package/out/repositories/base-repository.d.ts +86 -0
- package/out/repositories/base-repository.d.ts.map +1 -0
- package/out/repositories/base-repository.js +66 -0
- package/out/repositories/base-repository.js.map +1 -0
- package/out/repositories/change-repository.d.ts +40 -0
- package/out/repositories/change-repository.d.ts.map +1 -0
- package/out/repositories/change-repository.js +150 -0
- package/out/repositories/change-repository.js.map +1 -0
- package/out/repositories/dependency-repository.d.ts +40 -0
- package/out/repositories/dependency-repository.d.ts.map +1 -0
- package/out/repositories/dependency-repository.js +129 -0
- package/out/repositories/dependency-repository.js.map +1 -0
- package/out/repositories/embedding-repository.d.ts +64 -0
- package/out/repositories/embedding-repository.d.ts.map +1 -0
- package/out/repositories/embedding-repository.js +126 -0
- package/out/repositories/embedding-repository.js.map +1 -0
- package/out/repositories/importance-repository.d.ts +63 -0
- package/out/repositories/importance-repository.d.ts.map +1 -0
- package/out/repositories/importance-repository.js +117 -0
- package/out/repositories/importance-repository.js.map +1 -0
- package/out/repositories/module-repository.d.ts +37 -0
- package/out/repositories/module-repository.d.ts.map +1 -0
- package/out/repositories/module-repository.js +122 -0
- package/out/repositories/module-repository.js.map +1 -0
- package/out/repositories/navigation-repository.d.ts +117 -0
- package/out/repositories/navigation-repository.d.ts.map +1 -0
- package/out/repositories/navigation-repository.js +211 -0
- package/out/repositories/navigation-repository.js.map +1 -0
- package/out/repositories/symbol-repository.d.ts +37 -0
- package/out/repositories/symbol-repository.d.ts.map +1 -0
- package/out/repositories/symbol-repository.js +136 -0
- package/out/repositories/symbol-repository.js.map +1 -0
- package/out/services/cross-dimension-linker.d.ts +45 -0
- package/out/services/cross-dimension-linker.d.ts.map +1 -0
- package/out/services/cross-dimension-linker.js +98 -0
- package/out/services/cross-dimension-linker.js.map +1 -0
- package/out/services/importance-scorer.d.ts +47 -0
- package/out/services/importance-scorer.d.ts.map +1 -0
- package/out/services/importance-scorer.js +188 -0
- package/out/services/importance-scorer.js.map +1 -0
- package/out/services/ingestion-orchestrator.d.ts +49 -0
- package/out/services/ingestion-orchestrator.d.ts.map +1 -0
- package/out/services/ingestion-orchestrator.js +140 -0
- package/out/services/ingestion-orchestrator.js.map +1 -0
- package/out/services/navigation-builder.d.ts +29 -0
- package/out/services/navigation-builder.d.ts.map +1 -0
- package/out/services/navigation-builder.js +229 -0
- package/out/services/navigation-builder.js.map +1 -0
- package/out/services/system-model-builder.d.ts +40 -0
- package/out/services/system-model-builder.d.ts.map +1 -0
- package/out/services/system-model-builder.js +88 -0
- package/out/services/system-model-builder.js.map +1 -0
- package/out/ui/commands.d.ts +9 -0
- package/out/ui/commands.d.ts.map +1 -0
- package/out/ui/commands.js +123 -0
- package/out/ui/commands.js.map +1 -0
- package/out/ui/database-explorer.d.ts +27 -0
- package/out/ui/database-explorer.d.ts.map +1 -0
- package/out/ui/database-explorer.js +169 -0
- package/out/ui/database-explorer.js.map +1 -0
- package/out/ui/detail-view-provider.d.ts +86 -0
- package/out/ui/detail-view-provider.d.ts.map +1 -0
- package/out/ui/detail-view-provider.js +1037 -0
- package/out/ui/detail-view-provider.js.map +1 -0
- package/out/ui/search-provider.d.ts +30 -0
- package/out/ui/search-provider.d.ts.map +1 -0
- package/out/ui/search-provider.js +240 -0
- package/out/ui/search-provider.js.map +1 -0
- package/out/ui/status-provider.d.ts +17 -0
- package/out/ui/status-provider.d.ts.map +1 -0
- package/out/ui/status-provider.js +76 -0
- package/out/ui/status-provider.js.map +1 -0
- package/out/validators/consistency-validator.d.ts +37 -0
- package/out/validators/consistency-validator.d.ts.map +1 -0
- package/out/validators/consistency-validator.js +93 -0
- package/out/validators/consistency-validator.js.map +1 -0
- package/out/validators/integrity-validator.d.ts +45 -0
- package/out/validators/integrity-validator.d.ts.map +1 -0
- package/out/validators/integrity-validator.js +115 -0
- package/out/validators/integrity-validator.js.map +1 -0
- package/package.json +173 -0
- package/schemas/sqlite/001_initial_modules.sql +39 -0
- package/schemas/sqlite/002_initial_symbols.sql +46 -0
- package/schemas/sqlite/003_initial_dependencies.sql +51 -0
- package/schemas/sqlite/004_initial_adrs.sql +41 -0
- package/schemas/sqlite/005_initial_changes.sql +54 -0
- package/schemas/sqlite/006_initial_ingestion.sql +34 -0
- package/schemas/sqlite/006_vectors_schema.sql +73 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.VssLoader = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
// Try to import sqlite-vss
|
|
40
|
+
let sqliteVss = null;
|
|
41
|
+
try {
|
|
42
|
+
sqliteVss = require('sqlite-vss');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
// sqlite-vss not available, will use fallback
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Loads SQLite VSS Extension for vector similarity search.
|
|
49
|
+
* Uses sqlite-vss package if available, otherwise falls back to manual path resolution.
|
|
50
|
+
*/
|
|
51
|
+
class VssLoader {
|
|
52
|
+
/**
|
|
53
|
+
* Loads the VSS extension into the given database.
|
|
54
|
+
*
|
|
55
|
+
* @param db The SQLite database instance
|
|
56
|
+
*/
|
|
57
|
+
async loadExtension(db) {
|
|
58
|
+
let vssPath = null;
|
|
59
|
+
// Try to use sqlite-vss package's getVssLoadablePath() method
|
|
60
|
+
if (sqliteVss && typeof sqliteVss.getVssLoadablePath === 'function') {
|
|
61
|
+
try {
|
|
62
|
+
vssPath = sqliteVss.getVssLoadablePath();
|
|
63
|
+
console.log(`[VssLoader] Using sqlite-vss package path: ${vssPath}`);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.warn(`[VssLoader] Failed to get VSS path from sqlite-vss package: ${error}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Fallback: Try manual path resolution
|
|
70
|
+
if (!vssPath || !fs.existsSync(vssPath)) {
|
|
71
|
+
const platform = process.platform;
|
|
72
|
+
const arch = process.arch;
|
|
73
|
+
vssPath = this.getVssPath(platform, arch);
|
|
74
|
+
}
|
|
75
|
+
if (!vssPath || !fs.existsSync(vssPath)) {
|
|
76
|
+
console.warn(`[VssLoader] VSS Extension not found. Semantic search will use fallback cosine similarity.`);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
try {
|
|
81
|
+
db.loadExtension(vssPath, (err) => {
|
|
82
|
+
if (err) {
|
|
83
|
+
console.warn(`[VssLoader] Failed to load VSS extension: ${err.message}. Semantic search will use fallback cosine similarity.`);
|
|
84
|
+
resolve(); // Nicht abbrechen, System soll auch ohne VSS funktionieren
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(`[VssLoader] VSS extension loaded successfully from ${vssPath}`);
|
|
88
|
+
resolve();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.warn(`[VssLoader] Error loading VSS extension: ${error}. Semantic search will use fallback cosine similarity.`);
|
|
94
|
+
resolve(); // Nicht abbrechen
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Gets the path to the VSS extension binary for the current platform.
|
|
100
|
+
* Fallback method if sqlite-vss package is not available.
|
|
101
|
+
*
|
|
102
|
+
* @param platform The platform (win32, linux, darwin)
|
|
103
|
+
* @param arch The architecture (x64, arm64, etc.)
|
|
104
|
+
* @returns Path to the VSS extension binary
|
|
105
|
+
*/
|
|
106
|
+
getVssPath(platform, arch) {
|
|
107
|
+
const extensionName = platform === 'win32' ? 'vss0.dll' : 'vss0.so';
|
|
108
|
+
const basePath = path.join(__dirname, '..', '..', 'node_modules', 'sqlite-vss');
|
|
109
|
+
// Try different possible paths
|
|
110
|
+
const possiblePaths = [
|
|
111
|
+
path.join(basePath, 'lib', `vss0.${platform}.${arch}.node`),
|
|
112
|
+
path.join(basePath, `vss0.${platform}.${arch}.node`),
|
|
113
|
+
path.join(basePath, 'lib', extensionName),
|
|
114
|
+
path.join(basePath, extensionName)
|
|
115
|
+
];
|
|
116
|
+
// Return first existing path, or last as fallback
|
|
117
|
+
for (const possiblePath of possiblePaths) {
|
|
118
|
+
if (fs.existsSync(possiblePath)) {
|
|
119
|
+
return possiblePath;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return possiblePaths[0]; // Return first path as fallback (will be checked by caller)
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Checks if VSS extension is available.
|
|
126
|
+
*
|
|
127
|
+
* @returns true if VSS extension is available, false otherwise
|
|
128
|
+
*/
|
|
129
|
+
isAvailable() {
|
|
130
|
+
// Try sqlite-vss package first
|
|
131
|
+
if (sqliteVss && typeof sqliteVss.getVssLoadablePath === 'function') {
|
|
132
|
+
try {
|
|
133
|
+
const vssPath = sqliteVss.getVssLoadablePath();
|
|
134
|
+
if (vssPath && fs.existsSync(vssPath)) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// Fall through to manual check (e.g., unsupported platform like Windows)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Fallback: Manual path check
|
|
143
|
+
const platform = process.platform;
|
|
144
|
+
const arch = process.arch;
|
|
145
|
+
const vssPath = this.getVssPath(platform, arch);
|
|
146
|
+
return fs.existsSync(vssPath);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.VssLoader = VssLoader;
|
|
150
|
+
//# sourceMappingURL=vss-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vss-loader.js","sourceRoot":"","sources":["../../src/core/vss-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as sqlite3 from 'sqlite3';
|
|
2
|
+
import { VssLoader } from './vss-loader';
|
|
3
|
+
/**
|
|
4
|
+
* Manages VSS Virtual Table for vector similarity search.
|
|
5
|
+
* Creates and maintains the embeddings_vss virtual table.
|
|
6
|
+
*/
|
|
7
|
+
export declare class VssManager {
|
|
8
|
+
private db;
|
|
9
|
+
private vssLoader;
|
|
10
|
+
private vssAvailable;
|
|
11
|
+
constructor(db: sqlite3.Database, vssLoader: VssLoader);
|
|
12
|
+
/**
|
|
13
|
+
* Initializes VSS Virtual Table.
|
|
14
|
+
* Must be called after VSS extension is loaded.
|
|
15
|
+
*
|
|
16
|
+
* @returns Promise that resolves when VSS is initialized
|
|
17
|
+
*/
|
|
18
|
+
initialize(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Checks if VSS virtual table exists.
|
|
21
|
+
*/
|
|
22
|
+
private checkTableExists;
|
|
23
|
+
/**
|
|
24
|
+
* Creates the VSS virtual table.
|
|
25
|
+
*/
|
|
26
|
+
private createVirtualTable;
|
|
27
|
+
/**
|
|
28
|
+
* Inserts or updates an embedding in the VSS virtual table.
|
|
29
|
+
* VSS uses rowid to link to the embeddings table.
|
|
30
|
+
*
|
|
31
|
+
* @param embeddingId The embedding ID (UUID) from the embeddings table
|
|
32
|
+
* @param embeddingVector The embedding vector as Float32Array or Buffer
|
|
33
|
+
*/
|
|
34
|
+
upsertEmbedding(embeddingId: string, embeddingVector: Float32Array | Buffer): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Gets rowid from embedding ID.
|
|
37
|
+
*/
|
|
38
|
+
private getRowidFromEmbeddingId;
|
|
39
|
+
/**
|
|
40
|
+
* Checks if a row exists in VSS virtual table.
|
|
41
|
+
*/
|
|
42
|
+
private checkRowExists;
|
|
43
|
+
/**
|
|
44
|
+
* Inserts a new embedding into VSS virtual table.
|
|
45
|
+
* VSS expects the vector as a JSON array or BLOB.
|
|
46
|
+
*/
|
|
47
|
+
private insertEmbedding;
|
|
48
|
+
/**
|
|
49
|
+
* Deletes an embedding from VSS virtual table by embedding ID.
|
|
50
|
+
*
|
|
51
|
+
* @param embeddingId The embedding ID (UUID) from the embeddings table
|
|
52
|
+
*/
|
|
53
|
+
deleteEmbedding(embeddingId: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Deletes an embedding from VSS virtual table by rowid.
|
|
56
|
+
*/
|
|
57
|
+
private deleteEmbeddingByRowid;
|
|
58
|
+
/**
|
|
59
|
+
* Performs vector similarity search using VSS.
|
|
60
|
+
*
|
|
61
|
+
* @param queryVector The query embedding vector
|
|
62
|
+
* @param limit Maximum number of results
|
|
63
|
+
* @param dimension Optional dimension filter
|
|
64
|
+
* @param pluginId Plugin ID filter
|
|
65
|
+
* @returns Promise that resolves to array of {rowid, distance, similarity} pairs
|
|
66
|
+
*/
|
|
67
|
+
search(queryVector: number[], limit?: number, dimension?: 'X' | 'Y' | 'Z' | 'W' | 'T', pluginId?: string): Promise<Array<{
|
|
68
|
+
rowid: number;
|
|
69
|
+
distance: number;
|
|
70
|
+
similarity: number;
|
|
71
|
+
}>>;
|
|
72
|
+
/**
|
|
73
|
+
* Alternative VSS search syntax (fallback).
|
|
74
|
+
*/
|
|
75
|
+
private tryAlternativeSearch;
|
|
76
|
+
/**
|
|
77
|
+
* Checks if VSS is available and initialized.
|
|
78
|
+
*/
|
|
79
|
+
isAvailable(): boolean;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=vss-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vss-manager.d.ts","sourceRoot":"","sources":["../../src/core/vss-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;GAGG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAkB;gBAE1B,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS;IAKtD;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BjC;;OAEG;YACW,gBAAgB;IAe9B;;OAEG;YACW,kBAAkB;IAmBhC;;;;;;OAMG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CjG;;OAEG;YACW,uBAAuB;IAgBrC;;OAEG;YACW,cAAc;IAiB5B;;;OAGG;YACW,eAAe;IAsB7B;;;;OAIG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD;;OAEG;YACW,sBAAsB;IAoBpC;;;;;;;;OAQG;IACG,MAAM,CACR,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,GAAE,MAAW,EAClB,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACvC,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAqD1E;;OAEG;YACW,oBAAoB;IAgDlC;;OAEG;IACH,WAAW,IAAI,OAAO;CAGzB"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VssManager = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Manages VSS Virtual Table for vector similarity search.
|
|
6
|
+
* Creates and maintains the embeddings_vss virtual table.
|
|
7
|
+
*/
|
|
8
|
+
class VssManager {
|
|
9
|
+
constructor(db, vssLoader) {
|
|
10
|
+
this.vssAvailable = false;
|
|
11
|
+
this.db = db;
|
|
12
|
+
this.vssLoader = vssLoader;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Initializes VSS Virtual Table.
|
|
16
|
+
* Must be called after VSS extension is loaded.
|
|
17
|
+
*
|
|
18
|
+
* @returns Promise that resolves when VSS is initialized
|
|
19
|
+
*/
|
|
20
|
+
async initialize() {
|
|
21
|
+
// Check if VSS is available
|
|
22
|
+
this.vssAvailable = this.vssLoader.isAvailable();
|
|
23
|
+
if (!this.vssAvailable) {
|
|
24
|
+
console.warn('[VssManager] VSS extension not available. Using fallback cosine similarity.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
// Check if virtual table already exists
|
|
29
|
+
const tableExists = await this.checkTableExists();
|
|
30
|
+
if (!tableExists) {
|
|
31
|
+
// Create VSS virtual table
|
|
32
|
+
await this.createVirtualTable();
|
|
33
|
+
console.log('[VssManager] VSS virtual table created successfully');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('[VssManager] VSS virtual table already exists');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
41
|
+
console.warn(`[VssManager] Failed to initialize VSS virtual table: ${errorMsg}. Using fallback cosine similarity.`);
|
|
42
|
+
this.vssAvailable = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Checks if VSS virtual table exists.
|
|
47
|
+
*/
|
|
48
|
+
async checkTableExists() {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
this.db.get(`SELECT name FROM sqlite_master WHERE type='table' AND name='embeddings_vss'`, (err, row) => {
|
|
51
|
+
if (err) {
|
|
52
|
+
reject(err);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
resolve(row !== undefined);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates the VSS virtual table.
|
|
62
|
+
*/
|
|
63
|
+
async createVirtualTable() {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
// VSS virtual table: embedding_vector(1536) - 1536 dimensions
|
|
66
|
+
this.db.run(`CREATE VIRTUAL TABLE embeddings_vss USING vss0(
|
|
67
|
+
embedding_vector(1536),
|
|
68
|
+
rowid HIDDEN
|
|
69
|
+
)`, (err) => {
|
|
70
|
+
if (err) {
|
|
71
|
+
reject(err);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
resolve();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Inserts or updates an embedding in the VSS virtual table.
|
|
81
|
+
* VSS uses rowid to link to the embeddings table.
|
|
82
|
+
*
|
|
83
|
+
* @param embeddingId The embedding ID (UUID) from the embeddings table
|
|
84
|
+
* @param embeddingVector The embedding vector as Float32Array or Buffer
|
|
85
|
+
*/
|
|
86
|
+
async upsertEmbedding(embeddingId, embeddingVector) {
|
|
87
|
+
if (!this.vssAvailable) {
|
|
88
|
+
return; // Silently skip if VSS not available
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Convert to Float32Array if needed
|
|
92
|
+
let vector;
|
|
93
|
+
if (embeddingVector instanceof Buffer) {
|
|
94
|
+
vector = new Float32Array(embeddingVector.buffer, embeddingVector.byteOffset, embeddingVector.length / 4);
|
|
95
|
+
}
|
|
96
|
+
else if (embeddingVector instanceof Float32Array) {
|
|
97
|
+
vector = embeddingVector;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Should not happen, but handle gracefully
|
|
101
|
+
throw new Error(`Invalid embedding vector type: ${typeof embeddingVector}`);
|
|
102
|
+
}
|
|
103
|
+
// Get rowid from embeddings table
|
|
104
|
+
const rowid = await this.getRowidFromEmbeddingId(embeddingId);
|
|
105
|
+
if (rowid === null) {
|
|
106
|
+
console.warn(`[VssManager] Embedding ${embeddingId} not found in embeddings table`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Check if row exists in VSS
|
|
110
|
+
const exists = await this.checkRowExists(rowid);
|
|
111
|
+
if (exists) {
|
|
112
|
+
// Update existing row - VSS uses DELETE + INSERT for updates
|
|
113
|
+
await this.deleteEmbeddingByRowid(rowid);
|
|
114
|
+
}
|
|
115
|
+
// Insert new row (or re-insert after delete)
|
|
116
|
+
await this.insertEmbedding(rowid, vector);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
120
|
+
console.warn(`[VssManager] Failed to upsert embedding in VSS: ${errorMsg}`);
|
|
121
|
+
// Don't throw - allow fallback to cosine similarity
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Gets rowid from embedding ID.
|
|
126
|
+
*/
|
|
127
|
+
async getRowidFromEmbeddingId(embeddingId) {
|
|
128
|
+
return new Promise((resolve, reject) => {
|
|
129
|
+
this.db.get(`SELECT rowid FROM embeddings WHERE id = ?`, [embeddingId], (err, row) => {
|
|
130
|
+
if (err) {
|
|
131
|
+
reject(err);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
resolve(row ? row.rowid : null);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Checks if a row exists in VSS virtual table.
|
|
141
|
+
*/
|
|
142
|
+
async checkRowExists(rowid) {
|
|
143
|
+
return new Promise((resolve, reject) => {
|
|
144
|
+
this.db.get(`SELECT rowid FROM embeddings_vss WHERE rowid = ?`, [rowid], (err, row) => {
|
|
145
|
+
if (err) {
|
|
146
|
+
// If table doesn't exist or query fails, assume row doesn't exist
|
|
147
|
+
resolve(false);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
resolve(row !== undefined);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Inserts a new embedding into VSS virtual table.
|
|
157
|
+
* VSS expects the vector as a JSON array or BLOB.
|
|
158
|
+
*/
|
|
159
|
+
async insertEmbedding(rowid, vector) {
|
|
160
|
+
return new Promise((resolve, reject) => {
|
|
161
|
+
// VSS expects vector as JSON array or as BLOB
|
|
162
|
+
// Convert Float32Array to array for JSON
|
|
163
|
+
const vectorArray = Array.from(vector);
|
|
164
|
+
// Use INSERT with rowid and embedding_vector
|
|
165
|
+
// VSS will handle the vector format internally
|
|
166
|
+
this.db.run(`INSERT INTO embeddings_vss(rowid, embedding_vector) VALUES (?, ?)`, [rowid, JSON.stringify(vectorArray)], (err) => {
|
|
167
|
+
if (err) {
|
|
168
|
+
reject(err);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
resolve();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Deletes an embedding from VSS virtual table by embedding ID.
|
|
178
|
+
*
|
|
179
|
+
* @param embeddingId The embedding ID (UUID) from the embeddings table
|
|
180
|
+
*/
|
|
181
|
+
async deleteEmbedding(embeddingId) {
|
|
182
|
+
if (!this.vssAvailable) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const rowid = await this.getRowidFromEmbeddingId(embeddingId);
|
|
187
|
+
if (rowid === null) {
|
|
188
|
+
return; // Embedding not found
|
|
189
|
+
}
|
|
190
|
+
await this.deleteEmbeddingByRowid(rowid);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
194
|
+
console.warn(`[VssManager] Failed to delete embedding from VSS: ${errorMsg}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Deletes an embedding from VSS virtual table by rowid.
|
|
199
|
+
*/
|
|
200
|
+
async deleteEmbeddingByRowid(rowid) {
|
|
201
|
+
if (!this.vssAvailable) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
return new Promise((resolve, reject) => {
|
|
205
|
+
this.db.run(`DELETE FROM embeddings_vss WHERE rowid = ?`, [rowid], (err) => {
|
|
206
|
+
if (err) {
|
|
207
|
+
reject(err);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
resolve();
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Performs vector similarity search using VSS.
|
|
217
|
+
*
|
|
218
|
+
* @param queryVector The query embedding vector
|
|
219
|
+
* @param limit Maximum number of results
|
|
220
|
+
* @param dimension Optional dimension filter
|
|
221
|
+
* @param pluginId Plugin ID filter
|
|
222
|
+
* @returns Promise that resolves to array of {rowid, distance, similarity} pairs
|
|
223
|
+
*/
|
|
224
|
+
async search(queryVector, limit = 10, dimension, pluginId) {
|
|
225
|
+
if (!this.vssAvailable) {
|
|
226
|
+
throw new Error('VSS not available. Use fallback cosine similarity.');
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
// VSS uses a special search syntax
|
|
230
|
+
// Build query with JOIN to embeddings table for filtering
|
|
231
|
+
let query = `
|
|
232
|
+
SELECT
|
|
233
|
+
e.rowid,
|
|
234
|
+
vss_distance_l2(e.embedding_vector, ?) as distance
|
|
235
|
+
FROM embeddings_vss e
|
|
236
|
+
`;
|
|
237
|
+
const params = [JSON.stringify(queryVector)];
|
|
238
|
+
// Add dimension filter if provided
|
|
239
|
+
if (dimension && pluginId) {
|
|
240
|
+
query += ` JOIN embeddings em ON e.rowid = em.rowid
|
|
241
|
+
WHERE em.dimension = ? AND em.plugin_id = ?`;
|
|
242
|
+
params.push(dimension, pluginId);
|
|
243
|
+
}
|
|
244
|
+
query += ` ORDER BY distance LIMIT ?`;
|
|
245
|
+
params.push(limit);
|
|
246
|
+
return new Promise((resolve, reject) => {
|
|
247
|
+
this.db.all(query, params, (err, rows) => {
|
|
248
|
+
if (err) {
|
|
249
|
+
// Try alternative VSS syntax if first fails
|
|
250
|
+
this.tryAlternativeSearch(queryVector, limit, dimension, pluginId)
|
|
251
|
+
.then(resolve)
|
|
252
|
+
.catch(reject);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// VSS returns distance (lower = more similar)
|
|
256
|
+
// Convert to similarity score (higher = more similar)
|
|
257
|
+
const results = rows.map(row => ({
|
|
258
|
+
rowid: row.rowid,
|
|
259
|
+
distance: row.distance,
|
|
260
|
+
// Convert distance to similarity (1 / (1 + distance))
|
|
261
|
+
similarity: 1 / (1 + Math.max(row.distance, 0))
|
|
262
|
+
}));
|
|
263
|
+
resolve(results);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
270
|
+
throw new Error(`VSS search failed: ${errorMsg}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Alternative VSS search syntax (fallback).
|
|
275
|
+
*/
|
|
276
|
+
async tryAlternativeSearch(queryVector, limit, dimension, pluginId) {
|
|
277
|
+
// Alternative: Use vss_search function directly
|
|
278
|
+
let query = `
|
|
279
|
+
SELECT
|
|
280
|
+
rowid,
|
|
281
|
+
distance
|
|
282
|
+
FROM (
|
|
283
|
+
SELECT
|
|
284
|
+
rowid,
|
|
285
|
+
vss_search(embedding_vector, ?) as distance
|
|
286
|
+
FROM embeddings_vss
|
|
287
|
+
)
|
|
288
|
+
`;
|
|
289
|
+
const params = [JSON.stringify(queryVector)];
|
|
290
|
+
if (dimension && pluginId) {
|
|
291
|
+
query += ` WHERE rowid IN (
|
|
292
|
+
SELECT rowid FROM embeddings
|
|
293
|
+
WHERE dimension = ? AND plugin_id = ?
|
|
294
|
+
)`;
|
|
295
|
+
params.push(dimension, pluginId);
|
|
296
|
+
}
|
|
297
|
+
query += ` ORDER BY distance LIMIT ?`;
|
|
298
|
+
params.push(limit);
|
|
299
|
+
return new Promise((resolve, reject) => {
|
|
300
|
+
this.db.all(query, params, (err, rows) => {
|
|
301
|
+
if (err) {
|
|
302
|
+
reject(err);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
const results = rows.map(row => ({
|
|
306
|
+
rowid: row.rowid,
|
|
307
|
+
distance: row.distance || 0,
|
|
308
|
+
similarity: 1 / (1 + Math.max(row.distance || 0, 0))
|
|
309
|
+
}));
|
|
310
|
+
resolve(results);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Checks if VSS is available and initialized.
|
|
317
|
+
*/
|
|
318
|
+
isAvailable() {
|
|
319
|
+
return this.vssAvailable;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
exports.VssManager = VssManager;
|
|
323
|
+
//# sourceMappingURL=vss-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vss-manager.js","sourceRoot":"","sources":["../../src/core/vss-manager.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,UAAU;IAKnB,YAAY,EAAoB,EAAE,SAAoB;QAF9C,iBAAY,GAAY,KAAK,CAAC;QAGlC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU;QACZ,4BAA4B;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC5F,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,wCAAwC;YACxC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,2BAA2B;gBAC3B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,wDAAwD,QAAQ,qCAAqC,CAAC,CAAC;YACpH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CACP,6EAA6E,EAC7E,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACT,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,8DAA8D;YAC9D,IAAI,CAAC,EAAE,CAAC,GAAG,CACP;;;kBAGE,EACF,CAAC,GAAG,EAAE,EAAE;gBACJ,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,eAAsC;QAC7E,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO,CAAC,qCAAqC;QACjD,CAAC;QAED,IAAI,CAAC;YACD,oCAAoC;YACpC,IAAI,MAAoB,CAAC;YACzB,IAAI,eAAe,YAAY,MAAM,EAAE,CAAC;gBACpC,MAAM,GAAG,IAAI,YAAY,CACrB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,UAAU,EAC1B,eAAe,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;YACN,CAAC;iBAAM,IAAI,eAAe,YAAY,YAAY,EAAE,CAAC;gBACjD,MAAM,GAAG,eAAe,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACJ,2CAA2C;gBAC3C,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,eAAe,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,kCAAkC;YAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE9D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,0BAA0B,WAAW,gCAAgC,CAAC,CAAC;gBACpF,OAAO;YACX,CAAC;YAED,6BAA6B;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAEhD,IAAI,MAAM,EAAE,CAAC;gBACT,6DAA6D;gBAC7D,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;YAED,6CAA6C;YAC7C,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,mDAAmD,QAAQ,EAAE,CAAC,CAAC;YAC5E,oDAAoD;QACxD,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,WAAmB;QACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CACP,2CAA2C,EAC3C,CAAC,WAAW,CAAC,EACb,CAAC,GAAG,EAAE,GAAQ,EAAE,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,KAAa;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CACP,kDAAkD,EAClD,CAAC,KAAK,CAAC,EACP,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACT,IAAI,GAAG,EAAE,CAAC;oBACN,kEAAkE;oBAClE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,MAAoB;QAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,8CAA8C;YAC9C,yCAAyC;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEvC,6CAA6C;YAC7C,+CAA+C;YAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,CACP,mEAAmE,EACnE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EACpC,CAAC,GAAG,EAAE,EAAE;gBACJ,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAC9D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,sBAAsB;YAClC,CAAC;YACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,qDAAqD,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAAC,KAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CACP,4CAA4C,EAC5C,CAAC,KAAK,CAAC,EACP,CAAC,GAAG,EAAE,EAAE;gBACJ,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CACR,WAAqB,EACrB,QAAgB,EAAE,EAClB,SAAuC,EACvC,QAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC;YACD,mCAAmC;YACnC,0DAA0D;YAC1D,IAAI,KAAK,GAAG;;;;;aAKX,CAAC;YAEF,MAAM,MAAM,GAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAEpD,mCAAmC;YACnC,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;gBACxB,KAAK,IAAI;gEACuC,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YAED,KAAK,IAAI,4BAA4B,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAW,EAAE,EAAE;oBAC5C,IAAI,GAAG,EAAE,CAAC;wBACN,4CAA4C;wBAC5C,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;6BAC7D,IAAI,CAAC,OAAO,CAAC;6BACb,KAAK,CAAC,MAAM,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACJ,8CAA8C;wBAC9C,sDAAsD;wBACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;4BACtB,sDAAsD;4BACtD,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;yBAClD,CAAC,CAAC,CAAC;wBACJ,OAAO,CAAC,OAAO,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAC9B,WAAqB,EACrB,KAAa,EACb,SAAuC,EACvC,QAAiB;QAEjB,gDAAgD;QAChD,IAAI,KAAK,GAAG;;;;;;;;;;SAUX,CAAC;QAEF,MAAM,MAAM,GAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAEpD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YACxB,KAAK,IAAI;;;cAGP,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,IAAI,4BAA4B,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAW,EAAE,EAAE;gBAC5C,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;wBAC3B,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;qBACvD,CAAC,CAAC,CAAC;oBACJ,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;CACJ;AAlXD,gCAkXC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as sqlite3 from 'sqlite3';
|
|
2
|
+
import { VssLoader } from './vss-loader';
|
|
3
|
+
import { VectorDatabase } from './vector-database-interface';
|
|
4
|
+
/**
|
|
5
|
+
* VSS-based vector database implementation.
|
|
6
|
+
* Uses SQLite VSS Extension for optimized vector similarity search.
|
|
7
|
+
* Only available on macOS and Linux (Windows not supported).
|
|
8
|
+
*/
|
|
9
|
+
export declare class VssVectorDatabase implements VectorDatabase {
|
|
10
|
+
private db;
|
|
11
|
+
private vssLoader;
|
|
12
|
+
private vssAvailable;
|
|
13
|
+
private readonly embeddingDimensions;
|
|
14
|
+
constructor(db: sqlite3.Database, vssLoader: VssLoader);
|
|
15
|
+
/**
|
|
16
|
+
* Checks if VSS extension is available.
|
|
17
|
+
*/
|
|
18
|
+
isAvailable(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Initializes VSS Virtual Table.
|
|
21
|
+
* Must be called after VSS extension is loaded.
|
|
22
|
+
*
|
|
23
|
+
* @returns Promise that resolves when VSS is initialized
|
|
24
|
+
*/
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Checks if the VSS virtual table exists.
|
|
28
|
+
*/
|
|
29
|
+
private checkVirtualTableExists;
|
|
30
|
+
/**
|
|
31
|
+
* Creates the VSS virtual table.
|
|
32
|
+
*/
|
|
33
|
+
private createVirtualTable;
|
|
34
|
+
/**
|
|
35
|
+
* Gets the rowid for an embedding ID.
|
|
36
|
+
*/
|
|
37
|
+
private getRowidFromEmbeddingId;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the embedding ID from a rowid.
|
|
40
|
+
*/
|
|
41
|
+
getEmbeddingIdFromRowid(rowid: number): Promise<string | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Checks if a row exists in the VSS virtual table.
|
|
44
|
+
*/
|
|
45
|
+
private checkRowExists;
|
|
46
|
+
/**
|
|
47
|
+
* Inserts an embedding into the VSS virtual table.
|
|
48
|
+
*/
|
|
49
|
+
private insertEmbedding;
|
|
50
|
+
/**
|
|
51
|
+
* Deletes an embedding from the VSS virtual table.
|
|
52
|
+
*/
|
|
53
|
+
private deleteEmbedding;
|
|
54
|
+
/**
|
|
55
|
+
* Upserts an embedding into the VSS virtual table.
|
|
56
|
+
*/
|
|
57
|
+
upsertEmbedding(embeddingId: string, embeddingVector: Float32Array | number[]): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Searches for similar embeddings using VSS.
|
|
60
|
+
*/
|
|
61
|
+
search(queryEmbedding: Float32Array | number[], limit?: number, dimension?: 'X' | 'Y' | 'Z' | 'W' | 'T', pluginId?: string): Promise<Array<{
|
|
62
|
+
rowid: number;
|
|
63
|
+
distance: number;
|
|
64
|
+
similarity?: number;
|
|
65
|
+
}>>;
|
|
66
|
+
/**
|
|
67
|
+
* Alternative search method (fallback if MATCH syntax doesn't work).
|
|
68
|
+
*/
|
|
69
|
+
private tryAlternativeSearch;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=vss-vector-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vss-vector-database.d.ts","sourceRoot":"","sources":["../../src/core/vss-vector-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACpD,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;gBAExC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS;IAKtD;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BjC;;OAEG;YACW,uBAAuB;IAerC;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;YACW,uBAAuB;IAgBrC;;OAEG;IACG,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBpE;;OAEG;YACW,cAAc;IAgB5B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;YACW,eAAe;IAgB7B;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCnG;;OAEG;IACG,MAAM,CACR,cAAc,EAAE,YAAY,GAAG,MAAM,EAAE,EACvC,KAAK,GAAE,MAAW,EAClB,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACvC,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAmD3E;;OAEG;YACW,oBAAoB;CA0CrC"}
|