@mclawnet/swarm 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/dynamic-add-integration.test.d.ts +2 -0
- package/dist/__tests__/dynamic-add-integration.test.d.ts.map +1 -0
- package/dist/__tests__/dynamic-add-integration.test.js +108 -0
- package/dist/__tests__/dynamic-add-integration.test.js.map +1 -0
- package/dist/__tests__/membership-change.test.d.ts +2 -0
- package/dist/__tests__/membership-change.test.d.ts.map +1 -0
- package/dist/__tests__/membership-change.test.js +132 -0
- package/dist/__tests__/membership-change.test.js.map +1 -0
- package/dist/__tests__/persistence.test.js +93 -4
- package/dist/__tests__/persistence.test.js.map +1 -1
- package/dist/__tests__/phase4-5-e2e.test.js +7 -7
- package/dist/__tests__/phase4-5-e2e.test.js.map +1 -1
- package/dist/__tests__/phase6-7-e2e.test.js +10 -7
- package/dist/__tests__/phase6-7-e2e.test.js.map +1 -1
- package/dist/__tests__/plan-sync.test.d.ts +2 -0
- package/dist/__tests__/plan-sync.test.d.ts.map +1 -0
- package/dist/__tests__/plan-sync.test.js +30 -0
- package/dist/__tests__/plan-sync.test.js.map +1 -0
- package/dist/__tests__/projects-fs.test.js +30 -0
- package/dist/__tests__/projects-fs.test.js.map +1 -1
- package/dist/__tests__/recovery-forwards-to-coordinator.test.js +1 -1
- package/dist/__tests__/recovery-forwards-to-coordinator.test.js.map +1 -1
- package/dist/__tests__/recovery-resume.test.js +15 -5
- package/dist/__tests__/recovery-resume.test.js.map +1 -1
- package/dist/__tests__/role-loader-editor.test.d.ts +2 -0
- package/dist/__tests__/role-loader-editor.test.d.ts.map +1 -0
- package/dist/__tests__/role-loader-editor.test.js +138 -0
- package/dist/__tests__/role-loader-editor.test.js.map +1 -0
- package/dist/__tests__/role-loader.test.js +9 -0
- package/dist/__tests__/role-loader.test.js.map +1 -1
- package/dist/__tests__/spawn-role-injects-briefings.test.js +40 -28
- package/dist/__tests__/spawn-role-injects-briefings.test.js.map +1 -1
- package/dist/__tests__/spawn-role-mutex.test.d.ts +2 -0
- package/dist/__tests__/spawn-role-mutex.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-role-mutex.test.js +158 -0
- package/dist/__tests__/spawn-role-mutex.test.js.map +1 -0
- package/dist/__tests__/spawn-role-rollback.test.d.ts +2 -0
- package/dist/__tests__/spawn-role-rollback.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-role-rollback.test.js +180 -0
- package/dist/__tests__/spawn-role-rollback.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-backend.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-backend.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-backend.test.js +334 -0
- package/dist/__tests__/swarm-coordinator-backend.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-init.test.js +2 -2
- package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -1
- package/dist/__tests__/swarm-coordinator-plan-sync.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-plan-sync.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-plan-sync.test.js +263 -0
- package/dist/__tests__/swarm-coordinator-plan-sync.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-resume.test.js +27 -17
- package/dist/__tests__/swarm-coordinator-resume.test.js.map +1 -1
- package/dist/__tests__/swarm-coordinator-roleId.test.js +24 -9
- package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -1
- package/dist/__tests__/sync-plan-status.test.d.ts +2 -0
- package/dist/__tests__/sync-plan-status.test.d.ts.map +1 -0
- package/dist/__tests__/sync-plan-status.test.js +198 -0
- package/dist/__tests__/sync-plan-status.test.js.map +1 -0
- package/dist/__tests__/template-loader-editor.test.d.ts +2 -0
- package/dist/__tests__/template-loader-editor.test.d.ts.map +1 -0
- package/dist/__tests__/template-loader-editor.test.js +141 -0
- package/dist/__tests__/template-loader-editor.test.js.map +1 -0
- package/dist/index.d.ts +5 -2
- 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 +5 -1
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +4 -1
- package/dist/persistence.js.map +1 -1
- package/dist/plan-sync.d.ts +10 -0
- package/dist/plan-sync.d.ts.map +1 -0
- package/dist/plan-sync.js +37 -0
- package/dist/plan-sync.js.map +1 -0
- package/dist/projects-fs.d.ts +2 -0
- package/dist/projects-fs.d.ts.map +1 -1
- package/dist/projects-fs.js +1 -0
- package/dist/projects-fs.js.map +1 -1
- package/dist/recovery.d.ts +1 -1
- package/dist/recovery.js +1 -1
- package/dist/roles/role-loader.d.ts +19 -0
- package/dist/roles/role-loader.d.ts.map +1 -1
- package/dist/roles/role-loader.js +115 -4
- package/dist/roles/role-loader.js.map +1 -1
- package/dist/roles/types.d.ts +13 -0
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/swarm-coordinator.d.ts +87 -9
- package/dist/swarm-coordinator.d.ts.map +1 -1
- package/dist/swarm-coordinator.js +392 -60
- package/dist/swarm-coordinator.js.map +1 -1
- package/dist/templates/template-loader.d.ts +26 -0
- package/dist/templates/template-loader.d.ts.map +1 -1
- package/dist/templates/template-loader.js +128 -14
- package/dist/templates/template-loader.js.map +1 -1
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
- package/roles/queen.md +26 -0
- package/dist/message-router.d.ts +0 -37
- package/dist/message-router.d.ts.map +0 -1
- package/dist/message-router.js +0 -60
- package/dist/message-router.js.map +0 -1
package/roles/queen.md
CHANGED
|
@@ -92,6 +92,32 @@ protocol:
|
|
|
92
92
|
6. 所有任务完成后,让 reviewer 审查(如果有),然后汇总报告
|
|
93
93
|
7. **最终汇报**:确认所有工作完成后,**必须**通过 `mcp__clawnet-mcp__task_set_status` 把根任务状态标为 `completed` 或 `failed`,并用自然语言对用户做一段简短总结后保持沉默,等待下一条 inbox 消息。蜂群目前**不会自动回收资源**——是否销毁蜂群由用户主动操作;你不需要、也不应该输出任何"等待系统回收""资源已释放"之类的文字。
|
|
94
94
|
|
|
95
|
+
### plan↔task 外键约定(强制)
|
|
96
|
+
|
|
97
|
+
当你从 plan 派生任务时,**必须**在 `mcp__clawnet-mcp__task_create` / `mcp__clawnet-mcp__task_create_from_message` 调用中传入 `planTaskId` 参数,值为 plan 中该任务的 id(例如 `"t1"`、`"t2.5"`)。这是 UI 显示 plan 进度的唯一依据——遗漏会导致对应的 plan 节点永远显示 `pending`,即使 live task 已经 `completed`。
|
|
98
|
+
|
|
99
|
+
只有不来自任何 plan 节点的临时任务(极少见)才可以省略 `planTaskId`。
|
|
100
|
+
|
|
101
|
+
#### 派生 plan 任务前必做(不可省略)
|
|
102
|
+
|
|
103
|
+
每次准备调用 `task_create` / `task_create_from_message` 派生 plan 中的任务前,**必须先在对话中输出一段映射说明**,让用户/审查者能核对你做的关联:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
[plan-mapping]
|
|
107
|
+
- t1 → 即将创建 live task "扫描目录现状"
|
|
108
|
+
- t2.1 → 即将创建 live task "实现星空 Canvas"
|
|
109
|
+
[/plan-mapping]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
然后**每次 `task_create` 调用都必须传 `planTaskId` 参数**,值为对应的 plan 节点 id。
|
|
113
|
+
|
|
114
|
+
为了进一步降低遗漏概率,工具会在两种情况下返回提示,请你认真阅读返回内容:
|
|
115
|
+
|
|
116
|
+
1. **`ℹ 已从 subject 推断 planTaskId='tX'`** — 你忘了显式传 `planTaskId`,但服务器从 subject 的 `t1: ...` / `[t2.5] ...` 前缀里推断出了一个。请核对推断是否正确;不对就再调一次显式传 `planTaskId`,**或** `mcp__clawnet-mcp__task_set_status` 取消错误任务后重建。
|
|
117
|
+
2. **`⚠ Plan link warning: ...`** — swarm 已有 plan,但本次创建的 task 没能关联到 plan 节点(缺 `planTaskId` 或拼写错误)。如果是 plan 派生任务**必须**补传 `planTaskId`;如果确实是临时调试任务可以忽略该 warning。
|
|
118
|
+
|
|
119
|
+
不要把 `[plan-mapping]` 说明和上述提示混淆——映射说明是你**事前**输出,提示是工具**事后**返回。
|
|
120
|
+
|
|
95
121
|
### 输出格式约束(重要)
|
|
96
122
|
|
|
97
123
|
- ✅ 用自然语言(中文)对用户讲话,必要时穿插 markdown。
|
package/dist/message-router.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { SessionAdapter } from "./types.js";
|
|
2
|
-
import type { SwarmMessage, RouteEndpoint } from "./types.js";
|
|
3
|
-
export interface DeliveryResult {
|
|
4
|
-
delivered: boolean;
|
|
5
|
-
reason?: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Abstract message router — decouples communication from transport.
|
|
9
|
-
* LocalMessageRouter uses stdin/stdout via SessionAdapter.
|
|
10
|
-
* Future RemoteMessageRouter can use Hub WebSocket relay.
|
|
11
|
-
*/
|
|
12
|
-
export interface MessageRouter {
|
|
13
|
-
/** Send a message to a specific role instance */
|
|
14
|
-
send(targetInstanceId: string, message: SwarmMessage): DeliveryResult;
|
|
15
|
-
/** Broadcast a message to all active role instances */
|
|
16
|
-
broadcast(message: SwarmMessage, excludeInstanceId?: string): void;
|
|
17
|
-
/** Register a role instance in the routing table */
|
|
18
|
-
register(instanceId: string, endpoint: RouteEndpoint): void;
|
|
19
|
-
/** Unregister a role instance */
|
|
20
|
-
unregister(instanceId: string): void;
|
|
21
|
-
/** Check if a route exists */
|
|
22
|
-
has(instanceId: string): boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Routes messages to local Claude CLI processes via SessionAdapter.sendInput().
|
|
26
|
-
*/
|
|
27
|
-
export declare class LocalMessageRouter implements MessageRouter {
|
|
28
|
-
private sessionAdapter;
|
|
29
|
-
private routes;
|
|
30
|
-
constructor(sessionAdapter: SessionAdapter);
|
|
31
|
-
send(targetInstanceId: string, message: SwarmMessage): DeliveryResult;
|
|
32
|
-
broadcast(message: SwarmMessage, excludeInstanceId?: string): void;
|
|
33
|
-
register(instanceId: string, endpoint: RouteEndpoint): void;
|
|
34
|
-
unregister(instanceId: string): void;
|
|
35
|
-
has(instanceId: string): boolean;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=message-router.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO9D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC;IAEtE,uDAAuD;IACvD,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnE,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE5D,iCAAiC;IACjC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,8BAA8B;IAC9B,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAID;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAG1C,OAAO,CAAC,cAAc;IAFlC,OAAO,CAAC,MAAM,CAAoC;gBAE9B,cAAc,EAAE,cAAc;IAElD,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc;IAuBrE,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI3D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAGjC"}
|
package/dist/message-router.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "@mclawnet/logger";
|
|
2
|
-
const log = createLogger({ module: "swarm/router" });
|
|
3
|
-
// ── Local Implementation ────────────────────────────────────────────
|
|
4
|
-
/**
|
|
5
|
-
* Routes messages to local Claude CLI processes via SessionAdapter.sendInput().
|
|
6
|
-
*/
|
|
7
|
-
export class LocalMessageRouter {
|
|
8
|
-
sessionAdapter;
|
|
9
|
-
routes = new Map();
|
|
10
|
-
constructor(sessionAdapter) {
|
|
11
|
-
this.sessionAdapter = sessionAdapter;
|
|
12
|
-
}
|
|
13
|
-
send(targetInstanceId, message) {
|
|
14
|
-
const endpoint = this.routes.get(targetInstanceId);
|
|
15
|
-
if (!endpoint) {
|
|
16
|
-
log.warn({ targetInstanceId }, "no route found");
|
|
17
|
-
return { delivered: false, reason: "no_route" };
|
|
18
|
-
}
|
|
19
|
-
if (endpoint.kind === "local") {
|
|
20
|
-
try {
|
|
21
|
-
const formatted = formatMessageForClaude(message);
|
|
22
|
-
this.sessionAdapter.sendInput(endpoint.roleSessionId, formatted);
|
|
23
|
-
return { delivered: true };
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
log.warn({ targetInstanceId, err }, "stdin write failed");
|
|
27
|
-
return { delivered: false, reason: "write_failed" };
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// Remote routing — not yet implemented
|
|
31
|
-
log.warn({ targetInstanceId }, "remote routing not yet implemented");
|
|
32
|
-
return { delivered: false, reason: "remote_not_implemented" };
|
|
33
|
-
}
|
|
34
|
-
broadcast(message, excludeInstanceId) {
|
|
35
|
-
for (const [instanceId] of this.routes) {
|
|
36
|
-
if (instanceId !== excludeInstanceId) {
|
|
37
|
-
this.send(instanceId, message);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
register(instanceId, endpoint) {
|
|
42
|
-
this.routes.set(instanceId, endpoint);
|
|
43
|
-
}
|
|
44
|
-
unregister(instanceId) {
|
|
45
|
-
this.routes.delete(instanceId);
|
|
46
|
-
}
|
|
47
|
-
has(instanceId) {
|
|
48
|
-
return this.routes.has(instanceId);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// ── Formatting ──────────────────────────────────────────────────────
|
|
52
|
-
function formatMessageForClaude(message) {
|
|
53
|
-
const parts = [];
|
|
54
|
-
parts.push(`[来自 ${message.from}]`);
|
|
55
|
-
if (message.taskId)
|
|
56
|
-
parts.push(`(任务: ${message.taskId})`);
|
|
57
|
-
parts.push(message.data);
|
|
58
|
-
return parts.join(" ");
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=message-router.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AAiCrD,uEAAuE;AAEvE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAGT;IAFZ,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAElD,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAEtD,IAAI,CAAC,gBAAwB,EAAE,OAAqB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACjD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBACjE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,oCAAoC,CAAC,CAAC;QACrE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,OAAqB,EAAE,iBAA0B;QACzD,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,UAAU,KAAK,iBAAiB,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,UAAkB,EAAE,QAAuB;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,UAAkB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AAED,uEAAuE;AAEvE,SAAS,sBAAsB,CAAC,OAAqB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|