@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":"tool.js","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/swarm/tool.ts"],"names":[],"mappings":"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"}
@@ -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 AgentTeam tool internally.
7
+ * The command delegates to the SwarmTeam tool internally.
8
8
  */
9
9
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
10
- export declare function registerTeamCommand(pi: ExtensionAPI): void;
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;AAM7F,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,GACf,IAAI,CAyBN"}
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"}
@@ -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 AgentTeam tool internally.
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
- // Send the goal as a user prompt — the LLM can then decide
23
- // whether to call AgentTeam or handle it differently.
24
- pi.sendMessage({
25
- customType: "swarm_team:prompt",
26
- content: `Launch a team to: ${prompt}`,
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/team/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CACjC,EAAgB;IAEhB,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,2DAA2D;YAC3D,sDAAsD;YACtD,EAAE,CAAC,WAAW,CAAC;gBACb,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,qBAAqB,MAAM,EAAE;gBACtC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
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"}
@@ -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
- * {crewRoot}/state/runs/{runId}/mailbox/
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,8 +25,8 @@ export interface MailboxPaths {
25
25
  readonly delivery: string;
26
26
  readonly taskDir: string;
27
27
  }
28
- export declare function resolveMailboxPaths(crewRoot: string, runId: string): MailboxPaths;
29
- export declare function resolveTaskMailboxPaths(crewRoot: string, runId: string, taskId: string): {
28
+ export declare function resolveMailboxPaths(swarmRoot: string, runId: string): MailboxPaths;
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;AAMzD;;;;;;;;;;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,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAcnC;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,CAmBN;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,CAOlB;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"}
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"}
@@ -8,8 +8,32 @@
8
8
  */
9
9
  import * as fs from "node:fs";
10
10
  import * as path from "node:path";
11
- export function resolveMailboxPaths(crewRoot, runId) {
12
- const root = path.join(crewRoot, "state", "runs", runId, "mailbox");
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" ||
20
+ recipient.length === 0 ||
21
+ recipient.length > 128) {
22
+ throw new Error(`Invalid ${field}: must be a non-empty string up to 128 characters`);
23
+ }
24
+ if (!SAFE_RECIPIENT_PATTERN.test(recipient)) {
25
+ throw new Error(`Invalid ${field}: "${recipient}" contains unsafe characters`);
26
+ }
27
+ }
28
+ function ensureWithinMailbox(resolvedPath, mailboxRoot) {
29
+ const normalizedRoot = path.resolve(mailboxRoot) + path.sep;
30
+ const normalizedPath = path.resolve(resolvedPath);
31
+ if (!normalizedPath.startsWith(normalizedRoot)) {
32
+ throw new Error(`Path traversal detected: ${resolvedPath} escapes mailbox root`);
33
+ }
34
+ }
35
+ export function resolveMailboxPaths(swarmRoot, runId) {
36
+ const root = path.join(swarmRoot, "state", "runs", runId, "mailbox");
13
37
  return {
14
38
  root,
15
39
  inbox: path.join(root, "inbox.jsonl"),
@@ -18,8 +42,10 @@ export function resolveMailboxPaths(crewRoot, runId) {
18
42
  taskDir: path.join(root, "tasks"),
19
43
  };
20
44
  }
21
- export function resolveTaskMailboxPaths(crewRoot, runId, taskId) {
22
- const base = path.join(crewRoot, "state", "runs", runId, "mailbox", "tasks", taskId);
45
+ export function resolveTaskMailboxPaths(paths, taskId) {
46
+ validateId(taskId, "taskId");
47
+ const base = path.join(paths.taskDir, taskId);
48
+ ensureWithinMailbox(base, paths.root);
23
49
  return {
24
50
  inbox: path.join(base, "inbox.jsonl"),
25
51
  outbox: path.join(base, "outbox.jsonl"),
@@ -46,17 +72,14 @@ export function ensureMailbox(paths) {
46
72
  */
47
73
  export function sendMessage(paths, message) {
48
74
  ensureMailbox(paths);
75
+ validateRecipient(message.to, "message.to");
49
76
  // Append to team outbox
50
77
  appendJsonLine(paths.outbox, message);
51
78
  // If addressed to a specific agent, also put in their task inbox
52
79
  if (message.to && message.to !== "broadcast") {
53
- const taskPaths = resolveTaskMailboxPaths(paths.root.replace(/\/state\/runs\/[^/]+\/mailbox$/, ""), // extract crewRoot
54
- extractRunId(paths.root), message.to);
55
- // Actually, we need proper path derivation. Let's use a simpler approach:
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);
80
+ const taskPaths = resolveTaskMailboxPaths(paths, message.to);
81
+ fs.mkdirSync(path.dirname(taskPaths.inbox), { recursive: true });
82
+ appendJsonLine(taskPaths.inbox, message);
60
83
  }
61
84
  }
62
85
  /**
@@ -69,7 +92,7 @@ export function readInbox(paths) {
69
92
  * Read messages from a task-specific inbox.
70
93
  */
71
94
  export function readTaskInbox(paths, taskId) {
72
- const taskPaths = resolveTaskMailboxPaths(extractCrewRoot(paths.root), extractRunId(paths.root), taskId);
95
+ const taskPaths = resolveTaskMailboxPaths(paths, taskId);
73
96
  return readJsonLines(taskPaths.inbox);
74
97
  }
75
98
  /**
@@ -134,9 +157,7 @@ function readJsonLines(filePath) {
134
157
  }
135
158
  }
136
159
  function writeJsonLines(filePath, messages) {
137
- const content = messages
138
- .map((m) => JSON.stringify(m))
139
- .join("\n");
160
+ const content = messages.map((m) => JSON.stringify(m)).join("\n");
140
161
  fs.writeFileSync(filePath, content + (content ? "\n" : ""), "utf-8");
141
162
  }
142
163
  function extractRunId(mailboxRoot) {
@@ -148,8 +169,8 @@ function extractRunId(mailboxRoot) {
148
169
  }
149
170
  return "unknown";
150
171
  }
151
- function extractCrewRoot(mailboxRoot) {
152
- // mailboxRoot = {crewRoot}/state/runs/{runId}/mailbox
172
+ function extractSwarmRoot(mailboxRoot) {
173
+ // mailboxRoot = {swarmRoot}/state/runs/{runId}/mailbox
153
174
  const parts = mailboxRoot.split(path.sep);
154
175
  const stateIdx = parts.lastIndexOf("state");
155
176
  if (stateIdx >= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/team/mailbox.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,14 @@
5
5
  * each phase to a role agent, monitors progress via the mailbox,
6
6
  * and synthesizes the final result.
7
7
  */
8
- import type { AgentRole, TeamPhase, AgentRoleConfig } from "../shared/types.js";
8
+ import type { AgentRole, TeamPhase, AgentRoleConfig, TeamProgressCallback } from "../shared/types.js";
9
9
  import { TaskGraph, type PhaseState } from "./task-graph.js";
10
10
  import { type MailboxPaths } from "./mailbox.js";
11
11
  export interface TeamSupervisorConfig {
12
12
  /** Working directory for the team run. */
13
13
  readonly cwd: string;
14
- /** Crew root for state persistence. */
15
- readonly crewRoot: string;
14
+ /** Swarm root for state persistence. */
15
+ readonly swarmRoot: string;
16
16
  /** Unique run identifier. */
17
17
  readonly runId: string;
18
18
  /** High-level goal. */
@@ -23,6 +23,8 @@ export interface TeamSupervisorConfig {
23
23
  readonly roles?: readonly AgentRoleConfig[];
24
24
  /** Max concurrent agents. */
25
25
  readonly maxAgents?: number;
26
+ /** Progress callback for TUI dashboard updates. */
27
+ readonly onProgress?: TeamProgressCallback;
26
28
  }
27
29
  export interface TeamRunState {
28
30
  readonly runId: string;
@@ -37,6 +39,7 @@ export declare class TeamSupervisor {
37
39
  readonly config: TeamSupervisorConfig;
38
40
  readonly state: TeamRunState;
39
41
  readonly mailboxPaths: MailboxPaths;
42
+ private readonly onProgress?;
40
43
  constructor(config: TeamSupervisorConfig);
41
44
  /**
42
45
  * Get the next phase that is ready to execute (dependencies satisfied,
@@ -52,9 +55,24 @@ export declare class TeamSupervisor {
52
55
  prompt: string;
53
56
  } | null;
54
57
  /**
55
- * Mark a phase as completed with its result.
58
+ * Parse agent output for mailbox_message blocks and separate them from the result.
56
59
  */
57
- completePhase(name: string, result: string): void;
60
+ parseAgentMessages(output: string): {
61
+ result: string;
62
+ messages: Array<{
63
+ to: string;
64
+ content: string;
65
+ }>;
66
+ };
67
+ /**
68
+ * Mark a phase as completed with its raw output.
69
+ * Parses messages from output, delivers them, and sends task_result broadcast.
70
+ */
71
+ completePhase(name: string, rawOutput: string): {
72
+ result: string;
73
+ deliveredMessages: number;
74
+ };
75
+ private generateMessageId;
58
76
  /**
59
77
  * Mark a phase as failed.
60
78
  */
@@ -63,6 +81,14 @@ export declare class TeamSupervisor {
63
81
  * Assign an agent to a phase.
64
82
  */
65
83
  assignAgent(phaseName: string, agentId: string): void;
84
+ /**
85
+ * Build and emit a TeamProgressSnapshot for the TUI dashboard.
86
+ *
87
+ * Reads current phase statuses from the task graph, counts mailbox
88
+ * messages, and calls the optional onProgress callback with the
89
+ * snapshot.
90
+ */
91
+ private emitProgress;
66
92
  /** Check if the entire run is complete. */
67
93
  isComplete(): boolean;
68
94
  /** Finalize the run with an overall status. */
@@ -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,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EAET,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,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;IAeR;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMjD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAc5C;;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;IAkCxB,OAAO,CAAC,YAAY;CAkBrB"}
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,EAEf,oBAAoB,EAErB,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,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,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;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAC5C;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;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAuB;gBAEvC,MAAM,EAAE,oBAAoB;IAyBxC;;;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;IAqCR;;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;IAeD;;;OAGG;IACH,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB;QACD,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAuDD,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAwB5C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAarD;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IA8CpB,2CAA2C;IAC3C,UAAU,IAAI,OAAO;IAIrB,+CAA+C;IAC/C,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAkC1B,OAAO,CAAC,gBAAgB;IAmExB,OAAO,CAAC,YAAY;CAYrB"}
@@ -6,7 +6,7 @@
6
6
  * and synthesizes the final result.
7
7
  */
8
8
  import { TaskGraph, DEFAULT_TEAM_PHASES, } from "./task-graph.js";
9
- import { resolveMailboxPaths, ensureMailbox, } from "./mailbox.js";
9
+ import { resolveMailboxPaths, ensureMailbox, sendMessage, readTaskInbox, updateDeliveryState, } from "./mailbox.js";
10
10
  // ---------------------------------------------------------------------------
11
11
  // Supervisor
12
12
  // ---------------------------------------------------------------------------
@@ -14,9 +14,11 @@ export class TeamSupervisor {
14
14
  config;
15
15
  state;
16
16
  mailboxPaths;
17
+ onProgress;
17
18
  constructor(config) {
18
19
  this.config = config;
19
- this.mailboxPaths = resolveMailboxPaths(config.crewRoot, config.runId);
20
+ this.onProgress = config.onProgress;
21
+ this.mailboxPaths = resolveMailboxPaths(config.swarmRoot, config.runId);
20
22
  const phases = config.phases ?? DEFAULT_TEAM_PHASES;
21
23
  this.state = {
22
24
  runId: config.runId,
@@ -27,6 +29,8 @@ export class TeamSupervisor {
27
29
  startedAt: Date.now(),
28
30
  };
29
31
  ensureMailbox(this.mailboxPaths);
32
+ // Emit initial state (all queued)
33
+ this.emitProgress();
30
34
  }
31
35
  // -------------------------------------------------------------------
32
36
  // Phase management
@@ -62,7 +66,24 @@ export class TeamSupervisor {
62
66
  const result = this.state.taskGraph.startPhase(phase.phase.name);
63
67
  if (!result.ok)
64
68
  return null;
69
+ // Send task assignment message to the role's mailbox
70
+ const assignmentMessage = {
71
+ messageId: this.generateMessageId(),
72
+ runId: this.state.runId,
73
+ timestamp: new Date().toISOString(),
74
+ from: "supervisor",
75
+ to: phase.phase.role,
76
+ type: "task_assignment",
77
+ payload: {
78
+ phase: phase.phase.name,
79
+ goal: this.config.goal,
80
+ dependsOn: phase.phase.dependsOn ?? [],
81
+ },
82
+ };
83
+ sendMessage(this.mailboxPaths, assignmentMessage);
84
+ updateDeliveryState(this.mailboxPaths, assignmentMessage.messageId, "delivered");
65
85
  const prompt = this.buildPhasePrompt(phase);
86
+ this.emitProgress();
66
87
  return {
67
88
  phase,
68
89
  role: phase.phase.role,
@@ -70,28 +91,96 @@ export class TeamSupervisor {
70
91
  };
71
92
  }
72
93
  /**
73
- * Mark a phase as completed with its result.
94
+ * Parse agent output for mailbox_message blocks and separate them from the result.
95
+ */
96
+ parseAgentMessages(output) {
97
+ const messages = [];
98
+ const messageRegex = /<mailbox_message\s+to="([^"]+)">([\s\S]*?)<\/mailbox_message>/g;
99
+ let match;
100
+ while ((match = messageRegex.exec(output)) !== null) {
101
+ messages.push({
102
+ to: match[1].trim(),
103
+ content: match[2].trim(),
104
+ });
105
+ }
106
+ const result = output.replace(messageRegex, "").trim();
107
+ return { result, messages };
108
+ }
109
+ /**
110
+ * Mark a phase as completed with its raw output.
111
+ * Parses messages from output, delivers them, and sends task_result broadcast.
74
112
  */
75
- completePhase(name, result) {
113
+ completePhase(name, rawOutput) {
114
+ const phase = this.state.taskGraph.getPhase(name);
115
+ if (!phase) {
116
+ return { result: rawOutput, deliveredMessages: 0 };
117
+ }
118
+ const { result, messages } = this.parseAgentMessages(rawOutput);
76
119
  this.state.taskGraph.completePhase(name, result);
77
- // Propagate failures: skip phases that depend on a failed phase
78
- // (Not needed for completed phases)
120
+ // Deliver parsed handoff messages
121
+ let deliveredCount = 0;
122
+ for (const msg of messages) {
123
+ try {
124
+ const handoffMessage = {
125
+ messageId: this.generateMessageId(),
126
+ runId: this.state.runId,
127
+ timestamp: new Date().toISOString(),
128
+ from: name,
129
+ to: msg.to,
130
+ type: "handoff",
131
+ payload: { content: msg.content },
132
+ };
133
+ sendMessage(this.mailboxPaths, handoffMessage);
134
+ updateDeliveryState(this.mailboxPaths, handoffMessage.messageId, "delivered");
135
+ deliveredCount++;
136
+ }
137
+ catch {
138
+ // Skip invalid messages
139
+ }
140
+ }
141
+ // Broadcast task result
142
+ const resultMessage = {
143
+ messageId: this.generateMessageId(),
144
+ runId: this.state.runId,
145
+ timestamp: new Date().toISOString(),
146
+ from: name,
147
+ to: "broadcast",
148
+ type: "task_result",
149
+ payload: { phase: name, result },
150
+ };
151
+ sendMessage(this.mailboxPaths, resultMessage);
152
+ updateDeliveryState(this.mailboxPaths, resultMessage.messageId, "broadcast");
153
+ this.emitProgress();
154
+ return { result, deliveredMessages: deliveredCount };
155
+ }
156
+ generateMessageId() {
157
+ return `msg-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
79
158
  }
80
159
  /**
81
160
  * Mark a phase as failed.
82
161
  */
83
162
  failPhase(name, error) {
84
163
  this.state.taskGraph.failPhase(name, error);
85
- // Skip downstream phases that depend on this one
86
- for (const otherName of this.state.taskGraph.getPhaseNames()) {
87
- const other = this.state.taskGraph.getPhase(otherName);
88
- if (!other || other.status !== "queued")
164
+ // BFS: skip all phases that depend (directly or transitively) on a failed/skipped phase
165
+ const queue = [name];
166
+ const visited = new Set();
167
+ while (queue.length > 0) {
168
+ const current = queue.shift();
169
+ if (visited.has(current))
89
170
  continue;
90
- const deps = other.phase.dependsOn ?? [];
91
- if (deps.includes(name)) {
92
- this.state.taskGraph.skipPhase(otherName);
171
+ visited.add(current);
172
+ for (const otherName of this.state.taskGraph.getPhaseNames()) {
173
+ const other = this.state.taskGraph.getPhase(otherName);
174
+ if (!other || other.status !== "queued")
175
+ continue;
176
+ const deps = other.phase.dependsOn ?? [];
177
+ if (deps.includes(current)) {
178
+ this.state.taskGraph.skipPhase(otherName);
179
+ queue.push(otherName);
180
+ }
93
181
  }
94
182
  }
183
+ this.emitProgress();
95
184
  }
96
185
  /**
97
186
  * Assign an agent to a phase.
@@ -103,6 +192,59 @@ export class TeamSupervisor {
103
192
  // -------------------------------------------------------------------
104
193
  // Completion
105
194
  // -------------------------------------------------------------------
195
+ // -------------------------------------------------------------------
196
+ // Progress emission
197
+ // -------------------------------------------------------------------
198
+ /**
199
+ * Build and emit a TeamProgressSnapshot for the TUI dashboard.
200
+ *
201
+ * Reads current phase statuses from the task graph, counts mailbox
202
+ * messages, and calls the optional onProgress callback with the
203
+ * snapshot.
204
+ */
205
+ emitProgress() {
206
+ if (!this.onProgress)
207
+ return;
208
+ try {
209
+ const allPhases = this.state.taskGraph.getAllPhases();
210
+ const phases = allPhases.map((p) => ({
211
+ name: p.phase.name,
212
+ role: p.phase.role,
213
+ status: p.status,
214
+ error: p.error,
215
+ }));
216
+ const completed = phases.filter((p) => p.status === "completed").length;
217
+ const failed = phases.filter((p) => p.status === "failed").length;
218
+ // Find current running phase
219
+ const runningPhase = phases.find((p) => p.status === "running");
220
+ // Best-effort mailbox count
221
+ let mailboxCount = 0;
222
+ try {
223
+ const inbox = readTaskInbox(this.mailboxPaths, "supervisor");
224
+ mailboxCount = inbox.length;
225
+ }
226
+ catch {
227
+ // Ignore mailbox read errors
228
+ }
229
+ const snapshot = {
230
+ title: this.config.goal,
231
+ goal: this.config.goal,
232
+ status: this.state.status,
233
+ totalPhases: phases.length,
234
+ completedPhases: completed,
235
+ failedPhases: failed,
236
+ currentPhase: runningPhase?.name,
237
+ currentRole: runningPhase?.role,
238
+ phases,
239
+ mailboxCount,
240
+ startedAt: this.state.startedAt,
241
+ };
242
+ this.onProgress(snapshot);
243
+ }
244
+ catch {
245
+ // Best effort — dashboard failure must not break the run
246
+ }
247
+ }
106
248
  /** Check if the entire run is complete. */
107
249
  isComplete() {
108
250
  return this.state.taskGraph.isComplete();
@@ -111,13 +253,14 @@ export class TeamSupervisor {
111
253
  finalize() {
112
254
  this.state.status = this.state.taskGraph.overallStatus();
113
255
  this.state.completedAt = Date.now();
256
+ this.emitProgress();
114
257
  }
115
258
  /**
116
259
  * Synthesize the final team result from all completed phases.
117
260
  */
118
261
  synthesizeResult() {
119
262
  const lines = [
120
- "<agent_team_result>",
263
+ "<swarm_team_result>",
121
264
  `<summary>${this.buildSummary()}</summary>`,
122
265
  ];
123
266
  for (const phase of this.state.taskGraph.getAllPhases()) {
@@ -135,7 +278,7 @@ export class TeamSupervisor {
135
278
  }
136
279
  lines.push(`</phase>`);
137
280
  }
138
- lines.push("</agent_team_result>");
281
+ lines.push("</swarm_team_result>");
139
282
  return lines.join("\n");
140
283
  }
141
284
  // -------------------------------------------------------------------
@@ -162,12 +305,40 @@ export class TeamSupervisor {
162
305
  contextBlock = `\n\nContext from previous phases:\n${depResults}`;
163
306
  }
164
307
  }
308
+ // Read messages addressed to this role
309
+ let messagesBlock = "";
310
+ try {
311
+ const roleMessages = readTaskInbox(this.mailboxPaths, role);
312
+ const handoffMessages = roleMessages.filter((m) => m.type === "handoff" || m.type === "task_assignment");
313
+ if (handoffMessages.length > 0) {
314
+ const messageText = handoffMessages
315
+ .map((m) => `Message from ${m.from}:\n${String(m.payload.content ?? m.payload.phase ?? "")}`)
316
+ .join("\n\n");
317
+ messagesBlock = `\n\nMessages for you:\n${messageText}`;
318
+ }
319
+ }
320
+ catch {
321
+ // Ignore mailbox read errors
322
+ }
165
323
  return [
166
324
  `You are the ${role} agent in a team working on: ${goal}`,
167
325
  `Your current phase is: ${name}`,
168
326
  contextBlock,
327
+ messagesBlock,
328
+ ``,
329
+ `## Communication Protocol`,
330
+ ``,
331
+ `You can send messages to other team members by including them in your output using this format:`,
332
+ ``,
333
+ `<mailbox_message to="role_name">`,
334
+ `Your message content here.`,
335
+ `</mailbox_message>`,
336
+ ``,
337
+ `You can address messages to: explorer, planner, coder, reviewer, tester, fixer, or broadcast.`,
338
+ `Messages are delivered after your phase completes.`,
339
+ ``,
340
+ `Your final output (outside of mailbox_message tags) is your phase result.`,
169
341
  `Complete the ${name} phase and write your result.`,
170
- `Output only the result — no conversation.`,
171
342
  ]
172
343
  .filter(Boolean)
173
344
  .join("\n");