@monoes/memory 1.0.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/README.md +902 -0
- package/dist/agent-memory-scope.d.ts +131 -0
- package/dist/agent-memory-scope.d.ts.map +1 -0
- package/dist/agent-memory-scope.js +230 -0
- package/dist/agent-memory-scope.js.map +1 -0
- package/dist/agentdb-adapter.d.ts +165 -0
- package/dist/agentdb-adapter.d.ts.map +1 -0
- package/dist/agentdb-adapter.js +836 -0
- package/dist/agentdb-adapter.js.map +1 -0
- package/dist/agentdb-backend.d.ts +218 -0
- package/dist/agentdb-backend.d.ts.map +1 -0
- package/dist/agentdb-backend.js +879 -0
- package/dist/agentdb-backend.js.map +1 -0
- package/dist/auto-memory-bridge.d.ts +230 -0
- package/dist/auto-memory-bridge.d.ts.map +1 -0
- package/dist/auto-memory-bridge.js +730 -0
- package/dist/auto-memory-bridge.js.map +1 -0
- package/dist/cache-manager.d.ts +134 -0
- package/dist/cache-manager.d.ts.map +1 -0
- package/dist/cache-manager.js +410 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/checkpointer.d.ts +78 -0
- package/dist/checkpointer.d.ts.map +1 -0
- package/dist/checkpointer.js +174 -0
- package/dist/checkpointer.js.map +1 -0
- package/dist/controller-registry.d.ts +216 -0
- package/dist/controller-registry.d.ts.map +1 -0
- package/dist/controller-registry.js +897 -0
- package/dist/controller-registry.js.map +1 -0
- package/dist/database-provider.d.ts +87 -0
- package/dist/database-provider.d.ts.map +1 -0
- package/dist/database-provider.js +434 -0
- package/dist/database-provider.js.map +1 -0
- package/dist/diskann-backend.d.ts +126 -0
- package/dist/diskann-backend.d.ts.map +1 -0
- package/dist/diskann-backend.js +324 -0
- package/dist/diskann-backend.js.map +1 -0
- package/dist/episodic-store.d.ts +58 -0
- package/dist/episodic-store.d.ts.map +1 -0
- package/dist/episodic-store.js +160 -0
- package/dist/episodic-store.js.map +1 -0
- package/dist/hnsw-index.d.ts +111 -0
- package/dist/hnsw-index.d.ts.map +1 -0
- package/dist/hnsw-index.js +778 -0
- package/dist/hnsw-index.js.map +1 -0
- package/dist/hnsw-lite.d.ts +29 -0
- package/dist/hnsw-lite.d.ts.map +1 -0
- package/dist/hnsw-lite.js +236 -0
- package/dist/hnsw-lite.js.map +1 -0
- package/dist/hybrid-backend.d.ts +299 -0
- package/dist/hybrid-backend.d.ts.map +1 -0
- package/dist/hybrid-backend.js +804 -0
- package/dist/hybrid-backend.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +379 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/document-chunker.d.ts +22 -0
- package/dist/knowledge/document-chunker.d.ts.map +1 -0
- package/dist/knowledge/document-chunker.js +52 -0
- package/dist/knowledge/document-chunker.js.map +1 -0
- package/dist/knowledge/index.d.ts +12 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +9 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/knowledge-retriever.d.ts +48 -0
- package/dist/knowledge/knowledge-retriever.d.ts.map +1 -0
- package/dist/knowledge/knowledge-retriever.js +80 -0
- package/dist/knowledge/knowledge-retriever.js.map +1 -0
- package/dist/knowledge/knowledge-store.d.ts +58 -0
- package/dist/knowledge/knowledge-store.d.ts.map +1 -0
- package/dist/knowledge/knowledge-store.js +121 -0
- package/dist/knowledge/knowledge-store.js.map +1 -0
- package/dist/learning-bridge.d.ts +162 -0
- package/dist/learning-bridge.d.ts.map +1 -0
- package/dist/learning-bridge.js +522 -0
- package/dist/learning-bridge.js.map +1 -0
- package/dist/memory-graph.d.ts +123 -0
- package/dist/memory-graph.d.ts.map +1 -0
- package/dist/memory-graph.js +412 -0
- package/dist/memory-graph.js.map +1 -0
- package/dist/migration.d.ts +68 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +513 -0
- package/dist/migration.js.map +1 -0
- package/dist/partitioned-hnsw.d.ts +65 -0
- package/dist/partitioned-hnsw.d.ts.map +1 -0
- package/dist/partitioned-hnsw.js +209 -0
- package/dist/partitioned-hnsw.js.map +1 -0
- package/dist/persistent-sona.d.ts +144 -0
- package/dist/persistent-sona.d.ts.map +1 -0
- package/dist/persistent-sona.js +333 -0
- package/dist/persistent-sona.js.map +1 -0
- package/dist/procedural/action-record.d.ts +19 -0
- package/dist/procedural/action-record.d.ts.map +1 -0
- package/dist/procedural/action-record.js +51 -0
- package/dist/procedural/action-record.js.map +1 -0
- package/dist/procedural/action-sequence-extractor.d.ts +25 -0
- package/dist/procedural/action-sequence-extractor.d.ts.map +1 -0
- package/dist/procedural/action-sequence-extractor.js +91 -0
- package/dist/procedural/action-sequence-extractor.js.map +1 -0
- package/dist/procedural/index.d.ts +14 -0
- package/dist/procedural/index.d.ts.map +1 -0
- package/dist/procedural/index.js +13 -0
- package/dist/procedural/index.js.map +1 -0
- package/dist/procedural/learned-skill.d.ts +17 -0
- package/dist/procedural/learned-skill.d.ts.map +1 -0
- package/dist/procedural/learned-skill.js +73 -0
- package/dist/procedural/learned-skill.js.map +1 -0
- package/dist/procedural/procedure-extractor-worker.d.ts +27 -0
- package/dist/procedural/procedure-extractor-worker.d.ts.map +1 -0
- package/dist/procedural/procedure-extractor-worker.js +39 -0
- package/dist/procedural/procedure-extractor-worker.js.map +1 -0
- package/dist/procedural/skill-registry.d.ts +25 -0
- package/dist/procedural/skill-registry.d.ts.map +1 -0
- package/dist/procedural/skill-registry.js +56 -0
- package/dist/procedural/skill-registry.js.map +1 -0
- package/dist/procedural/types.d.ts +67 -0
- package/dist/procedural/types.d.ts.map +1 -0
- package/dist/procedural/types.js +15 -0
- package/dist/procedural/types.js.map +1 -0
- package/dist/prompt-version-store.d.ts +59 -0
- package/dist/prompt-version-store.d.ts.map +1 -0
- package/dist/prompt-version-store.js +175 -0
- package/dist/prompt-version-store.js.map +1 -0
- package/dist/query-builder.d.ts +52 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +134 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/rvf-backend.d.ts +51 -0
- package/dist/rvf-backend.d.ts.map +1 -0
- package/dist/rvf-backend.js +499 -0
- package/dist/rvf-backend.js.map +1 -0
- package/dist/rvf-learning-store.d.ts +141 -0
- package/dist/rvf-learning-store.d.ts.map +1 -0
- package/dist/rvf-learning-store.js +344 -0
- package/dist/rvf-learning-store.js.map +1 -0
- package/dist/rvf-migration.d.ts +45 -0
- package/dist/rvf-migration.d.ts.map +1 -0
- package/dist/rvf-migration.js +254 -0
- package/dist/rvf-migration.js.map +1 -0
- package/dist/sqlite-backend.d.ts +127 -0
- package/dist/sqlite-backend.d.ts.map +1 -0
- package/dist/sqlite-backend.js +618 -0
- package/dist/sqlite-backend.js.map +1 -0
- package/dist/sqljs-backend.d.ts +128 -0
- package/dist/sqljs-backend.d.ts.map +1 -0
- package/dist/sqljs-backend.js +611 -0
- package/dist/sqljs-backend.js.map +1 -0
- package/dist/tier-manager.d.ts +79 -0
- package/dist/tier-manager.d.ts.map +1 -0
- package/dist/tier-manager.js +169 -0
- package/dist/tier-manager.js.map +1 -0
- package/dist/tiers/contextual.d.ts +43 -0
- package/dist/tiers/contextual.d.ts.map +1 -0
- package/dist/tiers/contextual.js +102 -0
- package/dist/tiers/contextual.js.map +1 -0
- package/dist/tiers/entity.d.ts +46 -0
- package/dist/tiers/entity.d.ts.map +1 -0
- package/dist/tiers/entity.js +106 -0
- package/dist/tiers/entity.js.map +1 -0
- package/dist/tiers/index.d.ts +4 -0
- package/dist/tiers/index.d.ts.map +1 -0
- package/dist/tiers/index.js +4 -0
- package/dist/tiers/index.js.map +1 -0
- package/dist/tiers/short-term.d.ts +42 -0
- package/dist/tiers/short-term.d.ts.map +1 -0
- package/dist/tiers/short-term.js +89 -0
- package/dist/tiers/short-term.js.map +1 -0
- package/dist/types/checkpoint.d.ts +44 -0
- package/dist/types/checkpoint.d.ts.map +1 -0
- package/dist/types/checkpoint.js +8 -0
- package/dist/types/checkpoint.js.map +1 -0
- package/dist/types.d.ts +526 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +58 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PersistentSonaCoordinator - SONA learning with RVF persistence
|
|
3
|
+
*
|
|
4
|
+
* Wraps RvfLearningStore to provide an in-memory pattern bank with
|
|
5
|
+
* brute-force cosine similarity, trajectory buffering, EWC tracking,
|
|
6
|
+
* and automatic periodic persistence to disk.
|
|
7
|
+
*
|
|
8
|
+
* This is intentionally decoupled from the ruvector SONA classes:
|
|
9
|
+
* it defines its own compatible types and delegates persistence to
|
|
10
|
+
* RvfLearningStore.
|
|
11
|
+
*
|
|
12
|
+
* @module @monomind/memory/persistent-sona
|
|
13
|
+
*/
|
|
14
|
+
import { RvfLearningStore, } from './rvf-learning-store.js';
|
|
15
|
+
// ===== Constants =====
|
|
16
|
+
const DEFAULT_PATTERN_THRESHOLD = 0.85;
|
|
17
|
+
const DEFAULT_MAX_TRAJECTORY_BUFFER = 1000;
|
|
18
|
+
const DEFAULT_AUTO_PERSIST_MS = 30_000;
|
|
19
|
+
// ===== Helpers =====
|
|
20
|
+
/**
|
|
21
|
+
* Compute cosine similarity between two number arrays.
|
|
22
|
+
* Returns 0 when either vector has zero magnitude.
|
|
23
|
+
*/
|
|
24
|
+
function cosineSimilarity(a, b) {
|
|
25
|
+
const len = Math.min(a.length, b.length);
|
|
26
|
+
let dot = 0;
|
|
27
|
+
let normA = 0;
|
|
28
|
+
let normB = 0;
|
|
29
|
+
// Process in groups of 4 for better throughput
|
|
30
|
+
let i = 0;
|
|
31
|
+
for (; i + 3 < len; i += 4) {
|
|
32
|
+
dot += a[i] * b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] + a[i + 3] * b[i + 3];
|
|
33
|
+
normA += a[i] * a[i] + a[i + 1] * a[i + 1] + a[i + 2] * a[i + 2] + a[i + 3] * a[i + 3];
|
|
34
|
+
normB += b[i] * b[i] + b[i + 1] * b[i + 1] + b[i + 2] * b[i + 2] + b[i + 3] * b[i + 3];
|
|
35
|
+
}
|
|
36
|
+
for (; i < len; i++) {
|
|
37
|
+
dot += a[i] * b[i];
|
|
38
|
+
normA += a[i] * a[i];
|
|
39
|
+
normB += b[i] * b[i];
|
|
40
|
+
}
|
|
41
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
42
|
+
return denom > 0 ? dot / denom : 0;
|
|
43
|
+
}
|
|
44
|
+
function generateId(prefix) {
|
|
45
|
+
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
46
|
+
}
|
|
47
|
+
// ===== PersistentSonaCoordinator =====
|
|
48
|
+
/**
|
|
49
|
+
* Coordinates SONA learning with persistent storage.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const sona = new PersistentSonaCoordinator({
|
|
54
|
+
* storePath: './data/sona-learning.rvls',
|
|
55
|
+
* });
|
|
56
|
+
* await sona.initialize();
|
|
57
|
+
*
|
|
58
|
+
* // Store a pattern
|
|
59
|
+
* const id = sona.storePattern('query_response', embedding);
|
|
60
|
+
*
|
|
61
|
+
* // Find similar patterns
|
|
62
|
+
* const matches = sona.findSimilarPatterns(queryEmbedding, 5);
|
|
63
|
+
*
|
|
64
|
+
* // Record a trajectory
|
|
65
|
+
* sona.recordTrajectory({ id: 'traj-1', steps: [...], outcome: 'success', ... });
|
|
66
|
+
*
|
|
67
|
+
* // Periodic background learning
|
|
68
|
+
* const result = sona.runBackgroundLoop();
|
|
69
|
+
*
|
|
70
|
+
* await sona.shutdown();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export class PersistentSonaCoordinator {
|
|
74
|
+
store;
|
|
75
|
+
patterns = new Map();
|
|
76
|
+
trajectoryBuffer = [];
|
|
77
|
+
ewcState = null;
|
|
78
|
+
patternThreshold;
|
|
79
|
+
maxTrajectoryBuffer;
|
|
80
|
+
verbose;
|
|
81
|
+
initialized = false;
|
|
82
|
+
constructor(config) {
|
|
83
|
+
this.patternThreshold = config.patternThreshold ?? DEFAULT_PATTERN_THRESHOLD;
|
|
84
|
+
this.maxTrajectoryBuffer = config.maxTrajectoryBuffer ?? DEFAULT_MAX_TRAJECTORY_BUFFER;
|
|
85
|
+
this.verbose = config.verbose ?? false;
|
|
86
|
+
const storeConfig = {
|
|
87
|
+
storePath: config.storePath,
|
|
88
|
+
autoPersistInterval: config.autoPersistInterval ?? DEFAULT_AUTO_PERSIST_MS,
|
|
89
|
+
verbose: config.verbose,
|
|
90
|
+
};
|
|
91
|
+
this.store = new RvfLearningStore(storeConfig);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Initialize by loading persisted state from the RVF store.
|
|
95
|
+
*/
|
|
96
|
+
async initialize() {
|
|
97
|
+
if (this.initialized)
|
|
98
|
+
return;
|
|
99
|
+
await this.store.initialize();
|
|
100
|
+
// Rebuild in-memory state from store
|
|
101
|
+
const patterns = await this.store.loadPatterns();
|
|
102
|
+
for (const p of patterns) {
|
|
103
|
+
this.patterns.set(p.id, p);
|
|
104
|
+
}
|
|
105
|
+
const ewc = await this.store.loadEwcState();
|
|
106
|
+
this.ewcState = ewc;
|
|
107
|
+
const trajectories = await this.store.getTrajectories();
|
|
108
|
+
// getTrajectories returns newest-first, reverse for chronological buffer
|
|
109
|
+
this.trajectoryBuffer = trajectories.reverse();
|
|
110
|
+
this.initialized = true;
|
|
111
|
+
this.log(`Initialized: ${this.patterns.size} patterns, ` +
|
|
112
|
+
`${this.trajectoryBuffer.length} trajectories, ` +
|
|
113
|
+
`EWC: ${this.ewcState ? 'yes' : 'no'}`);
|
|
114
|
+
}
|
|
115
|
+
// ===== Pattern operations =====
|
|
116
|
+
/**
|
|
117
|
+
* Store a new pattern and return its ID.
|
|
118
|
+
*
|
|
119
|
+
* @param type - Pattern type (e.g. 'query_response', 'routing')
|
|
120
|
+
* @param embedding - The pattern embedding vector
|
|
121
|
+
* @param metadata - Optional extra metadata (currently unused, reserved)
|
|
122
|
+
* @returns The generated pattern ID
|
|
123
|
+
*/
|
|
124
|
+
storePattern(type, embedding, metadata) {
|
|
125
|
+
this.ensureInitialized();
|
|
126
|
+
const id = generateId('pat');
|
|
127
|
+
const record = {
|
|
128
|
+
id,
|
|
129
|
+
type,
|
|
130
|
+
embedding: [...embedding],
|
|
131
|
+
successRate: 1.0,
|
|
132
|
+
useCount: 0,
|
|
133
|
+
lastUsed: new Date().toISOString(),
|
|
134
|
+
};
|
|
135
|
+
this.patterns.set(id, record);
|
|
136
|
+
// M4: surface persist errors to logs rather than swallowing silently
|
|
137
|
+
void this.store.savePatterns([record]).catch(err => console.warn('[PersistentSona] Pattern persist failed:', err));
|
|
138
|
+
return id;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Find the k most similar patterns above the configured threshold.
|
|
142
|
+
* Uses brute-force cosine similarity (suitable for small pattern sets).
|
|
143
|
+
*/
|
|
144
|
+
findSimilarPatterns(embedding, k = 5) {
|
|
145
|
+
this.ensureInitialized();
|
|
146
|
+
const results = [];
|
|
147
|
+
for (const record of this.patterns.values()) {
|
|
148
|
+
const score = cosineSimilarity(embedding, record.embedding);
|
|
149
|
+
if (score >= this.patternThreshold) {
|
|
150
|
+
results.push({ record, score });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Sort descending by score and take top-k
|
|
154
|
+
results.sort((a, b) => b.score - a.score);
|
|
155
|
+
return results.slice(0, k).map((r) => r.record);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Record a pattern usage outcome. Updates the success rate using an
|
|
159
|
+
* exponential moving average (alpha = 0.1).
|
|
160
|
+
*/
|
|
161
|
+
recordPatternUsage(patternId, success) {
|
|
162
|
+
this.ensureInitialized();
|
|
163
|
+
const pattern = this.patterns.get(patternId);
|
|
164
|
+
if (!pattern)
|
|
165
|
+
return;
|
|
166
|
+
pattern.useCount++;
|
|
167
|
+
pattern.lastUsed = new Date().toISOString();
|
|
168
|
+
const alpha = 0.1;
|
|
169
|
+
const outcome = success ? 1.0 : 0.0;
|
|
170
|
+
pattern.successRate = alpha * outcome + (1 - alpha) * pattern.successRate;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Remove patterns that have low success rates after sufficient usage.
|
|
174
|
+
*
|
|
175
|
+
* @returns The number of patterns pruned
|
|
176
|
+
*/
|
|
177
|
+
prunePatterns(minSuccessRate = 0.3, minUseCount = 5) {
|
|
178
|
+
this.ensureInitialized();
|
|
179
|
+
const prunedIds = [];
|
|
180
|
+
for (const [id, pattern] of this.patterns) {
|
|
181
|
+
if (pattern.useCount >= minUseCount && pattern.successRate < minSuccessRate) {
|
|
182
|
+
this.patterns.delete(id);
|
|
183
|
+
prunedIds.push(id);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (prunedIds.length > 0) {
|
|
187
|
+
this.log(`Pruned ${prunedIds.length} low-performing patterns`);
|
|
188
|
+
// Persist the deletion so pruned patterns don't reload on next initialize()
|
|
189
|
+
void this.store.deletePatterns(prunedIds).catch(() => { });
|
|
190
|
+
}
|
|
191
|
+
return prunedIds.length;
|
|
192
|
+
}
|
|
193
|
+
// ===== Trajectory tracking =====
|
|
194
|
+
/**
|
|
195
|
+
* Buffer a completed trajectory for later processing.
|
|
196
|
+
* When the buffer exceeds maxTrajectoryBuffer, the oldest entries
|
|
197
|
+
* are evicted.
|
|
198
|
+
*/
|
|
199
|
+
recordTrajectory(trajectory) {
|
|
200
|
+
this.ensureInitialized();
|
|
201
|
+
const copy = { ...trajectory };
|
|
202
|
+
this.trajectoryBuffer.push(copy);
|
|
203
|
+
// Persist to store immediately so evicted entries are not lost
|
|
204
|
+
void this.store.appendTrajectory(copy).catch(() => { });
|
|
205
|
+
while (this.trajectoryBuffer.length > this.maxTrajectoryBuffer) {
|
|
206
|
+
this.trajectoryBuffer.shift();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// ===== Learning loop =====
|
|
210
|
+
/**
|
|
211
|
+
* Process buffered trajectories to extract new patterns.
|
|
212
|
+
* Successful and partial trajectories are mined for high-confidence
|
|
213
|
+
* steps; new patterns are stored if they are sufficiently different
|
|
214
|
+
* from existing ones.
|
|
215
|
+
*
|
|
216
|
+
* After processing, the trajectory buffer is cleared and low-performing
|
|
217
|
+
* patterns are pruned.
|
|
218
|
+
*
|
|
219
|
+
* @returns Summary of the learning pass
|
|
220
|
+
*/
|
|
221
|
+
runBackgroundLoop() {
|
|
222
|
+
this.ensureInitialized();
|
|
223
|
+
let patternsLearned = 0;
|
|
224
|
+
const trajectoriesProcessed = this.trajectoryBuffer.length;
|
|
225
|
+
for (const traj of this.trajectoryBuffer) {
|
|
226
|
+
if (traj.outcome === 'success' || traj.outcome === 'partial') {
|
|
227
|
+
patternsLearned += this.extractPatternsFromTrajectory(traj);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this.prunePatterns();
|
|
231
|
+
this.trajectoryBuffer = [];
|
|
232
|
+
this.log(`Background loop: ${patternsLearned} patterns learned, ` +
|
|
233
|
+
`${trajectoriesProcessed} trajectories processed`);
|
|
234
|
+
return { patternsLearned, trajectoriesProcessed };
|
|
235
|
+
}
|
|
236
|
+
// ===== Persistence =====
|
|
237
|
+
/**
|
|
238
|
+
* Flush current in-memory state to the RVF store on disk.
|
|
239
|
+
*/
|
|
240
|
+
async persist() {
|
|
241
|
+
const allPatterns = Array.from(this.patterns.values());
|
|
242
|
+
await this.store.savePatterns(allPatterns);
|
|
243
|
+
if (this.ewcState) {
|
|
244
|
+
await this.store.saveEwcState(this.ewcState);
|
|
245
|
+
}
|
|
246
|
+
// Note: trajectories are appended to the store immediately in recordTrajectory(),
|
|
247
|
+
// so DO NOT re-append here — doing so would write each trajectory twice and
|
|
248
|
+
// produce duplicate records in the sidecar after reload.
|
|
249
|
+
await this.store.persist();
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Persist state and shut down the store.
|
|
253
|
+
*/
|
|
254
|
+
async shutdown() {
|
|
255
|
+
if (!this.initialized)
|
|
256
|
+
return;
|
|
257
|
+
await this.persist();
|
|
258
|
+
await this.store.close();
|
|
259
|
+
this.initialized = false;
|
|
260
|
+
this.log('Shutdown complete');
|
|
261
|
+
}
|
|
262
|
+
// ===== Stats =====
|
|
263
|
+
/**
|
|
264
|
+
* Return a summary of the coordinator's current state.
|
|
265
|
+
*/
|
|
266
|
+
getStats() {
|
|
267
|
+
let totalSuccessRate = 0;
|
|
268
|
+
let count = 0;
|
|
269
|
+
for (const p of this.patterns.values()) {
|
|
270
|
+
totalSuccessRate += p.successRate;
|
|
271
|
+
count++;
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
patterns: this.patterns.size,
|
|
275
|
+
avgSuccessRate: count > 0 ? totalSuccessRate / count : 0,
|
|
276
|
+
trajectoriesBuffered: this.trajectoryBuffer.length,
|
|
277
|
+
ewcTasksLearned: this.ewcState?.tasksLearned ?? 0,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// ===== Private =====
|
|
281
|
+
/**
|
|
282
|
+
* Extract patterns from a trajectory's high-confidence steps.
|
|
283
|
+
* A step produces a new pattern only if no sufficiently similar
|
|
284
|
+
* pattern already exists.
|
|
285
|
+
*/
|
|
286
|
+
extractPatternsFromTrajectory(trajectory) {
|
|
287
|
+
let extracted = 0;
|
|
288
|
+
for (const step of trajectory.steps) {
|
|
289
|
+
if (step.confidence < this.patternThreshold)
|
|
290
|
+
continue;
|
|
291
|
+
const embedding = this.createHashEmbedding(step.input + step.output);
|
|
292
|
+
const similar = this.findSimilarPatterns(embedding, 1);
|
|
293
|
+
if (similar.length === 0) {
|
|
294
|
+
this.storePattern(step.type, embedding);
|
|
295
|
+
extracted++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return extracted;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Deterministic hash-based embedding for pattern extraction.
|
|
302
|
+
* This is a lightweight stand-in for a real embedding model,
|
|
303
|
+
* matching the approach used in SonaCoordinator.
|
|
304
|
+
*/
|
|
305
|
+
createHashEmbedding(text, dim = 64) {
|
|
306
|
+
const embedding = new Array(dim).fill(0);
|
|
307
|
+
for (let i = 0; i < text.length; i++) {
|
|
308
|
+
const idx = (text.charCodeAt(i) * (i + 1)) % dim;
|
|
309
|
+
embedding[idx] += 0.1;
|
|
310
|
+
}
|
|
311
|
+
let norm = 0;
|
|
312
|
+
for (let i = 0; i < dim; i++) {
|
|
313
|
+
norm += embedding[i] * embedding[i];
|
|
314
|
+
}
|
|
315
|
+
norm = Math.sqrt(norm) || 1;
|
|
316
|
+
for (let i = 0; i < dim; i++) {
|
|
317
|
+
embedding[i] /= norm;
|
|
318
|
+
}
|
|
319
|
+
return embedding;
|
|
320
|
+
}
|
|
321
|
+
ensureInitialized() {
|
|
322
|
+
if (!this.initialized) {
|
|
323
|
+
throw new Error('PersistentSonaCoordinator has not been initialized. Call initialize() first.');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
log(message) {
|
|
327
|
+
if (this.verbose) {
|
|
328
|
+
// eslint-disable-next-line no-console
|
|
329
|
+
console.log(`[PersistentSona] ${message}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=persistent-sona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-sona.js","sourceRoot":"","sources":["../src/persistent-sona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAuBjC,wBAAwB;AAExB,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAC3C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,sBAAsB;AAEtB;;;GAGG;AACH,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,+CAA+C;IAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACpB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,wCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,yBAAyB;IAC5B,KAAK,CAAmB;IACxB,QAAQ,GAA+B,IAAI,GAAG,EAAE,CAAC;IACjD,gBAAgB,GAAuB,EAAE,CAAC;IAC1C,QAAQ,GAAqB,IAAI,CAAC;IAClC,gBAAgB,CAAS;IACzB,mBAAmB,CAAS;IAC5B,OAAO,CAAU;IACjB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,MAA4B;QACtC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;QAC7E,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;QACvF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAEvC,MAAM,WAAW,GAA2B;YAC1C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,uBAAuB;YAC1E,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAE9B,qCAAqC;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QAEpB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxD,yEAAyE;QACzE,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;QAE/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,CACN,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa;YAC/C,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,iBAAiB;YAChD,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACvC,CAAC;IACJ,CAAC;IAED,iCAAiC;IAEjC;;;;;;;OAOG;IACH,YAAY,CACV,IAAY,EACZ,SAAmB,EACnB,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAkB;YAC5B,EAAE;YACF,IAAI;YACJ,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;YACzB,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9B,qEAAqE;QACrE,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACjD,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAC9D,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,SAAmB,EAAE,IAAY,CAAC;QACpD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAoD,EAAE,CAAC;QAEpE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,SAAiB,EAAE,OAAgB;QACpD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5C,MAAM,KAAK,GAAG,GAAG,CAAC;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,OAAO,CAAC,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC5E,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,iBAAyB,GAAG,EAAE,cAAsB,CAAC;QACjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,QAAQ,IAAI,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,cAAc,EAAE,CAAC;gBAC5E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,UAAU,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;YAC/D,4EAA4E;YAC5E,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,kCAAkC;IAElC;;;;OAIG;IACH,gBAAgB,CAAC,UAA4B;QAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,+DAA+D;QAC/D,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/D,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B;;;;;;;;;;OAUG;IACH,iBAAiB;QAIf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC7D,eAAe,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,GAAG,CACN,oBAAoB,eAAe,qBAAqB;YACxD,GAAG,qBAAqB,yBAAyB,CAClD,CAAC;QAEF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACpD,CAAC;IAED,0BAA0B;IAE1B;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,kFAAkF;QAClF,4EAA4E;QAC5E,yDAAyD;QAEzD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChC,CAAC;IAED,oBAAoB;IAEpB;;OAEG;IACH,QAAQ;QAMN,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,gBAAgB,IAAI,CAAC,CAAC,WAAW,CAAC;YAClC,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC5B,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAClD,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,sBAAsB;IAEtB;;;;OAIG;IACK,6BAA6B,CAAC,UAA4B;QAChE,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;gBAAE,SAAS;YAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACxC,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,IAAY,EAAE,MAAc,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACjD,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionRecordStore — JSONL-backed append-only store for action records.
|
|
3
|
+
*
|
|
4
|
+
* Part of Task 45 — Procedural Memory.
|
|
5
|
+
*/
|
|
6
|
+
import type { ActionRecord } from './types.js';
|
|
7
|
+
export declare class ActionRecordStore {
|
|
8
|
+
private filePath;
|
|
9
|
+
constructor(filePath: string);
|
|
10
|
+
/** Append a single action record to the JSONL file */
|
|
11
|
+
record(rec: ActionRecord): void;
|
|
12
|
+
/** Read all records from the JSONL file */
|
|
13
|
+
private readAll;
|
|
14
|
+
/** Query records by agent slug, optionally filtering by lookback days */
|
|
15
|
+
queryByAgentSlug(slug: string, lookbackDays?: number): ActionRecord[];
|
|
16
|
+
/** Get all records for a specific run, sorted by timestamp */
|
|
17
|
+
getRunSequence(runId: string): ActionRecord[];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=action-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-record.d.ts","sourceRoot":"","sources":["../../src/procedural/action-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAQ5B,sDAAsD;IACtD,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAI/B,2CAA2C;IAC3C,OAAO,CAAC,OAAO;IAOf,yEAAyE;IACzE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAarE,8DAA8D;IAC9D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;CAK9C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionRecordStore — JSONL-backed append-only store for action records.
|
|
3
|
+
*
|
|
4
|
+
* Part of Task 45 — Procedural Memory.
|
|
5
|
+
*/
|
|
6
|
+
import { appendFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
|
|
7
|
+
import { dirname } from 'path';
|
|
8
|
+
export class ActionRecordStore {
|
|
9
|
+
filePath;
|
|
10
|
+
constructor(filePath) {
|
|
11
|
+
this.filePath = filePath;
|
|
12
|
+
const dir = dirname(filePath);
|
|
13
|
+
if (!existsSync(dir)) {
|
|
14
|
+
mkdirSync(dir, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Append a single action record to the JSONL file */
|
|
18
|
+
record(rec) {
|
|
19
|
+
appendFileSync(this.filePath, JSON.stringify(rec) + '\n', 'utf-8');
|
|
20
|
+
}
|
|
21
|
+
/** Read all records from the JSONL file */
|
|
22
|
+
readAll() {
|
|
23
|
+
if (!existsSync(this.filePath))
|
|
24
|
+
return [];
|
|
25
|
+
const content = readFileSync(this.filePath, 'utf-8').trim();
|
|
26
|
+
if (!content)
|
|
27
|
+
return [];
|
|
28
|
+
return content.split('\n').filter(Boolean).map((line) => JSON.parse(line));
|
|
29
|
+
}
|
|
30
|
+
/** Query records by agent slug, optionally filtering by lookback days */
|
|
31
|
+
queryByAgentSlug(slug, lookbackDays) {
|
|
32
|
+
const all = this.readAll();
|
|
33
|
+
const cutoff = lookbackDays
|
|
34
|
+
? new Date(Date.now() - lookbackDays * 24 * 60 * 60 * 1000).toISOString()
|
|
35
|
+
: undefined;
|
|
36
|
+
return all.filter((r) => {
|
|
37
|
+
if (r.agentSlug !== slug)
|
|
38
|
+
return false;
|
|
39
|
+
if (cutoff && r.timestamp < cutoff)
|
|
40
|
+
return false;
|
|
41
|
+
return true;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** Get all records for a specific run, sorted by timestamp */
|
|
45
|
+
getRunSequence(runId) {
|
|
46
|
+
return this.readAll()
|
|
47
|
+
.filter((r) => r.runId === runId)
|
|
48
|
+
.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=action-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-record.js","sourceRoot":"","sources":["../../src/procedural/action-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,OAAO,iBAAiB;IACpB,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAC,GAAiB;QACtB,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,2CAA2C;IACnC,OAAO;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;IAC7F,CAAC;IAED,yEAAyE;IACzE,gBAAgB,CAAC,IAAY,EAAE,YAAqB;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACzE,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,MAAM,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,OAAO,EAAE;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionSequenceExtractor — Groups action records into repeatable skill candidates.
|
|
3
|
+
*
|
|
4
|
+
* Part of Task 45 — Procedural Memory.
|
|
5
|
+
*/
|
|
6
|
+
import type { ActionRecord, ExtractionConfig, ActionSequenceGroup } from './types.js';
|
|
7
|
+
export declare class ActionSequenceExtractor {
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config?: Partial<ExtractionConfig>);
|
|
10
|
+
/**
|
|
11
|
+
* Build a fingerprint for a sequence of actions: tool names joined with " -> "
|
|
12
|
+
*/
|
|
13
|
+
private fingerprint;
|
|
14
|
+
/**
|
|
15
|
+
* Extract action sequence groups from a flat list of records.
|
|
16
|
+
*
|
|
17
|
+
* 1. Group records by agentSlug
|
|
18
|
+
* 2. Within each agent, group by runId to get per-run sequences
|
|
19
|
+
* 3. Fingerprint each run sequence (toolName chain)
|
|
20
|
+
* 4. Group runs with identical fingerprints
|
|
21
|
+
* 5. Filter by minSuccessCount, minAvgQualityScore, maxSequenceLength
|
|
22
|
+
*/
|
|
23
|
+
extract(allRecords: ActionRecord[]): ActionSequenceGroup[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=action-sequence-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-sequence-extractor.d.ts","sourceRoot":"","sources":["../../src/procedural/action-sequence-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtF,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAIlD;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE;CA6E3D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionSequenceExtractor — Groups action records into repeatable skill candidates.
|
|
3
|
+
*
|
|
4
|
+
* Part of Task 45 — Procedural Memory.
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
7
|
+
export class ActionSequenceExtractor {
|
|
8
|
+
config;
|
|
9
|
+
constructor(config = {}) {
|
|
10
|
+
this.config = { ...DEFAULT_EXTRACTION_CONFIG, ...config };
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build a fingerprint for a sequence of actions: tool names joined with " -> "
|
|
14
|
+
*/
|
|
15
|
+
fingerprint(records) {
|
|
16
|
+
return records.map((r) => r.toolName).join(' -> ');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract action sequence groups from a flat list of records.
|
|
20
|
+
*
|
|
21
|
+
* 1. Group records by agentSlug
|
|
22
|
+
* 2. Within each agent, group by runId to get per-run sequences
|
|
23
|
+
* 3. Fingerprint each run sequence (toolName chain)
|
|
24
|
+
* 4. Group runs with identical fingerprints
|
|
25
|
+
* 5. Filter by minSuccessCount, minAvgQualityScore, maxSequenceLength
|
|
26
|
+
*/
|
|
27
|
+
extract(allRecords) {
|
|
28
|
+
// Group by agentSlug
|
|
29
|
+
const byAgent = new Map();
|
|
30
|
+
for (const r of allRecords) {
|
|
31
|
+
const arr = byAgent.get(r.agentSlug) ?? [];
|
|
32
|
+
arr.push(r);
|
|
33
|
+
byAgent.set(r.agentSlug, arr);
|
|
34
|
+
}
|
|
35
|
+
const results = [];
|
|
36
|
+
for (const [agentSlug, records] of byAgent) {
|
|
37
|
+
// Group by runId
|
|
38
|
+
const byRun = new Map();
|
|
39
|
+
for (const r of records) {
|
|
40
|
+
const arr = byRun.get(r.runId) ?? [];
|
|
41
|
+
arr.push(r);
|
|
42
|
+
byRun.set(r.runId, arr);
|
|
43
|
+
}
|
|
44
|
+
// Sort each run's records by timestamp, compute fingerprint
|
|
45
|
+
const fingerprintGroups = new Map();
|
|
46
|
+
for (const [runId, runRecords] of byRun) {
|
|
47
|
+
const sorted = runRecords.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
48
|
+
// Skip sequences that exceed max length
|
|
49
|
+
if (sorted.length > this.config.maxSequenceLength)
|
|
50
|
+
continue;
|
|
51
|
+
const fp = this.fingerprint(sorted);
|
|
52
|
+
const group = fingerprintGroups.get(fp) ?? { sequences: [], runIds: [] };
|
|
53
|
+
group.sequences.push(sorted);
|
|
54
|
+
group.runIds.push(runId);
|
|
55
|
+
fingerprintGroups.set(fp, group);
|
|
56
|
+
}
|
|
57
|
+
// Filter and build result groups
|
|
58
|
+
for (const [fp, group] of fingerprintGroups) {
|
|
59
|
+
// Only successful runs count
|
|
60
|
+
const successfulSequences = group.sequences.filter((seq) => seq.every((r) => r.outcome === 'success'));
|
|
61
|
+
const successCount = successfulSequences.length;
|
|
62
|
+
if (successCount < this.config.minSuccessCount)
|
|
63
|
+
continue;
|
|
64
|
+
// Compute average quality score across all records in successful sequences
|
|
65
|
+
const allQualityScores = [];
|
|
66
|
+
for (const seq of successfulSequences) {
|
|
67
|
+
for (const r of seq) {
|
|
68
|
+
if (r.qualityScore !== undefined) {
|
|
69
|
+
allQualityScores.push(r.qualityScore);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const avgQualityScore = allQualityScores.length > 0
|
|
74
|
+
? allQualityScores.reduce((a, b) => a + b, 0) / allQualityScores.length
|
|
75
|
+
: 0;
|
|
76
|
+
if (avgQualityScore < this.config.minAvgQualityScore)
|
|
77
|
+
continue;
|
|
78
|
+
results.push({
|
|
79
|
+
agentSlug,
|
|
80
|
+
fingerprint: fp,
|
|
81
|
+
sequences: successfulSequences,
|
|
82
|
+
successCount,
|
|
83
|
+
avgQualityScore,
|
|
84
|
+
runIds: group.runIds.filter((_, i) => group.sequences[i].every((r) => r.outcome === 'success')),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return results;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=action-sequence-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-sequence-extractor.js","sourceRoot":"","sources":["../../src/procedural/action-sequence-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedural Memory — Learn from Successful Executions
|
|
3
|
+
*
|
|
4
|
+
* Barrel export for Task 45.
|
|
5
|
+
*
|
|
6
|
+
* @module @monomind/memory/procedural
|
|
7
|
+
*/
|
|
8
|
+
export type { ActionOutcome, ActionRecord, ExtractionConfig, SkillTrigger, LearnedSkill, ActionSequenceGroup, } from './types.js';
|
|
9
|
+
export { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
10
|
+
export { ActionRecordStore } from './action-record.js';
|
|
11
|
+
export { ActionSequenceExtractor } from './action-sequence-extractor.js';
|
|
12
|
+
export { LearnedSkillSerializer } from './learned-skill.js';
|
|
13
|
+
export { SkillRegistry } from './skill-registry.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedural Memory — Learn from Successful Executions
|
|
3
|
+
*
|
|
4
|
+
* Barrel export for Task 45.
|
|
5
|
+
*
|
|
6
|
+
* @module @monomind/memory/procedural
|
|
7
|
+
*/
|
|
8
|
+
export { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
9
|
+
export { ActionRecordStore } from './action-record.js';
|
|
10
|
+
export { ActionSequenceExtractor } from './action-sequence-extractor.js';
|
|
11
|
+
export { LearnedSkillSerializer } from './learned-skill.js';
|
|
12
|
+
export { SkillRegistry } from './skill-registry.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LearnedSkillSerializer — Creates and serializes LearnedSkill objects.
|
|
3
|
+
*
|
|
4
|
+
* Part of Task 45 — Procedural Memory.
|
|
5
|
+
*/
|
|
6
|
+
import type { ActionRecord, LearnedSkill } from './types.js';
|
|
7
|
+
export declare class LearnedSkillSerializer {
|
|
8
|
+
/**
|
|
9
|
+
* Create a new LearnedSkill from extracted data.
|
|
10
|
+
*/
|
|
11
|
+
static create(name: string, agentSlug: string, triggerPattern: string, actionSequence: ActionRecord[], successCount: number, avgQualityScore: number, sourceRunIds: string[]): LearnedSkill;
|
|
12
|
+
/**
|
|
13
|
+
* Serialize a LearnedSkill to a markdown string with YAML frontmatter.
|
|
14
|
+
*/
|
|
15
|
+
static toMarkdown(skill: LearnedSkill): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=learned-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learned-skill.d.ts","sourceRoot":"","sources":["../../src/procedural/learned-skill.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,sBAAsB;IACjC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,YAAY,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EAAE,GACrB,YAAY;IAqBf;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;CAsC/C"}
|