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