@mclawnet/swarm 0.1.4 → 0.1.6

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 (240) 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__/project-files.test.d.ts +2 -0
  57. package/dist/__tests__/project-files.test.d.ts.map +1 -0
  58. package/dist/__tests__/project-files.test.js +143 -0
  59. package/dist/__tests__/project-files.test.js.map +1 -0
  60. package/dist/__tests__/projects-fs.test.d.ts +2 -0
  61. package/dist/__tests__/projects-fs.test.d.ts.map +1 -0
  62. package/dist/__tests__/projects-fs.test.js +107 -0
  63. package/dist/__tests__/projects-fs.test.js.map +1 -0
  64. package/dist/__tests__/recovery-cross-project.test.d.ts +2 -0
  65. package/dist/__tests__/recovery-cross-project.test.d.ts.map +1 -0
  66. package/dist/__tests__/recovery-cross-project.test.js +87 -0
  67. package/dist/__tests__/recovery-cross-project.test.js.map +1 -0
  68. package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts +2 -0
  69. package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts.map +1 -0
  70. package/dist/__tests__/recovery-forwards-to-coordinator.test.js +59 -0
  71. package/dist/__tests__/recovery-forwards-to-coordinator.test.js.map +1 -0
  72. package/dist/__tests__/recovery-resume.test.d.ts +2 -0
  73. package/dist/__tests__/recovery-resume.test.d.ts.map +1 -0
  74. package/dist/__tests__/recovery-resume.test.js +132 -0
  75. package/dist/__tests__/recovery-resume.test.js.map +1 -0
  76. package/dist/__tests__/retrospective.test.js +1 -0
  77. package/dist/__tests__/retrospective.test.js.map +1 -1
  78. package/dist/__tests__/role-loader-preamble-all.test.d.ts +2 -0
  79. package/dist/__tests__/role-loader-preamble-all.test.d.ts.map +1 -0
  80. package/dist/__tests__/role-loader-preamble-all.test.js +38 -0
  81. package/dist/__tests__/role-loader-preamble-all.test.js.map +1 -0
  82. package/dist/__tests__/role-loader-tools.test.d.ts +2 -0
  83. package/dist/__tests__/role-loader-tools.test.d.ts.map +1 -0
  84. package/dist/__tests__/role-loader-tools.test.js +39 -0
  85. package/dist/__tests__/role-loader-tools.test.js.map +1 -0
  86. package/dist/__tests__/role-loader.test.js +116 -1
  87. package/dist/__tests__/role-loader.test.js.map +1 -1
  88. package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts +2 -0
  89. package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts.map +1 -0
  90. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js +37 -0
  91. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js.map +1 -0
  92. package/dist/__tests__/role-tools.test.d.ts +2 -0
  93. package/dist/__tests__/role-tools.test.d.ts.map +1 -0
  94. package/dist/__tests__/role-tools.test.js +80 -0
  95. package/dist/__tests__/role-tools.test.js.map +1 -0
  96. package/dist/__tests__/spawn-role-injects-briefings.test.d.ts +2 -0
  97. package/dist/__tests__/spawn-role-injects-briefings.test.d.ts.map +1 -0
  98. package/dist/__tests__/spawn-role-injects-briefings.test.js +182 -0
  99. package/dist/__tests__/spawn-role-injects-briefings.test.js.map +1 -0
  100. package/dist/__tests__/spawn-role-tool-policy.test.d.ts +2 -0
  101. package/dist/__tests__/spawn-role-tool-policy.test.d.ts.map +1 -0
  102. package/dist/__tests__/spawn-role-tool-policy.test.js +96 -0
  103. package/dist/__tests__/spawn-role-tool-policy.test.js.map +1 -0
  104. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts +2 -0
  105. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts.map +1 -0
  106. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js +61 -0
  107. package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js.map +1 -0
  108. package/dist/__tests__/swarm-coordinator-inbox.test.d.ts +2 -0
  109. package/dist/__tests__/swarm-coordinator-inbox.test.d.ts.map +1 -0
  110. package/dist/__tests__/swarm-coordinator-inbox.test.js +182 -0
  111. package/dist/__tests__/swarm-coordinator-inbox.test.js.map +1 -0
  112. package/dist/__tests__/swarm-coordinator-init.test.js +36 -8
  113. package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -1
  114. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts +2 -0
  115. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts.map +1 -0
  116. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js +113 -0
  117. package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js.map +1 -0
  118. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts +2 -0
  119. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts.map +1 -0
  120. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js +465 -0
  121. package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js.map +1 -0
  122. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts +2 -0
  123. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts.map +1 -0
  124. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js +284 -0
  125. package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js.map +1 -0
  126. package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts +2 -0
  127. package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts.map +1 -0
  128. package/dist/__tests__/swarm-coordinator-plan-review.test.js +294 -0
  129. package/dist/__tests__/swarm-coordinator-plan-review.test.js.map +1 -0
  130. package/dist/__tests__/swarm-coordinator-resume.test.d.ts +2 -0
  131. package/dist/__tests__/swarm-coordinator-resume.test.d.ts.map +1 -0
  132. package/dist/__tests__/swarm-coordinator-resume.test.js +93 -0
  133. package/dist/__tests__/swarm-coordinator-resume.test.js.map +1 -0
  134. package/dist/__tests__/swarm-coordinator-roleId.test.js +2 -2
  135. package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -1
  136. package/dist/__tests__/swarm-destroy-detach.test.d.ts +2 -0
  137. package/dist/__tests__/swarm-destroy-detach.test.d.ts.map +1 -0
  138. package/dist/__tests__/swarm-destroy-detach.test.js +135 -0
  139. package/dist/__tests__/swarm-destroy-detach.test.js.map +1 -0
  140. package/dist/action-parser.d.ts +0 -9
  141. package/dist/action-parser.d.ts.map +1 -1
  142. package/dist/action-parser.js +0 -114
  143. package/dist/action-parser.js.map +1 -1
  144. package/dist/inbox-relay.d.ts +50 -0
  145. package/dist/inbox-relay.d.ts.map +1 -0
  146. package/dist/inbox-relay.js +168 -0
  147. package/dist/inbox-relay.js.map +1 -0
  148. package/dist/inbox-store.d.ts +25 -0
  149. package/dist/inbox-store.d.ts.map +1 -0
  150. package/dist/inbox-store.js +95 -0
  151. package/dist/inbox-store.js.map +1 -0
  152. package/dist/inbox-watcher.d.ts +13 -0
  153. package/dist/inbox-watcher.d.ts.map +1 -0
  154. package/dist/inbox-watcher.js +89 -0
  155. package/dist/inbox-watcher.js.map +1 -0
  156. package/dist/index.d.ts +8 -3
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +5 -2
  159. package/dist/index.js.map +1 -1
  160. package/dist/persistence.d.ts +19 -5
  161. package/dist/persistence.d.ts.map +1 -1
  162. package/dist/persistence.js +97 -22
  163. package/dist/persistence.js.map +1 -1
  164. package/dist/project-files.d.ts +60 -0
  165. package/dist/project-files.d.ts.map +1 -0
  166. package/dist/project-files.js +214 -0
  167. package/dist/project-files.js.map +1 -0
  168. package/dist/projects-fs.d.ts +28 -0
  169. package/dist/projects-fs.d.ts.map +1 -0
  170. package/dist/projects-fs.js +111 -0
  171. package/dist/projects-fs.js.map +1 -0
  172. package/dist/recovery.d.ts +12 -0
  173. package/dist/recovery.d.ts.map +1 -1
  174. package/dist/recovery.js +14 -19
  175. package/dist/recovery.js.map +1 -1
  176. package/dist/roles/role-loader.d.ts +28 -1
  177. package/dist/roles/role-loader.d.ts.map +1 -1
  178. package/dist/roles/role-loader.js +73 -1
  179. package/dist/roles/role-loader.js.map +1 -1
  180. package/dist/roles/role-tools.d.ts +16 -0
  181. package/dist/roles/role-tools.d.ts.map +1 -0
  182. package/dist/roles/role-tools.js +25 -0
  183. package/dist/roles/role-tools.js.map +1 -0
  184. package/dist/roles/types.d.ts +4 -0
  185. package/dist/roles/types.d.ts.map +1 -1
  186. package/dist/swarm-coordinator.d.ts +176 -12
  187. package/dist/swarm-coordinator.d.ts.map +1 -1
  188. package/dist/swarm-coordinator.js +863 -370
  189. package/dist/swarm-coordinator.js.map +1 -1
  190. package/dist/types.d.ts +26 -0
  191. package/dist/types.d.ts.map +1 -1
  192. package/package.json +9 -6
  193. package/roles/analyst-livermore.md +6 -30
  194. package/roles/designer-rams.md +2 -30
  195. package/roles/dev-torvalds.md +8 -44
  196. package/roles/developer.md +5 -21
  197. package/roles/director-jia.md +20 -49
  198. package/roles/editor-boyong.md +8 -40
  199. package/roles/macro-dalio.md +6 -30
  200. package/roles/planner-maoni.md +24 -53
  201. package/roles/pm-jobs.md +20 -71
  202. package/roles/preset-analyst-simons.md +2 -18
  203. package/roles/preset-architect-knuth.md +2 -18
  204. package/roles/preset-designer-norman.md +2 -18
  205. package/roles/preset-designer.md +2 -18
  206. package/roles/preset-dev-carmack.md +2 -18
  207. package/roles/preset-dev-gosling.md +2 -18
  208. package/roles/preset-developer.md +7 -23
  209. package/roles/preset-manager-grove.md +2 -18
  210. package/roles/preset-manager-musk.md +2 -18
  211. package/roles/preset-pm.md +7 -34
  212. package/roles/preset-researcher-feynman.md +2 -18
  213. package/roles/preset-reviewer.md +5 -21
  214. package/roles/preset-strategist-buffett.md +2 -18
  215. package/roles/preset-strategist-munger.md +2 -18
  216. package/roles/preset-strategist-sunzi.md +2 -18
  217. package/roles/preset-tester-beck.md +2 -18
  218. package/roles/preset-tester.md +5 -21
  219. package/roles/preset-writer-orwell.md +2 -18
  220. package/roles/preset-writer.md +2 -18
  221. package/roles/quant-simons.md +5 -32
  222. package/roles/queen.md +25 -41
  223. package/roles/reviewer-martin.md +11 -37
  224. package/roles/reviewer.md +20 -21
  225. package/roles/rhythm-tangsan.md +5 -29
  226. package/roles/risk-taleb.md +4 -32
  227. package/roles/script-shitiesheng.md +8 -31
  228. package/roles/storyboard-xuke.md +9 -29
  229. package/roles/strategist-soros.md +16 -73
  230. package/roles/tester-beck.md +4 -40
  231. package/roles/tester.md +5 -21
  232. package/roles/trader-jones.md +4 -32
  233. package/roles/vfx-guchangwei.md +8 -27
  234. package/roles/writer-zhouzi.md +7 -39
  235. package/templates/dev-team-pro.md +4 -1
  236. package/templates/dev-team.md +3 -1
  237. package/templates/minimal.md +2 -1
  238. package/templates/trading-team.md +6 -1
  239. package/templates/video-team.md +4 -1
  240. package/templates/writing-team.md +4 -1
@@ -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"}
@@ -1,18 +1,61 @@
1
1
  import type { SessionAdapter, HubAdapter } from "./types.js";
2
- import type { MessageRouter } from "./message-router.js";
2
+ import { InboxRelay } from "./inbox-relay.js";
3
+ import { InboxWatcher } from "./inbox-watcher.js";
4
+ import { TaskStore } from "@mclawnet/task";
3
5
  import type { SwarmInstance, RoleInstance, SwarmCreateOptions, CustomRoleDefinition } from "./types.js";
4
6
  /**
5
7
  * SwarmCoordinator — orchestrates multi-role Claude CLI swarms.
6
8
  *
7
9
  * Composes (not replaces) SessionAdapter. Each role instance is a separate
8
- * session in SessionAdapter. Communication between roles goes through
9
- * MessageRouter (currently LocalMessageRouter using stdin/stdout).
10
+ * session in SessionAdapter. Communication between roles flows through
11
+ * file-based InboxStore + InboxRelay.
10
12
  */
11
13
  export declare class SwarmCoordinator {
12
14
  private sessionAdapter;
13
15
  private hub;
16
+ /**
17
+ * Optional factory that resolves a per-swarm TaskStore (workDir-scoped).
18
+ * When present, spawnRole appends a "### 任务上下文" briefing section to
19
+ * the role's system prompt. Failures are best-effort logged.
20
+ *
21
+ * Backward compat: also accepts a pre-built single TaskStore instance.
22
+ */
23
+ private taskStoreFactory?;
24
+ /**
25
+ * Optional override for the user-home root (no `.clawnet` suffix).
26
+ * Threaded to InboxRelay and to inline `new InboxStore(...)` / `TaskStore`
27
+ * calls so test harnesses pinned to a tmpdir don't fall through to
28
+ * `homedir()` and write files into the real `~/.clawnet`. When omitted,
29
+ * inline call sites still honour `CLAWNET_HOME` env var as before.
30
+ */
31
+ private home?;
14
32
  private swarms;
15
- constructor(sessionAdapter: SessionAdapter, hub: HubAdapter);
33
+ readonly inboxRelay: InboxRelay;
34
+ readonly inboxWatcher: InboxWatcher;
35
+ constructor(sessionAdapter: SessionAdapter, hub: HubAdapter,
36
+ /**
37
+ * Optional factory that resolves a per-swarm TaskStore (workDir-scoped).
38
+ * When present, spawnRole appends a "### 任务上下文" briefing section to
39
+ * the role's system prompt. Failures are best-effort logged.
40
+ *
41
+ * Backward compat: also accepts a pre-built single TaskStore instance.
42
+ */
43
+ taskStoreFactory?: (TaskStore | ((workDir: string) => TaskStore | undefined)) | undefined,
44
+ /**
45
+ * Optional override for the user-home root (no `.clawnet` suffix).
46
+ * Threaded to InboxRelay and to inline `new InboxStore(...)` / `TaskStore`
47
+ * calls so test harnesses pinned to a tmpdir don't fall through to
48
+ * `homedir()` and write files into the real `~/.clawnet`. When omitted,
49
+ * inline call sites still honour `CLAWNET_HOME` env var as before.
50
+ */
51
+ home?: string | undefined);
52
+ /** Resolve the user-home root used for InboxStore / TaskStore lookups. */
53
+ private resolveHome;
54
+ /**
55
+ * Resolve the TaskStore for a given swarm's workDir.
56
+ * Returns undefined if no factory was wired or if the factory returned undefined.
57
+ */
58
+ private resolveTaskStore;
16
59
  /** Create a new swarm with two-phase initialization. */
17
60
  create(swarmSessionId: string, options: SwarmCreateOptions): Promise<void>;
18
61
  /** Handle user message directed at the swarm. */
@@ -37,10 +80,45 @@ export declare class SwarmCoordinator {
37
80
  total: number;
38
81
  };
39
82
  }): boolean;
83
+ /**
84
+ * Persist the per-role claudeSessionId immediately (e.g. from `system/init`
85
+ * frame, before the first turn_complete). Returns true if a role was found
86
+ * and updated; false otherwise (no-op for non-swarm sessions).
87
+ */
88
+ setRoleClaudeSessionId(swarmId: string, instanceId: string, claudeSessionId: string): boolean;
89
+ /** Convenience: same as setRoleClaudeSessionId but takes the `${swarmId}::${instanceId}` roleSessionId. */
90
+ setRoleClaudeSessionIdBySession(roleSessionId: string, claudeSessionId: string): boolean;
40
91
  /** Spawn a new role instance in a swarm. */
41
- spawnRole(swarmId: string, roleName: string, router?: MessageRouter, taskPrompt?: string, customPrompt?: string, customDefinition?: CustomRoleDefinition, additionalDirs?: string[]): Promise<RoleInstance>;
92
+ spawnRole(swarmId: string, roleName: string, taskPrompt?: string, customPrompt?: string, customDefinition?: CustomRoleDefinition, additionalDirs?: string[], resumeId?: string, presetInstanceId?: string): Promise<RoleInstance>;
93
+ /**
94
+ * Recover a previously persisted swarm by id.
95
+ *
96
+ * Locates the snapshot via `listRecoverableSwarmIds()`, then for each role
97
+ * in the snapshot spawns a Claude session via `--resume role.claudeSessionId`
98
+ * (when present) so the per-role conversation continues. Roles without a
99
+ * stored claudeSessionId start fresh.
100
+ *
101
+ * After all roles are spawned, drains each role's offline inbox via
102
+ * `inboxRelay.deliver`. Drain failures are best-effort: warn but never throw.
103
+ *
104
+ * Recovered swarms start in `paused` state — caller must explicitly resume
105
+ * (matches existing behaviour in `recoverSwarm` helper).
106
+ */
107
+ recover(swarmId: string): Promise<void>;
42
108
  /** Stop a role instance. */
43
109
  stopRole(swarmId: string, instanceId: string): Promise<void>;
110
+ /**
111
+ * Roll back side-effects from a partially-completed `create()`.
112
+ *
113
+ * Called from create()'s catch block. Mirrors `destroy()` but is
114
+ * deliberately tolerant of partial state (timer may not exist, snapshot
115
+ * may not exist, sessions list comes from the caller's accumulator
116
+ * because `swarm.roles` may not yet contain every opened session).
117
+ *
118
+ * Best-effort: every step is wrapped — we never throw out of cleanup.
119
+ * Logs a warn so operators see WHY a swarm was rolled back.
120
+ */
121
+ private cleanupPartialCreate;
44
122
  /** Destroy an entire swarm. */
45
123
  destroy(swarmId: string): Promise<void>;
46
124
  /** Check if a session ID belongs to any swarm. */
@@ -53,22 +131,108 @@ export declare class SwarmCoordinator {
53
131
  complete(swarmId: string): Promise<void>;
54
132
  /** Mark a swarm as failed. Releases all resources — closes sessions, deletes snapshot, removes from memory. */
55
133
  fail(swarmId: string): Promise<void>;
134
+ /**
135
+ * InboxRelay messageInterceptor hook. Consumes `plan_review_result`
136
+ * envelopes (written by the `plan_review_submit` MCP tool out-of-process)
137
+ * and converts them into the normalized `submitPlanReview()` flow:
138
+ * planStatus flip, timer clear, plan_approved/plan_rejected to queen.
139
+ *
140
+ * Returning `true` removes the raw message from the LLM payload and marks
141
+ * it delivered so it doesn't re-fire. Returning `false` lets the relay
142
+ * push the message normally.
143
+ *
144
+ * Failures (parse error, invalid verdict) are logged + consumed to avoid a
145
+ * tight reload loop on a malformed file. The submitPlanReview call is
146
+ * idempotent so duplicate reviewer envelopes (e.g. retries) are safe.
147
+ */
148
+ private handleInterceptedMessage;
149
+ /**
150
+ * Apply a plan review verdict from a reviewer (or system on timeout).
151
+ * Idempotent: when planStatus is already "approved" or "rejected", logs and
152
+ * returns. Clears any pending planReviewTimer.
153
+ *
154
+ * Wired to the `plan_review_submit` MCP tool by the host (Task 3); this
155
+ * method itself does not call back into MCP.
156
+ */
157
+ submitPlanReview(args: {
158
+ swarmId: string;
159
+ from: string;
160
+ verdict: "approved" | "rejected";
161
+ body?: string;
162
+ }): Promise<void>;
163
+ /**
164
+ * Defensive recovery: re-emit plan_approved / plan_rejected to the queen if
165
+ * planStatus is finalised but no matching system envelope exists in the
166
+ * queen's inbox. Called from the queen check-in tick.
167
+ *
168
+ * Catches the case where the deferred submitPlanReview's call to
169
+ * deliverInbox() threw (e.g. transient fs error or lockfile contention) and
170
+ * only logged a warning — leaving planStatus = "approved" but the queen
171
+ * never receiving plan_approved, which would otherwise wedge the swarm.
172
+ *
173
+ * Idempotent: if a system plan_approved/plan_rejected already exists in the
174
+ * queen inbox (delivered or undelivered), we do nothing.
175
+ */
176
+ private reconcilePlanStatusForQueen;
56
177
  /** Run retrospective analysis then clean up swarm resources. */
57
178
  private runRetroAndCleanup;
179
+ /**
180
+ * Detach all tasks owned by a swarm: clear their swarmId and owner so they
181
+ * survive the swarm's lifecycle and can be reassigned. Best-effort — any
182
+ * failure is logged and swallowed; never blocks destroy/complete/fail.
183
+ *
184
+ * Tasks belonging to other swarms are not touched.
185
+ */
186
+ private detachTasks;
187
+ /**
188
+ * Build the boot-time "### 任务上下文" section appended to a role's system
189
+ * prompt. Returns null when no taskStore is wired (caller already gates on
190
+ * that, but we double-check here for safety).
191
+ *
192
+ * Queen vs. worker contract:
193
+ * - queen → lead briefing (queenInstanceId is this role itself) + member briefing
194
+ * - other → task briefing (owner-scoped) + member briefing
195
+ *
196
+ * The "### 任务上下文" anchor and inner section anchors are load-bearing
197
+ * (matched verbatim by tests and by the agent itself).
198
+ */
199
+ private buildBriefingSection;
200
+ /**
201
+ * Append a message to a target instance's inbox file then trigger
202
+ * InboxRelay.deliver to push it through the agent's stdin (single-flight).
203
+ * Best-effort: returns silently when the swarm has no workDir (in-memory
204
+ * fixtures used by tests), keeping behaviour compatible with the previous
205
+ * router.send path.
206
+ */
207
+ private deliverInbox;
208
+ /**
209
+ * Broadcast helper: deliverInbox to every role in the swarm except those
210
+ * already stopped. Includes `spawning` roles intentionally — the inbox file
211
+ * is durable, so the relay (or runPostStart drain in the spawn path) will
212
+ * deliver the message once the role's stdin opens. Matches the legacy
213
+ * router.broadcast behaviour, which never gated on "spawning".
214
+ */
215
+ private broadcastInbox;
58
216
  private findQueen;
217
+ /**
218
+ * Public lookup: returns the active queen role instance for a swarm, or
219
+ * undefined when the swarm/queen is not present. Identifies the queen by
220
+ * `definition.type === "queen"` (not by roleName) so custom queen roles
221
+ * with non-default names are also recognised.
222
+ */
223
+ findQueenInstance(swarmId: string): RoleInstance | undefined;
59
224
  private findReviewer;
60
225
  /** Build a summary of the previous swarm run from messages.jsonl for continuation. */
61
226
  private buildContinuationSummary;
62
227
  /** Send plan to reviewer for review. Auto-approves if no reviewer available. */
63
228
  private requestPlanReview;
64
- /** Handle plan review result from reviewer. */
65
- private handlePlanReviewResult;
229
+ /**
230
+ * (Re)arm the plan-review timeout fallback. Clears any prior timer first so
231
+ * call sites don't need to. The fire path delegates to submitPlanReview so
232
+ * its idempotency guard protects against reviewer/timer races.
233
+ */
234
+ private armPlanReviewTimeout;
66
235
  private findByRoleSessionId;
67
- private executeAction;
68
- /** On-demand spawn: start a role instance if it's not currently running. */
69
- private ensureRoleStarted;
70
- /** Send a message with exponential backoff retry. Fire-and-forget (async). */
71
- private sendWithRetry;
72
236
  private startQueenCheck;
73
237
  private buildRoleListString;
74
238
  private buildStatusPayload;
@@ -1 +1 @@
1
- {"version":3,"file":"swarm-coordinator.d.ts","sourceRoot":"","sources":["../src/swarm-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWzD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,kBAAkB,EAGlB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAWpB;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,GAAG;IAJb,OAAO,CAAC,MAAM,CAAoC;gBAGxC,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,UAAU;IAKzB,wDAAwD;IAClD,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0GhF,iDAAiD;IAC3C,iBAAiB,CACrB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;IAwChB;;;;;OAKG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;IA+D/D;;;OAGG;IACH,sBAAsB,CACpB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACnH,OAAO;IAoBV,4CAA4C;IACtC,SAAS,CACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,aAAa,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,gBAAgB,CAAC,EAAE,oBAAoB,EACvC,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,YAAY,CAAC;IAwExB,4BAA4B;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlE,+BAA+B;IACzB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7C,kDAAkD;IAClD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI1C,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAIzC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI3D,kHAAkH;IAC5G,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C,+GAA+G;IACzG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1C,gEAAgE;YAClD,kBAAkB;IAsEhC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAOpB,sFAAsF;IACtF,OAAO,CAAC,wBAAwB;IAkChC,gFAAgF;IAChF,OAAO,CAAC,iBAAiB;IA2CzB,+CAA+C;IAC/C,OAAO,CAAC,sBAAsB;IAyC9B,OAAO,CAAC,mBAAmB;YAeb,aAAa;IAiI3B,4EAA4E;YAC9D,iBAAiB;IAwC/B,8EAA8E;YAChE,aAAa;IAqD3B,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,gBAAgB;CAWzB"}
1
+ {"version":3,"file":"swarm-coordinator.d.ts","sourceRoot":"","sources":["../src/swarm-coordinator.ts"],"names":[],"mappings":"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"}