lokicms-plugin-sql 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/federation/cache-layer.d.ts +58 -0
  2. package/dist/federation/cache-layer.d.ts.map +1 -0
  3. package/dist/federation/cache-layer.js +210 -0
  4. package/dist/federation/cache-layer.js.map +1 -0
  5. package/dist/federation/index.d.ts +12 -0
  6. package/dist/federation/index.d.ts.map +1 -0
  7. package/dist/federation/index.js +9 -0
  8. package/dist/federation/index.js.map +1 -0
  9. package/dist/federation/source-manager.d.ts +57 -0
  10. package/dist/federation/source-manager.d.ts.map +1 -0
  11. package/dist/federation/source-manager.js +238 -0
  12. package/dist/federation/source-manager.js.map +1 -0
  13. package/dist/federation/sync-engine.d.ts +68 -0
  14. package/dist/federation/sync-engine.d.ts.map +1 -0
  15. package/dist/federation/sync-engine.js +288 -0
  16. package/dist/federation/sync-engine.js.map +1 -0
  17. package/dist/index.d.ts +80 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +79 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/plugin.d.ts +28 -0
  22. package/dist/plugin.d.ts.map +1 -0
  23. package/dist/plugin.js +798 -0
  24. package/dist/plugin.js.map +1 -0
  25. package/dist/providers/base.d.ts +142 -0
  26. package/dist/providers/base.d.ts.map +1 -0
  27. package/dist/providers/base.js +161 -0
  28. package/dist/providers/base.js.map +1 -0
  29. package/dist/providers/index.d.ts +22 -0
  30. package/dist/providers/index.d.ts.map +1 -0
  31. package/dist/providers/index.js +74 -0
  32. package/dist/providers/index.js.map +1 -0
  33. package/dist/providers/mariadb.d.ts +83 -0
  34. package/dist/providers/mariadb.d.ts.map +1 -0
  35. package/dist/providers/mariadb.js +293 -0
  36. package/dist/providers/mariadb.js.map +1 -0
  37. package/dist/providers/mysql.d.ts +78 -0
  38. package/dist/providers/mysql.d.ts.map +1 -0
  39. package/dist/providers/mysql.js +284 -0
  40. package/dist/providers/mysql.js.map +1 -0
  41. package/dist/providers/postgresql.d.ts +77 -0
  42. package/dist/providers/postgresql.d.ts.map +1 -0
  43. package/dist/providers/postgresql.js +296 -0
  44. package/dist/providers/postgresql.js.map +1 -0
  45. package/dist/providers/sqlite.d.ts +80 -0
  46. package/dist/providers/sqlite.d.ts.map +1 -0
  47. package/dist/providers/sqlite.js +283 -0
  48. package/dist/providers/sqlite.js.map +1 -0
  49. package/dist/query/builder.d.ts +74 -0
  50. package/dist/query/builder.d.ts.map +1 -0
  51. package/dist/query/builder.js +279 -0
  52. package/dist/query/builder.js.map +1 -0
  53. package/dist/query/index.d.ts +10 -0
  54. package/dist/query/index.d.ts.map +1 -0
  55. package/dist/query/index.js +8 -0
  56. package/dist/query/index.js.map +1 -0
  57. package/dist/query/transformer.d.ts +74 -0
  58. package/dist/query/transformer.d.ts.map +1 -0
  59. package/dist/query/transformer.js +236 -0
  60. package/dist/query/transformer.js.map +1 -0
  61. package/dist/types.d.ts +350 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +38 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/vectors/adapter.d.ts +128 -0
  66. package/dist/vectors/adapter.d.ts.map +1 -0
  67. package/dist/vectors/adapter.js +79 -0
  68. package/dist/vectors/adapter.js.map +1 -0
  69. package/dist/vectors/index.d.ts +41 -0
  70. package/dist/vectors/index.d.ts.map +1 -0
  71. package/dist/vectors/index.js +87 -0
  72. package/dist/vectors/index.js.map +1 -0
  73. package/dist/vectors/lokijs-vector.d.ts +112 -0
  74. package/dist/vectors/lokijs-vector.d.ts.map +1 -0
  75. package/dist/vectors/lokijs-vector.js +217 -0
  76. package/dist/vectors/lokijs-vector.js.map +1 -0
  77. package/dist/vectors/mariadb-vector.d.ts +56 -0
  78. package/dist/vectors/mariadb-vector.d.ts.map +1 -0
  79. package/dist/vectors/mariadb-vector.js +263 -0
  80. package/dist/vectors/mariadb-vector.js.map +1 -0
  81. package/dist/vectors/mysql-vector.d.ts +56 -0
  82. package/dist/vectors/mysql-vector.d.ts.map +1 -0
  83. package/dist/vectors/mysql-vector.js +235 -0
  84. package/dist/vectors/mysql-vector.js.map +1 -0
  85. package/dist/vectors/pgvector.d.ts +52 -0
  86. package/dist/vectors/pgvector.d.ts.map +1 -0
  87. package/dist/vectors/pgvector.js +190 -0
  88. package/dist/vectors/pgvector.js.map +1 -0
  89. package/dist/vectors/sqlite-vec.d.ts +80 -0
  90. package/dist/vectors/sqlite-vec.d.ts.map +1 -0
  91. package/dist/vectors/sqlite-vec.js +362 -0
  92. package/dist/vectors/sqlite-vec.js.map +1 -0
  93. package/package.json +64 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * MySQL Vector Adapter
3
+ *
4
+ * MySQL 9+ native VECTOR type adapter.
5
+ */
6
+ import { BaseVectorAdapter } from './adapter.js';
7
+ /**
8
+ * MySQL vector adapter (MySQL 9+)
9
+ */
10
+ export class MySQLVectorAdapter extends BaseVectorAdapter {
11
+ type = 'mysql';
12
+ hasVectorSupport = false;
13
+ constructor(options) {
14
+ super(options);
15
+ }
16
+ /**
17
+ * Check if vectors are supported
18
+ */
19
+ isSupported() {
20
+ return this.hasVectorSupport;
21
+ }
22
+ /**
23
+ * Initialize vector storage
24
+ */
25
+ async initialize(dimensions) {
26
+ this.dimensions = dimensions;
27
+ // Check MySQL version for VECTOR support (9.0+)
28
+ const versionResult = await this.provider.query('SELECT VERSION() as version');
29
+ if (versionResult.rows.length > 0) {
30
+ const version = versionResult.rows[0].version;
31
+ const versionMatch = version.match(/^(\d+)\.(\d+)/);
32
+ if (versionMatch) {
33
+ const major = parseInt(versionMatch[1], 10);
34
+ this.hasVectorSupport = major >= 9;
35
+ }
36
+ }
37
+ if (!this.hasVectorSupport) {
38
+ this.logger.warn('MySQL 9+ required for VECTOR type. Using JSON fallback for vector storage.');
39
+ }
40
+ // Create vectors table
41
+ const tableName = this.provider.escapeIdentifier(this.tableName);
42
+ if (this.hasVectorSupport) {
43
+ await this.provider.execute(`
44
+ CREATE TABLE IF NOT EXISTS ${tableName} (
45
+ id VARCHAR(255) PRIMARY KEY,
46
+ entry_id VARCHAR(255) NOT NULL,
47
+ collection VARCHAR(255) NOT NULL,
48
+ vector VECTOR(${dimensions}),
49
+ text_hash VARCHAR(64) NOT NULL,
50
+ created_at BIGINT NOT NULL,
51
+ updated_at BIGINT NOT NULL,
52
+ INDEX idx_entry_id (entry_id),
53
+ INDEX idx_collection (collection)
54
+ )
55
+ `);
56
+ }
57
+ else {
58
+ // Fallback: store vectors as JSON
59
+ await this.provider.execute(`
60
+ CREATE TABLE IF NOT EXISTS ${tableName} (
61
+ id VARCHAR(255) PRIMARY KEY,
62
+ entry_id VARCHAR(255) NOT NULL,
63
+ collection VARCHAR(255) NOT NULL,
64
+ vector JSON NOT NULL,
65
+ text_hash VARCHAR(64) NOT NULL,
66
+ created_at BIGINT NOT NULL,
67
+ updated_at BIGINT NOT NULL,
68
+ INDEX idx_entry_id (entry_id),
69
+ INDEX idx_collection (collection)
70
+ )
71
+ `);
72
+ }
73
+ this.initialized = true;
74
+ this.logger.info(`MySQL vector adapter initialized with ${dimensions} dimensions ` +
75
+ `(${this.hasVectorSupport ? 'native VECTOR' : 'JSON fallback'})`);
76
+ }
77
+ /**
78
+ * Store a vector
79
+ */
80
+ async store(entry) {
81
+ const now = Date.now();
82
+ const vectorValue = this.vectorToStorage(entry.vector);
83
+ const tableName = this.provider.escapeIdentifier(this.tableName);
84
+ await this.provider.execute(`INSERT INTO ${tableName} (id, entry_id, collection, vector, text_hash, created_at, updated_at)
85
+ VALUES (?, ?, ?, ?, ?, ?, ?)
86
+ ON DUPLICATE KEY UPDATE
87
+ vector = VALUES(vector),
88
+ text_hash = VALUES(text_hash),
89
+ updated_at = VALUES(updated_at)`, [entry.id, entry.entryId, entry.collection, vectorValue, entry.textHash, now, now]);
90
+ }
91
+ /**
92
+ * Search for similar vectors
93
+ */
94
+ async search(vector, options = {}) {
95
+ const { limit = 10, collection, minSimilarity = 0 } = options;
96
+ const vectorValue = this.vectorToStorage(vector);
97
+ const tableName = this.provider.escapeIdentifier(this.tableName);
98
+ let sql;
99
+ const params = [];
100
+ if (this.hasVectorSupport) {
101
+ // MySQL 9+ native vector distance
102
+ // Using L2 distance and converting to similarity
103
+ sql = `
104
+ SELECT id, entry_id, collection,
105
+ 1 / (1 + DISTANCE(vector, ?, 'L2')) as similarity
106
+ FROM ${tableName}
107
+ WHERE 1 / (1 + DISTANCE(vector, ?, 'L2')) >= ?
108
+ `;
109
+ params.push(vectorValue, vectorValue, minSimilarity);
110
+ if (collection) {
111
+ sql += ` AND collection = ?`;
112
+ params.push(collection);
113
+ }
114
+ sql += ` ORDER BY DISTANCE(vector, ?, 'L2') LIMIT ?`;
115
+ params.push(vectorValue, limit);
116
+ }
117
+ else {
118
+ // JSON fallback - compute cosine similarity in application
119
+ sql = `SELECT id, entry_id, collection, vector FROM ${tableName}`;
120
+ if (collection) {
121
+ sql += ` WHERE collection = ?`;
122
+ params.push(collection);
123
+ }
124
+ const result = await this.provider.query(sql, params);
125
+ // Calculate cosine similarity for each row
126
+ const results = result.rows
127
+ .map((row) => {
128
+ const storedVector = this.storageToVector(row.vector);
129
+ const similarity = this.cosineSimilarity(vector, storedVector);
130
+ return {
131
+ id: row.id,
132
+ entryId: row.entry_id,
133
+ collection: row.collection,
134
+ similarity,
135
+ };
136
+ })
137
+ .filter((r) => r.similarity >= minSimilarity)
138
+ .sort((a, b) => b.similarity - a.similarity)
139
+ .slice(0, limit);
140
+ return results;
141
+ }
142
+ const result = await this.provider.query(sql, params);
143
+ return result.rows.map((row) => ({
144
+ id: row.id,
145
+ entryId: row.entry_id,
146
+ collection: row.collection,
147
+ similarity: row.similarity,
148
+ }));
149
+ }
150
+ /**
151
+ * Create vector index (MySQL 9+ specific)
152
+ */
153
+ async createIndex(_indexType) {
154
+ if (!this.hasVectorSupport) {
155
+ this.logger.warn('Vector indexing not available without native VECTOR type');
156
+ return false;
157
+ }
158
+ // MySQL 9 may support vector indexes in future versions
159
+ // For now, log a warning
160
+ this.logger.info('MySQL vector indexes: Currently using sequential scan');
161
+ return true;
162
+ }
163
+ /**
164
+ * Check if vector index exists
165
+ */
166
+ async hasIndex() {
167
+ // MySQL 9.0 doesn't have vector-specific indexes yet
168
+ return false;
169
+ }
170
+ /**
171
+ * Convert row to VectorEntry
172
+ */
173
+ rowToEntry(row) {
174
+ return {
175
+ id: row.id,
176
+ entryId: row.entry_id,
177
+ collection: row.collection,
178
+ vector: this.storageToVector(row.vector),
179
+ textHash: row.text_hash,
180
+ createdAt: row.created_at,
181
+ updatedAt: row.updated_at,
182
+ };
183
+ }
184
+ /**
185
+ * Convert vector to MySQL format
186
+ */
187
+ vectorToStorage(vector) {
188
+ if (this.hasVectorSupport) {
189
+ // MySQL 9+ VECTOR format
190
+ return `[${vector.join(',')}]`;
191
+ }
192
+ // JSON fallback
193
+ return JSON.stringify(vector);
194
+ }
195
+ /**
196
+ * Convert MySQL format to vector
197
+ */
198
+ storageToVector(value) {
199
+ if (typeof value === 'string') {
200
+ try {
201
+ // Try JSON parse first
202
+ return JSON.parse(value);
203
+ }
204
+ catch {
205
+ // MySQL VECTOR format: [0.1,0.2,0.3]
206
+ return value
207
+ .slice(1, -1)
208
+ .split(',')
209
+ .map((n) => parseFloat(n));
210
+ }
211
+ }
212
+ if (Array.isArray(value)) {
213
+ return value.map((n) => Number(n));
214
+ }
215
+ return [];
216
+ }
217
+ /**
218
+ * Compute cosine similarity between two vectors
219
+ */
220
+ cosineSimilarity(a, b) {
221
+ if (a.length !== b.length)
222
+ return 0;
223
+ let dotProduct = 0;
224
+ let normA = 0;
225
+ let normB = 0;
226
+ for (let i = 0; i < a.length; i++) {
227
+ dotProduct += a[i] * b[i];
228
+ normA += a[i] * a[i];
229
+ normB += b[i] * b[i];
230
+ }
231
+ const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
232
+ return magnitude === 0 ? 0 : dotProduct / magnitude;
233
+ }
234
+ }
235
+ //# sourceMappingURL=mysql-vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-vector.js","sourceRoot":"","sources":["../../src/vectors/mysql-vector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * pgvector Adapter
3
+ *
4
+ * PostgreSQL vector adapter using pgvector extension.
5
+ */
6
+ import type { VectorEntry, VectorSearchOptions, VectorSearchResult } from '../types.js';
7
+ import { BaseVectorAdapter, VectorAdapterOptions } from './adapter.js';
8
+ /**
9
+ * pgvector adapter for PostgreSQL
10
+ */
11
+ export declare class PgVectorAdapter extends BaseVectorAdapter {
12
+ readonly type: "postgresql";
13
+ private hasVectorSupport;
14
+ constructor(options: VectorAdapterOptions);
15
+ /**
16
+ * Check if vectors are supported
17
+ */
18
+ isSupported(): boolean;
19
+ /**
20
+ * Initialize vector storage
21
+ */
22
+ initialize(dimensions: number): Promise<void>;
23
+ /**
24
+ * Store a vector
25
+ */
26
+ store(entry: Omit<VectorEntry, 'createdAt' | 'updatedAt'>): Promise<void>;
27
+ /**
28
+ * Search for similar vectors using cosine similarity
29
+ */
30
+ search(vector: number[], options?: VectorSearchOptions): Promise<VectorSearchResult[]>;
31
+ /**
32
+ * Create HNSW index for faster search
33
+ */
34
+ createIndex(indexType?: string): Promise<boolean>;
35
+ /**
36
+ * Check if vector index exists
37
+ */
38
+ hasIndex(): Promise<boolean>;
39
+ /**
40
+ * Convert row to VectorEntry
41
+ */
42
+ protected rowToEntry(row: Record<string, unknown>): VectorEntry;
43
+ /**
44
+ * Convert vector to PostgreSQL format
45
+ */
46
+ protected vectorToStorage(vector: number[]): string;
47
+ /**
48
+ * Convert PostgreSQL format to vector
49
+ */
50
+ protected storageToVector(value: unknown): number[];
51
+ }
52
+ //# sourceMappingURL=pgvector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgvector.d.ts","sourceRoot":"","sources":["../../src/vectors/pgvector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEvE;;GAEG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,OAAO,EAAE,oBAAoB;IAIzC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CnD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/E;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAyChC;;OAEG;IACG,WAAW,CAAC,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC/D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAY/D;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAInD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE;CAapD"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * pgvector Adapter
3
+ *
4
+ * PostgreSQL vector adapter using pgvector extension.
5
+ */
6
+ import { BaseVectorAdapter } from './adapter.js';
7
+ /**
8
+ * pgvector adapter for PostgreSQL
9
+ */
10
+ export class PgVectorAdapter extends BaseVectorAdapter {
11
+ type = 'postgresql';
12
+ hasVectorSupport = false;
13
+ constructor(options) {
14
+ super(options);
15
+ }
16
+ /**
17
+ * Check if vectors are supported
18
+ */
19
+ isSupported() {
20
+ return this.hasVectorSupport;
21
+ }
22
+ /**
23
+ * Initialize vector storage
24
+ */
25
+ async initialize(dimensions) {
26
+ this.dimensions = dimensions;
27
+ // Check for pgvector extension
28
+ const result = await this.provider.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");
29
+ this.hasVectorSupport = result.rows.length > 0;
30
+ if (!this.hasVectorSupport) {
31
+ this.logger.warn('pgvector extension not installed. Vector operations will not be available.');
32
+ return;
33
+ }
34
+ // Create vectors table
35
+ const tableName = this.provider.escapeIdentifier(this.tableName);
36
+ await this.provider.execute(`
37
+ CREATE TABLE IF NOT EXISTS ${tableName} (
38
+ id VARCHAR(255) PRIMARY KEY,
39
+ entry_id VARCHAR(255) NOT NULL,
40
+ collection VARCHAR(255) NOT NULL,
41
+ vector vector(${dimensions}),
42
+ text_hash VARCHAR(64) NOT NULL,
43
+ created_at BIGINT NOT NULL,
44
+ updated_at BIGINT NOT NULL
45
+ )
46
+ `);
47
+ // Create indexes
48
+ await this.provider.execute(`
49
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_entry_id
50
+ ON ${tableName} (entry_id)
51
+ `);
52
+ await this.provider.execute(`
53
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_collection
54
+ ON ${tableName} (collection)
55
+ `);
56
+ this.initialized = true;
57
+ this.logger.info(`pgvector adapter initialized with ${dimensions} dimensions`);
58
+ }
59
+ /**
60
+ * Store a vector
61
+ */
62
+ async store(entry) {
63
+ if (!this.hasVectorSupport) {
64
+ throw new Error('pgvector not available');
65
+ }
66
+ const now = Date.now();
67
+ const vectorStr = this.vectorToStorage(entry.vector);
68
+ const tableName = this.provider.escapeIdentifier(this.tableName);
69
+ await this.provider.execute(`INSERT INTO ${tableName} (id, entry_id, collection, vector, text_hash, created_at, updated_at)
70
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
71
+ ON CONFLICT (id) DO UPDATE SET
72
+ vector = EXCLUDED.vector,
73
+ text_hash = EXCLUDED.text_hash,
74
+ updated_at = EXCLUDED.updated_at`, [entry.id, entry.entryId, entry.collection, vectorStr, entry.textHash, now, now]);
75
+ }
76
+ /**
77
+ * Search for similar vectors using cosine similarity
78
+ */
79
+ async search(vector, options = {}) {
80
+ if (!this.hasVectorSupport) {
81
+ return [];
82
+ }
83
+ const { limit = 10, collection, minSimilarity = 0 } = options;
84
+ const vectorStr = this.vectorToStorage(vector);
85
+ const tableName = this.provider.escapeIdentifier(this.tableName);
86
+ let sql = `
87
+ SELECT id, entry_id, collection,
88
+ 1 - (vector <=> $1::vector) as similarity
89
+ FROM ${tableName}
90
+ WHERE 1 - (vector <=> $1::vector) >= $2
91
+ `;
92
+ const params = [vectorStr, minSimilarity];
93
+ if (collection) {
94
+ sql += ` AND collection = $3`;
95
+ params.push(collection);
96
+ }
97
+ sql += ` ORDER BY vector <=> $1::vector LIMIT $${params.length + 1}`;
98
+ params.push(limit);
99
+ const result = await this.provider.query(sql, params);
100
+ return result.rows.map((row) => ({
101
+ id: row.id,
102
+ entryId: row.entry_id,
103
+ collection: row.collection,
104
+ similarity: row.similarity,
105
+ }));
106
+ }
107
+ /**
108
+ * Create HNSW index for faster search
109
+ */
110
+ async createIndex(indexType = 'hnsw') {
111
+ if (!this.hasVectorSupport) {
112
+ return false;
113
+ }
114
+ const tableName = this.provider.escapeIdentifier(this.tableName);
115
+ const indexName = `idx_${this.tableName}_vector_${indexType}`;
116
+ try {
117
+ if (indexType === 'hnsw') {
118
+ // HNSW index - good for most use cases
119
+ await this.provider.execute(`
120
+ CREATE INDEX IF NOT EXISTS ${indexName}
121
+ ON ${tableName} USING hnsw (vector vector_cosine_ops)
122
+ WITH (m = 16, ef_construction = 64)
123
+ `);
124
+ }
125
+ else if (indexType === 'ivfflat') {
126
+ // IVFFlat index - requires training data
127
+ await this.provider.execute(`
128
+ CREATE INDEX IF NOT EXISTS ${indexName}
129
+ ON ${tableName} USING ivfflat (vector vector_cosine_ops)
130
+ WITH (lists = 100)
131
+ `);
132
+ }
133
+ else {
134
+ this.logger.warn(`Unknown index type: ${indexType}`);
135
+ return false;
136
+ }
137
+ this.logger.info(`Created ${indexType.toUpperCase()} index on vectors table`);
138
+ return true;
139
+ }
140
+ catch (error) {
141
+ this.logger.error(`Failed to create index: ${error}`);
142
+ return false;
143
+ }
144
+ }
145
+ /**
146
+ * Check if vector index exists
147
+ */
148
+ async hasIndex() {
149
+ const result = await this.provider.query(`SELECT indexname FROM pg_indexes
150
+ WHERE tablename = $1 AND indexname LIKE 'idx_%_vector_%'`, [this.tableName]);
151
+ return result.rows.length > 0;
152
+ }
153
+ /**
154
+ * Convert row to VectorEntry
155
+ */
156
+ rowToEntry(row) {
157
+ return {
158
+ id: row.id,
159
+ entryId: row.entry_id,
160
+ collection: row.collection,
161
+ vector: this.storageToVector(row.vector),
162
+ textHash: row.text_hash,
163
+ createdAt: row.created_at,
164
+ updatedAt: row.updated_at,
165
+ };
166
+ }
167
+ /**
168
+ * Convert vector to PostgreSQL format
169
+ */
170
+ vectorToStorage(vector) {
171
+ return `[${vector.join(',')}]`;
172
+ }
173
+ /**
174
+ * Convert PostgreSQL format to vector
175
+ */
176
+ storageToVector(value) {
177
+ if (typeof value === 'string') {
178
+ // Format: [0.1,0.2,0.3]
179
+ return value
180
+ .slice(1, -1)
181
+ .split(',')
182
+ .map((n) => parseFloat(n));
183
+ }
184
+ if (Array.isArray(value)) {
185
+ return value.map((n) => Number(n));
186
+ }
187
+ return [];
188
+ }
189
+ }
190
+ //# sourceMappingURL=pgvector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgvector.js","sourceRoot":"","sources":["../../src/vectors/pgvector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * SQLite-vec Adapter
3
+ *
4
+ * SQLite vector adapter using sqlite-vec extension.
5
+ */
6
+ import type { VectorEntry, VectorSearchOptions, VectorSearchResult } from '../types.js';
7
+ import { BaseVectorAdapter, VectorAdapterOptions } from './adapter.js';
8
+ /**
9
+ * SQLite-vec adapter
10
+ */
11
+ export declare class SQLiteVecAdapter extends BaseVectorAdapter {
12
+ readonly type: "sqlite";
13
+ private hasVectorSupport;
14
+ constructor(options: VectorAdapterOptions);
15
+ /**
16
+ * Check if vectors are supported
17
+ */
18
+ isSupported(): boolean;
19
+ /**
20
+ * Initialize vector storage
21
+ */
22
+ initialize(dimensions: number): Promise<void>;
23
+ /**
24
+ * Store a vector
25
+ */
26
+ store(entry: Omit<VectorEntry, 'createdAt' | 'updatedAt'>): Promise<void>;
27
+ /**
28
+ * Delete by ID
29
+ */
30
+ delete(id: string): Promise<boolean>;
31
+ /**
32
+ * Delete by entry ID
33
+ */
34
+ deleteByEntryId(entryId: string): Promise<number>;
35
+ /**
36
+ * Search for similar vectors
37
+ */
38
+ search(vector: number[], options?: VectorSearchOptions): Promise<VectorSearchResult[]>;
39
+ /**
40
+ * Get vector by ID
41
+ */
42
+ get(id: string): Promise<VectorEntry | null>;
43
+ /**
44
+ * Create index (sqlite-vec handles this automatically)
45
+ */
46
+ createIndex(_indexType?: string): Promise<boolean>;
47
+ /**
48
+ * Check if index exists
49
+ */
50
+ hasIndex(): Promise<boolean>;
51
+ /**
52
+ * Count vectors
53
+ */
54
+ count(collection?: string): Promise<number>;
55
+ /**
56
+ * Convert row to VectorEntry
57
+ */
58
+ protected rowToEntry(row: Record<string, unknown>): VectorEntry;
59
+ /**
60
+ * Convert vector to storage format
61
+ */
62
+ protected vectorToStorage(vector: number[]): string;
63
+ /**
64
+ * Convert storage format to vector
65
+ */
66
+ protected storageToVector(value: unknown): number[];
67
+ /**
68
+ * Convert vector to BLOB (float32 array)
69
+ */
70
+ private vectorToBlob;
71
+ /**
72
+ * Convert BLOB to vector
73
+ */
74
+ private blobToVector;
75
+ /**
76
+ * Compute cosine similarity between two vectors
77
+ */
78
+ private cosineSimilarity;
79
+ }
80
+ //# sourceMappingURL=sqlite-vec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec.d.ts","sourceRoot":"","sources":["../../src/vectors/sqlite-vec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEvE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,OAAO,EAAE,oBAAoB;IAIzC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEnD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C/E;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB1C;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BvD;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA4FhC;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAclD;;OAEG;IACG,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAKlC;;OAEG;IACG,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAejD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAoB/D;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAInD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE;IAanD;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}