@melra/storage-sqlite 0.3.0-alpha.3

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.js ADDED
@@ -0,0 +1,611 @@
1
+ // Copyright 2026 XAGI Labs Private Limited
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { mkdirSync } from "node:fs";
4
+ import { dirname } from "node:path";
5
+ import { DatabaseSync } from "node:sqlite";
6
+ import { EncryptedPayloadSchema, WorkflowDefinitionSchema, WorkflowEventSchema, WorkflowRunSchema, WorkflowSnapshotSchema, } from "@melra/protocol";
7
+ function toMemoryRecord(row) {
8
+ return {
9
+ id: row.id,
10
+ scope: row.scope,
11
+ key: row.key,
12
+ value: row.value,
13
+ source: row.source,
14
+ confidence: row.confidence,
15
+ tags: JSON.parse(row.tags),
16
+ ...(row.speaker === null ? {} : { speaker: row.speaker }),
17
+ ...(row.episodeId === null ? {} : { episodeId: row.episodeId }),
18
+ ...(row.sequence === null ? {} : { sequence: row.sequence }),
19
+ ...(row.expiresAt === null ? {} : { expiresAt: row.expiresAt }),
20
+ ...(row.supersedesId === null ? {} : { supersedesId: row.supersedesId }),
21
+ ...(row.supersededBy === null ? {} : { supersededBy: row.supersededBy }),
22
+ createdAt: row.createdAt,
23
+ updatedAt: row.updatedAt,
24
+ };
25
+ }
26
+ function parseStored(data, schema, error) {
27
+ try {
28
+ return schema.parse(JSON.parse(data));
29
+ }
30
+ catch {
31
+ throw new Error(error);
32
+ }
33
+ }
34
+ export class SqliteStore {
35
+ path;
36
+ database;
37
+ constructor(path) {
38
+ this.path = path;
39
+ if (path !== ":memory:")
40
+ mkdirSync(dirname(path), { recursive: true });
41
+ this.database = new DatabaseSync(path);
42
+ this.database.exec("PRAGMA busy_timeout = 5000");
43
+ this.database.exec("PRAGMA journal_mode = WAL");
44
+ this.database.exec("PRAGMA foreign_keys = ON");
45
+ this.migrate();
46
+ }
47
+ migrate() {
48
+ this.database.exec(`
49
+ CREATE TABLE IF NOT EXISTS tasks (
50
+ id TEXT PRIMARY KEY,
51
+ data TEXT NOT NULL,
52
+ created_at TEXT NOT NULL,
53
+ updated_at TEXT NOT NULL
54
+ );
55
+ CREATE TABLE IF NOT EXISTS receipts (
56
+ id TEXT PRIMARY KEY,
57
+ task_id TEXT NOT NULL,
58
+ data TEXT NOT NULL,
59
+ created_at TEXT NOT NULL
60
+ );
61
+ CREATE INDEX IF NOT EXISTS receipts_task_id ON receipts(task_id);
62
+ CREATE TABLE IF NOT EXISTS certificates (
63
+ id TEXT PRIMARY KEY,
64
+ task_id TEXT NOT NULL UNIQUE,
65
+ data TEXT NOT NULL,
66
+ created_at TEXT NOT NULL
67
+ );
68
+ CREATE TABLE IF NOT EXISTS memories (
69
+ id TEXT PRIMARY KEY,
70
+ scope TEXT NOT NULL,
71
+ key TEXT NOT NULL,
72
+ value TEXT NOT NULL,
73
+ source TEXT NOT NULL,
74
+ confidence REAL NOT NULL,
75
+ tags TEXT NOT NULL DEFAULT '[]',
76
+ speaker TEXT,
77
+ episode_id TEXT,
78
+ sequence INTEGER,
79
+ expires_at TEXT,
80
+ supersedes_id TEXT,
81
+ superseded_by TEXT,
82
+ created_at TEXT NOT NULL,
83
+ updated_at TEXT NOT NULL
84
+ );
85
+ CREATE INDEX IF NOT EXISTS memories_scope ON memories(scope);
86
+ CREATE INDEX IF NOT EXISTS memories_key ON memories(key);
87
+ `);
88
+ this.addColumnIfMissing("memories", "tags", "TEXT NOT NULL DEFAULT '[]'");
89
+ this.addColumnIfMissing("memories", "speaker", "TEXT");
90
+ this.addColumnIfMissing("memories", "episode_id", "TEXT");
91
+ this.addColumnIfMissing("memories", "sequence", "INTEGER");
92
+ this.addColumnIfMissing("memories", "expires_at", "TEXT");
93
+ this.addColumnIfMissing("memories", "supersedes_id", "TEXT");
94
+ this.addColumnIfMissing("memories", "superseded_by", "TEXT");
95
+ this.database.exec(`
96
+ CREATE INDEX IF NOT EXISTS memories_expiry ON memories(expires_at);
97
+ CREATE INDEX IF NOT EXISTS memories_superseded_by ON memories(superseded_by);
98
+ CREATE INDEX IF NOT EXISTS memories_episode_sequence
99
+ ON memories(episode_id, sequence);
100
+ `);
101
+ this.transaction(() => {
102
+ this.database.exec(`
103
+ CREATE TABLE IF NOT EXISTS schema_migrations (
104
+ version INTEGER PRIMARY KEY,
105
+ applied_at TEXT NOT NULL
106
+ );
107
+ `);
108
+ const applied = this.database
109
+ .prepare("SELECT version FROM schema_migrations WHERE version = 1")
110
+ .get();
111
+ if (applied !== undefined)
112
+ return;
113
+ this.database.exec(`
114
+ CREATE TABLE IF NOT EXISTS task_payloads (
115
+ task_id TEXT PRIMARY KEY,
116
+ request_payload TEXT NOT NULL,
117
+ result_payload TEXT,
118
+ created_at TEXT NOT NULL,
119
+ updated_at TEXT NOT NULL
120
+ );
121
+ CREATE TABLE IF NOT EXISTS workflow_payloads (
122
+ workflow_id TEXT NOT NULL,
123
+ workflow_version INTEGER NOT NULL,
124
+ payload TEXT NOT NULL,
125
+ created_at TEXT NOT NULL,
126
+ PRIMARY KEY(workflow_id, workflow_version)
127
+ );
128
+ CREATE TABLE IF NOT EXISTS workflow_definitions (
129
+ id TEXT NOT NULL,
130
+ version INTEGER NOT NULL,
131
+ data TEXT NOT NULL,
132
+ created_at TEXT NOT NULL,
133
+ PRIMARY KEY(id, version)
134
+ );
135
+ CREATE TABLE IF NOT EXISTS workflow_runs (
136
+ id TEXT PRIMARY KEY,
137
+ definition_id TEXT NOT NULL,
138
+ definition_version INTEGER NOT NULL,
139
+ state_version INTEGER NOT NULL,
140
+ data TEXT NOT NULL,
141
+ created_at TEXT NOT NULL,
142
+ updated_at TEXT NOT NULL
143
+ );
144
+ CREATE TABLE IF NOT EXISTS workflow_events (
145
+ id TEXT PRIMARY KEY,
146
+ aggregate_id TEXT NOT NULL,
147
+ sequence INTEGER NOT NULL,
148
+ trace_id TEXT NOT NULL,
149
+ type TEXT NOT NULL,
150
+ data TEXT NOT NULL,
151
+ occurred_at TEXT NOT NULL,
152
+ UNIQUE(aggregate_id, sequence)
153
+ );
154
+ CREATE INDEX IF NOT EXISTS workflow_events_aggregate
155
+ ON workflow_events(aggregate_id, sequence);
156
+ CREATE TABLE IF NOT EXISTS workflow_snapshots (
157
+ workflow_id TEXT NOT NULL,
158
+ sequence INTEGER NOT NULL,
159
+ data TEXT NOT NULL,
160
+ created_at TEXT NOT NULL,
161
+ PRIMARY KEY(workflow_id, sequence)
162
+ );
163
+ CREATE TABLE IF NOT EXISTS idempotency_commits (
164
+ idempotency_key TEXT PRIMARY KEY,
165
+ task_id TEXT NOT NULL,
166
+ attempt INTEGER NOT NULL,
167
+ committed_at TEXT NOT NULL
168
+ );
169
+ `);
170
+ this.database
171
+ .prepare("INSERT INTO schema_migrations(version, applied_at) VALUES (1, ?)")
172
+ .run(new Date().toISOString());
173
+ });
174
+ }
175
+ transaction(action) {
176
+ this.database.exec("BEGIN IMMEDIATE");
177
+ try {
178
+ const result = action();
179
+ this.database.exec("COMMIT");
180
+ return result;
181
+ }
182
+ catch (error) {
183
+ this.database.exec("ROLLBACK");
184
+ throw error;
185
+ }
186
+ }
187
+ addColumnIfMissing(table, column, definition) {
188
+ const columns = this.database
189
+ .prepare(`PRAGMA table_info(${table})`)
190
+ .all();
191
+ if (!columns.some((entry) => entry.name === column)) {
192
+ this.database.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
193
+ }
194
+ }
195
+ saveTask(task) {
196
+ this.database
197
+ .prepare(`
198
+ INSERT INTO tasks(id, data, created_at, updated_at)
199
+ VALUES (?, ?, ?, ?)
200
+ ON CONFLICT(id) DO UPDATE SET data = excluded.data, updated_at = excluded.updated_at
201
+ `)
202
+ .run(task.id, JSON.stringify(task), task.createdAt, task.updatedAt);
203
+ }
204
+ getTask(id) {
205
+ const row = this.database
206
+ .prepare("SELECT data FROM tasks WHERE id = ?")
207
+ .get(id);
208
+ return row === undefined ? undefined : JSON.parse(row.data);
209
+ }
210
+ listTasks(limit = 50) {
211
+ const rows = this.database
212
+ .prepare("SELECT data FROM tasks ORDER BY updated_at DESC LIMIT ?")
213
+ .all(limit);
214
+ return rows.map((row) => JSON.parse(row.data));
215
+ }
216
+ saveTaskPayload(taskId, payload, at) {
217
+ const parsed = EncryptedPayloadSchema.parse(payload);
218
+ this.database
219
+ .prepare(`
220
+ INSERT INTO task_payloads(
221
+ task_id, request_payload, result_payload, created_at, updated_at
222
+ )
223
+ VALUES (?, ?, NULL, ?, ?)
224
+ ON CONFLICT(task_id) DO UPDATE SET
225
+ request_payload = excluded.request_payload,
226
+ updated_at = excluded.updated_at
227
+ `)
228
+ .run(taskId, JSON.stringify(parsed), at, at);
229
+ }
230
+ getTaskPayload(taskId) {
231
+ const row = this.database
232
+ .prepare("SELECT request_payload AS data FROM task_payloads WHERE task_id = ?")
233
+ .get(taskId);
234
+ return row === undefined
235
+ ? undefined
236
+ : parseStored(row.data, EncryptedPayloadSchema, "stored_task_payload_invalid");
237
+ }
238
+ saveTaskExecutionResult(task, payload) {
239
+ const parsed = EncryptedPayloadSchema.parse(payload);
240
+ this.transaction(() => {
241
+ this.saveTask(task);
242
+ const result = this.database
243
+ .prepare(`
244
+ UPDATE task_payloads
245
+ SET result_payload = ?, updated_at = ?
246
+ WHERE task_id = ?
247
+ `)
248
+ .run(JSON.stringify(parsed), task.updatedAt, task.id);
249
+ if (Number(result.changes) !== 1) {
250
+ throw new Error("task_payload_not_found");
251
+ }
252
+ });
253
+ }
254
+ getTaskResult(taskId) {
255
+ const row = this.database
256
+ .prepare("SELECT result_payload AS data FROM task_payloads WHERE task_id = ?")
257
+ .get(taskId);
258
+ return row === undefined || row.data === null
259
+ ? undefined
260
+ : parseStored(row.data, EncryptedPayloadSchema, "stored_task_result_invalid");
261
+ }
262
+ deleteTaskPayload(taskId) {
263
+ this.database
264
+ .prepare("DELETE FROM task_payloads WHERE task_id = ?")
265
+ .run(taskId);
266
+ }
267
+ listInterruptedTasks() {
268
+ const rows = this.database
269
+ .prepare(`
270
+ SELECT data FROM tasks
271
+ WHERE json_extract(data, '$.status') IN ('running', 'verifying')
272
+ ORDER BY updated_at
273
+ `)
274
+ .all();
275
+ return rows.map((row) => JSON.parse(row.data));
276
+ }
277
+ getWorkflowPayload(id, version) {
278
+ const row = this.database
279
+ .prepare(`
280
+ SELECT payload AS data FROM workflow_payloads
281
+ WHERE workflow_id = ? AND workflow_version = ?
282
+ `)
283
+ .get(id, version);
284
+ return row === undefined
285
+ ? undefined
286
+ : parseStored(row.data, EncryptedPayloadSchema, "stored_workflow_payload_invalid");
287
+ }
288
+ createWorkflow(redactedDefinition, payload, run, events) {
289
+ const definition = WorkflowDefinitionSchema.parse(redactedDefinition);
290
+ const sealed = EncryptedPayloadSchema.parse(payload);
291
+ const projection = WorkflowRunSchema.parse(run);
292
+ const parsedEvents = events.map((item) => WorkflowEventSchema.parse(item));
293
+ if (definition.id !== projection.definitionId ||
294
+ definition.version !== projection.definitionVersion) {
295
+ throw new Error("workflow_definition_mismatch");
296
+ }
297
+ this.assertWorkflowEvents(projection.id, projection.traceId, 0, projection.stateVersion, parsedEvents);
298
+ this.transaction(() => {
299
+ this.database
300
+ .prepare(`
301
+ INSERT INTO workflow_definitions(id, version, data, created_at)
302
+ VALUES (?, ?, ?, ?)
303
+ `)
304
+ .run(definition.id, definition.version, JSON.stringify(definition), projection.createdAt);
305
+ this.database
306
+ .prepare(`
307
+ INSERT INTO workflow_payloads(
308
+ workflow_id, workflow_version, payload, created_at
309
+ )
310
+ VALUES (?, ?, ?, ?)
311
+ `)
312
+ .run(definition.id, definition.version, JSON.stringify(sealed), projection.createdAt);
313
+ this.database
314
+ .prepare(`
315
+ INSERT INTO workflow_runs(
316
+ id, definition_id, definition_version, state_version, data,
317
+ created_at, updated_at
318
+ )
319
+ VALUES (?, ?, ?, ?, ?, ?, ?)
320
+ `)
321
+ .run(projection.id, projection.definitionId, projection.definitionVersion, projection.stateVersion, JSON.stringify(projection), projection.createdAt, projection.updatedAt);
322
+ for (const item of parsedEvents)
323
+ this.insertWorkflowEvent(item);
324
+ });
325
+ }
326
+ getWorkflowDefinition(id, version) {
327
+ const row = this.database
328
+ .prepare(`
329
+ SELECT data FROM workflow_definitions WHERE id = ? AND version = ?
330
+ `)
331
+ .get(id, version);
332
+ return row === undefined
333
+ ? undefined
334
+ : parseStored(row.data, WorkflowDefinitionSchema, "stored_workflow_definition_invalid");
335
+ }
336
+ getWorkflowRun(id) {
337
+ const row = this.database
338
+ .prepare("SELECT data FROM workflow_runs WHERE id = ?")
339
+ .get(id);
340
+ return row === undefined
341
+ ? undefined
342
+ : parseStored(row.data, WorkflowRunSchema, "stored_workflow_run_invalid");
343
+ }
344
+ listWorkflowRuns(statuses = []) {
345
+ const rows = statuses.length === 0
346
+ ? this.database
347
+ .prepare("SELECT data FROM workflow_runs ORDER BY updated_at")
348
+ .all()
349
+ : this.database
350
+ .prepare(`
351
+ SELECT data FROM workflow_runs
352
+ WHERE json_extract(data, '$.status') IN (
353
+ ${statuses.map(() => "?").join(", ")}
354
+ )
355
+ ORDER BY updated_at
356
+ `)
357
+ .all(...statuses);
358
+ return rows.map((row) => parseStored(row.data, WorkflowRunSchema, "stored_workflow_run_invalid"));
359
+ }
360
+ listWorkflowEvents(id, afterSequence = 0) {
361
+ const rows = this.database
362
+ .prepare(`
363
+ SELECT data FROM workflow_events
364
+ WHERE aggregate_id = ? AND sequence > ?
365
+ ORDER BY sequence
366
+ `)
367
+ .all(id, afterSequence);
368
+ return rows.map((row) => parseStored(row.data, WorkflowEventSchema, "stored_workflow_event_invalid"));
369
+ }
370
+ saveWorkflowSnapshot(snapshot) {
371
+ const parsed = WorkflowSnapshotSchema.parse(snapshot);
372
+ this.database
373
+ .prepare(`
374
+ INSERT INTO workflow_snapshots(
375
+ workflow_id, sequence, data, created_at
376
+ )
377
+ VALUES (?, ?, ?, ?)
378
+ `)
379
+ .run(parsed.workflowId, parsed.sequence, JSON.stringify(parsed), parsed.createdAt);
380
+ }
381
+ getLatestWorkflowSnapshot(id) {
382
+ const row = this.database
383
+ .prepare(`
384
+ SELECT data FROM workflow_snapshots
385
+ WHERE workflow_id = ?
386
+ ORDER BY sequence DESC
387
+ LIMIT 1
388
+ `)
389
+ .get(id);
390
+ return row === undefined
391
+ ? undefined
392
+ : parseStored(row.data, WorkflowSnapshotSchema, "stored_workflow_snapshot_invalid");
393
+ }
394
+ transitionWorkflow(id, expectedStateVersion, run, events) {
395
+ const projection = WorkflowRunSchema.parse(run);
396
+ const parsedEvents = events.map((item) => WorkflowEventSchema.parse(item));
397
+ this.assertWorkflowEvents(id, projection.traceId, expectedStateVersion, projection.stateVersion, parsedEvents);
398
+ if (projection.id !== id)
399
+ throw new Error("workflow_projection_id_mismatch");
400
+ this.transaction(() => {
401
+ const current = this.database
402
+ .prepare(`SELECT state_version AS stateVersion, data
403
+ FROM workflow_runs WHERE id = ?`)
404
+ .get(id);
405
+ if (current === undefined)
406
+ throw new Error("workflow_not_found");
407
+ if (current.stateVersion !== expectedStateVersion) {
408
+ throw new Error("workflow_state_conflict");
409
+ }
410
+ const stored = parseStored(current.data, WorkflowRunSchema, "stored_workflow_run_invalid");
411
+ if (projection.definitionId !== stored.definitionId ||
412
+ projection.definitionVersion !== stored.definitionVersion ||
413
+ projection.traceId !== stored.traceId) {
414
+ throw new Error("workflow_projection_identity_mismatch");
415
+ }
416
+ for (const item of parsedEvents)
417
+ this.insertWorkflowEvent(item);
418
+ const updated = this.database
419
+ .prepare(`
420
+ UPDATE workflow_runs
421
+ SET state_version = ?, data = ?, updated_at = ?
422
+ WHERE id = ? AND state_version = ?
423
+ `)
424
+ .run(projection.stateVersion, JSON.stringify(projection), projection.updatedAt, id, expectedStateVersion);
425
+ if (Number(updated.changes) !== 1) {
426
+ throw new Error("workflow_state_conflict");
427
+ }
428
+ });
429
+ }
430
+ commitIdempotency(key, taskId, attempt, at) {
431
+ const result = this.database
432
+ .prepare(`
433
+ INSERT OR IGNORE INTO idempotency_commits(
434
+ idempotency_key, task_id, attempt, committed_at
435
+ )
436
+ VALUES (?, ?, ?, ?)
437
+ `)
438
+ .run(key, taskId, attempt, at);
439
+ return Number(result.changes) === 1;
440
+ }
441
+ getIdempotencyCommit(key) {
442
+ return this.database
443
+ .prepare(`
444
+ SELECT task_id AS taskId, attempt, committed_at AS committedAt
445
+ FROM idempotency_commits
446
+ WHERE idempotency_key = ?
447
+ `)
448
+ .get(key);
449
+ }
450
+ assertWorkflowEvents(workflowId, traceId, previousStateVersion, nextStateVersion, events) {
451
+ if (events.some((item) => item.aggregateId !== workflowId || item.traceId !== traceId)) {
452
+ throw new Error("workflow_event_identity_invalid");
453
+ }
454
+ if (events.length === 0 ||
455
+ nextStateVersion !== previousStateVersion + events.length ||
456
+ events.some((item, index) => item.sequence !== previousStateVersion + index + 1)) {
457
+ throw new Error("workflow_event_sequence_invalid");
458
+ }
459
+ }
460
+ insertWorkflowEvent(event) {
461
+ this.database
462
+ .prepare(`
463
+ INSERT INTO workflow_events(
464
+ id, aggregate_id, sequence, trace_id, type, data, occurred_at
465
+ )
466
+ VALUES (?, ?, ?, ?, ?, ?, ?)
467
+ `)
468
+ .run(event.id, event.aggregateId, event.sequence, event.traceId, event.type, JSON.stringify(event), event.occurredAt);
469
+ }
470
+ saveReceipt(receipt) {
471
+ this.database
472
+ .prepare(`
473
+ INSERT INTO receipts(id, task_id, data, created_at)
474
+ VALUES (?, ?, ?, ?)
475
+ `)
476
+ .run(receipt.receiptId, receipt.taskId, JSON.stringify(receipt), receipt.endedAt);
477
+ }
478
+ getReceipt(id) {
479
+ const row = this.database
480
+ .prepare("SELECT data FROM receipts WHERE id = ?")
481
+ .get(id);
482
+ return row === undefined ? undefined : JSON.parse(row.data);
483
+ }
484
+ getReceiptsForTask(taskId) {
485
+ const rows = this.database
486
+ .prepare("SELECT data FROM receipts WHERE task_id = ? ORDER BY created_at")
487
+ .all(taskId);
488
+ return rows.map((row) => JSON.parse(row.data));
489
+ }
490
+ saveCertificate(certificate) {
491
+ this.database
492
+ .prepare(`
493
+ INSERT INTO certificates(id, task_id, data, created_at)
494
+ VALUES (?, ?, ?, ?)
495
+ ON CONFLICT(task_id) DO UPDATE SET
496
+ id = excluded.id,
497
+ data = excluded.data,
498
+ created_at = excluded.created_at
499
+ `)
500
+ .run(certificate.certificateId, certificate.taskId, JSON.stringify(certificate), certificate.createdAt);
501
+ }
502
+ getCertificateForTask(taskId) {
503
+ const row = this.database
504
+ .prepare("SELECT data FROM certificates WHERE task_id = ?")
505
+ .get(taskId);
506
+ return row === undefined
507
+ ? undefined
508
+ : JSON.parse(row.data);
509
+ }
510
+ putMemory(memory) {
511
+ this.database
512
+ .prepare(`
513
+ INSERT INTO memories(
514
+ id, scope, key, value, source, confidence, tags, speaker, episode_id,
515
+ sequence, expires_at, supersedes_id, superseded_by, created_at,
516
+ updated_at
517
+ )
518
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
519
+ ON CONFLICT(id) DO UPDATE SET
520
+ scope = excluded.scope,
521
+ key = excluded.key,
522
+ value = excluded.value,
523
+ source = excluded.source,
524
+ confidence = excluded.confidence,
525
+ tags = excluded.tags,
526
+ speaker = excluded.speaker,
527
+ episode_id = excluded.episode_id,
528
+ sequence = excluded.sequence,
529
+ expires_at = excluded.expires_at,
530
+ supersedes_id = excluded.supersedes_id,
531
+ superseded_by = excluded.superseded_by,
532
+ updated_at = excluded.updated_at
533
+ `)
534
+ .run(memory.id, memory.scope, memory.key, memory.value, memory.source, memory.confidence, JSON.stringify(memory.tags), memory.speaker ?? null, memory.episodeId ?? null, memory.sequence ?? null, memory.expiresAt ?? null, memory.supersedesId ?? null, memory.supersededBy ?? null, memory.createdAt, memory.updatedAt);
535
+ }
536
+ getMemory(id) {
537
+ const row = this.database
538
+ .prepare(`
539
+ SELECT id, scope, key, value, source, confidence, tags, speaker,
540
+ episode_id AS episodeId, sequence,
541
+ expires_at AS expiresAt, supersedes_id AS supersedesId,
542
+ superseded_by AS supersededBy,
543
+ created_at AS createdAt, updated_at AS updatedAt
544
+ FROM memories WHERE id = ?
545
+ `)
546
+ .get(id);
547
+ return row === undefined ? undefined : toMemoryRecord(row);
548
+ }
549
+ listMemories(scope, limit, includeSuperseded = false) {
550
+ const rows = this.database
551
+ .prepare(`
552
+ SELECT id, scope, key, value, source, confidence, tags, speaker,
553
+ episode_id AS episodeId, sequence,
554
+ expires_at AS expiresAt, supersedes_id AS supersedesId,
555
+ superseded_by AS supersededBy,
556
+ created_at AS createdAt, updated_at AS updatedAt
557
+ FROM memories
558
+ WHERE scope = ?
559
+ AND (expires_at IS NULL OR expires_at > ?)
560
+ AND (? = 1 OR superseded_by IS NULL)
561
+ ORDER BY updated_at DESC
562
+ LIMIT ?
563
+ `)
564
+ .all(scope, new Date().toISOString(), includeSuperseded ? 1 : 0, limit);
565
+ return rows.map(toMemoryRecord);
566
+ }
567
+ memoryCandidates(scope, limit, includeSuperseded = false) {
568
+ const rows = this.database
569
+ .prepare(`
570
+ SELECT id, scope, key, value, source, confidence, tags, speaker,
571
+ episode_id AS episodeId, sequence,
572
+ expires_at AS expiresAt, supersedes_id AS supersedesId,
573
+ superseded_by AS supersededBy,
574
+ created_at AS createdAt, updated_at AS updatedAt
575
+ FROM memories
576
+ WHERE scope = ?
577
+ AND (expires_at IS NULL OR expires_at > ?)
578
+ AND (? = 1 OR superseded_by IS NULL)
579
+ ORDER BY updated_at DESC
580
+ LIMIT ?
581
+ `)
582
+ .all(scope, new Date().toISOString(), includeSuperseded ? 1 : 0, limit);
583
+ return rows.map(toMemoryRecord);
584
+ }
585
+ supersedeMemory(id, scope, supersededBy) {
586
+ const result = this.database
587
+ .prepare(`
588
+ UPDATE memories
589
+ SET superseded_by = ?, updated_at = ?
590
+ WHERE id = ? AND scope = ? AND superseded_by IS NULL
591
+ `)
592
+ .run(supersededBy, new Date().toISOString(), id, scope);
593
+ return Number(result.changes) > 0;
594
+ }
595
+ deleteMemory(id, scope) {
596
+ const result = this.database
597
+ .prepare("DELETE FROM memories WHERE id = ? AND scope = ?")
598
+ .run(id, scope);
599
+ return Number(result.changes) > 0;
600
+ }
601
+ clearMemories(scope) {
602
+ const result = this.database
603
+ .prepare("DELETE FROM memories WHERE scope = ?")
604
+ .run(scope);
605
+ return Number(result.changes);
606
+ }
607
+ close() {
608
+ this.database.close();
609
+ }
610
+ }
611
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}