@gjczone/pi-swarm 0.1.6 → 0.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 (63) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +60 -5
  3. package/dist/index.js.map +1 -1
  4. package/dist/shared/controller.d.ts +5 -2
  5. package/dist/shared/controller.d.ts.map +1 -1
  6. package/dist/shared/controller.js +109 -43
  7. package/dist/shared/controller.js.map +1 -1
  8. package/dist/shared/render.d.ts +4 -4
  9. package/dist/shared/render.d.ts.map +1 -1
  10. package/dist/shared/render.js +7 -9
  11. package/dist/shared/render.js.map +1 -1
  12. package/dist/shared/spawner.d.ts +1 -1
  13. package/dist/shared/spawner.d.ts.map +1 -1
  14. package/dist/shared/spawner.js +232 -132
  15. package/dist/shared/spawner.js.map +1 -1
  16. package/dist/shared/types.d.ts +44 -0
  17. package/dist/shared/types.d.ts.map +1 -1
  18. package/dist/state/persistence.d.ts +21 -14
  19. package/dist/state/persistence.d.ts.map +1 -1
  20. package/dist/state/persistence.js +79 -28
  21. package/dist/state/persistence.js.map +1 -1
  22. package/dist/state/recovery.d.ts +2 -2
  23. package/dist/state/recovery.d.ts.map +1 -1
  24. package/dist/state/recovery.js +37 -22
  25. package/dist/state/recovery.js.map +1 -1
  26. package/dist/swarm/command.d.ts.map +1 -1
  27. package/dist/swarm/command.js.map +1 -1
  28. package/dist/swarm/mode.d.ts.map +1 -1
  29. package/dist/swarm/mode.js +9 -4
  30. package/dist/swarm/mode.js.map +1 -1
  31. package/dist/swarm/tool.d.ts.map +1 -1
  32. package/dist/swarm/tool.js +77 -5
  33. package/dist/swarm/tool.js.map +1 -1
  34. package/dist/team/command.d.ts +3 -2
  35. package/dist/team/command.d.ts.map +1 -1
  36. package/dist/team/command.js +24 -7
  37. package/dist/team/command.js.map +1 -1
  38. package/dist/team/mailbox.d.ts +3 -3
  39. package/dist/team/mailbox.d.ts.map +1 -1
  40. package/dist/team/mailbox.js +38 -17
  41. package/dist/team/mailbox.js.map +1 -1
  42. package/dist/team/supervisor.d.ts +31 -5
  43. package/dist/team/supervisor.d.ts.map +1 -1
  44. package/dist/team/supervisor.js +187 -16
  45. package/dist/team/supervisor.js.map +1 -1
  46. package/dist/team/task-graph.d.ts.map +1 -1
  47. package/dist/team/task-graph.js +4 -7
  48. package/dist/team/task-graph.js.map +1 -1
  49. package/dist/team/tool.d.ts +3 -3
  50. package/dist/team/tool.d.ts.map +1 -1
  51. package/dist/team/tool.js +81 -24
  52. package/dist/team/tool.js.map +1 -1
  53. package/dist/tui/permission-prompt.d.ts.map +1 -1
  54. package/dist/tui/permission-prompt.js.map +1 -1
  55. package/dist/tui/progress.d.ts +10 -0
  56. package/dist/tui/progress.d.ts.map +1 -1
  57. package/dist/tui/progress.js +50 -1
  58. package/dist/tui/progress.js.map +1 -1
  59. package/dist/tui/team-dashboard.d.ts +54 -0
  60. package/dist/tui/team-dashboard.d.ts.map +1 -0
  61. package/dist/tui/team-dashboard.js +240 -0
  62. package/dist/tui/team-dashboard.js.map +1 -0
  63. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CASR;AAMD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,GACpB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,IAAI,CAWpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,GACpB,IAAI,CAON;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWhC;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAsB3B;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWhC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAQzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAKN"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAWzD;AAiBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3E;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAOR;AAMD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAO7E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,IAAI,CAWpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAO7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMtE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWhC;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAsB3B;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWhC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKrE"}
@@ -17,6 +17,26 @@
17
17
  import * as fs from "node:fs";
18
18
  import * as path from "node:path";
19
19
  // ---------------------------------------------------------------------------
20
+ // Security: ID validation and path containment
21
+ // ---------------------------------------------------------------------------
22
+ const SAFE_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
23
+ export function validateId(id, kind) {
24
+ if (typeof id !== "string" || id.length === 0 || id.length > 128) {
25
+ throw new Error(`Invalid ${kind}: must be a non-empty string up to 128 characters`);
26
+ }
27
+ if (!SAFE_ID_PATTERN.test(id)) {
28
+ throw new Error(`Invalid ${kind}: "${id}" contains unsafe characters (only a-z, A-Z, 0-9, _, - allowed)`);
29
+ }
30
+ }
31
+ function ensureWithinRoot(resolvedPath, root) {
32
+ const normalizedRoot = path.resolve(root) + path.sep;
33
+ const normalizedPath = path.resolve(resolvedPath);
34
+ if (!normalizedPath.startsWith(normalizedRoot) &&
35
+ normalizedPath !== path.resolve(root)) {
36
+ throw new Error(`Path traversal detected: ${resolvedPath} escapes ${root}`);
37
+ }
38
+ }
39
+ // ---------------------------------------------------------------------------
20
40
  // Path resolution
21
41
  // ---------------------------------------------------------------------------
22
42
  /**
@@ -25,7 +45,7 @@ import * as path from "node:path";
25
45
  * Always uses `.pi/swarm/` under the project root. Creates `.pi/`
26
46
  * if it does not already exist.
27
47
  */
28
- export function resolveCrewRoot(cwd) {
48
+ export function resolveSwarmRoot(cwd) {
29
49
  const piDir = path.join(cwd, ".pi");
30
50
  if (!fs.existsSync(piDir)) {
31
51
  fs.mkdirSync(piDir, { recursive: true });
@@ -37,18 +57,27 @@ export function resolveCrewRoot(cwd) {
37
57
  return swarmDir;
38
58
  }
39
59
  /** Resolve the state directory for a specific run. */
40
- export function resolveRunStateDir(crewRoot, runId) {
41
- return path.join(crewRoot, "state", "runs", runId);
60
+ export function resolveRunStateDir(swarmRoot, runId) {
61
+ validateId(runId, "runId");
62
+ const runsDir = path.join(swarmRoot, "state", "runs");
63
+ const dir = path.join(runsDir, runId);
64
+ ensureWithinRoot(dir, runsDir);
65
+ return dir;
42
66
  }
43
67
  /** Resolve per-agent state directory. */
44
- export function resolveAgentStateDir(crewRoot, runId, agentId) {
45
- return path.join(crewRoot, "state", "runs", runId, "agents", agentId);
68
+ export function resolveAgentStateDir(swarmRoot, runId, agentId) {
69
+ validateId(agentId, "agentId");
70
+ const runDir = resolveRunStateDir(swarmRoot, runId);
71
+ const agentsDir = path.join(runDir, "agents");
72
+ const dir = path.join(agentsDir, agentId);
73
+ ensureWithinRoot(dir, agentsDir);
74
+ return dir;
46
75
  }
47
76
  /**
48
77
  * Create a new run manifest and write it to disk.
49
78
  */
50
- export function createManifest(crewRoot, manifest) {
51
- const dir = resolveRunStateDir(crewRoot, manifest.runId);
79
+ export function createManifest(swarmRoot, manifest) {
80
+ const dir = resolveRunStateDir(swarmRoot, manifest.runId);
52
81
  fs.mkdirSync(dir, { recursive: true });
53
82
  writeAtomic(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
54
83
  }
@@ -56,8 +85,8 @@ export function createManifest(crewRoot, manifest) {
56
85
  * Read a run manifest from disk.
57
86
  * Returns null if the manifest does not exist.
58
87
  */
59
- export function readManifest(crewRoot, runId) {
60
- const filePath = path.join(resolveRunStateDir(crewRoot, runId), "manifest.json");
88
+ export function readManifest(swarmRoot, runId) {
89
+ const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "manifest.json");
61
90
  try {
62
91
  const raw = fs.readFileSync(filePath, "utf-8");
63
92
  return JSON.parse(raw);
@@ -69,19 +98,31 @@ export function readManifest(crewRoot, runId) {
69
98
  /**
70
99
  * Update a run manifest (overwrites the file atomically).
71
100
  */
72
- export function updateManifest(crewRoot, manifest) {
73
- const dir = resolveRunStateDir(crewRoot, manifest.runId);
101
+ export function updateManifest(swarmRoot, manifest) {
102
+ const dir = resolveRunStateDir(swarmRoot, manifest.runId);
74
103
  fs.mkdirSync(dir, { recursive: true });
75
104
  writeAtomic(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
76
105
  }
106
+ /**
107
+ * Update the heartbeat timestamp for a running manifest.
108
+ */
109
+ export function updateHeartbeat(swarmRoot, runId) {
110
+ const manifest = readManifest(swarmRoot, runId);
111
+ if (!manifest)
112
+ return;
113
+ if (manifest.status !== "running")
114
+ return;
115
+ manifest.lastHeartbeatAt = Date.now();
116
+ updateManifest(swarmRoot, manifest);
117
+ }
77
118
  // ---------------------------------------------------------------------------
78
119
  // Task state
79
120
  // ---------------------------------------------------------------------------
80
121
  /**
81
122
  * Persist task state (task graph) to disk.
82
123
  */
83
- export function saveTaskState(crewRoot, runId, data) {
84
- const dir = resolveRunStateDir(crewRoot, runId);
124
+ export function saveTaskState(swarmRoot, runId, data) {
125
+ const dir = resolveRunStateDir(swarmRoot, runId);
85
126
  fs.mkdirSync(dir, { recursive: true });
86
127
  writeAtomic(path.join(dir, "tasks.json"), JSON.stringify(data, null, 2));
87
128
  }
@@ -89,8 +130,8 @@ export function saveTaskState(crewRoot, runId, data) {
89
130
  * Load task state from disk.
90
131
  * Returns null if the file does not exist.
91
132
  */
92
- export function loadTaskState(crewRoot, runId) {
93
- const filePath = path.join(resolveRunStateDir(crewRoot, runId), "tasks.json");
133
+ export function loadTaskState(swarmRoot, runId) {
134
+ const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "tasks.json");
94
135
  try {
95
136
  const raw = fs.readFileSync(filePath, "utf-8");
96
137
  return JSON.parse(raw);
@@ -105,8 +146,8 @@ export function loadTaskState(crewRoot, runId) {
105
146
  /**
106
147
  * Append an event to the run's event log.
107
148
  */
108
- export function appendEvent(crewRoot, runId, event) {
109
- const dir = resolveRunStateDir(crewRoot, runId);
149
+ export function appendEvent(swarmRoot, runId, event) {
150
+ const dir = resolveRunStateDir(swarmRoot, runId);
110
151
  fs.mkdirSync(dir, { recursive: true });
111
152
  const filePath = path.join(dir, "events.jsonl");
112
153
  const line = JSON.stringify(event) + "\n";
@@ -115,8 +156,8 @@ export function appendEvent(crewRoot, runId, event) {
115
156
  /**
116
157
  * Read all events from the run's event log.
117
158
  */
118
- export function readEvents(crewRoot, runId) {
119
- const filePath = path.join(resolveRunStateDir(crewRoot, runId), "events.jsonl");
159
+ export function readEvents(swarmRoot, runId) {
160
+ const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "events.jsonl");
120
161
  try {
121
162
  const raw = fs.readFileSync(filePath, "utf-8");
122
163
  if (!raw.trim())
@@ -144,16 +185,16 @@ export function readEvents(crewRoot, runId) {
144
185
  /**
145
186
  * Save per-agent status.
146
187
  */
147
- export function saveAgentStatus(crewRoot, runId, agentId, status) {
148
- const dir = resolveAgentStateDir(crewRoot, runId, agentId);
188
+ export function saveAgentStatus(swarmRoot, runId, agentId, status) {
189
+ const dir = resolveAgentStateDir(swarmRoot, runId, agentId);
149
190
  fs.mkdirSync(dir, { recursive: true });
150
191
  writeAtomic(path.join(dir, "status.json"), JSON.stringify(status, null, 2));
151
192
  }
152
193
  /**
153
194
  * Load per-agent status.
154
195
  */
155
- export function loadAgentStatus(crewRoot, runId, agentId) {
156
- const filePath = path.join(resolveAgentStateDir(crewRoot, runId, agentId), "status.json");
196
+ export function loadAgentStatus(swarmRoot, runId, agentId) {
197
+ const filePath = path.join(resolveAgentStateDir(swarmRoot, runId, agentId), "status.json");
157
198
  try {
158
199
  const raw = fs.readFileSync(filePath, "utf-8");
159
200
  return JSON.parse(raw);
@@ -164,21 +205,31 @@ export function loadAgentStatus(crewRoot, runId, agentId) {
164
205
  }
165
206
  /**
166
207
  * List all active run IDs in the state directory.
208
+ * Only returns IDs that match the safe ID pattern.
167
209
  */
168
- export function listActiveRuns(crewRoot) {
169
- const runsDir = path.join(crewRoot, "state", "runs");
210
+ export function listActiveRuns(swarmRoot) {
211
+ const runsDir = path.join(swarmRoot, "state", "runs");
170
212
  if (!fs.existsSync(runsDir))
171
213
  return [];
172
214
  return fs
173
215
  .readdirSync(runsDir, { withFileTypes: true })
174
216
  .filter((d) => d.isDirectory())
175
- .map((d) => d.name);
217
+ .map((d) => d.name)
218
+ .filter((name) => {
219
+ try {
220
+ validateId(name, "runId");
221
+ return true;
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ });
176
227
  }
177
228
  /**
178
229
  * Delete the entire run state directory.
179
230
  */
180
- export function deleteRunState(crewRoot, runId) {
181
- const dir = resolveRunStateDir(crewRoot, runId);
231
+ export function deleteRunState(swarmRoot, runId) {
232
+ const dir = resolveRunStateDir(swarmRoot, runId);
182
233
  if (fs.existsSync(dir)) {
183
234
  fs.rmSync(dir, { recursive: true, force: true });
184
235
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"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"}
@@ -26,10 +26,10 @@ export declare function recoverRuns(cwd: string): RecoveryResult;
26
26
  * Check whether a run has unfinished tasks.
27
27
  * Used to decide whether to offer resume or start fresh.
28
28
  */
29
- export declare function hasUnfinishedTasks(crewRoot: string, runId: string): boolean;
29
+ export declare function hasUnfinishedTasks(swarmRoot: string, runId: string): boolean;
30
30
  /**
31
31
  * Get resumable agent IDs from a run.
32
32
  * Returns a map of agentId → last known status.
33
33
  */
34
- export declare function getResumableAgents(crewRoot: string, runId: string): Map<string, string>;
34
+ export declare function getResumableAgents(swarmRoot: string, runId: string): Map<string, string>;
35
35
  //# sourceMappingURL=recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAgB1B,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAoFvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAkBT;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBrB"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAgB1B,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAqFvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA0B5E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBrB"}
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import * as fs from "node:fs";
9
9
  import * as path from "node:path";
10
- import { resolveCrewRoot, listActiveRuns, readManifest, updateManifest, deleteRunState, appendEvent, } from "./persistence.js";
10
+ import { resolveSwarmRoot, listActiveRuns, readManifest, updateManifest, deleteRunState, loadAgentStatus, appendEvent, } from "./persistence.js";
11
11
  // ---------------------------------------------------------------------------
12
12
  // Constants
13
13
  // ---------------------------------------------------------------------------
@@ -23,22 +23,22 @@ const STALE_RUN_THRESHOLD_MS = 30 * 60 * 1000; // 30 minutes
23
23
  * - Returns lists of resumable and abandoned runs.
24
24
  */
25
25
  export function recoverRuns(cwd) {
26
- const crewRoot = resolveCrewRoot(cwd);
27
- const runsDir = path.join(crewRoot, "state", "runs");
26
+ const swarmRoot = resolveSwarmRoot(cwd);
27
+ const runsDir = path.join(swarmRoot, "state", "runs");
28
28
  if (!fs.existsSync(runsDir)) {
29
29
  return { resumable: [], abandoned: [], cleanedUp: [] };
30
30
  }
31
- const runIds = listActiveRuns(crewRoot);
31
+ const runIds = listActiveRuns(swarmRoot);
32
32
  const now = Date.now();
33
33
  const resumable = [];
34
34
  const abandoned = [];
35
35
  const cleanedUp = [];
36
36
  for (const runId of runIds) {
37
- const manifest = readManifest(crewRoot, runId);
37
+ const manifest = readManifest(swarmRoot, runId);
38
38
  if (!manifest) {
39
39
  // Orphaned directory — clean up
40
40
  try {
41
- deleteRunState(crewRoot, runId);
41
+ deleteRunState(swarmRoot, runId);
42
42
  cleanedUp.push(runId);
43
43
  }
44
44
  catch {
@@ -48,8 +48,9 @@ export function recoverRuns(cwd) {
48
48
  }
49
49
  switch (manifest.status) {
50
50
  case "running": {
51
- // Check for staleness
52
- const age = now - manifest.startedAt;
51
+ // Check for staleness using last heartbeat if available
52
+ const lastActivity = manifest.lastHeartbeatAt ?? manifest.startedAt;
53
+ const age = now - lastActivity;
53
54
  if (age > STALE_RUN_THRESHOLD_MS) {
54
55
  // Mark as abandoned
55
56
  const updated = {
@@ -57,8 +58,8 @@ export function recoverRuns(cwd) {
57
58
  status: "abandoned",
58
59
  completedAt: now,
59
60
  };
60
- updateManifest(crewRoot, updated);
61
- appendEvent(crewRoot, runId, {
61
+ updateManifest(swarmRoot, updated);
62
+ appendEvent(swarmRoot, runId, {
62
63
  type: "run.abandoned",
63
64
  reason: "stale",
64
65
  timestamp: new Date().toISOString(),
@@ -78,7 +79,7 @@ export function recoverRuns(cwd) {
78
79
  const age = now - completedAt;
79
80
  if (age > COMPLETED_RUN_RETENTION_MS) {
80
81
  try {
81
- deleteRunState(crewRoot, runId);
82
+ deleteRunState(swarmRoot, runId);
82
83
  cleanedUp.push(runId);
83
84
  }
84
85
  catch {
@@ -93,7 +94,7 @@ export function recoverRuns(cwd) {
93
94
  const abandonedAt = manifest.completedAt ?? manifest.startedAt;
94
95
  if (now - abandonedAt > COMPLETED_RUN_RETENTION_MS) {
95
96
  try {
96
- deleteRunState(crewRoot, runId);
97
+ deleteRunState(swarmRoot, runId);
97
98
  cleanedUp.push(runId);
98
99
  }
99
100
  catch {
@@ -110,31 +111,45 @@ export function recoverRuns(cwd) {
110
111
  * Check whether a run has unfinished tasks.
111
112
  * Used to decide whether to offer resume or start fresh.
112
113
  */
113
- export function hasUnfinishedTasks(crewRoot, runId) {
114
- const manifest = readManifest(crewRoot, runId);
114
+ export function hasUnfinishedTasks(swarmRoot, runId) {
115
+ const manifest = readManifest(swarmRoot, runId);
115
116
  if (!manifest)
116
117
  return false;
117
118
  if (manifest.status === "completed")
118
119
  return false;
120
+ if (manifest.status !== "running")
121
+ return false;
119
122
  // Check if any agent status files indicate unfinished work
120
- const agentsDir = path.join(crewRoot, "state", "runs", runId, "agents");
123
+ const agentsDir = path.join(swarmRoot, "state", "runs", runId, "agents");
121
124
  if (!fs.existsSync(agentsDir))
122
- return manifest.status === "running";
123
- // If there are agent IDs in the manifest, all are accounted for
124
- // If fewer agents ran than expected, there is unfinished work
125
- return true;
125
+ return true;
126
+ // Check each agent directory for non-terminal status
127
+ const agentDirs = fs
128
+ .readdirSync(agentsDir, { withFileTypes: true })
129
+ .filter((d) => d.isDirectory())
130
+ .map((d) => d.name);
131
+ for (const agentId of agentDirs) {
132
+ const status = loadAgentStatus(swarmRoot, runId, agentId);
133
+ if (!status)
134
+ return true;
135
+ const state = String(status.status ?? status.state ?? "");
136
+ if (state === "running" || state === "started" || state === "") {
137
+ return true;
138
+ }
139
+ }
140
+ return false;
126
141
  }
127
142
  /**
128
143
  * Get resumable agent IDs from a run.
129
144
  * Returns a map of agentId → last known status.
130
145
  */
131
- export function getResumableAgents(crewRoot, runId) {
132
- const manifest = readManifest(crewRoot, runId);
146
+ export function getResumableAgents(swarmRoot, runId) {
147
+ const manifest = readManifest(swarmRoot, runId);
133
148
  const result = new Map();
134
149
  if (!manifest)
135
150
  return result;
136
151
  for (const agentId of manifest.agentIds) {
137
- const statusDir = path.join(crewRoot, "state", "runs", runId, "agents", agentId);
152
+ const statusDir = path.join(swarmRoot, "state", "runs", runId, "agents", agentId);
138
153
  if (fs.existsSync(statusDir)) {
139
154
  // Agent has state on disk — it can be resumed
140
155
  result.set(agentId, "resumable");
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;AAC7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAMlD,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjE,4BAA4B;IAC5B,uCAAuC;IACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,yCAAyC;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yCAAyC;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sCAAsC;IACtC,QAAQ,IAAI,OAAO,CAAC;IACpB,uCAAuC;IACvC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAmCN"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAMlD,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjE,4BAA4B;IAC5B,uCAAuC;IACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,yCAAyC;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yCAAyC;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sCAAsC;IACtC,QAAQ,IAAI,OAAO,CAAC;IACpB,uCAAuC;IACvC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CA8BN"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkCH,MAAM,UAAU,oBAAoB,CAClC,EAAgB,EAChB,IAAsB;IAEtB,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;QAC1B,WAAW,EACT,wDAAwD;YACxD,wCAAwC;QAC1C,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,GAA4B;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAEzC,uBAAuB;YACvB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,kBAAkB;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,KAAK,UAAU,cAAc,CAC3B,IAAsB,EACtB,OAAgB,EAChB,WAAmB,EACnB,GAA4B;IAE5B,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,qDAAqD;QACrD,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,OAAO,CACrC,YAAY,EACZ,sDAAsD;gBACpD,kDAAkD,CACrD,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CACb,2DAA2D,CAC5D,CAAC;QAEF,kEAAkE;QAClE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACpB,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACpB,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAsB,EACtB,MAAc,EACd,GAA4B;IAE5B,0CAA0C;IAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,OAAO,CACrC,YAAY,EACZ,wDAAwD,CACzD,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;IACb,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACpB,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,kBAAkB;IAClB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/swarm/mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE;QAChB;;;WAGG;QACH,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,GACxC,IAAI,CAAC;QACR;;;WAGG;QACH,iBAAiB,CACf,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GACtC,OAAO,CAAC;KACZ,CAAC;IACF,kCAAkC;IAClC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,OAAO,EAAE;QACP,SAAS,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAC5D,CAAC;CACH;AA0BD,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,MAAM,CAAiC;gBAElB,KAAK,EAAE,cAAc;IAElD,wEAAwE;IACxE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAmBtC,+EAA+E;IAC/E,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI7C,4CAA4C;IAC5C,IAAI,IAAI,IAAI;IAgCZ,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,uEAAuE;IACvE,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kDAAkD;IAClD,IAAI,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAE5C;CACF"}
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/swarm/mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE;QAChB;;;WAGG;QACH,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,GACxC,IAAI,CAAC;QACR;;;WAGG;QACH,iBAAiB,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC;KACrE,CAAC;IACF,kCAAkC;IAClC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,OAAO,EAAE;QACP,SAAS,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAC5D,CAAC;CACH;AA0BD,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,MAAM,CAAiC;gBAElB,KAAK,EAAE,cAAc;IAElD,wEAAwE;IACxE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAmBtC,+EAA+E;IAC/E,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI7C,4CAA4C;IAC5C,IAAI,IAAI,IAAI;IA2BZ,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,uEAAuE;IACvE,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kDAAkD;IAClD,IAAI,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAE5C;CACF"}
@@ -42,7 +42,10 @@ export class SwarmMode {
42
42
  });
43
43
  this.active = trigger;
44
44
  if (trigger !== "tool") {
45
- this.agent.context.appendSystemReminder(SWARM_MODE_ENTER_REMINDER, { kind: "injection", variant: "swarm_mode" });
45
+ this.agent.context.appendSystemReminder(SWARM_MODE_ENTER_REMINDER, {
46
+ kind: "injection",
47
+ variant: "swarm_mode",
48
+ });
46
49
  }
47
50
  this.agent.emitStatusUpdated();
48
51
  }
@@ -63,13 +66,15 @@ export class SwarmMode {
63
66
  // Try to pop the enter reminder first
64
67
  if (this.agent.context.popMatchedMessage((origin) => {
65
68
  const o = origin;
66
- return (o?.kind === "injection" &&
67
- o?.variant === "swarm_mode");
69
+ return o?.kind === "injection" && o?.variant === "swarm_mode";
68
70
  })) {
69
71
  return;
70
72
  }
71
73
  // If we couldn't pop it, inject an exit reminder
72
- this.agent.context.appendSystemReminder(SWARM_MODE_EXIT_REMINDER, { kind: "injection", variant: "swarm_mode_exit" });
74
+ this.agent.context.appendSystemReminder(SWARM_MODE_EXIT_REMINDER, {
75
+ kind: "injection",
76
+ variant: "swarm_mode_exit",
77
+ });
73
78
  }
74
79
  /** Whether swarm mode is currently active. */
75
80
  get isActive() {
@@ -1 +1 @@
1
- {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/swarm/mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmCH,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,yBAAyB,GAAG;;;;;;;;CAQjC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC,IAAI,EAAE,CAAC;AAET,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,OAAO,SAAS;IAGS;IAFrB,MAAM,GAA4B,IAAI,CAAC;IAE/C,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAEtD,wEAAwE;IACxE,KAAK,CAAC,OAAyB;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3B,IAAI,EAAE,kBAAkB;YACxB,OAAO;SACR,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QAEtB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CACrC,yBAAyB,EACzB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAC7C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,+EAA+E;IAC/E,YAAY,CAAC,OAAyB;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO;QAE/B,sCAAsC;QACtC,IACE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAClC,CAAC,MAAe,EAAE,EAAE;YAClB,MAAM,CAAC,GAAG,MAAoD,CAAC;YAC/D,OAAO,CACL,CAAC,EAAE,IAAI,KAAK,WAAW;gBACvB,CAAC,EAAE,OAAO,KAAK,YAAY,CAC5B,CAAC;QACJ,CAAC,CACF,EACD,CAAC;YACD,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CACrC,wBAAwB,EACxB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAClD,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,uEAAuE;IACvE,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAC1D,CAAC;IAED,kDAAkD;IAClD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/swarm/mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,yBAAyB,GAAG;;;;;;;;CAQjC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC,IAAI,EAAE,CAAC;AAET,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,OAAO,SAAS;IAGS;IAFrB,MAAM,GAA4B,IAAI,CAAC;IAE/C,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAEtD,wEAAwE;IACxE,KAAK,CAAC,OAAyB;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3B,IAAI,EAAE,kBAAkB;YACxB,OAAO;SACR,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QAEtB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,yBAAyB,EAAE;gBACjE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,+EAA+E;IAC/E,YAAY,CAAC,OAAyB;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO;QAE/B,sCAAsC;QACtC,IACE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAe,EAAE,EAAE;YACvD,MAAM,CAAC,GAAG,MAAoD,CAAC;YAC/D,OAAO,CAAC,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;QAChE,CAAC,CAAC,EACF,CAAC;YACD,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,wBAAwB,EAAE;YAChE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,uEAAuE;IACvE,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAC1D,CAAC;IAED,kDAAkD;IAClD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA0CpE,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,GACf,IAAI,CAoIN"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAiDzC,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwJ7D"}
@@ -10,6 +10,9 @@ import { Type } from "typebox";
10
10
  import { SubagentBatchController, resolveSwarmMaxConcurrency, } from "../shared/controller.js";
11
11
  import { renderSwarmResults, toSwarmRunResults } from "../shared/render.js";
12
12
  import { spawnSubagent, resumeSubagent, retrySubagent, } from "../shared/spawner.js";
13
+ import { AgentSwarmProgressComponent, snapshotToProgressState, } from "../tui/progress.js";
14
+ /** Widget key used to render the live swarm progress panel. */
15
+ const PROGRESS_WIDGET_KEY = "pi-swarm-progress";
13
16
  // ---------------------------------------------------------------------------
14
17
  // Constants
15
18
  // ---------------------------------------------------------------------------
@@ -52,11 +55,12 @@ export function registerAgentSwarmTool(pi) {
52
55
  description: "Map of existing subagent agent_id to the prompt used to resume that subagent. Resumed subagents launch before new item-based subagents.",
53
56
  })),
54
57
  }, { additionalProperties: false }),
55
- execute: async (toolCallId, params, signal, _onUpdate, _ctx) => {
56
- const { description, subagent_type, prompt_template, items, resume_agent_ids } = params;
58
+ execute: async (toolCallId, params, signal, _onUpdate, ctxRaw) => {
59
+ const { description, subagent_type, prompt_template, items, resume_agent_ids, } = params;
60
+ const ctx = ctxRaw;
61
+ const progress = createProgressWidget(ctx);
57
62
  try {
58
- const profileName = normalizeOptionalString(subagent_type) ??
59
- DEFAULT_SUBAGENT_TYPE;
63
+ const profileName = normalizeOptionalString(subagent_type) ?? DEFAULT_SUBAGENT_TYPE;
60
64
  // Build specs
61
65
  const specs = createAgentSwarmSpecs({
62
66
  items,
@@ -92,8 +96,19 @@ export function registerAgentSwarmTool(pi) {
92
96
  });
93
97
  // Run with controller
94
98
  const maxConcurrency = resolveSwarmMaxConcurrency(process.cwd());
95
- const controller = new SubagentBatchController({ spawn: spawnSubagent, resume: resumeSubagent, retry: retrySubagent }, tasks, { maxConcurrency });
99
+ const controller = new SubagentBatchController({
100
+ spawn: spawnSubagent,
101
+ resume: resumeSubagent,
102
+ retry: retrySubagent,
103
+ }, tasks, {
104
+ maxConcurrency,
105
+ onProgress: (snapshot) => {
106
+ progress?.component.update(snapshotToProgressState(snapshot, description));
107
+ },
108
+ });
96
109
  const results = await controller.run();
110
+ // Trigger completion animation before tearing down
111
+ progress?.component.complete();
97
112
  // Render output
98
113
  const swarmResults = toSwarmRunResults(results);
99
114
  const output = renderSwarmResults(swarmResults);
@@ -110,6 +125,11 @@ export function registerAgentSwarmTool(pi) {
110
125
  details: undefined,
111
126
  };
112
127
  }
128
+ finally {
129
+ // Always tear down the progress widget so it does not linger
130
+ progress?.dispose();
131
+ clearProgressWidget(ctx);
132
+ }
113
133
  },
114
134
  });
115
135
  }
@@ -187,4 +207,56 @@ function normalizeOptionalString(value) {
187
207
  const trimmed = value.trim();
188
208
  return trimmed.length > 0 ? trimmed : undefined;
189
209
  }
210
+ /**
211
+ * Install a live progress widget above the editor when running in TUI mode.
212
+ *
213
+ * Returns undefined in non-TUI modes (print/rpc/json) where setWidget is a
214
+ * no-op, so the controller's onProgress callback stays a cheap no-op too.
215
+ *
216
+ * 业务说明:在 TUI 模式下注册一个实时进度面板,展示每个子 Agent 的
217
+ * 运行状态(队列/运行中/完成/失败/限流挂起)。非 TUI 模式下返回
218
+ * undefined,避免无意义的 UI 调用。
219
+ */
220
+ function createProgressWidget(ctx) {
221
+ // 仅在 TUI 模式下展示进度面板;其他模式(print/rpc/json)无可用 UI
222
+ if (ctx.mode !== "tui")
223
+ return undefined;
224
+ const setWidget = ctx.ui?.setWidget;
225
+ if (typeof setWidget !== "function")
226
+ return undefined;
227
+ const component = new AgentSwarmProgressComponent();
228
+ try {
229
+ // 工厂函数返回预先创建的组件实例;TUI 框架会在刷新周期调用 render
230
+ setWidget(PROGRESS_WIDGET_KEY, () => component, {
231
+ placement: "aboveEditor",
232
+ });
233
+ }
234
+ catch {
235
+ // setWidget 失败不应阻断 swarm 执行
236
+ component.dispose();
237
+ return undefined;
238
+ }
239
+ return {
240
+ component,
241
+ dispose() {
242
+ component.dispose();
243
+ },
244
+ };
245
+ }
246
+ /**
247
+ * Remove the progress widget after the swarm run completes or fails.
248
+ */
249
+ function clearProgressWidget(ctx) {
250
+ if (ctx.mode !== "tui")
251
+ return;
252
+ const setWidget = ctx.ui?.setWidget;
253
+ if (typeof setWidget !== "function")
254
+ return;
255
+ try {
256
+ setWidget(PROGRESS_WIDGET_KEY, undefined, { placement: "aboveEditor" });
257
+ }
258
+ catch {
259
+ // Best effort — widget teardown failure is non-fatal
260
+ }
261
+ }
190
262
  //# sourceMappingURL=tool.js.map