@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.
- package/README.md +7 -2
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +15 -0
- package/dist/config.js.map +1 -0
- package/dist/core/db.d.ts +6 -3
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +93 -61
- package/dist/core/db.js.map +1 -0
- package/dist/core/memory-read.d.ts +1 -0
- package/dist/core/memory-read.d.ts.map +1 -0
- package/dist/core/memory-read.js +32 -19
- package/dist/core/memory-read.js.map +1 -0
- package/dist/core/memory-write.d.ts +1 -0
- package/dist/core/memory-write.d.ts.map +1 -0
- package/dist/core/memory-write.js +57 -44
- package/dist/core/memory-write.js.map +1 -0
- package/dist/core/relationships.d.ts +1 -0
- package/dist/core/relationships.d.ts.map +1 -0
- package/dist/core/relationships.js +6 -16
- package/dist/core/relationships.js.map +1 -0
- package/dist/core/search.d.ts +1 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +61 -54
- package/dist/core/search.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -52
- package/dist/index.js.map +1 -0
- package/dist/instructions.md +29 -160
- package/dist/logger.d.ts +5 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +19 -0
- package/dist/logger.js.map +1 -0
- package/dist/protocol-version-guard.d.ts +4 -0
- package/dist/protocol-version-guard.d.ts.map +1 -0
- package/dist/protocol-version-guard.js +41 -20
- package/dist/protocol-version-guard.js.map +1 -0
- package/dist/schemas.d.ts +1 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +1 -0
- package/dist/schemas.js.map +1 -0
- package/dist/stdio-transport.d.ts +4 -0
- package/dist/stdio-transport.d.ts.map +1 -0
- package/dist/stdio-transport.js +48 -37
- package/dist/stdio-transport.js.map +1 -0
- package/dist/tools.d.ts +15 -23
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +151 -118
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- 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
|
@@ -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
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
let timeout;
|
|
71
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
72
|
+
timeout = setTimeout(() => {
|
|
73
|
+
reject(new Error(message));
|
|
74
|
+
}, ms);
|
|
75
|
+
});
|
|
74
76
|
try {
|
|
75
|
-
|
|
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
|
-
|
|
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
|
|
99
|
-
if (
|
|
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
|
-
|
|
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
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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'
|
|
211
|
-
return value;
|
|
201
|
+
if (typeof value === 'number') {
|
|
202
|
+
return assertFiniteNumber(value, field);
|
|
203
|
+
}
|
|
212
204
|
if (typeof value === 'bigint') {
|
|
213
|
-
|
|
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"}
|
package/dist/core/memory-read.js
CHANGED
|
@@ -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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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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"}
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|
|
@@ -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"}
|