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,348 @@
|
|
|
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
|
+
import { createHash } from 'crypto';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import Database from 'better-sqlite3';
|
|
12
|
+
import { summarizeMemories, compressMemoryEntry } from './context-compressor.js';
|
|
13
|
+
import { getEmbeddingService } from './embeddings.js';
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
triggerThreshold: 10,
|
|
16
|
+
minImportanceForLongTerm: 7,
|
|
17
|
+
similarityThreshold: 0.92,
|
|
18
|
+
maxSummaryLength: 500,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Memory Consolidation Service
|
|
22
|
+
*/
|
|
23
|
+
export class MemoryConsolidator {
|
|
24
|
+
config;
|
|
25
|
+
db = null;
|
|
26
|
+
contentHashes = new Set();
|
|
27
|
+
lastConsolidationId = 0;
|
|
28
|
+
constructor(config = {}) {
|
|
29
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize with database connection
|
|
33
|
+
*/
|
|
34
|
+
initialize(dbPath) {
|
|
35
|
+
if (!existsSync(dbPath)) {
|
|
36
|
+
throw new Error(`Database not found: ${dbPath}`);
|
|
37
|
+
}
|
|
38
|
+
this.db = new Database(dbPath);
|
|
39
|
+
this.loadContentHashes();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Load existing content hashes for deduplication
|
|
43
|
+
*/
|
|
44
|
+
loadContentHashes() {
|
|
45
|
+
if (!this.db)
|
|
46
|
+
return;
|
|
47
|
+
try {
|
|
48
|
+
const stmt = this.db.prepare(`
|
|
49
|
+
SELECT content FROM memories
|
|
50
|
+
UNION
|
|
51
|
+
SELECT content FROM session_memories
|
|
52
|
+
`);
|
|
53
|
+
const rows = stmt.all();
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
this.contentHashes.add(this.hashContent(row.content));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Tables might not exist yet
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Hash content for deduplication
|
|
64
|
+
*/
|
|
65
|
+
hashContent(content) {
|
|
66
|
+
return createHash('md5')
|
|
67
|
+
.update(content.toLowerCase().trim())
|
|
68
|
+
.digest('hex');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if consolidation should run
|
|
72
|
+
*/
|
|
73
|
+
shouldConsolidate() {
|
|
74
|
+
if (!this.db)
|
|
75
|
+
return false;
|
|
76
|
+
try {
|
|
77
|
+
const stmt = this.db.prepare(`
|
|
78
|
+
SELECT COUNT(*) as count, MAX(id) as maxId
|
|
79
|
+
FROM memories
|
|
80
|
+
WHERE id > ?
|
|
81
|
+
`);
|
|
82
|
+
const result = stmt.get(this.lastConsolidationId);
|
|
83
|
+
return result.count >= this.config.triggerThreshold;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Run consolidation process
|
|
91
|
+
*/
|
|
92
|
+
async consolidate() {
|
|
93
|
+
if (!this.db) {
|
|
94
|
+
throw new Error('Database not initialized');
|
|
95
|
+
}
|
|
96
|
+
const result = {
|
|
97
|
+
memoriesProcessed: 0,
|
|
98
|
+
summariesCreated: 0,
|
|
99
|
+
lessonsExtracted: 0,
|
|
100
|
+
duplicatesSkipped: 0,
|
|
101
|
+
tokensReduced: 0,
|
|
102
|
+
};
|
|
103
|
+
// Get memories since last consolidation
|
|
104
|
+
const stmt = this.db.prepare(`
|
|
105
|
+
SELECT id, timestamp, type, content
|
|
106
|
+
FROM memories
|
|
107
|
+
WHERE id > ?
|
|
108
|
+
ORDER BY id ASC
|
|
109
|
+
LIMIT 100
|
|
110
|
+
`);
|
|
111
|
+
const memories = stmt.all(this.lastConsolidationId);
|
|
112
|
+
if (memories.length === 0)
|
|
113
|
+
return result;
|
|
114
|
+
result.memoriesProcessed = memories.length;
|
|
115
|
+
const originalTokens = memories.reduce((sum, m) => sum + m.content.length / 4, 0);
|
|
116
|
+
// Group by type for summarization
|
|
117
|
+
const byType = {};
|
|
118
|
+
for (const mem of memories) {
|
|
119
|
+
if (!byType[mem.type])
|
|
120
|
+
byType[mem.type] = [];
|
|
121
|
+
byType[mem.type].push(mem);
|
|
122
|
+
}
|
|
123
|
+
// Create summaries for each type
|
|
124
|
+
for (const [_type, typeMemories] of Object.entries(byType)) {
|
|
125
|
+
if (typeMemories.length >= 3) {
|
|
126
|
+
const summary = summarizeMemories(typeMemories.map(m => ({
|
|
127
|
+
content: m.content,
|
|
128
|
+
timestamp: m.timestamp,
|
|
129
|
+
type: m.type,
|
|
130
|
+
})), this.config.maxSummaryLength);
|
|
131
|
+
const summaryHash = this.hashContent(summary);
|
|
132
|
+
if (!this.contentHashes.has(summaryHash)) {
|
|
133
|
+
// Store in session_memories
|
|
134
|
+
await this.storeSessionMemory(summary, 'summary', 6);
|
|
135
|
+
this.contentHashes.add(summaryHash);
|
|
136
|
+
result.summariesCreated++;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result.duplicatesSkipped++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Extract lessons from high-importance observations
|
|
144
|
+
const lessons = memories.filter(m => m.type === 'observation' &&
|
|
145
|
+
this.detectLesson(m.content));
|
|
146
|
+
for (const lesson of lessons) {
|
|
147
|
+
const compressed = compressMemoryEntry(lesson.content, { compressionLevel: 'medium' });
|
|
148
|
+
const hash = this.hashContent(compressed.compressed);
|
|
149
|
+
if (!this.contentHashes.has(hash)) {
|
|
150
|
+
// Check semantic similarity
|
|
151
|
+
const isDuplicate = await this.checkSemanticDuplicate(compressed.compressed);
|
|
152
|
+
if (!isDuplicate) {
|
|
153
|
+
await this.storeLesson(compressed.compressed, lesson.timestamp);
|
|
154
|
+
this.contentHashes.add(hash);
|
|
155
|
+
result.lessonsExtracted++;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
result.duplicatesSkipped++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
result.duplicatesSkipped++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Calculate token reduction
|
|
166
|
+
const summaryTokens = result.summariesCreated * (this.config.maxSummaryLength / 4);
|
|
167
|
+
const lessonTokens = result.lessonsExtracted * 100; // Approximate
|
|
168
|
+
result.tokensReduced = Math.max(0, originalTokens - summaryTokens - lessonTokens);
|
|
169
|
+
// Update last consolidation pointer
|
|
170
|
+
this.lastConsolidationId = memories[memories.length - 1].id;
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Detect if content contains a lesson/insight
|
|
175
|
+
*/
|
|
176
|
+
detectLesson(content) {
|
|
177
|
+
const lessonIndicators = [
|
|
178
|
+
/learned that/i,
|
|
179
|
+
/important to/i,
|
|
180
|
+
/mistake was/i,
|
|
181
|
+
/better to/i,
|
|
182
|
+
/should always/i,
|
|
183
|
+
/should never/i,
|
|
184
|
+
/key insight/i,
|
|
185
|
+
/gotcha/i,
|
|
186
|
+
/watch out for/i,
|
|
187
|
+
/best practice/i,
|
|
188
|
+
/pattern/i,
|
|
189
|
+
/tip:/i,
|
|
190
|
+
];
|
|
191
|
+
return lessonIndicators.some(pattern => pattern.test(content));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check for semantic duplicates using embeddings
|
|
195
|
+
*/
|
|
196
|
+
async checkSemanticDuplicate(content) {
|
|
197
|
+
if (!this.db)
|
|
198
|
+
return false;
|
|
199
|
+
try {
|
|
200
|
+
const embeddingService = getEmbeddingService();
|
|
201
|
+
const newEmbedding = await embeddingService.embed(content);
|
|
202
|
+
// Get recent session memories for comparison
|
|
203
|
+
const stmt = this.db.prepare(`
|
|
204
|
+
SELECT content FROM session_memories
|
|
205
|
+
ORDER BY id DESC
|
|
206
|
+
LIMIT 50
|
|
207
|
+
`);
|
|
208
|
+
const existing = stmt.all();
|
|
209
|
+
for (const { content: existingContent } of existing) {
|
|
210
|
+
const existingEmbedding = await embeddingService.embed(existingContent);
|
|
211
|
+
const similarity = embeddingService.cosineSimilarity(newEmbedding, existingEmbedding);
|
|
212
|
+
if (similarity > this.config.similarityThreshold) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Fall back to text comparison
|
|
220
|
+
const normalizedNew = content.toLowerCase().trim();
|
|
221
|
+
const stmt = this.db.prepare(`
|
|
222
|
+
SELECT content FROM session_memories
|
|
223
|
+
WHERE LOWER(TRIM(content)) = ?
|
|
224
|
+
LIMIT 1
|
|
225
|
+
`);
|
|
226
|
+
const match = stmt.get(normalizedNew);
|
|
227
|
+
return !!match;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Store session memory
|
|
232
|
+
*/
|
|
233
|
+
async storeSessionMemory(content, type, importance) {
|
|
234
|
+
if (!this.db)
|
|
235
|
+
return;
|
|
236
|
+
const stmt = this.db.prepare(`
|
|
237
|
+
INSERT OR IGNORE INTO session_memories (session_id, timestamp, type, content, importance)
|
|
238
|
+
VALUES ('consolidation', ?, ?, ?, ?)
|
|
239
|
+
`);
|
|
240
|
+
stmt.run(new Date().toISOString(), type, content, importance);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Store lesson in long-term memory
|
|
244
|
+
*/
|
|
245
|
+
async storeLesson(content, timestamp) {
|
|
246
|
+
if (!this.db)
|
|
247
|
+
return;
|
|
248
|
+
const stmt = this.db.prepare(`
|
|
249
|
+
INSERT OR IGNORE INTO session_memories (session_id, timestamp, type, content, importance)
|
|
250
|
+
VALUES ('lessons', ?, 'lesson', ?, ?)
|
|
251
|
+
`);
|
|
252
|
+
stmt.run(timestamp, content, this.config.minImportanceForLongTerm);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Run decay on old memories
|
|
256
|
+
* Formula: effective_importance = importance × (0.95 ^ days_since_access)
|
|
257
|
+
*/
|
|
258
|
+
async runDecay() {
|
|
259
|
+
if (!this.db)
|
|
260
|
+
return 0;
|
|
261
|
+
try {
|
|
262
|
+
// SQLite doesn't have POW, so we do this in application code
|
|
263
|
+
const stmt = this.db.prepare(`
|
|
264
|
+
SELECT id, importance, timestamp
|
|
265
|
+
FROM session_memories
|
|
266
|
+
WHERE importance > 1
|
|
267
|
+
`);
|
|
268
|
+
const rows = stmt.all();
|
|
269
|
+
let updated = 0;
|
|
270
|
+
const now = Date.now();
|
|
271
|
+
const updateStmt = this.db.prepare(`
|
|
272
|
+
UPDATE session_memories
|
|
273
|
+
SET importance = ?
|
|
274
|
+
WHERE id = ?
|
|
275
|
+
`);
|
|
276
|
+
for (const row of rows) {
|
|
277
|
+
const daysSince = (now - new Date(row.timestamp).getTime()) / (1000 * 60 * 60 * 24);
|
|
278
|
+
const decayed = Math.round(row.importance * Math.pow(0.95, daysSince));
|
|
279
|
+
if (decayed !== row.importance && decayed >= 1) {
|
|
280
|
+
updateStmt.run(decayed, row.id);
|
|
281
|
+
updated++;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return updated;
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
return 0;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get consolidation stats
|
|
292
|
+
*/
|
|
293
|
+
getStats() {
|
|
294
|
+
if (!this.db) {
|
|
295
|
+
return {
|
|
296
|
+
totalMemories: 0,
|
|
297
|
+
totalSessionMemories: 0,
|
|
298
|
+
totalLessons: 0,
|
|
299
|
+
lastConsolidationId: this.lastConsolidationId,
|
|
300
|
+
uniqueHashes: this.contentHashes.size,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
const memoriesStmt = this.db.prepare('SELECT COUNT(*) as count FROM memories');
|
|
305
|
+
const sessionStmt = this.db.prepare('SELECT COUNT(*) as count FROM session_memories');
|
|
306
|
+
const lessonsStmt = this.db.prepare(`
|
|
307
|
+
SELECT COUNT(*) as count FROM session_memories WHERE type = 'lesson'
|
|
308
|
+
`);
|
|
309
|
+
const memories = memoriesStmt.get().count;
|
|
310
|
+
const session = sessionStmt.get().count;
|
|
311
|
+
const lessons = lessonsStmt.get().count;
|
|
312
|
+
return {
|
|
313
|
+
totalMemories: memories,
|
|
314
|
+
totalSessionMemories: session,
|
|
315
|
+
totalLessons: lessons,
|
|
316
|
+
lastConsolidationId: this.lastConsolidationId,
|
|
317
|
+
uniqueHashes: this.contentHashes.size,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return {
|
|
322
|
+
totalMemories: 0,
|
|
323
|
+
totalSessionMemories: 0,
|
|
324
|
+
totalLessons: 0,
|
|
325
|
+
lastConsolidationId: this.lastConsolidationId,
|
|
326
|
+
uniqueHashes: this.contentHashes.size,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Close database connection
|
|
332
|
+
*/
|
|
333
|
+
close() {
|
|
334
|
+
if (this.db) {
|
|
335
|
+
this.db.close();
|
|
336
|
+
this.db = null;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Singleton instance
|
|
341
|
+
let globalConsolidator = null;
|
|
342
|
+
export function getMemoryConsolidator(config) {
|
|
343
|
+
if (!globalConsolidator) {
|
|
344
|
+
globalConsolidator = new MemoryConsolidator(config);
|
|
345
|
+
}
|
|
346
|
+
return globalConsolidator;
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=memory-consolidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-consolidator.js","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speculative Cache for UAM Memory System
|
|
3
|
+
*
|
|
4
|
+
* Pre-computes likely next queries based on task patterns.
|
|
5
|
+
* Reduces latency by predicting and caching memory retrievals.
|
|
6
|
+
*/
|
|
7
|
+
export interface CacheEntry {
|
|
8
|
+
query: string;
|
|
9
|
+
result: unknown[];
|
|
10
|
+
embedding?: number[];
|
|
11
|
+
usageCount: number;
|
|
12
|
+
lastUsed: Date;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
predictedBy?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CacheConfig {
|
|
17
|
+
maxEntries: number;
|
|
18
|
+
ttlMs: number;
|
|
19
|
+
preWarmEnabled: boolean;
|
|
20
|
+
predictionDepth: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Speculative Memory Cache
|
|
24
|
+
*/
|
|
25
|
+
export declare class SpeculativeCache {
|
|
26
|
+
private config;
|
|
27
|
+
private cache;
|
|
28
|
+
private queryHistory;
|
|
29
|
+
private taskPatterns;
|
|
30
|
+
constructor(config?: Partial<CacheConfig>);
|
|
31
|
+
/**
|
|
32
|
+
* Get from cache with automatic staleness check
|
|
33
|
+
*/
|
|
34
|
+
get(query: string): CacheEntry | null;
|
|
35
|
+
/**
|
|
36
|
+
* Set cache entry
|
|
37
|
+
*/
|
|
38
|
+
set(query: string, result: unknown[], predictedBy?: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Record query for pattern analysis
|
|
41
|
+
*/
|
|
42
|
+
private recordQuery;
|
|
43
|
+
/**
|
|
44
|
+
* Detect task category from query
|
|
45
|
+
*/
|
|
46
|
+
private detectCategory;
|
|
47
|
+
/**
|
|
48
|
+
* Get predicted queries based on current context
|
|
49
|
+
*/
|
|
50
|
+
getPredictedQueries(currentQuery: string): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Analyze query sequences for patterns
|
|
53
|
+
*/
|
|
54
|
+
private analyzeQuerySequences;
|
|
55
|
+
/**
|
|
56
|
+
* Pre-warm cache with predicted queries
|
|
57
|
+
*/
|
|
58
|
+
preWarm(currentQuery: string, fetcher: (query: string) => Promise<unknown[]>): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Evict least recently used entry
|
|
61
|
+
*/
|
|
62
|
+
private evictLRU;
|
|
63
|
+
/**
|
|
64
|
+
* Normalize query for cache key
|
|
65
|
+
*/
|
|
66
|
+
private normalizeQuery;
|
|
67
|
+
/**
|
|
68
|
+
* Get cache statistics
|
|
69
|
+
*/
|
|
70
|
+
getStats(): {
|
|
71
|
+
size: number;
|
|
72
|
+
hitRate: number;
|
|
73
|
+
avgUsage: number;
|
|
74
|
+
topPatterns: Array<{
|
|
75
|
+
category: string;
|
|
76
|
+
count: number;
|
|
77
|
+
}>;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Clear expired entries
|
|
81
|
+
*/
|
|
82
|
+
cleanup(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Clear all cache
|
|
85
|
+
*/
|
|
86
|
+
clear(): void;
|
|
87
|
+
}
|
|
88
|
+
export declare function getSpeculativeCache(config?: Partial<CacheConfig>): SpeculativeCache;
|
|
89
|
+
//# sourceMappingURL=speculative-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculative-cache.d.ts","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAuCD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAkC;gBAE1C,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAI7C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoBrC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBjE;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBnD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACG,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC;IAoBhB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzD;IAkBD;;OAEG;IACH,OAAO,IAAI,MAAM;IAejB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAKnF"}
|