@cartisien/engram 0.3.0 → 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.
package/dist/index.d.ts CHANGED
@@ -1,9 +1,12 @@
1
+ export type MemoryTier = 'working' | 'long_term' | 'archived';
1
2
  export interface MemoryEntry {
2
3
  id: string;
3
4
  sessionId: string;
4
5
  content: string;
5
6
  role: 'user' | 'assistant' | 'system';
6
7
  timestamp: Date;
8
+ tier: MemoryTier;
9
+ consolidatedFrom?: string[];
7
10
  metadata?: Record<string, unknown>;
8
11
  similarity?: number;
9
12
  }
@@ -33,6 +36,19 @@ export interface RecallOptions {
33
36
  after?: Date;
34
37
  role?: 'user' | 'assistant' | 'system';
35
38
  includeGraph?: boolean;
39
+ tiers?: MemoryTier[];
40
+ }
41
+ export interface ConsolidateOptions {
42
+ batch?: number;
43
+ keep?: number;
44
+ model?: string;
45
+ dryRun?: boolean;
46
+ }
47
+ export interface ConsolidationResult {
48
+ summarized: number;
49
+ created: number;
50
+ archived: number;
51
+ previews?: string[];
36
52
  }
37
53
  export interface EngramConfig {
38
54
  dbPath?: string;
@@ -42,23 +58,32 @@ export interface EngramConfig {
42
58
  semanticSearch?: boolean;
43
59
  graphMemory?: boolean;
44
60
  graphModel?: string;
61
+ autoConsolidate?: boolean;
62
+ consolidateThreshold?: number;
63
+ consolidateKeep?: number;
64
+ consolidateBatch?: number;
65
+ consolidateModel?: string;
45
66
  }
46
67
  /**
47
68
  * Engram - Persistent semantic memory for AI agents
48
69
  *
49
- * v0.3 adds graph memory — entity relationships extracted from memories
50
- * using a local LLM, enabling richer contextual recall.
70
+ * v0.4 adds memory consolidation working memories are periodically
71
+ * summarized into long-term memories by a local LLM, keeping context
72
+ * dense and relevant as conversations grow.
51
73
  *
52
74
  * @example
53
75
  * ```typescript
54
76
  * import { Engram } from '@cartisien/engram';
55
77
  *
56
- * const memory = new Engram({ dbPath: './memory.db', graphMemory: true });
78
+ * const memory = new Engram({
79
+ * dbPath: './memory.db',
80
+ * autoConsolidate: true,
81
+ * consolidateThreshold: 100,
82
+ * });
57
83
  *
58
- * await memory.remember('session_1', 'Jeff is building GovScout in React 19', 'user');
59
- * const context = await memory.recall('session_1', 'what is Jeff building?', 5);
60
- * const graph = await memory.graph('session_1', 'GovScout');
61
- * // → { entity: 'GovScout', relationships: [{ relation: 'built_with', target: 'React 19' }], ... }
84
+ * // Manual consolidation
85
+ * const result = await memory.consolidate('session_1');
86
+ * // { summarized: 50, created: 4, archived: 50 }
62
87
  * ```
63
88
  */
64
89
  export declare class Engram {
@@ -71,61 +96,63 @@ export declare class Engram {
71
96
  private semanticSearch;
72
97
  private graphMemory;
73
98
  private graphModel;
99
+ private autoConsolidate;
100
+ private consolidateThreshold;
101
+ private consolidateKeep;
102
+ private consolidateBatch;
103
+ private consolidateModel;
74
104
  constructor(config?: EngramConfig);
75
105
  private init;
76
- /**
77
- * Fetch embedding vector from Ollama
78
- */
79
106
  private embed;
80
- /**
81
- * Extract entity-relationship triples from text using a local LLM
82
- */
83
107
  private extractGraph;
84
- /**
85
- * Upsert a graph node
86
- */
87
108
  private upsertNode;
109
+ private storeEdge;
110
+ private cosineSimilarity;
88
111
  /**
89
- * Store a graph edge
112
+ * Call LLM to summarize a batch of memories into consolidated entries.
113
+ * Returns an array of summary strings (typically 2-5 per batch).
90
114
  */
91
- private storeEdge;
115
+ private summarizeMemories;
92
116
  /**
93
- * Cosine similarity between two vectors
117
+ * v0.4: Consolidate working memories into long-term summaries.
118
+ *
119
+ * Takes the oldest `batch` working memories (excluding the `keep` most recent),
120
+ * summarizes them via LLM, stores summaries as `long_term` tier, and archives
121
+ * the originals.
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * const result = await memory.consolidate('session_1');
126
+ * // → { summarized: 50, created: 4, archived: 50 }
127
+ *
128
+ * // Preview without writing
129
+ * const preview = await memory.consolidate('session_1', { dryRun: true });
130
+ * // → { summarized: 50, created: 0, archived: 0, previews: ['...', '...'] }
131
+ * ```
94
132
  */
95
- private cosineSimilarity;
133
+ consolidate(sessionId: string, options?: ConsolidateOptions): Promise<ConsolidationResult>;
96
134
  /**
97
- * Store a memory entry
135
+ * Store a memory entry. With autoConsolidate enabled, triggers consolidation
136
+ * when working memory count exceeds the configured threshold.
98
137
  */
99
138
  remember(sessionId: string, content: string, role?: 'user' | 'assistant' | 'system', metadata?: Record<string, unknown>): Promise<MemoryEntry>;
100
139
  /**
101
- * Recall memories with optional graph traversal
140
+ * Recall memories. Searches working and long_term tiers by default.
141
+ * Archived memories (consolidated originals) are excluded unless explicitly requested.
102
142
  */
103
143
  recall(sessionId: string, query?: string, limit?: number, options?: RecallOptions): Promise<MemoryEntry[]>;
104
- /**
105
- * Augment recall results with graph-connected memories
106
- */
107
144
  private augmentWithGraph;
108
- /**
109
- * v0.3: Query the knowledge graph for an entity
110
- */
111
145
  graph(sessionId: string, entity: string): Promise<GraphResult>;
112
- /**
113
- * Get recent conversation history
114
- */
115
146
  history(sessionId: string, limit?: number): Promise<MemoryEntry[]>;
116
- /**
117
- * Delete memories
118
- */
119
147
  forget(sessionId: string, options?: {
120
148
  before?: Date;
121
149
  id?: string;
150
+ includeLongTerm?: boolean;
122
151
  }): Promise<number>;
123
- /**
124
- * Memory statistics
125
- */
126
152
  stats(sessionId: string): Promise<{
127
153
  total: number;
128
154
  byRole: Record<string, number>;
155
+ byTier: Record<MemoryTier, number>;
129
156
  oldest: Date | null;
130
157
  newest: Date | null;
131
158
  withEmbeddings: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}