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,86 @@
1
+ import { EventBus } from '../core/event-bus.js';
2
+ import type { GraphNode, GraphEdge, GraphNodeType, GraphEdgeType, ConfidenceTier } from '../core/types.js';
3
+ /**
4
+ * Persistent execution knowledge graph backed by SQLite. Records orchestration
5
+ * topology (phases, agents, files, patterns) as nodes and edges, enabling
6
+ * cross-run learning, graph-routed context assembly, and failure prediction.
7
+ */
8
+ export declare class ExecutionGraph {
9
+ private db;
10
+ private ownDb;
11
+ private bus;
12
+ private listeners;
13
+ private currentPhaseMap;
14
+ constructor(dbPath?: string);
15
+ private initSchema;
16
+ addNode(node: {
17
+ id: string;
18
+ type: GraphNodeType;
19
+ label: string;
20
+ properties?: Record<string, unknown>;
21
+ }): void;
22
+ addEdge(edge: {
23
+ source: string;
24
+ target: string;
25
+ type: GraphEdgeType;
26
+ weight?: number;
27
+ confidence?: ConfidenceTier;
28
+ properties?: Record<string, unknown>;
29
+ }): void;
30
+ getNode(id: string): GraphNode | null;
31
+ getEdges(nodeId: string, direction?: 'outgoing' | 'incoming' | 'both'): GraphEdge[];
32
+ getNeighbors(nodeId: string, edgeType?: GraphEdgeType): GraphNode[];
33
+ bfs(startId: string, maxDepth?: number): {
34
+ nodes: GraphNode[];
35
+ edges: GraphEdge[];
36
+ };
37
+ dfs(startId: string, maxDepth?: number): {
38
+ nodes: GraphNode[];
39
+ edges: GraphEdge[];
40
+ };
41
+ shortestPath(fromId: string, toId: string, maxHops?: number): {
42
+ nodes: GraphNode[];
43
+ edges: GraphEdge[];
44
+ } | null;
45
+ /**
46
+ * INSERT OR UPDATE an edge. If an edge with the same source+target+type
47
+ * already exists, increment its weight and merge properties. Otherwise INSERT.
48
+ */
49
+ upsertEdge(edge: {
50
+ source: string;
51
+ target: string;
52
+ type: GraphEdgeType;
53
+ weight?: number;
54
+ confidence?: ConfidenceTier;
55
+ properties?: Record<string, unknown>;
56
+ }): void;
57
+ /**
58
+ * Adjust weight on existing edges matching source+target+type by delta.
59
+ * Returns the number of rows updated.
60
+ */
61
+ updateEdgeWeight(source: string, target: string, type: GraphEdgeType, delta: number): number;
62
+ /**
63
+ * Delete edges older than N days, then delete orphan nodes
64
+ * (nodes with no remaining edges).
65
+ */
66
+ pruneOlderThan(days: number): {
67
+ nodesDeleted: number;
68
+ edgesDeleted: number;
69
+ };
70
+ /**
71
+ * Return the age of a node in days, or null if the node doesn't exist.
72
+ */
73
+ getNodeAge(nodeId: string): number | null;
74
+ getNodesByType(type: GraphNodeType): GraphNode[];
75
+ getEdgesByType(type: GraphEdgeType): GraphEdge[];
76
+ stats(): {
77
+ nodeCount: number;
78
+ edgeCount: number;
79
+ nodesByType: Record<string, number>;
80
+ edgesByType: Record<string, number>;
81
+ };
82
+ attachToEventBus(bus: EventBus): void;
83
+ detachFromEventBus(bus: EventBus): void;
84
+ close(): void;
85
+ }
86
+ //# sourceMappingURL=execution-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-graph.d.ts","sourceRoot":"","sources":["../../src/runtime/execution-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,441 @@
1
+ import Database from 'better-sqlite3';
2
+ import { existsSync, mkdirSync } from 'fs';
3
+ import { dirname } from 'path';
4
+ import { getDatabase } from './database.js';
5
+ /**
6
+ * Persistent execution knowledge graph backed by SQLite. Records orchestration
7
+ * topology (phases, agents, files, patterns) as nodes and edges, enabling
8
+ * cross-run learning, graph-routed context assembly, and failure prediction.
9
+ */
10
+ export class ExecutionGraph {
11
+ db;
12
+ ownDb;
13
+ bus = null;
14
+ listeners = [];
15
+ currentPhaseMap = new Map(); // orchestrationId → current phase nodeId
16
+ constructor(dbPath) {
17
+ if (dbPath) {
18
+ const dir = dirname(dbPath);
19
+ if (!existsSync(dir))
20
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
21
+ this.db = new Database(dbPath);
22
+ this.db.pragma('journal_mode = WAL');
23
+ this.db.pragma('busy_timeout = 5000');
24
+ this.ownDb = true;
25
+ }
26
+ else {
27
+ this.db = getDatabase();
28
+ this.ownDb = false;
29
+ }
30
+ this.initSchema();
31
+ }
32
+ initSchema() {
33
+ this.db.exec(`
34
+ CREATE TABLE IF NOT EXISTS graph_nodes (
35
+ id TEXT PRIMARY KEY,
36
+ type TEXT NOT NULL,
37
+ label TEXT NOT NULL,
38
+ properties TEXT DEFAULT '{}',
39
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
40
+ );
41
+ CREATE TABLE IF NOT EXISTS graph_edges (
42
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
43
+ source TEXT NOT NULL,
44
+ target TEXT NOT NULL,
45
+ type TEXT NOT NULL,
46
+ weight REAL DEFAULT 1.0,
47
+ confidence TEXT DEFAULT 'EXTRACTED',
48
+ properties TEXT DEFAULT '{}',
49
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
50
+ );
51
+ CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON graph_edges(source, type);
52
+ CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges(target, type);
53
+ CREATE INDEX IF NOT EXISTS idx_graph_nodes_type ON graph_nodes(type);
54
+ CREATE INDEX IF NOT EXISTS idx_graph_edges_confidence ON graph_edges(confidence);
55
+ `);
56
+ }
57
+ // ─── CRUD ───────────────────────────────────────────────────────
58
+ addNode(node) {
59
+ this.db
60
+ .prepare(`INSERT OR REPLACE INTO graph_nodes (id, type, label, properties)
61
+ VALUES (?, ?, ?, ?)`)
62
+ .run(node.id, node.type, node.label, JSON.stringify(node.properties ?? {}));
63
+ }
64
+ addEdge(edge) {
65
+ this.db
66
+ .prepare(`INSERT INTO graph_edges (source, target, type, weight, confidence, properties)
67
+ VALUES (?, ?, ?, ?, ?, ?)`)
68
+ .run(edge.source, edge.target, edge.type, edge.weight ?? 1.0, edge.confidence ?? 'EXTRACTED', JSON.stringify(edge.properties ?? {}));
69
+ }
70
+ getNode(id) {
71
+ const row = this.db.prepare('SELECT * FROM graph_nodes WHERE id = ?').get(id);
72
+ if (!row)
73
+ return null;
74
+ return { ...row, properties: JSON.parse(row.properties) };
75
+ }
76
+ getEdges(nodeId, direction = 'both') {
77
+ let sql;
78
+ if (direction === 'outgoing') {
79
+ sql = 'SELECT * FROM graph_edges WHERE source = ?';
80
+ }
81
+ else if (direction === 'incoming') {
82
+ sql = 'SELECT * FROM graph_edges WHERE target = ?';
83
+ }
84
+ else {
85
+ sql = 'SELECT * FROM graph_edges WHERE source = ? OR target = ?';
86
+ }
87
+ const rows = (direction === 'both' ? this.db.prepare(sql).all(nodeId, nodeId) : this.db.prepare(sql).all(nodeId));
88
+ return rows.map((r) => ({ ...r, properties: JSON.parse(r.properties) }));
89
+ }
90
+ getNeighbors(nodeId, edgeType) {
91
+ let sql;
92
+ let params;
93
+ if (edgeType) {
94
+ sql = `SELECT DISTINCT n.* FROM graph_nodes n
95
+ JOIN graph_edges e ON (e.target = n.id AND e.source = ?) OR (e.source = n.id AND e.target = ?)
96
+ WHERE e.type = ?`;
97
+ params = [nodeId, nodeId, edgeType];
98
+ }
99
+ else {
100
+ sql = `SELECT DISTINCT n.* FROM graph_nodes n
101
+ JOIN graph_edges e ON (e.target = n.id AND e.source = ?) OR (e.source = n.id AND e.target = ?)`;
102
+ params = [nodeId, nodeId];
103
+ }
104
+ const rows = this.db.prepare(sql).all(...params);
105
+ return rows.map((r) => ({ ...r, properties: JSON.parse(r.properties) }));
106
+ }
107
+ // ─── Traversal ──────────────────────────────────────────────────
108
+ bfs(startId, maxDepth = 3) {
109
+ const visited = new Set();
110
+ const resultNodes = [];
111
+ const resultEdges = [];
112
+ const queue = [{ id: startId, depth: 0 }];
113
+ while (queue.length > 0) {
114
+ const { id, depth } = queue.shift();
115
+ if (visited.has(id))
116
+ continue;
117
+ visited.add(id);
118
+ const node = this.getNode(id);
119
+ if (node)
120
+ resultNodes.push(node);
121
+ if (depth >= maxDepth)
122
+ continue;
123
+ const edges = this.getEdges(id);
124
+ for (const edge of edges) {
125
+ resultEdges.push(edge);
126
+ const neighborId = edge.source === id ? edge.target : edge.source;
127
+ if (!visited.has(neighborId)) {
128
+ queue.push({ id: neighborId, depth: depth + 1 });
129
+ }
130
+ }
131
+ }
132
+ // Deduplicate edges by source-type-target key
133
+ const uniqueEdges = [...new Map(resultEdges.map((e) => [`${e.source}-${e.type}-${e.target}`, e])).values()];
134
+ return { nodes: resultNodes, edges: uniqueEdges };
135
+ }
136
+ dfs(startId, maxDepth = 6) {
137
+ const visited = new Set();
138
+ const resultNodes = [];
139
+ const resultEdges = [];
140
+ const stack = [{ id: startId, depth: 0 }];
141
+ while (stack.length > 0) {
142
+ const { id, depth } = stack.pop();
143
+ if (visited.has(id))
144
+ continue;
145
+ visited.add(id);
146
+ const node = this.getNode(id);
147
+ if (node)
148
+ resultNodes.push(node);
149
+ if (depth >= maxDepth)
150
+ continue;
151
+ const edges = this.getEdges(id);
152
+ for (const edge of edges) {
153
+ resultEdges.push(edge);
154
+ const neighborId = edge.source === id ? edge.target : edge.source;
155
+ if (!visited.has(neighborId)) {
156
+ stack.push({ id: neighborId, depth: depth + 1 });
157
+ }
158
+ }
159
+ }
160
+ // Deduplicate edges by source-type-target key
161
+ const uniqueEdges = [...new Map(resultEdges.map((e) => [`${e.source}-${e.type}-${e.target}`, e])).values()];
162
+ return { nodes: resultNodes, edges: uniqueEdges };
163
+ }
164
+ shortestPath(fromId, toId, maxHops = 8) {
165
+ const visited = new Set();
166
+ const parent = new Map();
167
+ const queue = [{ id: fromId, depth: 0 }];
168
+ visited.add(fromId);
169
+ while (queue.length > 0) {
170
+ const { id, depth } = queue.shift();
171
+ if (id === toId) {
172
+ // Reconstruct path
173
+ const pathNodes = [];
174
+ const pathEdges = [];
175
+ let current = toId;
176
+ while (current !== fromId) {
177
+ const node = this.getNode(current);
178
+ if (node)
179
+ pathNodes.unshift(node);
180
+ const p = parent.get(current);
181
+ pathEdges.unshift(p.edge);
182
+ current = p.nodeId;
183
+ }
184
+ const startNode = this.getNode(fromId);
185
+ if (startNode)
186
+ pathNodes.unshift(startNode);
187
+ return { nodes: pathNodes, edges: pathEdges };
188
+ }
189
+ if (depth >= maxHops)
190
+ continue;
191
+ const edges = this.getEdges(id);
192
+ for (const edge of edges) {
193
+ const neighborId = edge.source === id ? edge.target : edge.source;
194
+ if (!visited.has(neighborId)) {
195
+ visited.add(neighborId);
196
+ parent.set(neighborId, { nodeId: id, edge });
197
+ queue.push({ id: neighborId, depth: depth + 1 });
198
+ }
199
+ }
200
+ }
201
+ return null;
202
+ }
203
+ // ─── Upsert / Update / Prune ─────────────────────────────────────
204
+ /**
205
+ * INSERT OR UPDATE an edge. If an edge with the same source+target+type
206
+ * already exists, increment its weight and merge properties. Otherwise INSERT.
207
+ */
208
+ upsertEdge(edge) {
209
+ const existing = this.db
210
+ .prepare('SELECT id, weight, properties FROM graph_edges WHERE source = ? AND target = ? AND type = ?')
211
+ .get(edge.source, edge.target, edge.type);
212
+ if (existing) {
213
+ const mergedProps = { ...JSON.parse(existing.properties), ...(edge.properties ?? {}) };
214
+ this.db
215
+ .prepare('UPDATE graph_edges SET weight = ?, properties = ?, confidence = COALESCE(?, confidence) WHERE id = ?')
216
+ .run(existing.weight + (edge.weight ?? 1.0), JSON.stringify(mergedProps), edge.confidence ?? null, existing.id);
217
+ }
218
+ else {
219
+ this.addEdge(edge);
220
+ }
221
+ }
222
+ /**
223
+ * Adjust weight on existing edges matching source+target+type by delta.
224
+ * Returns the number of rows updated.
225
+ */
226
+ updateEdgeWeight(source, target, type, delta) {
227
+ const result = this.db
228
+ .prepare('UPDATE graph_edges SET weight = MAX(weight + ?, 0) WHERE source = ? AND target = ? AND type = ?')
229
+ .run(delta, source, target, type);
230
+ return result.changes;
231
+ }
232
+ /**
233
+ * Delete edges older than N days, then delete orphan nodes
234
+ * (nodes with no remaining edges).
235
+ */
236
+ pruneOlderThan(days) {
237
+ const edgeResult = this.db
238
+ .prepare("DELETE FROM graph_edges WHERE (julianday('now') - julianday(created_at)) > ?")
239
+ .run(days);
240
+ const edgesDeleted = edgeResult.changes;
241
+ const nodeResult = this.db
242
+ .prepare(`DELETE FROM graph_nodes WHERE id NOT IN (
243
+ SELECT source FROM graph_edges UNION SELECT target FROM graph_edges
244
+ )`)
245
+ .run();
246
+ const nodesDeleted = nodeResult.changes;
247
+ return { nodesDeleted, edgesDeleted };
248
+ }
249
+ /**
250
+ * Return the age of a node in days, or null if the node doesn't exist.
251
+ */
252
+ getNodeAge(nodeId) {
253
+ const row = this.db
254
+ .prepare("SELECT (julianday('now') - julianday(created_at)) as age FROM graph_nodes WHERE id = ?")
255
+ .get(nodeId);
256
+ return row?.age ?? null;
257
+ }
258
+ // ─── Query ──────────────────────────────────────────────────────
259
+ getNodesByType(type) {
260
+ const rows = this.db.prepare('SELECT * FROM graph_nodes WHERE type = ?').all(type);
261
+ return rows.map((r) => ({ ...r, properties: JSON.parse(r.properties) }));
262
+ }
263
+ getEdgesByType(type) {
264
+ const rows = this.db.prepare('SELECT * FROM graph_edges WHERE type = ?').all(type);
265
+ return rows.map((r) => ({ ...r, properties: JSON.parse(r.properties) }));
266
+ }
267
+ // ─── Stats ──────────────────────────────────────────────────────
268
+ stats() {
269
+ const nodeCount = this.db.prepare('SELECT COUNT(*) as count FROM graph_nodes').get().count;
270
+ const edgeCount = this.db.prepare('SELECT COUNT(*) as count FROM graph_edges').get().count;
271
+ const nodesByType = {};
272
+ const nodeRows = this.db.prepare('SELECT type, COUNT(*) as count FROM graph_nodes GROUP BY type').all();
273
+ for (const row of nodeRows)
274
+ nodesByType[row.type] = row.count;
275
+ const edgesByType = {};
276
+ const edgeRows = this.db.prepare('SELECT type, COUNT(*) as count FROM graph_edges GROUP BY type').all();
277
+ for (const row of edgeRows)
278
+ edgesByType[row.type] = row.count;
279
+ return { nodeCount, edgeCount, nodesByType, edgesByType };
280
+ }
281
+ // ─── EventBus Integration ───────────────────────────────────────
282
+ attachToEventBus(bus) {
283
+ this.bus = bus;
284
+ const onOrchStart = (event) => {
285
+ const d = event.data;
286
+ this.addNode({
287
+ id: d.id,
288
+ type: 'orchestration',
289
+ label: d.name,
290
+ properties: { pattern: d.pattern, phaseCount: d.phaseCount },
291
+ });
292
+ // Add pattern node (idempotent via INSERT OR REPLACE)
293
+ const patternId = `pattern:${d.pattern}`;
294
+ this.addNode({
295
+ id: patternId,
296
+ type: 'pattern',
297
+ label: d.pattern,
298
+ properties: {},
299
+ });
300
+ this.addEdge({
301
+ source: d.id,
302
+ target: patternId,
303
+ type: 'used_pattern',
304
+ confidence: 'EXTRACTED',
305
+ });
306
+ };
307
+ bus.on('orchestration:start', onOrchStart);
308
+ this.listeners.push({ event: 'orchestration:start', handler: onOrchStart });
309
+ const onPhaseStart = (event) => {
310
+ const d = event.data;
311
+ const phaseId = `${d.orchestrationId}:phase:${d.phase}`;
312
+ this.addNode({
313
+ id: phaseId,
314
+ type: 'phase',
315
+ label: d.phase,
316
+ properties: { agentCount: d.agentCount, parallel: d.parallel },
317
+ });
318
+ this.addEdge({
319
+ source: d.orchestrationId,
320
+ target: phaseId,
321
+ type: 'contains',
322
+ confidence: 'EXTRACTED',
323
+ });
324
+ this.currentPhaseMap.set(d.orchestrationId, phaseId);
325
+ };
326
+ bus.on('orchestration:phase-start', onPhaseStart);
327
+ this.listeners.push({ event: 'orchestration:phase-start', handler: onPhaseStart });
328
+ const onAgentSpawning = (event) => {
329
+ const d = event.data;
330
+ this.addNode({
331
+ id: d.agentId,
332
+ type: 'agent',
333
+ label: d.agentType,
334
+ properties: { model: d.model },
335
+ });
336
+ // NOTE: agent:spawning doesn't carry orchestrationId so we can't do a precise
337
+ // lookup. This assumes single-orchestration-at-a-time; for concurrent orchestrations
338
+ // the event schema would need to be extended. Use the most recently added phase
339
+ // (last entry in Map) as the best approximation.
340
+ let currentPhaseId;
341
+ for (const [, phaseId] of this.currentPhaseMap) {
342
+ currentPhaseId = phaseId; // keep overwriting — last one wins
343
+ }
344
+ if (currentPhaseId) {
345
+ this.addEdge({
346
+ source: currentPhaseId,
347
+ target: d.agentId,
348
+ type: 'spawned',
349
+ confidence: 'EXTRACTED',
350
+ });
351
+ }
352
+ };
353
+ bus.on('agent:spawning', onAgentSpawning);
354
+ this.listeners.push({ event: 'agent:spawning', handler: onAgentSpawning });
355
+ const onAgentIdle = (event) => {
356
+ const d = event.data;
357
+ // Update agent node with result
358
+ this.addNode({
359
+ id: d.agentId,
360
+ type: 'agent',
361
+ label: d.agentType,
362
+ properties: {
363
+ model: d.model,
364
+ backend: d.backend,
365
+ usage: d.usage,
366
+ status: 'idle',
367
+ },
368
+ });
369
+ // Add file nodes + edges if filesTouched exists
370
+ if (d.result?.filesTouched) {
371
+ for (const file of d.result.filesTouched) {
372
+ const fileId = `file:${file}`;
373
+ this.addNode({
374
+ id: fileId,
375
+ type: 'file',
376
+ label: file,
377
+ properties: {},
378
+ });
379
+ this.addEdge({
380
+ source: d.agentId,
381
+ target: fileId,
382
+ type: 'touched_file',
383
+ confidence: 'EXTRACTED',
384
+ });
385
+ }
386
+ }
387
+ };
388
+ bus.on('agent:idle', onAgentIdle);
389
+ this.listeners.push({ event: 'agent:idle', handler: onAgentIdle });
390
+ const onPhaseComplete = (event) => {
391
+ const d = event.data;
392
+ const phaseId = `${d.orchestrationId}:phase:${d.phase}`;
393
+ this.addNode({
394
+ id: phaseId,
395
+ type: 'phase',
396
+ label: d.phase,
397
+ properties: { status: d.status, usage: d.usage },
398
+ });
399
+ };
400
+ bus.on('orchestration:phase-complete', onPhaseComplete);
401
+ this.listeners.push({ event: 'orchestration:phase-complete', handler: onPhaseComplete });
402
+ const onOrchComplete = (event) => {
403
+ const d = event.data;
404
+ this.addNode({
405
+ id: d.id,
406
+ type: 'orchestration',
407
+ label: d.name,
408
+ properties: { status: d.status, usage: d.usage, durationMs: d.durationMs },
409
+ });
410
+ this.currentPhaseMap.delete(d.id);
411
+ };
412
+ bus.on('orchestration:complete', onOrchComplete);
413
+ this.listeners.push({ event: 'orchestration:complete', handler: onOrchComplete });
414
+ const onOrchFailed = (event) => {
415
+ const d = event.data;
416
+ this.addNode({
417
+ id: d.id,
418
+ type: 'orchestration',
419
+ label: d.name,
420
+ properties: { status: d.status, usage: d.usage, durationMs: d.durationMs },
421
+ });
422
+ this.currentPhaseMap.delete(d.id);
423
+ };
424
+ bus.on('orchestration:failed', onOrchFailed);
425
+ this.listeners.push({ event: 'orchestration:failed', handler: onOrchFailed });
426
+ }
427
+ detachFromEventBus(bus) {
428
+ for (const { event, handler } of this.listeners) {
429
+ bus.off(event, handler);
430
+ }
431
+ this.listeners = [];
432
+ }
433
+ // ─── Lifecycle ──────────────────────────────────────────────────
434
+ close() {
435
+ if (this.bus)
436
+ this.detachFromEventBus(this.bus);
437
+ if (this.ownDb)
438
+ this.db.close();
439
+ }
440
+ }
441
+ //# sourceMappingURL=execution-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-graph.js","sourceRoot":"","sources":["../../src/runtime/execution-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { ExecutionGraph } from './execution-graph.js';
2
+ export type AttackCategory = 'injection' | 'auth_bypass' | 'data_exposure' | 'race_condition' | 'resource_exhaustion' | 'input_validation' | 'error_handling' | 'crypto_weakness';
3
+ export declare const ALL_ATTACK_CATEGORIES: AttackCategory[];
4
+ export interface CategoryArm {
5
+ category: AttackCategory;
6
+ alpha: number;
7
+ beta_: number;
8
+ roundsApplied: number;
9
+ recentlyPatched: number;
10
+ lastPatchedRound: number;
11
+ }
12
+ export interface AttackStrategy {
13
+ categories: AttackCategory[];
14
+ reasoning: string;
15
+ regressionTargets: AttackCategory[];
16
+ }
17
+ export interface DefenseStrategy {
18
+ priorities: Array<{
19
+ file: string;
20
+ riskScore: number;
21
+ topCategory: AttackCategory;
22
+ }>;
23
+ proactiveChecks: AttackCategory[];
24
+ }
25
+ export interface VulnerabilityHeat {
26
+ file: string;
27
+ riskScore: number;
28
+ topCategory: AttackCategory;
29
+ unresolvedCount: number;
30
+ totalAttacks: number;
31
+ }
32
+ export interface RoundResult {
33
+ category: AttackCategory;
34
+ vulnerabilitiesFound: number;
35
+ vulnerabilitiesPatched: number;
36
+ files: string[];
37
+ roundNumber: number;
38
+ }
39
+ /**
40
+ * Co-evolutionary adversarial learning using Thompson Sampling over attack
41
+ * categories. Maintains Beta-distributed arms per category and persists
42
+ * state to the execution knowledge graph for cross-run learning.
43
+ */
44
+ export declare class AdversarialEvolver {
45
+ private graph;
46
+ private arms;
47
+ private history;
48
+ constructor(graph: ExecutionGraph);
49
+ /**
50
+ * Thompson Sampling to select next attack categories.
51
+ * Unvisited categories are always prioritized. Recently-patched categories
52
+ * get a +0.2 regression bonus within 5 rounds of patching.
53
+ */
54
+ evolveAttackStrategy(targetFiles: string[], previousRounds: RoundResult[]): AttackStrategy;
55
+ /**
56
+ * Generate defense priorities from historical attack data. Files are scored
57
+ * using a blend of overall success rate and recency-weighted rate (λ=0.14,
58
+ * half-life ~5 rounds). Categories with >50% historical attack success
59
+ * are flagged for proactive checking.
60
+ */
61
+ evolveDefenseStrategy(previousAttacks: RoundResult[]): DefenseStrategy;
62
+ /**
63
+ * Record a round's results. Updates the Beta distribution parameters for
64
+ * the attacked category and persists state to the graph.
65
+ */
66
+ recordRound(result: RoundResult): void;
67
+ /**
68
+ * Compute a vulnerability heatmap across all files in history.
69
+ * Files with more unresolved vulnerabilities and recent attack success
70
+ * rank higher.
71
+ */
72
+ getVulnerabilityHeatmap(): VulnerabilityHeat[];
73
+ private saveToGraph;
74
+ private loadFromGraph;
75
+ /**
76
+ * Sample from Beta(α, β) distribution using the ratio of two Gamma samples.
77
+ */
78
+ static sampleBeta(alpha: number, beta_: number, rng?: () => number): number;
79
+ /**
80
+ * Sample from Gamma(shape) distribution via Marsaglia-Tsang method.
81
+ */
82
+ static sampleGamma(shape: number, rng?: () => number): number;
83
+ /**
84
+ * Sample from standard Normal distribution via Box-Muller transform.
85
+ */
86
+ static sampleNormal(rng?: () => number): number;
87
+ }
88
+ //# sourceMappingURL=graph-adversarial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-adversarial.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-adversarial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,aAAa,GACb,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,eAAO,MAAM,qBAAqB,EAAE,cAAc,EASjD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,cAAc,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IACpF,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,cAAc,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;GAIG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,KAAK;IAHzB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,OAAO,CAAgB;gBAEX,KAAK,EAAE,cAAc;IAgBzC;;;;OAIG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,cAAc;IA8C1F;;;;;OAKG;IACH,qBAAqB,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,eAAe;IAiGtE;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAsDtC;;;;OAIG;IACH,uBAAuB,IAAI,iBAAiB,EAAE;IAkE9C,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,MAAoB,GAAG,MAAM;IAOxF;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,MAAoB,GAAG,MAAM;IAyB1E;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,GAAE,MAAM,MAAoB,GAAG,MAAM;CAQ7D"}