@j0hanz/memdb 1.2.5 → 1.2.8

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 (55) hide show
  1. package/README.md +7 -2
  2. package/dist/config.d.ts +2 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +15 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/core/db.d.ts +6 -3
  7. package/dist/core/db.d.ts.map +1 -0
  8. package/dist/core/db.js +93 -61
  9. package/dist/core/db.js.map +1 -0
  10. package/dist/core/memory-read.d.ts +1 -0
  11. package/dist/core/memory-read.d.ts.map +1 -0
  12. package/dist/core/memory-read.js +32 -19
  13. package/dist/core/memory-read.js.map +1 -0
  14. package/dist/core/memory-write.d.ts +1 -0
  15. package/dist/core/memory-write.d.ts.map +1 -0
  16. package/dist/core/memory-write.js +57 -44
  17. package/dist/core/memory-write.js.map +1 -0
  18. package/dist/core/relationships.d.ts +1 -0
  19. package/dist/core/relationships.d.ts.map +1 -0
  20. package/dist/core/relationships.js +6 -16
  21. package/dist/core/relationships.js.map +1 -0
  22. package/dist/core/search.d.ts +1 -0
  23. package/dist/core/search.d.ts.map +1 -0
  24. package/dist/core/search.js +61 -54
  25. package/dist/core/search.js.map +1 -0
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +104 -52
  29. package/dist/index.js.map +1 -0
  30. package/dist/instructions.md +29 -160
  31. package/dist/logger.d.ts +5 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +19 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/protocol-version-guard.d.ts +4 -0
  36. package/dist/protocol-version-guard.d.ts.map +1 -0
  37. package/dist/protocol-version-guard.js +41 -20
  38. package/dist/protocol-version-guard.js.map +1 -0
  39. package/dist/schemas.d.ts +1 -0
  40. package/dist/schemas.d.ts.map +1 -0
  41. package/dist/schemas.js +1 -0
  42. package/dist/schemas.js.map +1 -0
  43. package/dist/stdio-transport.d.ts +4 -0
  44. package/dist/stdio-transport.d.ts.map +1 -0
  45. package/dist/stdio-transport.js +48 -37
  46. package/dist/stdio-transport.js.map +1 -0
  47. package/dist/tools.d.ts +15 -23
  48. package/dist/tools.d.ts.map +1 -0
  49. package/dist/tools.js +151 -118
  50. package/dist/tools.js.map +1 -0
  51. package/dist/types.d.ts +2 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +1 -0
  54. package/dist/types.js.map +1 -0
  55. package/package.json +7 -4
package/README.md CHANGED
@@ -161,7 +161,7 @@ Search memories by content and tags.
161
161
  | :-------- | :----- | :------- | :------ | :---------------------------------------- |
162
162
  | `query` | string | Yes | - | Search query (1-1000 chars, max 50 terms) |
163
163
 
164
- **Returns:** Array of search results (`Memory` + `relevance`).
164
+ **Returns:** Array of search results (`Memory` + `relevance`, includes `tags`).
165
165
 
166
166
  Notes:
167
167
 
@@ -177,7 +177,11 @@ Retrieve a specific memory by its hash.
177
177
  | :-------- | :----- | :------- | :------ | :------------------ |
178
178
  | `hash` | string | Yes | - | MD5 hash (32 chars) |
179
179
 
180
- **Returns:** `Memory`.
180
+ **Returns:** `Memory` (includes `tags`).
181
+
182
+ Notes:
183
+
184
+ - Updates `accessed_at` on read.
181
185
 
182
186
  ### `delete_memory`
183
187
 
@@ -242,6 +246,7 @@ All memory-shaped responses include:
242
246
  - `id`: integer ID
243
247
  - `content`: original content string
244
248
  - `summary`: optional summary (currently unset by tools)
249
+ - `tags`: string array
245
250
  - `created_at`: timestamp string
246
251
  - `accessed_at`: timestamp string
247
252
  - `hash`: MD5 hash
package/dist/config.d.ts CHANGED
@@ -2,5 +2,7 @@ type LogLevel = 'error' | 'info' | 'warn';
2
2
  export declare const config: {
3
3
  dbPath: string;
4
4
  logLevel: LogLevel;
5
+ toolTimeoutMs: number;
5
6
  };
6
7
  export {};
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAoD1C,eAAO,MAAM,MAAM;;;;CAQlB,CAAC"}
package/dist/config.js CHANGED
@@ -2,6 +2,7 @@ import path from 'node:path';
2
2
  import process from 'node:process';
3
3
  const DEFAULT_DB_PATH = path.join(process.cwd(), '.memdb', 'memory.db');
4
4
  const DEFAULT_LOG_LEVEL = 'info';
5
+ const DEFAULT_TOOL_TIMEOUT_MS = 15000;
5
6
  const hasNullByte = (value) => value.includes('\0');
6
7
  const parseLogLevel = (value) => {
7
8
  if (value === undefined)
@@ -18,6 +19,18 @@ const parseLogLevel = (value) => {
18
19
  throw new Error(`Invalid MEMDB_LOG_LEVEL: ${value} (expected: error|warn|info)`);
19
20
  }
20
21
  };
22
+ const parseTimeoutMs = (value, name) => {
23
+ if (value === undefined)
24
+ return undefined;
25
+ if (hasNullByte(value)) {
26
+ throw new Error(`Invalid ${name}: null byte detected`);
27
+ }
28
+ const parsed = Number(value);
29
+ if (!Number.isFinite(parsed) || parsed < 0 || !Number.isInteger(parsed)) {
30
+ throw new Error(`Invalid ${name}: expected a non-negative integer`);
31
+ }
32
+ return parsed;
33
+ };
21
34
  const resolveDbPath = (env) => {
22
35
  const envPath = env.MEMDB_PATH;
23
36
  if (envPath !== undefined) {
@@ -34,4 +47,6 @@ const resolveDbPath = (env) => {
34
47
  export const config = {
35
48
  dbPath: resolveDbPath(process.env),
36
49
  logLevel: parseLogLevel(process.env.MEMDB_LOG_LEVEL) ?? DEFAULT_LOG_LEVEL,
50
+ toolTimeoutMs: parseTimeoutMs(process.env.MEMDB_TOOL_TIMEOUT_MS, 'MEMDB_TOOL_TIMEOUT_MS') ?? DEFAULT_TOOL_TIMEOUT_MS,
37
51
  };
52
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAInC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACxE,MAAM,iBAAiB,GAAa,MAAM,CAAC;AAC3C,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAwB,EAAE;IACxE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf;YACE,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,8BAA8B,CAChE,CAAC;IACN,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,KAAyB,EACzB,IAAY,EACQ,EAAE;IACtB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,sBAAsB,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,mCAAmC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAsB,EAAU,EAAE;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC;IAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,iBAAiB;IACzE,aAAa,EACX,cAAc,CACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACjC,uBAAuB,CACxB,IAAI,uBAAuB;CAC/B,CAAC"}
package/dist/core/db.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DatabaseSync, type StatementSync } from 'node:sqlite';
2
- import { type Memory, type SearchResult } from '../types.js';
2
+ import { type Memory, type Relationship, type SearchResult } from '../types.js';
3
3
  export type DbRow = Record<string, unknown>;
4
4
  export declare const db: DatabaseSync;
5
5
  export declare const closeDb: () => void;
@@ -12,5 +12,8 @@ export declare const executeRun: (stmt: StatementSync, ...params: SqlParam[]) =>
12
12
  };
13
13
  export declare const withImmediateTransaction: <T>(operation: () => T) => T;
14
14
  export declare const toSafeInteger: (value: unknown, field: string) => number;
15
- export declare const mapRowToMemory: (row: DbRow) => Memory;
16
- export declare const mapRowToSearchResult: (row: DbRow) => SearchResult;
15
+ export declare const mapRowToMemory: (row: DbRow, tags?: string[]) => Memory;
16
+ export declare const mapRowToSearchResult: (row: DbRow, tags?: string[]) => SearchResult;
17
+ export declare const mapRowToRelationship: (row: DbRow) => Relationship;
18
+ export declare const loadTagsForMemoryIds: (memoryIds: readonly number[]) => Map<number, string[]>;
19
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqI5C,eAAO,MAAM,EAAE,cAAgC,CAAC;AAEhD,eAAO,MAAM,OAAO,QAAO,IAG1B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC;AAKpE,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,aAiB3C,CAAC;AAqCF,eAAO,MAAM,UAAU,GACrB,MAAM,aAAa,EACnB,GAAG,QAAQ,QAAQ,EAAE,KACpB,KAAK,EAAuC,CAAC;AAEhD,eAAO,MAAM,UAAU,GACrB,MAAM,aAAa,EACnB,GAAG,QAAQ,QAAQ,EAAE,KACpB,KAAK,GAAG,SAAoD,CAAC;AAEhE,eAAO,MAAM,UAAU,GACrB,MAAM,aAAa,EACnB,GAAG,QAAQ,QAAQ,EAAE,KACpB;IAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAAsC,CAAC;AAEpE,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,WAAW,MAAM,CAAC,KAAG,CAahE,CAAC;AAsBF,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,MAM7D,CAAC;AAkCF,eAAO,MAAM,cAAc,GAAI,KAAK,KAAK,EAAE,OAAM,MAAM,EAAO,KAAG,MAU/D,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAC/B,KAAK,KAAK,EACV,OAAM,MAAM,EAAO,KAClB,YAGD,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,KAAK,KAAK,KAAG,YAMhD,CAAC;AA0BH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,SAAS,MAAM,EAAE,KAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAatB,CAAC"}
package/dist/core/db.js CHANGED
@@ -67,23 +67,18 @@ const FTS_SYNC_SQL = `
67
67
  WHERE id NOT IN (SELECT rowid FROM memories_fts);
68
68
  `;
69
69
  const withTimeout = async (promise, ms, message) => {
70
- const controller = new AbortController();
71
- const timeout = setTimeout(() => {
72
- controller.abort();
73
- }, ms);
70
+ let timeout;
71
+ const timeoutPromise = new Promise((_, reject) => {
72
+ timeout = setTimeout(() => {
73
+ reject(new Error(message));
74
+ }, ms);
75
+ });
74
76
  try {
75
- const result = await Promise.race([
76
- promise,
77
- new Promise((_, reject) => {
78
- controller.signal.addEventListener('abort', () => {
79
- reject(new Error(message));
80
- });
81
- }),
82
- ]);
83
- return result;
77
+ return await Promise.race([promise, timeoutPromise]);
84
78
  }
85
79
  finally {
86
- clearTimeout(timeout);
80
+ if (timeout)
81
+ clearTimeout(timeout);
87
82
  }
88
83
  };
89
84
  const ensureDbDirectory = async (dbPath) => {
@@ -91,18 +86,14 @@ const ensureDbDirectory = async (dbPath) => {
91
86
  return;
92
87
  await withTimeout(mkdir(path.dirname(dbPath), { recursive: true }), 5000, 'Database directory creation timed out');
93
88
  };
94
- const isEnableDefensive = (value) => {
95
- return typeof value === 'function';
96
- };
97
89
  const enableDefensiveMode = (database) => {
98
- const enableDefensive = Reflect.get(database, 'enableDefensive');
99
- if (!isEnableDefensive(enableDefensive))
90
+ const extended = database;
91
+ if (typeof extended.enableDefensive !== 'function')
100
92
  return;
101
- enableDefensive(true);
93
+ extended.enableDefensive(true);
102
94
  };
103
95
  const isInTransaction = (database) => {
104
- const prop = Reflect.get(database, 'isTransaction');
105
- return typeof prop === 'boolean' ? prop : false;
96
+ return database.isTransaction;
106
97
  };
107
98
  const initializeSchema = (database) => {
108
99
  database.exec(SCHEMA_SQL);
@@ -134,59 +125,53 @@ export const closeDb = () => {
134
125
  };
135
126
  const MAX_CACHED_STATEMENTS = 200;
136
127
  const statementCache = new Map();
137
- const statementCacheOrder = [];
138
- const enforceStatementCacheLimit = () => {
139
- if (statementCacheOrder.length <= MAX_CACHED_STATEMENTS)
140
- return;
141
- const oldestSql = statementCacheOrder.shift();
142
- if (!oldestSql)
143
- return;
144
- statementCache.delete(oldestSql);
128
+ export const prepareCached = (sql) => {
129
+ const cached = statementCache.get(sql);
130
+ if (cached) {
131
+ statementCache.delete(sql);
132
+ statementCache.set(sql, cached);
133
+ return cached;
134
+ }
135
+ const stmt = db.prepare(sql);
136
+ statementCache.set(sql, stmt);
137
+ if (statementCache.size > MAX_CACHED_STATEMENTS) {
138
+ const oldestKey = statementCache.keys().next().value;
139
+ if (oldestKey)
140
+ statementCache.delete(oldestKey);
141
+ }
142
+ return stmt;
145
143
  };
146
144
  const isDbRow = (value) => {
147
145
  return typeof value === 'object' && value !== null;
148
146
  };
147
+ const assertDbRow = (value) => {
148
+ if (!isDbRow(value)) {
149
+ throw new Error('Invalid row');
150
+ }
151
+ return value;
152
+ };
149
153
  const toDbRowArray = (value) => {
150
154
  if (!Array.isArray(value)) {
151
155
  throw new Error('Expected rows array');
152
156
  }
153
- const rows = [];
154
- for (const row of value) {
155
- if (!isDbRow(row)) {
156
- throw new Error('Invalid row');
157
- }
158
- rows.push(row);
159
- }
160
- return rows;
157
+ return value.map(assertDbRow);
161
158
  };
162
159
  const toDbRowOrUndefined = (value) => {
163
160
  if (value === undefined)
164
161
  return undefined;
165
- if (!isDbRow(value)) {
166
- throw new Error('Invalid row');
167
- }
168
- return value;
162
+ return assertDbRow(value);
169
163
  };
170
164
  const toRunResult = (value) => {
171
165
  if (typeof value !== 'object' || value === null) {
172
166
  throw new Error('Invalid run result');
173
167
  }
174
- const changes = Reflect.get(value, 'changes');
168
+ const result = value;
169
+ const { changes } = result;
175
170
  if (typeof changes !== 'number' && typeof changes !== 'bigint') {
176
171
  throw new Error('Invalid run result');
177
172
  }
178
173
  return { changes };
179
174
  };
180
- export const prepareCached = (sql) => {
181
- const cached = statementCache.get(sql);
182
- if (cached)
183
- return cached;
184
- const stmt = db.prepare(sql);
185
- statementCache.set(sql, stmt);
186
- statementCacheOrder.push(sql);
187
- enforceStatementCacheLimit();
188
- return stmt;
189
- };
190
175
  export const executeAll = (stmt, ...params) => toDbRowArray(stmt.all(...params));
191
176
  export const executeGet = (stmt, ...params) => toDbRowOrUndefined(stmt.get(...params));
192
177
  export const executeRun = (stmt, ...params) => toRunResult(stmt.run(...params));
@@ -206,13 +191,18 @@ export const withImmediateTransaction = (operation) => {
206
191
  }
207
192
  };
208
193
  const createFieldError = (field) => new Error(`Invalid ${field}`);
194
+ const assertFiniteNumber = (value, field) => {
195
+ if (!Number.isFinite(value)) {
196
+ throw createFieldError(field);
197
+ }
198
+ return value;
199
+ };
209
200
  const toNumber = (value, field) => {
210
- if (typeof value === 'number' && Number.isFinite(value))
211
- return value;
201
+ if (typeof value === 'number') {
202
+ return assertFiniteNumber(value, field);
203
+ }
212
204
  if (typeof value === 'bigint') {
213
- const numeric = Number(value);
214
- if (Number.isFinite(numeric))
215
- return numeric;
205
+ return assertFiniteNumber(Number(value), field);
216
206
  }
217
207
  throw createFieldError(field);
218
208
  };
@@ -246,17 +236,59 @@ const toOptionalNumber = (value, field) => {
246
236
  return undefined;
247
237
  return toNumber(value, field);
248
238
  };
249
- export const mapRowToMemory = (row) => ({
239
+ export const mapRowToMemory = (row, tags = []) => ({
250
240
  id: toSafeInteger(row.id, 'id'),
251
241
  content: toString(row.content, 'content'),
252
242
  summary: toOptionalString(row.summary, 'summary'),
243
+ tags,
253
244
  importance: toSafeInteger(row.importance ?? 0, 'importance'),
254
245
  memory_type: toMemoryType(row.memory_type ?? 'general', 'memory_type'),
255
246
  created_at: toString(row.created_at, 'created_at'),
256
247
  accessed_at: toString(row.accessed_at, 'accessed_at'),
257
248
  hash: toString(row.hash, 'hash'),
258
249
  });
259
- export const mapRowToSearchResult = (row) => ({
260
- ...mapRowToMemory(row),
250
+ export const mapRowToSearchResult = (row, tags = []) => ({
251
+ ...mapRowToMemory(row, tags),
261
252
  relevance: toOptionalNumber(row.relevance, 'relevance') ?? 0,
262
253
  });
254
+ export const mapRowToRelationship = (row) => ({
255
+ id: toSafeInteger(row.id, 'id'),
256
+ from_hash: toString(row.from_hash, 'from_hash'),
257
+ to_hash: toString(row.to_hash, 'to_hash'),
258
+ relation_type: toString(row.relation_type, 'relation_type'),
259
+ created_at: toString(row.created_at, 'created_at'),
260
+ });
261
+ const stmtSelectTags = db.prepare('SELECT memory_id, tag FROM tags WHERE memory_id IN (SELECT value FROM json_each(?)) ORDER BY memory_id, tag');
262
+ const dedupeIds = (ids) => {
263
+ const seen = new Set();
264
+ const unique = [];
265
+ for (const id of ids) {
266
+ if (seen.has(id))
267
+ continue;
268
+ seen.add(id);
269
+ unique.push(id);
270
+ }
271
+ return unique;
272
+ };
273
+ const pushToMapArray = (map, key, value) => {
274
+ const existing = map.get(key);
275
+ if (existing) {
276
+ existing.push(value);
277
+ return;
278
+ }
279
+ map.set(key, [value]);
280
+ };
281
+ export const loadTagsForMemoryIds = (memoryIds) => {
282
+ const uniqueIds = dedupeIds(memoryIds);
283
+ if (uniqueIds.length === 0)
284
+ return new Map();
285
+ const rows = executeAll(stmtSelectTags, JSON.stringify(uniqueIds));
286
+ const tagsById = new Map();
287
+ for (const row of rows) {
288
+ const memoryId = toSafeInteger(row.memory_id, 'memory_id');
289
+ const tag = toString(row.tag, 'tag');
290
+ pushToMapArray(tagsById, memoryId, tag);
291
+ }
292
+ return tagsById;
293
+ };
294
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,4 @@ export declare const getMemory: (hash: string) => Memory | undefined;
3
3
  export declare const deleteMemory: (hash: string) => StatementResult;
4
4
  export declare const deleteMemories: (hashes: string[]) => BatchDeleteResult;
5
5
  export declare const getStats: () => MemoryStats;
6
+ //# sourceMappingURL=memory-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-read.d.ts","sourceRoot":"","sources":["../../src/core/memory-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,eAAe,EAChB,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SASjD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,eAG3C,CAAC;AAoBF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,KAAG,iBAejD,CAAC;AA4BF,eAAO,MAAM,QAAQ,QAAO,WAU3B,CAAC"}
@@ -1,36 +1,48 @@
1
- import { db, executeGet, executeRun, mapRowToMemory, toSafeInteger, withImmediateTransaction, } from './db.js';
1
+ import { db, executeGet, executeRun, loadTagsForMemoryIds, mapRowToMemory, toSafeInteger, withImmediateTransaction, } from './db.js';
2
2
  const stmtGetMemoryByHash = db.prepare('SELECT * FROM memories WHERE hash = ?');
3
+ const stmtTouchMemoryByHash = db.prepare('UPDATE memories SET accessed_at = CURRENT_TIMESTAMP WHERE hash = ?');
3
4
  const stmtDeleteMemoryByHash = db.prepare('DELETE FROM memories WHERE hash = ?');
4
5
  export const getMemory = (hash) => {
5
- const row = executeGet(stmtGetMemoryByHash, hash);
6
- return row ? mapRowToMemory(row) : undefined;
6
+ return withImmediateTransaction(() => {
7
+ executeRun(stmtTouchMemoryByHash, hash);
8
+ const row = executeGet(stmtGetMemoryByHash, hash);
9
+ if (!row)
10
+ return undefined;
11
+ const id = toSafeInteger(row.id, 'id');
12
+ const tags = loadTagsForMemoryIds([id]).get(id) ?? [];
13
+ return mapRowToMemory(row, tags);
14
+ });
7
15
  };
8
16
  export const deleteMemory = (hash) => {
9
17
  const result = executeRun(stmtDeleteMemoryByHash, hash);
10
18
  return { changes: toSafeInteger(result.changes, 'changes') };
11
19
  };
20
+ const deleteMemoryForBatch = (hash) => {
21
+ try {
22
+ const result = deleteMemory(hash);
23
+ const deleted = result.changes > 0;
24
+ return deleted
25
+ ? { item: { hash, deleted: true }, succeeded: true }
26
+ : {
27
+ item: { hash, deleted: false, error: 'Memory not found' },
28
+ succeeded: false,
29
+ };
30
+ }
31
+ catch (err) {
32
+ const message = err instanceof Error ? err.message : 'Unknown error';
33
+ return { item: { hash, deleted: false, error: message }, succeeded: false };
34
+ }
35
+ };
12
36
  export const deleteMemories = (hashes) => {
13
37
  const results = [];
14
38
  let succeeded = 0;
15
39
  let failed = 0;
16
40
  return withImmediateTransaction(() => {
17
41
  for (const hash of hashes) {
18
- try {
19
- const result = deleteMemory(hash);
20
- if (result.changes > 0) {
21
- results.push({ hash, deleted: true });
22
- succeeded++;
23
- }
24
- else {
25
- results.push({ hash, deleted: false, error: 'Memory not found' });
26
- failed++;
27
- }
28
- }
29
- catch (err) {
30
- const message = err instanceof Error ? err.message : 'Unknown error';
31
- results.push({ hash, deleted: false, error: message });
32
- failed++;
33
- }
42
+ const outcome = deleteMemoryForBatch(hash);
43
+ results.push(outcome.item);
44
+ succeeded += outcome.succeeded ? 1 : 0;
45
+ failed += outcome.succeeded ? 0 : 1;
34
46
  }
35
47
  return { results, succeeded, failed };
36
48
  });
@@ -66,3 +78,4 @@ export const getStats = () => {
66
78
  newestMemory: toDateString(dateRow?.newest),
67
79
  };
68
80
  };
81
+ //# sourceMappingURL=memory-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-read.js","sourceRoot":"","sources":["../../src/core/memory-read.ts"],"names":[],"mappings":"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"}
@@ -17,3 +17,4 @@ interface UpdateMemoryOptions {
17
17
  }
18
18
  export declare const updateMemory: (hash: string, options: UpdateMemoryOptions) => MemoryUpdateResult;
19
19
  export {};
20
+ //# sourceMappingURL=memory-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/core/memory-write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAqGrB,eAAO,MAAM,YAAY,GAAI,OAAO;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B,KAAG,kBAC8D,CAAC;AAqBnE,eAAO,MAAM,cAAc,GACzB,OAAO;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B,EAAE,KACF,gBAEF,CAAC;AA6EF,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACtC;AAeD,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,SAAS,mBAAmB,KAC3B,kBAoBF,CAAC"}
@@ -33,20 +33,7 @@ const normalizeTags = (tags, maxTags) => {
33
33
  return dedupeTags(tags);
34
34
  };
35
35
  const stmtFindMemoryIdByHash = db.prepare('SELECT id FROM memories WHERE hash = ?');
36
- const buildTagInsert = (memoryId, tags) => {
37
- const params = tags.flatMap((tag) => [memoryId, tag]);
38
- return { params };
39
- };
40
- const tagInsertStatements = [];
41
- const getInsertTagsStatement = (tagCount) => {
42
- const cached = tagInsertStatements[tagCount];
43
- if (cached)
44
- return cached;
45
- const placeholders = Array.from({ length: tagCount }, () => '(?, ?)').join(', ');
46
- const stmt = db.prepare(`INSERT OR IGNORE INTO tags (memory_id, tag) VALUES ${placeholders}`);
47
- tagInsertStatements[tagCount] = stmt;
48
- return stmt;
49
- };
36
+ const stmtInsertTags = db.prepare('INSERT OR IGNORE INTO tags (memory_id, tag) SELECT ?, value FROM json_each(?)');
50
37
  const findMemoryIdByHash = (hash) => {
51
38
  const row = executeGet(stmtFindMemoryIdByHash, hash);
52
39
  if (!row)
@@ -56,9 +43,7 @@ const findMemoryIdByHash = (hash) => {
56
43
  const insertTags = (memoryId, tags) => {
57
44
  if (tags.length === 0)
58
45
  return;
59
- const { params } = buildTagInsert(memoryId, tags);
60
- const stmt = getInsertTagsStatement(tags.length);
61
- executeRun(stmt, ...params);
46
+ executeRun(stmtInsertTags, memoryId, JSON.stringify(tags));
62
47
  };
63
48
  const buildHash = (content) => {
64
49
  // eslint-disable-next-line sonarjs/hashing -- MD5 used for non-security deduplication only.
@@ -89,31 +74,55 @@ const createMemoryInTransaction = (input) => {
89
74
  return { id, hash, isNew };
90
75
  };
91
76
  export const createMemories = (items) => {
77
+ return withImmediateTransaction(() => createMemoriesInTransaction(items));
78
+ };
79
+ const withSavepoint = (name, fn) => {
80
+ db.exec(`SAVEPOINT ${name}`);
81
+ try {
82
+ const result = fn();
83
+ db.exec(`RELEASE ${name}`);
84
+ return result;
85
+ }
86
+ catch (err) {
87
+ db.exec(`ROLLBACK TO ${name}`);
88
+ db.exec(`RELEASE ${name}`);
89
+ throw err;
90
+ }
91
+ };
92
+ const createMemoriesInTransaction = (items) => {
92
93
  const results = [];
93
94
  let succeeded = 0;
94
95
  let failed = 0;
95
- return withImmediateTransaction(() => {
96
- for (let i = 0; i < items.length; i++) {
97
- const item = items[i];
98
- if (!item)
99
- continue;
100
- db.exec('SAVEPOINT mem_item');
101
- try {
102
- const { hash, isNew } = createMemoryInTransaction(item);
103
- results.push({ ok: true, index: i, hash, isNew });
104
- succeeded++;
105
- db.exec('RELEASE mem_item');
106
- }
107
- catch (err) {
108
- db.exec('ROLLBACK TO mem_item');
109
- db.exec('RELEASE mem_item');
110
- const message = err instanceof Error ? err.message : 'Unknown error';
111
- results.push({ ok: false, index: i, error: message });
112
- failed++;
113
- }
96
+ for (let i = 0; i < items.length; i++) {
97
+ const item = items[i];
98
+ if (!item)
99
+ continue;
100
+ const result = processCreateMemoriesItem(i, item);
101
+ results.push(result);
102
+ if (result.ok) {
103
+ succeeded++;
114
104
  }
115
- return { results, succeeded, failed };
116
- });
105
+ else {
106
+ failed++;
107
+ }
108
+ }
109
+ return { results, succeeded, failed };
110
+ };
111
+ const processCreateMemoriesItem = (index, item) => {
112
+ const savepointName = `mem_item_${index}`;
113
+ try {
114
+ const created = withSavepoint(savepointName, () => createMemoryInTransaction(item));
115
+ return {
116
+ ok: true,
117
+ index,
118
+ hash: created.hash,
119
+ isNew: created.isNew,
120
+ };
121
+ }
122
+ catch (err) {
123
+ const message = err instanceof Error ? err.message : 'Unknown error';
124
+ return { ok: false, index, error: message };
125
+ }
117
126
  };
118
127
  const stmtDeleteTagsForMemory = db.prepare('DELETE FROM tags WHERE memory_id = ?');
119
128
  const stmtUpdateContent = db.prepare('UPDATE memories SET content = ?, hash = ? WHERE id = ?');
@@ -121,6 +130,14 @@ const replaceTags = (memoryId, tags) => {
121
130
  executeRun(stmtDeleteTagsForMemory, memoryId);
122
131
  insertTags(memoryId, normalizeTags(tags, MAX_TAGS));
123
132
  };
133
+ const assertNoDuplicateOnUpdate = (oldHash, newHash) => {
134
+ if (newHash === oldHash)
135
+ return;
136
+ const existingId = findMemoryIdByHash(newHash);
137
+ if (existingId !== undefined) {
138
+ throw new Error('Content already exists as another memory');
139
+ }
140
+ };
124
141
  export const updateMemory = (hash, options) => {
125
142
  const memoryId = findMemoryIdByHash(hash);
126
143
  if (memoryId === undefined)
@@ -128,12 +145,7 @@ export const updateMemory = (hash, options) => {
128
145
  return withImmediateTransaction(() => {
129
146
  const newHash = buildHash(options.content);
130
147
  // Check if new content would create a duplicate
131
- if (newHash !== hash) {
132
- const existingId = findMemoryIdByHash(newHash);
133
- if (existingId !== undefined) {
134
- throw new Error('Content already exists as another memory');
135
- }
136
- }
148
+ assertNoDuplicateOnUpdate(hash, newHash);
137
149
  // Update content and hash
138
150
  executeRun(stmtUpdateContent, options.content, newHash, memoryId);
139
151
  // Update tags if provided, otherwise preserve existing tags
@@ -143,3 +155,4 @@ export const updateMemory = (hash, options) => {
143
155
  return { updated: true, oldHash: hash, newHash };
144
156
  });
145
157
  };
158
+ //# sourceMappingURL=memory-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/core/memory-write.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ export declare const deleteRelationship: (input: {
13
13
  to_hash: string;
14
14
  relation_type: string;
15
15
  }) => StatementResult;
16
+ //# sourceMappingURL=relationships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../src/core/relationships.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EACZ,eAAe,EAChB,MAAM,aAAa,CAAC;AAwCrB,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,KAAG,wBA+BA,CAAC;AAiCL,eAAO,MAAM,gBAAgB,GAAI,OAAO;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;CAC9C,KAAG,YAAY,EAQf,CAAC;AASF,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,KAAG,eAQH,CAAC"}