@mclawnet/swarm 0.1.4 → 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.
- package/README.md +118 -0
- package/dist/__tests__/action-parser.test.js +29 -82
- package/dist/__tests__/action-parser.test.js.map +1 -1
- package/dist/__tests__/coordinator-create-tx.test.d.ts +2 -0
- package/dist/__tests__/coordinator-create-tx.test.d.ts.map +1 -0
- package/dist/__tests__/coordinator-create-tx.test.js +114 -0
- package/dist/__tests__/coordinator-create-tx.test.js.map +1 -0
- package/dist/__tests__/coordinator-inbox-migration.test.d.ts +2 -0
- package/dist/__tests__/coordinator-inbox-migration.test.d.ts.map +1 -0
- package/dist/__tests__/coordinator-inbox-migration.test.js +56 -0
- package/dist/__tests__/coordinator-inbox-migration.test.js.map +1 -0
- package/dist/__tests__/inbox-integration.test.d.ts +2 -0
- package/dist/__tests__/inbox-integration.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-integration.test.js +120 -0
- package/dist/__tests__/inbox-integration.test.js.map +1 -0
- package/dist/__tests__/inbox-persistence-recovery.test.d.ts +2 -0
- package/dist/__tests__/inbox-persistence-recovery.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-persistence-recovery.test.js +139 -0
- package/dist/__tests__/inbox-persistence-recovery.test.js.map +1 -0
- package/dist/__tests__/inbox-relay-interceptor.test.d.ts +2 -0
- package/dist/__tests__/inbox-relay-interceptor.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-relay-interceptor.test.js +156 -0
- package/dist/__tests__/inbox-relay-interceptor.test.js.map +1 -0
- package/dist/__tests__/inbox-relay.test.d.ts +2 -0
- package/dist/__tests__/inbox-relay.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-relay.test.js +318 -0
- package/dist/__tests__/inbox-relay.test.js.map +1 -0
- package/dist/__tests__/inbox-store.test.d.ts +2 -0
- package/dist/__tests__/inbox-store.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-store.test.js +129 -0
- package/dist/__tests__/inbox-store.test.js.map +1 -0
- package/dist/__tests__/inbox-watcher.test.d.ts +2 -0
- package/dist/__tests__/inbox-watcher.test.d.ts.map +1 -0
- package/dist/__tests__/inbox-watcher.test.js +104 -0
- package/dist/__tests__/inbox-watcher.test.js.map +1 -0
- package/dist/__tests__/persistence-path.test.d.ts +2 -0
- package/dist/__tests__/persistence-path.test.d.ts.map +1 -0
- package/dist/__tests__/persistence-path.test.js +79 -0
- package/dist/__tests__/persistence-path.test.js.map +1 -0
- package/dist/__tests__/persistence-robust.test.d.ts +2 -0
- package/dist/__tests__/persistence-robust.test.d.ts.map +1 -0
- package/dist/__tests__/persistence-robust.test.js +125 -0
- package/dist/__tests__/persistence-robust.test.js.map +1 -0
- package/dist/__tests__/persistence.test.d.ts +2 -0
- package/dist/__tests__/persistence.test.d.ts.map +1 -0
- package/dist/__tests__/persistence.test.js +105 -0
- package/dist/__tests__/persistence.test.js.map +1 -0
- package/dist/__tests__/phase4-5-e2e.test.d.ts +2 -0
- package/dist/__tests__/phase4-5-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/phase4-5-e2e.test.js +203 -0
- package/dist/__tests__/phase4-5-e2e.test.js.map +1 -0
- package/dist/__tests__/phase6-7-e2e.test.d.ts +2 -0
- package/dist/__tests__/phase6-7-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/phase6-7-e2e.test.js +93 -0
- package/dist/__tests__/phase6-7-e2e.test.js.map +1 -0
- package/dist/__tests__/recovery-cross-project.test.d.ts +2 -0
- package/dist/__tests__/recovery-cross-project.test.d.ts.map +1 -0
- package/dist/__tests__/recovery-cross-project.test.js +87 -0
- package/dist/__tests__/recovery-cross-project.test.js.map +1 -0
- package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts +2 -0
- package/dist/__tests__/recovery-forwards-to-coordinator.test.d.ts.map +1 -0
- package/dist/__tests__/recovery-forwards-to-coordinator.test.js +59 -0
- package/dist/__tests__/recovery-forwards-to-coordinator.test.js.map +1 -0
- package/dist/__tests__/recovery-resume.test.d.ts +2 -0
- package/dist/__tests__/recovery-resume.test.d.ts.map +1 -0
- package/dist/__tests__/recovery-resume.test.js +132 -0
- package/dist/__tests__/recovery-resume.test.js.map +1 -0
- package/dist/__tests__/retrospective.test.js +1 -0
- package/dist/__tests__/retrospective.test.js.map +1 -1
- package/dist/__tests__/role-loader-preamble-all.test.d.ts +2 -0
- package/dist/__tests__/role-loader-preamble-all.test.d.ts.map +1 -0
- package/dist/__tests__/role-loader-preamble-all.test.js +38 -0
- package/dist/__tests__/role-loader-preamble-all.test.js.map +1 -0
- package/dist/__tests__/role-loader-tools.test.d.ts +2 -0
- package/dist/__tests__/role-loader-tools.test.d.ts.map +1 -0
- package/dist/__tests__/role-loader-tools.test.js +39 -0
- package/dist/__tests__/role-loader-tools.test.js.map +1 -0
- package/dist/__tests__/role-loader.test.js +116 -1
- package/dist/__tests__/role-loader.test.js.map +1 -1
- package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts +2 -0
- package/dist/__tests__/role-prompt-no-legacy-protocol.test.d.ts.map +1 -0
- package/dist/__tests__/role-prompt-no-legacy-protocol.test.js +37 -0
- package/dist/__tests__/role-prompt-no-legacy-protocol.test.js.map +1 -0
- package/dist/__tests__/role-tools.test.d.ts +2 -0
- package/dist/__tests__/role-tools.test.d.ts.map +1 -0
- package/dist/__tests__/role-tools.test.js +80 -0
- package/dist/__tests__/role-tools.test.js.map +1 -0
- package/dist/__tests__/spawn-role-injects-briefings.test.d.ts +2 -0
- package/dist/__tests__/spawn-role-injects-briefings.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-role-injects-briefings.test.js +182 -0
- package/dist/__tests__/spawn-role-injects-briefings.test.js.map +1 -0
- package/dist/__tests__/spawn-role-tool-policy.test.d.ts +2 -0
- package/dist/__tests__/spawn-role-tool-policy.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-role-tool-policy.test.js +96 -0
- package/dist/__tests__/spawn-role-tool-policy.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-inbox-watcher.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js +61 -0
- package/dist/__tests__/swarm-coordinator-inbox-watcher.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-inbox.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-inbox.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-inbox.test.js +182 -0
- package/dist/__tests__/swarm-coordinator-inbox.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-init.test.js +36 -8
- package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -1
- package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js +113 -0
- package/dist/__tests__/swarm-coordinator-legacy-plan-review-warn.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js +465 -0
- package/dist/__tests__/swarm-coordinator-plan-review-intercept.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js +284 -0
- package/dist/__tests__/swarm-coordinator-plan-review-recovery.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-plan-review.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-review.test.js +294 -0
- package/dist/__tests__/swarm-coordinator-plan-review.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-resume.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-resume.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-resume.test.js +93 -0
- package/dist/__tests__/swarm-coordinator-resume.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-roleId.test.js +2 -2
- package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -1
- package/dist/__tests__/swarm-destroy-detach.test.d.ts +2 -0
- package/dist/__tests__/swarm-destroy-detach.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-destroy-detach.test.js +135 -0
- package/dist/__tests__/swarm-destroy-detach.test.js.map +1 -0
- package/dist/action-parser.d.ts +0 -9
- package/dist/action-parser.d.ts.map +1 -1
- package/dist/action-parser.js +0 -114
- package/dist/action-parser.js.map +1 -1
- package/dist/inbox-relay.d.ts +50 -0
- package/dist/inbox-relay.d.ts.map +1 -0
- package/dist/inbox-relay.js +168 -0
- package/dist/inbox-relay.js.map +1 -0
- package/dist/inbox-store.d.ts +25 -0
- package/dist/inbox-store.d.ts.map +1 -0
- package/dist/inbox-store.js +95 -0
- package/dist/inbox-store.js.map +1 -0
- package/dist/inbox-watcher.d.ts +13 -0
- package/dist/inbox-watcher.d.ts.map +1 -0
- package/dist/inbox-watcher.js +89 -0
- package/dist/inbox-watcher.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/persistence.d.ts +19 -5
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +97 -22
- package/dist/persistence.js.map +1 -1
- package/dist/recovery.d.ts +12 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +14 -19
- package/dist/recovery.js.map +1 -1
- package/dist/roles/role-loader.d.ts +28 -1
- package/dist/roles/role-loader.d.ts.map +1 -1
- package/dist/roles/role-loader.js +73 -1
- package/dist/roles/role-loader.js.map +1 -1
- package/dist/roles/role-tools.d.ts +16 -0
- package/dist/roles/role-tools.d.ts.map +1 -0
- package/dist/roles/role-tools.js +25 -0
- package/dist/roles/role-tools.js.map +1 -0
- package/dist/roles/types.d.ts +4 -0
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/swarm-coordinator.d.ts +176 -12
- package/dist/swarm-coordinator.d.ts.map +1 -1
- package/dist/swarm-coordinator.js +863 -370
- package/dist/swarm-coordinator.js.map +1 -1
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -6
- package/roles/analyst-livermore.md +6 -30
- package/roles/designer-rams.md +2 -30
- package/roles/dev-torvalds.md +8 -44
- package/roles/developer.md +5 -21
- package/roles/director-jia.md +20 -49
- package/roles/editor-boyong.md +8 -40
- package/roles/macro-dalio.md +6 -30
- package/roles/planner-maoni.md +24 -53
- package/roles/pm-jobs.md +20 -71
- package/roles/preset-analyst-simons.md +2 -18
- package/roles/preset-architect-knuth.md +2 -18
- package/roles/preset-designer-norman.md +2 -18
- package/roles/preset-designer.md +2 -18
- package/roles/preset-dev-carmack.md +2 -18
- package/roles/preset-dev-gosling.md +2 -18
- package/roles/preset-developer.md +7 -23
- package/roles/preset-manager-grove.md +2 -18
- package/roles/preset-manager-musk.md +2 -18
- package/roles/preset-pm.md +7 -34
- package/roles/preset-researcher-feynman.md +2 -18
- package/roles/preset-reviewer.md +5 -21
- package/roles/preset-strategist-buffett.md +2 -18
- package/roles/preset-strategist-munger.md +2 -18
- package/roles/preset-strategist-sunzi.md +2 -18
- package/roles/preset-tester-beck.md +2 -18
- package/roles/preset-tester.md +5 -21
- package/roles/preset-writer-orwell.md +2 -18
- package/roles/preset-writer.md +2 -18
- package/roles/quant-simons.md +5 -32
- package/roles/queen.md +25 -41
- package/roles/reviewer-martin.md +11 -37
- package/roles/reviewer.md +20 -21
- package/roles/rhythm-tangsan.md +5 -29
- package/roles/risk-taleb.md +4 -32
- package/roles/script-shitiesheng.md +8 -31
- package/roles/storyboard-xuke.md +9 -29
- package/roles/strategist-soros.md +16 -73
- package/roles/tester-beck.md +4 -40
- package/roles/tester.md +5 -21
- package/roles/trader-jones.md +4 -32
- package/roles/vfx-guchangwei.md +8 -27
- package/roles/writer-zhouzi.md +7 -39
- package/templates/dev-team-pro.md +4 -1
- package/templates/dev-team.md +3 -1
- package/templates/minimal.md +2 -1
- package/templates/trading-team.md +6 -1
- package/templates/video-team.md +4 -1
- package/templates/writing-team.md +4 -1
package/dist/persistence.js
CHANGED
|
@@ -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
|
-
|
|
5
|
-
|
|
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
|
|
8
|
-
return join(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
78
|
-
if (!existsSync(
|
|
121
|
+
const projectsDir = join(getHome(), ".clawnet", "projects");
|
|
122
|
+
if (!existsSync(projectsDir))
|
|
79
123
|
return [];
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
.
|
|
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
|
package/dist/persistence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,MAAM,EACN,WAAW,
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/recovery.d.ts
CHANGED
|
@@ -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
|
package/dist/recovery.d.ts.map
CHANGED
|
@@ -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,
|
|
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((
|
|
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.
|
|
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
|
package/dist/recovery.js.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,aAAa,CAAC,CAAC;AACzE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/B,qCAAqC;IACrC,MAAM,IAAI,GAAsC,EAAE,CAAC;IACnD,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,GAAuC,MAAM,CAAC;IACzD,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,YAAY,GAAoC,IAAI,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,0DAA0D;QAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,OAAO,GAAG,YAAY,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,UAAU,CAAC;YACrB,SAAS;QACX,CAAC;QAED,sCAAsC;QACtC,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClC,SAAS;YACX,CAAC;YACD,0CAA0C;YAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YAC7B,4EAA4E;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACnD,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC7C,0BAA0B;gBAC1B,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,CAAC;oBACxC,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAA+B,CAAC,CAAC;oBAChF,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;gBAED,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC7B,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBACxB,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAChE,CAAC;qBAAM,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;oBACtC,UAAU,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,+FAA+F;oBAC/F,4EAA4E;oBAC5E,wDAAwD;gBAC1D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,gGAAgG;YAChG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,sBAAsB;gBACtB,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,CAAC;oBACxC,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAA+B,CAAC,CAAC;oBAChF,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,mEAAmE;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACxD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAC9B,uBAAuB;gBACvB,IAAI,YAAY,EAAE,IAAI,EAAE,CAAC;oBACvB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAA+B,CAAC,CAAC;gBAClF,CAAC;gBACD,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,mDAAmD;YACnD,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACnD,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;oBAC/B,IAAI,GAAG,KAAK,SAAS;wBAAE,YAAY,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,CAAC;oBACxC,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAA+B,CAAC,CAAC;oBAChF,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,CAAC;QACxC,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,YAA+B,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,aAAa,GACjB,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,UAAU,CAAC,WAAW,KAAK,SAAS;QACpC,UAAU,CAAC,gBAAgB,KAAK,SAAS;QACzC,UAAU,CAAC,cAAc,KAAK,SAAS;QACvC,UAAU,CAAC,gBAAgB,KAAK,SAAS,CAAC;IAE5C,OAAO;QACL,IAAI,EAAG,IAAI,CAAC,IAAe,IAAI,SAAS;QACxC,SAAS,EAAG,IAAI,CAAC,SAAoB,IAAK,IAAI,CAAC,IAAe,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;QACpF,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,SAAS;QACtD,IAAI,EAAG,IAAI,CAAC,IAA2B,IAAI,QAAQ;QACnD,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,EAAE;QAC/C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACvE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC9E,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QACvF,KAAK,EAAG,IAAI,CAAC,KAAgB,IAAI,SAAS;QAC1C,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAClD,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAkB,EAClB,GAAW,EACX,KAAsB;IAEtB,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,CAAC,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;QACtC,CAAC,GAAG,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;QACpC,CAAC,GAAG,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,cAAc,CAAC;IAEnD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;gBACrF,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CtC,CAAC;AAkBF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,UAA0B,EAC1B,UAAkB,EAClB,QAAgB,EAChB,YAA2B;IAE3B,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU;SAC/B,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC;SACtC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAEtC,MAAM,IAAI,uBAAuB,CAAC;IAElC,kCAAkC;IAClC,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;QAChC,MAAM,IAAI,gBAAgB,CAAC;QAC3B,IAAI,CAAC,CAAC,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,CAAC,SAAS,IAAI,CAAC;QACrD,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,WAAW,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,YAAY,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,kBAAkB,CAAC;QAC7B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,+DAA+D;IAC/D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG;YACZ,iBAAiB;YACjB,EAAE;YACF,cAAc,YAAY,CAAC,OAAO,EAAE;SACrC,CAAC;QACF,IAAI,YAAY,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sDAAsD,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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"}
|
package/dist/roles/types.d.ts
CHANGED
|
@@ -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"}
|