swarm-engine 1.3.0 → 1.38.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 +45 -7
- package/dist/cli/commands/memory.js +117 -0
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/core/types.d.ts +30 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +37 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +97 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/runtime/agent-runner.d.ts +10 -0
- package/dist/runtime/agent-runner.d.ts.map +1 -1
- package/dist/runtime/agent-runner.js +71 -3
- package/dist/runtime/agent-runner.js.map +1 -1
- package/dist/runtime/engine.d.ts +18 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +306 -2
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/execution-graph.d.ts +86 -0
- package/dist/runtime/execution-graph.d.ts.map +1 -0
- package/dist/runtime/execution-graph.js +441 -0
- package/dist/runtime/execution-graph.js.map +1 -0
- package/dist/runtime/graph-adversarial.d.ts +88 -0
- package/dist/runtime/graph-adversarial.d.ts.map +1 -0
- package/dist/runtime/graph-adversarial.js +378 -0
- package/dist/runtime/graph-adversarial.js.map +1 -0
- package/dist/runtime/graph-analyzer.d.ts +106 -0
- package/dist/runtime/graph-analyzer.d.ts.map +1 -0
- package/dist/runtime/graph-analyzer.js +321 -0
- package/dist/runtime/graph-analyzer.js.map +1 -0
- package/dist/runtime/graph-causal.d.ts +91 -0
- package/dist/runtime/graph-causal.d.ts.map +1 -0
- package/dist/runtime/graph-causal.js +292 -0
- package/dist/runtime/graph-causal.js.map +1 -0
- package/dist/runtime/graph-context-router.d.ts +73 -0
- package/dist/runtime/graph-context-router.d.ts.map +1 -0
- package/dist/runtime/graph-context-router.js +162 -0
- package/dist/runtime/graph-context-router.js.map +1 -0
- package/dist/runtime/graph-discovery.d.ts +71 -0
- package/dist/runtime/graph-discovery.d.ts.map +1 -0
- package/dist/runtime/graph-discovery.js +367 -0
- package/dist/runtime/graph-discovery.js.map +1 -0
- package/dist/runtime/graph-dropout.d.ts +59 -0
- package/dist/runtime/graph-dropout.d.ts.map +1 -0
- package/dist/runtime/graph-dropout.js +196 -0
- package/dist/runtime/graph-dropout.js.map +1 -0
- package/dist/runtime/graph-embeddings.d.ts +58 -0
- package/dist/runtime/graph-embeddings.d.ts.map +1 -0
- package/dist/runtime/graph-embeddings.js +301 -0
- package/dist/runtime/graph-embeddings.js.map +1 -0
- package/dist/runtime/graph-feedback.d.ts +30 -0
- package/dist/runtime/graph-feedback.d.ts.map +1 -0
- package/dist/runtime/graph-feedback.js +82 -0
- package/dist/runtime/graph-feedback.js.map +1 -0
- package/dist/runtime/graph-gnn.d.ts +120 -0
- package/dist/runtime/graph-gnn.d.ts.map +1 -0
- package/dist/runtime/graph-gnn.js +524 -0
- package/dist/runtime/graph-gnn.js.map +1 -0
- package/dist/runtime/graph-learner.d.ts +70 -0
- package/dist/runtime/graph-learner.d.ts.map +1 -0
- package/dist/runtime/graph-learner.js +265 -0
- package/dist/runtime/graph-learner.js.map +1 -0
- package/dist/runtime/graph-meta-adversarial.d.ts +113 -0
- package/dist/runtime/graph-meta-adversarial.d.ts.map +1 -0
- package/dist/runtime/graph-meta-adversarial.js +366 -0
- package/dist/runtime/graph-meta-adversarial.js.map +1 -0
- package/dist/runtime/graph-meta.d.ts +115 -0
- package/dist/runtime/graph-meta.d.ts.map +1 -0
- package/dist/runtime/graph-meta.js +437 -0
- package/dist/runtime/graph-meta.js.map +1 -0
- package/dist/runtime/graph-self-evolve.d.ts +92 -0
- package/dist/runtime/graph-self-evolve.d.ts.map +1 -0
- package/dist/runtime/graph-self-evolve.js +422 -0
- package/dist/runtime/graph-self-evolve.js.map +1 -0
- package/dist/runtime/graph-synthesis.d.ts +47 -0
- package/dist/runtime/graph-synthesis.d.ts.map +1 -0
- package/dist/runtime/graph-synthesis.js +232 -0
- package/dist/runtime/graph-synthesis.js.map +1 -0
- package/dist/runtime/graph-trajectory.d.ts +88 -0
- package/dist/runtime/graph-trajectory.d.ts.map +1 -0
- package/dist/runtime/graph-trajectory.js +339 -0
- package/dist/runtime/graph-trajectory.js.map +1 -0
- package/dist/runtime/learning-engine.d.ts +12 -0
- package/dist/runtime/learning-engine.d.ts.map +1 -1
- package/dist/runtime/learning-engine.js +64 -0
- package/dist/runtime/learning-engine.js.map +1 -1
- package/package.json +2 -2
- package/skills/swarm-output-style/SKILL.md +71 -33
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
// ─── Stop Words ──────────────────────────────────────────────────
|
|
2
|
+
const STOP_WORDS = new Set([
|
|
3
|
+
'the', 'a', 'an', 'to', 'in', 'for', 'of', 'with', 'and', 'or', 'is', 'are', 'was', 'were',
|
|
4
|
+
'be', 'been', 'it', 'its', 'this', 'that', 'by', 'from', 'on', 'at', 'as', 'but', 'not', 'no',
|
|
5
|
+
'do', 'does', 'did', 'have', 'has', 'had', 'will', 'would', 'could', 'should', 'can', 'may',
|
|
6
|
+
'might', 'shall', 'must', 'need',
|
|
7
|
+
]);
|
|
8
|
+
// ─── MetaPatternSelector ─────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* MAML-inspired few-shot pattern selection using TF-IDF + logistic regression.
|
|
11
|
+
* Learns from past orchestration outcomes to recommend the best pattern for new tasks.
|
|
12
|
+
* Persists state to the execution knowledge graph for cross-run learning.
|
|
13
|
+
*/
|
|
14
|
+
export class MetaPatternSelector {
|
|
15
|
+
graph;
|
|
16
|
+
tfidfModel = null;
|
|
17
|
+
patternModels = new Map();
|
|
18
|
+
examples = [];
|
|
19
|
+
constructor(graph) {
|
|
20
|
+
this.graph = graph;
|
|
21
|
+
this.loadFromGraph();
|
|
22
|
+
}
|
|
23
|
+
// ─── Text Processing ──────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Tokenize text: lowercase, replace non-word chars with spaces,
|
|
26
|
+
* split on whitespace, filter tokens ≤ 2 chars, remove stop words.
|
|
27
|
+
*/
|
|
28
|
+
static tokenize(text) {
|
|
29
|
+
return text
|
|
30
|
+
.toLowerCase()
|
|
31
|
+
.replace(/[^\w]/g, ' ')
|
|
32
|
+
.split(/\s+/)
|
|
33
|
+
.filter((t) => t.length > 2 && !STOP_WORDS.has(t));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build TF-IDF model from a document corpus.
|
|
37
|
+
* IDF uses smoothed formula: log((N+1)/(df+1)) + 1
|
|
38
|
+
* Vocabulary capped at maxVocab terms, sorted by document frequency.
|
|
39
|
+
*/
|
|
40
|
+
static buildTfIdfModel(documents, maxVocab = 500) {
|
|
41
|
+
const N = documents.length;
|
|
42
|
+
const tokenizedDocs = documents.map((d) => MetaPatternSelector.tokenize(d));
|
|
43
|
+
// Count document frequency for each term
|
|
44
|
+
const dfMap = new Map();
|
|
45
|
+
for (const tokens of tokenizedDocs) {
|
|
46
|
+
const unique = new Set(tokens);
|
|
47
|
+
for (const token of unique) {
|
|
48
|
+
dfMap.set(token, (dfMap.get(token) ?? 0) + 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Sort by document frequency (descending), cap at maxVocab
|
|
52
|
+
const sorted = [...dfMap.entries()]
|
|
53
|
+
.sort((a, b) => b[1] - a[1])
|
|
54
|
+
.slice(0, maxVocab);
|
|
55
|
+
const vocabulary = new Map();
|
|
56
|
+
const idf = [];
|
|
57
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
58
|
+
const [word, df] = sorted[i];
|
|
59
|
+
vocabulary.set(word, i);
|
|
60
|
+
idf.push(Math.log((N + 1) / (df + 1)) + 1);
|
|
61
|
+
}
|
|
62
|
+
return { vocabulary, idf, documentCount: N };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Vectorize a single text against the TF-IDF model.
|
|
66
|
+
* Returns L2-normalized vector.
|
|
67
|
+
*/
|
|
68
|
+
static vectorize(model, text) {
|
|
69
|
+
const tokens = MetaPatternSelector.tokenize(text);
|
|
70
|
+
const vec = new Array(model.vocabulary.size).fill(0);
|
|
71
|
+
// Term frequency
|
|
72
|
+
const tf = new Map();
|
|
73
|
+
for (const token of tokens) {
|
|
74
|
+
tf.set(token, (tf.get(token) ?? 0) + 1);
|
|
75
|
+
}
|
|
76
|
+
// TF-IDF
|
|
77
|
+
for (const [word, count] of tf) {
|
|
78
|
+
const idx = model.vocabulary.get(word);
|
|
79
|
+
if (idx !== undefined) {
|
|
80
|
+
vec[idx] = count * model.idf[idx];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// L2 normalize
|
|
84
|
+
const magnitude = Math.sqrt(vec.reduce((sum, v) => sum + v * v, 0));
|
|
85
|
+
if (magnitude > 0) {
|
|
86
|
+
for (let i = 0; i < vec.length; i++) {
|
|
87
|
+
vec[i] /= magnitude;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return vec;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Cosine similarity between two vectors.
|
|
94
|
+
* Returns 0 if either vector has zero magnitude.
|
|
95
|
+
*/
|
|
96
|
+
static cosineSimilarity(a, b) {
|
|
97
|
+
const len = Math.min(a.length, b.length);
|
|
98
|
+
let dot = 0;
|
|
99
|
+
let magA = 0;
|
|
100
|
+
let magB = 0;
|
|
101
|
+
for (let i = 0; i < len; i++) {
|
|
102
|
+
dot += a[i] * b[i];
|
|
103
|
+
magA += a[i] * a[i];
|
|
104
|
+
magB += b[i] * b[i];
|
|
105
|
+
}
|
|
106
|
+
const denom = Math.sqrt(magA) * Math.sqrt(magB);
|
|
107
|
+
return denom === 0 ? 0 : dot / denom;
|
|
108
|
+
}
|
|
109
|
+
// ─── Feature Engineering ──────────────────────────────────────
|
|
110
|
+
/**
|
|
111
|
+
* Build full feature vector: [tfidf..., log(fileCount+1), log(totalLines+1), log(numTestFiles+1), hasReviewPhase ? 1 : 0]
|
|
112
|
+
*/
|
|
113
|
+
buildFeatureVector(taskDescription, context) {
|
|
114
|
+
// Rebuild TF-IDF model if needed
|
|
115
|
+
if (!this.tfidfModel) {
|
|
116
|
+
const docs = this.examples.length > 0
|
|
117
|
+
? this.getStoredTaskDescriptions()
|
|
118
|
+
: [taskDescription];
|
|
119
|
+
// Only build if we actually have documents with tokens
|
|
120
|
+
if (docs.length > 0) {
|
|
121
|
+
this.tfidfModel = MetaPatternSelector.buildTfIdfModel(docs);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const tfidfVec = this.tfidfModel
|
|
125
|
+
? MetaPatternSelector.vectorize(this.tfidfModel, taskDescription)
|
|
126
|
+
: [];
|
|
127
|
+
// Contextual features
|
|
128
|
+
const fileCount = context?.fileCount ?? 0;
|
|
129
|
+
const totalLines = context?.totalLines ?? 0;
|
|
130
|
+
const numTestFiles = context?.numTestFiles ?? 0;
|
|
131
|
+
const hasReview = context?.hasReviewPhase ? 1 : 0;
|
|
132
|
+
return [
|
|
133
|
+
...tfidfVec,
|
|
134
|
+
Math.log(fileCount + 1),
|
|
135
|
+
Math.log(totalLines + 1),
|
|
136
|
+
Math.log(numTestFiles + 1),
|
|
137
|
+
hasReview,
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
// ─── Logistic Regression ──────────────────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* Predict success probability: σ(w·x + b)
|
|
143
|
+
* Sigmoid input clamped to [-500, 500] for numerical stability.
|
|
144
|
+
*/
|
|
145
|
+
predict(model, features) {
|
|
146
|
+
let z = model.bias;
|
|
147
|
+
const len = Math.min(model.weights.length, features.length);
|
|
148
|
+
for (let i = 0; i < len; i++) {
|
|
149
|
+
z += model.weights[i] * features[i];
|
|
150
|
+
}
|
|
151
|
+
// Clamp to avoid overflow
|
|
152
|
+
z = Math.max(-500, Math.min(500, z));
|
|
153
|
+
return 1 / (1 + Math.exp(-z));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update model weights with one example via online SGD.
|
|
157
|
+
* error = predict(features) - label
|
|
158
|
+
* w[i] -= lr * (error * features[i] + lambda * w[i])
|
|
159
|
+
* bias -= lr * error
|
|
160
|
+
*/
|
|
161
|
+
updateModel(model, features, label) {
|
|
162
|
+
const prediction = this.predict(model, features);
|
|
163
|
+
const error = prediction - label;
|
|
164
|
+
const len = Math.min(model.weights.length, features.length);
|
|
165
|
+
for (let i = 0; i < len; i++) {
|
|
166
|
+
model.weights[i] -= model.learnRate * (error * features[i] + model.lambda * model.weights[i]);
|
|
167
|
+
}
|
|
168
|
+
model.bias -= model.learnRate * error;
|
|
169
|
+
model.totalExamples++;
|
|
170
|
+
if (label === 1)
|
|
171
|
+
model.positiveExamples++;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* MAML inner loop: adapt model to new task using K most similar historical examples.
|
|
175
|
+
* 1. Find K most similar examples by cosine similarity on feature vectors
|
|
176
|
+
* 2. Clone the base model (deep copy weights)
|
|
177
|
+
* 3. Run K gradient steps on those examples with inner LR=0.05
|
|
178
|
+
* 4. Return adapted model
|
|
179
|
+
*/
|
|
180
|
+
adaptToNewTask(baseModel, newTaskFeatures, K = 3) {
|
|
181
|
+
// Find K most similar examples for this pattern
|
|
182
|
+
const patternExamples = this.examples.filter((e) => e.pattern === baseModel.pattern);
|
|
183
|
+
const scored = patternExamples.map((ex) => ({
|
|
184
|
+
example: ex,
|
|
185
|
+
similarity: MetaPatternSelector.cosineSimilarity(newTaskFeatures, ex.features),
|
|
186
|
+
}));
|
|
187
|
+
scored.sort((a, b) => b.similarity - a.similarity);
|
|
188
|
+
const topK = scored.slice(0, K);
|
|
189
|
+
// Deep clone the base model
|
|
190
|
+
const adapted = {
|
|
191
|
+
pattern: baseModel.pattern,
|
|
192
|
+
weights: [...baseModel.weights],
|
|
193
|
+
bias: baseModel.bias,
|
|
194
|
+
learnRate: 0.05, // Inner loop learning rate
|
|
195
|
+
lambda: baseModel.lambda,
|
|
196
|
+
totalExamples: baseModel.totalExamples,
|
|
197
|
+
positiveExamples: baseModel.positiveExamples,
|
|
198
|
+
};
|
|
199
|
+
// Run gradient steps on the K most similar examples
|
|
200
|
+
for (const { example } of topK) {
|
|
201
|
+
this.updateModel(adapted, example.features, example.label);
|
|
202
|
+
}
|
|
203
|
+
return adapted;
|
|
204
|
+
}
|
|
205
|
+
// ─── Pattern Selection ────────────────────────────────────────
|
|
206
|
+
/**
|
|
207
|
+
* Main entry point: select the best pattern for a task.
|
|
208
|
+
* For each known pattern, predicts success probability using adapted models.
|
|
209
|
+
* Returns the highest-confidence pattern with alternatives.
|
|
210
|
+
*/
|
|
211
|
+
selectPattern(taskDescription, context) {
|
|
212
|
+
const features = this.buildFeatureVector(taskDescription, context);
|
|
213
|
+
// If we have no data, rebuild TF-IDF from stored descriptions
|
|
214
|
+
if (!this.tfidfModel && this.examples.length > 0) {
|
|
215
|
+
const docs = this.getStoredTaskDescriptions();
|
|
216
|
+
if (docs.length > 0) {
|
|
217
|
+
this.tfidfModel = MetaPatternSelector.buildTfIdfModel(docs);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Collect known patterns from graph and from examples
|
|
221
|
+
const knownPatterns = this.getKnownPatterns();
|
|
222
|
+
if (knownPatterns.length === 0) {
|
|
223
|
+
return {
|
|
224
|
+
pattern: 'hybrid',
|
|
225
|
+
confidence: 0.5,
|
|
226
|
+
reasoning: 'No historical data available; defaulting to hybrid pattern',
|
|
227
|
+
alternatives: [],
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// Score each pattern
|
|
231
|
+
const scores = [];
|
|
232
|
+
for (const pattern of knownPatterns) {
|
|
233
|
+
let model = this.patternModels.get(pattern);
|
|
234
|
+
if (!model) {
|
|
235
|
+
model = this.createPatternModel(pattern, features.length);
|
|
236
|
+
this.patternModels.set(pattern, model);
|
|
237
|
+
}
|
|
238
|
+
// Ensure weights match feature vector length
|
|
239
|
+
this.ensureWeightSize(model, features.length);
|
|
240
|
+
let prediction;
|
|
241
|
+
const patternExampleCount = this.examples.filter((e) => e.pattern === pattern).length;
|
|
242
|
+
if (patternExampleCount >= 3) {
|
|
243
|
+
const adapted = this.adaptToNewTask(model, features);
|
|
244
|
+
prediction = this.predict(adapted, features);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
prediction = this.predict(model, features);
|
|
248
|
+
}
|
|
249
|
+
scores.push({ pattern, confidence: prediction });
|
|
250
|
+
}
|
|
251
|
+
// Sort by confidence descending
|
|
252
|
+
scores.sort((a, b) => b.confidence - a.confidence);
|
|
253
|
+
const best = scores[0];
|
|
254
|
+
const alternatives = scores.slice(1).map((s) => ({ pattern: s.pattern, confidence: s.confidence }));
|
|
255
|
+
const exampleCount = this.examples.filter((e) => e.pattern === best.pattern).length;
|
|
256
|
+
const reasoning = exampleCount >= 3
|
|
257
|
+
? `MAML-adapted prediction from ${exampleCount} historical examples`
|
|
258
|
+
: exampleCount > 0
|
|
259
|
+
? `Base model prediction from ${exampleCount} examples (< 3, no adaptation)`
|
|
260
|
+
: 'Cold start — no examples for this pattern yet';
|
|
261
|
+
return {
|
|
262
|
+
pattern: best.pattern,
|
|
263
|
+
confidence: best.confidence,
|
|
264
|
+
reasoning,
|
|
265
|
+
alternatives,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
// ─── Online Learning ──────────────────────────────────────────
|
|
269
|
+
/**
|
|
270
|
+
* Record orchestration outcome for online learning.
|
|
271
|
+
* Fetches task description and pattern from the graph, builds features,
|
|
272
|
+
* updates the pattern model, and stores the example.
|
|
273
|
+
*/
|
|
274
|
+
updateFromOutcome(orchestrationId, success) {
|
|
275
|
+
const orchNode = this.graph.getNode(orchestrationId);
|
|
276
|
+
if (!orchNode)
|
|
277
|
+
return;
|
|
278
|
+
const taskDescription = orchNode.properties.taskDescription || orchNode.label;
|
|
279
|
+
const pattern = orchNode.properties.pattern;
|
|
280
|
+
if (!pattern)
|
|
281
|
+
return;
|
|
282
|
+
const features = this.buildFeatureVector(taskDescription, {
|
|
283
|
+
fileCount: orchNode.properties.fileCount,
|
|
284
|
+
totalLines: orchNode.properties.totalLines,
|
|
285
|
+
numTestFiles: orchNode.properties.numTestFiles,
|
|
286
|
+
hasReviewPhase: orchNode.properties.hasReviewPhase,
|
|
287
|
+
});
|
|
288
|
+
const label = success ? 1 : 0;
|
|
289
|
+
// Store example
|
|
290
|
+
const example = { features, label, pattern };
|
|
291
|
+
this.examples.push(example);
|
|
292
|
+
// Update the pattern model
|
|
293
|
+
let model = this.patternModels.get(pattern);
|
|
294
|
+
if (!model) {
|
|
295
|
+
model = this.createPatternModel(pattern, features.length);
|
|
296
|
+
this.patternModels.set(pattern, model);
|
|
297
|
+
}
|
|
298
|
+
this.ensureWeightSize(model, features.length);
|
|
299
|
+
this.updateModel(model, features, label);
|
|
300
|
+
// Rebuild TF-IDF with the new document
|
|
301
|
+
const docs = this.getStoredTaskDescriptions();
|
|
302
|
+
docs.push(taskDescription);
|
|
303
|
+
this.tfidfModel = MetaPatternSelector.buildTfIdfModel(docs);
|
|
304
|
+
// Persist
|
|
305
|
+
this.saveToGraph();
|
|
306
|
+
}
|
|
307
|
+
// ─── Persistence ──────────────────────────────────────────────
|
|
308
|
+
saveToGraph() {
|
|
309
|
+
// Store TF-IDF model as a heuristic node
|
|
310
|
+
if (this.tfidfModel) {
|
|
311
|
+
const vocabObj = {};
|
|
312
|
+
for (const [word, idx] of this.tfidfModel.vocabulary) {
|
|
313
|
+
vocabObj[word] = idx;
|
|
314
|
+
}
|
|
315
|
+
this.graph.addNode({
|
|
316
|
+
id: 'meta:tfidf',
|
|
317
|
+
type: 'heuristic',
|
|
318
|
+
label: 'MetaPatternSelector TF-IDF Model',
|
|
319
|
+
properties: {
|
|
320
|
+
vocabulary: vocabObj,
|
|
321
|
+
idf: this.tfidfModel.idf,
|
|
322
|
+
documentCount: this.tfidfModel.documentCount,
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
// Store pattern models
|
|
327
|
+
for (const [pattern, model] of this.patternModels) {
|
|
328
|
+
this.graph.addNode({
|
|
329
|
+
id: `meta:pattern:${pattern}`,
|
|
330
|
+
type: 'heuristic',
|
|
331
|
+
label: `MetaPatternSelector model: ${pattern}`,
|
|
332
|
+
properties: {
|
|
333
|
+
pattern: model.pattern,
|
|
334
|
+
weights: model.weights,
|
|
335
|
+
bias: model.bias,
|
|
336
|
+
learnRate: model.learnRate,
|
|
337
|
+
lambda: model.lambda,
|
|
338
|
+
totalExamples: model.totalExamples,
|
|
339
|
+
positiveExamples: model.positiveExamples,
|
|
340
|
+
},
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
// Store examples (capped to last 1000 to avoid bloat)
|
|
344
|
+
const capped = this.examples.slice(-1000);
|
|
345
|
+
this.graph.addNode({
|
|
346
|
+
id: 'meta:examples',
|
|
347
|
+
type: 'heuristic',
|
|
348
|
+
label: 'MetaPatternSelector examples',
|
|
349
|
+
properties: {
|
|
350
|
+
examples: capped,
|
|
351
|
+
},
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
loadFromGraph() {
|
|
355
|
+
// Load TF-IDF model
|
|
356
|
+
const tfidfNode = this.graph.getNode('meta:tfidf');
|
|
357
|
+
if (tfidfNode) {
|
|
358
|
+
const vocabObj = tfidfNode.properties.vocabulary;
|
|
359
|
+
const idf = tfidfNode.properties.idf;
|
|
360
|
+
const documentCount = tfidfNode.properties.documentCount;
|
|
361
|
+
if (vocabObj && idf && documentCount !== undefined) {
|
|
362
|
+
const vocabulary = new Map();
|
|
363
|
+
for (const [word, idx] of Object.entries(vocabObj)) {
|
|
364
|
+
vocabulary.set(word, idx);
|
|
365
|
+
}
|
|
366
|
+
this.tfidfModel = { vocabulary, idf, documentCount };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Load pattern models
|
|
370
|
+
const heuristicNodes = this.graph.getNodesByType('heuristic');
|
|
371
|
+
for (const node of heuristicNodes) {
|
|
372
|
+
if (node.id.startsWith('meta:pattern:')) {
|
|
373
|
+
const props = node.properties;
|
|
374
|
+
if (props.pattern && props.weights) {
|
|
375
|
+
this.patternModels.set(props.pattern, {
|
|
376
|
+
pattern: props.pattern,
|
|
377
|
+
weights: props.weights,
|
|
378
|
+
bias: props.bias ?? 0,
|
|
379
|
+
learnRate: props.learnRate ?? 0.01,
|
|
380
|
+
lambda: props.lambda ?? 0.001,
|
|
381
|
+
totalExamples: props.totalExamples ?? 0,
|
|
382
|
+
positiveExamples: props.positiveExamples ?? 0,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Load examples
|
|
388
|
+
const examplesNode = this.graph.getNode('meta:examples');
|
|
389
|
+
if (examplesNode) {
|
|
390
|
+
const stored = examplesNode.properties.examples;
|
|
391
|
+
if (Array.isArray(stored)) {
|
|
392
|
+
this.examples = stored;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// ─── Helpers ──────────────────────────────────────────────────
|
|
397
|
+
createPatternModel(pattern, featureSize) {
|
|
398
|
+
return {
|
|
399
|
+
pattern,
|
|
400
|
+
weights: new Array(featureSize).fill(0),
|
|
401
|
+
bias: 0,
|
|
402
|
+
learnRate: 0.01,
|
|
403
|
+
lambda: 0.001,
|
|
404
|
+
totalExamples: 0,
|
|
405
|
+
positiveExamples: 0,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
ensureWeightSize(model, size) {
|
|
409
|
+
while (model.weights.length < size) {
|
|
410
|
+
model.weights.push(0);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
getKnownPatterns() {
|
|
414
|
+
const patterns = new Set();
|
|
415
|
+
// From pattern models
|
|
416
|
+
for (const pattern of this.patternModels.keys()) {
|
|
417
|
+
patterns.add(pattern);
|
|
418
|
+
}
|
|
419
|
+
// From examples
|
|
420
|
+
for (const ex of this.examples) {
|
|
421
|
+
patterns.add(ex.pattern);
|
|
422
|
+
}
|
|
423
|
+
// From graph pattern nodes
|
|
424
|
+
const patternNodes = this.graph.getNodesByType('pattern');
|
|
425
|
+
for (const node of patternNodes) {
|
|
426
|
+
patterns.add(node.label);
|
|
427
|
+
}
|
|
428
|
+
return [...patterns];
|
|
429
|
+
}
|
|
430
|
+
getStoredTaskDescriptions() {
|
|
431
|
+
const orchNodes = this.graph.getNodesByType('orchestration');
|
|
432
|
+
return orchNodes
|
|
433
|
+
.map((n) => n.properties.taskDescription || n.label)
|
|
434
|
+
.filter((desc) => desc && desc.length > 0);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=graph-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-meta.js","sourceRoot":"","sources":["../../src/runtime/graph-meta.ts"],"names":[],"mappings":"AAEA,oEAAoE;AAEpE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAC1F,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;IAC7F,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK;IAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CACjC,CAAC,CAAC;AAiCH,oEAAoE;AAEpE;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAKV;IAJZ,UAAU,GAAsB,IAAI,CAAC;IACrC,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;IACrD,QAAQ,GAAkB,EAAE,CAAC;IAErC,YAAoB,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;QACvC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,iEAAiE;IAEjE;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAO,IAAI;aACR,WAAW,EAAE;aACb,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,SAAmB,EAAE,QAAQ,GAAG,GAAG;QACxD,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAC3B,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,yCAAyC;QACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEtB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,IAAY;QAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErD,iBAAiB;QACjB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,SAAS;QACT,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAW,EAAE,CAAW;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;IACvC,CAAC;IAED,iEAAiE;IAEjE;;OAEG;IACH,kBAAkB,CAChB,eAAuB,EACvB,OAAsG;QAEtG,iCAAiC;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAClC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACtB,uDAAuD;YACvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;YAC9B,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;YACjE,CAAC,CAAC,EAAE,CAAC;QAEP,sBAAsB;QACtB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,OAAO;YACL,GAAG,QAAQ;YACX,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;YAC1B,SAAS;SACV,CAAC;IACJ,CAAC;IAED,iEAAiE;IAEjE;;;OAGG;IACH,OAAO,CAAC,KAAmB,EAAE,QAAkB;QAC7C,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,0BAA0B;QAC1B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAmB,EAAE,QAAkB,EAAE,KAAY;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAEtC,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,KAAK,KAAK,CAAC;YAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,SAAuB,EAAE,eAAyB,EAAE,CAAC,GAAG,CAAC;QACtE,gDAAgD;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC;SAC/E,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhC,4BAA4B;QAC5B,MAAM,OAAO,GAAiB;YAC5B,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,IAAI,EAAE,2BAA2B;YAC5C,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;SAC7C,CAAC;QAEF,oDAAoD;QACpD,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iEAAiE;IAEjE;;;;OAIG;IACH,aAAa,CACX,eAAuB,EACvB,OAAsG;QAEtG,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEnE,8DAA8D;QAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,GAAG;gBACf,SAAS,EAAE,4DAA4D;gBACvE,YAAY,EAAE,EAAE;aACjB,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,MAAM,MAAM,GAAmD,EAAE,CAAC;QAElE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC1D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,6CAA6C;YAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE9C,IAAI,UAAkB,CAAC;YACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YAEtF,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACrD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAEpG,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACpF,MAAM,SAAS,GAAG,YAAY,IAAI,CAAC;YACjC,CAAC,CAAC,gCAAgC,YAAY,sBAAsB;YACpE,CAAC,CAAC,YAAY,GAAG,CAAC;gBAChB,CAAC,CAAC,8BAA8B,YAAY,gCAAgC;gBAC5E,CAAC,CAAC,+CAA+C,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS;YACT,YAAY;SACb,CAAC;IACJ,CAAC;IAED,iEAAiE;IAEjE;;;;OAIG;IACH,iBAAiB,CAAC,eAAuB,EAAE,OAAgB;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,eAAe,GAAI,QAAQ,CAAC,UAAU,CAAC,eAA0B,IAAI,QAAQ,CAAC,KAAK,CAAC;QAC1F,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAiB,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;YACxD,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,SAA+B;YAC9D,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAgC;YAChE,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,YAAkC;YACpE,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAqC;SAC1E,CAAC,CAAC;QAEH,MAAM,KAAK,GAAU,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,gBAAgB;QAChB,MAAM,OAAO,GAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,2BAA2B;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEzC,uCAAuC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5D,UAAU;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,iEAAiE;IAEzD,WAAW;QACjB,yCAAyC;QACzC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjB,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,kCAAkC;gBACzC,UAAU,EAAE;oBACV,UAAU,EAAE,QAAQ;oBACpB,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG;oBACxB,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;iBAC7C;aACF,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjB,EAAE,EAAE,gBAAgB,OAAO,EAAE;gBAC7B,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,8BAA8B,OAAO,EAAE;gBAC9C,UAAU,EAAE;oBACV,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;iBACzC;aACF,CAAC,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACjB,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,8BAA8B;YACrC,UAAU,EAAE;gBACV,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,UAAgD,CAAC;YACvF,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,GAA2B,CAAC;YAC7D,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,aAAmC,CAAC;YAE/E,IAAI,QAAQ,IAAI,GAAG,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;gBAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC9B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAiB,EAAE;wBAC9C,OAAO,EAAE,KAAK,CAAC,OAAiB;wBAChC,OAAO,EAAE,KAAK,CAAC,OAAmB;wBAClC,IAAI,EAAG,KAAK,CAAC,IAAe,IAAI,CAAC;wBACjC,SAAS,EAAG,KAAK,CAAC,SAAoB,IAAI,IAAI;wBAC9C,MAAM,EAAG,KAAK,CAAC,MAAiB,IAAI,KAAK;wBACzC,aAAa,EAAG,KAAK,CAAC,aAAwB,IAAI,CAAC;wBACnD,gBAAgB,EAAG,KAAK,CAAC,gBAA2B,IAAI,CAAC;qBAC1D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,QAAqC,CAAC;YAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IAEzD,kBAAkB,CAAC,OAAe,EAAE,WAAmB;QAC7D,OAAO;YACL,OAAO;YACP,OAAO,EAAE,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,CAAC;YAChB,gBAAgB,EAAE,CAAC;SACpB,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,KAAmB,EAAE,IAAY;QACxD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACnC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,sBAAsB;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,gBAAgB;QAChB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvB,CAAC;IAEO,yBAAyB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC7D,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,UAAU,CAAC,eAA0B,IAAI,CAAC,CAAC,KAAK,CAAC;aAC/D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { ExecutionGraph } from './execution-graph.js';
|
|
2
|
+
export interface EvolvedRule {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
condition: {
|
|
7
|
+
phaseKind?: string;
|
|
8
|
+
confidenceBelow?: number;
|
|
9
|
+
confidenceAbove?: number;
|
|
10
|
+
tokenRatioAbove?: number;
|
|
11
|
+
budgetRemainingBelow?: number;
|
|
12
|
+
hasBlockers?: boolean;
|
|
13
|
+
};
|
|
14
|
+
action: {
|
|
15
|
+
upgradeModel?: boolean;
|
|
16
|
+
downgradeModel?: boolean;
|
|
17
|
+
skipPhase?: boolean;
|
|
18
|
+
addPhase?: string;
|
|
19
|
+
};
|
|
20
|
+
confidence: number;
|
|
21
|
+
evidenceCount: number;
|
|
22
|
+
successRate: number;
|
|
23
|
+
}
|
|
24
|
+
export interface RuleProposal {
|
|
25
|
+
rule: EvolvedRule;
|
|
26
|
+
backtestedImprovement: number;
|
|
27
|
+
confidence: number;
|
|
28
|
+
evidence: string;
|
|
29
|
+
}
|
|
30
|
+
export interface BacktestResult {
|
|
31
|
+
improvement: number;
|
|
32
|
+
appliedCount: number;
|
|
33
|
+
wouldHaveHelped: number;
|
|
34
|
+
wouldHaveHurt: number;
|
|
35
|
+
falsePositiveRate: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyzes historical execution traces to propose improved replanning rules,
|
|
39
|
+
* backtests them against historical data, and evolves scoring weights based
|
|
40
|
+
* on user feedback.
|
|
41
|
+
*
|
|
42
|
+
* Rules are persisted as 'heuristic' nodes in the execution graph with id
|
|
43
|
+
* prefix 'rule:'. Feedback adjusts confidence: accepted → +0.1, rejected → -0.15.
|
|
44
|
+
*/
|
|
45
|
+
export declare class RuleEvolver {
|
|
46
|
+
private graph;
|
|
47
|
+
constructor(graph: ExecutionGraph);
|
|
48
|
+
/**
|
|
49
|
+
* Analyze historical orchestration traces and propose new replanning rules.
|
|
50
|
+
*
|
|
51
|
+
* 1. Extract features from all orchestrations via BFS.
|
|
52
|
+
* 2. Find patterns in failures: low-confidence phases, high token usage, blockers.
|
|
53
|
+
* 3. Generate candidate rules from observed failure patterns.
|
|
54
|
+
* 4. Backtest each candidate against all historical traces.
|
|
55
|
+
* 5. Return proposals sorted by improvement, filtered by confidence > 0.3.
|
|
56
|
+
*/
|
|
57
|
+
evolveRules(traceCount?: number): RuleProposal[];
|
|
58
|
+
/**
|
|
59
|
+
* Backtest a single rule against all historical orchestrations.
|
|
60
|
+
*
|
|
61
|
+
* For each orchestration, extracts phase features via BFS. If the rule
|
|
62
|
+
* condition matches any phase, simulates the action:
|
|
63
|
+
* - upgradeModel on failed orch → wouldHaveHelped (optimistic)
|
|
64
|
+
* - upgradeModel on successful orch → wouldHaveHurt (false positive)
|
|
65
|
+
* - skipPhase on failed orch → wouldHaveHelped (conservative: saves tokens)
|
|
66
|
+
* - downgradeModel on successful orch → wouldHaveHelped (saves cost)
|
|
67
|
+
* - downgradeModel on failed orch → wouldHaveHurt
|
|
68
|
+
*/
|
|
69
|
+
backtestRule(rule: EvolvedRule): BacktestResult;
|
|
70
|
+
/**
|
|
71
|
+
* Record user accept/reject of a rule proposal.
|
|
72
|
+
* Accepted → confidence +0.1 (capped at 1.0)
|
|
73
|
+
* Rejected → confidence -0.15 (floored at 0.0)
|
|
74
|
+
*/
|
|
75
|
+
recordFeedback(ruleId: string, accepted: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get all evolved rules currently stored in the graph.
|
|
78
|
+
* Loads heuristic nodes with id prefix 'rule:' and deserializes them.
|
|
79
|
+
*/
|
|
80
|
+
getActiveRules(): EvolvedRule[];
|
|
81
|
+
private extractFeatures;
|
|
82
|
+
private inferPhaseConfidence;
|
|
83
|
+
private inferPhaseTokens;
|
|
84
|
+
private inferPhaseKind;
|
|
85
|
+
private generateCandidateRules;
|
|
86
|
+
private averageTokens;
|
|
87
|
+
private ruleMatchesOrchestration;
|
|
88
|
+
private saveRule;
|
|
89
|
+
private loadRules;
|
|
90
|
+
private formatEvidence;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=graph-self-evolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-self-evolve.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-self-evolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAwBD;;;;;;;GAOG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAEzC;;;;;;;;OAQG;IACH,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IA2BhD;;;;;;;;;;OAUG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc;IAsC/C;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsBvD;;;OAGG;IACH,cAAc,IAAI,WAAW,EAAE;IAM/B,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,sBAAsB;IA+I9B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,cAAc;CASvB"}
|