@getanima/core 0.3.3 → 0.5.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.
@@ -0,0 +1,589 @@
1
+ "use strict";
2
+ /**
3
+ * Episodic Memory Engine — structured records of experiences.
4
+ *
5
+ * Unlike flat memories, episodes capture the full context of an experience:
6
+ * who was involved, what happened, how important it was, what was learned,
7
+ * and how it connects to other memories, opinions, and knowledge.
8
+ *
9
+ * Episodes decay based on importance and emotional weight.
10
+ * High-importance episodes get promoted to semantic knowledge automatically.
11
+ *
12
+ * Zero external dependencies. File-based persistence.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EpisodicMemory = void 0;
16
+ const utils_1 = require("./utils");
17
+ const validation_1 = require("./validation");
18
+ const path_1 = require("path");
19
+ /** Limits specific to episodes */
20
+ const EPISODE_LIMITS = {
21
+ MAX_EPISODES: 50_000,
22
+ MAX_TITLE_LENGTH: 500,
23
+ MAX_SUMMARY_LENGTH: 50_000,
24
+ MAX_LESSONS: 50,
25
+ MAX_LESSON_LENGTH: 2_000,
26
+ MAX_PARTICIPANTS: 100,
27
+ MAX_CONNECTIONS: 200,
28
+ MAX_KNOWLEDGE_ENTRIES: 50_000,
29
+ MAX_INSIGHT_LENGTH: 10_000,
30
+ MAX_TOPIC_LENGTH: 500,
31
+ MAX_SOURCE_REFS: 50,
32
+ };
33
+ class EpisodicMemory {
34
+ storagePath;
35
+ episodesDir;
36
+ knowledgeDir;
37
+ episodes = [];
38
+ knowledge = [];
39
+ loaded = false;
40
+ knowledgeLoaded = false;
41
+ constructor(storagePath) {
42
+ this.storagePath = (0, validation_1.validateStoragePath)(storagePath);
43
+ this.episodesDir = (0, path_1.join)(this.storagePath, 'memory', 'episodes');
44
+ this.knowledgeDir = (0, path_1.join)(this.storagePath, 'memory', 'knowledge');
45
+ }
46
+ // ============ EPISODES: Record ============
47
+ /**
48
+ * Record a new episode — a structured experience.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * await episodes.record({
53
+ * title: 'Customer escalation resolved',
54
+ * summary: 'User was frustrated about billing. De-escalated with empathy first.',
55
+ * emotionalWeight: 0.7,
56
+ * participants: ['user-123'],
57
+ * tags: ['customer-service', 'conflict'],
58
+ * lessons: ['Empathy before solutions works better than jumping to fixes'],
59
+ * });
60
+ * ```
61
+ */
62
+ async record(input) {
63
+ await this.load();
64
+ // Validate all inputs
65
+ const title = (0, validation_1.validateString)(input.title, 'title', { maxLength: EPISODE_LIMITS.MAX_TITLE_LENGTH });
66
+ const summary = (0, validation_1.validateString)(input.summary, 'summary', { maxLength: EPISODE_LIMITS.MAX_SUMMARY_LENGTH });
67
+ const emotionalWeight = input.emotionalWeight !== undefined
68
+ ? (0, validation_1.validateConfidence)(input.emotionalWeight, 'emotionalWeight')
69
+ : 0.5;
70
+ const participants = input.participants
71
+ ? (0, validation_1.validateStringArray)(input.participants, 'participants', {
72
+ maxItems: EPISODE_LIMITS.MAX_PARTICIPANTS,
73
+ maxItemLength: validation_1.LIMITS.MAX_NAME_LENGTH,
74
+ })
75
+ : [];
76
+ const tags = input.tags
77
+ ? (0, validation_1.validateStringArray)(input.tags, 'tags', {
78
+ maxItems: validation_1.LIMITS.MAX_TAGS,
79
+ maxItemLength: validation_1.LIMITS.MAX_TAG_LENGTH,
80
+ })
81
+ : [];
82
+ const lessons = input.lessons
83
+ ? (0, validation_1.validateStringArray)(input.lessons, 'lessons', {
84
+ maxItems: EPISODE_LIMITS.MAX_LESSONS,
85
+ maxItemLength: EPISODE_LIMITS.MAX_LESSON_LENGTH,
86
+ })
87
+ : [];
88
+ const connections = input.connections
89
+ ? this.validateConnections(input.connections)
90
+ : { episodeIds: [], opinionIds: [], memoryIds: [] };
91
+ // Enforce episode limit
92
+ if (this.episodes.length >= EPISODE_LIMITS.MAX_EPISODES) {
93
+ // Auto-archive lowest importance episodes
94
+ const archivable = this.episodes
95
+ .filter(e => !e.archived && e.importance < 0.3)
96
+ .sort((a, b) => a.importance - b.importance);
97
+ if (archivable.length > 0) {
98
+ archivable[0].archived = true;
99
+ archivable[0].archivedAt = (0, utils_1.now)();
100
+ }
101
+ else {
102
+ throw new validation_1.AnimaValidationError('episodes', `maximum of ${EPISODE_LIMITS.MAX_EPISODES} episodes reached`);
103
+ }
104
+ }
105
+ const episode = {
106
+ id: `ep-${(0, utils_1.uid)()}`,
107
+ title,
108
+ summary,
109
+ timestamp: input.timestamp || (0, utils_1.now)(),
110
+ emotionalWeight,
111
+ importance: this.calculateImportance(emotionalWeight, lessons.length, connections, participants.length),
112
+ participants,
113
+ tags,
114
+ lessons,
115
+ connections,
116
+ accessCount: 0,
117
+ archived: false,
118
+ createdAt: (0, utils_1.now)(),
119
+ updatedAt: (0, utils_1.now)(),
120
+ };
121
+ this.episodes.push(episode);
122
+ await this.save();
123
+ // Auto-extract lessons to knowledge if episode is important enough
124
+ if (episode.importance >= 0.6 && lessons.length > 0) {
125
+ for (const lesson of lessons) {
126
+ await this.learn({
127
+ topic: this.extractTopicFromLesson(lesson, tags),
128
+ insight: lesson,
129
+ confidence: Math.min(0.9, episode.importance),
130
+ sourceEpisodeIds: [episode.id],
131
+ tags,
132
+ });
133
+ }
134
+ }
135
+ return episode;
136
+ }
137
+ // ============ EPISODES: Query ============
138
+ /**
139
+ * Search episodes by various criteria.
140
+ * Returns episodes sorted by relevance (importance * recency * match).
141
+ */
142
+ async query(q) {
143
+ await this.load();
144
+ let results = this.episodes.filter(e => !e.archived);
145
+ // Filter by text search (title + summary + lessons)
146
+ if (q.text) {
147
+ const textLower = q.text.toLowerCase();
148
+ const words = textLower.split(/\s+/).filter(w => w.length > 2);
149
+ results = results.filter(e => {
150
+ const searchable = `${e.title} ${e.summary} ${e.lessons.join(' ')}`.toLowerCase();
151
+ return words.some(w => searchable.includes(w));
152
+ });
153
+ }
154
+ // Filter by tags
155
+ if (q.tags && q.tags.length > 0) {
156
+ const queryTags = q.tags.map(t => t.toLowerCase());
157
+ results = results.filter(e => e.tags.some(t => queryTags.includes(t.toLowerCase())));
158
+ }
159
+ // Filter by participants
160
+ if (q.participants && q.participants.length > 0) {
161
+ const queryParts = q.participants.map(p => p.toLowerCase());
162
+ results = results.filter(e => e.participants.some(p => queryParts.includes(p.toLowerCase())));
163
+ }
164
+ // Filter by time range
165
+ if (q.after) {
166
+ const afterMs = new Date(q.after).getTime();
167
+ if (!isNaN(afterMs)) {
168
+ results = results.filter(e => new Date(e.timestamp).getTime() >= afterMs);
169
+ }
170
+ }
171
+ if (q.before) {
172
+ const beforeMs = new Date(q.before).getTime();
173
+ if (!isNaN(beforeMs)) {
174
+ results = results.filter(e => new Date(e.timestamp).getTime() <= beforeMs);
175
+ }
176
+ }
177
+ // Filter by minimum importance
178
+ if (q.minImportance !== undefined) {
179
+ const min = (0, validation_1.validateConfidence)(q.minImportance, 'minImportance');
180
+ results = results.filter(e => e.importance >= min);
181
+ }
182
+ // Filter by minimum emotional weight
183
+ if (q.minEmotionalWeight !== undefined) {
184
+ const min = (0, validation_1.validateConfidence)(q.minEmotionalWeight, 'minEmotionalWeight');
185
+ results = results.filter(e => e.emotionalWeight >= min);
186
+ }
187
+ // Score and sort by relevance
188
+ const scored = results.map(e => {
189
+ let score = e.importance;
190
+ // Recency boost (last 24h = +0.3, last week = +0.1)
191
+ const ageMs = Date.now() - new Date(e.timestamp).getTime();
192
+ const ageHours = ageMs / (1000 * 60 * 60);
193
+ if (ageHours < 24)
194
+ score += 0.3;
195
+ else if (ageHours < 168)
196
+ score += 0.1;
197
+ // Emotional weight boost
198
+ score += e.emotionalWeight * 0.2;
199
+ // Access count boost (frequently accessed = important)
200
+ score += Math.min(0.2, (e.accessCount || 0) * 0.05);
201
+ // Text match quality boost
202
+ if (q.text) {
203
+ const textLower = q.text.toLowerCase();
204
+ if (e.title.toLowerCase().includes(textLower))
205
+ score += 0.3;
206
+ if (e.summary.toLowerCase().includes(textLower))
207
+ score += 0.1;
208
+ }
209
+ return { episode: e, score };
210
+ });
211
+ scored.sort((a, b) => b.score - a.score);
212
+ // Track access
213
+ const limit = q.limit || 20;
214
+ const topResults = scored.slice(0, limit);
215
+ for (const { episode } of topResults) {
216
+ episode.accessCount = (episode.accessCount || 0) + 1;
217
+ }
218
+ if (topResults.length > 0)
219
+ await this.save();
220
+ return topResults.map(({ episode }) => episode);
221
+ }
222
+ /**
223
+ * Get a single episode by ID.
224
+ */
225
+ async get(id) {
226
+ await this.load();
227
+ const ep = this.episodes.find(e => e.id === id);
228
+ if (ep) {
229
+ ep.accessCount = (ep.accessCount || 0) + 1;
230
+ await this.save();
231
+ }
232
+ return ep || null;
233
+ }
234
+ /**
235
+ * Get the most recent N episodes.
236
+ */
237
+ async recent(limit = 10) {
238
+ await this.load();
239
+ return [...this.episodes]
240
+ .filter(e => !e.archived)
241
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
242
+ .slice(0, limit);
243
+ }
244
+ /**
245
+ * Get episodes connected to a specific episode.
246
+ */
247
+ async related(episodeId) {
248
+ await this.load();
249
+ const source = this.episodes.find(e => e.id === episodeId);
250
+ if (!source)
251
+ return [];
252
+ const relatedIds = new Set(source.connections.episodeIds || []);
253
+ // Also find episodes that reference this one
254
+ for (const ep of this.episodes) {
255
+ if (ep.connections.episodeIds?.includes(episodeId)) {
256
+ relatedIds.add(ep.id);
257
+ }
258
+ }
259
+ relatedIds.delete(episodeId); // Don't include self
260
+ return this.episodes.filter(e => relatedIds.has(e.id));
261
+ }
262
+ // ============ EPISODES: Update ============
263
+ /**
264
+ * Add a lesson learned to an existing episode.
265
+ * Use when you realize something new about a past experience.
266
+ */
267
+ async addLesson(episodeId, lesson) {
268
+ await this.load();
269
+ const ep = this.episodes.find(e => e.id === episodeId);
270
+ if (!ep)
271
+ return null;
272
+ const validated = (0, validation_1.validateString)(lesson, 'lesson', { maxLength: EPISODE_LIMITS.MAX_LESSON_LENGTH });
273
+ if (ep.lessons.length >= EPISODE_LIMITS.MAX_LESSONS) {
274
+ throw new validation_1.AnimaValidationError('lessons', `maximum of ${EPISODE_LIMITS.MAX_LESSONS} lessons per episode`);
275
+ }
276
+ // Prevent duplicates
277
+ if (ep.lessons.some(l => l.toLowerCase() === validated.toLowerCase())) {
278
+ return ep;
279
+ }
280
+ ep.lessons.push(validated);
281
+ ep.importance = this.calculateImportance(ep.emotionalWeight, ep.lessons.length, ep.connections, ep.participants.length);
282
+ ep.updatedAt = (0, utils_1.now)();
283
+ await this.save();
284
+ return ep;
285
+ }
286
+ /**
287
+ * Connect two episodes together.
288
+ */
289
+ async connect(episodeIdA, episodeIdB) {
290
+ await this.load();
291
+ const a = this.episodes.find(e => e.id === episodeIdA);
292
+ const b = this.episodes.find(e => e.id === episodeIdB);
293
+ if (!a || !b)
294
+ return false;
295
+ if (!a.connections.episodeIds)
296
+ a.connections.episodeIds = [];
297
+ if (!b.connections.episodeIds)
298
+ b.connections.episodeIds = [];
299
+ if (!a.connections.episodeIds.includes(episodeIdB)) {
300
+ a.connections.episodeIds.push(episodeIdB);
301
+ }
302
+ if (!b.connections.episodeIds.includes(episodeIdA)) {
303
+ b.connections.episodeIds.push(episodeIdA);
304
+ }
305
+ a.updatedAt = (0, utils_1.now)();
306
+ b.updatedAt = (0, utils_1.now)();
307
+ await this.save();
308
+ return true;
309
+ }
310
+ // ============ EPISODES: Archive ============
311
+ /**
312
+ * Archive an episode (soft delete). Can be restored.
313
+ */
314
+ async archive(episodeId) {
315
+ await this.load();
316
+ const ep = this.episodes.find(e => e.id === episodeId);
317
+ if (!ep)
318
+ return false;
319
+ ep.archived = true;
320
+ ep.archivedAt = (0, utils_1.now)();
321
+ await this.save();
322
+ return true;
323
+ }
324
+ /**
325
+ * Restore an archived episode.
326
+ */
327
+ async restore(episodeId) {
328
+ await this.load();
329
+ const ep = this.episodes.find(e => e.id === episodeId);
330
+ if (!ep || !ep.archived)
331
+ return false;
332
+ ep.archived = false;
333
+ ep.archivedAt = undefined;
334
+ await this.save();
335
+ return true;
336
+ }
337
+ // ============ KNOWLEDGE: Learn ============
338
+ /**
339
+ * Store a distilled lesson — semantic knowledge not tied to a specific moment.
340
+ *
341
+ * @example
342
+ * ```ts
343
+ * await episodes.learn({
344
+ * topic: 'customer-retention',
345
+ * insight: 'Users who get a callback within 2 hours have 3x retention',
346
+ * confidence: 0.8,
347
+ * tags: ['business', 'retention'],
348
+ * });
349
+ * ```
350
+ */
351
+ async learn(input) {
352
+ await this.loadKnowledge();
353
+ const topic = (0, validation_1.validateString)(input.topic, 'topic', { maxLength: EPISODE_LIMITS.MAX_TOPIC_LENGTH });
354
+ const insight = (0, validation_1.validateString)(input.insight, 'insight', { maxLength: EPISODE_LIMITS.MAX_INSIGHT_LENGTH });
355
+ const confidence = input.confidence !== undefined
356
+ ? (0, validation_1.validateConfidence)(input.confidence, 'confidence')
357
+ : 0.7;
358
+ const tags = input.tags
359
+ ? (0, validation_1.validateStringArray)(input.tags, 'tags', { maxItems: validation_1.LIMITS.MAX_TAGS, maxItemLength: validation_1.LIMITS.MAX_TAG_LENGTH })
360
+ : [];
361
+ const sourceEpisodeIds = input.sourceEpisodeIds
362
+ ? (0, validation_1.validateStringArray)(input.sourceEpisodeIds, 'sourceEpisodeIds', { maxItems: EPISODE_LIMITS.MAX_SOURCE_REFS })
363
+ : [];
364
+ // Check for existing knowledge on the same topic
365
+ const existing = this.knowledge.find(k => k.topic.toLowerCase() === topic.toLowerCase());
366
+ if (existing) {
367
+ // Update existing knowledge — track history
368
+ if (!existing.previousInsights)
369
+ existing.previousInsights = [];
370
+ existing.previousInsights.push({
371
+ insight: existing.insight,
372
+ confidence: existing.confidence,
373
+ date: existing.updatedAt,
374
+ });
375
+ existing.insight = insight;
376
+ existing.confidence = confidence;
377
+ existing.tags = [...new Set([...existing.tags, ...tags])];
378
+ existing.sourceEpisodeIds = [...new Set([...existing.sourceEpisodeIds, ...sourceEpisodeIds])];
379
+ existing.updatedAt = (0, utils_1.now)();
380
+ await this.saveKnowledge();
381
+ return existing;
382
+ }
383
+ // Enforce limit
384
+ if (this.knowledge.length >= EPISODE_LIMITS.MAX_KNOWLEDGE_ENTRIES) {
385
+ // Remove lowest confidence entry
386
+ const lowest = [...this.knowledge].sort((a, b) => a.confidence - b.confidence)[0];
387
+ if (lowest && lowest.confidence < confidence) {
388
+ this.knowledge = this.knowledge.filter(k => k.id !== lowest.id);
389
+ }
390
+ else {
391
+ throw new validation_1.AnimaValidationError('knowledge', `maximum of ${EPISODE_LIMITS.MAX_KNOWLEDGE_ENTRIES} entries reached`);
392
+ }
393
+ }
394
+ const entry = {
395
+ id: `k-${(0, utils_1.uid)()}`,
396
+ topic,
397
+ insight,
398
+ confidence,
399
+ tags,
400
+ sourceEpisodeIds,
401
+ previousInsights: [],
402
+ createdAt: (0, utils_1.now)(),
403
+ updatedAt: (0, utils_1.now)(),
404
+ };
405
+ this.knowledge.push(entry);
406
+ await this.saveKnowledge();
407
+ return entry;
408
+ }
409
+ /**
410
+ * Search knowledge by topic or text.
411
+ */
412
+ async recall(query, limit = 10) {
413
+ await this.loadKnowledge();
414
+ const queryLower = query.toLowerCase();
415
+ const words = queryLower.split(/\s+/).filter(w => w.length > 2);
416
+ const scored = this.knowledge.map(k => {
417
+ const searchable = `${k.topic} ${k.insight} ${k.tags.join(' ')}`.toLowerCase();
418
+ let score = 0;
419
+ for (const word of words) {
420
+ if (k.topic.toLowerCase().includes(word))
421
+ score += 3;
422
+ if (searchable.includes(word))
423
+ score += 1;
424
+ }
425
+ // Boost by confidence
426
+ score += k.confidence * 0.5;
427
+ return { entry: k, score };
428
+ })
429
+ .filter(({ score }) => score > 0)
430
+ .sort((a, b) => b.score - a.score)
431
+ .slice(0, limit);
432
+ return scored.map(({ entry }) => entry);
433
+ }
434
+ /**
435
+ * Get all knowledge entries.
436
+ */
437
+ async getAllKnowledge() {
438
+ await this.loadKnowledge();
439
+ return [...this.knowledge];
440
+ }
441
+ // ============ CONSOLIDATION ============
442
+ /**
443
+ * Consolidate episodes — decay old ones, promote lessons, clean up.
444
+ * Call this periodically (e.g., during heartbeats or sleep).
445
+ */
446
+ async consolidate() {
447
+ await this.load();
448
+ await this.loadKnowledge();
449
+ let archived = 0;
450
+ let promoted = 0;
451
+ let kept = 0;
452
+ for (const ep of this.episodes) {
453
+ if (ep.archived)
454
+ continue;
455
+ const ageMs = Date.now() - new Date(ep.timestamp).getTime();
456
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
457
+ // Decay based on age, importance, and emotional weight
458
+ const decayResistance = (ep.importance * 0.5) + (ep.emotionalWeight * 0.3) + (Math.min(1, (ep.accessCount || 0) * 0.1) * 0.2);
459
+ // Archive episodes older than 30 days with low resistance
460
+ if (ageDays > 30 && decayResistance < 0.3) {
461
+ ep.archived = true;
462
+ ep.archivedAt = (0, utils_1.now)();
463
+ archived++;
464
+ continue;
465
+ }
466
+ // Promote unextracted lessons from important episodes
467
+ if (ep.importance >= 0.5 && ep.lessons.length > 0) {
468
+ for (const lesson of ep.lessons) {
469
+ const alreadyKnown = this.knowledge.some(k => k.sourceEpisodeIds.includes(ep.id) &&
470
+ k.insight.toLowerCase() === lesson.toLowerCase());
471
+ if (!alreadyKnown) {
472
+ await this.learn({
473
+ topic: this.extractTopicFromLesson(lesson, ep.tags),
474
+ insight: lesson,
475
+ confidence: Math.min(0.85, ep.importance),
476
+ sourceEpisodeIds: [ep.id],
477
+ tags: ep.tags,
478
+ });
479
+ promoted++;
480
+ }
481
+ }
482
+ }
483
+ kept++;
484
+ }
485
+ await this.save();
486
+ await this.saveKnowledge();
487
+ return {
488
+ totalEpisodes: this.episodes.length,
489
+ activeEpisodes: this.episodes.filter(e => !e.archived).length,
490
+ archivedEpisodes: this.episodes.filter(e => e.archived).length,
491
+ totalKnowledge: this.knowledge.length,
492
+ decayedThisRun: archived,
493
+ promotedThisRun: promoted,
494
+ };
495
+ }
496
+ // ============ STATS ============
497
+ async stats() {
498
+ await this.load();
499
+ await this.loadKnowledge();
500
+ return {
501
+ totalEpisodes: this.episodes.length,
502
+ activeEpisodes: this.episodes.filter(e => !e.archived).length,
503
+ archivedEpisodes: this.episodes.filter(e => e.archived).length,
504
+ totalKnowledge: this.knowledge.length,
505
+ decayedThisRun: 0,
506
+ promotedThisRun: 0,
507
+ };
508
+ }
509
+ // ============ INTERNAL ============
510
+ calculateImportance(emotionalWeight, lessonCount, connections, participantCount) {
511
+ let score = 0;
512
+ // Emotional weight is the strongest signal (0-0.4)
513
+ score += emotionalWeight * 0.4;
514
+ // Lessons learned make episodes more important (0-0.25)
515
+ score += Math.min(0.25, lessonCount * 0.05);
516
+ // Connections make episodes more important (0-0.2)
517
+ const totalConnections = (connections.episodeIds?.length || 0) +
518
+ (connections.opinionIds?.length || 0) +
519
+ (connections.memoryIds?.length || 0);
520
+ score += Math.min(0.2, totalConnections * 0.04);
521
+ // Multiple participants = social event = more important (0-0.15)
522
+ score += Math.min(0.15, participantCount * 0.05);
523
+ return Math.max(0, Math.min(1, score));
524
+ }
525
+ validateConnections(connections) {
526
+ if (!connections || typeof connections !== 'object') {
527
+ return { episodeIds: [], opinionIds: [], memoryIds: [] };
528
+ }
529
+ const c = connections;
530
+ return {
531
+ episodeIds: c.episodeIds
532
+ ? (0, validation_1.validateStringArray)(c.episodeIds, 'connections.episodeIds', { maxItems: EPISODE_LIMITS.MAX_CONNECTIONS })
533
+ : [],
534
+ opinionIds: c.opinionIds
535
+ ? (0, validation_1.validateStringArray)(c.opinionIds, 'connections.opinionIds', { maxItems: EPISODE_LIMITS.MAX_CONNECTIONS })
536
+ : [],
537
+ memoryIds: c.memoryIds
538
+ ? (0, validation_1.validateStringArray)(c.memoryIds, 'connections.memoryIds', { maxItems: EPISODE_LIMITS.MAX_CONNECTIONS })
539
+ : [],
540
+ };
541
+ }
542
+ extractTopicFromLesson(lesson, tags) {
543
+ // Use first tag as topic if available, otherwise extract from lesson
544
+ if (tags.length > 0)
545
+ return tags[0];
546
+ // Take first 50 chars of lesson as topic
547
+ return lesson.length > 50 ? lesson.substring(0, 50).trim() + '...' : lesson;
548
+ }
549
+ async load() {
550
+ if (this.loaded)
551
+ return;
552
+ await (0, utils_1.ensureDir)(this.episodesDir);
553
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.episodesDir, 'index.json'));
554
+ if (raw) {
555
+ try {
556
+ this.episodes = JSON.parse(raw);
557
+ }
558
+ catch {
559
+ this.episodes = [];
560
+ }
561
+ }
562
+ this.loaded = true;
563
+ }
564
+ async save() {
565
+ await (0, utils_1.ensureDir)(this.episodesDir);
566
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.episodesDir, 'index.json'), JSON.stringify(this.episodes, null, 2));
567
+ }
568
+ async loadKnowledge() {
569
+ if (this.knowledgeLoaded)
570
+ return;
571
+ await (0, utils_1.ensureDir)(this.knowledgeDir);
572
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.knowledgeDir, 'index.json'));
573
+ if (raw) {
574
+ try {
575
+ this.knowledge = JSON.parse(raw);
576
+ }
577
+ catch {
578
+ this.knowledge = [];
579
+ }
580
+ }
581
+ this.knowledgeLoaded = true;
582
+ }
583
+ async saveKnowledge() {
584
+ await (0, utils_1.ensureDir)(this.knowledgeDir);
585
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.knowledgeDir, 'index.json'), JSON.stringify(this.knowledge, null, 2));
586
+ }
587
+ }
588
+ exports.EpisodicMemory = EpisodicMemory;
589
+ //# sourceMappingURL=episodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episodes.js","sourceRoot":"","sources":["../src/episodes.ts"],"names":[],"mappings":"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"}