@aletheia-labs/store-sqlite 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/LICENSE +176 -0
- package/README.md +119 -0
- package/dist/codec.d.ts +68 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +112 -0
- package/dist/codec.js.map +1 -0
- package/dist/connection.d.ts +37 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +44 -0
- package/dist/connection.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations.d.ts +22 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +154 -0
- package/dist/migrations.js.map +1 -0
- package/dist/sqlite-conflict-registry.d.ts +68 -0
- package/dist/sqlite-conflict-registry.d.ts.map +1 -0
- package/dist/sqlite-conflict-registry.js +173 -0
- package/dist/sqlite-conflict-registry.js.map +1 -0
- package/dist/sqlite-event-ledger.d.ts +58 -0
- package/dist/sqlite-event-ledger.d.ts.map +1 -0
- package/dist/sqlite-event-ledger.js +154 -0
- package/dist/sqlite-event-ledger.js.map +1 -0
- package/dist/sqlite-memory-store.d.ts +76 -0
- package/dist/sqlite-memory-store.d.ts.map +1 -0
- package/dist/sqlite-memory-store.js +189 -0
- package/dist/sqlite-memory-store.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-backed MemoryStore.
|
|
3
|
+
*
|
|
4
|
+
* Enforces:
|
|
5
|
+
* - Atoms inserted exactly once (UNIQUE memory_id).
|
|
6
|
+
* - Status transitions go through `transitionStatus` only — no UPDATE path
|
|
7
|
+
* for `content`, `scope`, `visibility`, `scores`, or `links`.
|
|
8
|
+
* - Allowed transitions come from `isAllowedTransition` in core.
|
|
9
|
+
* - Every transition is recorded in `memory_status_history`.
|
|
10
|
+
*/
|
|
11
|
+
import { type IsoTimestamp, type MemoryAtom, type MemoryId, type MemoryQuery, type MemoryStatus, type MemoryStore, type StatusTransitionOptions, type StatusTransitionReason, type StatusTransitionResult, type Visibility } from '@aletheia-labs/core';
|
|
12
|
+
import type Database from 'better-sqlite3';
|
|
13
|
+
export declare class SqliteMemoryStore implements MemoryStore {
|
|
14
|
+
private readonly db;
|
|
15
|
+
private readonly insertAtom;
|
|
16
|
+
private readonly getAtom;
|
|
17
|
+
private readonly updateStatus;
|
|
18
|
+
private readonly insertHistory;
|
|
19
|
+
private readonly historyQuery;
|
|
20
|
+
/**
|
|
21
|
+
* Create a MemoryStore backed by an existing `better-sqlite3` connection.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* Direct construction is for custom composition roots. Most hosts should use
|
|
25
|
+
* `openSqliteStores()` so all stores share the same migrated connection.
|
|
26
|
+
*/
|
|
27
|
+
constructor(db: Database.Database);
|
|
28
|
+
/**
|
|
29
|
+
* Insert an immutable memory atom and record its initial status history.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* The method zod-validates the atom before writing, then uses a transaction
|
|
33
|
+
* to insert both `memory_atoms` and the initial `memory_status_history` row.
|
|
34
|
+
* Duplicate memory IDs throw because content updates must use successor atoms.
|
|
35
|
+
*/
|
|
36
|
+
insert(atom: MemoryAtom): Promise<MemoryAtom>;
|
|
37
|
+
/**
|
|
38
|
+
* Retrieve one visible atom by ID.
|
|
39
|
+
*
|
|
40
|
+
* @remarks
|
|
41
|
+
* Hidden and missing atoms both return `null`; this avoids leaking existence
|
|
42
|
+
* across visibility boundaries.
|
|
43
|
+
*/
|
|
44
|
+
get(memoryId: MemoryId, permittedVisibilities: readonly Visibility[]): Promise<MemoryAtom | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Query visible atoms with optional status, scope, validity, and limit filters.
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* Permission filtering is the first SQL predicate. `validAt` is opt-in so
|
|
50
|
+
* lifecycle scanners can intentionally see expired atoms for deprecation.
|
|
51
|
+
*/
|
|
52
|
+
query(filter: MemoryQuery): Promise<readonly MemoryAtom[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Transition an atom through the allowed status matrix and audit the change.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* This is the only UPDATE path in the store. It changes `status` only and
|
|
58
|
+
* records the logical transition timestamp plus actor/rationale in
|
|
59
|
+
* `memory_status_history`.
|
|
60
|
+
*/
|
|
61
|
+
transitionStatus(memoryId: MemoryId, nextStatus: MemoryStatus, reason: StatusTransitionReason, options?: StatusTransitionOptions): Promise<StatusTransitionResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Return the audited status timeline for one atom.
|
|
64
|
+
*
|
|
65
|
+
* @remarks
|
|
66
|
+
* Consumers use this for Phase 2 dynamics, episodic historical snapshots, and
|
|
67
|
+
* operator audit views. The first row has `fromStatus: null` for insertion.
|
|
68
|
+
*/
|
|
69
|
+
statusHistory(memoryId: MemoryId): Promise<readonly {
|
|
70
|
+
at: IsoTimestamp;
|
|
71
|
+
fromStatus: MemoryStatus | null;
|
|
72
|
+
toStatus: MemoryStatus;
|
|
73
|
+
reason: StatusTransitionReason;
|
|
74
|
+
}[]>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sqlite-memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-memory-store.d.ts","sourceRoot":"","sources":["../src/sqlite-memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EAGhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAY3C,qBAAa,iBAAkB,YAAW,WAAW;IAcvC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAb/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAE5D;;;;;;OAMG;gBAC0B,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAgClD;;;;;;;OAOG;IACG,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BnD;;;;;;OAMG;IACG,GAAG,CACP,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,SAAS,UAAU,EAAE,GAC3C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW7B;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAmChE;;;;;;;OAOG;IACG,gBAAgB,CACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,YAAY,EACxB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAqClC;;;;;;OAMG;IACG,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAC9C,SAAS;QACP,EAAE,EAAE,YAAY,CAAC;QACjB,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;QAChC,QAAQ,EAAE,YAAY,CAAC;QACvB,MAAM,EAAE,sBAAsB,CAAC;KAChC,EAAE,CACJ;CAaF"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-backed MemoryStore.
|
|
3
|
+
*
|
|
4
|
+
* Enforces:
|
|
5
|
+
* - Atoms inserted exactly once (UNIQUE memory_id).
|
|
6
|
+
* - Status transitions go through `transitionStatus` only — no UPDATE path
|
|
7
|
+
* for `content`, `scope`, `visibility`, `scores`, or `links`.
|
|
8
|
+
* - Allowed transitions come from `isAllowedTransition` in core.
|
|
9
|
+
* - Every transition is recorded in `memory_status_history`.
|
|
10
|
+
*/
|
|
11
|
+
import { IsoTimestampSchema, MemoryAtomSchema, isAllowedTransition, scopeKey, } from '@aletheia-labs/core';
|
|
12
|
+
import { atomToRow, permittedClause, rowToAtom } from './codec.js';
|
|
13
|
+
export class SqliteMemoryStore {
|
|
14
|
+
db;
|
|
15
|
+
insertAtom;
|
|
16
|
+
getAtom;
|
|
17
|
+
updateStatus;
|
|
18
|
+
insertHistory;
|
|
19
|
+
historyQuery;
|
|
20
|
+
/**
|
|
21
|
+
* Create a MemoryStore backed by an existing `better-sqlite3` connection.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* Direct construction is for custom composition roots. Most hosts should use
|
|
25
|
+
* `openSqliteStores()` so all stores share the same migrated connection.
|
|
26
|
+
*/
|
|
27
|
+
constructor(db) {
|
|
28
|
+
this.db = db;
|
|
29
|
+
this.insertAtom = db.prepare(`
|
|
30
|
+
INSERT INTO memory_atoms (
|
|
31
|
+
memory_id, memory_type, content, source_agent_id,
|
|
32
|
+
source_event_ids_json, source_memory_ids_json,
|
|
33
|
+
scope_json, visibility_json, status, scores_json,
|
|
34
|
+
valid_from, valid_until, last_confirmed_at, links_json,
|
|
35
|
+
scope_key, visibility_key, inserted_at
|
|
36
|
+
) VALUES (
|
|
37
|
+
@memory_id, @memory_type, @content, @source_agent_id,
|
|
38
|
+
@source_event_ids_json, @source_memory_ids_json,
|
|
39
|
+
@scope_json, @visibility_json, @status, @scores_json,
|
|
40
|
+
@valid_from, @valid_until, @last_confirmed_at, @links_json,
|
|
41
|
+
@scope_key, @visibility_key, @inserted_at
|
|
42
|
+
)
|
|
43
|
+
`);
|
|
44
|
+
this.getAtom = db.prepare('SELECT * FROM memory_atoms WHERE memory_id = ?');
|
|
45
|
+
this.updateStatus = db.prepare('UPDATE memory_atoms SET status = ? WHERE memory_id = ?');
|
|
46
|
+
this.insertHistory = db.prepare(`
|
|
47
|
+
INSERT INTO memory_status_history (
|
|
48
|
+
memory_id, from_status, to_status, rationale, actor, conflict_id, at
|
|
49
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
50
|
+
`);
|
|
51
|
+
this.historyQuery = db.prepare('SELECT * FROM memory_status_history WHERE memory_id = ? ORDER BY at ASC, id ASC');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Insert an immutable memory atom and record its initial status history.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* The method zod-validates the atom before writing, then uses a transaction
|
|
58
|
+
* to insert both `memory_atoms` and the initial `memory_status_history` row.
|
|
59
|
+
* Duplicate memory IDs throw because content updates must use successor atoms.
|
|
60
|
+
*/
|
|
61
|
+
async insert(atom) {
|
|
62
|
+
const validated = MemoryAtomSchema.parse(atom);
|
|
63
|
+
const now = new Date().toISOString();
|
|
64
|
+
const row = atomToRow(validated, now);
|
|
65
|
+
const tx = this.db.transaction(() => {
|
|
66
|
+
try {
|
|
67
|
+
this.insertAtom.run(row);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err instanceof Error && err.message.includes('UNIQUE')) {
|
|
71
|
+
throw new Error(`MemoryStore.insert: duplicate memory_id "${row.memory_id}"`);
|
|
72
|
+
}
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
// Record the initial status with from_status=null.
|
|
76
|
+
this.insertHistory.run(row.memory_id, null, row.status, 'initial insertion', row.source_agent_id, null, now);
|
|
77
|
+
});
|
|
78
|
+
tx();
|
|
79
|
+
return validated;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Retrieve one visible atom by ID.
|
|
83
|
+
*
|
|
84
|
+
* @remarks
|
|
85
|
+
* Hidden and missing atoms both return `null`; this avoids leaking existence
|
|
86
|
+
* across visibility boundaries.
|
|
87
|
+
*/
|
|
88
|
+
async get(memoryId, permittedVisibilities) {
|
|
89
|
+
const row = this.getAtom.get(memoryId);
|
|
90
|
+
if (!row)
|
|
91
|
+
return null;
|
|
92
|
+
const allowed = permittedClause(permittedVisibilities);
|
|
93
|
+
if (allowed.params.length === 0 || !allowed.params.includes(row.visibility_key)) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return rowToAtom(row);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Query visible atoms with optional status, scope, validity, and limit filters.
|
|
100
|
+
*
|
|
101
|
+
* @remarks
|
|
102
|
+
* Permission filtering is the first SQL predicate. `validAt` is opt-in so
|
|
103
|
+
* lifecycle scanners can intentionally see expired atoms for deprecation.
|
|
104
|
+
*/
|
|
105
|
+
async query(filter) {
|
|
106
|
+
const where = [];
|
|
107
|
+
const params = [];
|
|
108
|
+
// Permission first.
|
|
109
|
+
const allowed = permittedClause(filter.permittedVisibilities);
|
|
110
|
+
where.push(allowed.clause);
|
|
111
|
+
params.push(...allowed.params);
|
|
112
|
+
if (filter.statuses !== undefined && filter.statuses.length > 0) {
|
|
113
|
+
where.push(`status IN (${filter.statuses.map(() => '?').join(', ')})`);
|
|
114
|
+
params.push(...filter.statuses);
|
|
115
|
+
}
|
|
116
|
+
if (filter.scope !== undefined) {
|
|
117
|
+
where.push('scope_key = ?');
|
|
118
|
+
params.push(scopeKey(filter.scope));
|
|
119
|
+
}
|
|
120
|
+
if (filter.validAt !== undefined) {
|
|
121
|
+
where.push('valid_from <= ?');
|
|
122
|
+
params.push(filter.validAt);
|
|
123
|
+
where.push('(valid_until IS NULL OR valid_until >= ?)');
|
|
124
|
+
params.push(filter.validAt);
|
|
125
|
+
}
|
|
126
|
+
const limitClause = filter.limit !== undefined ? `LIMIT ${Math.floor(filter.limit)}` : '';
|
|
127
|
+
const sql = `
|
|
128
|
+
SELECT * FROM memory_atoms
|
|
129
|
+
WHERE ${where.join(' AND ')}
|
|
130
|
+
ORDER BY valid_from DESC, memory_id ASC
|
|
131
|
+
${limitClause}
|
|
132
|
+
`;
|
|
133
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
134
|
+
return rows.map(rowToAtom);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Transition an atom through the allowed status matrix and audit the change.
|
|
138
|
+
*
|
|
139
|
+
* @remarks
|
|
140
|
+
* This is the only UPDATE path in the store. It changes `status` only and
|
|
141
|
+
* records the logical transition timestamp plus actor/rationale in
|
|
142
|
+
* `memory_status_history`.
|
|
143
|
+
*/
|
|
144
|
+
async transitionStatus(memoryId, nextStatus, reason, options) {
|
|
145
|
+
const row = this.getAtom.get(memoryId);
|
|
146
|
+
if (!row) {
|
|
147
|
+
return { kind: 'rejected', reason: `memory_id "${memoryId}" not found` };
|
|
148
|
+
}
|
|
149
|
+
const current = row.status;
|
|
150
|
+
if (current === nextStatus) {
|
|
151
|
+
return { kind: 'rejected', reason: `already in status "${current}"` };
|
|
152
|
+
}
|
|
153
|
+
if (!isAllowedTransition(current, nextStatus)) {
|
|
154
|
+
return {
|
|
155
|
+
kind: 'rejected',
|
|
156
|
+
reason: `transition not allowed: ${current} → ${nextStatus}`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const now = options?.at !== undefined ? IsoTimestampSchema.parse(options.at) : new Date().toISOString();
|
|
160
|
+
const tx = this.db.transaction(() => {
|
|
161
|
+
this.updateStatus.run(nextStatus, memoryId);
|
|
162
|
+
this.insertHistory.run(memoryId, current, nextStatus, reason.rationale, reason.actor, reason.conflictId ?? null, now);
|
|
163
|
+
});
|
|
164
|
+
tx();
|
|
165
|
+
const updated = this.getAtom.get(memoryId);
|
|
166
|
+
return { kind: 'applied', atom: rowToAtom(updated) };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Return the audited status timeline for one atom.
|
|
170
|
+
*
|
|
171
|
+
* @remarks
|
|
172
|
+
* Consumers use this for Phase 2 dynamics, episodic historical snapshots, and
|
|
173
|
+
* operator audit views. The first row has `fromStatus: null` for insertion.
|
|
174
|
+
*/
|
|
175
|
+
async statusHistory(memoryId) {
|
|
176
|
+
const rows = this.historyQuery.all(memoryId);
|
|
177
|
+
return rows.map((r) => ({
|
|
178
|
+
at: r.at,
|
|
179
|
+
fromStatus: r.from_status,
|
|
180
|
+
toStatus: r.to_status,
|
|
181
|
+
reason: {
|
|
182
|
+
rationale: r.rationale,
|
|
183
|
+
actor: r.actor,
|
|
184
|
+
...(r.conflict_id !== null ? { conflictId: r.conflict_id } : {}),
|
|
185
|
+
},
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=sqlite-memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-memory-store.js","sourceRoot":"","sources":["../src/sqlite-memory-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aletheia-labs/store-sqlite",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "SQLite-backed implementations of @aletheia-labs/core storage interfaces.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"better-sqlite3": "^11.5.0",
|
|
23
|
+
"zod": "^3.23.8",
|
|
24
|
+
"@aletheia-labs/core": "0.1.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
28
|
+
"@types/node": "^22.10.0",
|
|
29
|
+
"typescript": "^5.6.3",
|
|
30
|
+
"vitest": "^2.1.8"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"aletheia",
|
|
37
|
+
"llm",
|
|
38
|
+
"memory",
|
|
39
|
+
"sqlite",
|
|
40
|
+
"agents"
|
|
41
|
+
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc -p tsconfig.json",
|
|
44
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"test:watch": "vitest"
|
|
47
|
+
}
|
|
48
|
+
}
|