@monoes/memory 1.0.10 → 1.0.12
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/README.md +10 -11
- package/dist/controller-registry.d.ts +7 -5
- package/dist/controller-registry.d.ts.map +1 -1
- package/dist/controller-registry.js +8 -6
- package/dist/controller-registry.js.map +1 -1
- package/dist/index.d.ts +38 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -12
- package/dist/index.js.map +1 -1
- package/dist/migration.d.ts +3 -2
- package/dist/migration.d.ts.map +1 -1
- package/dist/migration.js +3 -2
- package/dist/migration.js.map +1 -1
- package/dist/sql-backend.d.ts +81 -0
- package/dist/sql-backend.d.ts.map +1 -0
- package/dist/sql-backend.js +553 -0
- package/dist/sql-backend.js.map +1 -0
- package/dist/sql-driver.d.ts +135 -0
- package/dist/sql-driver.d.ts.map +1 -0
- package/dist/sql-driver.js +187 -0
- package/dist/sql-driver.js.map +1 -0
- package/dist/sql-schema.d.ts +74 -0
- package/dist/sql-schema.d.ts.map +1 -0
- package/dist/sql-schema.js +178 -0
- package/dist/sql-schema.js.map +1 -0
- package/dist/sqlite-backend.d.ts +16 -106
- package/dist/sqlite-backend.d.ts.map +1 -1
- package/dist/sqlite-backend.js +53 -725
- package/dist/sqlite-backend.js.map +1 -1
- package/dist/sqljs-backend.d.ts +26 -98
- package/dist/sqljs-backend.d.ts.map +1 -1
- package/dist/sqljs-backend.js +75 -609
- package/dist/sqljs-backend.js.map +1 -1
- package/dist/types.d.ts +5 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -2
- package/dist/types.js.map +1 -1
- package/package.json +5 -4
- package/dist/lancedb-backend.d.ts +0 -79
- package/dist/lancedb-backend.d.ts.map +0 -1
- package/dist/lancedb-backend.js +0 -567
- package/dist/lancedb-backend.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-backend.js","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL driver abstraction over better-sqlite3 (native) and sql.js (WASM).
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: SQLiteBackend and SqlJsBackend implemented the same
|
|
5
|
+
* IMemoryBackend contract twice — ~1,780 lines of near-parallel logic — because
|
|
6
|
+
* the two drivers expose incompatible APIs. They then drifted, and the drift was
|
|
7
|
+
* silent: `query({tags})` returned ANY-match on one and ALL-match on the other,
|
|
8
|
+
* so the same call gave different answers depending on which driver happened to
|
|
9
|
+
* load (see backend-conformance.test.ts). This adapter exists so there is one
|
|
10
|
+
* implementation of the logic and only the driver plumbing differs.
|
|
11
|
+
*
|
|
12
|
+
* The APIs really are different, which is why the abstraction is not a thin
|
|
13
|
+
* shim:
|
|
14
|
+
*
|
|
15
|
+
* better-sqlite3 prepare().run/get/all/iterate, exec, pragma, transaction
|
|
16
|
+
* sql.js prepare() + bind/step/getAsObject/free, run, exec, export
|
|
17
|
+
*
|
|
18
|
+
* Notable asymmetries handled here:
|
|
19
|
+
* - sql.js has no cursor: `iterate` is emulated by stepping a statement.
|
|
20
|
+
* - sql.js has no native transaction wrapper: emulated with BEGIN/COMMIT/
|
|
21
|
+
* ROLLBACK, which is what better-sqlite3's .transaction() does internally.
|
|
22
|
+
* - sql.js is in-memory; durability requires an explicit export to disk.
|
|
23
|
+
* `persist()` is a no-op on better-sqlite3, which writes through.
|
|
24
|
+
* - PRAGMAs are meaningful only on better-sqlite3; ignored on sql.js.
|
|
25
|
+
*
|
|
26
|
+
* Rows are returned as plain objects keyed by column name, matching
|
|
27
|
+
* better-sqlite3's default and sql.js's getAsObject().
|
|
28
|
+
*/
|
|
29
|
+
export type SqlParam = string | number | null | Uint8Array | Buffer;
|
|
30
|
+
export type SqlRow = Record<string, unknown>;
|
|
31
|
+
export interface SqlDriver {
|
|
32
|
+
/**
|
|
33
|
+
* Execute a statement for effect, returning the number of rows changed.
|
|
34
|
+
*
|
|
35
|
+
* The drivers report this differently — better-sqlite3 returns
|
|
36
|
+
* `{ changes }` from run(), sql.js requires a separate getRowsModified()
|
|
37
|
+
* call — and callers genuinely need it (delete() reports whether anything
|
|
38
|
+
* was actually removed), so it is normalised here.
|
|
39
|
+
*/
|
|
40
|
+
run(sql: string, params?: SqlParam[]): number;
|
|
41
|
+
/** First row, or null when the query matched nothing. */
|
|
42
|
+
get(sql: string, params?: SqlParam[]): SqlRow | null;
|
|
43
|
+
/** All matching rows. */
|
|
44
|
+
all(sql: string, params?: SqlParam[]): SqlRow[];
|
|
45
|
+
/** Stream rows. On sql.js this steps a statement rather than using a cursor. */
|
|
46
|
+
iterate(sql: string, params?: SqlParam[]): Iterable<SqlRow>;
|
|
47
|
+
/** Run one or more statements (DDL). */
|
|
48
|
+
exec(sql: string): void;
|
|
49
|
+
/** Run fn inside a transaction, rolling back if it throws. */
|
|
50
|
+
transaction<T>(fn: () => T): T;
|
|
51
|
+
/** Read a pragma value. Returns undefined where pragmas are unsupported. */
|
|
52
|
+
pragma(statement: string): unknown;
|
|
53
|
+
/** Flush to disk. No-op for write-through drivers. */
|
|
54
|
+
persist(): Promise<void>;
|
|
55
|
+
close(): void;
|
|
56
|
+
/** Driver identity, for diagnostics and capability decisions. */
|
|
57
|
+
readonly kind: 'better-sqlite3' | 'sql.js';
|
|
58
|
+
}
|
|
59
|
+
interface BetterSqliteDb {
|
|
60
|
+
prepare(sql: string): {
|
|
61
|
+
run(...p: unknown[]): {
|
|
62
|
+
changes: number;
|
|
63
|
+
};
|
|
64
|
+
get(...p: unknown[]): unknown;
|
|
65
|
+
all(...p: unknown[]): unknown[];
|
|
66
|
+
iterate(...p: unknown[]): Iterable<unknown>;
|
|
67
|
+
};
|
|
68
|
+
exec(sql: string): unknown;
|
|
69
|
+
pragma(statement: string, opts?: {
|
|
70
|
+
simple?: boolean;
|
|
71
|
+
}): unknown;
|
|
72
|
+
transaction<T>(fn: (...args: unknown[]) => T): (...args: unknown[]) => T;
|
|
73
|
+
close(): void;
|
|
74
|
+
}
|
|
75
|
+
export declare class BetterSqliteDriver implements SqlDriver {
|
|
76
|
+
private db;
|
|
77
|
+
readonly kind: 'better-sqlite3';
|
|
78
|
+
/**
|
|
79
|
+
* Prepared-statement cache keyed by SQL text.
|
|
80
|
+
*
|
|
81
|
+
* The backend this replaced pre-compiled its hot statements in initialize()
|
|
82
|
+
* specifically to avoid re-preparing per row ("N+1 re-prepare"). Routing
|
|
83
|
+
* everything through the driver would have silently reintroduced that cost
|
|
84
|
+
* in loops like bulkInsert and per-row embedding reads, so the optimisation
|
|
85
|
+
* moves here where it applies to every query rather than a hand-picked few.
|
|
86
|
+
*/
|
|
87
|
+
private stmtCache;
|
|
88
|
+
constructor(db: BetterSqliteDb);
|
|
89
|
+
private stmt;
|
|
90
|
+
run(sql: string, params?: SqlParam[]): number;
|
|
91
|
+
get(sql: string, params?: SqlParam[]): SqlRow | null;
|
|
92
|
+
all(sql: string, params?: SqlParam[]): SqlRow[];
|
|
93
|
+
iterate(sql: string, params?: SqlParam[]): Iterable<SqlRow>;
|
|
94
|
+
exec(sql: string): void;
|
|
95
|
+
transaction<T>(fn: () => T): T;
|
|
96
|
+
pragma(statement: string): unknown;
|
|
97
|
+
persist(): Promise<void>;
|
|
98
|
+
close(): void;
|
|
99
|
+
}
|
|
100
|
+
interface SqlJsStatement {
|
|
101
|
+
bind(params?: unknown[]): boolean;
|
|
102
|
+
step(): boolean;
|
|
103
|
+
getAsObject(): Record<string, unknown>;
|
|
104
|
+
free(): void;
|
|
105
|
+
}
|
|
106
|
+
interface SqlJsDb {
|
|
107
|
+
prepare(sql: string): SqlJsStatement;
|
|
108
|
+
run(sql: string, params?: unknown[]): unknown;
|
|
109
|
+
exec(sql: string): unknown;
|
|
110
|
+
export(): Uint8Array;
|
|
111
|
+
getRowsModified(): number;
|
|
112
|
+
close(): void;
|
|
113
|
+
}
|
|
114
|
+
export declare class SqlJsDriver implements SqlDriver {
|
|
115
|
+
private db;
|
|
116
|
+
private flush?;
|
|
117
|
+
readonly kind: 'sql.js';
|
|
118
|
+
/**
|
|
119
|
+
* @param db the opened sql.js Database
|
|
120
|
+
* @param flush writes the exported bytes to durable storage; omitted for
|
|
121
|
+
* :memory: databases, where persistence is meaningless
|
|
122
|
+
*/
|
|
123
|
+
constructor(db: SqlJsDb, flush?: ((bytes: Uint8Array) => Promise<void>) | undefined);
|
|
124
|
+
run(sql: string, params?: SqlParam[]): number;
|
|
125
|
+
get(sql: string, params?: SqlParam[]): SqlRow | null;
|
|
126
|
+
all(sql: string, params?: SqlParam[]): SqlRow[];
|
|
127
|
+
iterate(sql: string, params?: SqlParam[]): Iterable<SqlRow>;
|
|
128
|
+
exec(sql: string): void;
|
|
129
|
+
transaction<T>(fn: () => T): T;
|
|
130
|
+
pragma(_statement: string): unknown;
|
|
131
|
+
persist(): Promise<void>;
|
|
132
|
+
close(): void;
|
|
133
|
+
}
|
|
134
|
+
export {};
|
|
135
|
+
//# sourceMappingURL=sql-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-driver.d.ts","sourceRoot":"","sources":["../src/sql-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL driver abstraction over better-sqlite3 (native) and sql.js (WASM).
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: SQLiteBackend and SqlJsBackend implemented the same
|
|
5
|
+
* IMemoryBackend contract twice — ~1,780 lines of near-parallel logic — because
|
|
6
|
+
* the two drivers expose incompatible APIs. They then drifted, and the drift was
|
|
7
|
+
* silent: `query({tags})` returned ANY-match on one and ALL-match on the other,
|
|
8
|
+
* so the same call gave different answers depending on which driver happened to
|
|
9
|
+
* load (see backend-conformance.test.ts). This adapter exists so there is one
|
|
10
|
+
* implementation of the logic and only the driver plumbing differs.
|
|
11
|
+
*
|
|
12
|
+
* The APIs really are different, which is why the abstraction is not a thin
|
|
13
|
+
* shim:
|
|
14
|
+
*
|
|
15
|
+
* better-sqlite3 prepare().run/get/all/iterate, exec, pragma, transaction
|
|
16
|
+
* sql.js prepare() + bind/step/getAsObject/free, run, exec, export
|
|
17
|
+
*
|
|
18
|
+
* Notable asymmetries handled here:
|
|
19
|
+
* - sql.js has no cursor: `iterate` is emulated by stepping a statement.
|
|
20
|
+
* - sql.js has no native transaction wrapper: emulated with BEGIN/COMMIT/
|
|
21
|
+
* ROLLBACK, which is what better-sqlite3's .transaction() does internally.
|
|
22
|
+
* - sql.js is in-memory; durability requires an explicit export to disk.
|
|
23
|
+
* `persist()` is a no-op on better-sqlite3, which writes through.
|
|
24
|
+
* - PRAGMAs are meaningful only on better-sqlite3; ignored on sql.js.
|
|
25
|
+
*
|
|
26
|
+
* Rows are returned as plain objects keyed by column name, matching
|
|
27
|
+
* better-sqlite3's default and sql.js's getAsObject().
|
|
28
|
+
*/
|
|
29
|
+
export class BetterSqliteDriver {
|
|
30
|
+
db;
|
|
31
|
+
kind = 'better-sqlite3';
|
|
32
|
+
/**
|
|
33
|
+
* Prepared-statement cache keyed by SQL text.
|
|
34
|
+
*
|
|
35
|
+
* The backend this replaced pre-compiled its hot statements in initialize()
|
|
36
|
+
* specifically to avoid re-preparing per row ("N+1 re-prepare"). Routing
|
|
37
|
+
* everything through the driver would have silently reintroduced that cost
|
|
38
|
+
* in loops like bulkInsert and per-row embedding reads, so the optimisation
|
|
39
|
+
* moves here where it applies to every query rather than a hand-picked few.
|
|
40
|
+
*/
|
|
41
|
+
stmtCache = new Map();
|
|
42
|
+
constructor(db) {
|
|
43
|
+
this.db = db;
|
|
44
|
+
}
|
|
45
|
+
stmt(sql) {
|
|
46
|
+
let s = this.stmtCache.get(sql);
|
|
47
|
+
if (!s) {
|
|
48
|
+
s = this.db.prepare(sql);
|
|
49
|
+
this.stmtCache.set(sql, s);
|
|
50
|
+
}
|
|
51
|
+
return s;
|
|
52
|
+
}
|
|
53
|
+
run(sql, params = []) {
|
|
54
|
+
return this.stmt(sql).run(...params).changes ?? 0;
|
|
55
|
+
}
|
|
56
|
+
get(sql, params = []) {
|
|
57
|
+
return this.stmt(sql).get(...params) ?? null;
|
|
58
|
+
}
|
|
59
|
+
all(sql, params = []) {
|
|
60
|
+
return this.stmt(sql).all(...params);
|
|
61
|
+
}
|
|
62
|
+
iterate(sql, params = []) {
|
|
63
|
+
return this.stmt(sql).iterate(...params);
|
|
64
|
+
}
|
|
65
|
+
exec(sql) {
|
|
66
|
+
this.db.exec(sql);
|
|
67
|
+
}
|
|
68
|
+
transaction(fn) {
|
|
69
|
+
return this.db.transaction(fn)();
|
|
70
|
+
}
|
|
71
|
+
pragma(statement) {
|
|
72
|
+
return this.db.pragma(statement, { simple: true });
|
|
73
|
+
}
|
|
74
|
+
async persist() {
|
|
75
|
+
// better-sqlite3 writes through to the file; nothing to flush.
|
|
76
|
+
}
|
|
77
|
+
close() {
|
|
78
|
+
// Cached statements belong to the connection and die with it; clear the
|
|
79
|
+
// map so a reused driver object cannot hand out finalized statements.
|
|
80
|
+
this.stmtCache.clear();
|
|
81
|
+
this.db.close();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class SqlJsDriver {
|
|
85
|
+
db;
|
|
86
|
+
flush;
|
|
87
|
+
kind = 'sql.js';
|
|
88
|
+
/**
|
|
89
|
+
* @param db the opened sql.js Database
|
|
90
|
+
* @param flush writes the exported bytes to durable storage; omitted for
|
|
91
|
+
* :memory: databases, where persistence is meaningless
|
|
92
|
+
*/
|
|
93
|
+
constructor(db, flush) {
|
|
94
|
+
this.db = db;
|
|
95
|
+
this.flush = flush;
|
|
96
|
+
}
|
|
97
|
+
run(sql, params = []) {
|
|
98
|
+
this.db.run(sql, params);
|
|
99
|
+
// sql.js reports affected rows out-of-band rather than from run().
|
|
100
|
+
return typeof this.db.getRowsModified === 'function' ? this.db.getRowsModified() : 0;
|
|
101
|
+
}
|
|
102
|
+
get(sql, params = []) {
|
|
103
|
+
const stmt = this.db.prepare(sql);
|
|
104
|
+
try {
|
|
105
|
+
stmt.bind(params);
|
|
106
|
+
// step() is the only reliable no-row signal: getAsObject() on a
|
|
107
|
+
// statement that matched nothing returns an object keyed by column name
|
|
108
|
+
// with every value undefined, not {}. Checking Object.keys().length
|
|
109
|
+
// therefore passes it straight through, and callers then die on
|
|
110
|
+
// JSON.parse(undefined) — a real bug this replaced.
|
|
111
|
+
if (!stmt.step())
|
|
112
|
+
return null;
|
|
113
|
+
return stmt.getAsObject();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
stmt.free();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
all(sql, params = []) {
|
|
120
|
+
const stmt = this.db.prepare(sql);
|
|
121
|
+
const rows = [];
|
|
122
|
+
try {
|
|
123
|
+
stmt.bind(params);
|
|
124
|
+
while (stmt.step())
|
|
125
|
+
rows.push(stmt.getAsObject());
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
stmt.free();
|
|
129
|
+
}
|
|
130
|
+
return rows;
|
|
131
|
+
}
|
|
132
|
+
iterate(sql, params = []) {
|
|
133
|
+
// sql.js exposes no cursor. Materialising would defeat the point of
|
|
134
|
+
// iterate() for large tables, so step lazily and free the statement when
|
|
135
|
+
// the consumer stops — including on early `break`, which triggers the
|
|
136
|
+
// generator's return path.
|
|
137
|
+
const db = this.db;
|
|
138
|
+
return {
|
|
139
|
+
*[Symbol.iterator]() {
|
|
140
|
+
const stmt = db.prepare(sql);
|
|
141
|
+
try {
|
|
142
|
+
stmt.bind(params);
|
|
143
|
+
while (stmt.step())
|
|
144
|
+
yield stmt.getAsObject();
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
stmt.free();
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
exec(sql) {
|
|
153
|
+
this.db.exec(sql);
|
|
154
|
+
}
|
|
155
|
+
transaction(fn) {
|
|
156
|
+
// sql.js has no transaction wrapper; emulate what better-sqlite3 does.
|
|
157
|
+
this.db.run('BEGIN');
|
|
158
|
+
try {
|
|
159
|
+
const result = fn();
|
|
160
|
+
this.db.run('COMMIT');
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
try {
|
|
165
|
+
this.db.run('ROLLBACK');
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
/* rollback of an already-aborted transaction is not itself an error */
|
|
169
|
+
}
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
pragma(_statement) {
|
|
174
|
+
// PRAGMAs (journal_mode, synchronous, cache_size…) tune the native engine
|
|
175
|
+
// and have no meaning for the WASM build.
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
async persist() {
|
|
179
|
+
if (!this.flush)
|
|
180
|
+
return; // :memory: — nothing durable to write
|
|
181
|
+
await this.flush(this.db.export());
|
|
182
|
+
}
|
|
183
|
+
close() {
|
|
184
|
+
this.db.close();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=sql-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-driver.js","sourceRoot":"","sources":["../src/sql-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical memory schema, shared by both SQL drivers.
|
|
3
|
+
*
|
|
4
|
+
* Previously each backend declared its own schema and they diverged into two
|
|
5
|
+
* different *designs*, not merely a subset relationship:
|
|
6
|
+
*
|
|
7
|
+
* better-sqlite3 4 tables — memory_entries, memory_embeddings (FK CASCADE),
|
|
8
|
+
* memory_entry_tags (indexed tag filtering), agent_reads
|
|
9
|
+
* (collaborative promotion) — 11 indexes + 1 unique
|
|
10
|
+
* sql.js 1 table — memory_entries with an inline `embedding BLOB`
|
|
11
|
+
* — 5 indexes + 1 unique
|
|
12
|
+
*
|
|
13
|
+
* So a user who fell back to WASM silently got a structurally different, less
|
|
14
|
+
* capable store. The 4-table design is canonical here because it is the primary
|
|
15
|
+
* path, supports indexed tag queries rather than post-query filtering in JS,
|
|
16
|
+
* and is what the collaborative-promotion feature requires.
|
|
17
|
+
*
|
|
18
|
+
* Adopting it for sql.js means existing sql.js databases must be migrated:
|
|
19
|
+
* their embeddings live in a column that no longer exists in the canonical
|
|
20
|
+
* shape. `migrateLegacyInlineEmbeddings` below does that, and is deliberately
|
|
21
|
+
* conservative — it copies before it drops, is idempotent, and leaves the
|
|
22
|
+
* legacy column in place rather than rewriting the table.
|
|
23
|
+
*/
|
|
24
|
+
import type { SqlDriver } from './sql-driver.js';
|
|
25
|
+
/** Bumped when the canonical schema changes; stored in PRAGMA user_version. */
|
|
26
|
+
export declare const SCHEMA_VERSION = 2;
|
|
27
|
+
/**
|
|
28
|
+
* Create the canonical schema. Safe to run repeatedly.
|
|
29
|
+
*
|
|
30
|
+
* `embedding BLOB` is intentionally absent from memory_entries — embeddings
|
|
31
|
+
* live in memory_embeddings so a row can be read without loading its vector.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createCanonicalSchema(driver: SqlDriver): void;
|
|
34
|
+
/**
|
|
35
|
+
* Enforce UNIQUE(namespace, key).
|
|
36
|
+
*
|
|
37
|
+
* The sql.js schema always had it; the native one carried only a plain index,
|
|
38
|
+
* so repeated stores under the same key accumulated duplicates and getByKey
|
|
39
|
+
* returned an arbitrary winner. Existing databases may already hold duplicates,
|
|
40
|
+
* so dedupe (keeping the newest) before creating the unique index.
|
|
41
|
+
*/
|
|
42
|
+
export declare function enforceNamespaceKeyUnique(driver: SqlDriver): void;
|
|
43
|
+
/** True when memory_entries still carries the legacy inline embedding column. */
|
|
44
|
+
export declare function hasLegacyInlineEmbedding(driver: SqlDriver): boolean;
|
|
45
|
+
export interface MigrationReport {
|
|
46
|
+
/** Whether a legacy inline-embedding column was present at all. */
|
|
47
|
+
legacyColumnFound: boolean;
|
|
48
|
+
/** Rows whose embedding was copied into memory_embeddings. */
|
|
49
|
+
migrated: number;
|
|
50
|
+
/** Rows already present in memory_embeddings and therefore left alone. */
|
|
51
|
+
skipped: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Move embeddings from the legacy inline `memory_entries.embedding` column into
|
|
55
|
+
* `memory_embeddings`.
|
|
56
|
+
*
|
|
57
|
+
* Written defensively, because this runs against real user data on the fallback
|
|
58
|
+
* path — the machines least able to recover from a bad migration:
|
|
59
|
+
*
|
|
60
|
+
* - **Copy, never move.** The legacy column is left untouched. If anything
|
|
61
|
+
* downstream is wrong, the original bytes are still there.
|
|
62
|
+
* - **Idempotent.** `INSERT OR IGNORE` plus an explicit skip count means
|
|
63
|
+
* re-running changes nothing, so a crash mid-migration is recoverable by
|
|
64
|
+
* simply running again.
|
|
65
|
+
* - **Transactional.** Either every row moves or none does.
|
|
66
|
+
* - **Null-safe.** Rows with no embedding are not given an empty one.
|
|
67
|
+
*/
|
|
68
|
+
export declare function migrateLegacyInlineEmbeddings(driver: SqlDriver): MigrationReport;
|
|
69
|
+
/**
|
|
70
|
+
* Bring a database to the canonical schema: create tables, migrate legacy
|
|
71
|
+
* inline embeddings, enforce uniqueness, and record the version.
|
|
72
|
+
*/
|
|
73
|
+
export declare function initializeSchema(driver: SqlDriver): MigrationReport;
|
|
74
|
+
//# sourceMappingURL=sql-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-schema.d.ts","sourceRoot":"","sources":["../src/sql-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,+EAA+E;AAC/E,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqD7D;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBjE;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAOnE;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,CA6BhF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,CAUnE"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical memory schema, shared by both SQL drivers.
|
|
3
|
+
*
|
|
4
|
+
* Previously each backend declared its own schema and they diverged into two
|
|
5
|
+
* different *designs*, not merely a subset relationship:
|
|
6
|
+
*
|
|
7
|
+
* better-sqlite3 4 tables — memory_entries, memory_embeddings (FK CASCADE),
|
|
8
|
+
* memory_entry_tags (indexed tag filtering), agent_reads
|
|
9
|
+
* (collaborative promotion) — 11 indexes + 1 unique
|
|
10
|
+
* sql.js 1 table — memory_entries with an inline `embedding BLOB`
|
|
11
|
+
* — 5 indexes + 1 unique
|
|
12
|
+
*
|
|
13
|
+
* So a user who fell back to WASM silently got a structurally different, less
|
|
14
|
+
* capable store. The 4-table design is canonical here because it is the primary
|
|
15
|
+
* path, supports indexed tag queries rather than post-query filtering in JS,
|
|
16
|
+
* and is what the collaborative-promotion feature requires.
|
|
17
|
+
*
|
|
18
|
+
* Adopting it for sql.js means existing sql.js databases must be migrated:
|
|
19
|
+
* their embeddings live in a column that no longer exists in the canonical
|
|
20
|
+
* shape. `migrateLegacyInlineEmbeddings` below does that, and is deliberately
|
|
21
|
+
* conservative — it copies before it drops, is idempotent, and leaves the
|
|
22
|
+
* legacy column in place rather than rewriting the table.
|
|
23
|
+
*/
|
|
24
|
+
/** Bumped when the canonical schema changes; stored in PRAGMA user_version. */
|
|
25
|
+
export const SCHEMA_VERSION = 2;
|
|
26
|
+
/**
|
|
27
|
+
* Create the canonical schema. Safe to run repeatedly.
|
|
28
|
+
*
|
|
29
|
+
* `embedding BLOB` is intentionally absent from memory_entries — embeddings
|
|
30
|
+
* live in memory_embeddings so a row can be read without loading its vector.
|
|
31
|
+
*/
|
|
32
|
+
export function createCanonicalSchema(driver) {
|
|
33
|
+
driver.exec(`
|
|
34
|
+
CREATE TABLE IF NOT EXISTS memory_entries (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
key TEXT NOT NULL,
|
|
37
|
+
content TEXT NOT NULL,
|
|
38
|
+
type TEXT NOT NULL,
|
|
39
|
+
namespace TEXT NOT NULL,
|
|
40
|
+
tags TEXT NOT NULL,
|
|
41
|
+
metadata TEXT NOT NULL,
|
|
42
|
+
owner_id TEXT,
|
|
43
|
+
access_level TEXT NOT NULL,
|
|
44
|
+
created_at INTEGER NOT NULL,
|
|
45
|
+
updated_at INTEGER NOT NULL,
|
|
46
|
+
expires_at INTEGER,
|
|
47
|
+
event_at INTEGER,
|
|
48
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
49
|
+
"references" TEXT NOT NULL,
|
|
50
|
+
access_count INTEGER NOT NULL DEFAULT 0,
|
|
51
|
+
last_accessed_at INTEGER NOT NULL
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_namespace ON memory_entries(namespace);
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_key ON memory_entries(key);
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_type ON memory_entries(type);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_owner_id ON memory_entries(owner_id);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_created_at ON memory_entries(created_at);
|
|
59
|
+
CREATE INDEX IF NOT EXISTS idx_updated_at ON memory_entries(updated_at);
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_expires_at ON memory_entries(expires_at);
|
|
61
|
+
|
|
62
|
+
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
63
|
+
entry_id TEXT PRIMARY KEY,
|
|
64
|
+
embedding BLOB,
|
|
65
|
+
FOREIGN KEY (entry_id) REFERENCES memory_entries(id) ON DELETE CASCADE
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE TABLE IF NOT EXISTS memory_entry_tags (
|
|
69
|
+
entry_id TEXT NOT NULL,
|
|
70
|
+
tag TEXT NOT NULL,
|
|
71
|
+
PRIMARY KEY (entry_id, tag),
|
|
72
|
+
FOREIGN KEY (entry_id) REFERENCES memory_entries(id) ON DELETE CASCADE
|
|
73
|
+
);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_entry_tag ON memory_entry_tags(tag, entry_id);
|
|
75
|
+
|
|
76
|
+
CREATE TABLE IF NOT EXISTS agent_reads (
|
|
77
|
+
entry_id TEXT NOT NULL,
|
|
78
|
+
agent_id TEXT NOT NULL,
|
|
79
|
+
read_at INTEGER NOT NULL,
|
|
80
|
+
UNIQUE(entry_id, agent_id)
|
|
81
|
+
);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_agent_reads_entry ON agent_reads(entry_id);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_agent_reads_at ON agent_reads(read_at);
|
|
84
|
+
`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Enforce UNIQUE(namespace, key).
|
|
88
|
+
*
|
|
89
|
+
* The sql.js schema always had it; the native one carried only a plain index,
|
|
90
|
+
* so repeated stores under the same key accumulated duplicates and getByKey
|
|
91
|
+
* returned an arbitrary winner. Existing databases may already hold duplicates,
|
|
92
|
+
* so dedupe (keeping the newest) before creating the unique index.
|
|
93
|
+
*/
|
|
94
|
+
export function enforceNamespaceKeyUnique(driver) {
|
|
95
|
+
try {
|
|
96
|
+
driver.exec(`
|
|
97
|
+
DELETE FROM memory_entries WHERE id NOT IN (
|
|
98
|
+
SELECT id FROM (
|
|
99
|
+
SELECT id, ROW_NUMBER() OVER (
|
|
100
|
+
PARTITION BY namespace, key ORDER BY updated_at DESC, id DESC
|
|
101
|
+
) AS rn FROM memory_entries
|
|
102
|
+
) WHERE rn = 1
|
|
103
|
+
);
|
|
104
|
+
DROP INDEX IF EXISTS idx_namespace_key;
|
|
105
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_namespace_key_unique
|
|
106
|
+
ON memory_entries(namespace, key);
|
|
107
|
+
`);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Very old SQLite builds lack window functions. Keep the plain index rather
|
|
111
|
+
// than failing initialization — duplicate accumulation is the lesser evil.
|
|
112
|
+
driver.exec('CREATE INDEX IF NOT EXISTS idx_namespace_key ON memory_entries(namespace, key)');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** True when memory_entries still carries the legacy inline embedding column. */
|
|
116
|
+
export function hasLegacyInlineEmbedding(driver) {
|
|
117
|
+
try {
|
|
118
|
+
const cols = driver.all('PRAGMA table_info(memory_entries)');
|
|
119
|
+
return cols.some((c) => String(c.name) === 'embedding');
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Move embeddings from the legacy inline `memory_entries.embedding` column into
|
|
127
|
+
* `memory_embeddings`.
|
|
128
|
+
*
|
|
129
|
+
* Written defensively, because this runs against real user data on the fallback
|
|
130
|
+
* path — the machines least able to recover from a bad migration:
|
|
131
|
+
*
|
|
132
|
+
* - **Copy, never move.** The legacy column is left untouched. If anything
|
|
133
|
+
* downstream is wrong, the original bytes are still there.
|
|
134
|
+
* - **Idempotent.** `INSERT OR IGNORE` plus an explicit skip count means
|
|
135
|
+
* re-running changes nothing, so a crash mid-migration is recoverable by
|
|
136
|
+
* simply running again.
|
|
137
|
+
* - **Transactional.** Either every row moves or none does.
|
|
138
|
+
* - **Null-safe.** Rows with no embedding are not given an empty one.
|
|
139
|
+
*/
|
|
140
|
+
export function migrateLegacyInlineEmbeddings(driver) {
|
|
141
|
+
const report = { legacyColumnFound: false, migrated: 0, skipped: 0 };
|
|
142
|
+
if (!hasLegacyInlineEmbedding(driver))
|
|
143
|
+
return report;
|
|
144
|
+
report.legacyColumnFound = true;
|
|
145
|
+
driver.transaction(() => {
|
|
146
|
+
const rows = driver.all(`SELECT e.id AS id, e.embedding AS embedding
|
|
147
|
+
FROM memory_entries e
|
|
148
|
+
WHERE e.embedding IS NOT NULL`);
|
|
149
|
+
for (const row of rows) {
|
|
150
|
+
const id = String(row.id);
|
|
151
|
+
const existing = driver.get('SELECT entry_id FROM memory_embeddings WHERE entry_id = ?', [id]);
|
|
152
|
+
if (existing) {
|
|
153
|
+
report.skipped++;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
driver.run('INSERT OR IGNORE INTO memory_embeddings (entry_id, embedding) VALUES (?, ?)', [id, row.embedding]);
|
|
157
|
+
report.migrated++;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
return report;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Bring a database to the canonical schema: create tables, migrate legacy
|
|
164
|
+
* inline embeddings, enforce uniqueness, and record the version.
|
|
165
|
+
*/
|
|
166
|
+
export function initializeSchema(driver) {
|
|
167
|
+
createCanonicalSchema(driver);
|
|
168
|
+
const report = migrateLegacyInlineEmbeddings(driver);
|
|
169
|
+
enforceNamespaceKeyUnique(driver);
|
|
170
|
+
try {
|
|
171
|
+
driver.exec(`PRAGMA user_version = ${SCHEMA_VERSION}`);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
/* pragma unsupported on this driver — version tracking is advisory */
|
|
175
|
+
}
|
|
176
|
+
return report;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=sql-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-schema.js","sourceRoot":"","sources":["../src/sql-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDX,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;KAWX,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,2EAA2E;QAC3E,MAAM,CAAC,IAAI,CACT,gFAAgF,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAWD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,MAAM,GAAoB,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAEtF,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrD,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAEhC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CACrB;;sCAEgC,CACjC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,2DAA2D,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/F,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,CACR,6EAA6E,EAC7E,CAAC,EAAE,EAAE,GAAG,CAAC,SAAuB,CAAC,CAClC,CAAC;YACF,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACrD,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,yBAAyB,cAAc,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|