universal-agent-memory 0.6.2 → 0.7.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/benchmarks/agents/naive-agent.d.ts +60 -0
- package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/naive-agent.js +144 -0
- package/dist/benchmarks/agents/naive-agent.js.map +1 -0
- package/dist/benchmarks/agents/uam-agent.d.ts +167 -0
- package/dist/benchmarks/agents/uam-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/uam-agent.js +386 -0
- package/dist/benchmarks/agents/uam-agent.js.map +1 -0
- package/dist/benchmarks/benchmark.d.ts +328 -0
- package/dist/benchmarks/benchmark.d.ts.map +1 -0
- package/dist/benchmarks/benchmark.js +104 -0
- package/dist/benchmarks/benchmark.js.map +1 -0
- package/dist/benchmarks/execution-verifier.d.ts +41 -0
- package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
- package/dist/benchmarks/execution-verifier.js +342 -0
- package/dist/benchmarks/execution-verifier.js.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.js +260 -0
- package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
- package/dist/benchmarks/improved-benchmark.d.ts +88 -0
- package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
- package/dist/benchmarks/improved-benchmark.js +533 -0
- package/dist/benchmarks/improved-benchmark.js.map +1 -0
- package/dist/benchmarks/index.d.ts +10 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +10 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
- package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
- package/dist/benchmarks/multi-turn-agent.js +235 -0
- package/dist/benchmarks/multi-turn-agent.js.map +1 -0
- package/dist/benchmarks/runner.d.ts +2 -0
- package/dist/benchmarks/runner.d.ts.map +1 -0
- package/dist/benchmarks/runner.js +2 -0
- package/dist/benchmarks/runner.js.map +1 -0
- package/dist/benchmarks/tasks.d.ts +19 -0
- package/dist/benchmarks/tasks.d.ts.map +1 -0
- package/dist/benchmarks/tasks.js +371 -0
- package/dist/benchmarks/tasks.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
- package/dist/memory/backends/qdrant-cloud.js +6 -4
- package/dist/memory/backends/qdrant-cloud.js.map +1 -1
- package/dist/memory/context-compressor.d.ts +66 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +250 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +26 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +378 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +93 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +391 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +116 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +299 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +88 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +348 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +89 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +259 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +33 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +277 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +62 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +150 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validate-json.d.ts +52 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +99 -0
- package/dist/utils/validate-json.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hierarchical Memory System for UAM
|
|
3
|
+
*
|
|
4
|
+
* Implements hot/warm/cold memory tiering with automatic promotion/demotion.
|
|
5
|
+
* Based on MemGPT and R³Mem research for efficient memory management.
|
|
6
|
+
*/
|
|
7
|
+
import { getEmbeddingService } from './embeddings.js';
|
|
8
|
+
import { compressMemoryEntry, summarizeMemories, estimateTokens } from './context-compressor.js';
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
hotMaxEntries: 10,
|
|
11
|
+
warmMaxEntries: 50,
|
|
12
|
+
coldMaxEntries: 500,
|
|
13
|
+
hotMaxTokens: 2000,
|
|
14
|
+
decayRate: 0.95,
|
|
15
|
+
promotionThreshold: 0.7,
|
|
16
|
+
demotionThreshold: 0.3,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Calculate effective importance with time decay
|
|
20
|
+
* Formula: effective_importance = importance × (decayRate ^ days_since_access)
|
|
21
|
+
*/
|
|
22
|
+
export function calculateEffectiveImportance(entry, decayRate = 0.95) {
|
|
23
|
+
const lastAccessed = new Date(entry.lastAccessed);
|
|
24
|
+
const now = new Date();
|
|
25
|
+
const daysSinceAccess = (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60 * 24);
|
|
26
|
+
return entry.importance * Math.pow(decayRate, daysSinceAccess);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Hierarchical Memory Manager
|
|
30
|
+
*/
|
|
31
|
+
export class HierarchicalMemoryManager {
|
|
32
|
+
config;
|
|
33
|
+
memory;
|
|
34
|
+
accessLog = new Map();
|
|
35
|
+
constructor(config = {}) {
|
|
36
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
37
|
+
this.memory = { hot: [], warm: [], cold: [] };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Add a new memory entry
|
|
41
|
+
*/
|
|
42
|
+
add(entry) {
|
|
43
|
+
const now = new Date().toISOString();
|
|
44
|
+
const fullEntry = {
|
|
45
|
+
...entry,
|
|
46
|
+
accessCount: 1,
|
|
47
|
+
lastAccessed: now,
|
|
48
|
+
tier: 'hot',
|
|
49
|
+
};
|
|
50
|
+
// Add to hot tier
|
|
51
|
+
this.memory.hot.unshift(fullEntry);
|
|
52
|
+
// Trigger rebalancing
|
|
53
|
+
this.rebalance();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Access a memory (promote if accessed frequently)
|
|
57
|
+
*/
|
|
58
|
+
access(id) {
|
|
59
|
+
const entry = this.findEntry(id);
|
|
60
|
+
if (!entry)
|
|
61
|
+
return null;
|
|
62
|
+
// Update access metrics
|
|
63
|
+
entry.accessCount++;
|
|
64
|
+
entry.lastAccessed = new Date().toISOString();
|
|
65
|
+
// Log access for pattern analysis
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
const accessTimes = this.accessLog.get(id) || [];
|
|
68
|
+
accessTimes.push(now);
|
|
69
|
+
this.accessLog.set(id, accessTimes.slice(-10)); // Keep last 10 access times
|
|
70
|
+
// Check for promotion
|
|
71
|
+
this.checkPromotion(entry);
|
|
72
|
+
return entry;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Query memories with automatic tier traversal
|
|
76
|
+
*/
|
|
77
|
+
async query(queryText, limit = 5) {
|
|
78
|
+
const results = [];
|
|
79
|
+
const embeddingService = getEmbeddingService();
|
|
80
|
+
// First check hot tier (always include recent)
|
|
81
|
+
for (const entry of this.memory.hot) {
|
|
82
|
+
const score = this.textSimilarity(queryText, entry.content);
|
|
83
|
+
if (score > 0.3) {
|
|
84
|
+
results.push({ entry, score: score + 0.3 }); // Bonus for hot tier
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Check warm tier
|
|
88
|
+
for (const entry of this.memory.warm) {
|
|
89
|
+
const score = this.textSimilarity(queryText, entry.content);
|
|
90
|
+
if (score > 0.4) {
|
|
91
|
+
results.push({ entry, score: score + 0.1 }); // Small bonus for warm
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Semantic search in cold tier if we need more results
|
|
95
|
+
if (results.length < limit && this.memory.cold.length > 0) {
|
|
96
|
+
try {
|
|
97
|
+
const queryEmbedding = await embeddingService.embed(queryText);
|
|
98
|
+
for (const entry of this.memory.cold) {
|
|
99
|
+
if (entry.embedding) {
|
|
100
|
+
const score = embeddingService.cosineSimilarity(queryEmbedding, entry.embedding);
|
|
101
|
+
if (score > 0.5) {
|
|
102
|
+
results.push({ entry, score });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Fall back to text similarity
|
|
109
|
+
for (const entry of this.memory.cold) {
|
|
110
|
+
const score = this.textSimilarity(queryText, entry.content);
|
|
111
|
+
if (score > 0.5) {
|
|
112
|
+
results.push({ entry, score });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Sort by score and return top entries
|
|
118
|
+
results.sort((a, b) => b.score - a.score);
|
|
119
|
+
const topEntries = results.slice(0, limit).map(r => r.entry);
|
|
120
|
+
// Mark accessed entries
|
|
121
|
+
for (const entry of topEntries) {
|
|
122
|
+
this.access(entry.id);
|
|
123
|
+
}
|
|
124
|
+
return topEntries;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get hot tier context (for inclusion in prompts)
|
|
128
|
+
*/
|
|
129
|
+
getHotContext() {
|
|
130
|
+
let totalTokens = 0;
|
|
131
|
+
const entries = [];
|
|
132
|
+
for (const entry of this.memory.hot) {
|
|
133
|
+
const tokens = estimateTokens(entry.content);
|
|
134
|
+
if (totalTokens + tokens <= this.config.hotMaxTokens) {
|
|
135
|
+
entries.push(entry);
|
|
136
|
+
totalTokens += tokens;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { entries, tokens: totalTokens };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Consolidate old memories into summaries
|
|
143
|
+
*/
|
|
144
|
+
async consolidate() {
|
|
145
|
+
const now = Date.now();
|
|
146
|
+
const oneDayAgo = now - 24 * 60 * 60 * 1000;
|
|
147
|
+
// Find old warm entries to summarize
|
|
148
|
+
const oldWarm = this.memory.warm.filter(e => new Date(e.lastAccessed).getTime() < oneDayAgo);
|
|
149
|
+
if (oldWarm.length >= 10) {
|
|
150
|
+
// Create summary
|
|
151
|
+
const summary = summarizeMemories(oldWarm);
|
|
152
|
+
// Add summary as new cold entry
|
|
153
|
+
const summaryEntry = {
|
|
154
|
+
id: `summary-${Date.now()}`,
|
|
155
|
+
content: summary,
|
|
156
|
+
type: 'observation',
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
158
|
+
importance: 6,
|
|
159
|
+
accessCount: 1,
|
|
160
|
+
lastAccessed: new Date().toISOString(),
|
|
161
|
+
tier: 'cold',
|
|
162
|
+
};
|
|
163
|
+
this.memory.cold.unshift(summaryEntry);
|
|
164
|
+
// Remove summarized entries from warm
|
|
165
|
+
const oldIds = new Set(oldWarm.map(e => e.id));
|
|
166
|
+
this.memory.warm = this.memory.warm.filter(e => !oldIds.has(e.id));
|
|
167
|
+
// Limit cold tier size
|
|
168
|
+
if (this.memory.cold.length > this.config.coldMaxEntries) {
|
|
169
|
+
this.memory.cold = this.memory.cold.slice(0, this.config.coldMaxEntries);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Rebalance tiers based on importance and access patterns
|
|
175
|
+
*/
|
|
176
|
+
rebalance() {
|
|
177
|
+
const { hotMaxEntries, warmMaxEntries, decayRate } = this.config;
|
|
178
|
+
// Calculate effective importance for all entries
|
|
179
|
+
const scoredHot = this.memory.hot.map(e => ({
|
|
180
|
+
entry: e,
|
|
181
|
+
score: calculateEffectiveImportance(e, decayRate),
|
|
182
|
+
}));
|
|
183
|
+
const scoredWarm = this.memory.warm.map(e => ({
|
|
184
|
+
entry: e,
|
|
185
|
+
score: calculateEffectiveImportance(e, decayRate),
|
|
186
|
+
}));
|
|
187
|
+
// Sort hot tier
|
|
188
|
+
scoredHot.sort((a, b) => b.score - a.score);
|
|
189
|
+
// Demote excess hot entries to warm
|
|
190
|
+
if (scoredHot.length > hotMaxEntries) {
|
|
191
|
+
const demoted = scoredHot.slice(hotMaxEntries);
|
|
192
|
+
for (const { entry } of demoted) {
|
|
193
|
+
entry.tier = 'warm';
|
|
194
|
+
this.memory.warm.unshift(entry);
|
|
195
|
+
}
|
|
196
|
+
this.memory.hot = scoredHot.slice(0, hotMaxEntries).map(s => s.entry);
|
|
197
|
+
}
|
|
198
|
+
// Sort warm tier
|
|
199
|
+
scoredWarm.sort((a, b) => b.score - a.score);
|
|
200
|
+
// Demote excess warm entries to cold
|
|
201
|
+
if (this.memory.warm.length > warmMaxEntries) {
|
|
202
|
+
const demoted = this.memory.warm.slice(warmMaxEntries);
|
|
203
|
+
for (const entry of demoted) {
|
|
204
|
+
entry.tier = 'cold';
|
|
205
|
+
// Compress content before moving to cold
|
|
206
|
+
const compressed = compressMemoryEntry(entry.content, { compressionLevel: 'aggressive' });
|
|
207
|
+
entry.compressed = compressed.compressed;
|
|
208
|
+
this.memory.cold.unshift(entry);
|
|
209
|
+
}
|
|
210
|
+
this.memory.warm = this.memory.warm.slice(0, warmMaxEntries);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check and promote entry if accessed frequently
|
|
215
|
+
*/
|
|
216
|
+
checkPromotion(entry) {
|
|
217
|
+
if (entry.tier === 'hot')
|
|
218
|
+
return;
|
|
219
|
+
const accessTimes = this.accessLog.get(entry.id) || [];
|
|
220
|
+
// Calculate access frequency (accesses per hour)
|
|
221
|
+
if (accessTimes.length >= 3) {
|
|
222
|
+
const timeSpan = accessTimes[accessTimes.length - 1] - accessTimes[0];
|
|
223
|
+
const hoursSpan = timeSpan / (1000 * 60 * 60) || 1;
|
|
224
|
+
const frequency = accessTimes.length / hoursSpan;
|
|
225
|
+
// Promote if accessed more than once per hour
|
|
226
|
+
if (frequency > 1 && entry.tier === 'warm') {
|
|
227
|
+
entry.tier = 'hot';
|
|
228
|
+
this.memory.warm = this.memory.warm.filter(e => e.id !== entry.id);
|
|
229
|
+
this.memory.hot.unshift(entry);
|
|
230
|
+
this.rebalance();
|
|
231
|
+
}
|
|
232
|
+
else if (frequency > 0.5 && entry.tier === 'cold') {
|
|
233
|
+
entry.tier = 'warm';
|
|
234
|
+
this.memory.cold = this.memory.cold.filter(e => e.id !== entry.id);
|
|
235
|
+
this.memory.warm.unshift(entry);
|
|
236
|
+
this.rebalance();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Find entry across all tiers
|
|
242
|
+
*/
|
|
243
|
+
findEntry(id) {
|
|
244
|
+
for (const tier of ['hot', 'warm', 'cold']) {
|
|
245
|
+
const entry = this.memory[tier].find(e => e.id === id);
|
|
246
|
+
if (entry)
|
|
247
|
+
return entry;
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Simple text similarity (Jaccard on words)
|
|
253
|
+
*/
|
|
254
|
+
textSimilarity(a, b) {
|
|
255
|
+
const wordsA = new Set(a.toLowerCase().split(/\W+/).filter(w => w.length > 2));
|
|
256
|
+
const wordsB = new Set(b.toLowerCase().split(/\W+/).filter(w => w.length > 2));
|
|
257
|
+
const intersection = new Set([...wordsA].filter(x => wordsB.has(x)));
|
|
258
|
+
const union = new Set([...wordsA, ...wordsB]);
|
|
259
|
+
return intersection.size / (union.size || 1);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get stats about memory usage
|
|
263
|
+
*/
|
|
264
|
+
getStats() {
|
|
265
|
+
const hotTokens = this.memory.hot.reduce((sum, e) => sum + estimateTokens(e.content), 0);
|
|
266
|
+
const warmTokens = this.memory.warm.reduce((sum, e) => sum + estimateTokens(e.content), 0);
|
|
267
|
+
const coldTokens = this.memory.cold.reduce((sum, e) => sum + estimateTokens(e.compressed || e.content), 0);
|
|
268
|
+
return {
|
|
269
|
+
hot: { count: this.memory.hot.length, tokens: hotTokens },
|
|
270
|
+
warm: { count: this.memory.warm.length, tokens: warmTokens },
|
|
271
|
+
cold: { count: this.memory.cold.length, tokens: coldTokens },
|
|
272
|
+
total: {
|
|
273
|
+
count: this.memory.hot.length + this.memory.warm.length + this.memory.cold.length,
|
|
274
|
+
tokens: hotTokens + warmTokens + coldTokens,
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Export all memories (for persistence)
|
|
280
|
+
*/
|
|
281
|
+
export() {
|
|
282
|
+
return { ...this.memory };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Import memories (for initialization)
|
|
286
|
+
*/
|
|
287
|
+
import(data) {
|
|
288
|
+
this.memory = { ...data };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Singleton instance
|
|
292
|
+
let globalManager = null;
|
|
293
|
+
export function getHierarchicalMemoryManager(config) {
|
|
294
|
+
if (!globalManager) {
|
|
295
|
+
globalManager = new HierarchicalMemoryManager(config);
|
|
296
|
+
}
|
|
297
|
+
return globalManager;
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=hierarchical-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchical-memory.js","sourceRoot":"","sources":["../../src/memory/hierarchical-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Consolidation Service for UAM
|
|
3
|
+
*
|
|
4
|
+
* Implements the consolidation rules from CLAUDE.md:
|
|
5
|
+
* - Trigger: Every 10 working memory entries
|
|
6
|
+
* - Action: Summarize → session_memories, Extract lessons → semantic memory
|
|
7
|
+
* - Dedup: Skip if content_hash exists OR similarity > 0.92
|
|
8
|
+
*/
|
|
9
|
+
export interface ConsolidationConfig {
|
|
10
|
+
triggerThreshold: number;
|
|
11
|
+
minImportanceForLongTerm: number;
|
|
12
|
+
similarityThreshold: number;
|
|
13
|
+
maxSummaryLength: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ConsolidationResult {
|
|
16
|
+
memoriesProcessed: number;
|
|
17
|
+
summariesCreated: number;
|
|
18
|
+
lessonsExtracted: number;
|
|
19
|
+
duplicatesSkipped: number;
|
|
20
|
+
tokensReduced: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Memory Consolidation Service
|
|
24
|
+
*/
|
|
25
|
+
export declare class MemoryConsolidator {
|
|
26
|
+
private config;
|
|
27
|
+
private db;
|
|
28
|
+
private contentHashes;
|
|
29
|
+
private lastConsolidationId;
|
|
30
|
+
constructor(config?: Partial<ConsolidationConfig>);
|
|
31
|
+
/**
|
|
32
|
+
* Initialize with database connection
|
|
33
|
+
*/
|
|
34
|
+
initialize(dbPath: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Load existing content hashes for deduplication
|
|
37
|
+
*/
|
|
38
|
+
private loadContentHashes;
|
|
39
|
+
/**
|
|
40
|
+
* Hash content for deduplication
|
|
41
|
+
*/
|
|
42
|
+
private hashContent;
|
|
43
|
+
/**
|
|
44
|
+
* Check if consolidation should run
|
|
45
|
+
*/
|
|
46
|
+
shouldConsolidate(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Run consolidation process
|
|
49
|
+
*/
|
|
50
|
+
consolidate(): Promise<ConsolidationResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Detect if content contains a lesson/insight
|
|
53
|
+
*/
|
|
54
|
+
private detectLesson;
|
|
55
|
+
/**
|
|
56
|
+
* Check for semantic duplicates using embeddings
|
|
57
|
+
*/
|
|
58
|
+
private checkSemanticDuplicate;
|
|
59
|
+
/**
|
|
60
|
+
* Store session memory
|
|
61
|
+
*/
|
|
62
|
+
private storeSessionMemory;
|
|
63
|
+
/**
|
|
64
|
+
* Store lesson in long-term memory
|
|
65
|
+
*/
|
|
66
|
+
private storeLesson;
|
|
67
|
+
/**
|
|
68
|
+
* Run decay on old memories
|
|
69
|
+
* Formula: effective_importance = importance × (0.95 ^ days_since_access)
|
|
70
|
+
*/
|
|
71
|
+
runDecay(): Promise<number>;
|
|
72
|
+
/**
|
|
73
|
+
* Get consolidation stats
|
|
74
|
+
*/
|
|
75
|
+
getStats(): {
|
|
76
|
+
totalMemories: number;
|
|
77
|
+
totalSessionMemories: number;
|
|
78
|
+
totalLessons: number;
|
|
79
|
+
lastConsolidationId: number;
|
|
80
|
+
uniqueHashes: number;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Close database connection
|
|
84
|
+
*/
|
|
85
|
+
close(): void;
|
|
86
|
+
}
|
|
87
|
+
export declare function getMemoryConsolidator(config?: Partial<ConsolidationConfig>): MemoryConsolidator;
|
|
88
|
+
//# sourceMappingURL=memory-consolidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AASD,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAIrD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAiB5B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAsGjD;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;YACW,sBAAsB;IAwCpC;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,WAAW;IAWzB;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAwCjC;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;KACtB;IAwCD;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAKD,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,kBAAkB,CAKpB"}
|