@monoes/memory 1.0.19 → 1.0.21

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.
Files changed (73) hide show
  1. package/dist/hnsw-distance.d.ts +31 -0
  2. package/dist/hnsw-distance.d.ts.map +1 -0
  3. package/dist/hnsw-distance.js +106 -0
  4. package/dist/hnsw-distance.js.map +1 -0
  5. package/dist/hnsw-graph-ops.d.ts +29 -0
  6. package/dist/hnsw-graph-ops.d.ts.map +1 -0
  7. package/dist/hnsw-graph-ops.js +96 -0
  8. package/dist/hnsw-graph-ops.js.map +1 -0
  9. package/dist/hnsw-heap.d.ts +45 -0
  10. package/dist/hnsw-heap.d.ts.map +1 -0
  11. package/dist/hnsw-heap.js +155 -0
  12. package/dist/hnsw-heap.js.map +1 -0
  13. package/dist/hnsw-index.d.ts +18 -43
  14. package/dist/hnsw-index.d.ts.map +1 -1
  15. package/dist/hnsw-index.js +21 -463
  16. package/dist/hnsw-index.js.map +1 -1
  17. package/dist/hnsw-quantizer.d.ts +28 -0
  18. package/dist/hnsw-quantizer.d.ts.map +1 -0
  19. package/dist/hnsw-quantizer.js +100 -0
  20. package/dist/hnsw-quantizer.js.map +1 -0
  21. package/dist/hnsw-serialize.d.ts +39 -0
  22. package/dist/hnsw-serialize.d.ts.map +1 -0
  23. package/dist/hnsw-serialize.js +54 -0
  24. package/dist/hnsw-serialize.js.map +1 -0
  25. package/dist/migration-loaders.d.ts +38 -0
  26. package/dist/migration-loaders.d.ts.map +1 -0
  27. package/dist/migration-loaders.js +269 -0
  28. package/dist/migration-loaders.js.map +1 -0
  29. package/dist/migration-transform.d.ts +21 -0
  30. package/dist/migration-transform.d.ts.map +1 -0
  31. package/dist/migration-transform.js +124 -0
  32. package/dist/migration-transform.js.map +1 -0
  33. package/dist/migration.d.ts +38 -22
  34. package/dist/migration.d.ts.map +1 -1
  35. package/dist/migration.js +35 -348
  36. package/dist/migration.js.map +1 -1
  37. package/dist/sql-backend-ann.d.ts +46 -0
  38. package/dist/sql-backend-ann.d.ts.map +1 -0
  39. package/dist/sql-backend-ann.js +120 -0
  40. package/dist/sql-backend-ann.js.map +1 -0
  41. package/dist/sql-backend-introspect.d.ts +17 -0
  42. package/dist/sql-backend-introspect.d.ts.map +1 -0
  43. package/dist/sql-backend-introspect.js +114 -0
  44. package/dist/sql-backend-introspect.js.map +1 -0
  45. package/dist/sql-backend-reads.d.ts +53 -0
  46. package/dist/sql-backend-reads.d.ts.map +1 -0
  47. package/dist/sql-backend-reads.js +295 -0
  48. package/dist/sql-backend-reads.js.map +1 -0
  49. package/dist/sql-backend-writes.d.ts +64 -0
  50. package/dist/sql-backend-writes.d.ts.map +1 -0
  51. package/dist/sql-backend-writes.js +270 -0
  52. package/dist/sql-backend-writes.js.map +1 -0
  53. package/dist/sql-backend.d.ts +39 -96
  54. package/dist/sql-backend.d.ts.map +1 -1
  55. package/dist/sql-backend.js +49 -706
  56. package/dist/sql-backend.js.map +1 -1
  57. package/dist/types-backend.d.ts +187 -0
  58. package/dist/types-backend.d.ts.map +1 -0
  59. package/dist/types-backend.js +8 -0
  60. package/dist/types-backend.js.map +1 -0
  61. package/dist/types-core.d.ts +180 -0
  62. package/dist/types-core.d.ts.map +1 -0
  63. package/dist/types-core.js +8 -0
  64. package/dist/types-core.js.map +1 -0
  65. package/dist/types-misc.d.ts +172 -0
  66. package/dist/types-misc.d.ts.map +1 -0
  67. package/dist/types-misc.js +56 -0
  68. package/dist/types-misc.js.map +1 -0
  69. package/dist/types.d.ts +8 -516
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js +5 -49
  72. package/dist/types.js.map +1 -1
  73. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-backend-writes.js","sourceRoot":"","sources":["../src/sql-backend-writes.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,22 @@
13
13
  * sql-driver.ts; the canonical schema and the legacy-data migration live in
14
14
  * sql-schema.ts. This file contains only behaviour.
15
15
  *
16
+ * File-size sweep: the class's method BODIES are grouped into sibling
17
+ * modules — ANN/HNSW index management in sql-backend-ann.ts, the
18
+ * store/update/delete family in sql-backend-writes.ts, the get/query/search
19
+ * family in sql-backend-reads.ts, and stats/health/persist in
20
+ * sql-backend-introspect.ts. Each stays a real method here (same signature,
21
+ * same visibility) so callers and TypeScript see no difference; the method
22
+ * body is just `return theSiblingImpl.call(this, ...args)`. Fields those
23
+ * bodies read/write moved from `private` to `protected` (compile-time only;
24
+ * no runtime change) — TypeScript allows a standalone function typed
25
+ * `this: SqlBackend` to reach `protected` members but not `private` ones, so
26
+ * `protected` is the minimum visibility the split needs.
27
+ *
16
28
  * @module v1/memory/sql-backend
17
29
  */
18
30
  import { EventEmitter } from 'node:events';
31
+ import type { HNSWIndex } from './hnsw-index.js';
19
32
  import type { SqlDriver } from './sql-driver.js';
20
33
  import { type MigrationReport } from './sql-schema.js';
21
34
  import type { BackendStats, EmbeddingGenerator, HealthCheckResult, IMemoryBackend, MemoryEntry, MemoryEntryUpdate, MemoryQuery, SearchOptions, SearchResult } from './types.js';
@@ -35,40 +48,35 @@ export declare class SqlBackend extends EventEmitter implements IMemoryBackend {
35
48
  /** Populated during initialize(); surfaced for diagnostics. */
36
49
  migrationReport: MigrationReport | null;
37
50
  /** Whether the FTS5 full-text index is available (Issue #66). */
38
- private _fts5Available;
39
- private stats;
51
+ protected _fts5Available: boolean;
52
+ protected stats: {
53
+ queryCount: number;
54
+ totalQueryTime: number;
55
+ writeCount: number;
56
+ totalWriteTime: number;
57
+ };
40
58
  /** Debounce counter: the agent_reads purge is expensive, so it is amortised. */
41
- private _readCount;
42
- private _annIndex;
43
- private _annEntries;
44
- private _annDimensions;
45
- private _annBuiltForCount;
46
- private _annBuiltForMaxUpdatedAt;
47
- private static readonly ANN_THRESHOLD;
59
+ protected _readCount: number;
60
+ protected _annIndex: HNSWIndex | null;
61
+ protected _annEntries: Map<string, MemoryEntry>;
62
+ protected _annDimensions: number;
63
+ protected _annBuiltForCount: number;
64
+ protected _annBuiltForMaxUpdatedAt: number;
65
+ static readonly ANN_THRESHOLD: number;
48
66
  /** Directory to cache the built ANN graph in, next to the real DB file.
49
67
  * Returns null (no persistence) for in-memory databases — there is no
50
68
  * stable location to cache next to, and the process-lifetime in-memory
51
69
  * cache above already covers repeated searches within one run. */
52
70
  protected getAnnCacheDir(): string | null;
53
- private annCachePath;
54
- /**
55
- * Staleness fingerprint for the ANN cache: row count alone misses an
56
- * in-place embedding update (same id, re-embedded content — the count
57
- * doesn't change), which would otherwise leave the cached graph serving a
58
- * stale vector for that entry indefinitely. `updated_at` is bumped on
59
- * every store() call (including updates to an existing id), so pairing
60
- * count with MAX(updated_at) catches that case too.
61
- */
62
- private countEmbeddedActiveEntries;
63
- /**
64
- * Returns a ready-to-search ANN index for the given embedding dimensions,
65
- * or null when the corpus is below ANN_THRESHOLD (brute force stays the
66
- * search path). Tries, in order: the process-lifetime cache, a valid
67
- * on-disk cache (skips the DB read + graph build entirely), then a full
68
- * rebuild from memory_embeddings (writing a fresh on-disk cache for next
69
- * time).
70
- */
71
- private getAnnIndex;
71
+ protected annCachePath(): string | null;
72
+ protected countEmbeddedActiveEntries(): {
73
+ count: number;
74
+ maxUpdatedAt: number;
75
+ };
76
+ protected getAnnIndex(dimensions: number, force?: boolean): Promise<{
77
+ index: HNSWIndex;
78
+ entries: Map<string, MemoryEntry>;
79
+ } | null>;
72
80
  /**
73
81
  * Diagnostics for `memory search --build-hnsw` / status reporting. Read-only
74
82
  * — does not build the index as a side effect.
@@ -98,84 +106,19 @@ export declare class SqlBackend extends EventEmitter implements IMemoryBackend {
98
106
  initialize(): Promise<void>;
99
107
  shutdown(): Promise<void>;
100
108
  store(entry: MemoryEntry): Promise<void>;
101
- /**
102
- * Compare-and-swap update: writes ONLY if the row's stored `version` still
103
- * equals `expectedVersion`. The check and the write are one SQL statement
104
- * (`UPDATE ... WHERE id = ? AND version = ?`), so SQLite's own single-
105
- * statement atomicity — the same guarantee `store()`'s INSERT OR REPLACE
106
- * already relies on — makes this a real compare-and-swap against every
107
- * other writer, in this process or another, with no bridge-level lock.
108
- *
109
- * Exists for memory-KG review finding K5: a getByKey() + store() read-
110
- * merge-write (what every caller did before this) leaves a window in which
111
- * two concurrent callers each merge onto the same row and the second
112
- * store() silently overwrites the first's contribution. A caller that reads
113
- * a row's version, merges onto it, and writes back through here instead
114
- * gets `false` when its merge has gone stale, rather than winning a race it
115
- * did not know it was running.
116
- *
117
- * Only the columns a claim-ledger merge (memory-kg.ts) actually changes are
118
- * updated; embeddings are left untouched, matching storeSync's own rule that
119
- * a revision without a new vector keeps the one it had.
120
- *
121
- * @returns true when the write landed, false when the row's version had
122
- * already moved (or the row no longer exists) — the caller must re-read and
123
- * re-merge, never assume the write happened.
124
- */
125
109
  storeIfVersion(entry: MemoryEntry, expectedVersion: number): Promise<boolean>;
126
- /**
127
- * Compare-and-swap create: the create-side counterpart to `storeIfVersion`.
128
- * Inserts ONLY if no row already occupies this id or this namespace/key pair
129
- * (the schema's `UNIQUE(namespace, key)` index — see sql-schema.ts).
130
- *
131
- * Exists for the same K5 race on the CREATE side: two concurrent callers
132
- * asserting the same new KG entity mint the same deterministic `key` but a
133
- * different random row `id` (see memory-bridge.ts's upsert). Plain `store()`
134
- * (INSERT OR REPLACE) resolves that collision by silently deleting whichever
135
- * row landed first — exactly the lost update K5 describes, just on first
136
- * write instead of a merge. `INSERT OR IGNORE` instead leaves the first row
137
- * untouched and reports that it did, so the loser re-reads and merges onto
138
- * it instead of clobbering it.
139
- *
140
- * @returns true when this call created the row, false when one already
141
- * existed — the caller must re-read and merge rather than assume it won.
142
- */
143
110
  storeIfAbsent(entry: MemoryEntry): Promise<boolean>;
144
- /** Synchronous store body, shared by store() and bulkInsert(). */
145
- private storeSync;
111
+ protected storeSync(entry: MemoryEntry): void;
146
112
  bulkInsert(entries: MemoryEntry[]): Promise<void>;
147
113
  update(id: string, update: MemoryEntryUpdate): Promise<MemoryEntry | null>;
148
114
  delete(id: string): Promise<boolean>;
149
115
  bulkDelete(ids: string[]): Promise<number>;
150
116
  clearNamespace(namespace: string): Promise<number>;
151
117
  get(id: string, agentId?: string): Promise<MemoryEntry | null>;
152
- /**
153
- * Promote an entry to 'team' once 3+ distinct agents have read it within 24h.
154
- * https://arxiv.org/abs/2505.18279
155
- */
156
- private checkAndPromoteEntry;
118
+ protected checkAndPromoteEntry(entryId: string): void;
157
119
  getByKey(namespace: string, key: string): Promise<MemoryEntry | null>;
158
120
  query(query: MemoryQuery): Promise<MemoryEntry[]>;
159
- /**
160
- * Semantic search. Below MONOMIND_HNSW_THRESHOLD active embedded entries
161
- * (default 5000), brute-force cosine over stored embeddings — namespace-
162
- * and TTL-filtered in SQL — stays cheaper (a few tens of ms at second-brain
163
- * scale). Above it, getAnnIndex() builds (or loads a persisted) HNSW graph
164
- * and this searches that instead; results are still namespace/threshold
165
- * filtered post-search to match the brute-force semantics exactly.
166
- */
167
121
  search(embedding: Float32Array, options: SearchOptions): Promise<SearchResult[]>;
168
- /**
169
- * FTS5-accelerated keyword search (Issue #66).
170
- *
171
- * When the FTS5 index is available, text matching runs inside SQLite via
172
- * `MATCH` — orders of magnitude faster than loading 50k rows into JS. When
173
- * FTS5 is unavailable (e.g. sql.js WASM compiled without the extension) the
174
- * method returns `null` so the caller can fall back to JS-side matching.
175
- *
176
- * `queryText` is the raw user query; it is FTS5-tokenized automatically.
177
- * Special characters are escaped to prevent FTS5 syntax errors.
178
- */
179
122
  keywordSearch(queryText: string, options?: {
180
123
  namespace?: string;
181
124
  limit?: number;
@@ -199,6 +142,6 @@ export declare class SqlBackend extends EventEmitter implements IMemoryBackend {
199
142
  private static readonly MAX_TAG_LEN;
200
143
  protected validateTags(tags: string[]): void;
201
144
  protected ensureInitialized(): void;
202
- private rowToEntry;
145
+ protected rowToEntry(row: Record<string, unknown>): MemoryEntry;
203
146
  }
204
147
  //# sourceMappingURL=sql-backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-backend.d.ts","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-backend.d.ts","sourceRoot":"","sources":["../src/sql-backend.ts"],"names":[],"mappings":"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"}