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,321 @@
1
+ // ─── Analyzer ─────────────────────────────────────────────────────
2
+ /**
3
+ * Pre-execution analysis (centrality, failure prediction) and post-execution
4
+ * insights (topology-driven suggestions) over the execution knowledge graph.
5
+ *
6
+ * All analysis is purely structural — no LLM calls, just graph topology.
7
+ */
8
+ export class GraphAnalyzer {
9
+ graph;
10
+ constructor(graph) {
11
+ this.graph = graph;
12
+ }
13
+ /**
14
+ * Find "god nodes" — nodes with highest degree, excluding orchestration
15
+ * hubs (which are structurally central by definition, not interesting).
16
+ */
17
+ findGodNodes(options) {
18
+ const limit = options?.limit ?? 10;
19
+ const typeFilter = options?.type;
20
+ let candidates;
21
+ if (typeFilter) {
22
+ candidates = this.graph.getNodesByType(typeFilter);
23
+ }
24
+ else {
25
+ // Default: phase + agent + file nodes (the interesting ones)
26
+ candidates = [
27
+ ...this.graph.getNodesByType('phase'),
28
+ ...this.graph.getNodesByType('agent'),
29
+ ...this.graph.getNodesByType('file'),
30
+ ];
31
+ }
32
+ // Orchestration nodes are hubs by definition — exclude unless explicitly requested
33
+ if (!typeFilter) {
34
+ candidates = candidates.filter((n) => n.type !== 'orchestration');
35
+ }
36
+ const godNodes = candidates.map((node) => {
37
+ const outEdges = this.graph.getEdges(node.id, 'outgoing');
38
+ const inEdges = this.graph.getEdges(node.id, 'incoming');
39
+ const fanOut = new Set(outEdges.map((e) => e.target)).size;
40
+ return {
41
+ node,
42
+ degree: outEdges.length + inEdges.length,
43
+ inDegree: inEdges.length,
44
+ outDegree: outEdges.length,
45
+ fanOut,
46
+ };
47
+ });
48
+ return godNodes.sort((a, b) => b.degree - a.degree).slice(0, limit);
49
+ }
50
+ /**
51
+ * Sampling-based betweenness centrality approximation.
52
+ *
53
+ * Samples random node pairs, finds shortest paths between them, and counts
54
+ * how often each intermediate node appears on those paths. Nodes that
55
+ * frequently appear as bridges score highest.
56
+ *
57
+ * O(samples × avgPathLength) vs O(V×E) for exact Brandes algorithm.
58
+ * Normalizes by valid paths found (not total samples) for meaningful scores.
59
+ */
60
+ computeCentrality(sampleSize) {
61
+ const samples = sampleSize ?? 50;
62
+ const centrality = new Map();
63
+ const nodes = [
64
+ ...this.graph.getNodesByType('phase'),
65
+ ...this.graph.getNodesByType('agent'),
66
+ ...this.graph.getNodesByType('file'),
67
+ ];
68
+ if (nodes.length < 3)
69
+ return centrality;
70
+ let validPaths = 0;
71
+ for (let i = 0; i < samples; i++) {
72
+ const source = nodes[Math.floor(Math.random() * nodes.length)];
73
+ const target = nodes[Math.floor(Math.random() * nodes.length)];
74
+ if (source.id === target.id)
75
+ continue;
76
+ const path = this.graph.shortestPath(source.id, target.id, 8);
77
+ if (!path || path.nodes.length <= 2)
78
+ continue; // need intermediates
79
+ validPaths++;
80
+ // Only count intermediate nodes (skip endpoints)
81
+ for (let j = 1; j < path.nodes.length - 1; j++) {
82
+ const nodeId = path.nodes[j].id;
83
+ centrality.set(nodeId, (centrality.get(nodeId) ?? 0) + 1);
84
+ }
85
+ }
86
+ // Normalize by valid path count for meaningful 0–1 scores
87
+ if (validPaths > 0) {
88
+ for (const [id, count] of centrality) {
89
+ centrality.set(id, count / validPaths);
90
+ }
91
+ }
92
+ return centrality;
93
+ }
94
+ /**
95
+ * Predict which agents are most likely to fail based on graph signals:
96
+ *
97
+ * - Historical fail rate for the agent type (min 3 samples)
98
+ * - Files with prior error associations (caused_by edges)
99
+ * - Ambiguous inbound dependencies
100
+ * - High fan-in (more dependencies = more that can go wrong)
101
+ */
102
+ predictFailures(orchestrationId, files) {
103
+ const predictions = [];
104
+ // Scope agent nodes to orchestration, specific files, or all
105
+ let agentNodes;
106
+ if (files && files.length > 0) {
107
+ // Find agents that have previously touched any of the specified files
108
+ const agentIds = new Set();
109
+ for (const filePath of files) {
110
+ const fileId = filePath.startsWith('file:') ? filePath : `file:${filePath}`;
111
+ const touchEdges = this.graph.getEdges(fileId, 'incoming').filter((e) => e.type === 'touched_file');
112
+ for (const edge of touchEdges) {
113
+ agentIds.add(edge.source);
114
+ }
115
+ }
116
+ agentNodes = [...agentIds]
117
+ .map((id) => this.graph.getNode(id))
118
+ .filter((n) => n !== null && n.type === 'agent');
119
+ }
120
+ else if (orchestrationId) {
121
+ const subgraph = this.graph.bfs(orchestrationId, 2);
122
+ agentNodes = subgraph.nodes.filter((n) => n.type === 'agent');
123
+ }
124
+ else {
125
+ agentNodes = this.graph.getNodesByType('agent');
126
+ }
127
+ // Build historical fail rates per agent type across the full graph
128
+ const typeStats = new Map();
129
+ for (const agent of this.graph.getNodesByType('agent')) {
130
+ const aType = agent.properties.agentType || agent.label;
131
+ const stats = typeStats.get(aType) ?? { total: 0, failed: 0 };
132
+ stats.total++;
133
+ const status = agent.properties.status;
134
+ if (status === 'error' || status === 'timeout') {
135
+ stats.failed++;
136
+ }
137
+ typeStats.set(aType, stats);
138
+ }
139
+ for (const agent of agentNodes) {
140
+ const aType = agent.properties.agentType || agent.label;
141
+ const stats = typeStats.get(aType);
142
+ // Require minimum 3 samples for historical rate to be meaningful
143
+ const historicalFailRate = stats && stats.total >= 3 ? stats.failed / stats.total : 0;
144
+ const reasons = [];
145
+ let riskScore = historicalFailRate;
146
+ // Check files this agent touches for prior error associations
147
+ const files = this.graph.getNeighbors(agent.id, 'touched_file');
148
+ for (const file of files) {
149
+ const errorEdges = this.graph.getEdges(file.id, 'incoming').filter((e) => e.type === 'caused_by');
150
+ if (errorEdges.length > 0) {
151
+ riskScore += 0.2;
152
+ reasons.push(`File "${file.label}" has ${errorEdges.length} historical error(s)`);
153
+ }
154
+ }
155
+ // Ambiguous dependencies increase uncertainty
156
+ const ambiguousInEdges = this.graph.getEdges(agent.id, 'incoming').filter((e) => e.confidence === 'AMBIGUOUS');
157
+ if (ambiguousInEdges.length > 0) {
158
+ riskScore += 0.1 * ambiguousInEdges.length;
159
+ reasons.push(`${ambiguousInEdges.length} ambiguous dependency edge(s)`);
160
+ }
161
+ // High fan-in = more can go wrong
162
+ const allInEdges = this.graph.getEdges(agent.id, 'incoming');
163
+ if (allInEdges.length > 5) {
164
+ riskScore += 0.1;
165
+ reasons.push(`High fan-in: ${allInEdges.length} incoming edges`);
166
+ }
167
+ if (historicalFailRate > 0) {
168
+ reasons.push(`Historical fail rate: ${(historicalFailRate * 100).toFixed(0)}% ` + `(${stats.failed}/${stats.total})`);
169
+ }
170
+ if (riskScore > 0 || reasons.length > 0) {
171
+ predictions.push({
172
+ nodeId: agent.id,
173
+ label: agent.label,
174
+ riskScore: Math.min(riskScore, 1),
175
+ reasons,
176
+ historicalFailRate,
177
+ });
178
+ }
179
+ }
180
+ return predictions.sort((a, b) => b.riskScore - a.riskScore);
181
+ }
182
+ /**
183
+ * Post-execution topology-driven suggestions.
184
+ *
185
+ * Detects structural issues without any LLM:
186
+ * 1. Isolated outputs — agents whose work was never consumed
187
+ * 2. High-centrality bottlenecks — single points of failure
188
+ * 3. Ambiguous dependencies — edges that need verification
189
+ */
190
+ suggestImprovements(orchestrationId) {
191
+ const suggestions = [];
192
+ let scopeNodes;
193
+ let scopeEdges;
194
+ if (orchestrationId) {
195
+ const subgraph = this.graph.bfs(orchestrationId, 3);
196
+ scopeNodes = subgraph.nodes;
197
+ // Deduplicate edges — BFS collects all edges of each visited node,
198
+ // so edge A→B appears when visiting both A and B
199
+ const seen = new Set();
200
+ scopeEdges = subgraph.edges.filter((e) => {
201
+ const key = `${e.source}:${e.target}:${e.type}`;
202
+ if (seen.has(key))
203
+ return false;
204
+ seen.add(key);
205
+ return true;
206
+ });
207
+ }
208
+ else {
209
+ scopeNodes = [...this.graph.getNodesByType('agent'), ...this.graph.getNodesByType('phase')];
210
+ // Collect relevant edges across all types (not just 'contains')
211
+ const edgeTypes = [
212
+ 'contains',
213
+ 'spawned',
214
+ 'produced',
215
+ 'consumed',
216
+ 'touched_file',
217
+ 'caused_by',
218
+ 'learned_from',
219
+ ];
220
+ const nodeIds = new Set(scopeNodes.map((n) => n.id));
221
+ const seen = new Set();
222
+ scopeEdges = [];
223
+ for (const edgeType of edgeTypes) {
224
+ for (const edge of this.graph.getEdgesByType(edgeType)) {
225
+ if (nodeIds.has(edge.source) || nodeIds.has(edge.target)) {
226
+ const key = `${edge.source}:${edge.target}:${edge.type}`;
227
+ if (!seen.has(key)) {
228
+ seen.add(key);
229
+ scopeEdges.push(edge);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ // 1. Isolated outputs: agents that completed but whose output was never consumed
236
+ const agents = scopeNodes.filter((n) => n.type === 'agent');
237
+ for (const agent of agents) {
238
+ if (agent.properties.status !== 'idle')
239
+ continue;
240
+ const producedEdges = this.graph.getEdges(agent.id, 'outgoing').filter((e) => e.type === 'produced');
241
+ const consumedEdges = this.graph.getEdges(agent.id, 'outgoing').filter((e) => e.type === 'consumed');
242
+ if (producedEdges.length === 0 && consumedEdges.length === 0) {
243
+ suggestions.push({
244
+ type: 'isolated_output',
245
+ message: `Agent "${agent.label}" completed but its output was never consumed by downstream agents`,
246
+ nodeIds: [agent.id],
247
+ severity: 'warning',
248
+ });
249
+ }
250
+ }
251
+ // 2. High-centrality bottlenecks
252
+ const centrality = this.computeCentrality(30);
253
+ const centralityThreshold = 0.3;
254
+ for (const [nodeId, score] of centrality) {
255
+ if (score >= centralityThreshold) {
256
+ const node = this.graph.getNode(nodeId);
257
+ if (node) {
258
+ suggestions.push({
259
+ type: 'high_centrality',
260
+ message: `"${node.label}" is a structural bottleneck (centrality: ${score.toFixed(2)})` +
261
+ ` — failure here affects many downstream nodes`,
262
+ nodeIds: [nodeId],
263
+ severity: score >= 0.5 ? 'critical' : 'warning',
264
+ });
265
+ }
266
+ }
267
+ }
268
+ // 3. Ambiguous dependencies that need human verification
269
+ const ambiguousEdges = scopeEdges.filter((e) => e.confidence === 'AMBIGUOUS');
270
+ if (ambiguousEdges.length > 0) {
271
+ suggestions.push({
272
+ type: 'ambiguous_dependency',
273
+ message: `${ambiguousEdges.length} edge(s) have AMBIGUOUS confidence — verify these dependencies are real`,
274
+ nodeIds: [...new Set(ambiguousEdges.map((e) => e.source))],
275
+ severity: ambiguousEdges.length >= 3 ? 'warning' : 'info',
276
+ });
277
+ }
278
+ return suggestions;
279
+ }
280
+ /**
281
+ * Evaluate whether a phase should proceed, warn, or halt based on
282
+ * reflection confidence and historical pattern success rates.
283
+ */
284
+ evaluatePhaseConfidence(phase, reflection, patternStats, config) {
285
+ const minHistoricalSuccessRate = config?.minHistoricalSuccessRate ?? 0.3;
286
+ const mediumSuccessThreshold = config?.minHistoricalSuccessRate ? config.minHistoricalSuccessRate + 0.2 : 0.5;
287
+ const haltOnLow = config?.haltOnLowConfidence ?? true;
288
+ const warnOnMedium = config?.warnOnMediumConfidence ?? true;
289
+ if (reflection.confidence === 'low' && patternStats && patternStats.successRate < minHistoricalSuccessRate) {
290
+ return {
291
+ result: haltOnLow ? 'halt' : 'warn',
292
+ reason: `Low confidence reflection combined with poor historical success rate (${Math.round(patternStats.successRate * 100)}%)`,
293
+ confidence: reflection.confidence,
294
+ historicalSuccessRate: patternStats.successRate,
295
+ };
296
+ }
297
+ if (reflection.confidence === 'low') {
298
+ return {
299
+ result: 'warn',
300
+ reason: 'Low confidence reflection — consider re-running or reviewing outputs',
301
+ confidence: reflection.confidence,
302
+ historicalSuccessRate: patternStats?.successRate,
303
+ };
304
+ }
305
+ if (reflection.confidence === 'medium' && patternStats && patternStats.successRate < mediumSuccessThreshold) {
306
+ return {
307
+ result: warnOnMedium ? 'warn' : 'pass',
308
+ reason: `Medium confidence with below-average historical success rate (${Math.round(patternStats.successRate * 100)}%)`,
309
+ confidence: reflection.confidence,
310
+ historicalSuccessRate: patternStats.successRate,
311
+ };
312
+ }
313
+ return {
314
+ result: 'pass',
315
+ reason: 'Phase confidence is acceptable',
316
+ confidence: reflection.confidence,
317
+ historicalSuccessRate: patternStats?.successRate,
318
+ };
319
+ }
320
+ }
321
+ //# sourceMappingURL=graph-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-analyzer.js","sourceRoot":"","sources":["../../src/runtime/graph-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { ExecutionGraph } from './execution-graph.js';
2
+ export type CausalVar = 'model' | 'agentType' | 'fileSetSize' | 'contextQuality' | 'outcome';
3
+ export interface Observation {
4
+ orchestrationId: string;
5
+ model: string;
6
+ agentType: string;
7
+ fileSetSize: 'small' | 'medium' | 'large';
8
+ contextQuality: 'low' | 'medium' | 'high';
9
+ outcome: 'success' | 'failure';
10
+ }
11
+ export interface CausalEstimate {
12
+ effect: number;
13
+ confidence: 'low' | 'medium' | 'high';
14
+ sampleCount: number;
15
+ adjustedFor: CausalVar[];
16
+ method: 'raw' | 'stratified' | 'backdoor';
17
+ }
18
+ export interface InterventionSuggestion {
19
+ intervention: {
20
+ variable: CausalVar;
21
+ from: string;
22
+ to: string;
23
+ };
24
+ estimatedEffect: number;
25
+ confidence: 'low' | 'medium' | 'high';
26
+ reasoning: string;
27
+ }
28
+ /**
29
+ * Causal inference engine that builds structural causal models from execution
30
+ * traces and estimates causal effects using backdoor adjustment.
31
+ *
32
+ * Extracts observations from the execution knowledge graph, computes normalized
33
+ * mutual information between variables, identifies confounders, and estimates
34
+ * average treatment effects using a tiered approach (raw → stratified → backdoor).
35
+ */
36
+ export declare class CausalGraphEngine {
37
+ private graph;
38
+ constructor(graph: ExecutionGraph);
39
+ /**
40
+ * Extract observations from the execution graph.
41
+ *
42
+ * Walks orchestration → phase → agent subgraphs via BFS (depth 3),
43
+ * mapping each agent to an observation with model, agentType, fileSetSize,
44
+ * contextQuality, and outcome.
45
+ */
46
+ extractObservations(orchestrationId?: string): Observation[];
47
+ /**
48
+ * Compute Normalized Mutual Information between two categorical variables.
49
+ *
50
+ * NMI = I(X;Y) / sqrt(H(X) * H(Y))
51
+ * where H(X) = -Σ p(x) log2(p(x))
52
+ * and I(X;Y) = Σ p(x,y) log2(p(x,y) / (p(x)*p(y)))
53
+ *
54
+ * Returns 0 when either variable has zero entropy (constant).
55
+ * Returns 1.0 when a variable is compared with itself.
56
+ */
57
+ computeNMI(observations: Observation[], var1: CausalVar, var2: CausalVar): number;
58
+ /**
59
+ * Identify confounders for a treatment → outcome relationship.
60
+ *
61
+ * A variable C is a confounder if:
62
+ * NMI(C, treatment) > 0.05 AND NMI(C, outcome) > 0.05
63
+ */
64
+ identifyConfounders(observations: Observation[], treatment: CausalVar): CausalVar[];
65
+ /**
66
+ * Estimate Average Treatment Effect using a tiered approach:
67
+ *
68
+ * - Tier 1 (N < 3): insufficient data → effect=0, low confidence
69
+ * - Tier 2 (3–9): raw comparison of success rates
70
+ * - Tier 3 (10–49): stratify by top 1 confounder, weighted average
71
+ * - Tier 4 (50+): full backdoor adjustment with all confounders
72
+ *
73
+ * Effect is always clamped to [-1, 1].
74
+ */
75
+ estimateCausalEffect(treatment: CausalVar, treatmentValue: string, controlValue: string, orchestrationId?: string): CausalEstimate;
76
+ /**
77
+ * Suggest interventions for a failed orchestration by estimating the causal
78
+ * effect of switching each variable to an alternative value observed in
79
+ * historical data.
80
+ *
81
+ * Returns suggestions ranked by estimated effect (descending), filtered
82
+ * to only positive effects.
83
+ */
84
+ suggestIntervention(failedOrchestrationId: string): InterventionSuggestion[];
85
+ /**
86
+ * Compute stratified ATE: partition observations by confounder strata,
87
+ * compute per-stratum ATE, then take a weighted average (weight = stratum size).
88
+ */
89
+ private stratifiedATE;
90
+ }
91
+ //# sourceMappingURL=graph-causal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-causal.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-causal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE7F,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAEzC;;;;;;OAMG;IACH,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAkD5D;;;;;;;;;OASG;IACH,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM;IA6CjF;;;;;OAKG;IACH,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE;IAiBnF;;;;;;;;;OASG;IACH,oBAAoB,CAClB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,cAAc;IA2DjB;;;;;;;OAOG;IACH,mBAAmB,CAAC,qBAAqB,EAAE,MAAM,GAAG,sBAAsB,EAAE;IA4D5E;;;OAGG;IACH,OAAO,CAAC,aAAa;CAiCtB"}