@gjczone/pi-swarm 0.2.0 → 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.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/shared/controller.d.ts.map +1 -1
- package/dist/shared/controller.js +11 -16
- package/dist/shared/controller.js.map +1 -1
- package/dist/shared/render.d.ts +2 -2
- package/dist/shared/render.d.ts.map +1 -1
- package/dist/shared/render.js +4 -6
- package/dist/shared/render.js.map +1 -1
- package/dist/shared/spawner.js +3 -8
- package/dist/shared/spawner.js.map +1 -1
- package/dist/shared/types.d.ts +23 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/state/persistence.d.ts +15 -15
- package/dist/state/persistence.d.ts.map +1 -1
- package/dist/state/persistence.js +32 -31
- package/dist/state/persistence.js.map +1 -1
- package/dist/state/recovery.d.ts +2 -2
- package/dist/state/recovery.d.ts.map +1 -1
- package/dist/state/recovery.js +19 -18
- package/dist/state/recovery.js.map +1 -1
- package/dist/swarm/command.d.ts.map +1 -1
- package/dist/swarm/command.js.map +1 -1
- package/dist/swarm/mode.d.ts.map +1 -1
- package/dist/swarm/mode.js +9 -4
- package/dist/swarm/mode.js.map +1 -1
- package/dist/swarm/tool.d.ts.map +1 -1
- package/dist/swarm/tool.js +10 -5
- package/dist/swarm/tool.js.map +1 -1
- package/dist/team/command.d.ts.map +1 -1
- package/dist/team/command.js.map +1 -1
- package/dist/team/mailbox.d.ts +2 -2
- package/dist/team/mailbox.d.ts.map +1 -1
- package/dist/team/mailbox.js +8 -8
- package/dist/team/mailbox.js.map +1 -1
- package/dist/team/supervisor.d.ts +14 -3
- package/dist/team/supervisor.d.ts.map +1 -1
- package/dist/team/supervisor.js +64 -3
- package/dist/team/supervisor.js.map +1 -1
- package/dist/team/task-graph.d.ts.map +1 -1
- package/dist/team/task-graph.js +4 -7
- package/dist/team/task-graph.js.map +1 -1
- package/dist/team/tool.d.ts +1 -1
- package/dist/team/tool.d.ts.map +1 -1
- package/dist/team/tool.js +62 -13
- package/dist/team/tool.js.map +1 -1
- package/dist/tui/permission-prompt.d.ts.map +1 -1
- package/dist/tui/permission-prompt.js.map +1 -1
- package/dist/tui/progress.d.ts.map +1 -1
- package/dist/tui/progress.js +3 -1
- package/dist/tui/progress.js.map +1 -1
- package/dist/tui/team-dashboard.d.ts +54 -0
- package/dist/tui/team-dashboard.d.ts.map +1 -0
- package/dist/tui/team-dashboard.js +240 -0
- package/dist/tui/team-dashboard.js.map +1 -0
- package/package.json +1 -1
|
@@ -31,7 +31,8 @@ export function validateId(id, kind) {
|
|
|
31
31
|
function ensureWithinRoot(resolvedPath, root) {
|
|
32
32
|
const normalizedRoot = path.resolve(root) + path.sep;
|
|
33
33
|
const normalizedPath = path.resolve(resolvedPath);
|
|
34
|
-
if (!normalizedPath.startsWith(normalizedRoot) &&
|
|
34
|
+
if (!normalizedPath.startsWith(normalizedRoot) &&
|
|
35
|
+
normalizedPath !== path.resolve(root)) {
|
|
35
36
|
throw new Error(`Path traversal detected: ${resolvedPath} escapes ${root}`);
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -44,7 +45,7 @@ function ensureWithinRoot(resolvedPath, root) {
|
|
|
44
45
|
* Always uses `.pi/swarm/` under the project root. Creates `.pi/`
|
|
45
46
|
* if it does not already exist.
|
|
46
47
|
*/
|
|
47
|
-
export function
|
|
48
|
+
export function resolveSwarmRoot(cwd) {
|
|
48
49
|
const piDir = path.join(cwd, ".pi");
|
|
49
50
|
if (!fs.existsSync(piDir)) {
|
|
50
51
|
fs.mkdirSync(piDir, { recursive: true });
|
|
@@ -56,17 +57,17 @@ export function resolveCrewRoot(cwd) {
|
|
|
56
57
|
return swarmDir;
|
|
57
58
|
}
|
|
58
59
|
/** Resolve the state directory for a specific run. */
|
|
59
|
-
export function resolveRunStateDir(
|
|
60
|
+
export function resolveRunStateDir(swarmRoot, runId) {
|
|
60
61
|
validateId(runId, "runId");
|
|
61
|
-
const runsDir = path.join(
|
|
62
|
+
const runsDir = path.join(swarmRoot, "state", "runs");
|
|
62
63
|
const dir = path.join(runsDir, runId);
|
|
63
64
|
ensureWithinRoot(dir, runsDir);
|
|
64
65
|
return dir;
|
|
65
66
|
}
|
|
66
67
|
/** Resolve per-agent state directory. */
|
|
67
|
-
export function resolveAgentStateDir(
|
|
68
|
+
export function resolveAgentStateDir(swarmRoot, runId, agentId) {
|
|
68
69
|
validateId(agentId, "agentId");
|
|
69
|
-
const runDir = resolveRunStateDir(
|
|
70
|
+
const runDir = resolveRunStateDir(swarmRoot, runId);
|
|
70
71
|
const agentsDir = path.join(runDir, "agents");
|
|
71
72
|
const dir = path.join(agentsDir, agentId);
|
|
72
73
|
ensureWithinRoot(dir, agentsDir);
|
|
@@ -75,8 +76,8 @@ export function resolveAgentStateDir(crewRoot, runId, agentId) {
|
|
|
75
76
|
/**
|
|
76
77
|
* Create a new run manifest and write it to disk.
|
|
77
78
|
*/
|
|
78
|
-
export function createManifest(
|
|
79
|
-
const dir = resolveRunStateDir(
|
|
79
|
+
export function createManifest(swarmRoot, manifest) {
|
|
80
|
+
const dir = resolveRunStateDir(swarmRoot, manifest.runId);
|
|
80
81
|
fs.mkdirSync(dir, { recursive: true });
|
|
81
82
|
writeAtomic(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
82
83
|
}
|
|
@@ -84,8 +85,8 @@ export function createManifest(crewRoot, manifest) {
|
|
|
84
85
|
* Read a run manifest from disk.
|
|
85
86
|
* Returns null if the manifest does not exist.
|
|
86
87
|
*/
|
|
87
|
-
export function readManifest(
|
|
88
|
-
const filePath = path.join(resolveRunStateDir(
|
|
88
|
+
export function readManifest(swarmRoot, runId) {
|
|
89
|
+
const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "manifest.json");
|
|
89
90
|
try {
|
|
90
91
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
91
92
|
return JSON.parse(raw);
|
|
@@ -97,22 +98,22 @@ export function readManifest(crewRoot, runId) {
|
|
|
97
98
|
/**
|
|
98
99
|
* Update a run manifest (overwrites the file atomically).
|
|
99
100
|
*/
|
|
100
|
-
export function updateManifest(
|
|
101
|
-
const dir = resolveRunStateDir(
|
|
101
|
+
export function updateManifest(swarmRoot, manifest) {
|
|
102
|
+
const dir = resolveRunStateDir(swarmRoot, manifest.runId);
|
|
102
103
|
fs.mkdirSync(dir, { recursive: true });
|
|
103
104
|
writeAtomic(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
104
105
|
}
|
|
105
106
|
/**
|
|
106
107
|
* Update the heartbeat timestamp for a running manifest.
|
|
107
108
|
*/
|
|
108
|
-
export function updateHeartbeat(
|
|
109
|
-
const manifest = readManifest(
|
|
109
|
+
export function updateHeartbeat(swarmRoot, runId) {
|
|
110
|
+
const manifest = readManifest(swarmRoot, runId);
|
|
110
111
|
if (!manifest)
|
|
111
112
|
return;
|
|
112
113
|
if (manifest.status !== "running")
|
|
113
114
|
return;
|
|
114
115
|
manifest.lastHeartbeatAt = Date.now();
|
|
115
|
-
updateManifest(
|
|
116
|
+
updateManifest(swarmRoot, manifest);
|
|
116
117
|
}
|
|
117
118
|
// ---------------------------------------------------------------------------
|
|
118
119
|
// Task state
|
|
@@ -120,8 +121,8 @@ export function updateHeartbeat(crewRoot, runId) {
|
|
|
120
121
|
/**
|
|
121
122
|
* Persist task state (task graph) to disk.
|
|
122
123
|
*/
|
|
123
|
-
export function saveTaskState(
|
|
124
|
-
const dir = resolveRunStateDir(
|
|
124
|
+
export function saveTaskState(swarmRoot, runId, data) {
|
|
125
|
+
const dir = resolveRunStateDir(swarmRoot, runId);
|
|
125
126
|
fs.mkdirSync(dir, { recursive: true });
|
|
126
127
|
writeAtomic(path.join(dir, "tasks.json"), JSON.stringify(data, null, 2));
|
|
127
128
|
}
|
|
@@ -129,8 +130,8 @@ export function saveTaskState(crewRoot, runId, data) {
|
|
|
129
130
|
* Load task state from disk.
|
|
130
131
|
* Returns null if the file does not exist.
|
|
131
132
|
*/
|
|
132
|
-
export function loadTaskState(
|
|
133
|
-
const filePath = path.join(resolveRunStateDir(
|
|
133
|
+
export function loadTaskState(swarmRoot, runId) {
|
|
134
|
+
const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "tasks.json");
|
|
134
135
|
try {
|
|
135
136
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
136
137
|
return JSON.parse(raw);
|
|
@@ -145,8 +146,8 @@ export function loadTaskState(crewRoot, runId) {
|
|
|
145
146
|
/**
|
|
146
147
|
* Append an event to the run's event log.
|
|
147
148
|
*/
|
|
148
|
-
export function appendEvent(
|
|
149
|
-
const dir = resolveRunStateDir(
|
|
149
|
+
export function appendEvent(swarmRoot, runId, event) {
|
|
150
|
+
const dir = resolveRunStateDir(swarmRoot, runId);
|
|
150
151
|
fs.mkdirSync(dir, { recursive: true });
|
|
151
152
|
const filePath = path.join(dir, "events.jsonl");
|
|
152
153
|
const line = JSON.stringify(event) + "\n";
|
|
@@ -155,8 +156,8 @@ export function appendEvent(crewRoot, runId, event) {
|
|
|
155
156
|
/**
|
|
156
157
|
* Read all events from the run's event log.
|
|
157
158
|
*/
|
|
158
|
-
export function readEvents(
|
|
159
|
-
const filePath = path.join(resolveRunStateDir(
|
|
159
|
+
export function readEvents(swarmRoot, runId) {
|
|
160
|
+
const filePath = path.join(resolveRunStateDir(swarmRoot, runId), "events.jsonl");
|
|
160
161
|
try {
|
|
161
162
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
162
163
|
if (!raw.trim())
|
|
@@ -184,16 +185,16 @@ export function readEvents(crewRoot, runId) {
|
|
|
184
185
|
/**
|
|
185
186
|
* Save per-agent status.
|
|
186
187
|
*/
|
|
187
|
-
export function saveAgentStatus(
|
|
188
|
-
const dir = resolveAgentStateDir(
|
|
188
|
+
export function saveAgentStatus(swarmRoot, runId, agentId, status) {
|
|
189
|
+
const dir = resolveAgentStateDir(swarmRoot, runId, agentId);
|
|
189
190
|
fs.mkdirSync(dir, { recursive: true });
|
|
190
191
|
writeAtomic(path.join(dir, "status.json"), JSON.stringify(status, null, 2));
|
|
191
192
|
}
|
|
192
193
|
/**
|
|
193
194
|
* Load per-agent status.
|
|
194
195
|
*/
|
|
195
|
-
export function loadAgentStatus(
|
|
196
|
-
const filePath = path.join(resolveAgentStateDir(
|
|
196
|
+
export function loadAgentStatus(swarmRoot, runId, agentId) {
|
|
197
|
+
const filePath = path.join(resolveAgentStateDir(swarmRoot, runId, agentId), "status.json");
|
|
197
198
|
try {
|
|
198
199
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
199
200
|
return JSON.parse(raw);
|
|
@@ -206,8 +207,8 @@ export function loadAgentStatus(crewRoot, runId, agentId) {
|
|
|
206
207
|
* List all active run IDs in the state directory.
|
|
207
208
|
* Only returns IDs that match the safe ID pattern.
|
|
208
209
|
*/
|
|
209
|
-
export function listActiveRuns(
|
|
210
|
-
const runsDir = path.join(
|
|
210
|
+
export function listActiveRuns(swarmRoot) {
|
|
211
|
+
const runsDir = path.join(swarmRoot, "state", "runs");
|
|
211
212
|
if (!fs.existsSync(runsDir))
|
|
212
213
|
return [];
|
|
213
214
|
return fs
|
|
@@ -227,8 +228,8 @@ export function listActiveRuns(crewRoot) {
|
|
|
227
228
|
/**
|
|
228
229
|
* Delete the entire run state directory.
|
|
229
230
|
*/
|
|
230
|
-
export function deleteRunState(
|
|
231
|
-
const dir = resolveRunStateDir(
|
|
231
|
+
export function deleteRunState(swarmRoot, runId) {
|
|
232
|
+
const dir = resolveRunStateDir(swarmRoot, runId);
|
|
232
233
|
if (fs.existsSync(dir)) {
|
|
233
234
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
234
235
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,IAAY;IACjD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/state/recovery.d.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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,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,
|
|
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"}
|
package/dist/state/recovery.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from "node:fs";
|
|
9
9
|
import * as path from "node:path";
|
|
10
|
-
import {
|
|
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
|
|
27
|
-
const runsDir = path.join(
|
|
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(
|
|
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(
|
|
37
|
+
const manifest = readManifest(swarmRoot, runId);
|
|
38
38
|
if (!manifest) {
|
|
39
39
|
// Orphaned directory — clean up
|
|
40
40
|
try {
|
|
41
|
-
deleteRunState(
|
|
41
|
+
deleteRunState(swarmRoot, runId);
|
|
42
42
|
cleanedUp.push(runId);
|
|
43
43
|
}
|
|
44
44
|
catch {
|
|
@@ -58,8 +58,8 @@ export function recoverRuns(cwd) {
|
|
|
58
58
|
status: "abandoned",
|
|
59
59
|
completedAt: now,
|
|
60
60
|
};
|
|
61
|
-
updateManifest(
|
|
62
|
-
appendEvent(
|
|
61
|
+
updateManifest(swarmRoot, updated);
|
|
62
|
+
appendEvent(swarmRoot, runId, {
|
|
63
63
|
type: "run.abandoned",
|
|
64
64
|
reason: "stale",
|
|
65
65
|
timestamp: new Date().toISOString(),
|
|
@@ -79,7 +79,7 @@ export function recoverRuns(cwd) {
|
|
|
79
79
|
const age = now - completedAt;
|
|
80
80
|
if (age > COMPLETED_RUN_RETENTION_MS) {
|
|
81
81
|
try {
|
|
82
|
-
deleteRunState(
|
|
82
|
+
deleteRunState(swarmRoot, runId);
|
|
83
83
|
cleanedUp.push(runId);
|
|
84
84
|
}
|
|
85
85
|
catch {
|
|
@@ -94,7 +94,7 @@ export function recoverRuns(cwd) {
|
|
|
94
94
|
const abandonedAt = manifest.completedAt ?? manifest.startedAt;
|
|
95
95
|
if (now - abandonedAt > COMPLETED_RUN_RETENTION_MS) {
|
|
96
96
|
try {
|
|
97
|
-
deleteRunState(
|
|
97
|
+
deleteRunState(swarmRoot, runId);
|
|
98
98
|
cleanedUp.push(runId);
|
|
99
99
|
}
|
|
100
100
|
catch {
|
|
@@ -111,8 +111,8 @@ export function recoverRuns(cwd) {
|
|
|
111
111
|
* Check whether a run has unfinished tasks.
|
|
112
112
|
* Used to decide whether to offer resume or start fresh.
|
|
113
113
|
*/
|
|
114
|
-
export function hasUnfinishedTasks(
|
|
115
|
-
const manifest = readManifest(
|
|
114
|
+
export function hasUnfinishedTasks(swarmRoot, runId) {
|
|
115
|
+
const manifest = readManifest(swarmRoot, runId);
|
|
116
116
|
if (!manifest)
|
|
117
117
|
return false;
|
|
118
118
|
if (manifest.status === "completed")
|
|
@@ -120,15 +120,16 @@ export function hasUnfinishedTasks(crewRoot, runId) {
|
|
|
120
120
|
if (manifest.status !== "running")
|
|
121
121
|
return false;
|
|
122
122
|
// Check if any agent status files indicate unfinished work
|
|
123
|
-
const agentsDir = path.join(
|
|
123
|
+
const agentsDir = path.join(swarmRoot, "state", "runs", runId, "agents");
|
|
124
124
|
if (!fs.existsSync(agentsDir))
|
|
125
125
|
return true;
|
|
126
126
|
// Check each agent directory for non-terminal status
|
|
127
|
-
const agentDirs = fs
|
|
127
|
+
const agentDirs = fs
|
|
128
|
+
.readdirSync(agentsDir, { withFileTypes: true })
|
|
128
129
|
.filter((d) => d.isDirectory())
|
|
129
130
|
.map((d) => d.name);
|
|
130
131
|
for (const agentId of agentDirs) {
|
|
131
|
-
const status = loadAgentStatus(
|
|
132
|
+
const status = loadAgentStatus(swarmRoot, runId, agentId);
|
|
132
133
|
if (!status)
|
|
133
134
|
return true;
|
|
134
135
|
const state = String(status.status ?? status.state ?? "");
|
|
@@ -142,13 +143,13 @@ export function hasUnfinishedTasks(crewRoot, runId) {
|
|
|
142
143
|
* Get resumable agent IDs from a run.
|
|
143
144
|
* Returns a map of agentId → last known status.
|
|
144
145
|
*/
|
|
145
|
-
export function getResumableAgents(
|
|
146
|
-
const manifest = readManifest(
|
|
146
|
+
export function getResumableAgents(swarmRoot, runId) {
|
|
147
|
+
const manifest = readManifest(swarmRoot, runId);
|
|
147
148
|
const result = new Map();
|
|
148
149
|
if (!manifest)
|
|
149
150
|
return result;
|
|
150
151
|
for (const agentId of manifest.agentIds) {
|
|
151
|
-
const statusDir = path.join(
|
|
152
|
+
const statusDir = path.join(swarmRoot, "state", "runs", runId, "agents", agentId);
|
|
152
153
|
if (fs.existsSync(statusDir)) {
|
|
153
154
|
// Agent has state on disk — it can be resumed
|
|
154
155
|
result.set(agentId, "resumable");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EAEf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,0EAA0E;AAC1E,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAErE,gFAAgF;AAChF,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAe5D;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,gCAAgC;YAChC,IAAI,CAAC;gBACH,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACjC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,SAAS;QACX,CAAC;QAED,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,wDAAwD;gBACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,SAAS,CAAC;gBACpE,MAAM,GAAG,GAAG,GAAG,GAAG,YAAY,CAAC;gBAC/B,IAAI,GAAG,GAAG,sBAAsB,EAAE,CAAC;oBACjC,oBAAoB;oBACpB,MAAM,OAAO,GAAgB;wBAC3B,GAAG,QAAQ;wBACX,MAAM,EAAE,WAAW;wBACnB,WAAW,EAAE,GAAG;qBACjB,CAAC;oBACF,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACnC,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE;wBAC5B,IAAI,EAAE,eAAe;wBACrB,MAAM,EAAE,OAAO;wBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACpC,CAAC,CAAC;oBACH,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,8BAA8B;oBAC9B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC;YACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,wBAAwB;gBACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC;gBAC/D,MAAM,GAAG,GAAG,GAAG,GAAG,WAAW,CAAC;gBAC9B,IAAI,GAAG,GAAG,0BAA0B,EAAE,CAAC;oBACrC,IAAI,CAAC;wBACH,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBACjC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,cAAc;oBAChB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,WAAW;gBACd,kDAAkD;gBAClD,CAAC;oBACC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC;oBAC/D,IAAI,GAAG,GAAG,WAAW,GAAG,0BAA0B,EAAE,CAAC;wBACnD,IAAI,CAAC;4BACH,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;4BACjC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxB,CAAC;wBAAC,MAAM,CAAC;4BACP,cAAc;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,KAAa;IACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEhD,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,qDAAqD;IACrD,MAAM,SAAS,GAAG,EAAE;SACjB,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAa;IAEb,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,SAAS,EACT,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,CACR,CAAC;QACF,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,8CAA8C;YAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,
|
|
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":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/swarm/command.ts"],"names":[],"mappings":"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"}
|
package/dist/swarm/mode.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/swarm/mode.js
CHANGED
|
@@ -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, {
|
|
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
|
|
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, {
|
|
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() {
|
package/dist/swarm/mode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/swarm/mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
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"}
|
package/dist/swarm/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,
|
|
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"}
|
package/dist/swarm/tool.js
CHANGED
|
@@ -56,12 +56,11 @@ export function registerAgentSwarmTool(pi) {
|
|
|
56
56
|
})),
|
|
57
57
|
}, { additionalProperties: false }),
|
|
58
58
|
execute: async (toolCallId, params, signal, _onUpdate, ctxRaw) => {
|
|
59
|
-
const { description, subagent_type, prompt_template, items, resume_agent_ids } = params;
|
|
59
|
+
const { description, subagent_type, prompt_template, items, resume_agent_ids, } = params;
|
|
60
60
|
const ctx = ctxRaw;
|
|
61
61
|
const progress = createProgressWidget(ctx);
|
|
62
62
|
try {
|
|
63
|
-
const profileName = normalizeOptionalString(subagent_type) ??
|
|
64
|
-
DEFAULT_SUBAGENT_TYPE;
|
|
63
|
+
const profileName = normalizeOptionalString(subagent_type) ?? DEFAULT_SUBAGENT_TYPE;
|
|
65
64
|
// Build specs
|
|
66
65
|
const specs = createAgentSwarmSpecs({
|
|
67
66
|
items,
|
|
@@ -97,7 +96,11 @@ export function registerAgentSwarmTool(pi) {
|
|
|
97
96
|
});
|
|
98
97
|
// Run with controller
|
|
99
98
|
const maxConcurrency = resolveSwarmMaxConcurrency(process.cwd());
|
|
100
|
-
const controller = new SubagentBatchController({
|
|
99
|
+
const controller = new SubagentBatchController({
|
|
100
|
+
spawn: spawnSubagent,
|
|
101
|
+
resume: resumeSubagent,
|
|
102
|
+
retry: retrySubagent,
|
|
103
|
+
}, tasks, {
|
|
101
104
|
maxConcurrency,
|
|
102
105
|
onProgress: (snapshot) => {
|
|
103
106
|
progress?.component.update(snapshotToProgressState(snapshot, description));
|
|
@@ -224,7 +227,9 @@ function createProgressWidget(ctx) {
|
|
|
224
227
|
const component = new AgentSwarmProgressComponent();
|
|
225
228
|
try {
|
|
226
229
|
// 工厂函数返回预先创建的组件实例;TUI 框架会在刷新周期调用 render
|
|
227
|
-
setWidget(PROGRESS_WIDGET_KEY, () => component, {
|
|
230
|
+
setWidget(PROGRESS_WIDGET_KEY, () => component, {
|
|
231
|
+
placement: "aboveEditor",
|
|
232
|
+
});
|
|
228
233
|
}
|
|
229
234
|
catch {
|
|
230
235
|
// setWidget 失败不应阻断 swarm 执行
|
package/dist/swarm/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CA+CN"}
|
package/dist/team/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CACjC,EAAgB,EAChB,IAAsB;IAEtB,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE;QAC/B,WAAW,EACT,+EAA+E;YAC/E,2BAA2B;QAC7B,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,GAA4B;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE3B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,OAAO,CACrC,YAAY,EACZ,6DAA6D,CAC9D,CAAC;oBACF,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACvC,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;YAED,aAAa;YACb,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpB,UAAU,EAAE,cAAc;gBAC1B,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,+DAA+D;YAC/D,IAAI,CAAC,mBAAmB,CACtB,mDAAmD,MAAM,EAAE,CAC5D,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/team/mailbox.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { MailboxMessage } from "../shared/types.js";
|
|
|
10
10
|
/**
|
|
11
11
|
* Resolve mailbox paths for a team run.
|
|
12
12
|
*
|
|
13
|
-
* {
|
|
13
|
+
* {swarmRoot}/state/runs/{runId}/mailbox/
|
|
14
14
|
* inbox.jsonl — team-level inbox
|
|
15
15
|
* outbox.jsonl — team-level outbox
|
|
16
16
|
* delivery.json — delivery state
|
|
@@ -25,7 +25,7 @@ export interface MailboxPaths {
|
|
|
25
25
|
readonly delivery: string;
|
|
26
26
|
readonly taskDir: string;
|
|
27
27
|
}
|
|
28
|
-
export declare function resolveMailboxPaths(
|
|
28
|
+
export declare function resolveMailboxPaths(swarmRoot: string, runId: string): MailboxPaths;
|
|
29
29
|
export declare function resolveTaskMailboxPaths(paths: MailboxPaths, taskId: string): {
|
|
30
30
|
inbox: string;
|
|
31
31
|
outbox: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.d.ts","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"mailbox.d.ts","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAyCzD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,YAAY,CASd;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQnC;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CASvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,cAAc,GACtB,IAAI,CAaN;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAGlB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAK3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,IAAI,CAIN"}
|
package/dist/team/mailbox.js
CHANGED
|
@@ -16,7 +16,9 @@ const SAFE_RECIPIENT_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
|
16
16
|
function validateRecipient(recipient, field) {
|
|
17
17
|
if (recipient === "broadcast")
|
|
18
18
|
return;
|
|
19
|
-
if (typeof recipient !== "string" ||
|
|
19
|
+
if (typeof recipient !== "string" ||
|
|
20
|
+
recipient.length === 0 ||
|
|
21
|
+
recipient.length > 128) {
|
|
20
22
|
throw new Error(`Invalid ${field}: must be a non-empty string up to 128 characters`);
|
|
21
23
|
}
|
|
22
24
|
if (!SAFE_RECIPIENT_PATTERN.test(recipient)) {
|
|
@@ -30,8 +32,8 @@ function ensureWithinMailbox(resolvedPath, mailboxRoot) {
|
|
|
30
32
|
throw new Error(`Path traversal detected: ${resolvedPath} escapes mailbox root`);
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
|
-
export function resolveMailboxPaths(
|
|
34
|
-
const root = path.join(
|
|
35
|
+
export function resolveMailboxPaths(swarmRoot, runId) {
|
|
36
|
+
const root = path.join(swarmRoot, "state", "runs", runId, "mailbox");
|
|
35
37
|
return {
|
|
36
38
|
root,
|
|
37
39
|
inbox: path.join(root, "inbox.jsonl"),
|
|
@@ -155,9 +157,7 @@ function readJsonLines(filePath) {
|
|
|
155
157
|
}
|
|
156
158
|
}
|
|
157
159
|
function writeJsonLines(filePath, messages) {
|
|
158
|
-
const content = messages
|
|
159
|
-
.map((m) => JSON.stringify(m))
|
|
160
|
-
.join("\n");
|
|
160
|
+
const content = messages.map((m) => JSON.stringify(m)).join("\n");
|
|
161
161
|
fs.writeFileSync(filePath, content + (content ? "\n" : ""), "utf-8");
|
|
162
162
|
}
|
|
163
163
|
function extractRunId(mailboxRoot) {
|
|
@@ -169,8 +169,8 @@ function extractRunId(mailboxRoot) {
|
|
|
169
169
|
}
|
|
170
170
|
return "unknown";
|
|
171
171
|
}
|
|
172
|
-
function
|
|
173
|
-
// mailboxRoot = {
|
|
172
|
+
function extractSwarmRoot(mailboxRoot) {
|
|
173
|
+
// mailboxRoot = {swarmRoot}/state/runs/{runId}/mailbox
|
|
174
174
|
const parts = mailboxRoot.split(path.sep);
|
|
175
175
|
const stateIdx = parts.lastIndexOf("state");
|
|
176
176
|
if (stateIdx >= 0) {
|