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.
Files changed (91) hide show
  1. package/README.md +45 -7
  2. package/dist/cli/commands/memory.js +117 -0
  3. package/dist/cli/commands/memory.js.map +1 -1
  4. package/dist/core/types.d.ts +30 -0
  5. package/dist/core/types.d.ts.map +1 -1
  6. package/dist/index.d.ts +46 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +32 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/memory/index.d.ts +37 -0
  11. package/dist/memory/index.d.ts.map +1 -1
  12. package/dist/memory/index.js +97 -0
  13. package/dist/memory/index.js.map +1 -1
  14. package/dist/runtime/agent-runner.d.ts +10 -0
  15. package/dist/runtime/agent-runner.d.ts.map +1 -1
  16. package/dist/runtime/agent-runner.js +71 -3
  17. package/dist/runtime/agent-runner.js.map +1 -1
  18. package/dist/runtime/engine.d.ts +18 -0
  19. package/dist/runtime/engine.d.ts.map +1 -1
  20. package/dist/runtime/engine.js +306 -2
  21. package/dist/runtime/engine.js.map +1 -1
  22. package/dist/runtime/execution-graph.d.ts +86 -0
  23. package/dist/runtime/execution-graph.d.ts.map +1 -0
  24. package/dist/runtime/execution-graph.js +441 -0
  25. package/dist/runtime/execution-graph.js.map +1 -0
  26. package/dist/runtime/graph-adversarial.d.ts +88 -0
  27. package/dist/runtime/graph-adversarial.d.ts.map +1 -0
  28. package/dist/runtime/graph-adversarial.js +378 -0
  29. package/dist/runtime/graph-adversarial.js.map +1 -0
  30. package/dist/runtime/graph-analyzer.d.ts +106 -0
  31. package/dist/runtime/graph-analyzer.d.ts.map +1 -0
  32. package/dist/runtime/graph-analyzer.js +321 -0
  33. package/dist/runtime/graph-analyzer.js.map +1 -0
  34. package/dist/runtime/graph-causal.d.ts +91 -0
  35. package/dist/runtime/graph-causal.d.ts.map +1 -0
  36. package/dist/runtime/graph-causal.js +292 -0
  37. package/dist/runtime/graph-causal.js.map +1 -0
  38. package/dist/runtime/graph-context-router.d.ts +73 -0
  39. package/dist/runtime/graph-context-router.d.ts.map +1 -0
  40. package/dist/runtime/graph-context-router.js +162 -0
  41. package/dist/runtime/graph-context-router.js.map +1 -0
  42. package/dist/runtime/graph-discovery.d.ts +71 -0
  43. package/dist/runtime/graph-discovery.d.ts.map +1 -0
  44. package/dist/runtime/graph-discovery.js +367 -0
  45. package/dist/runtime/graph-discovery.js.map +1 -0
  46. package/dist/runtime/graph-dropout.d.ts +59 -0
  47. package/dist/runtime/graph-dropout.d.ts.map +1 -0
  48. package/dist/runtime/graph-dropout.js +196 -0
  49. package/dist/runtime/graph-dropout.js.map +1 -0
  50. package/dist/runtime/graph-embeddings.d.ts +58 -0
  51. package/dist/runtime/graph-embeddings.d.ts.map +1 -0
  52. package/dist/runtime/graph-embeddings.js +301 -0
  53. package/dist/runtime/graph-embeddings.js.map +1 -0
  54. package/dist/runtime/graph-feedback.d.ts +30 -0
  55. package/dist/runtime/graph-feedback.d.ts.map +1 -0
  56. package/dist/runtime/graph-feedback.js +82 -0
  57. package/dist/runtime/graph-feedback.js.map +1 -0
  58. package/dist/runtime/graph-gnn.d.ts +120 -0
  59. package/dist/runtime/graph-gnn.d.ts.map +1 -0
  60. package/dist/runtime/graph-gnn.js +524 -0
  61. package/dist/runtime/graph-gnn.js.map +1 -0
  62. package/dist/runtime/graph-learner.d.ts +70 -0
  63. package/dist/runtime/graph-learner.d.ts.map +1 -0
  64. package/dist/runtime/graph-learner.js +265 -0
  65. package/dist/runtime/graph-learner.js.map +1 -0
  66. package/dist/runtime/graph-meta-adversarial.d.ts +113 -0
  67. package/dist/runtime/graph-meta-adversarial.d.ts.map +1 -0
  68. package/dist/runtime/graph-meta-adversarial.js +366 -0
  69. package/dist/runtime/graph-meta-adversarial.js.map +1 -0
  70. package/dist/runtime/graph-meta.d.ts +115 -0
  71. package/dist/runtime/graph-meta.d.ts.map +1 -0
  72. package/dist/runtime/graph-meta.js +437 -0
  73. package/dist/runtime/graph-meta.js.map +1 -0
  74. package/dist/runtime/graph-self-evolve.d.ts +92 -0
  75. package/dist/runtime/graph-self-evolve.d.ts.map +1 -0
  76. package/dist/runtime/graph-self-evolve.js +422 -0
  77. package/dist/runtime/graph-self-evolve.js.map +1 -0
  78. package/dist/runtime/graph-synthesis.d.ts +47 -0
  79. package/dist/runtime/graph-synthesis.d.ts.map +1 -0
  80. package/dist/runtime/graph-synthesis.js +232 -0
  81. package/dist/runtime/graph-synthesis.js.map +1 -0
  82. package/dist/runtime/graph-trajectory.d.ts +88 -0
  83. package/dist/runtime/graph-trajectory.d.ts.map +1 -0
  84. package/dist/runtime/graph-trajectory.js +339 -0
  85. package/dist/runtime/graph-trajectory.js.map +1 -0
  86. package/dist/runtime/learning-engine.d.ts +12 -0
  87. package/dist/runtime/learning-engine.d.ts.map +1 -1
  88. package/dist/runtime/learning-engine.js +64 -0
  89. package/dist/runtime/learning-engine.js.map +1 -1
  90. package/package.json +2 -2
  91. package/skills/swarm-output-style/SKILL.md +71 -33
@@ -0,0 +1,422 @@
1
+ // ─── Engine ──────────────────────────────────────────────────────────
2
+ /**
3
+ * Analyzes historical execution traces to propose improved replanning rules,
4
+ * backtests them against historical data, and evolves scoring weights based
5
+ * on user feedback.
6
+ *
7
+ * Rules are persisted as 'heuristic' nodes in the execution graph with id
8
+ * prefix 'rule:'. Feedback adjusts confidence: accepted → +0.1, rejected → -0.15.
9
+ */
10
+ export class RuleEvolver {
11
+ graph;
12
+ constructor(graph) {
13
+ this.graph = graph;
14
+ }
15
+ /**
16
+ * Analyze historical orchestration traces and propose new replanning rules.
17
+ *
18
+ * 1. Extract features from all orchestrations via BFS.
19
+ * 2. Find patterns in failures: low-confidence phases, high token usage, blockers.
20
+ * 3. Generate candidate rules from observed failure patterns.
21
+ * 4. Backtest each candidate against all historical traces.
22
+ * 5. Return proposals sorted by improvement, filtered by confidence > 0.3.
23
+ */
24
+ evolveRules(traceCount) {
25
+ const features = this.extractFeatures(traceCount);
26
+ if (features.length === 0)
27
+ return [];
28
+ const candidates = this.generateCandidateRules(features);
29
+ const proposals = [];
30
+ for (const rule of candidates) {
31
+ const result = this.backtestRule(rule);
32
+ if (result.appliedCount === 0)
33
+ continue;
34
+ const confidence = result.appliedCount >= 5 ? 0.7 : result.appliedCount >= 3 ? 0.5 : 0.3;
35
+ if (confidence < 0.3)
36
+ continue;
37
+ proposals.push({
38
+ rule,
39
+ backtestedImprovement: result.improvement,
40
+ confidence,
41
+ evidence: this.formatEvidence(rule, result),
42
+ });
43
+ }
44
+ return proposals
45
+ .filter((p) => p.confidence >= 0.3)
46
+ .sort((a, b) => b.backtestedImprovement - a.backtestedImprovement);
47
+ }
48
+ /**
49
+ * Backtest a single rule against all historical orchestrations.
50
+ *
51
+ * For each orchestration, extracts phase features via BFS. If the rule
52
+ * condition matches any phase, simulates the action:
53
+ * - upgradeModel on failed orch → wouldHaveHelped (optimistic)
54
+ * - upgradeModel on successful orch → wouldHaveHurt (false positive)
55
+ * - skipPhase on failed orch → wouldHaveHelped (conservative: saves tokens)
56
+ * - downgradeModel on successful orch → wouldHaveHelped (saves cost)
57
+ * - downgradeModel on failed orch → wouldHaveHurt
58
+ */
59
+ backtestRule(rule) {
60
+ const features = this.extractFeatures();
61
+ let appliedCount = 0;
62
+ let wouldHaveHelped = 0;
63
+ let wouldHaveHurt = 0;
64
+ for (const orch of features) {
65
+ const matches = this.ruleMatchesOrchestration(rule, orch);
66
+ if (!matches)
67
+ continue;
68
+ appliedCount++;
69
+ const orchFailed = orch.status === 'failed';
70
+ if (rule.action.upgradeModel) {
71
+ // Optimistic: upgrading on failed → helped, upgrading on success → hurt (wasted cost)
72
+ if (orchFailed)
73
+ wouldHaveHelped++;
74
+ else
75
+ wouldHaveHurt++;
76
+ }
77
+ else if (rule.action.downgradeModel) {
78
+ // Conservative: downgrading on success → helped (saved cost), downgrading on failed → hurt
79
+ if (!orchFailed)
80
+ wouldHaveHelped++;
81
+ else
82
+ wouldHaveHurt++;
83
+ }
84
+ else if (rule.action.skipPhase) {
85
+ // Conservative: skipping on success → helped (saved tokens), skipping on failed → neutral
86
+ if (!orchFailed)
87
+ wouldHaveHelped++;
88
+ // Failed orchestrations: skipping is neutral, not counted as hurt
89
+ }
90
+ else if (rule.action.addPhase) {
91
+ // Optimistic: adding a phase on failed → helped, adding on success → hurt (wasted tokens)
92
+ if (orchFailed)
93
+ wouldHaveHelped++;
94
+ else
95
+ wouldHaveHurt++;
96
+ }
97
+ }
98
+ const improvement = appliedCount > 0 ? (wouldHaveHelped - wouldHaveHurt) / appliedCount : 0;
99
+ const falsePositiveRate = appliedCount > 0 ? wouldHaveHurt / appliedCount : 0;
100
+ return { improvement, appliedCount, wouldHaveHelped, wouldHaveHurt, falsePositiveRate };
101
+ }
102
+ /**
103
+ * Record user accept/reject of a rule proposal.
104
+ * Accepted → confidence +0.1 (capped at 1.0)
105
+ * Rejected → confidence -0.15 (floored at 0.0)
106
+ */
107
+ recordFeedback(ruleId, accepted) {
108
+ const existing = this.graph.getNode(ruleId);
109
+ if (!existing)
110
+ return;
111
+ const props = existing.properties;
112
+ const currentConfidence = props.confidence ?? 0.5;
113
+ const delta = accepted ? 0.1 : -0.15;
114
+ const newConfidence = Math.max(0, Math.min(1, currentConfidence + delta));
115
+ this.graph.addNode({
116
+ id: ruleId,
117
+ type: 'heuristic',
118
+ label: existing.label,
119
+ properties: {
120
+ ...props,
121
+ confidence: newConfidence,
122
+ lastFeedback: accepted ? 'accepted' : 'rejected',
123
+ feedbackCount: (props.feedbackCount ?? 0) + 1,
124
+ },
125
+ });
126
+ }
127
+ /**
128
+ * Get all evolved rules currently stored in the graph.
129
+ * Loads heuristic nodes with id prefix 'rule:' and deserializes them.
130
+ */
131
+ getActiveRules() {
132
+ return this.loadRules();
133
+ }
134
+ // ─── Feature Extraction ─────────────────────────────────────────
135
+ extractFeatures(traceCount) {
136
+ let orchNodes = this.graph.getNodesByType('orchestration');
137
+ if (traceCount !== undefined && traceCount > 0) {
138
+ orchNodes = orchNodes.slice(-traceCount);
139
+ }
140
+ const results = [];
141
+ for (const orch of orchNodes) {
142
+ const { nodes } = this.graph.bfs(orch.id, 3);
143
+ const phaseNodes = nodes.filter((n) => n.type === 'phase');
144
+ const agentNodes = nodes.filter((n) => n.type === 'agent');
145
+ const phases = [];
146
+ for (const phase of phaseNodes) {
147
+ // Find agents belonging to this phase via spawned edges
148
+ const phaseEdges = this.graph.getEdges(phase.id, 'outgoing');
149
+ const phaseAgentIds = new Set(phaseEdges.filter((e) => e.type === 'spawned').map((e) => e.target));
150
+ const phaseAgents = agentNodes.filter((a) => phaseAgentIds.has(a.id));
151
+ const confidence = this.inferPhaseConfidence(phaseAgents);
152
+ const totalTokens = this.inferPhaseTokens(phase);
153
+ const status = phase.properties.status ?? 'unknown';
154
+ const hasBlockers = phaseAgents.some((a) => a.properties.status === 'error' || a.properties.status === 'timeout');
155
+ phases.push({
156
+ phaseId: phase.id,
157
+ label: phase.label,
158
+ kind: this.inferPhaseKind(phase.label),
159
+ agentCount: phaseAgents.length || phase.properties.agentCount || 0,
160
+ confidence,
161
+ totalTokens,
162
+ status,
163
+ hasBlockers,
164
+ });
165
+ }
166
+ results.push({
167
+ orchId: orch.id,
168
+ status: orch.properties.status ?? 'unknown',
169
+ pattern: orch.properties.pattern ?? 'unknown',
170
+ phases,
171
+ });
172
+ }
173
+ return results;
174
+ }
175
+ inferPhaseConfidence(agents) {
176
+ if (agents.length === 0)
177
+ return 'medium';
178
+ const hasError = agents.some((a) => a.properties.status === 'error' || a.properties.status === 'timeout');
179
+ if (hasError)
180
+ return 'low';
181
+ const allIdle = agents.every((a) => a.properties.status === 'idle');
182
+ if (allIdle)
183
+ return 'high';
184
+ return 'medium';
185
+ }
186
+ inferPhaseTokens(phase) {
187
+ const usage = phase.properties.usage;
188
+ return usage?.totalTokens ?? 0;
189
+ }
190
+ inferPhaseKind(label) {
191
+ const lower = label.toLowerCase();
192
+ if (lower.includes('research') || lower.includes('explore'))
193
+ return 'research';
194
+ if (lower.includes('implement') || lower.includes('build') || lower.includes('code'))
195
+ return 'implement';
196
+ if (lower.includes('review') || lower.includes('check'))
197
+ return 'review';
198
+ if (lower.includes('test') || lower.includes('verify'))
199
+ return 'test';
200
+ if (lower.includes('challenge') || lower.includes('adversar'))
201
+ return 'challenge';
202
+ if (lower.includes('integrate') || lower.includes('merge'))
203
+ return 'integrate';
204
+ return label;
205
+ }
206
+ // ─── Rule Generation ────────────────────────────────────────────
207
+ generateCandidateRules(features) {
208
+ const candidates = [];
209
+ const failed = features.filter((f) => f.status === 'failed');
210
+ const succeeded = features.filter((f) => f.status === 'completed');
211
+ // Pattern 1: Low-confidence phases in failures → upgrade model
212
+ const failedWithLowConf = failed.filter((f) => f.phases.some((p) => p.confidence === 'low'));
213
+ if (failedWithLowConf.length >= 2) {
214
+ // Find which phase kinds are most commonly low-confidence in failures
215
+ const kindCounts = new Map();
216
+ for (const f of failedWithLowConf) {
217
+ for (const p of f.phases) {
218
+ if (p.confidence === 'low') {
219
+ kindCounts.set(p.kind, (kindCounts.get(p.kind) ?? 0) + 1);
220
+ }
221
+ }
222
+ }
223
+ for (const [kind, count] of kindCounts) {
224
+ if (count >= 2) {
225
+ candidates.push({
226
+ id: `rule:upgrade-on-low-conf-${kind}`,
227
+ name: `Upgrade model on low confidence (${kind})`,
228
+ description: `When a ${kind} phase has low confidence, upgrade the model for remaining phases`,
229
+ condition: { phaseKind: kind, confidenceBelow: 0.4 },
230
+ action: { upgradeModel: true },
231
+ confidence: 0.5,
232
+ evidenceCount: count,
233
+ successRate: 0,
234
+ });
235
+ }
236
+ }
237
+ // Also add a generic low-confidence rule if enough evidence
238
+ if (failedWithLowConf.length >= 3) {
239
+ candidates.push({
240
+ id: 'rule:upgrade-on-low-conf',
241
+ name: 'Upgrade model on low confidence',
242
+ description: 'When any phase has low confidence, upgrade the model for remaining phases',
243
+ condition: { confidenceBelow: 0.4 },
244
+ action: { upgradeModel: true },
245
+ confidence: 0.5,
246
+ evidenceCount: failedWithLowConf.length,
247
+ successRate: 0,
248
+ });
249
+ }
250
+ }
251
+ // Pattern 2: Phases with blockers in failures → upgrade model
252
+ const failedWithBlockers = failed.filter((f) => f.phases.some((p) => p.hasBlockers));
253
+ if (failedWithBlockers.length >= 2) {
254
+ candidates.push({
255
+ id: 'rule:upgrade-on-blockers',
256
+ name: 'Upgrade model when blockers detected',
257
+ description: 'When a phase encounters blockers, upgrade the model for remaining phases',
258
+ condition: { hasBlockers: true },
259
+ action: { upgradeModel: true },
260
+ confidence: 0.5,
261
+ evidenceCount: failedWithBlockers.length,
262
+ successRate: 0,
263
+ });
264
+ }
265
+ // Pattern 3: High-confidence phases in successes → downgrade model (cost saving)
266
+ const succeededWithHighConf = succeeded.filter((f) => f.phases.every((p) => p.confidence === 'high'));
267
+ if (succeededWithHighConf.length >= 3) {
268
+ candidates.push({
269
+ id: 'rule:downgrade-on-high-conf',
270
+ name: 'Downgrade model on high confidence',
271
+ description: 'When all phases have high confidence, downgrade to save cost',
272
+ condition: { confidenceAbove: 0.8 },
273
+ action: { downgradeModel: true },
274
+ confidence: 0.5,
275
+ evidenceCount: succeededWithHighConf.length,
276
+ successRate: 0,
277
+ });
278
+ }
279
+ // Pattern 4: High token usage in failures → downgrade to save budget
280
+ const avgTokensSucceeded = this.averageTokens(succeeded);
281
+ if (avgTokensSucceeded > 0) {
282
+ const failedHighTokens = failed.filter((f) => {
283
+ const total = f.phases.reduce((s, p) => s + p.totalTokens, 0);
284
+ return total > avgTokensSucceeded * 2;
285
+ });
286
+ if (failedHighTokens.length >= 2) {
287
+ candidates.push({
288
+ id: 'rule:downgrade-on-high-tokens',
289
+ name: 'Downgrade model on high token usage',
290
+ description: 'When token usage exceeds 2x historical average, downgrade to save budget',
291
+ condition: { tokenRatioAbove: 2.0 },
292
+ action: { downgradeModel: true },
293
+ confidence: 0.4,
294
+ evidenceCount: failedHighTokens.length,
295
+ successRate: 0,
296
+ });
297
+ }
298
+ }
299
+ // Pattern 5: Budget exhaustion in failures → downgrade when budget low
300
+ // (Only generate if we see phases with usage data)
301
+ const failedLowBudget = failed.filter((f) => f.phases.some((p) => p.totalTokens > 0));
302
+ if (failedLowBudget.length >= 2) {
303
+ candidates.push({
304
+ id: 'rule:downgrade-on-low-budget',
305
+ name: 'Downgrade model when budget is low',
306
+ description: 'When remaining budget drops below 30%, downgrade models to stretch budget',
307
+ condition: { budgetRemainingBelow: 0.3 },
308
+ action: { downgradeModel: true },
309
+ confidence: 0.4,
310
+ evidenceCount: failedLowBudget.length,
311
+ successRate: 0,
312
+ });
313
+ }
314
+ // Pattern 6: Skip challenge phases in simple successful tasks
315
+ const simpleSuccesses = succeeded.filter((f) => f.phases.length <= 3 && f.phases.every((p) => p.confidence === 'high'));
316
+ if (simpleSuccesses.length >= 3) {
317
+ candidates.push({
318
+ id: 'rule:skip-challenge-on-simple',
319
+ name: 'Skip challenge phase on simple tasks',
320
+ description: 'When task is simple (high confidence, few phases), skip adversarial challenge',
321
+ condition: { phaseKind: 'challenge', confidenceAbove: 0.8 },
322
+ action: { skipPhase: true },
323
+ confidence: 0.4,
324
+ evidenceCount: simpleSuccesses.length,
325
+ successRate: 0,
326
+ });
327
+ }
328
+ return candidates;
329
+ }
330
+ averageTokens(features) {
331
+ if (features.length === 0)
332
+ return 0;
333
+ const total = features.reduce((s, f) => s + f.phases.reduce((ps, p) => ps + p.totalTokens, 0), 0);
334
+ return total / features.length;
335
+ }
336
+ // ─── Rule Matching ──────────────────────────────────────────────
337
+ ruleMatchesOrchestration(rule, orch) {
338
+ const { condition } = rule;
339
+ for (const phase of orch.phases) {
340
+ let matches = true;
341
+ if (condition.phaseKind !== undefined && phase.kind !== condition.phaseKind) {
342
+ matches = false;
343
+ }
344
+ if (condition.confidenceBelow !== undefined) {
345
+ const confValue = phase.confidence === 'low' ? 0.3 : phase.confidence === 'medium' ? 0.6 : 0.9;
346
+ if (confValue >= condition.confidenceBelow)
347
+ matches = false;
348
+ }
349
+ if (condition.confidenceAbove !== undefined) {
350
+ const confValue = phase.confidence === 'low' ? 0.3 : phase.confidence === 'medium' ? 0.6 : 0.9;
351
+ if (confValue <= condition.confidenceAbove)
352
+ matches = false;
353
+ }
354
+ if (condition.hasBlockers !== undefined && phase.hasBlockers !== condition.hasBlockers) {
355
+ matches = false;
356
+ }
357
+ // tokenRatioAbove: match if this orch's total tokens exceed the ratio × average
358
+ // We can't compute average here per-rule, so we check the ratio against phase tokens
359
+ // This is a simplified check — backtesting handles the full logic
360
+ if (condition.tokenRatioAbove !== undefined) {
361
+ // We'd need historical average; skip this condition in simple matching
362
+ // The rule still matches based on other conditions
363
+ if (Object.keys(condition).length === 1)
364
+ matches = false; // only tokenRatio, can't match
365
+ }
366
+ if (condition.budgetRemainingBelow !== undefined) {
367
+ // Budget information isn't available at phase level in the graph
368
+ // Skip this condition in simple matching
369
+ if (Object.keys(condition).length === 1)
370
+ matches = false;
371
+ }
372
+ if (matches)
373
+ return true;
374
+ }
375
+ return false;
376
+ }
377
+ // ─── Persistence ────────────────────────────────────────────────
378
+ saveRule(rule) {
379
+ this.graph.addNode({
380
+ id: rule.id,
381
+ type: 'heuristic',
382
+ label: rule.name,
383
+ properties: {
384
+ description: rule.description,
385
+ condition: rule.condition,
386
+ action: rule.action,
387
+ confidence: rule.confidence,
388
+ evidenceCount: rule.evidenceCount,
389
+ successRate: rule.successRate,
390
+ },
391
+ });
392
+ }
393
+ loadRules() {
394
+ const nodes = this.graph.getNodesByType('heuristic');
395
+ const rules = [];
396
+ for (const node of nodes) {
397
+ if (!node.id.startsWith('rule:'))
398
+ continue;
399
+ const props = node.properties;
400
+ rules.push({
401
+ id: node.id,
402
+ name: node.label,
403
+ description: props.description ?? '',
404
+ condition: props.condition ?? {},
405
+ action: props.action ?? {},
406
+ confidence: props.confidence ?? 0.5,
407
+ evidenceCount: props.evidenceCount ?? 0,
408
+ successRate: props.successRate ?? 0,
409
+ });
410
+ }
411
+ return rules;
412
+ }
413
+ // ─── Helpers ────────────────────────────────────────────────────
414
+ formatEvidence(rule, result) {
415
+ const pct = Math.round(result.improvement * 100);
416
+ const sign = pct >= 0 ? '+' : '';
417
+ return (`${rule.name}: ${sign}${pct}% improvement across ${result.appliedCount} historical traces ` +
418
+ `(helped ${result.wouldHaveHelped}, hurt ${result.wouldHaveHurt}, ` +
419
+ `false positive rate ${Math.round(result.falsePositiveRate * 100)}%)`);
420
+ }
421
+ }
422
+ //# sourceMappingURL=graph-self-evolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-self-evolve.js","sourceRoot":"","sources":["../../src/runtime/graph-self-evolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { ExecutionGraph } from './execution-graph.js';
2
+ export interface TopologyInsight {
3
+ feature: string;
4
+ successCorrelation: number;
5
+ sampleSize: number;
6
+ confidence: 'low' | 'medium' | 'high';
7
+ }
8
+ export interface SynthesizedPattern {
9
+ name: string;
10
+ phases: PhaseSpec[];
11
+ confidence: number;
12
+ reasoning: string;
13
+ basedOn: string[];
14
+ }
15
+ export interface PhaseSpec {
16
+ name: string;
17
+ kind: string;
18
+ agentTypes: string[];
19
+ parallel: boolean;
20
+ dependsOn?: string[];
21
+ }
22
+ /**
23
+ * Analyzes structural diffs between successful and failed orchestration
24
+ * topologies, then generates novel pattern DAGs based on the insights.
25
+ */
26
+ export declare class PatternSynthesizer {
27
+ private graph;
28
+ constructor(graph: ExecutionGraph);
29
+ /**
30
+ * Analyze what structural features correlate with success/failure.
31
+ * Splits orchestrations by status, extracts topology features via BFS,
32
+ * then computes success rate deltas per feature.
33
+ */
34
+ analyzeTopologyDiffs(minSamples?: number): TopologyInsight[];
35
+ /**
36
+ * Generate a novel pattern from topology insights.
37
+ * Starts with a base structure (research → implement → review), then
38
+ * applies positive insights as additions and negative insights as removals.
39
+ */
40
+ synthesizePattern(taskDescription: string, filePatterns?: string[]): SynthesizedPattern | null;
41
+ /**
42
+ * Extract topology features from a single orchestration via BFS (depth 3).
43
+ * Returns a map of boolean features describing the orchestration's structure.
44
+ */
45
+ extractTopologyFeatures(orchestrationId: string): Map<string, boolean>;
46
+ }
47
+ //# sourceMappingURL=graph-synthesis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-synthesis.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-synthesis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID;;;GAGG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAEzC;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,SAAI,GAAG,eAAe,EAAE;IAmEvD;;;;OAIG;IACH,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,kBAAkB,GAAG,IAAI;IAiH9F;;;OAGG;IACH,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;CAwEvE"}