universal-agent-memory 1.0.23 → 1.0.25
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/mcp-router/config/parser.d.ts.map +1 -1
- package/dist/mcp-router/config/parser.js +31 -0
- package/dist/mcp-router/config/parser.js.map +1 -1
- package/dist/mcp-router/types.d.ts +1 -0
- package/dist/mcp-router/types.d.ts.map +1 -1
- package/dist/memory/adaptive-context.d.ts +1 -0
- package/dist/memory/adaptive-context.d.ts.map +1 -1
- package/dist/memory/adaptive-context.js +48 -6
- package/dist/memory/adaptive-context.js.map +1 -1
- package/dist/memory/context-compressor.js +1 -1
- package/dist/memory/context-compressor.js.map +1 -1
- package/dist/memory/dynamic-retrieval.d.ts +3 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
- package/dist/memory/dynamic-retrieval.js +36 -3
- package/dist/memory/dynamic-retrieval.js.map +1 -1
- package/dist/memory/model-router.d.ts +74 -0
- package/dist/memory/model-router.d.ts.map +1 -0
- package/dist/memory/model-router.js +205 -0
- package/dist/memory/model-router.js.map +1 -0
- package/dist/memory/short-term/schema.d.ts.map +1 -1
- package/dist/memory/short-term/schema.js +36 -0
- package/dist/memory/short-term/schema.js.map +1 -1
- package/dist/memory/short-term/sqlite.d.ts +2 -0
- package/dist/memory/short-term/sqlite.d.ts.map +1 -1
- package/dist/memory/short-term/sqlite.js +77 -1
- package/dist/memory/short-term/sqlite.js.map +1 -1
- package/dist/memory/terminal-bench-knowledge.d.ts +33 -0
- package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
- package/dist/memory/terminal-bench-knowledge.js +198 -0
- package/dist/memory/terminal-bench-knowledge.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Routing Intelligence for UAM
|
|
3
|
+
*
|
|
4
|
+
* Routes tasks to the optimal model based on:
|
|
5
|
+
* - Task classification and difficulty
|
|
6
|
+
* - Model capability fingerprints (benchmarked data)
|
|
7
|
+
* - Latency/accuracy/cost tradeoffs
|
|
8
|
+
* - Fallback chains for resilience
|
|
9
|
+
*
|
|
10
|
+
* Based on BENCHMARK_ANALYSIS.md and MODEL_BENCHMARK_RESULTS.md data.
|
|
11
|
+
*/
|
|
12
|
+
import { classifyTask } from './task-classifier.js';
|
|
13
|
+
const DEFAULT_CONFIG = {
|
|
14
|
+
preferLatency: false,
|
|
15
|
+
preferAccuracy: true,
|
|
16
|
+
maxCostPerTask: 0.05,
|
|
17
|
+
maxLatencyMs: 120000,
|
|
18
|
+
availableModels: ['glm-4.7', 'gpt-5.2', 'claude-opus-4.5', 'gpt-5.2-codex'],
|
|
19
|
+
};
|
|
20
|
+
const MODEL_FINGERPRINTS = {
|
|
21
|
+
'glm-4.7': {
|
|
22
|
+
id: 'glm-4.7',
|
|
23
|
+
strengths: ['speed', 'simple-code', 'patterns', 'typescript', 'bug-detection'],
|
|
24
|
+
weaknesses: ['complex-algorithms', 'long-context', 'multi-step-code', 'context-awareness'],
|
|
25
|
+
avgLatencyMs: 11373,
|
|
26
|
+
successRate: 0.625,
|
|
27
|
+
costPerTask: 0.001,
|
|
28
|
+
maxComplexity: 'medium',
|
|
29
|
+
bestCategories: ['coding', 'testing', 'debugging'],
|
|
30
|
+
},
|
|
31
|
+
'gpt-5.2': {
|
|
32
|
+
id: 'gpt-5.2',
|
|
33
|
+
strengths: ['balance', 'consistency', 'general-purpose', 'algorithm', 'multi-step'],
|
|
34
|
+
weaknesses: ['refactoring', 'latency-sensitive'],
|
|
35
|
+
avgLatencyMs: 21286,
|
|
36
|
+
successRate: 0.875,
|
|
37
|
+
costPerTask: 0.005,
|
|
38
|
+
maxComplexity: 'hard',
|
|
39
|
+
bestCategories: ['coding', 'security', 'file-ops', 'debugging'],
|
|
40
|
+
},
|
|
41
|
+
'claude-opus-4.5': {
|
|
42
|
+
id: 'claude-opus-4.5',
|
|
43
|
+
strengths: ['accuracy', 'complex-reasoning', 'edge-cases', 'error-handling', 'refactoring'],
|
|
44
|
+
weaknesses: ['latency', 'cost'],
|
|
45
|
+
avgLatencyMs: 26359,
|
|
46
|
+
successRate: 0.875,
|
|
47
|
+
costPerTask: 0.02,
|
|
48
|
+
maxComplexity: 'hard',
|
|
49
|
+
bestCategories: ['security', 'coding', 'sysadmin', 'debugging'],
|
|
50
|
+
},
|
|
51
|
+
'gpt-5.2-codex': {
|
|
52
|
+
id: 'gpt-5.2-codex',
|
|
53
|
+
strengths: ['code-specific', 'syntax-accuracy', 'context-awareness', 'all-difficulties'],
|
|
54
|
+
weaknesses: ['latency', 'cost', 'non-code-tasks'],
|
|
55
|
+
avgLatencyMs: 102399,
|
|
56
|
+
successRate: 1.0,
|
|
57
|
+
costPerTask: 0.01,
|
|
58
|
+
maxComplexity: 'hard',
|
|
59
|
+
bestCategories: ['coding', 'testing'],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const COMPLEXITY_RANK = { easy: 1, medium: 2, hard: 3 };
|
|
63
|
+
/**
|
|
64
|
+
* Failure handlers for model-specific known issues
|
|
65
|
+
*/
|
|
66
|
+
const FAILURE_HANDLERS = {
|
|
67
|
+
'gpt-5.2-codex:permission_denied': {
|
|
68
|
+
action: 'add_context',
|
|
69
|
+
context: 'Do not attempt file operations. Return code only.',
|
|
70
|
+
fallbackModel: 'gpt-5.2',
|
|
71
|
+
},
|
|
72
|
+
'glm-4.7:timeout': {
|
|
73
|
+
action: 'reduce_context',
|
|
74
|
+
fallbackModel: 'gpt-5.2',
|
|
75
|
+
},
|
|
76
|
+
'glm-4.7:context_overflow': {
|
|
77
|
+
action: 'reduce_context',
|
|
78
|
+
fallbackModel: 'gpt-5.2',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Score a model for a given task
|
|
83
|
+
*/
|
|
84
|
+
function scoreModel(model, classification, difficulty, config) {
|
|
85
|
+
let score = 0;
|
|
86
|
+
// Category match bonus
|
|
87
|
+
if (model.bestCategories.includes(classification.category)) {
|
|
88
|
+
score += 30;
|
|
89
|
+
}
|
|
90
|
+
// Complexity match
|
|
91
|
+
if (COMPLEXITY_RANK[model.maxComplexity] >= COMPLEXITY_RANK[difficulty]) {
|
|
92
|
+
score += 20;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
score -= 50; // Penalty for difficulty exceeding capability
|
|
96
|
+
}
|
|
97
|
+
// Success rate (0-25 points)
|
|
98
|
+
score += model.successRate * 25;
|
|
99
|
+
// Latency preference (0-15 points)
|
|
100
|
+
if (config.preferLatency) {
|
|
101
|
+
const latencyScore = Math.max(0, 1 - (model.avgLatencyMs / 120000));
|
|
102
|
+
score += latencyScore * 15;
|
|
103
|
+
}
|
|
104
|
+
// Accuracy preference bonus
|
|
105
|
+
if (config.preferAccuracy) {
|
|
106
|
+
score += model.successRate * 10;
|
|
107
|
+
}
|
|
108
|
+
// Cost constraint
|
|
109
|
+
if (model.costPerTask > config.maxCostPerTask) {
|
|
110
|
+
score -= 20;
|
|
111
|
+
}
|
|
112
|
+
// Latency constraint
|
|
113
|
+
if (model.avgLatencyMs > config.maxLatencyMs) {
|
|
114
|
+
score -= 30;
|
|
115
|
+
}
|
|
116
|
+
// Keyword match with model strengths
|
|
117
|
+
const taskKeywords = classification.keywords.map(k => k.toLowerCase());
|
|
118
|
+
for (const strength of model.strengths) {
|
|
119
|
+
if (taskKeywords.some(kw => strength.includes(kw) || kw.includes(strength))) {
|
|
120
|
+
score += 5;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return score;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Route a task to the best model
|
|
127
|
+
*/
|
|
128
|
+
export function routeTask(instruction, difficulty = 'medium', config = {}) {
|
|
129
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
130
|
+
const classification = classifyTask(instruction);
|
|
131
|
+
// Score all available models
|
|
132
|
+
const scored = cfg.availableModels
|
|
133
|
+
.filter(id => MODEL_FINGERPRINTS[id])
|
|
134
|
+
.map(id => ({
|
|
135
|
+
id,
|
|
136
|
+
fingerprint: MODEL_FINGERPRINTS[id],
|
|
137
|
+
score: scoreModel(MODEL_FINGERPRINTS[id], classification, difficulty, cfg),
|
|
138
|
+
}))
|
|
139
|
+
.sort((a, b) => b.score - a.score);
|
|
140
|
+
if (scored.length === 0) {
|
|
141
|
+
return {
|
|
142
|
+
primary: 'gpt-5.2',
|
|
143
|
+
fallback: ['claude-opus-4.5'],
|
|
144
|
+
reason: 'No available models matched, defaulting to GPT 5.2',
|
|
145
|
+
estimatedLatencyMs: 21286,
|
|
146
|
+
estimatedSuccessRate: 0.875,
|
|
147
|
+
estimatedCost: 0.005,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const primary = scored[0];
|
|
151
|
+
const fallbacks = scored.slice(1).map(s => s.id);
|
|
152
|
+
return {
|
|
153
|
+
primary: primary.id,
|
|
154
|
+
fallback: fallbacks,
|
|
155
|
+
reason: `${primary.id} selected for ${classification.category}/${difficulty} task (score: ${primary.score.toFixed(0)})`,
|
|
156
|
+
estimatedLatencyMs: primary.fingerprint.avgLatencyMs,
|
|
157
|
+
estimatedSuccessRate: primary.fingerprint.successRate,
|
|
158
|
+
estimatedCost: primary.fingerprint.costPerTask,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get failure handler for a model-specific error
|
|
163
|
+
*/
|
|
164
|
+
export function getFailureHandler(modelId, errorType) {
|
|
165
|
+
return FAILURE_HANDLERS[`${modelId}:${errorType}`] || null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get model fingerprint
|
|
169
|
+
*/
|
|
170
|
+
export function getModelFingerprint(modelId) {
|
|
171
|
+
return MODEL_FINGERPRINTS[modelId] || null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get all model fingerprints
|
|
175
|
+
*/
|
|
176
|
+
export function getAllModelFingerprints() {
|
|
177
|
+
return { ...MODEL_FINGERPRINTS };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Update model fingerprint with new benchmark data
|
|
181
|
+
*/
|
|
182
|
+
export function updateModelFingerprint(modelId, updates) {
|
|
183
|
+
const fp = MODEL_FINGERPRINTS[modelId];
|
|
184
|
+
if (!fp)
|
|
185
|
+
return;
|
|
186
|
+
if (updates.avgLatencyMs !== undefined) {
|
|
187
|
+
// Exponential moving average
|
|
188
|
+
fp.avgLatencyMs = fp.avgLatencyMs * 0.7 + updates.avgLatencyMs * 0.3;
|
|
189
|
+
}
|
|
190
|
+
if (updates.successRate !== undefined) {
|
|
191
|
+
fp.successRate = fp.successRate * 0.7 + updates.successRate * 0.3;
|
|
192
|
+
}
|
|
193
|
+
if (updates.costPerTask !== undefined) {
|
|
194
|
+
fp.costPerTask = updates.costPerTask;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
export const ModelRouter = {
|
|
198
|
+
routeTask,
|
|
199
|
+
getFailureHandler,
|
|
200
|
+
getModelFingerprint,
|
|
201
|
+
getAllModelFingerprints,
|
|
202
|
+
updateModelFingerprint,
|
|
203
|
+
};
|
|
204
|
+
export default ModelRouter;
|
|
205
|
+
//# sourceMappingURL=model-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/memory/model-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/memory/short-term/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/memory/short-term/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAwCjE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA0B/D;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA0BjE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAW7D"}
|
|
@@ -12,7 +12,32 @@ export function ensureShortTermSchema(db) {
|
|
|
12
12
|
);
|
|
13
13
|
CREATE INDEX IF NOT EXISTS idx_memories_project_id ON memories(project_id);
|
|
14
14
|
CREATE INDEX IF NOT EXISTS idx_memories_timestamp ON memories(timestamp);
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_memories_project_type ON memories(project_id, type);
|
|
15
17
|
`);
|
|
18
|
+
// Enable WAL mode for concurrent reads and better write performance
|
|
19
|
+
db.pragma('journal_mode = WAL');
|
|
20
|
+
db.pragma('synchronous = NORMAL');
|
|
21
|
+
db.pragma('mmap_size = 268435456');
|
|
22
|
+
db.pragma('cache_size = -64000');
|
|
23
|
+
// Create FTS5 virtual table for full-text search
|
|
24
|
+
db.exec(`
|
|
25
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
|
|
26
|
+
content,
|
|
27
|
+
type,
|
|
28
|
+
content_rowid=id,
|
|
29
|
+
tokenize='porter unicode61'
|
|
30
|
+
);
|
|
31
|
+
`);
|
|
32
|
+
// Populate FTS if empty but memories exist
|
|
33
|
+
const ftsCount = db.prepare('SELECT COUNT(*) as c FROM memories_fts').get().c;
|
|
34
|
+
const memCount = db.prepare('SELECT COUNT(*) as c FROM memories').get().c;
|
|
35
|
+
if (ftsCount === 0 && memCount > 0) {
|
|
36
|
+
db.exec(`
|
|
37
|
+
INSERT INTO memories_fts(rowid, content, type)
|
|
38
|
+
SELECT id, content, type FROM memories;
|
|
39
|
+
`);
|
|
40
|
+
}
|
|
16
41
|
}
|
|
17
42
|
export function ensureSessionSchema(db) {
|
|
18
43
|
db.exec(`
|
|
@@ -27,6 +52,17 @@ export function ensureSessionSchema(db) {
|
|
|
27
52
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_session_unique ON session_memories(session_id, content);
|
|
28
53
|
CREATE INDEX IF NOT EXISTS idx_session_id ON session_memories(session_id);
|
|
29
54
|
CREATE INDEX IF NOT EXISTS idx_session_timestamp ON session_memories(timestamp);
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_session_importance ON session_memories(importance DESC);
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_session_id_importance ON session_memories(session_id, importance DESC);
|
|
57
|
+
`);
|
|
58
|
+
// Create FTS5 for session memories
|
|
59
|
+
db.exec(`
|
|
60
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS session_memories_fts USING fts5(
|
|
61
|
+
content,
|
|
62
|
+
type,
|
|
63
|
+
content_rowid=id,
|
|
64
|
+
tokenize='porter unicode61'
|
|
65
|
+
);
|
|
30
66
|
`);
|
|
31
67
|
}
|
|
32
68
|
export function ensureKnowledgeSchema(db) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/memory/short-term/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/memory/short-term/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;GAYP,CAAC,CAAC;IAEH,oEAAoE;IACpE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACnC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjC,iDAAiD;IACjD,EAAE,CAAC,IAAI,CAAC;;;;;;;GAOP,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,QAAQ,GAAI,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAI,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;IAC7F,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAqB;IACvD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;IAEH,mCAAmC;IACnC,EAAE,CAAC,IAAI,CAAC;;;;;;;GAOP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;GAwBP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxB,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
@@ -10,6 +10,7 @@ export declare class SQLiteShortTermMemory implements ShortTermMemoryBackend {
|
|
|
10
10
|
private db;
|
|
11
11
|
private projectId;
|
|
12
12
|
private maxEntries;
|
|
13
|
+
private cache;
|
|
13
14
|
constructor(config: {
|
|
14
15
|
dbPath: string;
|
|
15
16
|
projectId?: string;
|
|
@@ -24,6 +25,7 @@ export declare class SQLiteShortTermMemory implements ShortTermMemoryBackend {
|
|
|
24
25
|
}>): Promise<void>;
|
|
25
26
|
getRecent(limit?: number): Promise<ShortTermMemory[]>;
|
|
26
27
|
query(searchTerm: string, limit?: number): Promise<ShortTermMemory[]>;
|
|
28
|
+
private queryWithoutCache;
|
|
27
29
|
getByType(type: ShortTermMemory['type'], limit?: number): Promise<ShortTermMemory[]>;
|
|
28
30
|
count(): Promise<number>;
|
|
29
31
|
private prune;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/memory/short-term/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/memory/short-term/sqlite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3D,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAgF;gBAEjF,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAe/E,OAAO,CAAC,UAAU;IAIZ,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBpE,UAAU,CACd,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACrF,OAAO,CAAC,IAAI,CAAC;IAsBV,SAAS,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWjD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAoDzD,iBAAiB;IA0BzB,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWhF,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;YAUhB,KAAK;IAiBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvC,SAAS,CACb,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACtF,OAAO,CAAC,MAAM,CAAC;CAInB"}
|
|
@@ -2,10 +2,12 @@ import Database from 'better-sqlite3';
|
|
|
2
2
|
import { existsSync, mkdirSync } from 'fs';
|
|
3
3
|
import { dirname } from 'path';
|
|
4
4
|
import { ensureShortTermSchema } from './schema.js';
|
|
5
|
+
import { getSpeculativeCache } from '../speculative-cache.js';
|
|
5
6
|
export class SQLiteShortTermMemory {
|
|
6
7
|
db;
|
|
7
8
|
projectId;
|
|
8
9
|
maxEntries;
|
|
10
|
+
cache = getSpeculativeCache({ maxEntries: 50, ttlMs: 120000, preWarmEnabled: true });
|
|
9
11
|
constructor(config) {
|
|
10
12
|
// Ensure directory exists
|
|
11
13
|
const dir = dirname(config.dbPath);
|
|
@@ -22,11 +24,23 @@ export class SQLiteShortTermMemory {
|
|
|
22
24
|
ensureShortTermSchema(this.db);
|
|
23
25
|
}
|
|
24
26
|
async store(type, content) {
|
|
27
|
+
const timestamp = new Date().toISOString();
|
|
25
28
|
const stmt = this.db.prepare(`
|
|
26
29
|
INSERT INTO memories (timestamp, type, content, project_id)
|
|
27
30
|
VALUES (?, ?, ?, ?)
|
|
28
31
|
`);
|
|
29
|
-
stmt.run(
|
|
32
|
+
const result = stmt.run(timestamp, type, content, this.projectId);
|
|
33
|
+
// Update FTS5 index
|
|
34
|
+
try {
|
|
35
|
+
const ftsStmt = this.db.prepare(`
|
|
36
|
+
INSERT INTO memories_fts(rowid, content, type)
|
|
37
|
+
VALUES (?, ?, ?)
|
|
38
|
+
`);
|
|
39
|
+
ftsStmt.run(result.lastInsertRowid, content, type);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// FTS5 not available, ignore
|
|
43
|
+
}
|
|
30
44
|
// Auto-prune if exceeds maxEntries
|
|
31
45
|
await this.prune();
|
|
32
46
|
}
|
|
@@ -54,6 +68,68 @@ export class SQLiteShortTermMemory {
|
|
|
54
68
|
return stmt.all(this.projectId, limit);
|
|
55
69
|
}
|
|
56
70
|
async query(searchTerm, limit = 10) {
|
|
71
|
+
// Check speculative cache first
|
|
72
|
+
const cacheKey = `${this.projectId}:${searchTerm}:${limit}`;
|
|
73
|
+
const cached = this.cache.get(cacheKey);
|
|
74
|
+
if (cached) {
|
|
75
|
+
return cached.result;
|
|
76
|
+
}
|
|
77
|
+
let results = [];
|
|
78
|
+
// Try FTS5 first for faster full-text search
|
|
79
|
+
try {
|
|
80
|
+
const ftsStmt = this.db.prepare(`
|
|
81
|
+
SELECT m.id, m.timestamp, m.type, m.content, m.project_id as projectId
|
|
82
|
+
FROM memories_fts fts
|
|
83
|
+
JOIN memories m ON fts.rowid = m.id
|
|
84
|
+
WHERE memories_fts MATCH ? AND m.project_id = ?
|
|
85
|
+
ORDER BY rank
|
|
86
|
+
LIMIT ?
|
|
87
|
+
`);
|
|
88
|
+
results = ftsStmt.all(searchTerm, this.projectId, limit);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// FTS5 not available or query syntax error, fall through to LIKE
|
|
92
|
+
}
|
|
93
|
+
// Fallback to LIKE search if FTS5 returned nothing
|
|
94
|
+
if (results.length === 0) {
|
|
95
|
+
const stmt = this.db.prepare(`
|
|
96
|
+
SELECT id, timestamp, type, content, project_id as projectId
|
|
97
|
+
FROM memories
|
|
98
|
+
WHERE project_id = ? AND content LIKE ?
|
|
99
|
+
ORDER BY id DESC
|
|
100
|
+
LIMIT ?
|
|
101
|
+
`);
|
|
102
|
+
results = stmt.all(this.projectId, `%${searchTerm}%`, limit);
|
|
103
|
+
}
|
|
104
|
+
// Store in cache
|
|
105
|
+
this.cache.set(cacheKey, results);
|
|
106
|
+
// Pre-warm cache for predicted next queries
|
|
107
|
+
this.cache.preWarm(searchTerm, async (q) => {
|
|
108
|
+
const predictedKey = `${this.projectId}:${q}:${limit}`;
|
|
109
|
+
if (!this.cache.get(predictedKey)) {
|
|
110
|
+
return this.queryWithoutCache(q, limit);
|
|
111
|
+
}
|
|
112
|
+
return [];
|
|
113
|
+
}).catch(() => { });
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
async queryWithoutCache(searchTerm, limit) {
|
|
117
|
+
try {
|
|
118
|
+
const ftsStmt = this.db.prepare(`
|
|
119
|
+
SELECT m.id, m.timestamp, m.type, m.content, m.project_id as projectId
|
|
120
|
+
FROM memories_fts fts
|
|
121
|
+
JOIN memories m ON fts.rowid = m.id
|
|
122
|
+
WHERE memories_fts MATCH ? AND m.project_id = ?
|
|
123
|
+
ORDER BY rank
|
|
124
|
+
LIMIT ?
|
|
125
|
+
`);
|
|
126
|
+
const results = ftsStmt.all(searchTerm, this.projectId, limit);
|
|
127
|
+
if (results.length > 0)
|
|
128
|
+
return results;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// FTS5 not available
|
|
132
|
+
}
|
|
57
133
|
const stmt = this.db.prepare(`
|
|
58
134
|
SELECT id, timestamp, type, content, project_id as projectId
|
|
59
135
|
FROM memories
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/memory/short-term/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/memory/short-term/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAW9D,MAAM,OAAO,qBAAqB;IACxB,EAAE,CAAoB;IACtB,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,KAAK,GAAG,mBAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7F,YAAY,MAAmE;QAC7E,0BAA0B;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAE1C,oBAAoB;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAA6B,EAAE,OAAe;QACxD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAElE,oBAAoB;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;OAG/B,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,mCAAmC;QACnC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAsF;QAEtF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAGH,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAkB,EAAE,EAAE;YAC5D,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAC3C,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,SAAS,CACf,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAM5B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAsB,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE;QACxC,gCAAgC;QAChC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,MAA2B,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,GAAsB,EAAE,CAAC;QAEpC,6CAA6C;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;OAO/B,CAAC,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAsB,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;QAED,mDAAmD;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;OAM5B,CAAC,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,GAAG,EAAE,KAAK,CAAsB,CAAC;QACpF,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAElC,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,UAAkB,EAAE,KAAa;QAC/D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;OAO/B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAsB,CAAC;YACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAM5B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,GAAG,EAAE,KAAK,CAAsB,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAA6B,EAAE,KAAK,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAM5B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAsB,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI5B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAsB,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;OAQ5B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAsB,CAAC;IACvD,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS,CACb,QAAuF;QAEvF,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal-Bench Domain Knowledge Pre-Population
|
|
3
|
+
*
|
|
4
|
+
* This module contains battle-tested domain knowledge that improved
|
|
5
|
+
* Terminal-Bench 2.0 accuracy by +6.7% (53.3% -> 60%).
|
|
6
|
+
*
|
|
7
|
+
* Based on TERMINAL_BENCH_RESULTS.md analysis of improvements:
|
|
8
|
+
* - extract-elf: ELF format knowledge enabled correct parsing
|
|
9
|
+
* - password-recovery: hashcat/john guidance led to successful recovery
|
|
10
|
+
*/
|
|
11
|
+
export interface DomainKnowledge {
|
|
12
|
+
category: string;
|
|
13
|
+
type: 'pattern' | 'tool' | 'format' | 'gotcha';
|
|
14
|
+
content: string;
|
|
15
|
+
keywords: string[];
|
|
16
|
+
importance: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const TERMINAL_BENCH_KNOWLEDGE: DomainKnowledge[];
|
|
19
|
+
/**
|
|
20
|
+
* Get domain knowledge relevant to a task
|
|
21
|
+
*/
|
|
22
|
+
export declare function getRelevantKnowledge(taskInstruction: string, category?: string): DomainKnowledge[];
|
|
23
|
+
/**
|
|
24
|
+
* Format knowledge for context injection
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatKnowledgeForContext(knowledge: DomainKnowledge[]): string;
|
|
27
|
+
declare const _default: {
|
|
28
|
+
TERMINAL_BENCH_KNOWLEDGE: DomainKnowledge[];
|
|
29
|
+
getRelevantKnowledge: typeof getRelevantKnowledge;
|
|
30
|
+
formatKnowledgeForContext: typeof formatKnowledgeForContext;
|
|
31
|
+
};
|
|
32
|
+
export default _default;
|
|
33
|
+
//# sourceMappingURL=terminal-bench-knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-bench-knowledge.d.ts","sourceRoot":"","sources":["../../src/memory/terminal-bench-knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,wBAAwB,EAAE,eAAe,EAqJrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,EAAE,CAyBnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAU9E;;;;;;AAED,wBAIE"}
|