@mclawnet/swarm 0.1.3 → 0.1.5

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 (224) hide show
  1. package/README.md +118 -0
  2. package/dist/__tests__/action-parser.test.js +29 -82
  3. package/dist/__tests__/action-parser.test.js.map +1 -1
  4. package/dist/__tests__/coordinator-create-tx.test.d.ts +2 -0
  5. package/dist/__tests__/coordinator-create-tx.test.d.ts.map +1 -0
  6. package/dist/__tests__/coordinator-create-tx.test.js +114 -0
  7. package/dist/__tests__/coordinator-create-tx.test.js.map +1 -0
  8. package/dist/__tests__/coordinator-inbox-migration.test.d.ts +2 -0
  9. package/dist/__tests__/coordinator-inbox-migration.test.d.ts.map +1 -0
  10. package/dist/__tests__/coordinator-inbox-migration.test.js +56 -0
  11. package/dist/__tests__/coordinator-inbox-migration.test.js.map +1 -0
  12. package/dist/__tests__/inbox-integration.test.d.ts +2 -0
  13. package/dist/__tests__/inbox-integration.test.d.ts.map +1 -0
  14. package/dist/__tests__/inbox-integration.test.js +120 -0
  15. package/dist/__tests__/inbox-integration.test.js.map +1 -0
  16. package/dist/__tests__/inbox-persistence-recovery.test.d.ts +2 -0
  17. package/dist/__tests__/inbox-persistence-recovery.test.d.ts.map +1 -0
  18. package/dist/__tests__/inbox-persistence-recovery.test.js +139 -0
  19. package/dist/__tests__/inbox-persistence-recovery.test.js.map +1 -0
  20. package/dist/__tests__/inbox-relay-interceptor.test.d.ts +2 -0
  21. package/dist/__tests__/inbox-relay-interceptor.test.d.ts.map +1 -0
  22. package/dist/__tests__/inbox-relay-interceptor.test.js +156 -0
  23. package/dist/__tests__/inbox-relay-interceptor.test.js.map +1 -0
  24. package/dist/__tests__/inbox-relay.test.d.ts +2 -0
  25. package/dist/__tests__/inbox-relay.test.d.ts.map +1 -0
  26. package/dist/__tests__/inbox-relay.test.js +318 -0
  27. package/dist/__tests__/inbox-relay.test.js.map +1 -0
  28. package/dist/__tests__/inbox-store.test.d.ts +2 -0
  29. package/dist/__tests__/inbox-store.test.d.ts.map +1 -0
  30. package/dist/__tests__/inbox-store.test.js +129 -0
  31. package/dist/__tests__/inbox-store.test.js.map +1 -0
  32. package/dist/__tests__/inbox-watcher.test.d.ts +2 -0
  33. package/dist/__tests__/inbox-watcher.test.d.ts.map +1 -0
  34. package/dist/__tests__/inbox-watcher.test.js +104 -0
  35. package/dist/__tests__/inbox-watcher.test.js.map +1 -0
  36. package/dist/__tests__/persistence-path.test.d.ts +2 -0
  37. package/dist/__tests__/persistence-path.test.d.ts.map +1 -0
  38. package/dist/__tests__/persistence-path.test.js +79 -0
  39. package/dist/__tests__/persistence-path.test.js.map +1 -0
  40. package/dist/__tests__/persistence-robust.test.d.ts +2 -0
  41. package/dist/__tests__/persistence-robust.test.d.ts.map +1 -0
  42. package/dist/__tests__/persistence-robust.test.js +125 -0
  43. package/dist/__tests__/persistence-robust.test.js.map +1 -0
  44. package/dist/__tests__/persistence.test.d.ts +2 -0
  45. package/dist/__tests__/persistence.test.d.ts.map +1 -0
  46. package/dist/__tests__/persistence.test.js +105 -0
  47. package/dist/__tests__/persistence.test.js.map +1 -0
  48. package/dist/__tests__/phase4-5-e2e.test.d.ts +2 -0
  49. package/dist/__tests__/phase4-5-e2e.test.d.ts.map +1 -0
  50. package/dist/__tests__/phase4-5-e2e.test.js +203 -0
  51. package/dist/__tests__/phase4-5-e2e.test.js.map +1 -0
  52. package/dist/__tests__/phase6-7-e2e.test.d.ts +2 -0
  53. package/dist/__tests__/phase6-7-e2e.test.d.ts.map +1 -0
  54. package/dist/__tests__/phase6-7-e2e.test.js +93 -0
  55. package/dist/__tests__/phase6-7-e2e.test.js.map +1 -0
  56. package/dist/__tests__/recovery-cross-project.test.d.ts +2 -0
  57. package/dist/__tests__/recovery-cross-project.test.d.ts.map +1 -0
  58. package/dist/__tests__/recovery-cross-project.test.js +87 -0
  59. package/dist/__tests__/recovery-cross-project.test.js.map +1 -0
  60. package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts +2 -0
  61. package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts.map +1 -0
  62. package/dist/__tests__/recovery-forwards-to-coordinator.test.js +59 -0
  63. package/dist/__tests__/recovery-forwards-to-coordinator.test.js.map +1 -0
  64. package/dist/__tests__/recovery-resume.test.d.ts +2 -0
  65. package/dist/__tests__/recovery-resume.test.d.ts.map +1 -0
  66. package/dist/__tests__/recovery-resume.test.js +132 -0
  67. package/dist/__tests__/recovery-resume.test.js.map +1 -0
  68. package/dist/__tests__/retrospective.test.js +1 -0
  69. package/dist/__tests__/retrospective.test.js.map +1 -1
  70. package/dist/__tests__/role-loader-preamble-all.test.d.ts +2 -0
  71. package/dist/__tests__/role-loader-preamble-all.test.d.ts.map +1 -0
  72. package/dist/__tests__/role-loader-preamble-all.test.js +38 -0
  73. package/dist/__tests__/role-loader-preamble-all.test.js.map +1 -0
  74. package/dist/__tests__/role-loader-tools.test.d.ts +2 -0
  75. package/dist/__tests__/role-loader-tools.test.d.ts.map +1 -0
  76. package/dist/__tests__/role-loader-tools.test.js +39 -0
  77. package/dist/__tests__/role-loader-tools.test.js.map +1 -0
  78. package/dist/__tests__/role-loader.test.js +116 -1
  79. package/dist/__tests__/role-loader.test.js.map +1 -1
  80. package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts +2 -0
  81. package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts.map +1 -0
  82. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js +37 -0
  83. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js.map +1 -0
  84. package/dist/__tests__/role-tools.test.d.ts +2 -0
  85. package/dist/__tests__/role-tools.test.d.ts.map +1 -0
  86. package/dist/__tests__/role-tools.test.js +80 -0
  87. package/dist/__tests__/role-tools.test.js.map +1 -0
  88. package/dist/__tests__/spawn-role-injects-briefings.test.d.ts +2 -0
  89. package/dist/__tests__/spawn-role-injects-briefings.test.d.ts.map +1 -0
  90. package/dist/__tests__/spawn-role-injects-briefings.test.js +182 -0
  91. package/dist/__tests__/spawn-role-injects-briefings.test.js.map +1 -0
  92. package/dist/__tests__/spawn-role-tool-policy.test.d.ts +2 -0
  93. package/dist/__tests__/spawn-role-tool-policy.test.d.ts.map +1 -0
  94. package/dist/__tests__/spawn-role-tool-policy.test.js +96 -0
  95. package/dist/__tests__/spawn-role-tool-policy.test.js.map +1 -0
  96. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts +2 -0
  97. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts.map +1 -0
  98. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js +61 -0
  99. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js.map +1 -0
  100. package/dist/__tests__/swarm-coordinator-inbox.test.d.ts +2 -0
  101. package/dist/__tests__/swarm-coordinator-inbox.test.d.ts.map +1 -0
  102. package/dist/__tests__/swarm-coordinator-inbox.test.js +182 -0
  103. package/dist/__tests__/swarm-coordinator-inbox.test.js.map +1 -0
  104. package/dist/__tests__/swarm-coordinator-init.test.js +36 -8
  105. package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -1
  106. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts +2 -0
  107. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts.map +1 -0
  108. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js +113 -0
  109. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js.map +1 -0
  110. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts +2 -0
  111. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts.map +1 -0
  112. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js +465 -0
  113. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js.map +1 -0
  114. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts +2 -0
  115. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts.map +1 -0
  116. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js +284 -0
  117. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js.map +1 -0
  118. package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts +2 -0
  119. package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts.map +1 -0
  120. package/dist/__tests__/swarm-coordinator-plan-review.test.js +294 -0
  121. package/dist/__tests__/swarm-coordinator-plan-review.test.js.map +1 -0
  122. package/dist/__tests__/swarm-coordinator-resume.test.d.ts +2 -0
  123. package/dist/__tests__/swarm-coordinator-resume.test.d.ts.map +1 -0
  124. package/dist/__tests__/swarm-coordinator-resume.test.js +93 -0
  125. package/dist/__tests__/swarm-coordinator-resume.test.js.map +1 -0
  126. package/dist/__tests__/swarm-coordinator-roleId.test.js +2 -2
  127. package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -1
  128. package/dist/__tests__/swarm-destroy-detach.test.d.ts +2 -0
  129. package/dist/__tests__/swarm-destroy-detach.test.d.ts.map +1 -0
  130. package/dist/__tests__/swarm-destroy-detach.test.js +135 -0
  131. package/dist/__tests__/swarm-destroy-detach.test.js.map +1 -0
  132. package/dist/action-parser.d.ts +0 -9
  133. package/dist/action-parser.d.ts.map +1 -1
  134. package/dist/action-parser.js +0 -114
  135. package/dist/action-parser.js.map +1 -1
  136. package/dist/inbox-relay.d.ts +50 -0
  137. package/dist/inbox-relay.d.ts.map +1 -0
  138. package/dist/inbox-relay.js +168 -0
  139. package/dist/inbox-relay.js.map +1 -0
  140. package/dist/inbox-store.d.ts +25 -0
  141. package/dist/inbox-store.d.ts.map +1 -0
  142. package/dist/inbox-store.js +95 -0
  143. package/dist/inbox-store.js.map +1 -0
  144. package/dist/inbox-watcher.d.ts +13 -0
  145. package/dist/inbox-watcher.d.ts.map +1 -0
  146. package/dist/inbox-watcher.js +89 -0
  147. package/dist/inbox-watcher.js.map +1 -0
  148. package/dist/index.d.ts +4 -3
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +3 -2
  151. package/dist/index.js.map +1 -1
  152. package/dist/persistence.d.ts +19 -5
  153. package/dist/persistence.d.ts.map +1 -1
  154. package/dist/persistence.js +97 -22
  155. package/dist/persistence.js.map +1 -1
  156. package/dist/recovery.d.ts +12 -0
  157. package/dist/recovery.d.ts.map +1 -1
  158. package/dist/recovery.js +14 -19
  159. package/dist/recovery.js.map +1 -1
  160. package/dist/roles/role-loader.d.ts +28 -1
  161. package/dist/roles/role-loader.d.ts.map +1 -1
  162. package/dist/roles/role-loader.js +73 -1
  163. package/dist/roles/role-loader.js.map +1 -1
  164. package/dist/roles/role-tools.d.ts +16 -0
  165. package/dist/roles/role-tools.d.ts.map +1 -0
  166. package/dist/roles/role-tools.js +25 -0
  167. package/dist/roles/role-tools.js.map +1 -0
  168. package/dist/roles/types.d.ts +4 -0
  169. package/dist/roles/types.d.ts.map +1 -1
  170. package/dist/swarm-coordinator.d.ts +176 -12
  171. package/dist/swarm-coordinator.d.ts.map +1 -1
  172. package/dist/swarm-coordinator.js +863 -370
  173. package/dist/swarm-coordinator.js.map +1 -1
  174. package/dist/types.d.ts +26 -0
  175. package/dist/types.d.ts.map +1 -1
  176. package/package.json +9 -6
  177. package/roles/analyst-livermore.md +6 -30
  178. package/roles/designer-rams.md +2 -30
  179. package/roles/dev-torvalds.md +8 -44
  180. package/roles/developer.md +5 -21
  181. package/roles/director-jia.md +20 -49
  182. package/roles/editor-boyong.md +8 -40
  183. package/roles/macro-dalio.md +6 -30
  184. package/roles/planner-maoni.md +24 -53
  185. package/roles/pm-jobs.md +20 -71
  186. package/roles/preset-analyst-simons.md +2 -18
  187. package/roles/preset-architect-knuth.md +2 -18
  188. package/roles/preset-designer-norman.md +2 -18
  189. package/roles/preset-designer.md +2 -18
  190. package/roles/preset-dev-carmack.md +2 -18
  191. package/roles/preset-dev-gosling.md +2 -18
  192. package/roles/preset-developer.md +7 -23
  193. package/roles/preset-manager-grove.md +2 -18
  194. package/roles/preset-manager-musk.md +2 -18
  195. package/roles/preset-pm.md +7 -34
  196. package/roles/preset-researcher-feynman.md +2 -18
  197. package/roles/preset-reviewer.md +5 -21
  198. package/roles/preset-strategist-buffett.md +2 -18
  199. package/roles/preset-strategist-munger.md +2 -18
  200. package/roles/preset-strategist-sunzi.md +2 -18
  201. package/roles/preset-tester-beck.md +2 -18
  202. package/roles/preset-tester.md +5 -21
  203. package/roles/preset-writer-orwell.md +2 -18
  204. package/roles/preset-writer.md +2 -18
  205. package/roles/quant-simons.md +5 -32
  206. package/roles/queen.md +25 -41
  207. package/roles/reviewer-martin.md +11 -37
  208. package/roles/reviewer.md +20 -21
  209. package/roles/rhythm-tangsan.md +5 -29
  210. package/roles/risk-taleb.md +4 -32
  211. package/roles/script-shitiesheng.md +8 -31
  212. package/roles/storyboard-xuke.md +9 -29
  213. package/roles/strategist-soros.md +16 -73
  214. package/roles/tester-beck.md +4 -40
  215. package/roles/tester.md +5 -21
  216. package/roles/trader-jones.md +4 -32
  217. package/roles/vfx-guchangwei.md +8 -27
  218. package/roles/writer-zhouzi.md +7 -39
  219. package/templates/dev-team-pro.md +4 -1
  220. package/templates/dev-team.md +3 -1
  221. package/templates/minimal.md +2 -1
  222. package/templates/trading-team.md +6 -1
  223. package/templates/video-team.md +4 -1
  224. package/templates/writing-team.md +4 -1
@@ -1,52 +1,89 @@
1
- import { writeFileSync, readFileSync, existsSync, mkdirSync, appendFileSync, rmSync, readdirSync, } from "node:fs";
1
+ import { writeFileSync, readFileSync, existsSync, mkdirSync, appendFileSync, rmSync, readdirSync, renameSync, } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
- function getSwarmsDir() {
5
- return join(homedir(), ".clawnet", "swarms");
4
+ import { randomBytes } from "node:crypto";
5
+ import { projectRoot } from "@mclawnet/task";
6
+ import { createLogger } from "@mclawnet/logger";
7
+ const log = createLogger({ module: "swarm-persistence" });
8
+ function getHome() {
9
+ return process.env.CLAWNET_HOME ?? homedir();
6
10
  }
7
- function getSwarmDir(swarmId) {
8
- return join(getSwarmsDir(), swarmId);
11
+ function getSwarmsDir(workDir) {
12
+ return join(projectRoot(workDir, getHome()), "swarms");
13
+ }
14
+ function getSwarmDir(workDir, swarmId) {
15
+ return join(getSwarmsDir(workDir), swarmId);
9
16
  }
10
17
  export function saveSwarmSnapshot(swarm) {
11
- const dir = getSwarmDir(swarm.id);
18
+ if (!swarm.workDir) {
19
+ throw new Error("saveSwarmSnapshot requires swarm.workDir");
20
+ }
21
+ const dir = getSwarmDir(swarm.workDir, swarm.id);
12
22
  mkdirSync(dir, { recursive: true });
13
23
  const snapshot = {
14
24
  id: swarm.id,
15
25
  hubSessionId: swarm.hubSessionId,
16
26
  workDir: swarm.workDir,
27
+ teamName: swarm.teamName ?? "default",
17
28
  roles: Array.from(swarm.roles.values()).map((r) => ({
18
29
  instanceId: r.instanceId,
19
30
  roleName: r.roleName,
20
31
  status: r.status,
21
32
  currentTask: r.currentTask,
33
+ claudeSessionId: r.claudeSessionId,
34
+ type: r.definition?.type,
22
35
  })),
23
36
  plan: swarm.plan,
24
37
  nextInstanceSeq: Object.fromEntries(swarm.nextInstanceSeq),
25
38
  savedAt: Date.now(),
26
39
  status: swarm.status,
27
40
  planStatus: swarm.planStatus,
41
+ partialRecover: swarm.partialRecover,
28
42
  };
29
- writeFileSync(join(dir, "recovery.json"), JSON.stringify(snapshot, null, 2));
43
+ // Atomic write: write to a unique tmp file in the same dir, then rename
44
+ // over the target. rename(2) within a filesystem is atomic — readers either
45
+ // see the previous valid snapshot or the new one, never a half-written file.
46
+ const finalPath = join(dir, "recovery.json");
47
+ const tmpPath = join(dir, `recovery.${randomBytes(6).toString("hex")}.tmp`);
48
+ writeFileSync(tmpPath, JSON.stringify(snapshot, null, 2));
49
+ try {
50
+ renameSync(tmpPath, finalPath);
51
+ }
52
+ catch (err) {
53
+ // best-effort cleanup of the tmp file so we don't leak garbage on disk
54
+ try {
55
+ rmSync(tmpPath, { force: true });
56
+ }
57
+ catch {
58
+ // ignore
59
+ }
60
+ throw err;
61
+ }
30
62
  }
31
- export function loadSwarmSnapshot(swarmId) {
32
- const filePath = join(getSwarmDir(swarmId), "recovery.json");
63
+ export function loadSwarmSnapshot(workDir, swarmId) {
64
+ const filePath = join(getSwarmDir(workDir, swarmId), "recovery.json");
33
65
  if (!existsSync(filePath))
34
66
  return null;
35
67
  try {
36
- return JSON.parse(readFileSync(filePath, "utf-8"));
68
+ const raw = JSON.parse(readFileSync(filePath, "utf-8"));
69
+ return {
70
+ ...raw,
71
+ teamName: raw.teamName ?? "default",
72
+ };
37
73
  }
38
- catch {
74
+ catch (err) {
75
+ log.warn({ err: err instanceof Error ? err.message : String(err), filePath, swarmId, workDir }, "loadSwarmSnapshot: failed to parse recovery.json — treating as missing");
39
76
  return null;
40
77
  }
41
78
  }
42
- export function deleteSwarmSnapshot(swarmId) {
43
- const recoveryPath = join(getSwarmDir(swarmId), "recovery.json");
79
+ export function deleteSwarmSnapshot(workDir, swarmId) {
80
+ const recoveryPath = join(getSwarmDir(workDir, swarmId), "recovery.json");
44
81
  if (existsSync(recoveryPath)) {
45
82
  rmSync(recoveryPath);
46
83
  }
47
84
  }
48
- export function readMessageLog(swarmId) {
49
- const filePath = join(getSwarmDir(swarmId), "messages.jsonl");
85
+ export function readMessageLog(workDir, swarmId) {
86
+ const filePath = join(getSwarmDir(workDir, swarmId), "messages.jsonl");
50
87
  if (!existsSync(filePath))
51
88
  return [];
52
89
  try {
@@ -68,17 +105,55 @@ export function readMessageLog(swarmId) {
68
105
  return [];
69
106
  }
70
107
  }
71
- export function appendMessageLog(swarmId, entry) {
72
- const dir = getSwarmDir(swarmId);
108
+ export function appendMessageLog(workDir, swarmId, entry) {
109
+ const dir = getSwarmDir(workDir, swarmId);
73
110
  mkdirSync(dir, { recursive: true });
74
111
  appendFileSync(join(dir, "messages.jsonl"), JSON.stringify(entry) + "\n");
75
112
  }
113
+ /**
114
+ * List recoverable swarms across all per-project roots. The authoritative
115
+ * `workDir` is read from each snapshot's `workDir` field (snapshots written
116
+ * since 0.1.6 always include it). Falling back on the encoded directory
117
+ * name is lossy for paths whose segments contain `-`, so we deliberately
118
+ * skip entries whose snapshot can't be parsed or doesn't carry `workDir`.
119
+ */
76
120
  export function listRecoverableSwarmIds() {
77
- const dir = getSwarmsDir();
78
- if (!existsSync(dir))
121
+ const projectsDir = join(getHome(), ".clawnet", "projects");
122
+ if (!existsSync(projectsDir))
79
123
  return [];
80
- return readdirSync(dir, { withFileTypes: true })
81
- .filter((e) => e.isDirectory() && existsSync(join(dir, e.name, "recovery.json")))
82
- .map((e) => e.name);
124
+ const result = [];
125
+ for (const projEntry of readdirSync(projectsDir, { withFileTypes: true })) {
126
+ if (!projEntry.isDirectory())
127
+ continue;
128
+ const swarmsDir = join(projectsDir, projEntry.name, "swarms");
129
+ if (!existsSync(swarmsDir))
130
+ continue;
131
+ for (const swarmEntry of readdirSync(swarmsDir, { withFileTypes: true })) {
132
+ if (!swarmEntry.isDirectory())
133
+ continue;
134
+ const swarmDir = join(swarmsDir, swarmEntry.name);
135
+ const recoveryPath = join(swarmDir, "recovery.json");
136
+ if (!existsSync(recoveryPath)) {
137
+ // Orphan: a swarm directory exists but was never persisted (likely
138
+ // an aborted SwarmCoordinator.create()). Surface it for the operator
139
+ // — never auto-delete (could destroy in-progress user state).
140
+ log.warn({ swarmDir, swarmId: swarmEntry.name, projectDir: projEntry.name }, "listRecoverableSwarmIds: swarm directory has no recovery.json — skipping (manual cleanup may be needed)");
141
+ continue;
142
+ }
143
+ try {
144
+ const raw = JSON.parse(readFileSync(recoveryPath, "utf-8"));
145
+ if (typeof raw.workDir === "string" && raw.workDir.length > 0) {
146
+ result.push({ workDir: raw.workDir, swarmId: swarmEntry.name });
147
+ }
148
+ else {
149
+ log.warn({ recoveryPath, swarmId: swarmEntry.name }, "listRecoverableSwarmIds: snapshot missing workDir field — skipping");
150
+ }
151
+ }
152
+ catch (err) {
153
+ log.warn({ err: err instanceof Error ? err.message : String(err), recoveryPath, swarmId: swarmEntry.name }, "listRecoverableSwarmIds: failed to parse recovery.json — skipping");
154
+ }
155
+ }
156
+ }
157
+ return result;
83
158
  }
84
159
  //# sourceMappingURL=persistence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,17 @@
1
1
  import type { SwarmCoordinator } from "./swarm-coordinator.js";
2
2
  import { type SwarmSnapshot } from "./persistence.js";
3
3
  export declare function listRecoverableSwarms(): SwarmSnapshot[];
4
+ /**
5
+ * Backwards-compatible recovery helper.
6
+ *
7
+ * Delegates to {@link SwarmCoordinator.recover}, which:
8
+ * - respawns each role with its persisted instanceId,
9
+ * - passes `claudeSessionId` through as `--resume` so per-role conversations
10
+ * continue,
11
+ * - drains each role's offline inbox via `inboxRelay.deliver`,
12
+ * - leaves the recovered swarm in `paused` state.
13
+ *
14
+ * Older callers still pass a full snapshot — we only need its `id`.
15
+ */
4
16
  export declare function recoverSwarm(coordinator: SwarmCoordinator, snapshot: SwarmSnapshot): Promise<void>;
5
17
  //# sourceMappingURL=recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAI1B,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAUvD;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAI1B,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAUvD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAEf"}
package/dist/recovery.js CHANGED
@@ -3,7 +3,7 @@ const RECOVERY_TTL_MS = 24 * 60 * 60 * 1000; // 24h
3
3
  export function listRecoverableSwarms() {
4
4
  const now = Date.now();
5
5
  return listRecoverableSwarmIds()
6
- .map((id) => loadSwarmSnapshot(id))
6
+ .map(({ workDir, swarmId }) => loadSwarmSnapshot(workDir, swarmId))
7
7
  .filter((s) => {
8
8
  if (!s)
9
9
  return false;
@@ -13,24 +13,19 @@ export function listRecoverableSwarms() {
13
13
  return status === "running" || status === "paused";
14
14
  });
15
15
  }
16
+ /**
17
+ * Backwards-compatible recovery helper.
18
+ *
19
+ * Delegates to {@link SwarmCoordinator.recover}, which:
20
+ * - respawns each role with its persisted instanceId,
21
+ * - passes `claudeSessionId` through as `--resume` so per-role conversations
22
+ * continue,
23
+ * - drains each role's offline inbox via `inboxRelay.deliver`,
24
+ * - leaves the recovered swarm in `paused` state.
25
+ *
26
+ * Older callers still pass a full snapshot — we only need its `id`.
27
+ */
16
28
  export async function recoverSwarm(coordinator, snapshot) {
17
- await coordinator.create(snapshot.hubSessionId, {
18
- workDir: snapshot.workDir,
19
- roles: snapshot.roles.map((r) => ({ roleName: r.roleName })),
20
- });
21
- const swarm = coordinator.getSwarm(snapshot.hubSessionId);
22
- if (swarm) {
23
- if (snapshot.plan) {
24
- swarm.plan = snapshot.plan;
25
- }
26
- // Recovered swarms start paused — user must explicitly resume
27
- swarm.status = "paused";
28
- swarm.isPaused = true;
29
- // Clear the timer that create() started — paused swarms don't need checks
30
- if (swarm.checkTimer) {
31
- clearTimeout(swarm.checkTimer);
32
- swarm.checkTimer = undefined;
33
- }
34
- }
29
+ await coordinator.recover(snapshot.id);
35
30
  }
36
31
  //# sourceMappingURL=recovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM;AAEnD,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,uBAAuB,EAAE;SAC7B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE;QAChC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,eAAe;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,mCAAmC;QACzE,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAA6B,EAC7B,QAAuB;IAEvB,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,8DAA8D;QAC9D,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,0EAA0E;QAC1E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM;AAEnD,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,uBAAuB,EAAE;SAC7B,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAClE,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE;QAChC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,eAAe;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,mCAAmC;QACzE,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAA6B,EAC7B,QAAuB;IAEvB,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -18,10 +18,37 @@ export declare function initRoles(): string;
18
18
  export declare function loadRole(roleName: string): RoleDefinition;
19
19
  /** List all available role names (from user dir + presets). */
20
20
  export declare function listRoles(): string[];
21
+ /**
22
+ * Centrally-injected inbox protocol preamble.
23
+ * Appended to every role prompt by buildRolePrompt so all agents
24
+ * share a single authoritative communication protocol description.
25
+ * Replaces the legacy in-band ```swarm``` action blocks previously
26
+ * duplicated across each role md.
27
+ */
28
+ export declare const INBOX_PROTOCOL_PREAMBLE = "\n\n### Inbox \u901A\u4FE1\u534F\u8BAE\n\n\u4F60\u4E0E\u8702\u7FA4\u5176\u4ED6\u6210\u5458\u3001user\u3001\u7CFB\u7EDF\u7684\u5168\u90E8\u901A\u4FE1\u90FD\u901A\u8FC7 **inbox \u6D88\u606F**\u8FDB\u884C\u3002\u6BCF\u5F53\u6709\u65B0\u6D88\u606F\u5230\u8FBE\uFF0C\u7CFB\u7EDF\u4F1A\u4EE5\u4E0B\u9762\u7684\u4FE1\u5C01\u6CE8\u5165\u5230\u4F60\u7684\u4E0B\u4E00\u8F6E\u8F93\u5165\uFF1A\n\n```xml\n<info_for_agent>\n <message id=\"...\" type=\"...\" from=\"...\" taskId=\"...\">\n <data>JSON-encoded payload</data>\n </message>\n ...\n</info_for_agent>\n```\n\n#### \u4F60\u4F1A\u6536\u5230\u7684\u6D88\u606F\u7C7B\u578B\n\n- **`task_assigned`** \u2014 \u4F60\u88AB\u6307\u6D3E\u4E86\u4E00\u4E2A\u65B0\u4EFB\u52A1\u3002`data` \u542B `{ taskId, subject, description }`\u3002**\u6536\u5230\u540E\u7B2C\u4E00\u6B65\u5148\u7528 `task_set_status` \u628A\u72B6\u6001\u6539\u4E3A `in_progress`**\uFF08\u8BA9 queen \u77E5\u9053\u4F60\u5DF2\u63A5\u6D3B\uFF09\uFF0C\u518D\u5F00\u59CB\u6267\u884C\uFF1B**\u5B8C\u6210\u7684\u6700\u540E\u4E00\u6B65\u5FC5\u987B\u662F `task_set_status({ status: \"completed\" })` + `task_add_comment({ body: \u6458\u8981 })`**\u2014\u2014\u5149\u5199\u5B8C\u4EE3\u7801/\u6587\u6863\u4E0D\u7B97\u4EA4\u4ED8\uFF0Cqueen \u53EA\u80FD\u901A\u8FC7\u72B6\u6001\u53D8\u5316\u8BC6\u522B\u4F60\u5B8C\u5DE5\uFF0C\u5426\u5219\u4F1A\u53CD\u590D nudge \u4F60\u3002\n- **`task_status_changed`** \u2014 \u4F60\u4E0B\u5C5E/\u76F8\u5173\u4EFB\u52A1\u7684\u72B6\u6001\u53D8\u5316\uFF08\u901A\u5E38\u53D1\u7ED9 queen\uFF09\u3002`data` \u542B `{ taskId, status, owner, subject }`\u3002\n- **`task_owner_set`** \u2014 \u4EFB\u52A1\u88AB\uFF08\u91CD\u65B0\uFF09\u5206\u914D\u7ED9\u4F60\u3002`data` \u542B `{ taskId, owner, subject }`\u3002\u7B49\u540C\u4E8E `task_assigned` \u7684\u8F6C\u4EA4\u8BED\u4E49\uFF08\u540C\u6837\u9700\u8981\u5148\u628A\u72B6\u6001\u6539\u4E3A `in_progress` \u518D\u5F00\u5DE5\uFF09\u3002\n- **`task_comment`** \u2014 \u4EFB\u52A1\u4E0A\u6709\u4EBA\u53D1\u8BC4\u8BBA\u3002`data` \u542B `{ taskId, commentId, author, body, type }`\u3002\n- **`unblock-*`** \u2014 \u4E0A\u6E38\u4EFB\u52A1\u5B8C\u6210\uFF0C\u4E0B\u6E38\u88AB\u89E3\u9501\u3002`data` \u63CF\u8FF0\u88AB\u89E3\u9501\u7684\u4EFB\u52A1\u3002\n- \u5176\u5B83\u7CFB\u7EDF\u6D88\u606F\uFF08\u5982 user \u7684\u76F4\u63A5\u8F93\u5165\uFF09\u4E5F\u4F1A\u4EE5 `<info_for_agent>` \u4FE1\u5C01\u5230\u8FBE\u3002\n\n#### \u4F60\u5E94\u8BE5\u4F7F\u7528\u7684 MCP \u5DE5\u5177\uFF08\u66FF\u4EE3\u65E7\u7684 ```swarm``` \u5757\uFF09\n\n| \u65E7 action \u5757 | \u65B0 MCP \u5DE5\u5177 |\n|---|---|\n| `{\"action\":\"send\", to, type, data, taskId}` | `mcp__clawnet__message_send({ workDir, swarmId, from, to, type, data, taskId? })` |\n| `{\"action\":\"report\", status, taskId, output}` | `mcp__clawnet__task_set_status({ workDir, taskId, status })` + \u53EF\u9009 `mcp__clawnet__task_add_comment({ workDir, taskId, author, body })` |\n| \u6D3E\u53D1\u65B0\u4EFB\u52A1 | `mcp__clawnet__task_create({ workDir, teamName, subject, description?, swarmId, owner, blockedBy?, from })` \u2014 \u4F1A\u81EA\u52A8\u7ED9 owner \u5199 `task_assigned`\u3002**\u4EC5 queen \u53EF\u8C03\u7528**\uFF08`from` \u5FC5\u987B\u4EE5 `queen-` \u5F00\u5934\uFF09\u3002 |\n| \u8F6C\u4EA4\u4EFB\u52A1 | `mcp__clawnet__task_set_owner({ workDir, taskId, owner, from })` \u2014 \u4F1A\u7ED9\u65B0 owner \u5199 `task_owner_set`\u3002**\u4EC5 queen \u53EF\u8C03\u7528**\u3002 |\n| \u8BC4\u8BBA | `mcp__clawnet__task_add_comment({ workDir, taskId, author, body, type? })` \u2014 \u4F1A\u7ED9 owner+queen \u5199 `task_comment` |\n| \u67E5\u8BE2 | `mcp__clawnet__task_get` / `task_list` / `task_briefing` |\n| \u63D0\u4EA4\u8BA1\u5212\u5BA1\u67E5\u7ED3\u679C | `mcp__clawnet__plan_review_submit({ workDir, swarmId, from, verdict: \"approved\" | \"rejected\", body? })` \u2014 **\u4EC5 reviewer \u53EF\u8C03\u7528**\uFF08`from` \u5FC5\u987B\u4EE5 `reviewer` \u5F00\u5934\uFF09\u3002\u6536\u5230 `plan_review` \u6D88\u606F\u540E\u7528\u6B64\u5DE5\u5177\u56DE\u590D\uFF0C**\u4E0D\u8981**\u518D\u7528 `report` action\u3002 |\n\n#### \u5173\u952E\u89C4\u5219\n\n- **\u7981\u6B62\u8F93\u51FA ```swarm``` \u4EE3\u7801\u5757\u3002** \u65E7\u7684 in-band action \u534F\u8BAE\u5DF2\u88AB\u5E9F\u5F03\uFF1B\u4F7F\u7528\u4E0A\u9762\u7684 MCP \u5DE5\u5177\u8C03\u7528\u3002\n- **Queen \u7684 plan JSON \u8F93\u51FA\u4ECD\u7136\u6709\u6548**\uFF1A\u5F53\u4F60\u9700\u8981\u53D1\u5E03\u6267\u884C\u8BA1\u5212\u65F6\uFF0C\u8F93\u51FA ```json { \"plan\": {...} } ``` \u5757\uFF1B\u8FD9\u662F\u552F\u4E00\u4FDD\u7559\u7684 in-band \u534F\u8BAE\u3002\n- **MCP \u5DE5\u5177\u7684 `workDir` / `swarmId` / `from` \u53C2\u6570**\uFF1A\u89C1\u672C\u63D0\u793A\u5F00\u5934\u7684\u300C\u5F53\u524D swarm \u6807\u8BC6\u300D\u6BB5\uFF0C\u7167\u6284 `swarmId` \u4E0E `workDir` \u5373\u53EF\uFF0C**\u4E0D\u8981\u81EA\u884C\u7F16\u9020**\uFF1B`from` \u7528\u4F60\u81EA\u5DF1\u7684 instanceId\u3002\n- **\u5E42\u7B49\u6027**\uFF1A\u6240\u6709 task_* \u5DE5\u5177\u90FD\u662F\u5E42\u7B49\u7684\uFF08\u57FA\u4E8E\u7A33\u5B9A id\uFF09\uFF0C\u91CD\u8BD5\u5B89\u5168\u3002\n- **\u4E0D\u8981\u5728 `data` / `body` \u5B57\u6BB5\u91CC\u5D4C\u5957\u4E09\u4E2A\u53CD\u5F15\u53F7**\u2014\u2014\u4F1A\u7834\u574F\u5916\u5C42 markdown \u6E32\u67D3\u3002\n";
29
+ /**
30
+ * Optional swarm-identity context. When supplied, buildRolePrompt emits a
31
+ * verbatim header at the very top of the system prompt so the LLM can copy
32
+ * `swarmId` / `workDir` directly into MCP tool calls.
33
+ *
34
+ * Background: prior to this, the inbox-protocol preamble told agents
35
+ * `"swarmId 在你的 prompt 头部 / brief 中已给出"`, but no header was actually
36
+ * rendered — leaving the LLM to invent strings like `"swarm-default"`, which
37
+ * caused a parallel-but-orphan swarm directory to be created on disk and
38
+ * `task_assigned` envelopes to land in inboxes nobody was watching.
39
+ */
40
+ export interface SwarmContext {
41
+ swarmId: string;
42
+ workDir?: string;
43
+ }
21
44
  /**
22
45
  * Build the full system prompt for a role instance.
23
46
  * Substitutes {instanceId} and {roleList} placeholders,
24
47
  * then appends delegation relationships and protocol steps.
48
+ *
49
+ * When `swarmContext` is provided, a `### 当前 swarm 标识` header is prepended
50
+ * to the prompt so the agent always sees the canonical swarmId / workDir
51
+ * before any other content.
25
52
  */
26
- export declare function buildRolePrompt(definition: RoleDefinition, instanceId: string, roleList: string): string;
53
+ export declare function buildRolePrompt(definition: RoleDefinition, instanceId: string, roleList: string, swarmContext?: SwarmContext): string;
27
54
  //# sourceMappingURL=role-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-loader.d.ts","sourceRoot":"","sources":["../../src/roles/role-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,YAAY,CAAC;AAKjF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAuJ7D;AAgBD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAmBlC;AAED,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAYzD;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAoBpC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CA8BR"}
1
+ {"version":3,"file":"role-loader.d.ts","sourceRoot":"","sources":["../../src/roles/role-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,YAAY,CAAC;AAKjF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAyJ7D;AAgBD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAmBlC;AAED,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAYzD;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAoBpC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,uoKA2CnC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CA8CR"}
@@ -149,6 +149,8 @@ export function parseRoleFile(content) {
149
149
  type: meta.type ?? "worker",
150
150
  description: meta.description ?? "",
151
151
  capabilities: Array.isArray(meta.capabilities) ? meta.capabilities : [],
152
+ allowedTools: Array.isArray(meta.allowedTools) ? meta.allowedTools : undefined,
153
+ disallowedTools: Array.isArray(meta.disallowedTools) ? meta.disallowedTools : undefined,
152
154
  color: meta.color ?? "#888888",
153
155
  promptBody: body,
154
156
  delegation: hasDelegation ? delegation : undefined,
@@ -219,15 +221,71 @@ export function listRoles() {
219
221
  }
220
222
  return [...roles].sort();
221
223
  }
224
+ /**
225
+ * Centrally-injected inbox protocol preamble.
226
+ * Appended to every role prompt by buildRolePrompt so all agents
227
+ * share a single authoritative communication protocol description.
228
+ * Replaces the legacy in-band ```swarm``` action blocks previously
229
+ * duplicated across each role md.
230
+ */
231
+ export const INBOX_PROTOCOL_PREAMBLE = `
232
+
233
+ ### Inbox 通信协议
234
+
235
+ 你与蜂群其他成员、user、系统的全部通信都通过 **inbox 消息**进行。每当有新消息到达,系统会以下面的信封注入到你的下一轮输入:
236
+
237
+ \`\`\`xml
238
+ <info_for_agent>
239
+ <message id="..." type="..." from="..." taskId="...">
240
+ <data>JSON-encoded payload</data>
241
+ </message>
242
+ ...
243
+ </info_for_agent>
244
+ \`\`\`
245
+
246
+ #### 你会收到的消息类型
247
+
248
+ - **\`task_assigned\`** — 你被指派了一个新任务。\`data\` 含 \`{ taskId, subject, description }\`。**收到后第一步先用 \`task_set_status\` 把状态改为 \`in_progress\`**(让 queen 知道你已接活),再开始执行;**完成的最后一步必须是 \`task_set_status({ status: "completed" })\` + \`task_add_comment({ body: 摘要 })\`**——光写完代码/文档不算交付,queen 只能通过状态变化识别你完工,否则会反复 nudge 你。
249
+ - **\`task_status_changed\`** — 你下属/相关任务的状态变化(通常发给 queen)。\`data\` 含 \`{ taskId, status, owner, subject }\`。
250
+ - **\`task_owner_set\`** — 任务被(重新)分配给你。\`data\` 含 \`{ taskId, owner, subject }\`。等同于 \`task_assigned\` 的转交语义(同样需要先把状态改为 \`in_progress\` 再开工)。
251
+ - **\`task_comment\`** — 任务上有人发评论。\`data\` 含 \`{ taskId, commentId, author, body, type }\`。
252
+ - **\`unblock-*\`** — 上游任务完成,下游被解锁。\`data\` 描述被解锁的任务。
253
+ - 其它系统消息(如 user 的直接输入)也会以 \`<info_for_agent>\` 信封到达。
254
+
255
+ #### 你应该使用的 MCP 工具(替代旧的 \`\`\`swarm\`\`\` 块)
256
+
257
+ | 旧 action 块 | 新 MCP 工具 |
258
+ |---|---|
259
+ | \`{"action":"send", to, type, data, taskId}\` | \`mcp__clawnet__message_send({ workDir, swarmId, from, to, type, data, taskId? })\` |
260
+ | \`{"action":"report", status, taskId, output}\` | \`mcp__clawnet__task_set_status({ workDir, taskId, status })\` + 可选 \`mcp__clawnet__task_add_comment({ workDir, taskId, author, body })\` |
261
+ | 派发新任务 | \`mcp__clawnet__task_create({ workDir, teamName, subject, description?, swarmId, owner, blockedBy?, from })\` — 会自动给 owner 写 \`task_assigned\`。**仅 queen 可调用**(\`from\` 必须以 \`queen-\` 开头)。 |
262
+ | 转交任务 | \`mcp__clawnet__task_set_owner({ workDir, taskId, owner, from })\` — 会给新 owner 写 \`task_owner_set\`。**仅 queen 可调用**。 |
263
+ | 评论 | \`mcp__clawnet__task_add_comment({ workDir, taskId, author, body, type? })\` — 会给 owner+queen 写 \`task_comment\` |
264
+ | 查询 | \`mcp__clawnet__task_get\` / \`task_list\` / \`task_briefing\` |
265
+ | 提交计划审查结果 | \`mcp__clawnet__plan_review_submit({ workDir, swarmId, from, verdict: "approved" | "rejected", body? })\` — **仅 reviewer 可调用**(\`from\` 必须以 \`reviewer\` 开头)。收到 \`plan_review\` 消息后用此工具回复,**不要**再用 \`report\` action。 |
266
+
267
+ #### 关键规则
268
+
269
+ - **禁止输出 \`\`\`swarm\`\`\` 代码块。** 旧的 in-band action 协议已被废弃;使用上面的 MCP 工具调用。
270
+ - **Queen 的 plan JSON 输出仍然有效**:当你需要发布执行计划时,输出 \`\`\`json { "plan": {...} } \`\`\` 块;这是唯一保留的 in-band 协议。
271
+ - **MCP 工具的 \`workDir\` / \`swarmId\` / \`from\` 参数**:见本提示开头的「当前 swarm 标识」段,照抄 \`swarmId\` 与 \`workDir\` 即可,**不要自行编造**;\`from\` 用你自己的 instanceId。
272
+ - **幂等性**:所有 task_* 工具都是幂等的(基于稳定 id),重试安全。
273
+ - **不要在 \`data\` / \`body\` 字段里嵌套三个反引号**——会破坏外层 markdown 渲染。
274
+ `;
222
275
  /**
223
276
  * Build the full system prompt for a role instance.
224
277
  * Substitutes {instanceId} and {roleList} placeholders,
225
278
  * then appends delegation relationships and protocol steps.
279
+ *
280
+ * When `swarmContext` is provided, a `### 当前 swarm 标识` header is prepended
281
+ * to the prompt so the agent always sees the canonical swarmId / workDir
282
+ * before any other content.
226
283
  */
227
- export function buildRolePrompt(definition, instanceId, roleList) {
284
+ export function buildRolePrompt(definition, instanceId, roleList, swarmContext) {
228
285
  let prompt = definition.promptBody
229
286
  .replace(/\{instanceId\}/g, instanceId)
230
287
  .replace(/\{roleList\}/g, roleList);
288
+ prompt += INBOX_PROTOCOL_PREAMBLE;
231
289
  // Inject delegation relationships
232
290
  if (definition.delegation) {
233
291
  const d = definition.delegation;
@@ -251,6 +309,20 @@ export function buildRolePrompt(definition, instanceId, roleList) {
251
309
  prompt += `${i + 1}. ${step}\n`;
252
310
  });
253
311
  }
312
+ // Prepend swarm identity header LAST so it sits at offset 0 of the final
313
+ // string — the LLM encounters it before reading anything else.
314
+ if (swarmContext) {
315
+ const lines = [
316
+ "### 当前 swarm 标识",
317
+ "",
318
+ `- swarmId: ${swarmContext.swarmId}`,
319
+ ];
320
+ if (swarmContext.workDir)
321
+ lines.push(`- workDir: ${swarmContext.workDir}`);
322
+ lines.push("", "调用任何 MCP 工具时,请使用上面的 `swarmId` / `workDir` 原值,不要自行编造。");
323
+ lines.push("");
324
+ prompt = lines.join("\n") + "\n" + prompt;
325
+ }
254
326
  return prompt;
255
327
  }
256
328
  //# sourceMappingURL=role-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-loader.js","sourceRoot":"","sources":["../../src/roles/role-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role-loader.js","sourceRoot":"","sources":["../../src/roles/role-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { RoleDefinition } from "./types.js";
2
+ export declare const QUEEN_ONLY_TOOLS: readonly ["mcp__clawnet__task_create", "mcp__clawnet__task_set_owner"];
3
+ export interface ResolvedTools {
4
+ allowedTools?: string[];
5
+ disallowedTools?: string[];
6
+ }
7
+ /**
8
+ * Resolve effective tool policy for a role spawn.
9
+ * - If role frontmatter declares allowedTools or disallowedTools, those values
10
+ * take precedence (even if one of them is undefined — frontmatter wins).
11
+ * - Otherwise apply default policy by role type:
12
+ * - queen: no restrictions
13
+ * - any other type: disallow queen-only tools
14
+ */
15
+ export declare function resolveRoleTools(def: RoleDefinition): ResolvedTools;
16
+ //# sourceMappingURL=role-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-tools.d.ts","sourceRoot":"","sources":["../../src/roles/role-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,gBAAgB,wEAGnB,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,aAAa,CAWnE"}
@@ -0,0 +1,25 @@
1
+ export const QUEEN_ONLY_TOOLS = [
2
+ "mcp__clawnet__task_create",
3
+ "mcp__clawnet__task_set_owner",
4
+ ];
5
+ /**
6
+ * Resolve effective tool policy for a role spawn.
7
+ * - If role frontmatter declares allowedTools or disallowedTools, those values
8
+ * take precedence (even if one of them is undefined — frontmatter wins).
9
+ * - Otherwise apply default policy by role type:
10
+ * - queen: no restrictions
11
+ * - any other type: disallow queen-only tools
12
+ */
13
+ export function resolveRoleTools(def) {
14
+ const hasOverride = def.allowedTools !== undefined || def.disallowedTools !== undefined;
15
+ if (hasOverride) {
16
+ return {
17
+ allowedTools: def.allowedTools,
18
+ disallowedTools: def.disallowedTools,
19
+ };
20
+ }
21
+ if (def.type === "queen")
22
+ return {};
23
+ return { disallowedTools: [...QUEEN_ONLY_TOOLS] };
24
+ }
25
+ //# sourceMappingURL=role-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-tools.js","sourceRoot":"","sources":["../../src/roles/role-tools.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,2BAA2B;IAC3B,8BAA8B;CACtB,CAAC;AAOX;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,MAAM,WAAW,GACf,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC;IACtE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,EAAE,eAAe,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC;AACpD,CAAC"}
@@ -30,6 +30,10 @@ export interface RoleDefinition {
30
30
  description: string;
31
31
  /** Optional descriptive capability tags (do not affect runtime behavior) */
32
32
  capabilities?: string[];
33
+ /** Optional allowlist of tool names exposed to this role */
34
+ allowedTools?: string[];
35
+ /** Optional denylist of tool names withheld from this role */
36
+ disallowedTools?: string[];
33
37
  /** Badge color for UI */
34
38
  color: string;
35
39
  /** Full prompt body (markdown after frontmatter) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/roles/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/roles/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}