universal-agent-memory 0.7.0 → 0.7.2
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/improved-benchmark.d.ts.map +1 -1
- package/dist/benchmarks/improved-benchmark.js +3 -1
- package/dist/benchmarks/improved-benchmark.js.map +1 -1
- package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -1
- package/dist/benchmarks/multi-turn-agent.js +6 -2
- package/dist/benchmarks/multi-turn-agent.js.map +1 -1
- package/dist/bin/cli.js +4 -1
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/update.d.ts +3 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +155 -11
- package/dist/cli/update.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/backends/factory.d.ts.map +1 -1
- package/dist/memory/backends/factory.js +1 -0
- package/dist/memory/backends/factory.js.map +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts +14 -1
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
- package/dist/memory/backends/qdrant-cloud.js +59 -4
- package/dist/memory/backends/qdrant-cloud.js.map +1 -1
- package/dist/memory/dynamic-retrieval.d.ts +62 -1
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
- package/dist/memory/dynamic-retrieval.js +154 -32
- package/dist/memory/dynamic-retrieval.js.map +1 -1
- package/dist/memory/embeddings.d.ts +25 -2
- package/dist/memory/embeddings.d.ts.map +1 -1
- package/dist/memory/embeddings.js +72 -2
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/memory-consolidator.d.ts +36 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -1
- package/dist/memory/memory-consolidator.js +166 -0
- package/dist/memory/memory-consolidator.js.map +1 -1
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +420 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +344 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +3 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -1
- package/dist/memory/speculative-cache.js +2 -0
- package/dist/memory/speculative-cache.js.map +1 -1
- package/dist/utils/dijkstra.d.ts +17 -0
- package/dist/utils/dijkstra.d.ts.map +1 -0
- package/dist/utils/dijkstra.js +91 -0
- package/dist/utils/dijkstra.js.map +1 -0
- package/dist/utils/validate-json.d.ts +3 -4
- package/dist/utils/validate-json.d.ts.map +1 -1
- package/dist/utils/validate-json.js +31 -31
- package/dist/utils/validate-json.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Compression Module for UAM
|
|
3
|
+
*
|
|
4
|
+
* Implements SimpleMem-style semantic structured compression:
|
|
5
|
+
* 1. Entropy-aware filtering to distill raw content into atomic facts
|
|
6
|
+
* 2. Coreference normalization (entity resolution)
|
|
7
|
+
* 3. Multi-view indexing for efficient retrieval
|
|
8
|
+
*
|
|
9
|
+
* Based on SimpleMem research (2026): 30x token reduction while maintaining F1 scores
|
|
10
|
+
*/
|
|
11
|
+
import { estimateTokens } from './context-compressor.js';
|
|
12
|
+
const DEFAULT_CONFIG = {
|
|
13
|
+
maxFactsPerUnit: 10,
|
|
14
|
+
minActionability: 0.3,
|
|
15
|
+
minEntropy: 0.3, // Minimum entropy threshold
|
|
16
|
+
deduplicationThreshold: 0.85,
|
|
17
|
+
preserveHighImportance: true,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Calculate Shannon entropy of text (normalized 0-1)
|
|
21
|
+
* Higher entropy = more information content, less repetition
|
|
22
|
+
* Based on SimpleMem's entropy-aware filtering
|
|
23
|
+
*/
|
|
24
|
+
export function calculateEntropy(text) {
|
|
25
|
+
const words = text.toLowerCase().split(/\s+/).filter(w => w.length > 1);
|
|
26
|
+
if (words.length === 0)
|
|
27
|
+
return 0;
|
|
28
|
+
// Count word frequencies
|
|
29
|
+
const freq = new Map();
|
|
30
|
+
for (const word of words) {
|
|
31
|
+
freq.set(word, (freq.get(word) || 0) + 1);
|
|
32
|
+
}
|
|
33
|
+
// Calculate Shannon entropy
|
|
34
|
+
let entropy = 0;
|
|
35
|
+
const total = words.length;
|
|
36
|
+
for (const count of freq.values()) {
|
|
37
|
+
const p = count / total;
|
|
38
|
+
entropy -= p * Math.log2(p);
|
|
39
|
+
}
|
|
40
|
+
// Normalize to 0-1 range (max entropy = log2(unique_words))
|
|
41
|
+
const maxEntropy = Math.log2(freq.size) || 1;
|
|
42
|
+
return entropy / maxEntropy;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate information density (entropy per token)
|
|
46
|
+
* Helps identify high-value content worth preserving
|
|
47
|
+
*/
|
|
48
|
+
export function calculateInformationDensity(text) {
|
|
49
|
+
const entropy = calculateEntropy(text);
|
|
50
|
+
// Weight by unique word ratio
|
|
51
|
+
const words = text.toLowerCase().split(/\s+/).filter(w => w.length > 1);
|
|
52
|
+
const uniqueRatio = new Set(words).size / (words.length || 1);
|
|
53
|
+
// Combine entropy and uniqueness
|
|
54
|
+
return (entropy * 0.6 + uniqueRatio * 0.4);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract atomic facts from raw content
|
|
58
|
+
* Distills verbose content into minimal, self-contained units
|
|
59
|
+
*/
|
|
60
|
+
export function extractAtomicFacts(content, minEntropy = 0.3) {
|
|
61
|
+
const facts = [];
|
|
62
|
+
// Split into sentences
|
|
63
|
+
const sentences = content
|
|
64
|
+
.split(/(?<=[.!?])\s+/)
|
|
65
|
+
.map(s => s.trim())
|
|
66
|
+
.filter(s => s.length > 10);
|
|
67
|
+
for (const sentence of sentences) {
|
|
68
|
+
const normalized = sentence.toLowerCase();
|
|
69
|
+
// Skip low-entropy (repetitive) content
|
|
70
|
+
const entropy = calculateEntropy(sentence);
|
|
71
|
+
if (entropy < minEntropy && sentence.length > 50) {
|
|
72
|
+
continue; // Skip long repetitive sentences
|
|
73
|
+
}
|
|
74
|
+
// Determine fact type
|
|
75
|
+
let type = 'fact';
|
|
76
|
+
if (/learned|realized|discovered|found that/i.test(sentence)) {
|
|
77
|
+
type = 'lesson';
|
|
78
|
+
}
|
|
79
|
+
else if (/decided|chose|selected|went with/i.test(sentence)) {
|
|
80
|
+
type = 'decision';
|
|
81
|
+
}
|
|
82
|
+
else if (/pattern|always|usually|typically/i.test(sentence)) {
|
|
83
|
+
type = 'pattern';
|
|
84
|
+
}
|
|
85
|
+
else if (/careful|watch out|gotcha|avoid|don't|never/i.test(sentence)) {
|
|
86
|
+
type = 'gotcha';
|
|
87
|
+
}
|
|
88
|
+
// Calculate actionability (boost by entropy for high-info content)
|
|
89
|
+
const baseActionability = calculateActionability(sentence);
|
|
90
|
+
const actionability = Math.min(1, baseActionability + (entropy * 0.1));
|
|
91
|
+
// Determine temporality
|
|
92
|
+
const temporality = detectTemporality(sentence);
|
|
93
|
+
// Extract entities
|
|
94
|
+
const entities = extractEntities(sentence);
|
|
95
|
+
// Skip low-value sentences
|
|
96
|
+
if (isFillerSentence(normalized))
|
|
97
|
+
continue;
|
|
98
|
+
facts.push({
|
|
99
|
+
content: compressSentence(sentence),
|
|
100
|
+
entities,
|
|
101
|
+
actionability,
|
|
102
|
+
temporality,
|
|
103
|
+
type,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return facts;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Calculate actionability score (0-1)
|
|
110
|
+
* Higher = more directly usable information
|
|
111
|
+
*/
|
|
112
|
+
function calculateActionability(sentence) {
|
|
113
|
+
let score = 0.5;
|
|
114
|
+
// Boost for imperative/actionable language
|
|
115
|
+
if (/^(use|run|execute|call|apply|implement|add|remove|fix|change)/i.test(sentence)) {
|
|
116
|
+
score += 0.3;
|
|
117
|
+
}
|
|
118
|
+
// Boost for code/technical specifics
|
|
119
|
+
if (/`[^`]+`|"[^"]+"|'[^']+'/.test(sentence)) {
|
|
120
|
+
score += 0.2;
|
|
121
|
+
}
|
|
122
|
+
// Boost for concrete commands/paths
|
|
123
|
+
if (/\.(ts|js|py|sh|json|yaml|md)\b|\/[\w/]+/.test(sentence)) {
|
|
124
|
+
score += 0.15;
|
|
125
|
+
}
|
|
126
|
+
// Penalty for vague language
|
|
127
|
+
if (/might|maybe|perhaps|possibly|somewhat|kind of/i.test(sentence)) {
|
|
128
|
+
score -= 0.2;
|
|
129
|
+
}
|
|
130
|
+
// Penalty for meta-commentary
|
|
131
|
+
if (/I think|I believe|in my opinion|it seems/i.test(sentence)) {
|
|
132
|
+
score -= 0.15;
|
|
133
|
+
}
|
|
134
|
+
return Math.max(0, Math.min(1, score));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Detect temporal relevance
|
|
138
|
+
*/
|
|
139
|
+
function detectTemporality(sentence) {
|
|
140
|
+
if (/will|going to|should|must|need to|plan to/i.test(sentence)) {
|
|
141
|
+
return 'future';
|
|
142
|
+
}
|
|
143
|
+
if (/was|were|did|had|previously|earlier|before/i.test(sentence)) {
|
|
144
|
+
return 'past';
|
|
145
|
+
}
|
|
146
|
+
if (/is|are|currently|now|today/i.test(sentence)) {
|
|
147
|
+
return 'present';
|
|
148
|
+
}
|
|
149
|
+
return 'timeless';
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Extract named entities from sentence
|
|
153
|
+
*/
|
|
154
|
+
function extractEntities(sentence) {
|
|
155
|
+
const entities = [];
|
|
156
|
+
// File paths
|
|
157
|
+
const paths = sentence.match(/[\w./\\-]+\.(ts|js|py|json|yaml|yml|md|sh|sql)/gi);
|
|
158
|
+
if (paths)
|
|
159
|
+
entities.push(...paths);
|
|
160
|
+
// Function/class names (camelCase or PascalCase)
|
|
161
|
+
const names = sentence.match(/\b[a-z][a-zA-Z0-9]*(?:[A-Z][a-zA-Z0-9]*)+\b/g);
|
|
162
|
+
if (names)
|
|
163
|
+
entities.push(...names);
|
|
164
|
+
// Commands (npm, git, uam, etc)
|
|
165
|
+
const commands = sentence.match(/\b(npm|git|uam|docker|curl|pip|python|node)\s+\w+/gi);
|
|
166
|
+
if (commands)
|
|
167
|
+
entities.push(...commands.map(c => c.trim()));
|
|
168
|
+
// Quoted strings
|
|
169
|
+
const quoted = sentence.match(/`([^`]+)`/g);
|
|
170
|
+
if (quoted)
|
|
171
|
+
entities.push(...quoted.map(q => q.replace(/`/g, '')));
|
|
172
|
+
return [...new Set(entities)];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Detect filler sentences that add no value
|
|
176
|
+
*/
|
|
177
|
+
function isFillerSentence(sentence) {
|
|
178
|
+
const fillerPatterns = [
|
|
179
|
+
/^(let me|i will|i'll|we can|we should|okay|alright|sure)/i,
|
|
180
|
+
/^(as mentioned|as noted|as stated|as discussed)/i,
|
|
181
|
+
/^(this is|that is|here is|there is) (a|the|an)?\s*(good|great|nice)/i,
|
|
182
|
+
/^(in conclusion|to summarize|in summary|overall)/i,
|
|
183
|
+
/^(i hope|hope this|hopefully)/i,
|
|
184
|
+
/^(thanks|thank you|please)/i,
|
|
185
|
+
];
|
|
186
|
+
return fillerPatterns.some(p => p.test(sentence));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Compress a single sentence while preserving meaning
|
|
190
|
+
*/
|
|
191
|
+
function compressSentence(sentence) {
|
|
192
|
+
let compressed = sentence;
|
|
193
|
+
// Remove filler phrases
|
|
194
|
+
const fillerPhrases = [
|
|
195
|
+
/\b(basically|essentially|actually|really|very|quite|somewhat|rather)\b/gi,
|
|
196
|
+
/\b(in order to)\b/gi,
|
|
197
|
+
/\b(it is worth noting that|it should be noted that)\b/gi,
|
|
198
|
+
/\b(as a matter of fact|in fact)\b/gi,
|
|
199
|
+
/\b(the fact that)\b/gi,
|
|
200
|
+
/\b(in this case|in that case)\b/gi,
|
|
201
|
+
/\b(please note that|note that)\b/gi,
|
|
202
|
+
];
|
|
203
|
+
for (const pattern of fillerPhrases) {
|
|
204
|
+
compressed = compressed.replace(pattern, '');
|
|
205
|
+
}
|
|
206
|
+
// Clean up whitespace
|
|
207
|
+
compressed = compressed.replace(/\s+/g, ' ').trim();
|
|
208
|
+
return compressed;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Create a semantic unit from multiple memories
|
|
212
|
+
*/
|
|
213
|
+
export function createSemanticUnit(memories, config = {}) {
|
|
214
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
215
|
+
// Extract facts from all memories
|
|
216
|
+
const allFacts = [];
|
|
217
|
+
let sourceTokens = 0;
|
|
218
|
+
for (const mem of memories) {
|
|
219
|
+
sourceTokens += estimateTokens(mem.content);
|
|
220
|
+
const facts = extractAtomicFacts(mem.content);
|
|
221
|
+
// Filter by actionability
|
|
222
|
+
const filtered = facts.filter(f => f.actionability >= cfg.minActionability ||
|
|
223
|
+
(cfg.preserveHighImportance && (mem.importance || 0) >= 7));
|
|
224
|
+
allFacts.push(...filtered);
|
|
225
|
+
}
|
|
226
|
+
// Deduplicate similar facts
|
|
227
|
+
const uniqueFacts = deduplicateFacts(allFacts, cfg.deduplicationThreshold);
|
|
228
|
+
// Sort by actionability and take top N
|
|
229
|
+
uniqueFacts.sort((a, b) => b.actionability - a.actionability);
|
|
230
|
+
const topFacts = uniqueFacts.slice(0, cfg.maxFactsPerUnit);
|
|
231
|
+
// Collect all entities
|
|
232
|
+
const allEntities = new Set();
|
|
233
|
+
for (const fact of topFacts) {
|
|
234
|
+
fact.entities.forEach(e => allEntities.add(e));
|
|
235
|
+
}
|
|
236
|
+
// Collect temporal markers
|
|
237
|
+
const temporalMarkers = [...new Set(topFacts
|
|
238
|
+
.filter(f => f.temporality !== 'timeless')
|
|
239
|
+
.map(f => f.temporality))];
|
|
240
|
+
// Calculate compressed size
|
|
241
|
+
const compressedContent = topFacts.map(f => f.content).join(' ');
|
|
242
|
+
const compressedTokens = estimateTokens(compressedContent);
|
|
243
|
+
return {
|
|
244
|
+
id: `su-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
245
|
+
atomicFacts: topFacts,
|
|
246
|
+
entities: [...allEntities],
|
|
247
|
+
temporalMarkers,
|
|
248
|
+
sourceTokens,
|
|
249
|
+
compressedTokens,
|
|
250
|
+
compressionRatio: sourceTokens / Math.max(1, compressedTokens),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Deduplicate facts by content similarity
|
|
255
|
+
*/
|
|
256
|
+
function deduplicateFacts(facts, threshold) {
|
|
257
|
+
const unique = [];
|
|
258
|
+
for (const fact of facts) {
|
|
259
|
+
const isDuplicate = unique.some(existing => {
|
|
260
|
+
const similarity = jaccardSimilarity(fact.content.toLowerCase(), existing.content.toLowerCase());
|
|
261
|
+
return similarity > threshold;
|
|
262
|
+
});
|
|
263
|
+
if (!isDuplicate) {
|
|
264
|
+
unique.push(fact);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return unique;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Jaccard similarity between two strings
|
|
271
|
+
*/
|
|
272
|
+
function jaccardSimilarity(a, b) {
|
|
273
|
+
const setA = new Set(a.split(/\s+/));
|
|
274
|
+
const setB = new Set(b.split(/\s+/));
|
|
275
|
+
const intersection = new Set([...setA].filter(x => setB.has(x)));
|
|
276
|
+
const union = new Set([...setA, ...setB]);
|
|
277
|
+
return intersection.size / (union.size || 1);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Serialize semantic unit for storage/display
|
|
281
|
+
*/
|
|
282
|
+
export function serializeSemanticUnit(unit) {
|
|
283
|
+
const sections = [];
|
|
284
|
+
// Group facts by type
|
|
285
|
+
const byType = {};
|
|
286
|
+
for (const fact of unit.atomicFacts) {
|
|
287
|
+
if (!byType[fact.type])
|
|
288
|
+
byType[fact.type] = [];
|
|
289
|
+
byType[fact.type].push(fact);
|
|
290
|
+
}
|
|
291
|
+
// Format each section
|
|
292
|
+
const typeOrder = ['gotcha', 'lesson', 'decision', 'pattern', 'fact'];
|
|
293
|
+
for (const type of typeOrder) {
|
|
294
|
+
if (byType[type] && byType[type].length > 0) {
|
|
295
|
+
const emoji = type === 'gotcha' ? '⚠️' :
|
|
296
|
+
type === 'lesson' ? '💡' :
|
|
297
|
+
type === 'decision' ? '✓' :
|
|
298
|
+
type === 'pattern' ? '🔄' : '→';
|
|
299
|
+
sections.push(byType[type].map(f => `${emoji} ${f.content}`).join('\n'));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Add entities if present
|
|
303
|
+
if (unit.entities.length > 0) {
|
|
304
|
+
sections.push(`[Entities: ${unit.entities.slice(0, 10).join(', ')}]`);
|
|
305
|
+
}
|
|
306
|
+
return sections.join('\n');
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Compress batch of memories into semantic units
|
|
310
|
+
* Main entry point for semantic compression
|
|
311
|
+
*/
|
|
312
|
+
export function compressToSemanticUnits(memories, config = {}) {
|
|
313
|
+
// Group memories by type for better compression
|
|
314
|
+
const byType = {};
|
|
315
|
+
for (const mem of memories) {
|
|
316
|
+
const type = mem.type || 'general';
|
|
317
|
+
if (!byType[type])
|
|
318
|
+
byType[type] = [];
|
|
319
|
+
byType[type].push(mem);
|
|
320
|
+
}
|
|
321
|
+
const units = [];
|
|
322
|
+
let totalSourceTokens = 0;
|
|
323
|
+
let totalCompressedTokens = 0;
|
|
324
|
+
for (const [_type, typeMemories] of Object.entries(byType)) {
|
|
325
|
+
// Chunk into groups of 5-10 for manageable units
|
|
326
|
+
const chunkSize = 7;
|
|
327
|
+
for (let i = 0; i < typeMemories.length; i += chunkSize) {
|
|
328
|
+
const chunk = typeMemories.slice(i, i + chunkSize);
|
|
329
|
+
const unit = createSemanticUnit(chunk, config);
|
|
330
|
+
units.push(unit);
|
|
331
|
+
totalSourceTokens += unit.sourceTokens;
|
|
332
|
+
totalCompressedTokens += unit.compressedTokens;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const serialized = units.map(u => serializeSemanticUnit(u)).join('\n\n---\n\n');
|
|
336
|
+
return {
|
|
337
|
+
units,
|
|
338
|
+
totalSourceTokens,
|
|
339
|
+
totalCompressedTokens,
|
|
340
|
+
overallRatio: totalSourceTokens / Math.max(1, totalCompressedTokens),
|
|
341
|
+
serialized,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=semantic-compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-compression.js","sourceRoot":"","sources":["../../src/memory/semantic-compression.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pre-computes likely next queries based on task patterns.
|
|
5
5
|
* Reduces latency by predicting and caching memory retrievals.
|
|
6
|
+
*
|
|
7
|
+
* Enhanced with task classifier integration for smarter prefetching
|
|
6
8
|
*/
|
|
7
9
|
export interface CacheEntry {
|
|
8
10
|
query: string;
|
|
@@ -12,6 +14,7 @@ export interface CacheEntry {
|
|
|
12
14
|
lastUsed: Date;
|
|
13
15
|
createdAt: Date;
|
|
14
16
|
predictedBy?: string;
|
|
17
|
+
taskCategory?: string;
|
|
15
18
|
}
|
|
16
19
|
export interface CacheConfig {
|
|
17
20
|
maxEntries: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speculative-cache.d.ts","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"speculative-cache.d.ts","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,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;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speculative-cache.js","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"speculative-cache.js","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result type for shortest path calculation
|
|
3
|
+
*/
|
|
4
|
+
export interface ShortestPathResult {
|
|
5
|
+
path: string[];
|
|
6
|
+
distance: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Finds the shortest path between two nodes in a weighted graph using Dijkstra's algorithm.
|
|
10
|
+
*
|
|
11
|
+
* @param graph - Weighted graph as adjacency list Map<node, Map<neighbor, weight>>
|
|
12
|
+
* @param start - Starting node
|
|
13
|
+
* @param end - Target node
|
|
14
|
+
* @returns ShortestPathResult with path and distance, or null if no path exists
|
|
15
|
+
*/
|
|
16
|
+
export declare function findShortestPath(graph: Map<string, Map<string, number>>, start: string, end: string): ShortestPathResult | null;
|
|
17
|
+
//# sourceMappingURL=dijkstra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dijkstra.d.ts","sourceRoot":"","sources":["../../src/utils/dijkstra.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,kBAAkB,GAAG,IAAI,CAgG3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the shortest path between two nodes in a weighted graph using Dijkstra's algorithm.
|
|
3
|
+
*
|
|
4
|
+
* @param graph - Weighted graph as adjacency list Map<node, Map<neighbor, weight>>
|
|
5
|
+
* @param start - Starting node
|
|
6
|
+
* @param end - Target node
|
|
7
|
+
* @returns ShortestPathResult with path and distance, or null if no path exists
|
|
8
|
+
*/
|
|
9
|
+
export function findShortestPath(graph, start, end) {
|
|
10
|
+
// Handle edge case: start equals end
|
|
11
|
+
if (start === end) {
|
|
12
|
+
// Check if node exists in graph
|
|
13
|
+
if (!graph.has(start)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return { path: [start], distance: 0 };
|
|
17
|
+
}
|
|
18
|
+
// Check if both nodes exist in the graph
|
|
19
|
+
if (!graph.has(start) || !graph.has(end)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
// Distance from start to each node
|
|
23
|
+
const distances = new Map();
|
|
24
|
+
// Previous node in optimal path
|
|
25
|
+
const previous = new Map();
|
|
26
|
+
// Unvisited nodes
|
|
27
|
+
const unvisited = new Set();
|
|
28
|
+
// Initialize distances
|
|
29
|
+
for (const node of graph.keys()) {
|
|
30
|
+
distances.set(node, node === start ? 0 : Infinity);
|
|
31
|
+
previous.set(node, null);
|
|
32
|
+
unvisited.add(node);
|
|
33
|
+
}
|
|
34
|
+
while (unvisited.size > 0) {
|
|
35
|
+
// Find unvisited node with smallest distance
|
|
36
|
+
let current = null;
|
|
37
|
+
let smallestDistance = Infinity;
|
|
38
|
+
for (const node of unvisited) {
|
|
39
|
+
const dist = distances.get(node) ?? Infinity;
|
|
40
|
+
if (dist < smallestDistance) {
|
|
41
|
+
smallestDistance = dist;
|
|
42
|
+
current = node;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// No reachable nodes left
|
|
46
|
+
if (current === null || smallestDistance === Infinity) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
// Found the end node
|
|
50
|
+
if (current === end) {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
// Remove current from unvisited
|
|
54
|
+
unvisited.delete(current);
|
|
55
|
+
// Update distances to neighbors
|
|
56
|
+
const neighbors = graph.get(current);
|
|
57
|
+
if (neighbors) {
|
|
58
|
+
for (const [neighbor, weight] of neighbors) {
|
|
59
|
+
if (unvisited.has(neighbor)) {
|
|
60
|
+
const newDistance = smallestDistance + weight;
|
|
61
|
+
const currentDistance = distances.get(neighbor) ?? Infinity;
|
|
62
|
+
if (newDistance < currentDistance) {
|
|
63
|
+
distances.set(neighbor, newDistance);
|
|
64
|
+
previous.set(neighbor, current);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check if end node was reached
|
|
71
|
+
const endDistance = distances.get(end);
|
|
72
|
+
if (endDistance === undefined || endDistance === Infinity) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
// Reconstruct path
|
|
76
|
+
const path = [];
|
|
77
|
+
let current = end;
|
|
78
|
+
while (current !== null) {
|
|
79
|
+
path.unshift(current);
|
|
80
|
+
current = previous.get(current) ?? null;
|
|
81
|
+
}
|
|
82
|
+
// Verify path starts with start node
|
|
83
|
+
if (path[0] !== start) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
path,
|
|
88
|
+
distance: endDistance,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=dijkstra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dijkstra.js","sourceRoot":"","sources":["../../src/utils/dijkstra.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,7 @@ export declare class AppError extends Error {
|
|
|
25
25
|
*
|
|
26
26
|
* @param input - The string to validate and parse as JSON
|
|
27
27
|
* @returns The parsed JSON value (object, array, string, number, boolean, or null)
|
|
28
|
-
* @throws AppError with code '
|
|
29
|
-
* @throws AppError with code 'JSON_PARSE_ERROR' if the string is not valid JSON
|
|
28
|
+
* @throws AppError with code 'INVALID_JSON' if the string is not valid JSON
|
|
30
29
|
*
|
|
31
30
|
* @example
|
|
32
31
|
* ```typescript
|
|
@@ -43,10 +42,10 @@ export declare class AppError extends Error {
|
|
|
43
42
|
* validateAndParseJSON('{invalid}');
|
|
44
43
|
* } catch (error) {
|
|
45
44
|
* if (error instanceof AppError) {
|
|
46
|
-
* console.log(error.code); // '
|
|
45
|
+
* console.log(error.code); // 'INVALID_JSON'
|
|
47
46
|
* }
|
|
48
47
|
* }
|
|
49
48
|
* ```
|
|
50
49
|
*/
|
|
51
|
-
export declare function validateAndParseJSON(input: string):
|
|
50
|
+
export declare function validateAndParseJSON(input: string): unknown;
|
|
52
51
|
//# sourceMappingURL=validate-json.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-json.d.ts","sourceRoot":"","sources":["../../src/utils/validate-json.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C;;;;;;OAMG;gBAED,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYpC;
|
|
1
|
+
{"version":3,"file":"validate-json.d.ts","sourceRoot":"","sources":["../../src/utils/validate-json.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C;;;;;;OAMG;gBAED,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYpC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAmC3D"}
|