swarm-engine 1.1.1 → 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 (339) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +145 -30
  3. package/commands/diff-review.md +27 -15
  4. package/commands/discover.md +102 -0
  5. package/commands/dynamic.md +136 -0
  6. package/commands/fix-pr.md +30 -24
  7. package/commands/postmortem.md +106 -0
  8. package/commands/red-team.md +41 -26
  9. package/commands/research.md +22 -1
  10. package/commands/review-cycle.md +38 -20
  11. package/commands/spike.md +108 -0
  12. package/commands/swarm.md +68 -60
  13. package/commands/tdd.md +44 -24
  14. package/dist/cli/commands/acp.d.ts.map +1 -1
  15. package/dist/cli/commands/acp.js +12 -2
  16. package/dist/cli/commands/acp.js.map +1 -1
  17. package/dist/cli/commands/agents.d.ts.map +1 -1
  18. package/dist/cli/commands/agents.js +16 -13
  19. package/dist/cli/commands/agents.js.map +1 -1
  20. package/dist/cli/commands/completions.d.ts.map +1 -1
  21. package/dist/cli/commands/completions.js +21 -9
  22. package/dist/cli/commands/completions.js.map +1 -1
  23. package/dist/cli/commands/compound.d.ts.map +1 -1
  24. package/dist/cli/commands/compound.js +1 -2
  25. package/dist/cli/commands/compound.js.map +1 -1
  26. package/dist/cli/commands/configure.d.ts.map +1 -1
  27. package/dist/cli/commands/configure.js +24 -8
  28. package/dist/cli/commands/configure.js.map +1 -1
  29. package/dist/cli/commands/convert.d.ts +1 -1
  30. package/dist/cli/commands/convert.d.ts.map +1 -1
  31. package/dist/cli/commands/convert.js +22 -48
  32. package/dist/cli/commands/convert.js.map +1 -1
  33. package/dist/cli/commands/doctor.d.ts.map +1 -1
  34. package/dist/cli/commands/doctor.js +1 -3
  35. package/dist/cli/commands/doctor.js.map +1 -1
  36. package/dist/cli/commands/init.d.ts.map +1 -1
  37. package/dist/cli/commands/init.js +17 -7
  38. package/dist/cli/commands/init.js.map +1 -1
  39. package/dist/cli/commands/install.d.ts.map +1 -1
  40. package/dist/cli/commands/install.js +1 -1
  41. package/dist/cli/commands/install.js.map +1 -1
  42. package/dist/cli/commands/learn.js +6 -6
  43. package/dist/cli/commands/learn.js.map +1 -1
  44. package/dist/cli/commands/mcp.d.ts.map +1 -1
  45. package/dist/cli/commands/mcp.js +1 -2
  46. package/dist/cli/commands/mcp.js.map +1 -1
  47. package/dist/cli/commands/memory.d.ts.map +1 -1
  48. package/dist/cli/commands/memory.js +118 -2
  49. package/dist/cli/commands/memory.js.map +1 -1
  50. package/dist/cli/commands/orchestrate.d.ts.map +1 -1
  51. package/dist/cli/commands/orchestrate.js +20 -7
  52. package/dist/cli/commands/orchestrate.js.map +1 -1
  53. package/dist/cli/commands/plan.d.ts.map +1 -1
  54. package/dist/cli/commands/plan.js.map +1 -1
  55. package/dist/cli/commands/plugin.d.ts.map +1 -1
  56. package/dist/cli/commands/plugin.js +8 -5
  57. package/dist/cli/commands/plugin.js.map +1 -1
  58. package/dist/cli/commands/resume.js +1 -1
  59. package/dist/cli/commands/resume.js.map +1 -1
  60. package/dist/cli/commands/run.d.ts.map +1 -1
  61. package/dist/cli/commands/run.js +20 -6
  62. package/dist/cli/commands/run.js.map +1 -1
  63. package/dist/cli/commands/share.d.ts.map +1 -1
  64. package/dist/cli/commands/share.js +6 -1
  65. package/dist/cli/commands/share.js.map +1 -1
  66. package/dist/cli/commands/status.d.ts.map +1 -1
  67. package/dist/cli/commands/status.js +15 -7
  68. package/dist/cli/commands/status.js.map +1 -1
  69. package/dist/cli/commands/template.d.ts.map +1 -1
  70. package/dist/cli/commands/template.js +14 -6
  71. package/dist/cli/commands/template.js.map +1 -1
  72. package/dist/cli/commands/vault.d.ts.map +1 -1
  73. package/dist/cli/commands/vault.js +14 -9
  74. package/dist/cli/commands/vault.js.map +1 -1
  75. package/dist/cli/commands/verify.d.ts.map +1 -1
  76. package/dist/cli/commands/verify.js +2 -2
  77. package/dist/cli/commands/verify.js.map +1 -1
  78. package/dist/cli/commands/watch.js +1 -1
  79. package/dist/cli/commands/watch.js.map +1 -1
  80. package/dist/cli/index.js +14 -4
  81. package/dist/cli/index.js.map +1 -1
  82. package/dist/core/checkpoint.js +1 -1
  83. package/dist/core/checkpoint.js.map +1 -1
  84. package/dist/core/event-bus.d.ts.map +1 -1
  85. package/dist/core/event-bus.js +9 -3
  86. package/dist/core/event-bus.js.map +1 -1
  87. package/dist/core/lifecycle.js.map +1 -1
  88. package/dist/core/patterns.d.ts.map +1 -1
  89. package/dist/core/patterns.js +31 -8
  90. package/dist/core/patterns.js.map +1 -1
  91. package/dist/core/permissions.d.ts.map +1 -1
  92. package/dist/core/permissions.js +21 -10
  93. package/dist/core/permissions.js.map +1 -1
  94. package/dist/core/registry.d.ts.map +1 -1
  95. package/dist/core/registry.js +10 -6
  96. package/dist/core/registry.js.map +1 -1
  97. package/dist/core/snapshots.d.ts.map +1 -1
  98. package/dist/core/snapshots.js +17 -5
  99. package/dist/core/snapshots.js.map +1 -1
  100. package/dist/core/types.d.ts +33 -0
  101. package/dist/core/types.d.ts.map +1 -1
  102. package/dist/core/types.js.map +1 -1
  103. package/dist/hooks/index.js.map +1 -1
  104. package/dist/index.d.ts +114 -6
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +92 -4
  107. package/dist/index.js.map +1 -1
  108. package/dist/memory/index.d.ts +38 -0
  109. package/dist/memory/index.d.ts.map +1 -1
  110. package/dist/memory/index.js +136 -24
  111. package/dist/memory/index.js.map +1 -1
  112. package/dist/memory/schema.d.ts +1 -0
  113. package/dist/memory/schema.d.ts.map +1 -1
  114. package/dist/memory/schema.js +20 -19
  115. package/dist/memory/schema.js.map +1 -1
  116. package/dist/plugin/index.d.ts.map +1 -1
  117. package/dist/plugin/index.js.map +1 -1
  118. package/dist/runtime/acp.d.ts.map +1 -1
  119. package/dist/runtime/acp.js +71 -41
  120. package/dist/runtime/acp.js.map +1 -1
  121. package/dist/runtime/adaptive.d.ts.map +1 -1
  122. package/dist/runtime/adaptive.js +30 -31
  123. package/dist/runtime/adaptive.js.map +1 -1
  124. package/dist/runtime/agent-runner.d.ts +62 -0
  125. package/dist/runtime/agent-runner.d.ts.map +1 -0
  126. package/dist/runtime/agent-runner.js +224 -0
  127. package/dist/runtime/agent-runner.js.map +1 -0
  128. package/dist/runtime/autonomy.d.ts +1 -0
  129. package/dist/runtime/autonomy.d.ts.map +1 -1
  130. package/dist/runtime/autonomy.js +37 -19
  131. package/dist/runtime/autonomy.js.map +1 -1
  132. package/dist/runtime/backends/claude.d.ts.map +1 -1
  133. package/dist/runtime/backends/claude.js +2 -2
  134. package/dist/runtime/backends/claude.js.map +1 -1
  135. package/dist/runtime/backends/codex.d.ts.map +1 -1
  136. package/dist/runtime/backends/codex.js +8 -11
  137. package/dist/runtime/backends/codex.js.map +1 -1
  138. package/dist/runtime/backends/gemini.d.ts.map +1 -1
  139. package/dist/runtime/backends/gemini.js +11 -7
  140. package/dist/runtime/backends/gemini.js.map +1 -1
  141. package/dist/runtime/backends/index.js +1 -1
  142. package/dist/runtime/backends/index.js.map +1 -1
  143. package/dist/runtime/backends/mock.d.ts.map +1 -1
  144. package/dist/runtime/backends/mock.js +1 -1
  145. package/dist/runtime/backends/mock.js.map +1 -1
  146. package/dist/runtime/backends/vercel-ai.d.ts.map +1 -1
  147. package/dist/runtime/backends/vercel-ai.js +41 -9
  148. package/dist/runtime/backends/vercel-ai.js.map +1 -1
  149. package/dist/runtime/cache-optimizer.d.ts.map +1 -1
  150. package/dist/runtime/cache-optimizer.js +3 -9
  151. package/dist/runtime/cache-optimizer.js.map +1 -1
  152. package/dist/runtime/cascade.d.ts.map +1 -1
  153. package/dist/runtime/cascade.js +34 -7
  154. package/dist/runtime/cascade.js.map +1 -1
  155. package/dist/runtime/chunker.d.ts.map +1 -1
  156. package/dist/runtime/chunker.js +12 -6
  157. package/dist/runtime/chunker.js.map +1 -1
  158. package/dist/runtime/compounder.d.ts +1 -1
  159. package/dist/runtime/compounder.d.ts.map +1 -1
  160. package/dist/runtime/compounder.js +30 -11
  161. package/dist/runtime/compounder.js.map +1 -1
  162. package/dist/runtime/cost-model.d.ts.map +1 -1
  163. package/dist/runtime/cost-model.js +1 -1
  164. package/dist/runtime/cost-model.js.map +1 -1
  165. package/dist/runtime/database.d.ts +16 -0
  166. package/dist/runtime/database.d.ts.map +1 -0
  167. package/dist/runtime/database.js +39 -0
  168. package/dist/runtime/database.js.map +1 -0
  169. package/dist/runtime/distiller.d.ts.map +1 -1
  170. package/dist/runtime/distiller.js +6 -3
  171. package/dist/runtime/distiller.js.map +1 -1
  172. package/dist/runtime/engine.d.ts +25 -9
  173. package/dist/runtime/engine.d.ts.map +1 -1
  174. package/dist/runtime/engine.js +417 -378
  175. package/dist/runtime/engine.js.map +1 -1
  176. package/dist/runtime/execution-graph.d.ts +86 -0
  177. package/dist/runtime/execution-graph.d.ts.map +1 -0
  178. package/dist/runtime/execution-graph.js +441 -0
  179. package/dist/runtime/execution-graph.js.map +1 -0
  180. package/dist/runtime/executor.d.ts +1 -2
  181. package/dist/runtime/executor.d.ts.map +1 -1
  182. package/dist/runtime/executor.js +45 -14
  183. package/dist/runtime/executor.js.map +1 -1
  184. package/dist/runtime/graph-adversarial.d.ts +88 -0
  185. package/dist/runtime/graph-adversarial.d.ts.map +1 -0
  186. package/dist/runtime/graph-adversarial.js +378 -0
  187. package/dist/runtime/graph-adversarial.js.map +1 -0
  188. package/dist/runtime/graph-analyzer.d.ts +106 -0
  189. package/dist/runtime/graph-analyzer.d.ts.map +1 -0
  190. package/dist/runtime/graph-analyzer.js +321 -0
  191. package/dist/runtime/graph-analyzer.js.map +1 -0
  192. package/dist/runtime/graph-causal.d.ts +91 -0
  193. package/dist/runtime/graph-causal.d.ts.map +1 -0
  194. package/dist/runtime/graph-causal.js +292 -0
  195. package/dist/runtime/graph-causal.js.map +1 -0
  196. package/dist/runtime/graph-context-router.d.ts +73 -0
  197. package/dist/runtime/graph-context-router.d.ts.map +1 -0
  198. package/dist/runtime/graph-context-router.js +162 -0
  199. package/dist/runtime/graph-context-router.js.map +1 -0
  200. package/dist/runtime/graph-discovery.d.ts +71 -0
  201. package/dist/runtime/graph-discovery.d.ts.map +1 -0
  202. package/dist/runtime/graph-discovery.js +367 -0
  203. package/dist/runtime/graph-discovery.js.map +1 -0
  204. package/dist/runtime/graph-dropout.d.ts +59 -0
  205. package/dist/runtime/graph-dropout.d.ts.map +1 -0
  206. package/dist/runtime/graph-dropout.js +196 -0
  207. package/dist/runtime/graph-dropout.js.map +1 -0
  208. package/dist/runtime/graph-embeddings.d.ts +58 -0
  209. package/dist/runtime/graph-embeddings.d.ts.map +1 -0
  210. package/dist/runtime/graph-embeddings.js +301 -0
  211. package/dist/runtime/graph-embeddings.js.map +1 -0
  212. package/dist/runtime/graph-feedback.d.ts +30 -0
  213. package/dist/runtime/graph-feedback.d.ts.map +1 -0
  214. package/dist/runtime/graph-feedback.js +82 -0
  215. package/dist/runtime/graph-feedback.js.map +1 -0
  216. package/dist/runtime/graph-gnn.d.ts +120 -0
  217. package/dist/runtime/graph-gnn.d.ts.map +1 -0
  218. package/dist/runtime/graph-gnn.js +524 -0
  219. package/dist/runtime/graph-gnn.js.map +1 -0
  220. package/dist/runtime/graph-learner.d.ts +70 -0
  221. package/dist/runtime/graph-learner.d.ts.map +1 -0
  222. package/dist/runtime/graph-learner.js +265 -0
  223. package/dist/runtime/graph-learner.js.map +1 -0
  224. package/dist/runtime/graph-meta-adversarial.d.ts +113 -0
  225. package/dist/runtime/graph-meta-adversarial.d.ts.map +1 -0
  226. package/dist/runtime/graph-meta-adversarial.js +366 -0
  227. package/dist/runtime/graph-meta-adversarial.js.map +1 -0
  228. package/dist/runtime/graph-meta.d.ts +115 -0
  229. package/dist/runtime/graph-meta.d.ts.map +1 -0
  230. package/dist/runtime/graph-meta.js +437 -0
  231. package/dist/runtime/graph-meta.js.map +1 -0
  232. package/dist/runtime/graph-self-evolve.d.ts +92 -0
  233. package/dist/runtime/graph-self-evolve.d.ts.map +1 -0
  234. package/dist/runtime/graph-self-evolve.js +422 -0
  235. package/dist/runtime/graph-self-evolve.js.map +1 -0
  236. package/dist/runtime/graph-synthesis.d.ts +47 -0
  237. package/dist/runtime/graph-synthesis.d.ts.map +1 -0
  238. package/dist/runtime/graph-synthesis.js +232 -0
  239. package/dist/runtime/graph-synthesis.js.map +1 -0
  240. package/dist/runtime/graph-trajectory.d.ts +88 -0
  241. package/dist/runtime/graph-trajectory.d.ts.map +1 -0
  242. package/dist/runtime/graph-trajectory.js +339 -0
  243. package/dist/runtime/graph-trajectory.js.map +1 -0
  244. package/dist/runtime/heuristics.d.ts +1 -0
  245. package/dist/runtime/heuristics.d.ts.map +1 -1
  246. package/dist/runtime/heuristics.js +44 -22
  247. package/dist/runtime/heuristics.js.map +1 -1
  248. package/dist/runtime/learning-engine.d.ts +63 -0
  249. package/dist/runtime/learning-engine.d.ts.map +1 -0
  250. package/dist/runtime/learning-engine.js +273 -0
  251. package/dist/runtime/learning-engine.js.map +1 -0
  252. package/dist/runtime/living-spec.js +3 -3
  253. package/dist/runtime/living-spec.js.map +1 -1
  254. package/dist/runtime/lsp.d.ts.map +1 -1
  255. package/dist/runtime/lsp.js +41 -14
  256. package/dist/runtime/lsp.js.map +1 -1
  257. package/dist/runtime/mcp.d.ts.map +1 -1
  258. package/dist/runtime/mcp.js +56 -19
  259. package/dist/runtime/mcp.js.map +1 -1
  260. package/dist/runtime/model-router.d.ts +1 -0
  261. package/dist/runtime/model-router.d.ts.map +1 -1
  262. package/dist/runtime/model-router.js +37 -21
  263. package/dist/runtime/model-router.js.map +1 -1
  264. package/dist/runtime/panes.d.ts.map +1 -1
  265. package/dist/runtime/panes.js +50 -49
  266. package/dist/runtime/panes.js.map +1 -1
  267. package/dist/runtime/plan-search.js +2 -2
  268. package/dist/runtime/plan-search.js.map +1 -1
  269. package/dist/runtime/plugins.d.ts +1 -1
  270. package/dist/runtime/plugins.d.ts.map +1 -1
  271. package/dist/runtime/plugins.js +63 -47
  272. package/dist/runtime/plugins.js.map +1 -1
  273. package/dist/runtime/reflexion.d.ts.map +1 -1
  274. package/dist/runtime/reflexion.js +4 -8
  275. package/dist/runtime/reflexion.js.map +1 -1
  276. package/dist/runtime/review-schema.d.ts.map +1 -1
  277. package/dist/runtime/review-schema.js +12 -12
  278. package/dist/runtime/review-schema.js.map +1 -1
  279. package/dist/runtime/rewriter.d.ts.map +1 -1
  280. package/dist/runtime/rewriter.js +29 -9
  281. package/dist/runtime/rewriter.js.map +1 -1
  282. package/dist/runtime/sharing.d.ts +1 -1
  283. package/dist/runtime/sharing.d.ts.map +1 -1
  284. package/dist/runtime/sharing.js +55 -27
  285. package/dist/runtime/sharing.js.map +1 -1
  286. package/dist/runtime/stats.d.ts +1 -0
  287. package/dist/runtime/stats.d.ts.map +1 -1
  288. package/dist/runtime/stats.js +40 -24
  289. package/dist/runtime/stats.js.map +1 -1
  290. package/dist/runtime/templates.d.ts.map +1 -1
  291. package/dist/runtime/templates.js +2 -2
  292. package/dist/runtime/templates.js.map +1 -1
  293. package/dist/runtime/traces.d.ts +1 -0
  294. package/dist/runtime/traces.d.ts.map +1 -1
  295. package/dist/runtime/traces.js +50 -28
  296. package/dist/runtime/traces.js.map +1 -1
  297. package/dist/runtime/verifier.d.ts.map +1 -1
  298. package/dist/runtime/verifier.js +12 -6
  299. package/dist/runtime/verifier.js.map +1 -1
  300. package/dist/runtime/worktree.d.ts.map +1 -1
  301. package/dist/runtime/worktree.js +35 -18
  302. package/dist/runtime/worktree.js.map +1 -1
  303. package/dist/tui/dashboard.d.ts.map +1 -1
  304. package/dist/tui/dashboard.js +20 -16
  305. package/dist/tui/dashboard.js.map +1 -1
  306. package/dist/tui/progress.d.ts +2 -0
  307. package/dist/tui/progress.d.ts.map +1 -1
  308. package/dist/tui/progress.js +105 -33
  309. package/dist/tui/progress.js.map +1 -1
  310. package/dist/tui/renderer.d.ts.map +1 -1
  311. package/dist/tui/renderer.js.map +1 -1
  312. package/dist/utils/compact-format.js +1 -1
  313. package/dist/utils/compact-format.js.map +1 -1
  314. package/dist/utils/config.d.ts.map +1 -1
  315. package/dist/utils/config.js.map +1 -1
  316. package/dist/utils/env.d.ts.map +1 -1
  317. package/dist/utils/env.js +19 -5
  318. package/dist/utils/env.js.map +1 -1
  319. package/dist/utils/errors.d.ts.map +1 -1
  320. package/dist/utils/errors.js +3 -7
  321. package/dist/utils/errors.js.map +1 -1
  322. package/dist/utils/output.d.ts.map +1 -1
  323. package/dist/utils/output.js +6 -2
  324. package/dist/utils/output.js.map +1 -1
  325. package/dist/utils/project-config.d.ts +18 -0
  326. package/dist/utils/project-config.d.ts.map +1 -1
  327. package/dist/utils/project-config.js +14 -6
  328. package/dist/utils/project-config.js.map +1 -1
  329. package/dist/utils/schemas.d.ts.map +1 -1
  330. package/dist/utils/schemas.js +12 -12
  331. package/dist/utils/schemas.js.map +1 -1
  332. package/dist/utils/terminal.d.ts.map +1 -1
  333. package/dist/utils/terminal.js +18 -7
  334. package/dist/utils/terminal.js.map +1 -1
  335. package/dist/utils/tiers.d.ts.map +1 -1
  336. package/dist/utils/tiers.js +14 -6
  337. package/dist/utils/tiers.js.map +1 -1
  338. package/package.json +15 -4
  339. package/skills/swarm-output-style/SKILL.md +154 -48
@@ -0,0 +1,265 @@
1
+ // ─── Standalone Utilities ─────────────────────────────────────────
2
+ /**
3
+ * Extract file-like references from a text string.
4
+ * Matches patterns like "src/runtime/foo.ts", "test/bar.spec.js", "file.ext".
5
+ */
6
+ export function extractFileReferences(text) {
7
+ const patterns = [
8
+ /[\w\-./]+\.\w{1,4}/g, // file.ext or path/to/file.ext
9
+ /src\/[\w\-./]+/g, // src/path/to/thing
10
+ /tests?\/[\w\-./]+/g, // test/path or tests/path
11
+ ];
12
+ const refs = new Set();
13
+ for (const pattern of patterns) {
14
+ const matches = text.match(pattern);
15
+ if (matches) {
16
+ for (const m of matches)
17
+ refs.add(m);
18
+ }
19
+ }
20
+ return [...refs];
21
+ }
22
+ // ─── GraphLearner ─────────────────────────────────────────────────
23
+ /**
24
+ * Cross-run learning from the execution graph.
25
+ * Queries accumulated graph data across all past orchestrations to
26
+ * surface pattern success rates, file co-modifications, and agent
27
+ * performance by file context.
28
+ */
29
+ export class GraphLearner {
30
+ graph;
31
+ constructor(graph) {
32
+ this.graph = graph;
33
+ }
34
+ /**
35
+ * Get success/failure stats for a pattern across all recorded runs.
36
+ * Pass a pattern name to filter, or omit for all patterns.
37
+ */
38
+ getPatternStats(patternName) {
39
+ if (!this.graph)
40
+ return [];
41
+ const patternNodes = this.graph.getNodesByType('pattern');
42
+ const results = [];
43
+ for (const pNode of patternNodes) {
44
+ if (patternName && pNode.label !== patternName)
45
+ continue;
46
+ // used_pattern edges go orchestration → pattern, so look for incoming edges
47
+ const incomingEdges = this.graph.getEdges(pNode.id, 'incoming').filter((e) => e.type === 'used_pattern');
48
+ const orchNodes = incomingEdges
49
+ .map((e) => this.graph.getNode(e.source))
50
+ .filter((n) => n !== null);
51
+ if (orchNodes.length === 0 && !patternName)
52
+ continue;
53
+ const successes = orchNodes.filter((o) => o.properties.status === 'completed');
54
+ const failures = orchNodes.filter((o) => o.properties.status === 'failed');
55
+ const durations = orchNodes.map((o) => o.properties.durationMs || 0).filter((d) => d > 0);
56
+ const costs = orchNodes
57
+ .map((o) => {
58
+ const usage = o.properties.usage;
59
+ return usage?.costUsd || 0;
60
+ })
61
+ .filter((c) => c > 0);
62
+ results.push({
63
+ pattern: pNode.label,
64
+ totalRuns: orchNodes.length,
65
+ successCount: successes.length,
66
+ failCount: failures.length,
67
+ successRate: orchNodes.length > 0 ? successes.length / orchNodes.length : 0,
68
+ avgDurationMs: durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0,
69
+ avgCostUsd: costs.length > 0 ? costs.reduce((a, b) => a + b, 0) / costs.length : 0,
70
+ });
71
+ }
72
+ return results;
73
+ }
74
+ /**
75
+ * Find files that are frequently modified together across orchestrations.
76
+ * Returns pairs sorted by co-modification count (descending).
77
+ */
78
+ getFileCoModifications(minCount = 2) {
79
+ if (!this.graph)
80
+ return [];
81
+ const fileNodes = this.graph.getNodesByType('file');
82
+ // Map each file to the set of orchestrations that touched it.
83
+ // Path: file ←touched_file← agent ←spawned← phase ←contains← orchestration
84
+ const fileToOrchs = new Map();
85
+ for (const file of fileNodes) {
86
+ const orchs = new Set();
87
+ // agents that touched this file
88
+ const touchEdges = this.graph.getEdges(file.id, 'incoming').filter((e) => e.type === 'touched_file');
89
+ for (const te of touchEdges) {
90
+ // phase that spawned this agent
91
+ const spawnEdges = this.graph.getEdges(te.source, 'incoming').filter((e) => e.type === 'spawned');
92
+ for (const se of spawnEdges) {
93
+ // orchestration that contains this phase
94
+ const containEdges = this.graph.getEdges(se.source, 'incoming').filter((e) => e.type === 'contains');
95
+ for (const ce of containEdges) {
96
+ orchs.add(ce.source);
97
+ }
98
+ }
99
+ }
100
+ if (orchs.size > 0) {
101
+ fileToOrchs.set(file.id, orchs);
102
+ }
103
+ }
104
+ // Find co-occurring file pairs
105
+ const pairs = [];
106
+ const fileIds = [...fileToOrchs.keys()];
107
+ for (let i = 0; i < fileIds.length; i++) {
108
+ const orchsA = fileToOrchs.get(fileIds[i]);
109
+ for (let j = i + 1; j < fileIds.length; j++) {
110
+ const orchsB = fileToOrchs.get(fileIds[j]);
111
+ let overlap = 0;
112
+ for (const o of orchsA) {
113
+ if (orchsB.has(o))
114
+ overlap++;
115
+ }
116
+ if (overlap >= minCount) {
117
+ pairs.push({
118
+ file1: this.graph.getNode(fileIds[i])?.label || fileIds[i],
119
+ file2: this.graph.getNode(fileIds[j])?.label || fileIds[j],
120
+ coModCount: overlap,
121
+ confidence: overlap >= 5 ? 'EXTRACTED' : overlap >= 3 ? 'INFERRED' : 'AMBIGUOUS',
122
+ });
123
+ }
124
+ }
125
+ }
126
+ return pairs.sort((a, b) => b.coModCount - a.coModCount);
127
+ }
128
+ /**
129
+ * Get agent performance stats segmented by file directory.
130
+ * Only returns buckets with sampleSize >= 2 to avoid noise.
131
+ */
132
+ getAgentFilePerformance(agentType) {
133
+ if (!this.graph)
134
+ return [];
135
+ const agentNodes = this.graph
136
+ .getNodesByType('agent')
137
+ .filter((n) => !agentType || n.properties.agentType === agentType || n.label === agentType);
138
+ // Group by agentType + directory
139
+ const buckets = new Map();
140
+ for (const agent of agentNodes) {
141
+ const aType = agent.properties.agentType || agent.label;
142
+ const success = agent.properties.status === 'idle';
143
+ const files = this.graph.getEdges(agent.id, 'outgoing').filter((e) => e.type === 'touched_file');
144
+ for (const fileEdge of files) {
145
+ const fileNode = this.graph.getNode(fileEdge.target);
146
+ const dir = (fileNode?.label || '').split('/').slice(0, -1).join('/') || 'root';
147
+ const key = `${aType}::${dir}`;
148
+ const bucket = buckets.get(key) || { success: 0, total: 0 };
149
+ bucket.total++;
150
+ if (success)
151
+ bucket.success++;
152
+ buckets.set(key, bucket);
153
+ }
154
+ }
155
+ return [...buckets.entries()]
156
+ .map(([key, { success, total }]) => {
157
+ const [at, fp] = key.split('::');
158
+ return {
159
+ agentType: at,
160
+ filePattern: fp,
161
+ successRate: total > 0 ? success / total : 0,
162
+ sampleSize: total,
163
+ };
164
+ })
165
+ .filter((r) => r.sampleSize >= 2)
166
+ .sort((a, b) => b.sampleSize - a.sampleSize);
167
+ }
168
+ /**
169
+ * Record cross-run edges after an orchestration completes.
170
+ * Links files that were co-modified in this orchestration to files
171
+ * co-modified in other orchestrations via INFERRED co_modified edges.
172
+ */
173
+ recordCrossRunEdges(orchestrationId) {
174
+ if (!this.graph)
175
+ return;
176
+ const orchNode = this.graph.getNode(orchestrationId);
177
+ if (!orchNode)
178
+ return;
179
+ // Collect all file node IDs touched in this orchestration (3-hop BFS covers orch→phase→agent→file)
180
+ const subgraph = this.graph.bfs(orchestrationId, 3);
181
+ const fileNodes = subgraph.nodes.filter((n) => n.type === 'file');
182
+ if (fileNodes.length < 2)
183
+ return;
184
+ // Add co_modified edges between all file pairs in this orchestration
185
+ for (let i = 0; i < fileNodes.length; i++) {
186
+ for (let j = i + 1; j < fileNodes.length; j++) {
187
+ this.graph.addEdge({
188
+ source: fileNodes[i].id,
189
+ target: fileNodes[j].id,
190
+ type: 'co_modified',
191
+ confidence: 'INFERRED',
192
+ properties: { orchestrationId },
193
+ });
194
+ }
195
+ }
196
+ }
197
+ /**
198
+ * Given a list of files from an agent's task, find co-modified files
199
+ * and format as prompt hint text. Caps at top 5 suggestions.
200
+ * Skips AMBIGUOUS confidence entries (too noisy).
201
+ */
202
+ getCoModHints(files, minCount) {
203
+ if (!this.graph || files.length === 0)
204
+ return '';
205
+ const coMods = this.getFileCoModifications(minCount ?? 2);
206
+ if (coMods.length === 0)
207
+ return '';
208
+ const fileSet = new Set(files);
209
+ const extracted = [];
210
+ const inferred = [];
211
+ for (const coMod of coMods) {
212
+ if (coMod.confidence === 'AMBIGUOUS')
213
+ continue;
214
+ let matchedFile = null;
215
+ let otherFile = null;
216
+ if (fileSet.has(coMod.file1) || files.some((f) => coMod.file1.includes(f) || f.includes(coMod.file1))) {
217
+ matchedFile = coMod.file1;
218
+ otherFile = coMod.file2;
219
+ }
220
+ else if (fileSet.has(coMod.file2) || files.some((f) => coMod.file2.includes(f) || f.includes(coMod.file2))) {
221
+ matchedFile = coMod.file2;
222
+ otherFile = coMod.file1;
223
+ }
224
+ if (!matchedFile || !otherFile)
225
+ continue;
226
+ // Don't suggest files already in the working set
227
+ if (fileSet.has(otherFile) || files.some((f) => otherFile.includes(f) || f.includes(otherFile)))
228
+ continue;
229
+ if (coMod.confidence === 'EXTRACTED') {
230
+ if (!extracted.includes(otherFile))
231
+ extracted.push(otherFile);
232
+ }
233
+ else if (coMod.confidence === 'INFERRED') {
234
+ if (!inferred.includes(otherFile))
235
+ inferred.push(otherFile);
236
+ }
237
+ }
238
+ const parts = [];
239
+ if (extracted.length > 0) {
240
+ const capped = extracted.slice(0, 5);
241
+ parts.push(`\n\nNote: These files are typically modified together with the files you're working on: ${capped.join(', ')}`);
242
+ }
243
+ if (inferred.length > 0) {
244
+ const remaining = 5 - (extracted.length > 5 ? 5 : extracted.length);
245
+ if (remaining > 0) {
246
+ const capped = inferred.slice(0, remaining);
247
+ parts.push(`\n\nConsider also reviewing: ${capped.join(', ')}`);
248
+ }
249
+ }
250
+ return parts.join('');
251
+ }
252
+ /**
253
+ * Format pattern stats as context for agent prompts.
254
+ */
255
+ formatPatternContext(stats) {
256
+ if (stats.length === 0)
257
+ return '';
258
+ const lines = stats.map((s) => `Pattern "${s.pattern}": ${s.totalRuns} runs, ` +
259
+ `${Math.round(s.successRate * 100)}% success rate` +
260
+ (s.avgDurationMs > 0 ? `, avg ${Math.round(s.avgDurationMs / 1000)}s` : '') +
261
+ (s.avgCostUsd > 0 ? `, avg $${s.avgCostUsd.toFixed(2)}` : ''));
262
+ return `[Graph Learning — Pattern History]\n${lines.join('\n')}`;
263
+ }
264
+ }
265
+ //# sourceMappingURL=graph-learner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-learner.js","sourceRoot":"","sources":["../../src/runtime/graph-learner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import type { ExecutionGraph } from './execution-graph.js';
2
+ export interface Vulnerability {
3
+ system: 'patternSelector' | 'dropout' | 'causal' | 'heuristic';
4
+ severity: 'low' | 'medium' | 'high';
5
+ description: string;
6
+ perturbation: string;
7
+ originalOutput: string;
8
+ perturbedOutput: string;
9
+ sensitivityScore: number;
10
+ }
11
+ export interface SelfAuditReport {
12
+ vulnerabilities: Vulnerability[];
13
+ overallRisk: 'low' | 'medium' | 'high';
14
+ recommendations: string[];
15
+ systemsAudited: string[];
16
+ totalTrials: number;
17
+ }
18
+ type PerturbStrategy = 'noise' | 'swap' | 'truncate' | 'prefix';
19
+ /**
20
+ * Red-teams the orchestration engine's own decision-making subsystems
21
+ * by perturbing inputs and checking if outputs change dramatically
22
+ * (sensitivity analysis). This is a testing/auditing tool, not a
23
+ * runtime component.
24
+ */
25
+ export declare class MetaAdversarialTester {
26
+ private graph;
27
+ constructor(graph: ExecutionGraph);
28
+ /**
29
+ * Test if a pattern selector is fragile to input perturbation.
30
+ * Generates perturbation pairs and checks if the recommendation changes.
31
+ */
32
+ testPatternSelector(selector: {
33
+ selectPattern: (task: string, ctx?: any) => {
34
+ pattern: string;
35
+ confidence: number;
36
+ alternatives?: Array<{
37
+ pattern: string;
38
+ confidence: number;
39
+ }>;
40
+ };
41
+ }, numTrials?: number): Vulnerability[];
42
+ /**
43
+ * Test if a dropout predictor makes wrong decisions at boundaries.
44
+ * Varies agent type, phase kind, and file count to find flip points.
45
+ */
46
+ testDropoutPredictor(dropout: {
47
+ predictRedundant: (agents: Array<{
48
+ id: string;
49
+ agentType: string;
50
+ }>, phaseKind: string, fileCount: number, pattern: string, threshold?: number) => Array<{
51
+ shouldDropOut: boolean;
52
+ predictedContribution: number;
53
+ }>;
54
+ }, numTrials?: number): Vulnerability[];
55
+ /**
56
+ * Test if a causal engine finds spurious correlations.
57
+ * Creates synthetic scenarios with known confounders and Simpson's paradox data.
58
+ */
59
+ testCausalEngine(causal: {
60
+ estimateCausalEffect: (treatment: string, treatmentValue: string, controlValue: string) => {
61
+ effect: number;
62
+ confidence: string;
63
+ sampleCount: number;
64
+ };
65
+ }, numTrials?: number): Vulnerability[];
66
+ /**
67
+ * Run a comprehensive audit across all provided subsystems.
68
+ */
69
+ runFullAudit(systems: {
70
+ patternSelector?: {
71
+ selectPattern: (task: string, ctx?: any) => {
72
+ pattern: string;
73
+ confidence: number;
74
+ alternatives?: Array<{
75
+ pattern: string;
76
+ confidence: number;
77
+ }>;
78
+ };
79
+ };
80
+ dropout?: {
81
+ predictRedundant: (agents: Array<{
82
+ id: string;
83
+ agentType: string;
84
+ }>, phaseKind: string, fileCount: number, pattern: string, threshold?: number) => Array<{
85
+ shouldDropOut: boolean;
86
+ predictedContribution: number;
87
+ }>;
88
+ };
89
+ causal?: {
90
+ estimateCausalEffect: (treatment: string, treatmentValue: string, controlValue: string) => {
91
+ effect: number;
92
+ confidence: string;
93
+ sampleCount: number;
94
+ };
95
+ };
96
+ }): SelfAuditReport;
97
+ private generateRecommendations;
98
+ /**
99
+ * Compute sensitivity between two pattern selection results.
100
+ * Uses 1 - cosine similarity of the confidence distributions.
101
+ */
102
+ private computePatternSensitivity;
103
+ /**
104
+ * Deterministic text perturbation given a strategy and optional RNG.
105
+ * - noise: insert random words between existing words
106
+ * - swap: swap two adjacent words
107
+ * - truncate: remove last ~20% of text
108
+ * - prefix: add misleading prefix
109
+ */
110
+ static perturbText(text: string, strategy: PerturbStrategy, rng?: () => number): string;
111
+ }
112
+ export {};
113
+ //# sourceMappingURL=graph-meta-adversarial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-meta-adversarial.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-meta-adversarial.ts"],"names":[],"mappings":"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"}