@flowingspring/dsh-workspace-memory 0.1.0

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/lib/core.js ADDED
@@ -0,0 +1,599 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { existsSync } from 'node:fs';
3
+ import { mkdir, readFile, readdir, rename, unlink, writeFile } from 'node:fs/promises';
4
+ import { dirname, isAbsolute, join, normalize, resolve } from 'node:path';
5
+ export const SUMMARY_FILE = 'memory_summary.md';
6
+ export const ENTRIES_FILE = 'memory_entries.json';
7
+ export const STATE_FILE = 'state.json';
8
+ export const CHECKPOINT_DIR = 'checkpoints';
9
+ export const HISTORY_DIR = 'summary_history';
10
+ const DEFAULT_STATE = Object.freeze({
11
+ version: 0,
12
+ checkpointCount: 0,
13
+ lastCheckpointAt: 0,
14
+ lastBufferedAt: 0,
15
+ pendingMessages: [],
16
+ seenMessageIds: [],
17
+ });
18
+ /** Resolve a stable workspace identity. Empty cwd intentionally means global. */
19
+ export function normalizeWorkspacePath(cwd, platform = process.platform) {
20
+ if (typeof cwd !== 'string' || cwd.trim() === '')
21
+ return '';
22
+ const absolute = isAbsolute(cwd) ? normalize(cwd) : resolve(cwd);
23
+ const slashed = absolute.replaceAll('\\', '/').replace(/\/$/u, '');
24
+ return platform === 'win32' ? slashed.toLowerCase() : slashed;
25
+ }
26
+ /** Hash the canonical workspace path without exposing it in a directory name. */
27
+ export function scopeKeyForCwd(cwd, platform = process.platform) {
28
+ const normalized = normalizeWorkspacePath(cwd, platform);
29
+ if (normalized === '')
30
+ return 'global';
31
+ return `ws-${createHash('sha256').update(normalized).digest('hex').slice(0, 20)}`;
32
+ }
33
+ /** UTF-8 safe truncation used for every model-facing memory budget. */
34
+ export function truncateUtf8(value, maxBytes) {
35
+ const text = String(value ?? '');
36
+ const budget = Math.max(0, Math.trunc(maxBytes));
37
+ const bytes = Buffer.from(text);
38
+ if (bytes.length <= budget)
39
+ return text;
40
+ if (budget === 0)
41
+ return '';
42
+ let end = budget;
43
+ while (end > 0 && ((bytes[end] ?? 0) & 0xc0) === 0x80)
44
+ end -= 1;
45
+ return bytes.subarray(0, end).toString('utf8').trimEnd();
46
+ }
47
+ export function normalizeMemoryText(value) {
48
+ return String(value ?? '')
49
+ .normalize('NFKC')
50
+ .toLocaleLowerCase('en-US')
51
+ .replace(/\s+/gu, ' ')
52
+ .trim();
53
+ }
54
+ function cjkCharacters(value) {
55
+ return [...value.matchAll(/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/gu)]
56
+ .map(match => match[0]);
57
+ }
58
+ function cjkBigrams(value) {
59
+ const chars = cjkCharacters(value);
60
+ if (chars.length === 1)
61
+ return chars;
62
+ const result = [];
63
+ for (let index = 0; index + 1 < chars.length; index += 1)
64
+ result.push((chars[index] ?? '') + (chars[index + 1] ?? ''));
65
+ return result;
66
+ }
67
+ /** Zero-dependency tokens for exact, ASCII-word, and CJK-bigram retrieval. */
68
+ export function lexicalTokens(value) {
69
+ const normalized = normalizeMemoryText(value);
70
+ const ascii = normalized.match(/[a-z0-9][a-z0-9_.:/#-]*/gu) ?? [];
71
+ const unicodeWords = normalized
72
+ .replace(/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/gu, ' ')
73
+ .match(/[\p{L}\p{N}][\p{L}\p{N}_.:/#-]*/gu) ?? [];
74
+ return [...new Set([...ascii, ...unicodeWords, ...cjkBigrams(normalized)].filter(token => token.length > 0))];
75
+ }
76
+ function daysSince(iso, now) {
77
+ if (iso === undefined)
78
+ return 365;
79
+ const time = Date.parse(iso);
80
+ return Number.isFinite(time) ? Math.max(0, now - time) / 86_400_000 : 365;
81
+ }
82
+ /** Rank parsed entries without BM25 or embeddings. */
83
+ export function searchEntries(entries, query, options = {}) {
84
+ const normalizedQuery = normalizeMemoryText(query);
85
+ if (normalizedQuery === '')
86
+ return [];
87
+ const queryTokens = lexicalTokens(normalizedQuery);
88
+ const limit = Math.max(1, Math.min(50, Math.trunc(options.limit ?? 8)));
89
+ const now = options.now ?? Date.now();
90
+ const surfaced = new Set(options.surfacedMemoryIds ?? []);
91
+ const ranked = [];
92
+ for (const entry of entries) {
93
+ if (entry.status === 'deleted')
94
+ continue;
95
+ const haystack = normalizeMemoryText([
96
+ entry.content,
97
+ entry.title,
98
+ entry.description,
99
+ ...(entry.tags ?? []),
100
+ ...(entry.retrievalTerms ?? []),
101
+ ].filter(Boolean).join(' '));
102
+ const haystackTokens = new Set(lexicalTokens(haystack));
103
+ let score = haystack.includes(normalizedQuery) ? 30 : 0;
104
+ let matched = 0;
105
+ for (const token of queryTokens) {
106
+ if (haystack.includes(token) || haystackTokens.has(token)) {
107
+ matched += 1;
108
+ score += token.length >= 4 ? 5 : 2;
109
+ }
110
+ }
111
+ if (matched === 0)
112
+ continue;
113
+ const coverage = queryTokens.length === 0 ? 0 : matched / queryTokens.length;
114
+ score += coverage * 12;
115
+ const titleHit = entry.title !== undefined && normalizeMemoryText(entry.title).includes(normalizedQuery) ? 18 : 0;
116
+ const tagHit = (entry.tags ?? []).some(tag => queryTokens.includes(normalizeMemoryText(tag))) ? 8 : 0;
117
+ const termsHit = (entry.retrievalTerms ?? []).filter(term => {
118
+ const normalizedTerm = normalizeMemoryText(term);
119
+ if (normalizedTerm === '')
120
+ return false;
121
+ if (normalizedQuery.includes(normalizedTerm))
122
+ return true;
123
+ const termTokens = lexicalTokens(normalizedTerm);
124
+ return termTokens.some(token => queryTokens.includes(token));
125
+ }).length * 5;
126
+ score += titleHit + tagHit + termsHit;
127
+ score += Math.max(0, Math.min(3, Number(entry.importance ?? 1))) * 1.5;
128
+ score += Math.max(0, 3 - Math.log2(1 + daysSince(entry.updatedAt ?? entry.createdAt, now)));
129
+ if (surfaced.has(entry.id))
130
+ score -= options.surfacedPenalty ?? 8;
131
+ ranked.push({ entry, score, matchedTokens: matched });
132
+ }
133
+ return ranked
134
+ .sort((left, right) => right.score - left.score || String(right.entry.updatedAt).localeCompare(String(left.entry.updatedAt)))
135
+ .slice(0, limit);
136
+ }
137
+ function tokenDice(left, right) {
138
+ const a = new Set(lexicalTokens(left));
139
+ const b = new Set(lexicalTokens(right));
140
+ if (a.size === 0 || b.size === 0)
141
+ return normalizeMemoryText(left) === normalizeMemoryText(right) ? 1 : 0;
142
+ let shared = 0;
143
+ for (const token of a)
144
+ if (b.has(token))
145
+ shared += 1;
146
+ return 2 * shared / (a.size + b.size);
147
+ }
148
+ export function redactSecrets(value) {
149
+ return String(value ?? '')
150
+ .replace(/\b(sk-[a-z0-9_-]{12,})\b/giu, '[REDACTED]')
151
+ .replace(/\b(gh[pousr]_[a-z0-9]{20,})\b/giu, '[REDACTED]')
152
+ .replace(/\b((?:api[_-]?key|password|secret|token)\s*[:=]\s*)[^\s,;]+/giu, '$1[REDACTED]');
153
+ }
154
+ export function containsSecret(value) {
155
+ return redactSecrets(value) !== String(value ?? '');
156
+ }
157
+ function safeArray(value) {
158
+ return Array.isArray(value) ? value : [];
159
+ }
160
+ function isRecord(value) {
161
+ return value !== null && typeof value === 'object';
162
+ }
163
+ function validEntry(value) {
164
+ return isRecord(value)
165
+ && typeof value.id === 'string'
166
+ && typeof value.content === 'string';
167
+ }
168
+ function migrateEntry(entry, scope) {
169
+ return {
170
+ ...entry,
171
+ scope: entry.scope ?? scope,
172
+ type: entry.type ?? 'fact',
173
+ title: entry.title ?? entry.content.slice(0, 80),
174
+ description: entry.description ?? entry.content.slice(0, 240),
175
+ retrievalTerms: entry.retrievalTerms ?? [],
176
+ tags: entry.tags ?? [],
177
+ importance: entry.importance ?? 1,
178
+ status: entry.status ?? 'active',
179
+ };
180
+ }
181
+ function validMessage(value) {
182
+ return isRecord(value)
183
+ && typeof value.id === 'string'
184
+ && (value.role === 'user' || value.role === 'assistant')
185
+ && typeof value.text === 'string';
186
+ }
187
+ function scopeDirectory(root, key) {
188
+ return key === 'global' ? join(root, 'global') : join(root, 'scopes', key);
189
+ }
190
+ function deterministicSummary(entries, maxBytes, heading = '# Workspace memory') {
191
+ const active = entries
192
+ .filter(entry => entry.status !== 'deleted')
193
+ .sort((left, right) => Number(right.importance ?? 1) - Number(left.importance ?? 1)
194
+ || String(right.updatedAt).localeCompare(String(left.updatedAt)));
195
+ const lines = [heading, '', 'Durable reference facts maintained by dsh-workspace-memory.', ''];
196
+ for (const entry of active) {
197
+ const tags = (entry.tags ?? []).length > 0 ? ` [${entry.tags?.join(', ')}]` : '';
198
+ const candidate = `- ${entry.title ?? entry.content}: ${entry.description ?? entry.content}${tags}`;
199
+ if (Buffer.byteLength([...lines, candidate, ''].join('\n')) > maxBytes)
200
+ break;
201
+ lines.push(candidate);
202
+ }
203
+ return lines.join('\n').trimEnd() + '\n';
204
+ }
205
+ function checkpointMarkdown(reason, messages, proposals, result, at) {
206
+ const messageText = messages.map(message => `- **${message.role}**: ${message.text}`).join('\n');
207
+ const proposalText = proposals.map(proposal => `- ${normalizeProposal(proposal)?.content ?? '(ignored invalid proposal)'}`).join('\n') || '- (none)';
208
+ return [
209
+ `# Memory checkpoint ${at}`,
210
+ '',
211
+ `Reason: ${reason}`,
212
+ '',
213
+ '## Conversation',
214
+ '',
215
+ messageText || '- (none)',
216
+ '',
217
+ '## Durable facts',
218
+ '',
219
+ proposalText,
220
+ '',
221
+ `Result: added=${result.added}, updated=${result.updated}, ignored=${result.ignored}`,
222
+ '',
223
+ ].join('\n');
224
+ }
225
+ export function checkpointEligible(state, reason, config, now = Date.now()) {
226
+ const forceReasons = new Set(['task-end', 'session-close', 'compaction', 'explicit', 'idle']);
227
+ if (forceReasons.has(reason))
228
+ return state.pendingMessages.length > 0;
229
+ const turns = state.pendingMessages.filter(message => message.role === 'user').length;
230
+ const chars = state.pendingMessages.reduce((sum, message) => sum + message.text.length, 0);
231
+ return turns >= config.checkpointTurns || chars >= config.checkpointChars
232
+ || (state.pendingMessages.length > 0 && state.lastBufferedAt > 0 && now - state.lastBufferedAt >= config.idleCheckpointMs);
233
+ }
234
+ /** Filesystem implementation. All public mutation methods serialize per scope. */
235
+ export class WorkspaceMemoryStore {
236
+ root;
237
+ now;
238
+ uuid;
239
+ locks = new Map();
240
+ constructor(root, options = {}) {
241
+ this.root = resolve(root);
242
+ this.now = options.now ?? (() => Date.now());
243
+ this.uuid = options.uuid ?? randomUUID;
244
+ }
245
+ scope(cwd) {
246
+ const normalizedCwd = normalizeWorkspacePath(cwd);
247
+ const key = scopeKeyForCwd(normalizedCwd);
248
+ return { key, cwd: normalizedCwd, dir: scopeDirectory(this.root, key) };
249
+ }
250
+ async withScope(scope, operation) {
251
+ const previous = this.locks.get(scope.key) ?? Promise.resolve();
252
+ const current = previous.catch(() => { }).then(operation);
253
+ this.locks.set(scope.key, current);
254
+ try {
255
+ return await current;
256
+ }
257
+ finally {
258
+ if (this.locks.get(scope.key) === current)
259
+ this.locks.delete(scope.key);
260
+ }
261
+ }
262
+ async ensure(scope) {
263
+ await mkdir(join(scope.dir, CHECKPOINT_DIR), { recursive: true });
264
+ await mkdir(join(scope.dir, HISTORY_DIR), { recursive: true });
265
+ const descriptor = join(scope.dir, 'scope.json');
266
+ if (!existsSync(descriptor))
267
+ await this.writeAtomic(descriptor, JSON.stringify({ key: scope.key, cwd: scope.cwd }, null, 2) + '\n');
268
+ }
269
+ async readEntries(scope) {
270
+ const raw = await readFile(join(scope.dir, ENTRIES_FILE), 'utf8').catch(() => '[]');
271
+ try {
272
+ return safeArray(JSON.parse(raw)).filter(validEntry).map(entry => migrateEntry(entry, scope.key === 'global' ? 'global' : 'workspace'));
273
+ }
274
+ catch {
275
+ return [];
276
+ }
277
+ }
278
+ async readState(scope) {
279
+ const raw = await readFile(join(scope.dir, STATE_FILE), 'utf8').catch(() => '');
280
+ try {
281
+ const value = JSON.parse(raw);
282
+ if (!isRecord(value))
283
+ throw new Error('invalid memory state');
284
+ return {
285
+ version: typeof value.version === 'number' ? value.version : DEFAULT_STATE.version,
286
+ checkpointCount: typeof value.checkpointCount === 'number' ? value.checkpointCount : DEFAULT_STATE.checkpointCount,
287
+ lastCheckpointAt: typeof value.lastCheckpointAt === 'number' ? value.lastCheckpointAt : DEFAULT_STATE.lastCheckpointAt,
288
+ lastBufferedAt: typeof value.lastBufferedAt === 'number' ? value.lastBufferedAt : DEFAULT_STATE.lastBufferedAt,
289
+ pendingMessages: safeArray(value.pendingMessages).filter(validMessage),
290
+ seenMessageIds: safeArray(value.seenMessageIds).filter((item) => typeof item === 'string'),
291
+ };
292
+ }
293
+ catch {
294
+ return { ...DEFAULT_STATE, pendingMessages: [], seenMessageIds: [] };
295
+ }
296
+ }
297
+ async readSummary(scope) {
298
+ return readFile(join(scope.dir, SUMMARY_FILE), 'utf8').catch(() => '');
299
+ }
300
+ async writeEntries(scope, entries) {
301
+ await this.writeAtomic(join(scope.dir, ENTRIES_FILE), JSON.stringify(entries, null, 2) + '\n');
302
+ }
303
+ async writeState(scope, state) {
304
+ await this.writeAtomic(join(scope.dir, STATE_FILE), JSON.stringify(state, null, 2) + '\n');
305
+ }
306
+ async rebuildSummary(scope, entries, maxBytes, keepHistory = 10) {
307
+ const file = join(scope.dir, SUMMARY_FILE);
308
+ const previous = await readFile(file, 'utf8').catch(() => '');
309
+ if (previous.trim() !== '') {
310
+ const history = join(scope.dir, HISTORY_DIR, `${String(this.now())}-${this.uuid()}.md`);
311
+ await this.writeAtomic(history, previous);
312
+ }
313
+ await this.writeAtomic(file, deterministicSummary(entries, maxBytes, scope.key === 'global' ? '# Global memory' : '# Workspace memory'));
314
+ const historyFiles = (await readdir(join(scope.dir, HISTORY_DIR)).catch(() => [])).sort().reverse();
315
+ for (const stale of historyFiles.slice(Math.max(0, keepHistory))) {
316
+ await unlink(join(scope.dir, HISTORY_DIR, stale)).catch(() => { });
317
+ }
318
+ }
319
+ async writeCheckpoint(scope, reason, messages, proposals, result) {
320
+ const at = new Date(this.now()).toISOString().replaceAll(':', '-');
321
+ const file = join(scope.dir, CHECKPOINT_DIR, `${at}.${this.uuid()}.md`);
322
+ await this.writeAtomic(file, checkpointMarkdown(reason, messages, proposals, result, at));
323
+ }
324
+ async writeAtomic(file, text) {
325
+ await mkdir(dirname(file), { recursive: true });
326
+ const temporary = `${file}.${process.pid}.${this.uuid()}.tmp`;
327
+ await writeFile(temporary, text, 'utf8');
328
+ await rename(temporary, file);
329
+ }
330
+ }
331
+ function normalizeProposal(value) {
332
+ if (!isRecord(value))
333
+ return undefined;
334
+ const content = typeof value.content === 'string' ? value.content.trim() : '';
335
+ if (content.length < 4 || containsSecret(content))
336
+ return undefined;
337
+ const tags = [...new Set(safeArray(value.tags)
338
+ .filter((tag) => typeof tag === 'string')
339
+ .map(tag => tag.trim().toLowerCase())
340
+ .filter(Boolean))].slice(0, 8);
341
+ const importance = Math.max(0, Math.min(3, Math.trunc(Number(value.importance ?? 1))));
342
+ const allowedTypes = new Set(['preference', 'decision', 'architecture', 'rule', 'fact', 'fix']);
343
+ const candidateType = value.type;
344
+ const type = typeof candidateType === 'string' && allowedTypes.has(candidateType)
345
+ ? candidateType
346
+ : 'fact';
347
+ const title = typeof value.title === 'string' && value.title.trim() !== '' ? value.title.trim().slice(0, 160) : content.slice(0, 80);
348
+ const description = typeof value.description === 'string' && value.description.trim() !== '' ? value.description.trim().slice(0, 500) : content.slice(0, 240);
349
+ const retrievalTerms = [...new Set(safeArray(value.retrievalTerms)
350
+ .filter((term) => typeof term === 'string')
351
+ .map(term => term.trim())
352
+ .filter(Boolean))].slice(0, 16);
353
+ return {
354
+ content,
355
+ scope: value.scope === 'global' ? 'global' : 'workspace',
356
+ type,
357
+ title,
358
+ description,
359
+ retrievalTerms,
360
+ tags,
361
+ importance: Number.isFinite(importance) ? importance : 1,
362
+ };
363
+ }
364
+ function applyProposals(entries, proposals, nowIso, uuid) {
365
+ let added = 0;
366
+ let updated = 0;
367
+ let ignored = 0;
368
+ for (const proposal of proposals) {
369
+ const normalized = normalizeProposal(proposal);
370
+ if (normalized === undefined) {
371
+ ignored += 1;
372
+ continue;
373
+ }
374
+ const duplicate = entries
375
+ .filter(entry => entry.status !== 'deleted')
376
+ .map(entry => ({ entry, similarity: tokenDice(entry.content, normalized.content) }))
377
+ .sort((left, right) => right.similarity - left.similarity)[0];
378
+ if (duplicate !== undefined && duplicate.similarity >= 0.68) {
379
+ duplicate.entry.content = normalized.content.length >= duplicate.entry.content.length ? normalized.content : duplicate.entry.content;
380
+ duplicate.entry.title = normalized.title;
381
+ duplicate.entry.description = normalized.description;
382
+ duplicate.entry.type = normalized.type;
383
+ duplicate.entry.retrievalTerms = [...new Set([...(duplicate.entry.retrievalTerms ?? []), ...normalized.retrievalTerms])];
384
+ duplicate.entry.tags = [...new Set([...(duplicate.entry.tags ?? []), ...normalized.tags])];
385
+ duplicate.entry.importance = Math.max(Number(duplicate.entry.importance ?? 1), normalized.importance);
386
+ duplicate.entry.updatedAt = nowIso;
387
+ updated += 1;
388
+ continue;
389
+ }
390
+ entries.push({
391
+ id: `mem-${uuid().replaceAll('-', '').slice(0, 12)}`,
392
+ scope: normalized.scope,
393
+ type: normalized.type,
394
+ title: normalized.title,
395
+ description: normalized.description,
396
+ retrievalTerms: normalized.retrievalTerms,
397
+ content: normalized.content,
398
+ tags: normalized.tags,
399
+ importance: normalized.importance,
400
+ status: 'active',
401
+ createdAt: nowIso,
402
+ updatedAt: nowIso,
403
+ });
404
+ added += 1;
405
+ }
406
+ return { added, updated, ignored };
407
+ }
408
+ /** Deep memory module used by both the Cordis adapter and isolated tests. */
409
+ export class WorkspaceMemoryEngine {
410
+ store;
411
+ config;
412
+ distill;
413
+ constructor(options) {
414
+ this.store = options.store;
415
+ this.distill = options.distill;
416
+ this.config = {
417
+ checkpointTurns: options.config?.checkpointTurns ?? 10,
418
+ checkpointChars: options.config?.checkpointChars ?? 4000,
419
+ idleCheckpointMs: options.config?.idleCheckpointMs ?? 300_000,
420
+ consolidateEvery: options.config?.consolidateEvery ?? 5,
421
+ summaryMaxBytes: options.config?.summaryMaxBytes ?? 3000,
422
+ recallMaxBytes: options.config?.recallMaxBytes ?? 5000,
423
+ recallLimit: options.config?.recallLimit ?? 8,
424
+ checkpointMaxChars: options.config?.checkpointMaxChars ?? 40_000,
425
+ keepSummaryVersions: options.config?.keepSummaryVersions ?? 10,
426
+ surfacedPenalty: options.config?.surfacedPenalty ?? 8,
427
+ };
428
+ }
429
+ async recall(input) {
430
+ const scope = this.store.scope(input.cwd);
431
+ return this.store.withScope(scope, async () => {
432
+ await this.store.ensure(scope);
433
+ const global = this.store.scope('');
434
+ await this.store.ensure(global);
435
+ const [workspaceSummary, globalSummary, workspaceEntries, globalEntries] = await Promise.all([
436
+ this.store.readSummary(scope), this.store.readSummary(global), this.store.readEntries(scope), this.store.readEntries(global),
437
+ ]);
438
+ const entries = scope.key === 'global' ? globalEntries : [...globalEntries, ...workspaceEntries];
439
+ const summary = scope.key === 'global' ? globalSummary : [globalSummary, workspaceSummary].filter(value => value.trim() !== '').join('\n\n');
440
+ const matches = searchEntries(entries, input.query, {
441
+ limit: input.limit ?? this.config.recallLimit,
442
+ ...(input.surfacedMemoryIds === undefined ? {} : { surfacedMemoryIds: input.surfacedMemoryIds }),
443
+ surfacedPenalty: this.config.surfacedPenalty,
444
+ }).map(({ entry, score }) => ({
445
+ id: entry.id,
446
+ scope: entry.scope ?? 'workspace',
447
+ title: entry.title ?? entry.content.slice(0, 80),
448
+ description: entry.description ?? entry.content.slice(0, 240),
449
+ type: entry.type ?? 'fact',
450
+ content: redactSecrets(entry.content),
451
+ tags: entry.tags ?? [],
452
+ importance: entry.importance ?? 1,
453
+ score,
454
+ }));
455
+ const budget = input.maxBytes ?? this.config.recallMaxBytes;
456
+ const boundedSummary = redactSecrets(truncateUtf8(summary, Math.min(budget, this.config.summaryMaxBytes)));
457
+ let remaining = Math.max(0, budget - Buffer.byteLength(boundedSummary));
458
+ const boundedMatches = [];
459
+ for (const match of matches) {
460
+ const bytes = Buffer.byteLength(JSON.stringify(match));
461
+ if (bytes > remaining)
462
+ continue;
463
+ boundedMatches.push(match);
464
+ remaining -= bytes;
465
+ }
466
+ return {
467
+ scope: scope.key,
468
+ summary: boundedSummary,
469
+ matches: boundedMatches,
470
+ };
471
+ });
472
+ }
473
+ async checkpoint(input) {
474
+ const scope = this.store.scope(input.cwd);
475
+ return this.store.withScope(scope, async () => {
476
+ await this.store.ensure(scope);
477
+ const state = await this.store.readState(scope);
478
+ const known = new Set([...state.seenMessageIds, ...state.pendingMessages.map(message => message.id)]);
479
+ let accepted = 0;
480
+ for (const message of safeArray(input.messages)) {
481
+ if (!validMessage(message) || known.has(message.id) || message.text.trim() === '')
482
+ continue;
483
+ state.pendingMessages.push({ id: message.id, role: message.role, text: message.text.trim() });
484
+ known.add(message.id);
485
+ accepted += 1;
486
+ }
487
+ if (accepted > 0)
488
+ state.lastBufferedAt = this.store.now();
489
+ if (accepted === 0 && state.pendingMessages.length === 0) {
490
+ return { status: 'empty', scope: scope.key, accepted: 0, pending: 0, added: 0, updated: 0, ignored: 0 };
491
+ }
492
+ const eligible = input.force === true || checkpointEligible(state, input.reason, this.config, this.store.now());
493
+ if (!eligible) {
494
+ await this.store.writeState(scope, state);
495
+ return { status: 'buffered', scope: scope.key, accepted, pending: state.pendingMessages.length, added: 0, updated: 0, ignored: 0 };
496
+ }
497
+ if (state.pendingMessages.length === 0) {
498
+ return { status: 'empty', scope: scope.key, accepted, pending: 0, added: 0, updated: 0, ignored: 0 };
499
+ }
500
+ const staged = [];
501
+ let chars = 0;
502
+ for (const message of state.pendingMessages) {
503
+ if (chars >= this.config.checkpointMaxChars)
504
+ break;
505
+ const available = this.config.checkpointMaxChars - chars;
506
+ const text = message.text.slice(0, available);
507
+ staged.push({ ...message, text });
508
+ chars += text.length;
509
+ }
510
+ let proposals;
511
+ try {
512
+ proposals = safeArray(await this.distill({ scope, messages: staged, reason: input.reason }));
513
+ }
514
+ catch (error) {
515
+ await this.store.writeState(scope, state);
516
+ return {
517
+ status: 'failed',
518
+ scope: scope.key,
519
+ accepted,
520
+ pending: state.pendingMessages.length,
521
+ added: 0,
522
+ updated: 0,
523
+ ignored: 0,
524
+ error: error instanceof Error ? error.message : String(error),
525
+ };
526
+ }
527
+ const entries = await this.store.readEntries(scope);
528
+ const nowIso = new Date(this.store.now()).toISOString();
529
+ const workspaceProposals = proposals.filter(proposal => normalizeProposal(proposal)?.scope !== 'global');
530
+ const globalProposals = proposals.filter(proposal => normalizeProposal(proposal)?.scope === 'global');
531
+ const result = applyProposals(entries, workspaceProposals, nowIso, this.store.uuid);
532
+ state.seenMessageIds = [...state.seenMessageIds, ...staged.map(message => message.id)].slice(-1024);
533
+ const stagedIds = new Set(staged.map(message => message.id));
534
+ state.pendingMessages = state.pendingMessages.filter(message => !stagedIds.has(message.id));
535
+ state.lastCheckpointAt = this.store.now();
536
+ state.checkpointCount += 1;
537
+ await this.store.writeEntries(scope, entries);
538
+ let globalResult = { added: 0, updated: 0, ignored: 0 };
539
+ if (globalProposals.length > 0 && scope.key !== 'global') {
540
+ const globalScope = this.store.scope('');
541
+ globalResult = await this.store.withScope(globalScope, async () => {
542
+ await this.store.ensure(globalScope);
543
+ const globalEntries = await this.store.readEntries(globalScope);
544
+ const result = applyProposals(globalEntries, globalProposals, nowIso, this.store.uuid);
545
+ await this.store.writeEntries(globalScope, globalEntries);
546
+ if (result.added + result.updated > 0 || !(await this.store.readSummary(globalScope)).trim()) {
547
+ await this.store.rebuildSummary(globalScope, globalEntries, this.config.summaryMaxBytes, this.config.keepSummaryVersions);
548
+ }
549
+ return result;
550
+ });
551
+ }
552
+ if (state.checkpointCount % this.config.consolidateEvery === 0 || !(await this.store.readSummary(scope)).trim()) {
553
+ state.version += 1;
554
+ await this.store.rebuildSummary(scope, entries, this.config.summaryMaxBytes, this.config.keepSummaryVersions);
555
+ }
556
+ await this.store.writeCheckpoint(scope, input.reason, staged, proposals, result);
557
+ await this.store.writeState(scope, state);
558
+ return {
559
+ status: 'committed',
560
+ scope: scope.key,
561
+ accepted,
562
+ pending: state.pendingMessages.length,
563
+ added: result.added + globalResult.added,
564
+ updated: result.updated + globalResult.updated,
565
+ ignored: result.ignored + globalResult.ignored,
566
+ };
567
+ });
568
+ }
569
+ async remember(input) {
570
+ const scope = input.scope === 'global' ? this.store.scope('') : this.store.scope(input.cwd);
571
+ return this.store.withScope(scope, async () => {
572
+ await this.store.ensure(scope);
573
+ const entries = await this.store.readEntries(scope);
574
+ const proposal = normalizeProposal(input);
575
+ if (proposal === undefined)
576
+ throw new Error('memory content is empty or contains a credential-like secret');
577
+ const result = applyProposals(entries, [proposal], new Date(this.store.now()).toISOString(), this.store.uuid);
578
+ await this.store.writeEntries(scope, entries);
579
+ await this.store.rebuildSummary(scope, entries, this.config.summaryMaxBytes, this.config.keepSummaryVersions);
580
+ return { scope: scope.key, ...result };
581
+ });
582
+ }
583
+ async forget(input) {
584
+ const scope = this.store.scope(input.cwd);
585
+ return this.store.withScope(scope, async () => {
586
+ await this.store.ensure(scope);
587
+ const entries = await this.store.readEntries(scope);
588
+ const entry = entries.find(candidate => candidate.id === input.id && candidate.status !== 'deleted');
589
+ if (entry === undefined)
590
+ return { scope: scope.key, deleted: false };
591
+ entry.status = 'deleted';
592
+ entry.updatedAt = new Date(this.store.now()).toISOString();
593
+ await this.store.writeEntries(scope, entries);
594
+ await this.store.rebuildSummary(scope, entries, this.config.summaryMaxBytes, this.config.keepSummaryVersions);
595
+ return { scope: scope.key, deleted: true };
596
+ });
597
+ }
598
+ }
599
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}