swarm-engine 1.1.0 → 1.3.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 (300) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +102 -25
  3. package/agents/accessibility-reviewer.md +2 -0
  4. package/agents/api-contract-reviewer.md +2 -0
  5. package/agents/concurrency-reviewer.md +2 -0
  6. package/agents/data-integrity-reviewer.md +1 -0
  7. package/agents/debugger.md +2 -0
  8. package/agents/dependency-reviewer.md +2 -0
  9. package/agents/devils-advocate.md +1 -0
  10. package/agents/documentation-reviewer.md +2 -0
  11. package/agents/documenter.md +13 -0
  12. package/agents/error-handling-reviewer.md +2 -0
  13. package/agents/grounding.md +3 -2
  14. package/agents/guardian.md +3 -0
  15. package/agents/implementer.md +2 -0
  16. package/agents/integrator.md +3 -0
  17. package/agents/judge.md +2 -0
  18. package/agents/librarian.md +4 -1
  19. package/agents/orchestrator.md +3 -0
  20. package/agents/performance-reviewer.md +2 -0
  21. package/agents/planner.md +2 -0
  22. package/agents/refactorer.md +3 -0
  23. package/agents/reviewer.md +1 -0
  24. package/agents/security-reviewer.md +1 -0
  25. package/agents/sentinel.md +3 -0
  26. package/agents/tester.md +2 -0
  27. package/agents/testing-reviewer.md +2 -0
  28. package/commands/diff-review.md +27 -15
  29. package/commands/discover.md +102 -0
  30. package/commands/dynamic.md +136 -0
  31. package/commands/fix-pr.md +30 -24
  32. package/commands/postmortem.md +106 -0
  33. package/commands/red-team.md +41 -26
  34. package/commands/research.md +22 -1
  35. package/commands/review-cycle.md +38 -20
  36. package/commands/spike.md +108 -0
  37. package/commands/swarm.md +68 -60
  38. package/commands/tdd.md +44 -24
  39. package/dist/cli/commands/acp.d.ts.map +1 -1
  40. package/dist/cli/commands/acp.js +12 -2
  41. package/dist/cli/commands/acp.js.map +1 -1
  42. package/dist/cli/commands/agents.d.ts.map +1 -1
  43. package/dist/cli/commands/agents.js +16 -13
  44. package/dist/cli/commands/agents.js.map +1 -1
  45. package/dist/cli/commands/completions.d.ts.map +1 -1
  46. package/dist/cli/commands/completions.js +21 -9
  47. package/dist/cli/commands/completions.js.map +1 -1
  48. package/dist/cli/commands/compound.d.ts.map +1 -1
  49. package/dist/cli/commands/compound.js +1 -2
  50. package/dist/cli/commands/compound.js.map +1 -1
  51. package/dist/cli/commands/configure.d.ts.map +1 -1
  52. package/dist/cli/commands/configure.js +24 -8
  53. package/dist/cli/commands/configure.js.map +1 -1
  54. package/dist/cli/commands/convert.d.ts +1 -1
  55. package/dist/cli/commands/convert.d.ts.map +1 -1
  56. package/dist/cli/commands/convert.js +22 -48
  57. package/dist/cli/commands/convert.js.map +1 -1
  58. package/dist/cli/commands/doctor.d.ts.map +1 -1
  59. package/dist/cli/commands/doctor.js +1 -3
  60. package/dist/cli/commands/doctor.js.map +1 -1
  61. package/dist/cli/commands/init.d.ts.map +1 -1
  62. package/dist/cli/commands/init.js +17 -7
  63. package/dist/cli/commands/init.js.map +1 -1
  64. package/dist/cli/commands/install.d.ts.map +1 -1
  65. package/dist/cli/commands/install.js +1 -1
  66. package/dist/cli/commands/install.js.map +1 -1
  67. package/dist/cli/commands/learn.js +6 -6
  68. package/dist/cli/commands/learn.js.map +1 -1
  69. package/dist/cli/commands/mcp.d.ts.map +1 -1
  70. package/dist/cli/commands/mcp.js +1 -2
  71. package/dist/cli/commands/mcp.js.map +1 -1
  72. package/dist/cli/commands/memory.d.ts.map +1 -1
  73. package/dist/cli/commands/memory.js +1 -2
  74. package/dist/cli/commands/memory.js.map +1 -1
  75. package/dist/cli/commands/orchestrate.d.ts.map +1 -1
  76. package/dist/cli/commands/orchestrate.js +20 -7
  77. package/dist/cli/commands/orchestrate.js.map +1 -1
  78. package/dist/cli/commands/plan.d.ts.map +1 -1
  79. package/dist/cli/commands/plan.js.map +1 -1
  80. package/dist/cli/commands/plugin.d.ts.map +1 -1
  81. package/dist/cli/commands/plugin.js +8 -5
  82. package/dist/cli/commands/plugin.js.map +1 -1
  83. package/dist/cli/commands/resume.js +1 -1
  84. package/dist/cli/commands/resume.js.map +1 -1
  85. package/dist/cli/commands/run.d.ts.map +1 -1
  86. package/dist/cli/commands/run.js +20 -6
  87. package/dist/cli/commands/run.js.map +1 -1
  88. package/dist/cli/commands/share.d.ts.map +1 -1
  89. package/dist/cli/commands/share.js +6 -1
  90. package/dist/cli/commands/share.js.map +1 -1
  91. package/dist/cli/commands/status.d.ts.map +1 -1
  92. package/dist/cli/commands/status.js +15 -7
  93. package/dist/cli/commands/status.js.map +1 -1
  94. package/dist/cli/commands/template.d.ts.map +1 -1
  95. package/dist/cli/commands/template.js +14 -6
  96. package/dist/cli/commands/template.js.map +1 -1
  97. package/dist/cli/commands/vault.d.ts.map +1 -1
  98. package/dist/cli/commands/vault.js +14 -9
  99. package/dist/cli/commands/vault.js.map +1 -1
  100. package/dist/cli/commands/verify.d.ts.map +1 -1
  101. package/dist/cli/commands/verify.js +2 -2
  102. package/dist/cli/commands/verify.js.map +1 -1
  103. package/dist/cli/commands/watch.js +1 -1
  104. package/dist/cli/commands/watch.js.map +1 -1
  105. package/dist/cli/index.js +14 -4
  106. package/dist/cli/index.js.map +1 -1
  107. package/dist/core/checkpoint.js +1 -1
  108. package/dist/core/checkpoint.js.map +1 -1
  109. package/dist/core/event-bus.d.ts.map +1 -1
  110. package/dist/core/event-bus.js +9 -3
  111. package/dist/core/event-bus.js.map +1 -1
  112. package/dist/core/lifecycle.js.map +1 -1
  113. package/dist/core/patterns.d.ts.map +1 -1
  114. package/dist/core/patterns.js +31 -8
  115. package/dist/core/patterns.js.map +1 -1
  116. package/dist/core/permissions.d.ts.map +1 -1
  117. package/dist/core/permissions.js +21 -10
  118. package/dist/core/permissions.js.map +1 -1
  119. package/dist/core/registry.d.ts.map +1 -1
  120. package/dist/core/registry.js +10 -6
  121. package/dist/core/registry.js.map +1 -1
  122. package/dist/core/snapshots.d.ts.map +1 -1
  123. package/dist/core/snapshots.js +17 -5
  124. package/dist/core/snapshots.js.map +1 -1
  125. package/dist/core/types.d.ts +3 -0
  126. package/dist/core/types.d.ts.map +1 -1
  127. package/dist/core/types.js.map +1 -1
  128. package/dist/hooks/index.js.map +1 -1
  129. package/dist/index.d.ts +68 -6
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +60 -4
  132. package/dist/index.js.map +1 -1
  133. package/dist/memory/index.d.ts +1 -0
  134. package/dist/memory/index.d.ts.map +1 -1
  135. package/dist/memory/index.js +39 -24
  136. package/dist/memory/index.js.map +1 -1
  137. package/dist/memory/schema.d.ts +1 -0
  138. package/dist/memory/schema.d.ts.map +1 -1
  139. package/dist/memory/schema.js +20 -19
  140. package/dist/memory/schema.js.map +1 -1
  141. package/dist/plugin/index.d.ts.map +1 -1
  142. package/dist/plugin/index.js.map +1 -1
  143. package/dist/runtime/acp.d.ts.map +1 -1
  144. package/dist/runtime/acp.js +71 -41
  145. package/dist/runtime/acp.js.map +1 -1
  146. package/dist/runtime/adaptive.d.ts.map +1 -1
  147. package/dist/runtime/adaptive.js +30 -31
  148. package/dist/runtime/adaptive.js.map +1 -1
  149. package/dist/runtime/agent-runner.d.ts +52 -0
  150. package/dist/runtime/agent-runner.d.ts.map +1 -0
  151. package/dist/runtime/agent-runner.js +156 -0
  152. package/dist/runtime/agent-runner.js.map +1 -0
  153. package/dist/runtime/autonomy.d.ts +1 -0
  154. package/dist/runtime/autonomy.d.ts.map +1 -1
  155. package/dist/runtime/autonomy.js +37 -19
  156. package/dist/runtime/autonomy.js.map +1 -1
  157. package/dist/runtime/backends/claude.d.ts.map +1 -1
  158. package/dist/runtime/backends/claude.js +2 -2
  159. package/dist/runtime/backends/claude.js.map +1 -1
  160. package/dist/runtime/backends/codex.d.ts.map +1 -1
  161. package/dist/runtime/backends/codex.js +8 -11
  162. package/dist/runtime/backends/codex.js.map +1 -1
  163. package/dist/runtime/backends/gemini.d.ts.map +1 -1
  164. package/dist/runtime/backends/gemini.js +11 -7
  165. package/dist/runtime/backends/gemini.js.map +1 -1
  166. package/dist/runtime/backends/index.js +1 -1
  167. package/dist/runtime/backends/index.js.map +1 -1
  168. package/dist/runtime/backends/mock.d.ts.map +1 -1
  169. package/dist/runtime/backends/mock.js +1 -1
  170. package/dist/runtime/backends/mock.js.map +1 -1
  171. package/dist/runtime/backends/vercel-ai.d.ts.map +1 -1
  172. package/dist/runtime/backends/vercel-ai.js +41 -9
  173. package/dist/runtime/backends/vercel-ai.js.map +1 -1
  174. package/dist/runtime/cache-optimizer.d.ts.map +1 -1
  175. package/dist/runtime/cache-optimizer.js +3 -9
  176. package/dist/runtime/cache-optimizer.js.map +1 -1
  177. package/dist/runtime/cascade.d.ts.map +1 -1
  178. package/dist/runtime/cascade.js +34 -7
  179. package/dist/runtime/cascade.js.map +1 -1
  180. package/dist/runtime/chunker.d.ts.map +1 -1
  181. package/dist/runtime/chunker.js +12 -6
  182. package/dist/runtime/chunker.js.map +1 -1
  183. package/dist/runtime/compounder.d.ts +1 -1
  184. package/dist/runtime/compounder.d.ts.map +1 -1
  185. package/dist/runtime/compounder.js +30 -11
  186. package/dist/runtime/compounder.js.map +1 -1
  187. package/dist/runtime/cost-model.d.ts.map +1 -1
  188. package/dist/runtime/cost-model.js +1 -1
  189. package/dist/runtime/cost-model.js.map +1 -1
  190. package/dist/runtime/database.d.ts +16 -0
  191. package/dist/runtime/database.d.ts.map +1 -0
  192. package/dist/runtime/database.js +39 -0
  193. package/dist/runtime/database.js.map +1 -0
  194. package/dist/runtime/distiller.d.ts.map +1 -1
  195. package/dist/runtime/distiller.js +6 -3
  196. package/dist/runtime/distiller.js.map +1 -1
  197. package/dist/runtime/engine.d.ts +7 -9
  198. package/dist/runtime/engine.d.ts.map +1 -1
  199. package/dist/runtime/engine.js +129 -394
  200. package/dist/runtime/engine.js.map +1 -1
  201. package/dist/runtime/executor.d.ts +1 -2
  202. package/dist/runtime/executor.d.ts.map +1 -1
  203. package/dist/runtime/executor.js +45 -14
  204. package/dist/runtime/executor.js.map +1 -1
  205. package/dist/runtime/heuristics.d.ts +1 -0
  206. package/dist/runtime/heuristics.d.ts.map +1 -1
  207. package/dist/runtime/heuristics.js +44 -22
  208. package/dist/runtime/heuristics.js.map +1 -1
  209. package/dist/runtime/learning-engine.d.ts +51 -0
  210. package/dist/runtime/learning-engine.d.ts.map +1 -0
  211. package/dist/runtime/learning-engine.js +209 -0
  212. package/dist/runtime/learning-engine.js.map +1 -0
  213. package/dist/runtime/living-spec.js +3 -3
  214. package/dist/runtime/living-spec.js.map +1 -1
  215. package/dist/runtime/lsp.d.ts.map +1 -1
  216. package/dist/runtime/lsp.js +41 -14
  217. package/dist/runtime/lsp.js.map +1 -1
  218. package/dist/runtime/mcp.d.ts.map +1 -1
  219. package/dist/runtime/mcp.js +56 -19
  220. package/dist/runtime/mcp.js.map +1 -1
  221. package/dist/runtime/model-router.d.ts +1 -0
  222. package/dist/runtime/model-router.d.ts.map +1 -1
  223. package/dist/runtime/model-router.js +37 -21
  224. package/dist/runtime/model-router.js.map +1 -1
  225. package/dist/runtime/panes.d.ts.map +1 -1
  226. package/dist/runtime/panes.js +50 -49
  227. package/dist/runtime/panes.js.map +1 -1
  228. package/dist/runtime/plan-search.js +2 -2
  229. package/dist/runtime/plan-search.js.map +1 -1
  230. package/dist/runtime/plugins.d.ts +1 -1
  231. package/dist/runtime/plugins.d.ts.map +1 -1
  232. package/dist/runtime/plugins.js +63 -47
  233. package/dist/runtime/plugins.js.map +1 -1
  234. package/dist/runtime/reflexion.d.ts.map +1 -1
  235. package/dist/runtime/reflexion.js +4 -8
  236. package/dist/runtime/reflexion.js.map +1 -1
  237. package/dist/runtime/review-schema.d.ts.map +1 -1
  238. package/dist/runtime/review-schema.js +12 -12
  239. package/dist/runtime/review-schema.js.map +1 -1
  240. package/dist/runtime/rewriter.d.ts.map +1 -1
  241. package/dist/runtime/rewriter.js +29 -9
  242. package/dist/runtime/rewriter.js.map +1 -1
  243. package/dist/runtime/sharing.d.ts +1 -1
  244. package/dist/runtime/sharing.d.ts.map +1 -1
  245. package/dist/runtime/sharing.js +55 -27
  246. package/dist/runtime/sharing.js.map +1 -1
  247. package/dist/runtime/stats.d.ts +1 -0
  248. package/dist/runtime/stats.d.ts.map +1 -1
  249. package/dist/runtime/stats.js +40 -24
  250. package/dist/runtime/stats.js.map +1 -1
  251. package/dist/runtime/templates.d.ts.map +1 -1
  252. package/dist/runtime/templates.js +2 -2
  253. package/dist/runtime/templates.js.map +1 -1
  254. package/dist/runtime/traces.d.ts +1 -0
  255. package/dist/runtime/traces.d.ts.map +1 -1
  256. package/dist/runtime/traces.js +50 -28
  257. package/dist/runtime/traces.js.map +1 -1
  258. package/dist/runtime/verifier.d.ts.map +1 -1
  259. package/dist/runtime/verifier.js +12 -6
  260. package/dist/runtime/verifier.js.map +1 -1
  261. package/dist/runtime/worktree.d.ts.map +1 -1
  262. package/dist/runtime/worktree.js +35 -18
  263. package/dist/runtime/worktree.js.map +1 -1
  264. package/dist/tui/dashboard.d.ts.map +1 -1
  265. package/dist/tui/dashboard.js +20 -16
  266. package/dist/tui/dashboard.js.map +1 -1
  267. package/dist/tui/progress.d.ts +2 -0
  268. package/dist/tui/progress.d.ts.map +1 -1
  269. package/dist/tui/progress.js +105 -33
  270. package/dist/tui/progress.js.map +1 -1
  271. package/dist/tui/renderer.d.ts.map +1 -1
  272. package/dist/tui/renderer.js.map +1 -1
  273. package/dist/utils/compact-format.js +1 -1
  274. package/dist/utils/compact-format.js.map +1 -1
  275. package/dist/utils/config.d.ts.map +1 -1
  276. package/dist/utils/config.js.map +1 -1
  277. package/dist/utils/env.d.ts.map +1 -1
  278. package/dist/utils/env.js +19 -5
  279. package/dist/utils/env.js.map +1 -1
  280. package/dist/utils/errors.d.ts.map +1 -1
  281. package/dist/utils/errors.js +3 -7
  282. package/dist/utils/errors.js.map +1 -1
  283. package/dist/utils/output.d.ts.map +1 -1
  284. package/dist/utils/output.js +6 -2
  285. package/dist/utils/output.js.map +1 -1
  286. package/dist/utils/project-config.d.ts +18 -0
  287. package/dist/utils/project-config.d.ts.map +1 -1
  288. package/dist/utils/project-config.js +14 -6
  289. package/dist/utils/project-config.js.map +1 -1
  290. package/dist/utils/schemas.d.ts.map +1 -1
  291. package/dist/utils/schemas.js +12 -12
  292. package/dist/utils/schemas.js.map +1 -1
  293. package/dist/utils/terminal.d.ts.map +1 -1
  294. package/dist/utils/terminal.js +18 -7
  295. package/dist/utils/terminal.js.map +1 -1
  296. package/dist/utils/tiers.d.ts.map +1 -1
  297. package/dist/utils/tiers.js +14 -6
  298. package/dist/utils/tiers.js.map +1 -1
  299. package/package.json +14 -3
  300. package/skills/swarm-output-style/SKILL.md +114 -46
@@ -1,17 +1,24 @@
1
1
  import Database from 'better-sqlite3';
2
2
  import { existsSync, mkdirSync } from 'fs';
3
- import { join, dirname } from 'path';
4
- import { homedir } from 'os';
3
+ import { dirname } from 'path';
4
+ import { getDatabase } from './database.js';
5
5
  export class ModelRouter {
6
6
  db;
7
+ ownDb;
7
8
  constructor(dbPath) {
8
- const path = dbPath ?? join(homedir(), '.swarm', 'data', 'router.db');
9
- const dir = dirname(path);
10
- if (!existsSync(dir))
11
- mkdirSync(dir, { recursive: true, mode: 0o700 });
12
- this.db = new Database(path);
13
- this.db.pragma('journal_mode = WAL');
14
- this.db.pragma('busy_timeout = 5000');
9
+ if (dbPath) {
10
+ const dir = dirname(dbPath);
11
+ if (!existsSync(dir))
12
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
13
+ this.db = new Database(dbPath);
14
+ this.db.pragma('journal_mode = WAL');
15
+ this.db.pragma('busy_timeout = 5000');
16
+ this.ownDb = true;
17
+ }
18
+ else {
19
+ this.db = getDatabase();
20
+ this.ownDb = false;
21
+ }
15
22
  this.initSchema();
16
23
  }
17
24
  initSchema() {
@@ -29,18 +36,22 @@ export class ModelRouter {
29
36
  }
30
37
  /** Record an outcome for a model on a task type */
31
38
  record(model, taskType, success, reward) {
32
- this.db.prepare('INSERT INTO model_outcomes (model, task_type, success, reward) VALUES (?, ?, ?, ?)').run(model, taskType, success ? 1 : 0, reward ?? (success ? 1.0 : 0.0));
39
+ this.db
40
+ .prepare('INSERT INTO model_outcomes (model, task_type, success, reward) VALUES (?, ?, ?, ?)')
41
+ .run(model, taskType, success ? 1 : 0, reward ?? (success ? 1.0 : 0.0));
33
42
  }
34
43
  /** Select the best model for a task type using UCB1 */
35
44
  recommend(taskType, candidates) {
36
45
  if (candidates.length === 0)
37
46
  return 'claude-sonnet-4-6';
38
47
  // Single query for all models instead of N+1 per-candidate queries
39
- const rows = this.db.prepare(`
48
+ const rows = this.db
49
+ .prepare(`
40
50
  SELECT model, COUNT(*) as attempts, AVG(reward) as avg_reward
41
51
  FROM model_outcomes WHERE task_type = ?
42
52
  GROUP BY model
43
- `).all(taskType);
53
+ `)
54
+ .all(taskType);
44
55
  const statsMap = new Map();
45
56
  let N = 0;
46
57
  for (const row of rows) {
@@ -58,9 +69,7 @@ export class ModelRouter {
58
69
  const avgReward = stats?.avgReward ?? 0.5;
59
70
  // UCB1 formula: avg_reward + sqrt(2 * ln(N) / n_i)
60
71
  // For unexplored models, return Infinity (explore first)
61
- const ucb = attempts === 0
62
- ? Infinity
63
- : avgReward + Math.sqrt(2 * Math.log(N) / attempts);
72
+ const ucb = attempts === 0 ? Infinity : avgReward + Math.sqrt((2 * Math.log(N)) / attempts);
64
73
  if (ucb > bestScore) {
65
74
  bestScore = ucb;
66
75
  bestModel = model;
@@ -70,25 +79,32 @@ export class ModelRouter {
70
79
  }
71
80
  /** Get scores for all models for a task type */
72
81
  getScores(taskType) {
73
- const rows = this.db.prepare(`
82
+ const rows = this.db
83
+ .prepare(`
74
84
  SELECT model, task_type, COUNT(*) as attempts, SUM(success) as successes, AVG(reward) as avg_reward
75
85
  FROM model_outcomes
76
86
  WHERE task_type = ?
77
87
  GROUP BY model
78
- `).all(taskType);
88
+ `)
89
+ .all(taskType);
79
90
  const N = rows.reduce((sum, r) => sum + r.attempts, 0) || 1;
80
- return rows.map(r => ({
91
+ return rows.map((r) => ({
81
92
  model: r.model,
82
93
  taskType: r.task_type,
83
94
  successes: r.successes,
84
95
  attempts: r.attempts,
85
96
  avgReward: r.avg_reward ?? 0,
86
- ucbScore: r.attempts === 0 ? Infinity : (r.avg_reward ?? 0) + Math.sqrt(2 * Math.log(N) / r.attempts),
97
+ ucbScore: r.attempts === 0 ? Infinity : (r.avg_reward ?? 0) + Math.sqrt((2 * Math.log(N)) / r.attempts),
87
98
  }));
88
99
  }
89
100
  prune(maxRows = 10000) {
90
- this.db.prepare('DELETE FROM model_outcomes WHERE id NOT IN (SELECT id FROM model_outcomes ORDER BY created_at DESC LIMIT ?)').run(maxRows);
101
+ this.db
102
+ .prepare('DELETE FROM model_outcomes WHERE id NOT IN (SELECT id FROM model_outcomes ORDER BY created_at DESC LIMIT ?)')
103
+ .run(maxRows);
104
+ }
105
+ close() {
106
+ if (this.ownDb)
107
+ this.db.close();
91
108
  }
92
- close() { this.db.close(); }
93
109
  }
94
110
  //# sourceMappingURL=model-router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/runtime/model-router.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"panes.d.ts","sourceRoot":"","sources":["../../src/runtime/panes.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,CAAC,EAAE,MAAM;IAIhC,iDAAiD;IACjD,MAAM,CAAC,WAAW,IAAI,OAAO;IAO7B,gEAAgE;IAChE,KAAK,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAmCtC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAoDrI,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAwBjD,kDAAkD;IAClD,MAAM,IAAI,IAAI;IAKd,oDAAoD;IACpD,cAAc,IAAI,MAAM;IAIxB,oCAAoC;IACpC,IAAI,IAAI,IAAI;IASZ,yBAAyB;IACzB,IAAI,IAAI,QAAQ,EAAE;IAIlB,kCAAkC;IAClC,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAUnC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAWxC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,OAAO,CAAC,QAAQ;CAOjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAef"}
1
+ {"version":3,"file":"panes.d.ts","sourceRoot":"","sources":["../../src/runtime/panes.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,CAAC,EAAE,MAAM;IAIhC,iDAAiD;IACjD,MAAM,CAAC,WAAW,IAAI,OAAO;IAS7B,gEAAgE;IAChE,KAAK,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IA8BtC;;;OAGG;IACH,UAAU,CACR,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IA8DzC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAyBjD,kDAAkD;IAClD,MAAM,IAAI,IAAI;IAKd,oDAAoD;IACpD,cAAc,IAAI,MAAM;IAIxB,oCAAoC;IACpC,IAAI,IAAI,IAAI;IAWZ,yBAAyB;IACzB,IAAI,IAAI,QAAQ,EAAE;IAIlB,kCAAkC;IAClC,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQnC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAWxC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWlC,OAAO,CAAC,QAAQ;CAOjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAehG"}
@@ -30,35 +30,30 @@ export class PaneManager {
30
30
  /** Start the tmux session with an initial orchestrator pane. */
31
31
  start(orchestrationName) {
32
32
  // Create a new detached session
33
- execFileSync('tmux', [
34
- 'new-session', '-d',
35
- '-s', this.sessionName,
36
- '-n', 'swarm',
37
- '-x', '200', '-y', '50',
38
- ]);
33
+ execFileSync('tmux', ['new-session', '-d', '-s', this.sessionName, '-n', 'swarm', '-x', '200', '-y', '50']);
39
34
  // Enable pane border titles
40
35
  try {
41
- execFileSync('tmux', [
42
- 'set', '-t', this.sessionName, 'pane-border-status', 'top',
43
- ]);
44
- execFileSync('tmux', [
45
- 'set', '-t', this.sessionName, 'pane-border-format',
46
- ' #[bold]#{pane_title}#[default] ',
47
- ]);
36
+ execFileSync('tmux', ['set', '-t', this.sessionName, 'pane-border-status', 'top']);
37
+ execFileSync('tmux', ['set', '-t', this.sessionName, 'pane-border-format', ' #[bold]#{pane_title}#[default] ']);
48
38
  // Keep pane visible after command exits so we can capture output
49
- execFileSync('tmux', [
50
- 'set', '-t', this.sessionName, 'remain-on-exit', 'on',
51
- ]);
39
+ execFileSync('tmux', ['set', '-t', this.sessionName, 'remain-on-exit', 'on']);
40
+ }
41
+ catch {
42
+ /* older tmux versions may not support these options */
52
43
  }
53
- catch { /* older tmux versions may not support these options */ }
54
44
  // Set initial pane title
55
45
  try {
56
46
  execFileSync('tmux', [
57
- 'select-pane', '-t', `${this.sessionName}:swarm`,
58
- '-T', `swarm: ${orchestrationName.slice(0, 50)}`,
47
+ 'select-pane',
48
+ '-t',
49
+ `${this.sessionName}:swarm`,
50
+ '-T',
51
+ `swarm: ${orchestrationName.slice(0, 50)}`,
59
52
  ]);
60
53
  }
61
- catch { /* ignore */ }
54
+ catch {
55
+ /* ignore */
56
+ }
62
57
  this.active = true;
63
58
  }
64
59
  /**
@@ -73,7 +68,8 @@ export class PaneManager {
73
68
  const envStr = env
74
69
  ? Object.entries(env)
75
70
  .filter(([k]) => ENV_KEY_RE.test(k))
76
- .map(([k, v]) => `${k}=${shellEscape(v)}`).join(' ') + ' '
71
+ .map(([k, v]) => `${k}=${shellEscape(v)}`)
72
+ .join(' ') + ' '
77
73
  : '';
78
74
  // Create a temp file to tee output for reliable parsing (tmux capture-pane is lossy)
79
75
  const outputFile = join(tmpdir(), `swarm-pane-${agentId.replace(/[^a-zA-Z0-9-]/g, '')}.out`);
@@ -82,22 +78,27 @@ export class PaneManager {
82
78
  // Split window and run the command directly via shell -c
83
79
  // This way the pane's process IS the command, and pane_dead=1 when it exits
84
80
  const result = execFileSync('tmux', [
85
- 'split-window', '-t', `${this.sessionName}:swarm`,
81
+ 'split-window',
82
+ '-t',
83
+ `${this.sessionName}:swarm`,
86
84
  '-h', // horizontal split
87
- '-P', '-F', '#{pane_id}', // print the new pane ID
88
- 'sh', '-c', wrappedCommand,
85
+ '-P',
86
+ '-F',
87
+ '#{pane_id}', // print the new pane ID
88
+ 'sh',
89
+ '-c',
90
+ wrappedCommand,
89
91
  ], { encoding: 'utf-8' }).trim();
90
92
  const paneId = result;
91
93
  // Rebalance the layout
92
94
  try {
93
95
  execFileSync('tmux', ['select-layout', '-t', `${this.sessionName}:swarm`, 'tiled']);
94
96
  }
95
- catch { /* layout may fail if only 1 pane */ }
97
+ catch {
98
+ /* layout may fail if only 1 pane */
99
+ }
96
100
  // Set pane title
97
- execFileSync('tmux', [
98
- 'select-pane', '-t', paneId,
99
- '-T', agentName,
100
- ]);
101
+ execFileSync('tmux', ['select-pane', '-t', paneId, '-T', agentName]);
101
102
  const info = {
102
103
  paneId,
103
104
  agentId,
@@ -118,20 +119,21 @@ export class PaneManager {
118
119
  const msg = success ? 'DONE' : 'FAILED';
119
120
  try {
120
121
  // Send a visible completion message
121
- execFileSync('tmux', [
122
- 'send-keys', '-t', pane.paneId,
123
- `echo "--- ${msg} ---"`, 'Enter',
124
- ]);
122
+ execFileSync('tmux', ['send-keys', '-t', pane.paneId, `echo "--- ${msg} ---"`, 'Enter']);
125
123
  // Close the pane after a short delay (3 seconds)
126
124
  setTimeout(() => {
127
125
  try {
128
126
  execFileSync('tmux', ['kill-pane', '-t', pane.paneId]);
129
127
  }
130
- catch { /* pane may already be gone */ }
128
+ catch {
129
+ /* pane may already be gone */
130
+ }
131
131
  this.panes.delete(agentId);
132
132
  }, 3000);
133
133
  }
134
- catch { /* pane may already be gone */ }
134
+ catch {
135
+ /* pane may already be gone */
136
+ }
135
137
  }
136
138
  /** Print attachment instructions for the user. */
137
139
  attach() {
@@ -150,7 +152,9 @@ export class PaneManager {
150
152
  try {
151
153
  execFileSync('tmux', ['kill-session', '-t', this.sessionName]);
152
154
  }
153
- catch { /* session may already be gone */ }
155
+ catch {
156
+ /* session may already be gone */
157
+ }
154
158
  this.active = false;
155
159
  this.panes.clear();
156
160
  }
@@ -170,10 +174,7 @@ export class PaneManager {
170
174
  return new Promise((resolve) => {
171
175
  const check = setInterval(() => {
172
176
  try {
173
- const dead = execFileSync('tmux', [
174
- 'list-panes', '-t', `${this.sessionName}:swarm`,
175
- '-F', '#{pane_id} #{pane_dead}',
176
- ], { encoding: 'utf-8' });
177
+ const dead = execFileSync('tmux', ['list-panes', '-t', `${this.sessionName}:swarm`, '-F', '#{pane_id} #{pane_dead}'], { encoding: 'utf-8' });
177
178
  // Parse output lines looking for our pane
178
179
  const lines = dead.trim().split('\n');
179
180
  for (const line of lines) {
@@ -185,7 +186,7 @@ export class PaneManager {
185
186
  }
186
187
  }
187
188
  // If pane is no longer listed at all, it's gone
188
- const paneIds = lines.map(l => l.split(' ')[0]);
189
+ const paneIds = lines.map((l) => l.split(' ')[0]);
189
190
  if (!paneIds.includes(paneId)) {
190
191
  clearInterval(check);
191
192
  resolve();
@@ -205,9 +206,7 @@ export class PaneManager {
205
206
  */
206
207
  capturePane(paneId) {
207
208
  try {
208
- return execFileSync('tmux', [
209
- 'capture-pane', '-t', paneId, '-p',
210
- ], { encoding: 'utf-8' });
209
+ return execFileSync('tmux', ['capture-pane', '-t', paneId, '-p'], { encoding: 'utf-8' });
211
210
  }
212
211
  catch {
213
212
  return '';
@@ -236,16 +235,18 @@ export class PaneManager {
236
235
  try {
237
236
  unlinkSync(pane.outputFile);
238
237
  }
239
- catch { /* file may already be gone */ }
238
+ catch {
239
+ /* file may already be gone */
240
+ }
240
241
  }
241
242
  }
242
243
  setTitle(title) {
243
244
  try {
244
- execFileSync('tmux', [
245
- 'rename-window', '-t', `${this.sessionName}:0`, title.slice(0, 40),
246
- ]);
245
+ execFileSync('tmux', ['rename-window', '-t', `${this.sessionName}:0`, title.slice(0, 40)]);
246
+ }
247
+ catch {
248
+ /* ignore */
247
249
  }
248
- catch { /* ignore */ }
249
250
  }
250
251
  }
251
252
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"panes.js","sourceRoot":"","sources":["../../src/runtime/panes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"panes.js","sourceRoot":"","sources":["../../src/runtime/panes.ts"],"names":[],"mappings":"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"}
@@ -116,13 +116,13 @@ export class PlanSearcher {
116
116
  if (!this.traceStore)
117
117
  return null;
118
118
  const similar = this.traceStore.findSimilar(basePlan.task, 5);
119
- const successful = similar.filter(t => t.status === 'completed');
119
+ const successful = similar.filter((t) => t.status === 'completed');
120
120
  if (successful.length === 0)
121
121
  return null;
122
122
  // Find the most efficient successful trace
123
123
  const best = successful.sort((a, b) => {
124
124
  // Score by efficiency: lower tokens + shorter duration = better
125
- return (a.totalTokens + a.durationMs / 100) - (b.totalTokens + b.durationMs / 100);
125
+ return a.totalTokens + a.durationMs / 100 - (b.totalTokens + b.durationMs / 100);
126
126
  })[0];
127
127
  // If the best trace used a different pattern, that's interesting but we can't change pattern here
128
128
  // Instead, copy model assignments from the trace's phases to our plan
@@ -1 +1 @@
1
- {"version":3,"file":"plan-search.js","sourceRoot":"","sources":["../../src/runtime/plan-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-search.js","sourceRoot":"","sources":["../../src/runtime/plan-search.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,7 @@ export declare class PluginLoader {
48
48
  constructor(bus?: EventBus);
49
49
  loadAll(cwd?: string): Promise<number>;
50
50
  loadDir(dir: string): Promise<number>;
51
- private reg;
51
+ private register;
52
52
  getAllTools(): PluginTool[];
53
53
  listPlugins(): SwarmPlugin[];
54
54
  callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/runtime/plugins.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAAE;AAEnK,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/G;AAED,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAAE;AACvL,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE;AAEvG,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,GAAG,CAAkB;gBACjB,GAAG,CAAC,EAAE,QAAQ;IAEpB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAuB7B,GAAG;IAOjB,WAAW,IAAI,UAAU,EAAE;IAC3B,WAAW,IAAI,WAAW,EAAE;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7E,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IA4CxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAIjC"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/runtime/plugins.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/G;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,GAAG,CAAkB;gBAEjB,GAAG,CAAC,EAAE,QAAQ;IAIpB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkC7B,QAAQ;IAWtB,WAAW,IAAI,UAAU,EAAE;IAG3B,WAAW,IAAI,WAAW,EAAE;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7E,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAkDxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAWjC"}
@@ -5,80 +5,90 @@ export class PluginLoader {
5
5
  plugins = new Map();
6
6
  tools = new Map();
7
7
  bus;
8
- constructor(bus) { this.bus = bus ?? null; }
8
+ constructor(bus) {
9
+ this.bus = bus ?? null;
10
+ }
9
11
  async loadAll(cwd) {
10
- let n = 0;
11
- n += await this.loadDir(join(cwd ?? process.cwd(), '.swarm', 'plugins'));
12
- n += await this.loadDir(join(process.env.HOME ?? '', '.swarm', 'plugins'));
13
- return n;
12
+ let count = 0;
13
+ count += await this.loadDir(join(cwd ?? process.cwd(), '.swarm', 'plugins'));
14
+ count += await this.loadDir(join(process.env.HOME ?? '', '.swarm', 'plugins'));
15
+ return count;
14
16
  }
15
17
  async loadDir(dir) {
16
18
  if (!existsSync(dir))
17
19
  return 0;
18
- let n = 0;
19
- for (const e of readdirSync(dir, { withFileTypes: true })) {
20
+ let count = 0;
21
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
20
22
  try {
21
- if (e.isFile() && ['.ts', '.js'].includes(extname(e.name))) {
22
- const mod = await import(pathToFileURL(join(dir, e.name)).href);
23
- await this.reg(mod.default ?? mod);
24
- n++;
23
+ if (entry.isFile() && ['.ts', '.js'].includes(extname(entry.name))) {
24
+ const module = await import(pathToFileURL(join(dir, entry.name)).href);
25
+ await this.register(module.default ?? module);
26
+ count++;
25
27
  }
26
- else if (e.isDirectory() && existsSync(join(dir, e.name, 'plugin.json'))) {
27
- const m = JSON.parse(readFileSync(join(dir, e.name, 'plugin.json'), 'utf-8'));
28
- const entryPath = resolve(join(dir, e.name, m.entry));
29
- const pluginRoot = resolve(join(dir, e.name));
28
+ else if (entry.isDirectory() && existsSync(join(dir, entry.name, 'plugin.json'))) {
29
+ const manifest = JSON.parse(readFileSync(join(dir, entry.name, 'plugin.json'), 'utf-8'));
30
+ const entryPath = resolve(join(dir, entry.name, manifest.entry));
31
+ const pluginRoot = resolve(join(dir, entry.name));
30
32
  if (!entryPath.startsWith(pluginRoot + '/') && entryPath !== pluginRoot) {
31
- throw new Error(`Plugin entry path escapes plugin directory: ${m.entry}`);
33
+ throw new Error(`Plugin entry path escapes plugin directory: ${manifest.entry}`);
32
34
  }
33
- const mod = await import(pathToFileURL(entryPath).href);
34
- const p = mod.default ?? mod;
35
- p.name = m.name;
36
- p.version = m.version;
37
- await this.reg(p);
38
- n++;
35
+ const module = await import(pathToFileURL(entryPath).href);
36
+ const plugin = module.default ?? module;
37
+ plugin.name = manifest.name;
38
+ plugin.version = manifest.version;
39
+ await this.register(plugin);
40
+ count++;
39
41
  }
40
42
  }
41
43
  catch (err) {
42
- this.bus?.emit('system:warning', { message: `Plugin failed: ${e.name}` }, 'plugins');
44
+ this.bus?.emit('system:warning', { message: `Plugin failed: ${err instanceof Error ? err.message : String(err)}` }, 'plugins');
43
45
  }
44
46
  }
45
- return n;
47
+ return count;
46
48
  }
47
- async reg(plugin) {
49
+ async register(plugin) {
48
50
  if (!plugin.name)
49
51
  throw new Error('Plugin needs name');
50
52
  if (plugin.onLoad)
51
53
  await plugin.onLoad();
52
- if (plugin.tools)
53
- for (const t of plugin.tools)
54
- this.tools.set(`${plugin.name}:${t.name}`, t);
54
+ if (plugin.tools) {
55
+ for (const tool of plugin.tools) {
56
+ this.tools.set(`${plugin.name}:${tool.name}`, tool);
57
+ }
58
+ }
55
59
  this.plugins.set(plugin.name, plugin);
56
60
  }
57
- getAllTools() { return [...this.tools.values()]; }
58
- listPlugins() { return [...this.plugins.values()]; }
61
+ getAllTools() {
62
+ return [...this.tools.values()];
63
+ }
64
+ listPlugins() {
65
+ return [...this.plugins.values()];
66
+ }
59
67
  async callTool(name, args) {
60
- const t = this.tools.get(name);
61
- if (!t)
68
+ const tool = this.tools.get(name);
69
+ if (!tool)
62
70
  throw new Error(`Tool not found: ${name}`);
63
- return t.execute(args);
71
+ return tool.execute(args);
64
72
  }
65
73
  /** Wire plugin lifecycle hooks to the event bus */
66
74
  wireHooks(bus) {
67
- for (const plugin of this.plugins.values()) {
68
- if (!plugin.hooks)
75
+ for (const loadedPlugin of this.plugins.values()) {
76
+ if (!loadedPlugin.hooks)
69
77
  continue;
70
- if (plugin.hooks.beforeToolUse) {
71
- const hook = plugin.hooks.beforeToolUse;
78
+ if (loadedPlugin.hooks.beforeToolUse) {
79
+ const hook = loadedPlugin.hooks.beforeToolUse;
72
80
  bus.on('agent:tool-use', async (event) => {
73
81
  const data = event.data;
74
82
  try {
75
83
  await hook({ tool: String(data.tool ?? ''), agentName: String(data.agentType ?? '') });
76
84
  }
77
- catch { /* Don't crash on hook failure */ }
85
+ catch {
86
+ /* Don't crash on hook failure */
87
+ }
78
88
  });
79
89
  }
80
- if (plugin.hooks.onPhaseComplete) {
81
- const hook = plugin.hooks.onPhaseComplete;
90
+ if (loadedPlugin.hooks.onPhaseComplete) {
91
+ const hook = loadedPlugin.hooks.onPhaseComplete;
82
92
  bus.on('orchestration:phase-complete', async (event) => {
83
93
  const data = event.data;
84
94
  try {
@@ -88,11 +98,13 @@ export class PluginLoader {
88
98
  agentCount: Number(data.agentCount ?? 0),
89
99
  });
90
100
  }
91
- catch { /* Don't crash on hook failure */ }
101
+ catch {
102
+ /* Don't crash on hook failure */
103
+ }
92
104
  });
93
105
  }
94
- if (plugin.hooks.onOrchestrationComplete) {
95
- const hook = plugin.hooks.onOrchestrationComplete;
106
+ if (loadedPlugin.hooks.onOrchestrationComplete) {
107
+ const hook = loadedPlugin.hooks.onOrchestrationComplete;
96
108
  bus.on('orchestration:complete', async (event) => {
97
109
  const data = event.data;
98
110
  try {
@@ -102,18 +114,22 @@ export class PluginLoader {
102
114
  durationMs: Number(data.durationMs ?? 0),
103
115
  });
104
116
  }
105
- catch { /* Don't crash on hook failure */ }
117
+ catch {
118
+ /* Don't crash on hook failure */
119
+ }
106
120
  });
107
121
  }
108
122
  }
109
123
  }
110
124
  async unloadAll() {
111
- for (const p of this.plugins.values())
112
- if (p.onUnload)
125
+ for (const loaded of this.plugins.values()) {
126
+ if (loaded.onUnload) {
113
127
  try {
114
- await p.onUnload();
128
+ await loaded.onUnload();
115
129
  }
116
130
  catch { }
131
+ }
132
+ }
117
133
  this.plugins.clear();
118
134
  this.tools.clear();
119
135
  }