@lemoncat7/dsh-partner 0.1.0-alpha.21 → 0.1.0-alpha.22

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 (44) hide show
  1. package/README.md +3 -2
  2. package/lib/agent-runtime.d.ts +6 -4
  3. package/lib/agent-runtime.d.ts.map +1 -1
  4. package/lib/agent-runtime.js +33 -14
  5. package/lib/agent-runtime.js.map +1 -1
  6. package/lib/api.d.ts +2 -2
  7. package/lib/api.d.ts.map +1 -1
  8. package/lib/api.js +21 -6
  9. package/lib/api.js.map +1 -1
  10. package/lib/client-api.d.ts +36 -7
  11. package/lib/client-api.d.ts.map +1 -1
  12. package/lib/client-api.js.map +1 -1
  13. package/lib/client.js +702 -92
  14. package/lib/client.js.map +2 -2
  15. package/lib/domain.d.ts +4 -2
  16. package/lib/domain.d.ts.map +1 -1
  17. package/lib/domain.js +12 -6
  18. package/lib/domain.js.map +1 -1
  19. package/lib/heartbeat.d.ts +1 -3
  20. package/lib/heartbeat.d.ts.map +1 -1
  21. package/lib/heartbeat.js +1 -7
  22. package/lib/heartbeat.js.map +1 -1
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +14 -7
  25. package/lib/index.js.map +1 -1
  26. package/lib/memory-domain.d.ts +58 -0
  27. package/lib/memory-domain.d.ts.map +1 -0
  28. package/lib/memory-domain.js +2 -0
  29. package/lib/memory-domain.js.map +1 -0
  30. package/lib/memory-reflection.d.ts +20 -0
  31. package/lib/memory-reflection.d.ts.map +1 -0
  32. package/lib/memory-reflection.js +112 -0
  33. package/lib/memory-reflection.js.map +1 -0
  34. package/lib/memory-store.d.ts +38 -0
  35. package/lib/memory-store.d.ts.map +1 -0
  36. package/lib/memory-store.js +399 -0
  37. package/lib/memory-store.js.map +1 -0
  38. package/lib/store.js +18 -2
  39. package/lib/store.js.map +1 -1
  40. package/package.json +1 -1
  41. package/lib/journal.d.ts +0 -23
  42. package/lib/journal.d.ts.map +0 -1
  43. package/lib/journal.js +0 -93
  44. package/lib/journal.js.map +0 -1
@@ -0,0 +1,399 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { appendFile, mkdir, readFile, readdir, rename, rm } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { DatabaseSync } from 'node:sqlite';
5
+ export class PartnerMemoryStore {
6
+ root;
7
+ timeZone;
8
+ writes = new Map();
9
+ constructor(root, timeZone = 'Asia/Shanghai') {
10
+ this.root = root;
11
+ this.timeZone = timeZone;
12
+ }
13
+ day(at) { return localDay(at, this.timeZone); }
14
+ async archive(turn) {
15
+ const directory = this.scopeDirectory(turn.companionId, turn.scopeId);
16
+ const path = join(directory, 'conversations', `${localDay(turn.at, this.timeZone)}.jsonl`);
17
+ await this.serial(path, async () => {
18
+ await mkdir(join(directory, 'conversations'), { recursive: true, mode: 0o700 });
19
+ await appendFile(path, `${JSON.stringify(turn)}\n`, { encoding: 'utf8', mode: 0o600 });
20
+ });
21
+ }
22
+ async consolidate(turn, result) {
23
+ await this.serial(this.databasePath(turn.companionId), async () => {
24
+ const database = await this.open(turn.companionId);
25
+ try {
26
+ database.exec('BEGIN IMMEDIATE');
27
+ const existing = this.memoriesForScope(database, turn.companionId, turn.scopeId);
28
+ for (const memory of mergeMemories(existing, result.memories, turn))
29
+ this.upsertMemory(database, memory);
30
+ const date = localDay(turn.at, this.timeZone);
31
+ const previous = database.prepare('SELECT turn_count FROM daily_reflections WHERE scope_id = ? AND date = ?').get(turn.scopeId, date);
32
+ database.prepare(`INSERT INTO daily_reflections
33
+ (date, companion_id, scope_id, summary, events_json, open_tasks_json, completed_tasks_json, learnings_json, updated_at, turn_count)
34
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
35
+ ON CONFLICT(scope_id, date) DO UPDATE SET summary=excluded.summary, events_json=excluded.events_json,
36
+ open_tasks_json=excluded.open_tasks_json, completed_tasks_json=excluded.completed_tasks_json,
37
+ learnings_json=excluded.learnings_json, updated_at=excluded.updated_at, turn_count=excluded.turn_count`).run(date, turn.companionId, turn.scopeId, compact(result.daily.summary, 1200), json(strings(result.daily.events, 20, 240)), json(strings(result.daily.openTasks, 20, 240)), json(strings(result.daily.completedTasks, 20, 240)), json(strings(result.daily.learnings, 20, 240)), Date.now(), number(previous?.turn_count) + 1);
38
+ database.exec('COMMIT');
39
+ }
40
+ catch (error) {
41
+ rollback(database);
42
+ throw error;
43
+ }
44
+ finally {
45
+ database.close();
46
+ }
47
+ });
48
+ }
49
+ async recall(companionId, scopeId, query, limit = 12) {
50
+ const database = await this.open(companionId);
51
+ try {
52
+ const now = Date.now();
53
+ const rows = database.prepare(`SELECT * FROM memories
54
+ WHERE scope_id = ? AND status = 'active' AND (expires_at IS NULL OR expires_at > ?)
55
+ ORDER BY updated_at DESC`).all(scopeId, now);
56
+ const terms = tokenize(query);
57
+ return rows.map(memoryFromRow).map(item => ({ item, score: recallScore(item, terms, now) }))
58
+ .sort((a, b) => b.score - a.score || b.item.updatedAt - a.item.updatedAt)
59
+ .slice(0, limit).map(entry => entry.item);
60
+ }
61
+ finally {
62
+ database.close();
63
+ }
64
+ }
65
+ async recentMemories(companionId, limit = 100) {
66
+ const database = await this.open(companionId);
67
+ try {
68
+ return database.prepare('SELECT * FROM memories ORDER BY updated_at DESC LIMIT ?').all(limit).map(memoryFromRow);
69
+ }
70
+ finally {
71
+ database.close();
72
+ }
73
+ }
74
+ async updateMemory(companionId, memoryId, subject, content) {
75
+ return this.serialValue(this.databasePath(companionId), async () => {
76
+ const database = await this.open(companionId);
77
+ try {
78
+ const result = database.prepare(`UPDATE memories SET subject = ?, content = ?, updated_at = ?, confidence = 1, locked = 1
79
+ WHERE companion_id = ? AND id = ?`).run(compact(subject, 120), compact(content, 800), Date.now(), companionId, memoryId);
80
+ if (result.changes === 0)
81
+ throw new Error('memory was not found');
82
+ return memoryFromRow(database.prepare('SELECT * FROM memories WHERE id = ?').get(memoryId));
83
+ }
84
+ finally {
85
+ database.close();
86
+ }
87
+ });
88
+ }
89
+ async deleteMemory(companionId, memoryId) {
90
+ await this.serial(this.databasePath(companionId), async () => {
91
+ const database = await this.open(companionId);
92
+ try {
93
+ const result = database.prepare('DELETE FROM memories WHERE companion_id = ? AND id = ?').run(companionId, memoryId);
94
+ if (result.changes === 0)
95
+ throw new Error('memory was not found');
96
+ }
97
+ finally {
98
+ database.close();
99
+ }
100
+ });
101
+ }
102
+ async recentReflections(companionId, limit = 30) {
103
+ const database = await this.open(companionId);
104
+ try {
105
+ return database.prepare('SELECT * FROM daily_reflections ORDER BY updated_at DESC LIMIT ?').all(limit).map(reflectionFromRow);
106
+ }
107
+ finally {
108
+ database.close();
109
+ }
110
+ }
111
+ async recentReflectionsForScope(companionId, scopeId, limit = 30) {
112
+ const database = await this.open(companionId);
113
+ try {
114
+ return database.prepare('SELECT * FROM daily_reflections WHERE scope_id = ? ORDER BY date DESC LIMIT ?').all(scopeId, limit).map(reflectionFromRow);
115
+ }
116
+ finally {
117
+ database.close();
118
+ }
119
+ }
120
+ async clear(companionId) {
121
+ await rm(this.memoryRoot(companionId), { recursive: true, force: true });
122
+ }
123
+ async migrateLegacy(companionId) {
124
+ const journalCount = await this.migrateJournal(companionId);
125
+ const jsonCount = await this.migrateJson(companionId);
126
+ return journalCount + jsonCount;
127
+ }
128
+ async prune(companionId, retentionDays) {
129
+ if (retentionDays === 0)
130
+ return;
131
+ const cutoff = Date.now() - retentionDays * 86_400_000;
132
+ const scopes = await this.scopeDirectories(companionId);
133
+ await Promise.all(scopes.map(directory => this.serial(directory, async () => {
134
+ const target = join(directory, 'conversations');
135
+ const files = await readdir(target).catch(error => missing(error) ? [] : Promise.reject(error));
136
+ await Promise.all(files.filter(file => /^\d{4}-\d{2}-\d{2}\.jsonl$/.test(file) && Date.parse(file.slice(0, 10)) < cutoff).map(file => rm(join(target, file), { force: true })));
137
+ })));
138
+ await this.serial(this.databasePath(companionId), async () => {
139
+ const database = await this.open(companionId);
140
+ try {
141
+ database.exec('BEGIN IMMEDIATE');
142
+ database.prepare('DELETE FROM daily_reflections WHERE companion_id = ? AND updated_at < ?').run(companionId, cutoff);
143
+ database.prepare('DELETE FROM memories WHERE companion_id = ? AND updated_at < ?').run(companionId, cutoff);
144
+ database.exec('COMMIT');
145
+ }
146
+ catch (error) {
147
+ rollback(database);
148
+ throw error;
149
+ }
150
+ finally {
151
+ database.close();
152
+ }
153
+ });
154
+ }
155
+ async open(companionId) {
156
+ await mkdir(this.memoryRoot(companionId), { recursive: true, mode: 0o700 });
157
+ const database = new DatabaseSync(this.databasePath(companionId));
158
+ database.exec(`PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 5000;
159
+ CREATE TABLE IF NOT EXISTS memories (
160
+ id TEXT PRIMARY KEY, companion_id TEXT NOT NULL, scope_id TEXT NOT NULL, kind TEXT NOT NULL,
161
+ subject TEXT NOT NULL, content TEXT NOT NULL, status TEXT NOT NULL, confidence REAL NOT NULL,
162
+ importance REAL NOT NULL, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL,
163
+ expires_at INTEGER, locked INTEGER NOT NULL DEFAULT 0, evidence_json TEXT NOT NULL
164
+ );
165
+ CREATE INDEX IF NOT EXISTS memories_scope_status_updated ON memories(scope_id, status, updated_at DESC);
166
+ CREATE INDEX IF NOT EXISTS memories_companion_kind_updated ON memories(companion_id, kind, updated_at DESC);
167
+ CREATE TABLE IF NOT EXISTS daily_reflections (
168
+ date TEXT NOT NULL, companion_id TEXT NOT NULL, scope_id TEXT NOT NULL, summary TEXT NOT NULL,
169
+ events_json TEXT NOT NULL, open_tasks_json TEXT NOT NULL, completed_tasks_json TEXT NOT NULL,
170
+ learnings_json TEXT NOT NULL, updated_at INTEGER NOT NULL, turn_count INTEGER NOT NULL,
171
+ PRIMARY KEY(scope_id, date)
172
+ );
173
+ CREATE INDEX IF NOT EXISTS reflections_companion_updated ON daily_reflections(companion_id, updated_at DESC);
174
+ PRAGMA user_version = 1;`);
175
+ return database;
176
+ }
177
+ memoriesForScope(database, companionId, scopeId) {
178
+ return database.prepare('SELECT * FROM memories WHERE companion_id = ? AND scope_id = ?').all(companionId, scopeId).map(memoryFromRow);
179
+ }
180
+ upsertMemory(database, memory) {
181
+ database.prepare(`INSERT INTO memories
182
+ (id, companion_id, scope_id, kind, subject, content, status, confidence, importance, created_at, updated_at, expires_at, locked, evidence_json)
183
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
184
+ ON CONFLICT(id) DO UPDATE SET kind=excluded.kind, subject=excluded.subject, content=excluded.content,
185
+ status=excluded.status, confidence=excluded.confidence, importance=excluded.importance, updated_at=excluded.updated_at,
186
+ expires_at=excluded.expires_at, locked=excluded.locked, evidence_json=excluded.evidence_json`).run(memory.id, memory.companionId, memory.scopeId, memory.kind, memory.subject, memory.content, memory.status, memory.confidence, memory.importance, memory.createdAt, memory.updatedAt, memory.expiresAt ?? null, memory.locked ? 1 : 0, json(memory.evidence));
187
+ }
188
+ async migrateJson(companionId) {
189
+ const scopes = await this.scopeDirectories(companionId);
190
+ if (scopes.length === 0)
191
+ return 0;
192
+ const database = await this.open(companionId);
193
+ const migratedFiles = [];
194
+ let migrated = 0;
195
+ try {
196
+ database.exec('BEGIN IMMEDIATE');
197
+ for (const directory of scopes) {
198
+ const scopeHash = directory.split('/').at(-1) ?? 'unknown';
199
+ const documentPath = join(directory, 'memories.json');
200
+ const document = await readJson(documentPath);
201
+ if (document) {
202
+ for (const memory of document.memories) {
203
+ this.upsertMemory(database, memory);
204
+ migrated += 1;
205
+ }
206
+ migratedFiles.push({ source: documentPath, target: join(this.memoryRoot(companionId), 'legacy-json', scopeHash, 'memories.json') });
207
+ }
208
+ const diaryDirectory = join(directory, 'diary');
209
+ const files = await readdir(diaryDirectory).catch(error => missing(error) ? [] : Promise.reject(error));
210
+ for (const file of files.filter(item => /^\d{4}-\d{2}-\d{2}\.json$/.test(item))) {
211
+ const source = join(diaryDirectory, file);
212
+ const reflection = await readJson(source);
213
+ if (!reflection)
214
+ continue;
215
+ this.upsertReflection(database, reflection);
216
+ migrated += 1;
217
+ migratedFiles.push({ source, target: join(this.memoryRoot(companionId), 'legacy-json', scopeHash, 'diary', file) });
218
+ }
219
+ }
220
+ database.exec('COMMIT');
221
+ }
222
+ catch (error) {
223
+ rollback(database);
224
+ throw error;
225
+ }
226
+ finally {
227
+ database.close();
228
+ }
229
+ for (const file of migratedFiles)
230
+ await archiveMigratedFile(file.source, file.target);
231
+ return migrated;
232
+ }
233
+ upsertReflection(database, reflection) {
234
+ database.prepare(`INSERT INTO daily_reflections
235
+ (date, companion_id, scope_id, summary, events_json, open_tasks_json, completed_tasks_json, learnings_json, updated_at, turn_count)
236
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
237
+ ON CONFLICT(scope_id, date) DO UPDATE SET summary=excluded.summary, events_json=excluded.events_json,
238
+ open_tasks_json=excluded.open_tasks_json, completed_tasks_json=excluded.completed_tasks_json,
239
+ learnings_json=excluded.learnings_json, updated_at=excluded.updated_at, turn_count=excluded.turn_count`).run(reflection.date, reflection.companionId, reflection.scopeId, reflection.summary, json(reflection.events), json(reflection.openTasks), json(reflection.completedTasks), json(reflection.learnings), reflection.updatedAt, reflection.turnCount);
240
+ }
241
+ async migrateJournal(companionId) {
242
+ const legacy = join(this.memoryRoot(companionId), 'journal');
243
+ const scopes = await readdir(legacy, { withFileTypes: true }).catch(error => missing(error) ? [] : Promise.reject(error));
244
+ let migrated = 0;
245
+ for (const scope of scopes.filter(item => item.isDirectory())) {
246
+ const directory = join(legacy, scope.name);
247
+ const files = await readdir(directory).catch(() => []);
248
+ for (const file of files.filter(item => /^\d{4}-\d{2}-\d{2}\.jsonl$/.test(item))) {
249
+ const lines = (await readFile(join(directory, file), 'utf8')).split('\n').filter(Boolean);
250
+ for (const line of lines) {
251
+ try {
252
+ const item = JSON.parse(line);
253
+ if (!item.scopeId || !item.at || !item.summary || !item.outcome)
254
+ continue;
255
+ await this.archive({ id: item.id ?? `legacy-${randomUUID()}`, companionId, scopeId: item.scopeId, sessionId: 'legacy-journal', at: item.at, user: item.summary, assistant: item.outcome });
256
+ migrated += 1;
257
+ }
258
+ catch { /* Preserve invalid legacy lines for manual recovery. */ }
259
+ }
260
+ }
261
+ }
262
+ if (migrated > 0)
263
+ await rename(legacy, join(this.memoryRoot(companionId), 'legacy-journal'));
264
+ return migrated;
265
+ }
266
+ async scopeDirectories(companionId) {
267
+ const root = join(this.memoryRoot(companionId), 'scopes');
268
+ const entries = await readdir(root, { withFileTypes: true }).catch(error => missing(error) ? [] : Promise.reject(error));
269
+ return entries.filter(item => item.isDirectory()).map(item => join(root, item.name));
270
+ }
271
+ memoryRoot(companionId) { return join(this.root, 'partners', companionId, 'memory'); }
272
+ databasePath(companionId) { return join(this.memoryRoot(companionId), 'memory.sqlite'); }
273
+ scopeDirectory(companionId, scopeId) { return join(this.memoryRoot(companionId), 'scopes', createHash('sha256').update(scopeId).digest('hex').slice(0, 24)); }
274
+ async serial(key, task) { await this.serialValue(key, task); }
275
+ async serialValue(key, task) {
276
+ const previous = this.writes.get(key) ?? Promise.resolve();
277
+ let value;
278
+ const current = previous.catch(() => { }).then(async () => { value = await task(); });
279
+ this.writes.set(key, current);
280
+ try {
281
+ await current;
282
+ return value;
283
+ }
284
+ finally {
285
+ if (this.writes.get(key) === current)
286
+ this.writes.delete(key);
287
+ }
288
+ }
289
+ }
290
+ function mergeMemories(existing, candidates, turn) {
291
+ const memories = existing.map(item => ({ ...item, evidence: [...item.evidence] }));
292
+ for (const candidate of candidates.slice(0, 12)) {
293
+ const match = memories.find(item => item.kind === candidate.kind && normalize(item.subject) === normalize(candidate.subject) && item.status !== 'superseded');
294
+ if (candidate.operation === 'remove') {
295
+ if (match) {
296
+ match.status = 'superseded';
297
+ match.updatedAt = turn.at;
298
+ }
299
+ ;
300
+ continue;
301
+ }
302
+ if (candidate.operation === 'complete') {
303
+ if (match) {
304
+ match.status = 'completed';
305
+ match.updatedAt = turn.at;
306
+ }
307
+ ;
308
+ continue;
309
+ }
310
+ const evidence = { turnId: turn.id, at: turn.at, excerpt: compact(turn.user, 300) };
311
+ if (match) {
312
+ if (!match.locked)
313
+ match.content = compact(candidate.content, 800);
314
+ match.confidence = Math.max(match.confidence, bounded(candidate.confidence));
315
+ match.importance = Math.max(match.importance, bounded(candidate.importance));
316
+ match.updatedAt = turn.at;
317
+ match.status = 'active';
318
+ match.evidence = [...match.evidence.filter(item => item.turnId !== turn.id), evidence].slice(-8);
319
+ if (candidate.expiresInDays)
320
+ match.expiresAt = turn.at + candidate.expiresInDays * 86_400_000;
321
+ }
322
+ else
323
+ memories.push({
324
+ id: `memory-${randomUUID()}`, companionId: turn.companionId, scopeId: turn.scopeId, kind: candidate.kind,
325
+ subject: compact(candidate.subject, 120), content: compact(candidate.content, 800), status: 'active',
326
+ confidence: bounded(candidate.confidence), importance: bounded(candidate.importance), createdAt: turn.at, updatedAt: turn.at,
327
+ ...(candidate.expiresInDays ? { expiresAt: turn.at + candidate.expiresInDays * 86_400_000 } : {}), evidence: [evidence],
328
+ });
329
+ }
330
+ return memories;
331
+ }
332
+ function memoryFromRow(row) {
333
+ return {
334
+ id: string(row.id), companionId: string(row.companion_id), scopeId: string(row.scope_id), kind: string(row.kind),
335
+ subject: string(row.subject), content: string(row.content), status: string(row.status),
336
+ confidence: number(row.confidence), importance: number(row.importance), createdAt: number(row.created_at), updatedAt: number(row.updated_at),
337
+ ...(row.expires_at === null ? {} : { expiresAt: number(row.expires_at) }), ...(number(row.locked) === 1 ? { locked: true } : {}),
338
+ evidence: parseJson(row.evidence_json, []),
339
+ };
340
+ }
341
+ function reflectionFromRow(row) {
342
+ return {
343
+ date: string(row.date), companionId: string(row.companion_id), scopeId: string(row.scope_id), summary: string(row.summary),
344
+ events: parseJson(row.events_json, []), openTasks: parseJson(row.open_tasks_json, []),
345
+ completedTasks: parseJson(row.completed_tasks_json, []), learnings: parseJson(row.learnings_json, []),
346
+ updatedAt: number(row.updated_at), turnCount: number(row.turn_count),
347
+ };
348
+ }
349
+ function recallScore(memory, terms, now) {
350
+ const haystack = normalize(`${memory.subject} ${memory.content}`);
351
+ const lexical = terms.length === 0 ? 0 : terms.filter(term => haystack.includes(term)).length / terms.length;
352
+ const recency = Math.max(0, 1 - (now - memory.updatedAt) / (180 * 86_400_000));
353
+ return lexical * 0.5 + memory.importance * 0.22 + memory.confidence * 0.18 + recency * 0.1;
354
+ }
355
+ function rollback(database) { try {
356
+ database.exec('ROLLBACK');
357
+ }
358
+ catch { /* No active transaction. */ } }
359
+ function tokenize(value) { return [...new Set(normalize(value).match(/[\p{L}\p{N}]{2,}/gu) ?? [])].slice(0, 40); }
360
+ function normalize(value) { return value.toLocaleLowerCase().replace(/\s+/g, ''); }
361
+ function bounded(value) { return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0.5; }
362
+ function strings(value, limit, max) { return [...new Set(value.map(item => compact(item, max)).filter(Boolean))].slice(0, limit); }
363
+ function compact(value, max) { const text = value.replace(/\s+/g, ' ').trim(); return text.length <= max ? text : `${text.slice(0, max - 1)}…`; }
364
+ function string(value) { return typeof value === 'string' ? value : String(value ?? ''); }
365
+ function number(value) { return typeof value === 'bigint' ? Number(value) : typeof value === 'number' ? value : Number(value ?? 0); }
366
+ function json(value) { return JSON.stringify(value); }
367
+ function parseJson(value, fallback) { try {
368
+ return JSON.parse(string(value));
369
+ }
370
+ catch {
371
+ return fallback;
372
+ } }
373
+ export function localMemoryDay(value, timeZone = 'Asia/Shanghai') { return localDay(value, timeZone); }
374
+ function localDay(value, timeZone) {
375
+ const parts = new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(value);
376
+ const part = (type) => parts.find(item => item.type === type)?.value ?? '';
377
+ return `${part('year')}-${part('month')}-${part('day')}`;
378
+ }
379
+ function missing(error) { return error.code === 'ENOENT'; }
380
+ async function readJson(path) { try {
381
+ return JSON.parse(await readFile(path, 'utf8'));
382
+ }
383
+ catch (error) {
384
+ if (missing(error))
385
+ return undefined;
386
+ throw error;
387
+ } }
388
+ async function archiveMigratedFile(source, target) {
389
+ await mkdir(dirname(target), { recursive: true, mode: 0o700 });
390
+ try {
391
+ await rename(source, target);
392
+ }
393
+ catch (error) {
394
+ if (error.code !== 'EEXIST')
395
+ throw error;
396
+ await rm(source, { force: true });
397
+ }
398
+ }
399
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"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"}
package/lib/store.js CHANGED
@@ -83,7 +83,7 @@ export class PartnerStore {
83
83
  }
84
84
  }
85
85
  function emptyState() {
86
- return { schemaVersion: 4, companions: [createDefaultCompanion()], channels: [], pairings: [], sessions: [], recentReceipts: [], heartbeatStates: [] };
86
+ return { schemaVersion: 6, companions: [createDefaultCompanion()], channels: [], pairings: [], sessions: [], recentReceipts: [], heartbeatStates: [] };
87
87
  }
88
88
  function parseState(value) {
89
89
  if (typeof value === 'object' && value !== null && !Array.isArray(value) && value.schemaVersion === 1) {
@@ -135,6 +135,22 @@ function parseState(value) {
135
135
  }) : legacy.companions,
136
136
  };
137
137
  }
138
+ if (typeof value === 'object' && value !== null && !Array.isArray(value) && value.schemaVersion === 4) {
139
+ const legacy = value;
140
+ value = {
141
+ ...legacy,
142
+ schemaVersion: 5,
143
+ companions: Array.isArray(legacy.companions) ? legacy.companions.map(item => {
144
+ const companion = item;
145
+ const automation = companion.automation;
146
+ const { journal, ...rest } = automation ?? {};
147
+ return { ...companion, automation: { ...rest, memory: journal ?? structuredClone(DEFAULT_AUTOMATION.memory) } };
148
+ }) : legacy.companions,
149
+ };
150
+ }
151
+ if (typeof value === 'object' && value !== null && !Array.isArray(value) && value.schemaVersion === 5) {
152
+ value = { ...value, schemaVersion: 6 };
153
+ }
138
154
  validateState(value);
139
155
  return value;
140
156
  }
@@ -142,7 +158,7 @@ function validateState(value) {
142
158
  if (typeof value !== 'object' || value === null || Array.isArray(value))
143
159
  throw new Error('partner state must be an object');
144
160
  const state = value;
145
- if (state.schemaVersion !== 4)
161
+ if (state.schemaVersion !== 6)
146
162
  throw new Error('unsupported partner state schema');
147
163
  for (const key of ['companions', 'channels', 'pairings', 'sessions', 'recentReceipts', 'heartbeatStates']) {
148
164
  if (!Array.isArray(state[key]))
package/lib/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAA;AAE3F,MAAM,OAAO,YAAY;IAIc;IAH7B,KAAK,CAAc;IACnB,MAAM,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAEjD,YAAqC,IAAY,EAAE,KAAmB;QAAjC,SAAI,GAAJ,IAAI,CAAQ;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY;QAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAC5D,IAAI,KAAmB,CAAA;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAA;YAC/D,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAK,GAAmC,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC1H,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC3C,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC1B,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAA;YACnE,KAAK,GAAG,UAAU,EAAE,CAAA;YACpB,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC3C,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC1B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAqC;QAChD,IAAI,aAA6C,CAAA;QACjD,IAAI,YAAwC,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,YAAY,GAAG,MAAM,CAAA,CAAC,CAAC,CAAC,CAAA;QACjH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,CAAA;YACZ,aAAa,CAAC,IAAI,CAAC,CAAA;YACnB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAChC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAC1C,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAmB;QACvC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAA;QACrF,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACpG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC;YAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAA;YACrE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpC,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;YACrD,IAAI,CAAC;gBAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;YAAC,CAAC;oBAAS,CAAC;gBAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;AACxJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,KAAqC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACvI,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,KAAK,GAAG;YACN,GAAG,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5E,GAAI,IAAgC,EAAE,UAAU,EAAE,eAAe,CAAC,kBAAkB,CAAC;aACtF,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;YACvB,eAAe,EAAE,EAAE;SACpB,CAAA;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,KAAqC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC9I,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,KAAK,GAAG;YACN,GAAG,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1E,MAAM,SAAS,GAAG,IAA+B,CAAA;gBACjD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAiD,CAAA;gBAC9E,MAAM,OAAO,GAAG,UAAU,EAAE,OAA8C,CAAA;gBAC1E,OAAO;oBACL,GAAG,SAAS;oBACZ,UAAU,EAAE;wBACV,GAAG,UAAU;wBACb,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE;qBACnG;iBACF,CAAA;YACH,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;SACvB,CAAA;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,KAAqC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC9I,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,KAAK,GAAG;YACN,GAAG,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1E,MAAM,SAAS,GAAG,IAA+B,CAAA;gBACjD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAiD,CAAA;gBAC9E,MAAM,SAAS,GAAG,UAAU,EAAE,SAAgD,CAAA;gBAC9E,OAAO;oBACL,GAAG,SAAS;oBACZ,UAAU,EAAE;wBACV,GAAG,UAAU;wBACb,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE;qBACjG;iBACF,CAAA;YACH,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;SACvB,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,KAAqC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACvI,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,KAAK,GAAG;YACN,GAAG,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1E,MAAM,SAAS,GAAG,IAA+B,CAAA;gBACjD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAiD,CAAA;gBAC9E,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,IAAI,EAAE,CAAA;gBAC7C,OAAO,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;YACjH,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;SACvB,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,KAAqC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACvI,KAAK,GAAG,EAAE,GAAI,KAAiC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAA;IACrE,CAAC;IACD,aAAa,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAC3H,MAAM,KAAK,GAAG,KAA8B,CAAA;IAC5C,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAClF,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,CAAU,EAAE,CAAC;QACnH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,CAAA;IAC1F,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAA;IAClD,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAAA;AACnE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lemoncat7/dsh-partner",
3
- "version": "0.1.0-alpha.21",
3
+ "version": "0.1.0-alpha.22",
4
4
  "description": "Long-lived AI companions with WeChat channel routing for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
package/lib/journal.d.ts DELETED
@@ -1,23 +0,0 @@
1
- export interface JournalEntry {
2
- id: string;
3
- companionId: string;
4
- scopeId: string;
5
- at: number;
6
- source: 'conversation' | 'heartbeat';
7
- summary: string;
8
- outcome: string;
9
- }
10
- export declare class PartnerJournal {
11
- private readonly root;
12
- private readonly writes;
13
- constructor(root: string);
14
- record(companionId: string, scopeId: string, source: JournalEntry['source'], summary: string, outcome: string): Promise<JournalEntry>;
15
- recent(companionId: string, scopeId: string, limit?: number): Promise<JournalEntry[]>;
16
- recentAll(companionId: string, limit?: number): Promise<JournalEntry[]>;
17
- private readDirectory;
18
- clear(companionId: string): Promise<void>;
19
- prune(companionId: string, retentionDays: number): Promise<void>;
20
- private directory;
21
- private scopeDirectory;
22
- }
23
- //# sourceMappingURL=journal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,cAAc,GAAG,WAAW,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE7B,IAAI,EAAE,MAAM;IAEnC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBrI,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIjF,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAU5D,aAAa;IAgBrB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;CAIvB"}
package/lib/journal.js DELETED
@@ -1,93 +0,0 @@
1
- import { appendFile, mkdir, readFile, readdir, rm } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { createHash, randomUUID } from 'node:crypto';
4
- export class PartnerJournal {
5
- root;
6
- writes = new Map();
7
- constructor(root) {
8
- this.root = root;
9
- }
10
- async record(companionId, scopeId, source, summary, outcome) {
11
- const entry = {
12
- id: `journal-${randomUUID()}`, companionId, scopeId, at: Date.now(), source,
13
- summary: compact(summary, 240), outcome: compact(outcome, 320),
14
- };
15
- const directory = this.scopeDirectory(companionId, scopeId);
16
- const path = join(directory, `${day(entry.at)}.jsonl`);
17
- const previous = this.writes.get(companionId) ?? Promise.resolve();
18
- const current = previous.catch(() => { }).then(async () => {
19
- await mkdir(directory, { recursive: true, mode: 0o700 });
20
- await appendFile(path, `${JSON.stringify(entry)}\n`, { encoding: 'utf8', mode: 0o600 });
21
- });
22
- this.writes.set(companionId, current);
23
- try {
24
- await current;
25
- }
26
- finally {
27
- if (this.writes.get(companionId) === current)
28
- this.writes.delete(companionId);
29
- }
30
- return entry;
31
- }
32
- async recent(companionId, scopeId, limit = 30) {
33
- return this.readDirectory(this.scopeDirectory(companionId, scopeId), limit);
34
- }
35
- async recentAll(companionId, limit = 100) {
36
- const root = this.directory(companionId);
37
- const scopes = await readdir(root, { withFileTypes: true }).catch(error => {
38
- if (error.code === 'ENOENT')
39
- return [];
40
- throw error;
41
- });
42
- const groups = await Promise.all(scopes.filter(item => item.isDirectory()).map(item => this.readDirectory(join(root, item.name), limit)));
43
- return groups.flat().sort((a, b) => b.at - a.at).slice(0, limit);
44
- }
45
- async readDirectory(directory, limit) {
46
- const files = await readdir(directory).catch(error => {
47
- if (error.code === 'ENOENT')
48
- return [];
49
- throw error;
50
- });
51
- const entries = [];
52
- for (const file of files.filter(item => /^\d{4}-\d{2}-\d{2}\.jsonl$/.test(item)).sort().reverse()) {
53
- const lines = (await readFile(join(directory, file), 'utf8')).split('\n').filter(Boolean).reverse();
54
- for (const line of lines) {
55
- try {
56
- entries.push(JSON.parse(line));
57
- }
58
- catch { /* Preserve access to other valid entries. */ }
59
- if (entries.length >= limit)
60
- return entries;
61
- }
62
- }
63
- return entries;
64
- }
65
- async clear(companionId) {
66
- await this.writes.get(companionId)?.catch(() => { });
67
- await rm(this.directory(companionId), { recursive: true, force: true });
68
- }
69
- async prune(companionId, retentionDays) {
70
- if (retentionDays === 0)
71
- return;
72
- const directory = this.directory(companionId);
73
- const scopes = await readdir(directory, { withFileTypes: true }).catch(() => []);
74
- const cutoff = Date.now() - retentionDays * 86_400_000;
75
- await Promise.all(scopes.filter(item => item.isDirectory()).map(async (scope) => {
76
- const scopeDirectory = join(directory, scope.name);
77
- const files = await readdir(scopeDirectory).catch(() => []);
78
- await Promise.all(files.filter(item => /^\d{4}-\d{2}-\d{2}\.jsonl$/.test(item) && Date.parse(item.slice(0, 10)) < cutoff)
79
- .map(item => rm(join(scopeDirectory, item), { force: true })));
80
- }));
81
- }
82
- directory(companionId) { return join(this.root, 'partners', companionId, 'memory', 'journal'); }
83
- scopeDirectory(companionId, scopeId) {
84
- const key = createHash('sha256').update(scopeId).digest('hex').slice(0, 24);
85
- return join(this.directory(companionId), key);
86
- }
87
- }
88
- function day(value) { return new Date(value).toISOString().slice(0, 10); }
89
- function compact(value, max) {
90
- const normalized = value.replace(/\s+/g, ' ').trim();
91
- return normalized.length <= max ? normalized : `${normalized.slice(0, max - 1)}…`;
92
- }
93
- //# sourceMappingURL=journal.js.map