@monoes/memory 1.0.21 → 1.0.23
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/hnsw-index.d.ts +1 -1
- package/dist/hnsw-index.js +1 -1
- package/dist/sql-backend-reads.d.ts +1 -1
- package/dist/sql-backend-reads.js +1 -1
- package/dist/sql-backend.d.ts +1 -1
- package/dist/sql-backend.d.ts.map +1 -1
- package/dist/sql-backend.js +10 -4
- package/dist/sql-backend.js.map +1 -1
- package/dist/sql-schema.d.ts +15 -3
- package/dist/sql-schema.d.ts.map +1 -1
- package/dist/sql-schema.js +39 -8
- package/dist/sql-schema.js.map +1 -1
- package/package.json +1 -1
package/dist/hnsw-index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Hierarchical Navigable Small World (HNSW) index for approximate
|
|
5
5
|
* nearest-neighbour vector search. SqlBackend switches to it above
|
|
6
|
-
* MONOMIND_HNSW_THRESHOLD (default
|
|
6
|
+
* MONOMIND_HNSW_THRESHOLD (default 100,000 entries); below that, brute-force
|
|
7
7
|
* cosine is used. No measured speedup figure is claimed here.
|
|
8
8
|
*
|
|
9
9
|
* OPTIMIZATIONS:
|
package/dist/hnsw-index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Hierarchical Navigable Small World (HNSW) index for approximate
|
|
5
5
|
* nearest-neighbour vector search. SqlBackend switches to it above
|
|
6
|
-
* MONOMIND_HNSW_THRESHOLD (default
|
|
6
|
+
* MONOMIND_HNSW_THRESHOLD (default 100,000 entries); below that, brute-force
|
|
7
7
|
* cosine is used. No measured speedup figure is claimed here.
|
|
8
8
|
*
|
|
9
9
|
* OPTIMIZATIONS:
|
|
@@ -19,7 +19,7 @@ export declare const sqlBackendReadMethods: {
|
|
|
19
19
|
query(this: SqlBackend, query: MemoryQuery): Promise<MemoryEntry[]>;
|
|
20
20
|
/**
|
|
21
21
|
* Semantic search. Below MONOMIND_HNSW_THRESHOLD active embedded entries
|
|
22
|
-
* (default
|
|
22
|
+
* (default 100,000), brute-force cosine over stored embeddings — namespace-
|
|
23
23
|
* and TTL-filtered in SQL — stays cheaper (a few tens of ms at second-brain
|
|
24
24
|
* scale). Above it, getAnnIndex() builds (or loads a persisted) HNSW graph
|
|
25
25
|
* and this searches that instead; results are still namespace/threshold
|
|
@@ -159,7 +159,7 @@ export const sqlBackendReadMethods = {
|
|
|
159
159
|
},
|
|
160
160
|
/**
|
|
161
161
|
* Semantic search. Below MONOMIND_HNSW_THRESHOLD active embedded entries
|
|
162
|
-
* (default
|
|
162
|
+
* (default 100,000), brute-force cosine over stored embeddings — namespace-
|
|
163
163
|
* and TTL-filtered in SQL — stays cheaper (a few tens of ms at second-brain
|
|
164
164
|
* scale). Above it, getAnnIndex() builds (or loads a persisted) HNSW graph
|
|
165
165
|
* and this searches that instead; results are still namespace/threshold
|
package/dist/sql-backend.d.ts
CHANGED
|
@@ -138,7 +138,7 @@ export declare class SqlBackend extends EventEmitter implements IMemoryBackend {
|
|
|
138
138
|
/** Flush to durable storage. No-op on write-through drivers. */
|
|
139
139
|
persist(): Promise<void>;
|
|
140
140
|
private static readonly TAG_RE;
|
|
141
|
-
private static readonly
|
|
141
|
+
private static readonly PROVENANCE_TAG_RE;
|
|
142
142
|
private static readonly MAX_TAG_LEN;
|
|
143
143
|
protected validateTags(tags: string[]): void;
|
|
144
144
|
protected ensureInitialized(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-backend.d.ts","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,WAAW,EAEX,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAQD,qBAAa,UAAW,SAAQ,YAAa,YAAW,cAAc;IACpE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACnC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC1C,SAAS,CAAC,WAAW,UAAS;IAC9B,+DAA+D;IAC/D,eAAe,EAAE,eAAe,GAAG,IAAI,CAAQ;IAC/C,iEAAiE;IACjE,SAAS,CAAC,cAAc,UAAS;IAEjC,SAAS,CAAC,KAAK;QAAK,UAAU;QAAK,cAAc;QAAK,UAAU;QAAK,cAAc;MAAM;IACzF,gFAAgF;IAChF,SAAS,CAAC,UAAU,SAAK;IAUzB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC7C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IAC5D,SAAS,CAAC,cAAc,SAAK;IAC7B,SAAS,CAAC,iBAAiB,SAAM;IACjC,SAAS,CAAC,wBAAwB,SAAM;IAExC,MAAM,CAAC,QAAQ,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"sql-backend.d.ts","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"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"}
|
package/dist/sql-backend.js
CHANGED
|
@@ -65,7 +65,10 @@ export class SqlBackend extends EventEmitter {
|
|
|
65
65
|
static ANN_THRESHOLD = (() => {
|
|
66
66
|
const raw = process.env.MONOMIND_HNSW_THRESHOLD;
|
|
67
67
|
const n = raw !== undefined ? parseInt(raw, 10) : NaN;
|
|
68
|
-
|
|
68
|
+
// 100k, not 5k (issue #426): at 20k vectors brute force answered in
|
|
69
|
+
// ~0.25 s while the JSON-cached graph took ~1.2 s to load (~1 GB RSS)
|
|
70
|
+
// and ~78 s to build the first time.
|
|
71
|
+
return Number.isFinite(n) && n > 0 ? n : 100_000;
|
|
69
72
|
})();
|
|
70
73
|
/** Directory to cache the built ANN graph in, next to the real DB file.
|
|
71
74
|
* Returns null (no persistence) for in-memory databases — there is no
|
|
@@ -232,15 +235,18 @@ export class SqlBackend extends EventEmitter {
|
|
|
232
235
|
// Every tag write is parameterized, so this is shape sanity rather than
|
|
233
236
|
// injection defense. `src:<absolute path>` provenance tags are first-class in
|
|
234
237
|
// the knowledge pipeline and legitimately contain spaces, parentheses and
|
|
235
|
-
// unicode, so they only exclude control characters.
|
|
238
|
+
// unicode, so they only exclude control characters. The same holds for
|
|
239
|
+
// `url:<canonical url>` (a query string carries `?`, `=`, `&`, `%`) and
|
|
240
|
+
// `parent:<scope>:<path>` — refusing those failed every chunk of any capture
|
|
241
|
+
// whose page URL has a query string, e.g. every YouTube video.
|
|
236
242
|
static TAG_RE = /^[a-zA-Z0-9_\-.:/~ ]+$/;
|
|
237
|
-
static
|
|
243
|
+
static PROVENANCE_TAG_RE = /^(?:src|url|parent):[^\x00-\x1f\x7f]+$/;
|
|
238
244
|
static MAX_TAG_LEN = 512;
|
|
239
245
|
validateTags(tags) {
|
|
240
246
|
for (const tag of tags) {
|
|
241
247
|
const ok = typeof tag === 'string' &&
|
|
242
248
|
tag.length <= SqlBackend.MAX_TAG_LEN &&
|
|
243
|
-
(
|
|
249
|
+
(SqlBackend.PROVENANCE_TAG_RE.test(tag) || SqlBackend.TAG_RE.test(tag));
|
|
244
250
|
if (!ok)
|
|
245
251
|
throw new Error(`Invalid tag format: "${String(tag).slice(0, 80)}"`);
|
|
246
252
|
}
|
package/dist/sql-backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-backend.js","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAC;AAwBvF,MAAM,cAAc,GAAqB;IACvC,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,OAAO,UAAW,SAAQ,YAAY;IAChC,MAAM,CAAmB;IACzB,MAAM,GAAqB,IAAI,CAAC;IAChC,WAAW,GAAG,KAAK,CAAC;IAC9B,+DAA+D;IAC/D,eAAe,GAA2B,IAAI,CAAC;IAC/C,iEAAiE;IACvD,cAAc,GAAG,KAAK,CAAC;IAEvB,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACzF,gFAAgF;IACtE,UAAU,GAAG,CAAC,CAAC;IAEzB,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,2EAA2E;IAC3E,+BAA+B;IACrB,SAAS,GAAqB,IAAI,CAAC;IACnC,WAAW,GAA6B,IAAI,GAAG,EAAE,CAAC;IAClD,cAAc,GAAG,CAAC,CAAC;IACnB,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACvB,wBAAwB,GAAG,CAAC,CAAC,CAAC;IAExC,MAAM,CAAU,aAAa,GAAG,CAAC,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"sql-backend.js","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"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"}
|
package/dist/sql-schema.d.ts
CHANGED
|
@@ -22,8 +22,15 @@
|
|
|
22
22
|
* legacy column in place rather than rewriting the table.
|
|
23
23
|
*/
|
|
24
24
|
import type { SqlDriver } from './sql-driver.js';
|
|
25
|
-
/**
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Bumped when the canonical schema changes; stored in PRAGMA user_version.
|
|
27
|
+
* A database below this version gets the one-time repair migrations
|
|
28
|
+
* (namespace+key dedupe, FTS5 row dedupe) on its next open; at or above it
|
|
29
|
+
* they are skipped (issue #426: they full-scanned the table on every open).
|
|
30
|
+
* 4 = the version that started gating those repairs, so every existing store
|
|
31
|
+
* gets them once more under the current code.
|
|
32
|
+
*/
|
|
33
|
+
export declare const SCHEMA_VERSION = 4;
|
|
27
34
|
/**
|
|
28
35
|
* Create the canonical schema. Safe to run repeatedly.
|
|
29
36
|
*
|
|
@@ -85,11 +92,16 @@ export declare function hasFTS5Table(driver: SqlDriver): boolean;
|
|
|
85
92
|
*
|
|
86
93
|
* Returns true if the FTS5 table is usable after this call.
|
|
87
94
|
*/
|
|
88
|
-
export declare function createFTS5Index(driver: SqlDriver): boolean;
|
|
95
|
+
export declare function createFTS5Index(driver: SqlDriver, repair?: boolean): boolean;
|
|
89
96
|
/**
|
|
90
97
|
* Bring a database to the canonical schema: create tables, migrate legacy
|
|
91
98
|
* inline embeddings, enforce uniqueness, build the FTS5 index, and record
|
|
92
99
|
* the version.
|
|
100
|
+
*
|
|
101
|
+
* The dedupe repairs scan every row, so they run only when the stored
|
|
102
|
+
* version is below SCHEMA_VERSION (an older release that opens the file
|
|
103
|
+
* writes its own lower version back, so it gets repaired again next time).
|
|
104
|
+
* The namespace+key repair also re-runs whenever the unique index is missing.
|
|
93
105
|
*/
|
|
94
106
|
export declare function initializeSchema(driver: SqlDriver): MigrationReport;
|
|
95
107
|
//# sourceMappingURL=sql-schema.d.ts.map
|
package/dist/sql-schema.d.ts.map
CHANGED
|
@@ -1 +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
|
|
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;;;;;;;GAOG;AACH,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,CAmBjE;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,CA+BhF;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CASvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,UAAO,GAAG,OAAO,CAkDzE;AA0FD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,CAYnE"}
|
package/dist/sql-schema.js
CHANGED
|
@@ -21,8 +21,15 @@
|
|
|
21
21
|
* conservative — it copies before it drops, is idempotent, and leaves the
|
|
22
22
|
* legacy column in place rather than rewriting the table.
|
|
23
23
|
*/
|
|
24
|
-
/**
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Bumped when the canonical schema changes; stored in PRAGMA user_version.
|
|
26
|
+
* A database below this version gets the one-time repair migrations
|
|
27
|
+
* (namespace+key dedupe, FTS5 row dedupe) on its next open; at or above it
|
|
28
|
+
* they are skipped (issue #426: they full-scanned the table on every open).
|
|
29
|
+
* 4 = the version that started gating those repairs, so every existing store
|
|
30
|
+
* gets them once more under the current code.
|
|
31
|
+
*/
|
|
32
|
+
export const SCHEMA_VERSION = 4;
|
|
26
33
|
/**
|
|
27
34
|
* Create the canonical schema. Safe to run repeatedly.
|
|
28
35
|
*
|
|
@@ -192,7 +199,7 @@ export function hasFTS5Table(driver) {
|
|
|
192
199
|
*
|
|
193
200
|
* Returns true if the FTS5 table is usable after this call.
|
|
194
201
|
*/
|
|
195
|
-
export function createFTS5Index(driver) {
|
|
202
|
+
export function createFTS5Index(driver, repair = true) {
|
|
196
203
|
const alreadyExists = hasFTS5Table(driver);
|
|
197
204
|
if (!alreadyExists) {
|
|
198
205
|
try {
|
|
@@ -230,7 +237,7 @@ export function createFTS5Index(driver) {
|
|
|
230
237
|
}
|
|
231
238
|
try {
|
|
232
239
|
ensureFTS5Triggers(driver);
|
|
233
|
-
if (alreadyExists)
|
|
240
|
+
if (alreadyExists && repair)
|
|
234
241
|
dedupeFTS5Rows(driver);
|
|
235
242
|
return true;
|
|
236
243
|
}
|
|
@@ -303,24 +310,48 @@ function ensureFTS5Triggers(driver) {
|
|
|
303
310
|
* the same `entry_id` (fixing the trigger only stops NEW duplicates; it does
|
|
304
311
|
* not retroactively clean up ones already written). Keeps the row with the
|
|
305
312
|
* largest `rowid` per `entry_id` — FTS5 rowids are monotonically increasing
|
|
306
|
-
* on insert, so that is the most-recently-written (current) content
|
|
307
|
-
*
|
|
313
|
+
* on insert, so that is the most-recently-written (current) content. Run by
|
|
314
|
+
* `initializeSchema()` only while the stored version is below SCHEMA_VERSION. */
|
|
308
315
|
function dedupeFTS5Rows(driver) {
|
|
309
316
|
driver.exec(`
|
|
310
317
|
DELETE FROM memory_entries_fts
|
|
311
318
|
WHERE rowid NOT IN (SELECT MAX(rowid) FROM memory_entries_fts GROUP BY entry_id);
|
|
312
319
|
`);
|
|
313
320
|
}
|
|
321
|
+
/** The stored PRAGMA user_version, or 0 when unreadable. */
|
|
322
|
+
function readSchemaVersion(driver) {
|
|
323
|
+
try {
|
|
324
|
+
return Number(driver.get('PRAGMA user_version')?.user_version ?? 0) || 0;
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return 0;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function hasNamespaceKeyUniqueIndex(driver) {
|
|
331
|
+
try {
|
|
332
|
+
return (driver.get("SELECT name FROM sqlite_master WHERE type = 'index' AND name = 'idx_namespace_key_unique'") !== null);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
314
338
|
/**
|
|
315
339
|
* Bring a database to the canonical schema: create tables, migrate legacy
|
|
316
340
|
* inline embeddings, enforce uniqueness, build the FTS5 index, and record
|
|
317
341
|
* the version.
|
|
342
|
+
*
|
|
343
|
+
* The dedupe repairs scan every row, so they run only when the stored
|
|
344
|
+
* version is below SCHEMA_VERSION (an older release that opens the file
|
|
345
|
+
* writes its own lower version back, so it gets repaired again next time).
|
|
346
|
+
* The namespace+key repair also re-runs whenever the unique index is missing.
|
|
318
347
|
*/
|
|
319
348
|
export function initializeSchema(driver) {
|
|
349
|
+
const needsRepair = readSchemaVersion(driver) < SCHEMA_VERSION;
|
|
320
350
|
createCanonicalSchema(driver);
|
|
321
351
|
const report = migrateLegacyInlineEmbeddings(driver);
|
|
322
|
-
|
|
323
|
-
|
|
352
|
+
if (needsRepair || !hasNamespaceKeyUniqueIndex(driver))
|
|
353
|
+
enforceNamespaceKeyUnique(driver);
|
|
354
|
+
createFTS5Index(driver, needsRepair);
|
|
324
355
|
try {
|
|
325
356
|
driver.exec(`PRAGMA user_version = ${SCHEMA_VERSION}`);
|
|
326
357
|
}
|
package/dist/sql-schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-schema.js","sourceRoot":"","sources":["../src/sql-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH
|
|
1
|
+
{"version":3,"file":"sql-schema.js","sourceRoot":"","sources":["../src/sql-schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED