@gjczone/pi-swarm 0.1.6 → 0.2.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 +57 -2
- package/dist/index.js.map +1 -1
- package/dist/shared/controller.d.ts +5 -2
- package/dist/shared/controller.d.ts.map +1 -1
- package/dist/shared/controller.js +99 -28
- package/dist/shared/controller.js.map +1 -1
- package/dist/shared/render.d.ts +2 -2
- package/dist/shared/render.js +3 -3
- package/dist/shared/spawner.d.ts +1 -1
- package/dist/shared/spawner.d.ts.map +1 -1
- package/dist/shared/spawner.js +237 -132
- package/dist/shared/spawner.js.map +1 -1
- package/dist/shared/types.d.ts +21 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/state/persistence.d.ts +7 -0
- package/dist/state/persistence.d.ts.map +1 -1
- package/dist/state/persistence.js +53 -3
- package/dist/state/persistence.js.map +1 -1
- package/dist/state/recovery.d.ts.map +1 -1
- package/dist/state/recovery.js +21 -7
- package/dist/state/recovery.js.map +1 -1
- package/dist/swarm/tool.d.ts.map +1 -1
- package/dist/swarm/tool.js +69 -2
- package/dist/swarm/tool.js.map +1 -1
- package/dist/team/command.d.ts +3 -2
- package/dist/team/command.d.ts.map +1 -1
- package/dist/team/command.js +24 -7
- package/dist/team/command.js.map +1 -1
- package/dist/team/mailbox.d.ts +1 -1
- package/dist/team/mailbox.d.ts.map +1 -1
- package/dist/team/mailbox.js +31 -10
- package/dist/team/mailbox.js.map +1 -1
- package/dist/team/supervisor.d.ts +17 -2
- package/dist/team/supervisor.d.ts.map +1 -1
- package/dist/team/supervisor.js +123 -13
- package/dist/team/supervisor.js.map +1 -1
- package/dist/team/tool.d.ts +2 -2
- package/dist/team/tool.d.ts.map +1 -1
- package/dist/team/tool.js +26 -18
- package/dist/team/tool.js.map +1 -1
- package/dist/tui/progress.d.ts +10 -0
- package/dist/tui/progress.d.ts.map +1 -1
- package/dist/tui/progress.js +47 -0
- package/dist/tui/progress.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,6 +17,25 @@
|
|
|
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) && normalizedPath !== path.resolve(root)) {
|
|
35
|
+
throw new Error(`Path traversal detected: ${resolvedPath} escapes ${root}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
20
39
|
// Path resolution
|
|
21
40
|
// ---------------------------------------------------------------------------
|
|
22
41
|
/**
|
|
@@ -38,11 +57,20 @@ export function resolveCrewRoot(cwd) {
|
|
|
38
57
|
}
|
|
39
58
|
/** Resolve the state directory for a specific run. */
|
|
40
59
|
export function resolveRunStateDir(crewRoot, runId) {
|
|
41
|
-
|
|
60
|
+
validateId(runId, "runId");
|
|
61
|
+
const runsDir = path.join(crewRoot, "state", "runs");
|
|
62
|
+
const dir = path.join(runsDir, runId);
|
|
63
|
+
ensureWithinRoot(dir, runsDir);
|
|
64
|
+
return dir;
|
|
42
65
|
}
|
|
43
66
|
/** Resolve per-agent state directory. */
|
|
44
67
|
export function resolveAgentStateDir(crewRoot, runId, agentId) {
|
|
45
|
-
|
|
68
|
+
validateId(agentId, "agentId");
|
|
69
|
+
const runDir = resolveRunStateDir(crewRoot, runId);
|
|
70
|
+
const agentsDir = path.join(runDir, "agents");
|
|
71
|
+
const dir = path.join(agentsDir, agentId);
|
|
72
|
+
ensureWithinRoot(dir, agentsDir);
|
|
73
|
+
return dir;
|
|
46
74
|
}
|
|
47
75
|
/**
|
|
48
76
|
* Create a new run manifest and write it to disk.
|
|
@@ -74,6 +102,18 @@ export function updateManifest(crewRoot, manifest) {
|
|
|
74
102
|
fs.mkdirSync(dir, { recursive: true });
|
|
75
103
|
writeAtomic(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
76
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Update the heartbeat timestamp for a running manifest.
|
|
107
|
+
*/
|
|
108
|
+
export function updateHeartbeat(crewRoot, runId) {
|
|
109
|
+
const manifest = readManifest(crewRoot, runId);
|
|
110
|
+
if (!manifest)
|
|
111
|
+
return;
|
|
112
|
+
if (manifest.status !== "running")
|
|
113
|
+
return;
|
|
114
|
+
manifest.lastHeartbeatAt = Date.now();
|
|
115
|
+
updateManifest(crewRoot, manifest);
|
|
116
|
+
}
|
|
77
117
|
// ---------------------------------------------------------------------------
|
|
78
118
|
// Task state
|
|
79
119
|
// ---------------------------------------------------------------------------
|
|
@@ -164,6 +204,7 @@ export function loadAgentStatus(crewRoot, runId, agentId) {
|
|
|
164
204
|
}
|
|
165
205
|
/**
|
|
166
206
|
* List all active run IDs in the state directory.
|
|
207
|
+
* Only returns IDs that match the safe ID pattern.
|
|
167
208
|
*/
|
|
168
209
|
export function listActiveRuns(crewRoot) {
|
|
169
210
|
const runsDir = path.join(crewRoot, "state", "runs");
|
|
@@ -172,7 +213,16 @@ export function listActiveRuns(crewRoot) {
|
|
|
172
213
|
return fs
|
|
173
214
|
.readdirSync(runsDir, { withFileTypes: true })
|
|
174
215
|
.filter((d) => d.isDirectory())
|
|
175
|
-
.map((d) => d.name)
|
|
216
|
+
.map((d) => d.name)
|
|
217
|
+
.filter((name) => {
|
|
218
|
+
try {
|
|
219
|
+
validateId(name, "runId");
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
176
226
|
}
|
|
177
227
|
/**
|
|
178
228
|
* Delete the entire run state directory.
|
|
@@ -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,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,KAAa;IAEb,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/state/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,
|
|
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,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CA+BT;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,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 { resolveCrewRoot, listActiveRuns, readManifest, updateManifest, deleteRunState, appendEvent, } from "./persistence.js";
|
|
10
|
+
import { resolveCrewRoot, listActiveRuns, readManifest, updateManifest, deleteRunState, loadAgentStatus, appendEvent, } from "./persistence.js";
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
12
|
// Constants
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
@@ -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
|
|
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 = {
|
|
@@ -116,13 +117,26 @@ export function hasUnfinishedTasks(crewRoot, runId) {
|
|
|
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
123
|
const agentsDir = path.join(crewRoot, "state", "runs", runId, "agents");
|
|
121
124
|
if (!fs.existsSync(agentsDir))
|
|
122
|
-
return
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
return true;
|
|
126
|
+
// Check each agent directory for non-terminal status
|
|
127
|
+
const agentDirs = fs.readdirSync(agentsDir, { withFileTypes: true })
|
|
128
|
+
.filter((d) => d.isDirectory())
|
|
129
|
+
.map((d) => d.name);
|
|
130
|
+
for (const agentId of agentDirs) {
|
|
131
|
+
const status = loadAgentStatus(crewRoot, runId, agentId);
|
|
132
|
+
if (!status)
|
|
133
|
+
return true;
|
|
134
|
+
const state = String(status.status ?? status.state ?? "");
|
|
135
|
+
if (state === "running" || state === "started" || state === "") {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
126
140
|
}
|
|
127
141
|
/**
|
|
128
142
|
* Get resumable agent IDs from a run.
|
|
@@ -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,eAAe,EACf,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/state/recovery.ts"],"names":[],"mappings":"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"}
|
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,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAiDtF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,GACf,IAAI,CAqJN"}
|
package/dist/swarm/tool.js
CHANGED
|
@@ -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,8 +55,10 @@ 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,
|
|
58
|
+
execute: async (toolCallId, params, signal, _onUpdate, ctxRaw) => {
|
|
56
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
63
|
const profileName = normalizeOptionalString(subagent_type) ??
|
|
59
64
|
DEFAULT_SUBAGENT_TYPE;
|
|
@@ -92,8 +97,15 @@ export function registerAgentSwarmTool(pi) {
|
|
|
92
97
|
});
|
|
93
98
|
// Run with controller
|
|
94
99
|
const maxConcurrency = resolveSwarmMaxConcurrency(process.cwd());
|
|
95
|
-
const controller = new SubagentBatchController({ spawn: spawnSubagent, resume: resumeSubagent, retry: retrySubagent }, tasks, {
|
|
100
|
+
const controller = new SubagentBatchController({ spawn: spawnSubagent, resume: resumeSubagent, retry: retrySubagent }, tasks, {
|
|
101
|
+
maxConcurrency,
|
|
102
|
+
onProgress: (snapshot) => {
|
|
103
|
+
progress?.component.update(snapshotToProgressState(snapshot, description));
|
|
104
|
+
},
|
|
105
|
+
});
|
|
96
106
|
const results = await controller.run();
|
|
107
|
+
// Trigger completion animation before tearing down
|
|
108
|
+
progress?.component.complete();
|
|
97
109
|
// Render output
|
|
98
110
|
const swarmResults = toSwarmRunResults(results);
|
|
99
111
|
const output = renderSwarmResults(swarmResults);
|
|
@@ -110,6 +122,11 @@ export function registerAgentSwarmTool(pi) {
|
|
|
110
122
|
details: undefined,
|
|
111
123
|
};
|
|
112
124
|
}
|
|
125
|
+
finally {
|
|
126
|
+
// Always tear down the progress widget so it does not linger
|
|
127
|
+
progress?.dispose();
|
|
128
|
+
clearProgressWidget(ctx);
|
|
129
|
+
}
|
|
113
130
|
},
|
|
114
131
|
});
|
|
115
132
|
}
|
|
@@ -187,4 +204,54 @@ function normalizeOptionalString(value) {
|
|
|
187
204
|
const trimmed = value.trim();
|
|
188
205
|
return trimmed.length > 0 ? trimmed : undefined;
|
|
189
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Install a live progress widget above the editor when running in TUI mode.
|
|
209
|
+
*
|
|
210
|
+
* Returns undefined in non-TUI modes (print/rpc/json) where setWidget is a
|
|
211
|
+
* no-op, so the controller's onProgress callback stays a cheap no-op too.
|
|
212
|
+
*
|
|
213
|
+
* 业务说明:在 TUI 模式下注册一个实时进度面板,展示每个子 Agent 的
|
|
214
|
+
* 运行状态(队列/运行中/完成/失败/限流挂起)。非 TUI 模式下返回
|
|
215
|
+
* undefined,避免无意义的 UI 调用。
|
|
216
|
+
*/
|
|
217
|
+
function createProgressWidget(ctx) {
|
|
218
|
+
// 仅在 TUI 模式下展示进度面板;其他模式(print/rpc/json)无可用 UI
|
|
219
|
+
if (ctx.mode !== "tui")
|
|
220
|
+
return undefined;
|
|
221
|
+
const setWidget = ctx.ui?.setWidget;
|
|
222
|
+
if (typeof setWidget !== "function")
|
|
223
|
+
return undefined;
|
|
224
|
+
const component = new AgentSwarmProgressComponent();
|
|
225
|
+
try {
|
|
226
|
+
// 工厂函数返回预先创建的组件实例;TUI 框架会在刷新周期调用 render
|
|
227
|
+
setWidget(PROGRESS_WIDGET_KEY, () => component, { placement: "aboveEditor" });
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// setWidget 失败不应阻断 swarm 执行
|
|
231
|
+
component.dispose();
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
component,
|
|
236
|
+
dispose() {
|
|
237
|
+
component.dispose();
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Remove the progress widget after the swarm run completes or fails.
|
|
243
|
+
*/
|
|
244
|
+
function clearProgressWidget(ctx) {
|
|
245
|
+
if (ctx.mode !== "tui")
|
|
246
|
+
return;
|
|
247
|
+
const setWidget = ctx.ui?.setWidget;
|
|
248
|
+
if (typeof setWidget !== "function")
|
|
249
|
+
return;
|
|
250
|
+
try {
|
|
251
|
+
setWidget(PROGRESS_WIDGET_KEY, undefined, { placement: "aboveEditor" });
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// Best effort — widget teardown failure is non-fatal
|
|
255
|
+
}
|
|
256
|
+
}
|
|
190
257
|
//# sourceMappingURL=tool.js.map
|
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;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"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"}
|
package/dist/team/command.d.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Supports:
|
|
5
5
|
* /swarm-team <goal> — launch a team run for the given goal
|
|
6
6
|
*
|
|
7
|
-
* The command delegates to the
|
|
7
|
+
* The command delegates to the SwarmTeam tool internally.
|
|
8
8
|
*/
|
|
9
9
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
|
-
|
|
10
|
+
import type { SwarmCommandHost } from "../swarm/command.js";
|
|
11
|
+
export declare function registerTeamCommand(pi: ExtensionAPI, host: SwarmCommandHost): void;
|
|
11
12
|
//# sourceMappingURL=command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;AAC7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAkDN"}
|
package/dist/team/command.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* Supports:
|
|
5
5
|
* /swarm-team <goal> — launch a team run for the given goal
|
|
6
6
|
*
|
|
7
|
-
* The command delegates to the
|
|
7
|
+
* The command delegates to the SwarmTeam tool internally.
|
|
8
8
|
*/
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
// Registration
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
|
-
export function registerTeamCommand(pi) {
|
|
12
|
+
export function registerTeamCommand(pi, host) {
|
|
13
13
|
pi.registerCommand("swarm-team", {
|
|
14
14
|
description: "Launch a collaborative team of role-based agents to complete a complex task. " +
|
|
15
15
|
"Usage: /swarm-team <goal>",
|
|
@@ -19,13 +19,30 @@ export function registerTeamCommand(pi) {
|
|
|
19
19
|
ctx.ui?.notify?.("Usage: /swarm-team <goal>", "warning");
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
if (!host.hasModel()) {
|
|
23
|
+
host.showError("No model configured. Please set a model first.");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Activate swarm mode if not already active
|
|
27
|
+
if (!host.swarmActive) {
|
|
28
|
+
if (host.getPermissionMode() === "manual") {
|
|
29
|
+
const confirmed = await ctx.ui?.confirm("Swarm Team", "Starting a swarm team task. Switch to auto permission mode?");
|
|
30
|
+
if (!confirmed) {
|
|
31
|
+
host.showStatus("Swarm team task cancelled.");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
await host.setPermissionMode("auto");
|
|
35
|
+
}
|
|
36
|
+
host.setSwarmActive(true, "task");
|
|
37
|
+
}
|
|
38
|
+
// TUI marker
|
|
39
|
+
host.pi.sendMessage?.({
|
|
40
|
+
customType: "swarm:marker",
|
|
41
|
+
content: "active",
|
|
27
42
|
display: true,
|
|
28
43
|
});
|
|
44
|
+
// Send the goal as a user prompt — the LLM will call SwarmTeam
|
|
45
|
+
host.sendNormalUserInput(`Use the SwarmTeam tool to accomplish this goal: ${prompt}`);
|
|
29
46
|
},
|
|
30
47
|
});
|
|
31
48
|
}
|
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;AAKH,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,CACd,2BAA2B,EAC3B,SAAS,CACV,CAAC;gBACF,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
|
@@ -26,7 +26,7 @@ export interface MailboxPaths {
|
|
|
26
26
|
readonly taskDir: string;
|
|
27
27
|
}
|
|
28
28
|
export declare function resolveMailboxPaths(crewRoot: string, runId: string): MailboxPaths;
|
|
29
|
-
export declare function resolveTaskMailboxPaths(
|
|
29
|
+
export declare function resolveTaskMailboxPaths(paths: MailboxPaths, taskId: string): {
|
|
30
30
|
inbox: string;
|
|
31
31
|
outbox: string;
|
|
32
32
|
};
|
|
@@ -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;AA+BzD;;;;;;;;;;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,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,YAAY,CAed;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,CACzB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,IAAI,CAQN"}
|
package/dist/team/mailbox.js
CHANGED
|
@@ -8,6 +8,28 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as fs from "node:fs";
|
|
10
10
|
import * as path from "node:path";
|
|
11
|
+
import { validateId } from "../state/persistence.js";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Security helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const SAFE_RECIPIENT_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
16
|
+
function validateRecipient(recipient, field) {
|
|
17
|
+
if (recipient === "broadcast")
|
|
18
|
+
return;
|
|
19
|
+
if (typeof recipient !== "string" || recipient.length === 0 || recipient.length > 128) {
|
|
20
|
+
throw new Error(`Invalid ${field}: must be a non-empty string up to 128 characters`);
|
|
21
|
+
}
|
|
22
|
+
if (!SAFE_RECIPIENT_PATTERN.test(recipient)) {
|
|
23
|
+
throw new Error(`Invalid ${field}: "${recipient}" contains unsafe characters`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function ensureWithinMailbox(resolvedPath, mailboxRoot) {
|
|
27
|
+
const normalizedRoot = path.resolve(mailboxRoot) + path.sep;
|
|
28
|
+
const normalizedPath = path.resolve(resolvedPath);
|
|
29
|
+
if (!normalizedPath.startsWith(normalizedRoot)) {
|
|
30
|
+
throw new Error(`Path traversal detected: ${resolvedPath} escapes mailbox root`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
11
33
|
export function resolveMailboxPaths(crewRoot, runId) {
|
|
12
34
|
const root = path.join(crewRoot, "state", "runs", runId, "mailbox");
|
|
13
35
|
return {
|
|
@@ -18,8 +40,10 @@ export function resolveMailboxPaths(crewRoot, runId) {
|
|
|
18
40
|
taskDir: path.join(root, "tasks"),
|
|
19
41
|
};
|
|
20
42
|
}
|
|
21
|
-
export function resolveTaskMailboxPaths(
|
|
22
|
-
|
|
43
|
+
export function resolveTaskMailboxPaths(paths, taskId) {
|
|
44
|
+
validateId(taskId, "taskId");
|
|
45
|
+
const base = path.join(paths.taskDir, taskId);
|
|
46
|
+
ensureWithinMailbox(base, paths.root);
|
|
23
47
|
return {
|
|
24
48
|
inbox: path.join(base, "inbox.jsonl"),
|
|
25
49
|
outbox: path.join(base, "outbox.jsonl"),
|
|
@@ -46,17 +70,14 @@ export function ensureMailbox(paths) {
|
|
|
46
70
|
*/
|
|
47
71
|
export function sendMessage(paths, message) {
|
|
48
72
|
ensureMailbox(paths);
|
|
73
|
+
validateRecipient(message.to, "message.to");
|
|
49
74
|
// Append to team outbox
|
|
50
75
|
appendJsonLine(paths.outbox, message);
|
|
51
76
|
// If addressed to a specific agent, also put in their task inbox
|
|
52
77
|
if (message.to && message.to !== "broadcast") {
|
|
53
|
-
const taskPaths = resolveTaskMailboxPaths(paths.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// The task inbox is under the taskDir.
|
|
57
|
-
const taskInbox = path.join(paths.taskDir, message.to, "inbox.jsonl");
|
|
58
|
-
fs.mkdirSync(path.dirname(taskInbox), { recursive: true });
|
|
59
|
-
appendJsonLine(taskInbox, message);
|
|
78
|
+
const taskPaths = resolveTaskMailboxPaths(paths, message.to);
|
|
79
|
+
fs.mkdirSync(path.dirname(taskPaths.inbox), { recursive: true });
|
|
80
|
+
appendJsonLine(taskPaths.inbox, message);
|
|
60
81
|
}
|
|
61
82
|
}
|
|
62
83
|
/**
|
|
@@ -69,7 +90,7 @@ export function readInbox(paths) {
|
|
|
69
90
|
* Read messages from a task-specific inbox.
|
|
70
91
|
*/
|
|
71
92
|
export function readTaskInbox(paths, taskId) {
|
|
72
|
-
const taskPaths = resolveTaskMailboxPaths(
|
|
93
|
+
const taskPaths = resolveTaskMailboxPaths(paths, taskId);
|
|
73
94
|
return readJsonLines(taskPaths.inbox);
|
|
74
95
|
}
|
|
75
96
|
/**
|
package/dist/team/mailbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,9 +52,24 @@ export declare class TeamSupervisor {
|
|
|
52
52
|
prompt: string;
|
|
53
53
|
} | null;
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Parse agent output for mailbox_message blocks and separate them from the result.
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
parseAgentMessages(output: string): {
|
|
58
|
+
result: string;
|
|
59
|
+
messages: Array<{
|
|
60
|
+
to: string;
|
|
61
|
+
content: string;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Mark a phase as completed with its raw output.
|
|
66
|
+
* Parses messages from output, delivers them, and sends task_result broadcast.
|
|
67
|
+
*/
|
|
68
|
+
completePhase(name: string, rawOutput: string): {
|
|
69
|
+
result: string;
|
|
70
|
+
deliveredMessages: number;
|
|
71
|
+
};
|
|
72
|
+
private generateMessageId;
|
|
58
73
|
/**
|
|
59
74
|
* Mark a phase as failed.
|
|
60
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/team/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/team/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,eAAe,EAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EAET,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAExB,MAAM,EAAE,oBAAoB;IAwBxC;;;OAGG;IACH,iBAAiB,IAAI,UAAU,GAAG,SAAS;IAmB3C;;OAEG;IACH,cAAc,IAAI;QAChB,KAAK,EAAE,UAAU,CAAC;QAClB,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;IAgCR;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;QAClC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClD;IAcD;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAC9C,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA8CD,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAsB5C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASrD,2CAA2C;IAC3C,UAAU,IAAI,OAAO;IAIrB,+CAA+C;IAC/C,QAAQ,IAAI,IAAI;IAKhB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAkC1B,OAAO,CAAC,gBAAgB;IAgExB,OAAO,CAAC,YAAY;CAkBrB"}
|