@traqr/memory 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +6 -0
- package/dist/lib/client.js +23 -1
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/embeddings.d.ts +40 -12
- package/dist/lib/embeddings.js +340 -160
- package/dist/lib/embeddings.js.map +1 -1
- package/dist/lib/entity-pipeline.js +4 -15
- package/dist/lib/entity-pipeline.js.map +1 -1
- package/dist/lib/memory.js +4 -30
- package/dist/lib/memory.js.map +1 -1
- package/dist/lib/retrieval.d.ts +2 -3
- package/dist/lib/retrieval.js +0 -5
- package/dist/lib/retrieval.js.map +1 -1
- package/dist/routes/entity-cron.js +2 -7
- package/dist/routes/entity-cron.js.map +1 -1
- package/dist/vectordb/converters.d.ts +58 -0
- package/dist/vectordb/converters.js +57 -0
- package/dist/vectordb/converters.js.map +1 -0
- package/dist/vectordb/index.d.ts +6 -2
- package/dist/vectordb/index.js +30 -13
- package/dist/vectordb/index.js.map +1 -1
- package/dist/vectordb/postgres.d.ts +76 -0
- package/dist/vectordb/postgres.js +574 -0
- package/dist/vectordb/postgres.js.map +1 -0
- package/dist/vectordb/supabase.d.ts +10 -1
- package/dist/vectordb/supabase.js +88 -52
- package/dist/vectordb/supabase.js.map +1 -1
- package/dist/vectordb/types.d.ts +58 -2
- package/dist/vectordb/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres VectorDB Provider
|
|
3
|
+
*
|
|
4
|
+
* Implementation of VectorDBProvider using raw pg wire protocol.
|
|
5
|
+
* Calls the same SQL functions as SupabaseVectorProvider, but via
|
|
6
|
+
* parameterized queries instead of PostgREST RPC.
|
|
7
|
+
*
|
|
8
|
+
* Requires: npm install pg (dynamic import — not a hard dependency)
|
|
9
|
+
*/
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
|
+
import { getUserId, getProjectId, getTableName, getMemoryConfig } from '../lib/client.js';
|
|
12
|
+
import { generateEmbedding, formatEmbeddingForPgVector } from '../lib/embeddings.js';
|
|
13
|
+
import { rowToMemory, rowToSearchResult } from './converters.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Pool Management (lazy, dynamic import)
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
let _pool = null;
|
|
18
|
+
async function getPool() {
|
|
19
|
+
if (_pool)
|
|
20
|
+
return _pool;
|
|
21
|
+
try {
|
|
22
|
+
const pg = await Function('return import("pg")')();
|
|
23
|
+
const Pool = pg.default?.Pool || pg.Pool;
|
|
24
|
+
const config = getMemoryConfig();
|
|
25
|
+
_pool = new Pool({
|
|
26
|
+
connectionString: config.databaseUrl,
|
|
27
|
+
max: 5,
|
|
28
|
+
idleTimeoutMillis: 30000,
|
|
29
|
+
});
|
|
30
|
+
return _pool;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new Error('Raw Postgres requires the pg package.\n' +
|
|
34
|
+
'Install it: npm install pg\n' +
|
|
35
|
+
'Then set DATABASE_URL to your Postgres 15+ connection string with pgvector enabled.');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Reset pool (for testing or reconfiguration) */
|
|
39
|
+
export function resetPostgresPool() {
|
|
40
|
+
if (_pool) {
|
|
41
|
+
_pool.end().catch(() => { });
|
|
42
|
+
_pool = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Query Helpers
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
async function query(sql, params) {
|
|
49
|
+
const pool = await getPool();
|
|
50
|
+
const result = await pool.query(sql, params);
|
|
51
|
+
return result.rows;
|
|
52
|
+
}
|
|
53
|
+
async function queryOne(sql, params) {
|
|
54
|
+
const rows = await query(sql, params);
|
|
55
|
+
return rows[0] || null;
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// PostgresVectorProvider
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
export class PostgresVectorProvider {
|
|
61
|
+
// ============================================================
|
|
62
|
+
// CORE OPERATIONS
|
|
63
|
+
// ============================================================
|
|
64
|
+
async store(input, domainId) {
|
|
65
|
+
const projectId = domainId || getProjectId();
|
|
66
|
+
const table = getTableName();
|
|
67
|
+
let embeddingStr;
|
|
68
|
+
let embeddingModel = 'text-embedding-3-small';
|
|
69
|
+
let embeddingModelVersion = '1';
|
|
70
|
+
if (input.precomputedEmbedding) {
|
|
71
|
+
embeddingStr = input.precomputedEmbedding;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const result = await generateEmbedding(input.content);
|
|
75
|
+
embeddingStr = formatEmbeddingForPgVector(result.embedding);
|
|
76
|
+
embeddingModel = result.model;
|
|
77
|
+
embeddingModelVersion = result.modelVersion;
|
|
78
|
+
}
|
|
79
|
+
const row = await queryOne(`INSERT INTO ${table} (
|
|
80
|
+
user_id, project_id, content, summary, category, tags, context_tags,
|
|
81
|
+
embedding, embedding_model, embedding_model_version,
|
|
82
|
+
source_type, source_ref, source_project, original_confidence,
|
|
83
|
+
related_to, is_contradiction, is_universal, agent_type,
|
|
84
|
+
durability, expires_at, is_portable, domain, topic,
|
|
85
|
+
memory_type, source_tool, valid_at, forget_after, is_latest, is_forgotten
|
|
86
|
+
) VALUES (
|
|
87
|
+
$1, $2, $3, $4, $5, $6, $7,
|
|
88
|
+
$8::vector, $9, $10,
|
|
89
|
+
$11, $12, $13, $14,
|
|
90
|
+
$15, $16, $17, $18,
|
|
91
|
+
$19, $20, $21, $22, $23,
|
|
92
|
+
$24, $25, $26, $27, $28, $29
|
|
93
|
+
) RETURNING *`, [
|
|
94
|
+
getUserId(), projectId, input.content, input.summary || null,
|
|
95
|
+
input.category || null, input.tags || [], input.contextTags || [],
|
|
96
|
+
embeddingStr, embeddingModel, embeddingModelVersion,
|
|
97
|
+
input.sourceType, input.sourceRef || null, input.sourceProject || 'default',
|
|
98
|
+
input.confidence ?? 1.0,
|
|
99
|
+
input.relatedTo || [], input.isContradiction || false,
|
|
100
|
+
input.isUniversal || false, input.agentType || null,
|
|
101
|
+
input.durability || 'permanent',
|
|
102
|
+
input.expiresAt ? input.expiresAt.toISOString() : null,
|
|
103
|
+
true, input.domain || null, input.topic || null,
|
|
104
|
+
input.memoryType || null, input.sourceTool || null,
|
|
105
|
+
input.validAt ? input.validAt.toISOString() : new Date().toISOString(),
|
|
106
|
+
input.forgetAfter ? input.forgetAfter.toISOString() : null,
|
|
107
|
+
true, false,
|
|
108
|
+
]);
|
|
109
|
+
if (!row)
|
|
110
|
+
throw new Error('Failed to store memory: no row returned');
|
|
111
|
+
return rowToMemory(row);
|
|
112
|
+
}
|
|
113
|
+
async search(queryText, options = {}) {
|
|
114
|
+
const embeddingStr = options.precomputedEmbedding
|
|
115
|
+
?? formatEmbeddingForPgVector((await generateEmbedding(queryText)).embedding);
|
|
116
|
+
if (options.includeUniversal || options.sourceProject || options.agentType) {
|
|
117
|
+
const rows = await query('SELECT * FROM search_memories_cross_project($1::vector, $2, $3, $4, $5, $6, $7, $8, $9, $10)', [
|
|
118
|
+
embeddingStr,
|
|
119
|
+
options.domainId || null,
|
|
120
|
+
options.sourceProject || null,
|
|
121
|
+
options.category || null,
|
|
122
|
+
options.tags || null,
|
|
123
|
+
options.includeArchived || false,
|
|
124
|
+
options.includeUniversal ?? true,
|
|
125
|
+
options.agentType || null,
|
|
126
|
+
options.limit || 10,
|
|
127
|
+
options.similarityThreshold || 0.3,
|
|
128
|
+
]);
|
|
129
|
+
return rows.map((row) => rowToSearchResult(row));
|
|
130
|
+
}
|
|
131
|
+
const rows = await query('SELECT * FROM search_memories($1::vector, $2, $3, $4, $5, $6, $7, $8)', [
|
|
132
|
+
embeddingStr,
|
|
133
|
+
options.domainId || null,
|
|
134
|
+
options.category || null,
|
|
135
|
+
options.tags || null,
|
|
136
|
+
options.includeArchived || false,
|
|
137
|
+
options.limit || 10,
|
|
138
|
+
options.similarityThreshold || 0.3,
|
|
139
|
+
options.latestOnly ?? true,
|
|
140
|
+
]);
|
|
141
|
+
return rows.map((row) => rowToSearchResult(row));
|
|
142
|
+
}
|
|
143
|
+
async getById(id) {
|
|
144
|
+
const row = await queryOne(`SELECT * FROM ${getTableName()} WHERE id = $1`, [id]);
|
|
145
|
+
if (!row)
|
|
146
|
+
return null;
|
|
147
|
+
return rowToMemory(row);
|
|
148
|
+
}
|
|
149
|
+
async update(id, updates) {
|
|
150
|
+
const table = getTableName();
|
|
151
|
+
const current = await this.getById(id);
|
|
152
|
+
if (!current)
|
|
153
|
+
throw new Error(`Memory not found: ${id}`);
|
|
154
|
+
const sets = ['updated_at = NOW()'];
|
|
155
|
+
const params = [];
|
|
156
|
+
let paramIdx = 1;
|
|
157
|
+
if (updates.content !== undefined) {
|
|
158
|
+
const embResult = await generateEmbedding(updates.content);
|
|
159
|
+
sets.push(`content = $${paramIdx++}`);
|
|
160
|
+
params.push(updates.content);
|
|
161
|
+
sets.push(`embedding = $${paramIdx}::vector`);
|
|
162
|
+
params.push(formatEmbeddingForPgVector(embResult.embedding));
|
|
163
|
+
paramIdx++;
|
|
164
|
+
sets.push(`embedding_model = $${paramIdx++}`);
|
|
165
|
+
params.push(embResult.model);
|
|
166
|
+
sets.push(`embedding_model_version = $${paramIdx++}`);
|
|
167
|
+
params.push(embResult.modelVersion);
|
|
168
|
+
}
|
|
169
|
+
if (updates.summary !== undefined) {
|
|
170
|
+
sets.push(`summary = $${paramIdx++}`);
|
|
171
|
+
params.push(updates.summary);
|
|
172
|
+
}
|
|
173
|
+
if (updates.category !== undefined) {
|
|
174
|
+
sets.push(`category = $${paramIdx++}`);
|
|
175
|
+
params.push(updates.category);
|
|
176
|
+
}
|
|
177
|
+
if (updates.tags !== undefined) {
|
|
178
|
+
sets.push(`tags = $${paramIdx++}`);
|
|
179
|
+
params.push(updates.tags);
|
|
180
|
+
}
|
|
181
|
+
if (updates.contextTags !== undefined) {
|
|
182
|
+
sets.push(`context_tags = $${paramIdx++}`);
|
|
183
|
+
params.push(updates.contextTags);
|
|
184
|
+
}
|
|
185
|
+
if (updates.confidence !== undefined) {
|
|
186
|
+
sets.push(`original_confidence = $${paramIdx++}`);
|
|
187
|
+
params.push(updates.confidence);
|
|
188
|
+
}
|
|
189
|
+
if (updates.relatedTo !== undefined) {
|
|
190
|
+
sets.push(`related_to = $${paramIdx++}`);
|
|
191
|
+
params.push(updates.relatedTo);
|
|
192
|
+
}
|
|
193
|
+
if (updates.isContradiction !== undefined) {
|
|
194
|
+
sets.push(`is_contradiction = $${paramIdx++}`);
|
|
195
|
+
params.push(updates.isContradiction);
|
|
196
|
+
}
|
|
197
|
+
// Write history if content changed
|
|
198
|
+
if (updates.content && updates.content !== current.content) {
|
|
199
|
+
await query(`INSERT INTO traqr_memory_history (memory_id, previous_content, previous_confidence, change_reason)
|
|
200
|
+
VALUES ($1, $2, $3, $4)`, [id, current.content, current.originalConfidence, updates.changeReason || 'Content updated']);
|
|
201
|
+
}
|
|
202
|
+
params.push(id);
|
|
203
|
+
const row = await queryOne(`UPDATE ${table} SET ${sets.join(', ')} WHERE id = $${paramIdx} RETURNING *`, params);
|
|
204
|
+
if (!row)
|
|
205
|
+
throw new Error(`Failed to update memory: ${id}`);
|
|
206
|
+
return rowToMemory(row);
|
|
207
|
+
}
|
|
208
|
+
async delete(id) {
|
|
209
|
+
await query(`DELETE FROM ${getTableName()} WHERE id = $1`, [id]);
|
|
210
|
+
}
|
|
211
|
+
async validate(id) {
|
|
212
|
+
const row = await queryOne(`UPDATE ${getTableName()} SET last_validated = NOW(), updated_at = NOW()
|
|
213
|
+
WHERE id = $1 RETURNING *`, [id]);
|
|
214
|
+
if (!row)
|
|
215
|
+
throw new Error(`Failed to validate memory: ${id}`);
|
|
216
|
+
return rowToMemory(row);
|
|
217
|
+
}
|
|
218
|
+
// ============================================================
|
|
219
|
+
// ARCHIVE OPERATIONS
|
|
220
|
+
// ============================================================
|
|
221
|
+
async archive(id, reason) {
|
|
222
|
+
const row = await queryOne(`UPDATE ${getTableName()} SET is_archived = true, archived_at = NOW(),
|
|
223
|
+
archive_reason = $2, updated_at = NOW()
|
|
224
|
+
WHERE id = $1 RETURNING *`, [id, reason || 'manual']);
|
|
225
|
+
if (!row)
|
|
226
|
+
throw new Error(`Failed to archive memory: ${id}`);
|
|
227
|
+
return rowToMemory(row);
|
|
228
|
+
}
|
|
229
|
+
async unarchive(id) {
|
|
230
|
+
const row = await queryOne(`UPDATE ${getTableName()} SET is_archived = false, archived_at = NULL,
|
|
231
|
+
archive_reason = NULL, updated_at = NOW()
|
|
232
|
+
WHERE id = $1 RETURNING *`, [id]);
|
|
233
|
+
if (!row)
|
|
234
|
+
throw new Error(`Failed to unarchive memory: ${id}`);
|
|
235
|
+
return rowToMemory(row);
|
|
236
|
+
}
|
|
237
|
+
// ============================================================
|
|
238
|
+
// BULK OPERATIONS
|
|
239
|
+
// ============================================================
|
|
240
|
+
async exportAll(domainId) {
|
|
241
|
+
const table = getTableName();
|
|
242
|
+
const sql = domainId
|
|
243
|
+
? `SELECT * FROM ${table} WHERE project_id = $1`
|
|
244
|
+
: `SELECT * FROM ${table}`;
|
|
245
|
+
const rows = await query(sql, domainId ? [domainId] : []);
|
|
246
|
+
return rows.map((row) => ({
|
|
247
|
+
id: row.id,
|
|
248
|
+
content: row.content,
|
|
249
|
+
summary: row.summary ?? undefined,
|
|
250
|
+
category: row.category,
|
|
251
|
+
tags: row.tags || [],
|
|
252
|
+
contextTags: row.context_tags || [],
|
|
253
|
+
sourceType: row.source_type,
|
|
254
|
+
sourceRef: row.source_ref ?? undefined,
|
|
255
|
+
sourceProject: row.source_project,
|
|
256
|
+
originalConfidence: row.original_confidence,
|
|
257
|
+
lastValidated: row.last_validated,
|
|
258
|
+
relatedTo: row.related_to || [],
|
|
259
|
+
isContradiction: row.is_contradiction,
|
|
260
|
+
isArchived: row.is_archived,
|
|
261
|
+
archiveReason: row.archive_reason ?? undefined,
|
|
262
|
+
durability: row.durability,
|
|
263
|
+
expiresAt: row.expires_at ?? undefined,
|
|
264
|
+
embeddingModel: row.embedding_model,
|
|
265
|
+
embeddingModelVersion: row.embedding_model_version,
|
|
266
|
+
createdAt: row.created_at,
|
|
267
|
+
updatedAt: row.updated_at,
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
async importBulk(memories, domainId) {
|
|
271
|
+
const table = getTableName();
|
|
272
|
+
let importedCount = 0;
|
|
273
|
+
const BATCH_SIZE = 10;
|
|
274
|
+
for (let i = 0; i < memories.length; i += BATCH_SIZE) {
|
|
275
|
+
const batch = memories.slice(i, i + BATCH_SIZE);
|
|
276
|
+
const embeddings = await Promise.all(batch.map(m => generateEmbedding(m.content)));
|
|
277
|
+
for (let j = 0; j < batch.length; j++) {
|
|
278
|
+
const m = batch[j];
|
|
279
|
+
const emb = embeddings[j];
|
|
280
|
+
try {
|
|
281
|
+
await query(`INSERT INTO ${table} (
|
|
282
|
+
user_id, project_id, content, summary, category, tags, context_tags,
|
|
283
|
+
embedding, embedding_model, embedding_model_version,
|
|
284
|
+
source_type, source_ref, source_project, original_confidence,
|
|
285
|
+
last_validated, related_to, is_contradiction, is_archived,
|
|
286
|
+
archive_reason, created_at, updated_at, is_portable
|
|
287
|
+
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8::vector,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22)`, [
|
|
288
|
+
getUserId(), domainId, m.content, m.summary || null,
|
|
289
|
+
m.category || null, m.tags, m.contextTags,
|
|
290
|
+
formatEmbeddingForPgVector(emb.embedding), emb.model, emb.modelVersion,
|
|
291
|
+
m.sourceType, m.sourceRef || null, m.sourceProject,
|
|
292
|
+
m.originalConfidence, m.lastValidated, m.relatedTo,
|
|
293
|
+
m.isContradiction, m.isArchived, m.archiveReason || null,
|
|
294
|
+
m.createdAt, m.updatedAt, true,
|
|
295
|
+
]);
|
|
296
|
+
importedCount++;
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
console.error(`[VectorDB] Error importing memory ${i + j}:`, err instanceof Error ? err.message : err);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return importedCount;
|
|
304
|
+
}
|
|
305
|
+
// ============================================================
|
|
306
|
+
// DOMAIN MANAGEMENT
|
|
307
|
+
// ============================================================
|
|
308
|
+
async createDomain(name, description, userId) {
|
|
309
|
+
const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, '-');
|
|
310
|
+
const row = await queryOne(`INSERT INTO traqr_projects (user_id, name, slug, description, is_active)
|
|
311
|
+
VALUES ($1, $2, $3, $4, true) RETURNING *`, [userId || getUserId(), name, slug, description || null]);
|
|
312
|
+
if (!row)
|
|
313
|
+
throw new Error(`Failed to create domain: ${name}`);
|
|
314
|
+
return {
|
|
315
|
+
id: row.id,
|
|
316
|
+
userId: row.user_id,
|
|
317
|
+
name: row.name,
|
|
318
|
+
description: row.description ?? undefined,
|
|
319
|
+
isShareable: row.is_active,
|
|
320
|
+
createdAt: new Date(row.created_at),
|
|
321
|
+
updatedAt: new Date(row.last_activity || row.created_at),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
async getDomain(name) {
|
|
325
|
+
const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, '-');
|
|
326
|
+
const row = await queryOne(`SELECT * FROM traqr_projects WHERE slug = $1`, [slug]);
|
|
327
|
+
if (!row)
|
|
328
|
+
return null;
|
|
329
|
+
return {
|
|
330
|
+
id: row.id,
|
|
331
|
+
userId: row.user_id,
|
|
332
|
+
name: row.name,
|
|
333
|
+
description: row.description ?? undefined,
|
|
334
|
+
isShareable: row.is_active,
|
|
335
|
+
createdAt: new Date(row.created_at),
|
|
336
|
+
updatedAt: new Date(row.last_activity || row.created_at),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
async getDefaultDomain() {
|
|
340
|
+
const row = await queryOne(`SELECT * FROM traqr_projects WHERE id = $1`, [getProjectId()]);
|
|
341
|
+
if (!row)
|
|
342
|
+
throw new Error('Failed to get default domain');
|
|
343
|
+
return {
|
|
344
|
+
id: row.id,
|
|
345
|
+
userId: row.user_id,
|
|
346
|
+
name: row.name,
|
|
347
|
+
description: row.description ?? undefined,
|
|
348
|
+
isShareable: row.is_active,
|
|
349
|
+
createdAt: new Date(row.created_at),
|
|
350
|
+
updatedAt: new Date(row.last_activity || row.created_at),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
// ============================================================
|
|
354
|
+
// v2 SEARCH STRATEGIES
|
|
355
|
+
// ============================================================
|
|
356
|
+
async bm25Search(queryText, options) {
|
|
357
|
+
const rows = await query('SELECT * FROM bm25_search($1, $2, $3, $4, $5, $6)', [
|
|
358
|
+
queryText,
|
|
359
|
+
options?.projectId || null,
|
|
360
|
+
options?.domain || null,
|
|
361
|
+
options?.category || null,
|
|
362
|
+
options?.limit || 20,
|
|
363
|
+
options?.minScore || 0.01,
|
|
364
|
+
]);
|
|
365
|
+
return rows.map((row) => ({
|
|
366
|
+
id: row.id,
|
|
367
|
+
content: row.content,
|
|
368
|
+
summary: row.summary ?? undefined,
|
|
369
|
+
bm25Score: row.bm25_score,
|
|
370
|
+
domain: row.domain ?? undefined,
|
|
371
|
+
category: row.category ?? undefined,
|
|
372
|
+
memoryType: row.memory_type ?? undefined,
|
|
373
|
+
}));
|
|
374
|
+
}
|
|
375
|
+
async temporalSearch(queryText, dateStart, dateEnd, options) {
|
|
376
|
+
const embeddingStr = options?.precomputedEmbedding
|
|
377
|
+
?? formatEmbeddingForPgVector((await generateEmbedding(queryText)).embedding);
|
|
378
|
+
const rows = await query('SELECT * FROM temporal_search($1::vector, $2, $3, $4, $5, $6)', [
|
|
379
|
+
embeddingStr,
|
|
380
|
+
dateStart.toISOString(),
|
|
381
|
+
dateEnd.toISOString(),
|
|
382
|
+
options?.projectId || null,
|
|
383
|
+
options?.similarityThreshold || 0.3,
|
|
384
|
+
options?.limit || 20,
|
|
385
|
+
]);
|
|
386
|
+
return rows.map((row) => ({
|
|
387
|
+
id: row.id,
|
|
388
|
+
content: row.content,
|
|
389
|
+
summary: row.summary ?? undefined,
|
|
390
|
+
similarity: row.similarity,
|
|
391
|
+
temporalProximity: row.temporal_proximity,
|
|
392
|
+
validAt: new Date(row.valid_at),
|
|
393
|
+
}));
|
|
394
|
+
}
|
|
395
|
+
async graphSearch(seedIds, options) {
|
|
396
|
+
const rows = await query('SELECT * FROM graph_search($1, $2, $3, $4)', [
|
|
397
|
+
seedIds,
|
|
398
|
+
options?.edgeTypes || ['updates', 'extends', 'derives', 'related'],
|
|
399
|
+
options?.maxDepth || 2,
|
|
400
|
+
options?.limit || 20,
|
|
401
|
+
]);
|
|
402
|
+
return rows.map((row) => ({
|
|
403
|
+
id: row.id,
|
|
404
|
+
content: row.content,
|
|
405
|
+
summary: row.summary ?? undefined,
|
|
406
|
+
graphScore: row.graph_score,
|
|
407
|
+
edgeType: row.edge_type,
|
|
408
|
+
depth: row.depth,
|
|
409
|
+
}));
|
|
410
|
+
}
|
|
411
|
+
// ============================================================
|
|
412
|
+
// LIFECYCLE
|
|
413
|
+
// ============================================================
|
|
414
|
+
async invalidate(id) {
|
|
415
|
+
await query(`UPDATE ${getTableName()} SET invalid_at = NOW(), is_latest = false, updated_at = NOW()
|
|
416
|
+
WHERE id = $1`, [id]);
|
|
417
|
+
}
|
|
418
|
+
async supersede(id) {
|
|
419
|
+
await query(`UPDATE ${getTableName()} SET is_latest = false, updated_at = NOW()
|
|
420
|
+
WHERE id = $1`, [id]);
|
|
421
|
+
}
|
|
422
|
+
// ============================================================
|
|
423
|
+
// ENTITY OPERATIONS
|
|
424
|
+
// ============================================================
|
|
425
|
+
async findEntityByName(name, entityType) {
|
|
426
|
+
return queryOne(`SELECT * FROM memory_entities
|
|
427
|
+
WHERE user_id = $1 AND LOWER(name) = LOWER($2) AND entity_type = $3 AND is_archived = false
|
|
428
|
+
LIMIT 1`, [getUserId(), name.trim(), entityType]);
|
|
429
|
+
}
|
|
430
|
+
async findEntityByNameFuzzy(name, entityType) {
|
|
431
|
+
const escaped = name.trim().replace(/[%_]/g, '\\$&');
|
|
432
|
+
return queryOne(`SELECT * FROM memory_entities
|
|
433
|
+
WHERE user_id = $1 AND name ILIKE $2 AND entity_type = $3 AND is_archived = false
|
|
434
|
+
LIMIT 1`, [getUserId(), `%${escaped}%`, entityType]);
|
|
435
|
+
}
|
|
436
|
+
async findEntityByEmbedding(embeddingStr, entityType, threshold = 0.85) {
|
|
437
|
+
const rows = await query('SELECT * FROM search_entities($1::vector, $2, $3, $4, $5)', [embeddingStr, getUserId(), entityType, threshold, 1]);
|
|
438
|
+
return rows[0] || null;
|
|
439
|
+
}
|
|
440
|
+
async createEntity(entity) {
|
|
441
|
+
try {
|
|
442
|
+
const row = await queryOne(`INSERT INTO memory_entities (user_id, name, entity_type, embedding, mentions_count, first_seen_at, last_seen_at)
|
|
443
|
+
VALUES ($1, $2, $3, $4::vector, 1, NOW(), NOW()) RETURNING *`, [entity.userId || getUserId(), entity.name, entity.entityType, entity.embedding || null]);
|
|
444
|
+
return row;
|
|
445
|
+
}
|
|
446
|
+
catch (err) {
|
|
447
|
+
if (err?.code === '23505') {
|
|
448
|
+
return this.findEntityByName(entity.name, entity.entityType);
|
|
449
|
+
}
|
|
450
|
+
console.warn('[VectorDB] Error creating entity:', err?.message || err);
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
async incrementEntityMentions(entityId) {
|
|
455
|
+
await query(`UPDATE memory_entities SET mentions_count = mentions_count + 1, last_seen_at = NOW()
|
|
456
|
+
WHERE id = $1`, [entityId]);
|
|
457
|
+
}
|
|
458
|
+
async linkMemoryToEntity(memoryId, entityId, role = 'mentions') {
|
|
459
|
+
try {
|
|
460
|
+
await query(`INSERT INTO memory_entity_links (memory_id, entity_id, role) VALUES ($1, $2, $3)`, [memoryId, entityId, role]);
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
if (err?.code !== '23505') { // ignore duplicate links
|
|
464
|
+
console.warn('[VectorDB] Error linking memory to entity:', err?.message || err);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
async findEntitiesByNames(names) {
|
|
469
|
+
if (names.length === 0)
|
|
470
|
+
return [];
|
|
471
|
+
const lowerNames = names.map(n => n.toLowerCase().trim()).filter(Boolean);
|
|
472
|
+
const placeholders = lowerNames.map((_, i) => `$${i + 3}`).join(', ');
|
|
473
|
+
const rows = await query(`SELECT id, name FROM memory_entities
|
|
474
|
+
WHERE user_id = $1 AND is_archived = false AND LOWER(name) IN (${placeholders})`, [getUserId(), ...lowerNames]);
|
|
475
|
+
if (rows.length > 0)
|
|
476
|
+
return rows.map((d) => ({ id: d.id, name: d.name }));
|
|
477
|
+
// Fallback: ILIKE for case-insensitive matching
|
|
478
|
+
const results = [];
|
|
479
|
+
for (const name of lowerNames.slice(0, 10)) {
|
|
480
|
+
const row = await queryOne(`SELECT id, name FROM memory_entities
|
|
481
|
+
WHERE user_id = $1 AND is_archived = false AND name ILIKE $2
|
|
482
|
+
LIMIT 1`, [getUserId(), name]);
|
|
483
|
+
if (row)
|
|
484
|
+
results.push({ id: row.id, name: row.name });
|
|
485
|
+
}
|
|
486
|
+
return results;
|
|
487
|
+
}
|
|
488
|
+
async findOrphanedEntities() {
|
|
489
|
+
const entities = await query(`SELECT id FROM memory_entities WHERE user_id = $1 AND is_archived = false`, [getUserId()]);
|
|
490
|
+
const orphaned = [];
|
|
491
|
+
for (const entity of entities) {
|
|
492
|
+
const link = await queryOne(`SELECT 1 FROM memory_entity_links WHERE entity_id = $1 LIMIT 1`, [entity.id]);
|
|
493
|
+
if (!link)
|
|
494
|
+
orphaned.push(entity.id);
|
|
495
|
+
}
|
|
496
|
+
return orphaned;
|
|
497
|
+
}
|
|
498
|
+
async archiveEntities(ids) {
|
|
499
|
+
if (ids.length === 0)
|
|
500
|
+
return 0;
|
|
501
|
+
const placeholders = ids.map((_, i) => `$${i + 1}`).join(', ');
|
|
502
|
+
await query(`UPDATE memory_entities SET is_archived = true WHERE id IN (${placeholders})`, ids);
|
|
503
|
+
return ids.length;
|
|
504
|
+
}
|
|
505
|
+
// ============================================================
|
|
506
|
+
// UTILITY OPERATIONS
|
|
507
|
+
// ============================================================
|
|
508
|
+
async browse(options) {
|
|
509
|
+
const table = getTableName();
|
|
510
|
+
const conditions = ['is_archived = false', 'is_forgotten = false'];
|
|
511
|
+
const params = [];
|
|
512
|
+
let paramIdx = 1;
|
|
513
|
+
if (options?.domain) {
|
|
514
|
+
conditions.push(`domain = $${paramIdx++}`);
|
|
515
|
+
params.push(options.domain);
|
|
516
|
+
}
|
|
517
|
+
if (options?.category) {
|
|
518
|
+
conditions.push(`category = $${paramIdx++}`);
|
|
519
|
+
params.push(options.category);
|
|
520
|
+
}
|
|
521
|
+
const limit = options?.limit || 20;
|
|
522
|
+
params.push(limit);
|
|
523
|
+
const rows = await query(`SELECT id, domain, category, content, summary FROM ${table}
|
|
524
|
+
WHERE ${conditions.join(' AND ')}
|
|
525
|
+
ORDER BY created_at DESC LIMIT $${paramIdx}`, params);
|
|
526
|
+
return rows.map((r) => ({
|
|
527
|
+
id: r.id,
|
|
528
|
+
domain: r.domain ?? undefined,
|
|
529
|
+
category: r.category ?? undefined,
|
|
530
|
+
content: r.content,
|
|
531
|
+
summary: r.summary ?? undefined,
|
|
532
|
+
}));
|
|
533
|
+
}
|
|
534
|
+
async forget(id) {
|
|
535
|
+
await query(`UPDATE ${getTableName()} SET is_forgotten = true, forgotten_at = NOW(), updated_at = NOW()
|
|
536
|
+
WHERE id = $1`, [id]);
|
|
537
|
+
}
|
|
538
|
+
async createRelationship(sourceId, targetId, edgeType, metadata = {}) {
|
|
539
|
+
try {
|
|
540
|
+
const row = await queryOne(`INSERT INTO memory_relationships (source_memory_id, target_memory_id, edge_type, metadata)
|
|
541
|
+
VALUES ($1, $2, $3, $4) RETURNING id`, [sourceId, targetId, edgeType, JSON.stringify(metadata)]);
|
|
542
|
+
return row?.id || null;
|
|
543
|
+
}
|
|
544
|
+
catch (err) {
|
|
545
|
+
if (err?.code === '23505')
|
|
546
|
+
return null; // duplicate
|
|
547
|
+
console.warn('[VectorDB] createRelationship error:', err?.message || err);
|
|
548
|
+
return null;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
async countEntityMentions(name, userId) {
|
|
552
|
+
const row = await queryOne('SELECT count_entity_mentions($1, $2) as count', [name, userId]);
|
|
553
|
+
return row?.count ?? 0;
|
|
554
|
+
}
|
|
555
|
+
async schemaVersion() {
|
|
556
|
+
try {
|
|
557
|
+
const row = await queryOne('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1');
|
|
558
|
+
return row?.version ?? null;
|
|
559
|
+
}
|
|
560
|
+
catch {
|
|
561
|
+
return null;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
async ping() {
|
|
565
|
+
try {
|
|
566
|
+
await queryOne('SELECT 1 as ok');
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
catch {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
//# sourceMappingURL=postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/vectordb/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implementation of VectorDBProvider using Supabase with pgvector.
|
|
5
5
|
* All memory operations go through the configured Supabase instance.
|
|
6
6
|
*/
|
|
7
|
-
import type { VectorDBProvider, Memory, MemoryInput, MemorySearchResult, MemoryUpdate, MemoryExport, MemoryDomain, SearchOptions, BM25SearchResult, TemporalSearchResult, GraphSearchResult } from './types.js';
|
|
7
|
+
import type { VectorDBProvider, Memory, MemoryInput, MemorySearchResult, MemoryUpdate, MemoryExport, MemoryDomain, SearchOptions, BrowseResult, BM25SearchResult, TemporalSearchResult, GraphSearchResult } from './types.js';
|
|
8
8
|
export declare class SupabaseVectorProvider implements VectorDBProvider {
|
|
9
9
|
store(input: MemoryInput, domainId?: string): Promise<Memory>;
|
|
10
10
|
search(query: string, options?: SearchOptions & {
|
|
@@ -58,5 +58,14 @@ export declare class SupabaseVectorProvider implements VectorDBProvider {
|
|
|
58
58
|
}[]>;
|
|
59
59
|
findOrphanedEntities(): Promise<string[]>;
|
|
60
60
|
archiveEntities(ids: string[]): Promise<number>;
|
|
61
|
+
browse(options?: {
|
|
62
|
+
domain?: string;
|
|
63
|
+
category?: string;
|
|
64
|
+
limit?: number;
|
|
65
|
+
}): Promise<BrowseResult[]>;
|
|
66
|
+
forget(id: string): Promise<void>;
|
|
67
|
+
createRelationship(sourceId: string, targetId: string, edgeType: string, metadata?: Record<string, unknown>): Promise<string | null>;
|
|
68
|
+
countEntityMentions(name: string, userId: string): Promise<number>;
|
|
69
|
+
schemaVersion(): Promise<number | null>;
|
|
61
70
|
ping(): Promise<boolean>;
|
|
62
71
|
}
|