@hpplay-lebo/cluster-hub 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +243 -0
- package/docs/CLI.md +279 -0
- package/openclaw.plugin.json +151 -0
- package/package.json +40 -0
- package/src/hub-client.ts +720 -0
- package/src/index.ts +1714 -0
- package/src/store.ts +337 -0
- package/src/types.ts +245 -0
package/README.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# @hpplay-lebo/cluster-hub
|
|
2
|
+
|
|
3
|
+
OpenClaw Hub 集群插件 — 让多台 OpenClaw 节点跨网络协作,实现聊天、任务分发和集群管理。
|
|
4
|
+
|
|
5
|
+
## 功能
|
|
6
|
+
|
|
7
|
+
- 🌐 **跨网络组网** — 通过云端 Hub 中转,不同网络下的 OpenClaw 节点自动组成集群
|
|
8
|
+
- 💬 **节点间聊天** — 从飞书/控制台与集群中任意节点对话(不限父子关系)
|
|
9
|
+
- ⚡ **任务分发** — 向子节点下发任务,支持批量并行 + 等待汇总
|
|
10
|
+
- 🌳 **树形集群** — 支持多层树形结构(最大深度 5 层),邀请码加入
|
|
11
|
+
- 📊 **状态监控** — 实时心跳、在线状态、任务统计
|
|
12
|
+
- 🔌 **自动重连** — 断线后自动重连,离线消息队列
|
|
13
|
+
- 🛠️ **CLI + AI 工具 + RPC** — 三种使用方式
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
### 方式一:npm 安装(推荐)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @hpplay-lebo/cluster-hub
|
|
21
|
+
|
|
22
|
+
# 链接到 OpenClaw 插件目录
|
|
23
|
+
ln -s $(npm root)/@hpplay-lebo/cluster-hub ~/.openclaw/extensions/cluster-hub
|
|
24
|
+
|
|
25
|
+
# 重启 Gateway
|
|
26
|
+
openclaw gateway restart
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 方式二:手动安装
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 下载/复制插件到 extensions 目录
|
|
33
|
+
cp -r cluster-hub ~/.openclaw/extensions/cluster-hub
|
|
34
|
+
|
|
35
|
+
# 重启 Gateway
|
|
36
|
+
openclaw gateway restart
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 验证安装
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
openclaw plugins list
|
|
43
|
+
# 应看到 cluster-hub 状态为 loaded
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 配置
|
|
47
|
+
|
|
48
|
+
安装后编辑 `~/.openclaw/openclaw.json`,在 `plugins.entries` 中添加 `cluster-hub` 配置:
|
|
49
|
+
|
|
50
|
+
```jsonc
|
|
51
|
+
{
|
|
52
|
+
"plugins": {
|
|
53
|
+
"entries": {
|
|
54
|
+
"cluster-hub": {
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"config": {
|
|
57
|
+
// Hub 服务地址
|
|
58
|
+
"hubUrl": "https://hub.openclaw.ai",
|
|
59
|
+
// 节点显示名称
|
|
60
|
+
"nodeName": "My Mac",
|
|
61
|
+
// 节点别名(集群内唯一,用于 #别名 提及)
|
|
62
|
+
"nodeAlias": "home",
|
|
63
|
+
// 能力标签
|
|
64
|
+
"capabilities": ["coding", "shell"],
|
|
65
|
+
// 启动时自动连接 Hub
|
|
66
|
+
"autoConnect": true
|
|
67
|
+
|
|
68
|
+
// === 以下字段注册后自动写入,无需手动填 ===
|
|
69
|
+
// "nodeId": "",
|
|
70
|
+
// "token": "",
|
|
71
|
+
// "clusterId": "",
|
|
72
|
+
// "parentId": null
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> **注意**: 以上只展示了 `cluster-hub` 相关配置,实际 `openclaw.json` 中还有其他配置项(`auth`、`agents`、`channels` 等),请勿覆盖已有内容。
|
|
81
|
+
|
|
82
|
+
### 加入已有集群(子节点)
|
|
83
|
+
|
|
84
|
+
获取父节点的 ID 和邀请码,在配置中添加 `parentId`:
|
|
85
|
+
|
|
86
|
+
```jsonc
|
|
87
|
+
{
|
|
88
|
+
"config": {
|
|
89
|
+
"hubUrl": "https://hub.openclaw.ai",
|
|
90
|
+
"nodeName": "Office Mac",
|
|
91
|
+
"nodeAlias": "office",
|
|
92
|
+
"parentId": "父节点的UUID",
|
|
93
|
+
"capabilities": ["coding", "shell"]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 快速开始
|
|
99
|
+
|
|
100
|
+
### 1. 创建集群(根节点)
|
|
101
|
+
|
|
102
|
+
配置好 `hubUrl`、`nodeName`、`nodeAlias` 后注册:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
openclaw hub register
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
注册成功后 `nodeId`、`token`、`clusterId` 自动写入配置。
|
|
109
|
+
|
|
110
|
+
### 2. 加入集群(子节点)
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
openclaw hub register --parent <父节点ID> --invite <邀请码>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3. 开始使用
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# 查看集群状态
|
|
120
|
+
openclaw hub status
|
|
121
|
+
|
|
122
|
+
# 查看所有节点
|
|
123
|
+
openclaw hub nodes
|
|
124
|
+
|
|
125
|
+
# 给节点发指令
|
|
126
|
+
openclaw hub send <节点别名> "检查磁盘空间"
|
|
127
|
+
|
|
128
|
+
# 查看任务
|
|
129
|
+
openclaw hub tasks
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## AI 工具
|
|
133
|
+
|
|
134
|
+
安装后 AI 自动获得以下工具:
|
|
135
|
+
|
|
136
|
+
| 工具 | 说明 |
|
|
137
|
+
|------|------|
|
|
138
|
+
| `hub_status` | 查看 Hub 连接状态和节点列表 |
|
|
139
|
+
| `hub_nodes` | 列出集群所有节点详情 |
|
|
140
|
+
| `hub_send` | 给节点发送任务 |
|
|
141
|
+
| `hub_batch_send` | 批量向多个节点下发任务(并行) |
|
|
142
|
+
| `hub_wait_task` | 等待单个任务完成并返回结果 |
|
|
143
|
+
| `hub_wait_all` | 等待多个任务全部完成并汇总 |
|
|
144
|
+
| `hub_tasks` | 查看任务队列和历史 |
|
|
145
|
+
|
|
146
|
+
**AI 对话示例:**
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
"查看集群状态"
|
|
150
|
+
"让 #office 执行 ls -la"
|
|
151
|
+
"给所有节点发送 '报告系统负载'"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Gateway RPC
|
|
155
|
+
|
|
156
|
+
插件向 Gateway 注册了 18+ 个 RPC 方法(`hub.*`),供控制台和外部工具调用:
|
|
157
|
+
|
|
158
|
+
| RPC | 说明 |
|
|
159
|
+
|-----|------|
|
|
160
|
+
| `hub.status` | 连接状态 + changeSeq |
|
|
161
|
+
| `hub.connect` / `hub.disconnect` | 连接/断开 Hub |
|
|
162
|
+
| `hub.register` / `hub.unregister` | 注册/注销节点 |
|
|
163
|
+
| `hub.nodes` / `hub.node` | 节点列表/详情 |
|
|
164
|
+
| `hub.children` / `hub.tree` / `hub.clusters` | 子节点/树形/集群 |
|
|
165
|
+
| `hub.node.update` | 更新节点名称/别名 |
|
|
166
|
+
| `hub.invite.set` / `hub.invite.get` | 设置/获取邀请码 |
|
|
167
|
+
| `hub.task.send` / `hub.task.list` / `hub.task.get` / `hub.task.cancel` / `hub.task.clear` | 任务管理 |
|
|
168
|
+
| `hub.chat.send` / `hub.chat.history` / `hub.chat.list` / `hub.chat.clear` | 聊天管理 |
|
|
169
|
+
| `hub.node.events` | 节点上下线事件 |
|
|
170
|
+
|
|
171
|
+
## 配置项
|
|
172
|
+
|
|
173
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
174
|
+
|--------|------|--------|------|
|
|
175
|
+
| `hubUrl` | string | — | Hub 服务地址 |
|
|
176
|
+
| `nodeName` | string | — | 节点显示名称 |
|
|
177
|
+
| `nodeAlias` | string | — | 节点别名(`#` 提及用,集群内唯一) |
|
|
178
|
+
| `capabilities` | string[] | `["coding","shell"]` | 能力标签 |
|
|
179
|
+
| `parentId` | string\|null | null | 父节点 ID(null = 创建新集群) |
|
|
180
|
+
| `autoConnect` | boolean | true | 启动时自动连接 |
|
|
181
|
+
| `selfTaskMode` | `"local"\|"hub"` | `"local"` | 自发任务模式 |
|
|
182
|
+
| `heartbeatIntervalMs` | number | 30000 | 心跳间隔 (ms) |
|
|
183
|
+
| `reconnectIntervalMs` | number | 5000 | 断线重连间隔 (ms) |
|
|
184
|
+
| `taskTimeoutMs` | number | 300000 | 任务超时 (ms) |
|
|
185
|
+
| `nodeId` | string | — | 注册后自动写入 |
|
|
186
|
+
| `token` | string | — | JWT Token,注册后自动写入 |
|
|
187
|
+
| `clusterId` | string | — | 集群 ID,注册后自动写入 |
|
|
188
|
+
|
|
189
|
+
## 消息类型
|
|
190
|
+
|
|
191
|
+
Hub 节点间通过 WebSocket 通信,支持以下消息类型:
|
|
192
|
+
|
|
193
|
+
| 类型 | 方向 | 说明 |
|
|
194
|
+
|------|------|------|
|
|
195
|
+
| `task` | 父→子 | 下发任务 |
|
|
196
|
+
| `result` | 子→父 | 任务结果 |
|
|
197
|
+
| `task_ack` / `task_status` | 子→父 | 任务状态上报 |
|
|
198
|
+
| `task_cancel` | 父→子 | 取消任务 |
|
|
199
|
+
| `chat` | 任意 | 节点间聊天(不限父子) |
|
|
200
|
+
| `direct` | 任意 | 点对点消息(同集群) |
|
|
201
|
+
| `broadcast` | 父→全部 | 广播 |
|
|
202
|
+
| `heartbeat` | 双向 | 心跳保活 |
|
|
203
|
+
|
|
204
|
+
## 文件结构
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
cluster-hub/
|
|
208
|
+
├── package.json
|
|
209
|
+
├── openclaw.plugin.json # 插件清单 + 配置 Schema
|
|
210
|
+
├── README.md
|
|
211
|
+
├── docs/
|
|
212
|
+
│ └── CLI.md # CLI 命令完整参考
|
|
213
|
+
└── src/
|
|
214
|
+
├── index.ts # 插件入口(RPC + AI 工具 + CLI + 后台服务)
|
|
215
|
+
├── hub-client.ts # Hub 通讯客户端(WebSocket + REST)
|
|
216
|
+
├── store.ts # 持久化存储(任务/聊天/节点事件)
|
|
217
|
+
└── types.ts # 类型定义
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## 架构
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
┌─────────────────┐ ┌─────────────────┐
|
|
224
|
+
│ OpenClaw Node │ │ OpenClaw Node │
|
|
225
|
+
│ (cluster-hub) │ │ (cluster-hub) │
|
|
226
|
+
└────────┬────────┘ └────────┬────────┘
|
|
227
|
+
│ WebSocket │ WebSocket
|
|
228
|
+
└──────────┐ ┌─────────┘
|
|
229
|
+
┌───┴──┴───┐
|
|
230
|
+
│ Hub 服务 │
|
|
231
|
+
│ (云端中转) │
|
|
232
|
+
└───┬──┬───┘
|
|
233
|
+
┌──────────┘ └─────────┐
|
|
234
|
+
│ WebSocket │ WebSocket
|
|
235
|
+
┌────────┴────────┐ ┌────────┴────────┐
|
|
236
|
+
│ OpenClaw Node │ │ 飞书机器人 │
|
|
237
|
+
│ (cluster-hub) │ │ (Hub 内置) │
|
|
238
|
+
└─────────────────┘ └─────────────────┘
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## License
|
|
242
|
+
|
|
243
|
+
MIT
|
package/docs/CLI.md
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# OpenClaw Hub CLI 命令参考
|
|
2
|
+
|
|
3
|
+
所有命令以 `openclaw hub` 开头。
|
|
4
|
+
|
|
5
|
+
## 命令列表
|
|
6
|
+
|
|
7
|
+
| 命令 | 说明 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| `openclaw hub status` | 查看 Hub 连接和集群状态 |
|
|
10
|
+
| `openclaw hub nodes` | 列出所有节点(表格形式) |
|
|
11
|
+
| `openclaw hub tree` | 显示节点树形结构 |
|
|
12
|
+
| `openclaw hub register` | 注册本节点到 Hub |
|
|
13
|
+
| `openclaw hub unregister` | 从 Hub 注销节点 |
|
|
14
|
+
| `openclaw hub send` | 给节点发送指令/任务 |
|
|
15
|
+
| `openclaw hub tasks` | 查看任务列表 |
|
|
16
|
+
| `openclaw hub connect` | 手动连接 Hub |
|
|
17
|
+
| `openclaw hub disconnect` | 断开 Hub 连接 |
|
|
18
|
+
| `openclaw hub help` | 列出所有可用命令 |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 详细说明
|
|
23
|
+
|
|
24
|
+
### `openclaw hub status`
|
|
25
|
+
|
|
26
|
+
查看 Hub 连接状态、注册状态、自发任务模式、任务统计和在线节点。
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
openclaw hub status
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
输出示例:
|
|
33
|
+
```
|
|
34
|
+
📡 Hub 集群状态
|
|
35
|
+
|
|
36
|
+
连接: ✅ 已连接
|
|
37
|
+
注册: ✅ 已注册
|
|
38
|
+
节点: 16578344-4e63-442e-930a-2090a1f6cc13
|
|
39
|
+
自发任务: 🏠 本地模式
|
|
40
|
+
任务: 0 进行中, 3 完成, 0 失败
|
|
41
|
+
|
|
42
|
+
节点列表 (2):
|
|
43
|
+
🟢 招财Mac (@home) [coding,shell] load=0%
|
|
44
|
+
⚫ 办公室Mac (@office) [coding,shell] load=0%
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### `openclaw hub nodes`
|
|
50
|
+
|
|
51
|
+
以表格形式列出集群中所有节点的详细信息。
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
openclaw hub nodes
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
显示字段:id、name、alias、online、parent、load、capabilities
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### `openclaw hub tree`
|
|
62
|
+
|
|
63
|
+
以树形结构显示本集群的节点层级关系。
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
openclaw hub tree
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
输出示例:
|
|
70
|
+
```
|
|
71
|
+
└── 🟢 招财Mac (@home)
|
|
72
|
+
├── 🟢 办公室Mac (@office)
|
|
73
|
+
└── ⚫ 树莓派 (@rpi)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### `openclaw hub register`
|
|
79
|
+
|
|
80
|
+
注册本节点到 Hub 集群。注册成功后 `nodeId`、`token`、`clusterId` 自动写入配置。
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# 注册为根节点(创建新集群)
|
|
84
|
+
openclaw hub register --name "我的Mac" --alias "home"
|
|
85
|
+
|
|
86
|
+
# 注册为子节点(加入已有集群)
|
|
87
|
+
openclaw hub register --name "办公室Mac" --alias "office" --parent <父节点ID>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**参数:**
|
|
91
|
+
|
|
92
|
+
| 参数 | 说明 |
|
|
93
|
+
|------|------|
|
|
94
|
+
| `--name <name>` | 节点显示名称 |
|
|
95
|
+
| `--alias <alias>` | 节点别名(同集群内唯一,用于 @提及) |
|
|
96
|
+
| `--parent <parentId>` | 父节点 ID(不填则创建新集群为根节点) |
|
|
97
|
+
|
|
98
|
+
> ⚠️ 别名(alias)在同一集群中必须唯一,否则注册会失败(`ALIAS_CONFLICT`)。
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### `openclaw hub unregister`
|
|
103
|
+
|
|
104
|
+
从 Hub 注销节点,清除注册信息。
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# 注销自己
|
|
108
|
+
openclaw hub unregister
|
|
109
|
+
|
|
110
|
+
# 注销指定节点
|
|
111
|
+
openclaw hub unregister --node <nodeId>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**参数:**
|
|
115
|
+
|
|
116
|
+
| 参数 | 说明 |
|
|
117
|
+
|------|------|
|
|
118
|
+
| `--node <nodeId>` | 指定要注销的节点 ID(默认注销自己) |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### `openclaw hub send <nodeId> <instruction>`
|
|
123
|
+
|
|
124
|
+
给指定节点发送任务指令。
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 发送任务给子节点
|
|
128
|
+
openclaw hub send <nodeId> "检查磁盘空间"
|
|
129
|
+
|
|
130
|
+
# 自发本地任务(selfTaskMode=local 时同步等结果)
|
|
131
|
+
openclaw hub send <自己的nodeId> "执行 ls -la"
|
|
132
|
+
|
|
133
|
+
# 指定超时
|
|
134
|
+
openclaw hub send <nodeId> "编译项目" --timeout 600000
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**参数:**
|
|
138
|
+
|
|
139
|
+
| 参数 | 说明 |
|
|
140
|
+
|------|------|
|
|
141
|
+
| `<nodeId>` | 目标节点 ID(必填) |
|
|
142
|
+
| `<instruction>` | 任务指令内容(必填) |
|
|
143
|
+
| `--timeout <ms>` | 超时毫秒数(默认 300000 = 5分钟) |
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
### `openclaw hub tasks`
|
|
148
|
+
|
|
149
|
+
查看任务列表(表格形式),显示任务 ID、目标节点、状态、指令摘要和耗时。
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# 查看最近任务
|
|
153
|
+
openclaw hub tasks
|
|
154
|
+
|
|
155
|
+
# 指定数量
|
|
156
|
+
openclaw hub tasks --limit 50
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**参数:**
|
|
160
|
+
|
|
161
|
+
| 参数 | 说明 |
|
|
162
|
+
|------|------|
|
|
163
|
+
| `--limit <n>` | 显示数量(默认 20) |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### `openclaw hub connect`
|
|
168
|
+
|
|
169
|
+
手动连接到 Hub WebSocket。通常不需要手动调用(`autoConnect: true` 时自动连接)。
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
openclaw hub connect
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
### `openclaw hub disconnect`
|
|
178
|
+
|
|
179
|
+
手动断开 Hub WebSocket 连接。
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
openclaw hub disconnect
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### `openclaw hub help`
|
|
188
|
+
|
|
189
|
+
列出所有可用的 hub 子命令。
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
openclaw hub help
|
|
193
|
+
# 或
|
|
194
|
+
openclaw hub --help
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## AI 工具
|
|
200
|
+
|
|
201
|
+
除 CLI 外,插件还注册了以下 AI 工具,可在对话中自然调用:
|
|
202
|
+
|
|
203
|
+
| 工具 | 说明 | 使用方式 |
|
|
204
|
+
|------|------|----------|
|
|
205
|
+
| `hub_status` | 查看集群状态 | "查看 Hub 状态" |
|
|
206
|
+
| `hub_nodes` | 列出所有节点 | "列出 Hub 节点" |
|
|
207
|
+
| `hub_send` | 发送任务(单个) | "让 @home 执行 xxx" |
|
|
208
|
+
| `hub_batch_send` | 批量下发任务(并行) | "同时让三个节点分别执行..." |
|
|
209
|
+
| `hub_wait_task` | 等待单个任务完成 | "等任务 xxx 完成后告诉我结果" |
|
|
210
|
+
| `hub_wait_all` | 等待多个任务全部完成 | "等所有任务完成后汇总" |
|
|
211
|
+
| `hub_tasks` | 查看任务进度 | "看看 Hub 任务进度" |
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Gateway RPC
|
|
216
|
+
|
|
217
|
+
插件注册的所有 Gateway RPC 方法(供控制台/程序调用):
|
|
218
|
+
|
|
219
|
+
### 状态与连接
|
|
220
|
+
| RPC | 说明 |
|
|
221
|
+
|-----|------|
|
|
222
|
+
| `hub.status` | 获取整体状态(连接、节点列表、任务摘要) |
|
|
223
|
+
| `hub.connect` | 手动连接 Hub |
|
|
224
|
+
| `hub.disconnect` | 断开连接 |
|
|
225
|
+
| `hub.ping` | 检查连通性 |
|
|
226
|
+
| `hub.config.get` | 获取当前配置 |
|
|
227
|
+
| `hub.config.set` | 更新配置 |
|
|
228
|
+
|
|
229
|
+
### 节点管理
|
|
230
|
+
| RPC | 参数 | 说明 |
|
|
231
|
+
|-----|------|------|
|
|
232
|
+
| `hub.nodes` | — | 获取所有节点列表 |
|
|
233
|
+
| `hub.node.get` | `nodeId` | 获取单个节点信息 |
|
|
234
|
+
| `hub.node.update` | `nodeId, name?, alias?` | 更新节点名称/别名 |
|
|
235
|
+
| `hub.tree` | `nodeId?` | 获取树形结构 |
|
|
236
|
+
| `hub.children` | `nodeId?` | 获取直接子节点 |
|
|
237
|
+
| `hub.clusters` | — | 获取集群列表 |
|
|
238
|
+
| `hub.register` | `name, alias, parentId?, capabilities?` | 注册节点 |
|
|
239
|
+
| `hub.register.child` | `name, alias, parentId?, capabilities?` | 注册子节点 |
|
|
240
|
+
| `hub.unregister` | `nodeId?` | 注销节点 |
|
|
241
|
+
| `hub.reparent` | `nodeId, newParentId` | 变更父节点 |
|
|
242
|
+
|
|
243
|
+
### 邀请码
|
|
244
|
+
| RPC | 说明 |
|
|
245
|
+
|-----|------|
|
|
246
|
+
| `hub.invite-code.get` | 获取当前邀请码 |
|
|
247
|
+
| `hub.invite-code.set` | 设置/刷新邀请码(可选 `code` 参数) |
|
|
248
|
+
|
|
249
|
+
### 任务系统
|
|
250
|
+
| RPC | 参数 | 说明 |
|
|
251
|
+
|-----|------|------|
|
|
252
|
+
| `hub.task.send` | `nodeId, instruction` | 发送任务(异步) |
|
|
253
|
+
| `hub.task.batch` | `tasks: [{nodeId, instruction}]` | 批量下发任务(并行) |
|
|
254
|
+
| `hub.task.list` | `nodeId?, status?, limit?` | 获取任务列表 |
|
|
255
|
+
| `hub.task.get` | `taskId` | 获取单个任务 |
|
|
256
|
+
| `hub.task.cancel` | `taskId` | 取消任务 |
|
|
257
|
+
| `hub.task.clear` | `before?` | 清理已完成任务 |
|
|
258
|
+
|
|
259
|
+
### 远程聊天
|
|
260
|
+
| RPC | 参数 | 说明 |
|
|
261
|
+
|-----|------|------|
|
|
262
|
+
| `hub.chat.send` | `nodeId, content, whole?, autoRefreshMs?` | 发送聊天消息 |
|
|
263
|
+
| `hub.chat.history` | `nodeId, limit?` | 获取聊天记录 |
|
|
264
|
+
| `hub.chat.list` | — | 获取活跃聊天节点列表 |
|
|
265
|
+
| `hub.chat.clear` | `nodeId` | 清除聊天记录 |
|
|
266
|
+
|
|
267
|
+
### 节点事件
|
|
268
|
+
| RPC | 说明 |
|
|
269
|
+
|-----|------|
|
|
270
|
+
| `hub.node.events` | 获取节点上下线事件记录 |
|
|
271
|
+
|
|
272
|
+
### 兼容旧接口
|
|
273
|
+
| RPC | 说明 |
|
|
274
|
+
|-----|------|
|
|
275
|
+
| `hub.send` | → `hub.task.send` |
|
|
276
|
+
| `hub.send.sync` | 自发本地同步执行 |
|
|
277
|
+
| `hub.tasks` | → `hub.task.list` + 队列状态 |
|
|
278
|
+
| `hub.messages` | 获取消息历史 |
|
|
279
|
+
| `hub.messages.clear` | 清除消息 |
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "cluster-hub",
|
|
3
|
+
"name": "Cluster Hub",
|
|
4
|
+
"version": "2.0.0",
|
|
5
|
+
"description": "OpenClaw Hub 云端集群插件 — 通过 Hub 中转实现跨网络节点注册、任务分发、实时通讯",
|
|
6
|
+
"author": "招财",
|
|
7
|
+
"configSchema": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"additionalProperties": false,
|
|
10
|
+
"properties": {
|
|
11
|
+
"hubUrl": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"default": "https://openclaw-hub.hpplay.com.cn",
|
|
14
|
+
"description": "Hub 服务地址"
|
|
15
|
+
},
|
|
16
|
+
"adminKey": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Hub Admin Key(用于注册根节点)"
|
|
19
|
+
},
|
|
20
|
+
"nodeId": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "本节点 ID(注册后自动写入)"
|
|
23
|
+
},
|
|
24
|
+
"nodeName": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "本节点显示名称"
|
|
27
|
+
},
|
|
28
|
+
"nodeAlias": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"description": "本节点别名(用于 @ 提及)"
|
|
31
|
+
},
|
|
32
|
+
"token": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"description": "Node Token(JWT,注册后自动写入)"
|
|
35
|
+
},
|
|
36
|
+
"clusterId": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "所属集群 ID(注册后自动写入)"
|
|
39
|
+
},
|
|
40
|
+
"parentId": {
|
|
41
|
+
"type": [
|
|
42
|
+
"string",
|
|
43
|
+
"null"
|
|
44
|
+
],
|
|
45
|
+
"description": "父节点 ID(null = 根节点)"
|
|
46
|
+
},
|
|
47
|
+
"capabilities": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
},
|
|
52
|
+
"default": [
|
|
53
|
+
"coding",
|
|
54
|
+
"shell"
|
|
55
|
+
],
|
|
56
|
+
"description": "本节点能力标签"
|
|
57
|
+
},
|
|
58
|
+
"heartbeatIntervalMs": {
|
|
59
|
+
"type": "number",
|
|
60
|
+
"default": 30000,
|
|
61
|
+
"description": "心跳间隔 (ms)"
|
|
62
|
+
},
|
|
63
|
+
"reconnectIntervalMs": {
|
|
64
|
+
"type": "number",
|
|
65
|
+
"default": 5000,
|
|
66
|
+
"description": "断线重连间隔 (ms)"
|
|
67
|
+
},
|
|
68
|
+
"taskTimeoutMs": {
|
|
69
|
+
"type": "number",
|
|
70
|
+
"default": 300000,
|
|
71
|
+
"description": "任务默认超时 (ms)"
|
|
72
|
+
},
|
|
73
|
+
"autoConnect": {
|
|
74
|
+
"type": "boolean",
|
|
75
|
+
"default": true,
|
|
76
|
+
"description": "启动时自动连接 Hub WebSocket"
|
|
77
|
+
},
|
|
78
|
+
"autoInjectSession": {
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"default": true,
|
|
81
|
+
"description": "收到任务时自动注入主会话执行"
|
|
82
|
+
},
|
|
83
|
+
"selfTaskMode": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"enum": [
|
|
86
|
+
"local",
|
|
87
|
+
"hub"
|
|
88
|
+
],
|
|
89
|
+
"default": "local",
|
|
90
|
+
"description": "自发任务执行模式:local=本地直接执行,hub=通过Hub中转"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"uiHints": {
|
|
95
|
+
"hubUrl": {
|
|
96
|
+
"label": "Hub 地址",
|
|
97
|
+
"placeholder": "https://openclaw-hub.hpplay.com.cn"
|
|
98
|
+
},
|
|
99
|
+
"adminKey": {
|
|
100
|
+
"label": "Admin Key",
|
|
101
|
+
"sensitive": true
|
|
102
|
+
},
|
|
103
|
+
"nodeId": {
|
|
104
|
+
"label": "节点 ID",
|
|
105
|
+
"help": "注册后自动填写"
|
|
106
|
+
},
|
|
107
|
+
"nodeName": {
|
|
108
|
+
"label": "节点名称",
|
|
109
|
+
"placeholder": "我的 Mac"
|
|
110
|
+
},
|
|
111
|
+
"nodeAlias": {
|
|
112
|
+
"label": "节点别名",
|
|
113
|
+
"placeholder": "home"
|
|
114
|
+
},
|
|
115
|
+
"token": {
|
|
116
|
+
"label": "Node Token",
|
|
117
|
+
"sensitive": true,
|
|
118
|
+
"help": "注册后自动填写"
|
|
119
|
+
},
|
|
120
|
+
"clusterId": {
|
|
121
|
+
"label": "集群 ID",
|
|
122
|
+
"help": "注册后自动填写"
|
|
123
|
+
},
|
|
124
|
+
"parentId": {
|
|
125
|
+
"label": "父节点 ID",
|
|
126
|
+
"help": "null 表示根节点"
|
|
127
|
+
},
|
|
128
|
+
"capabilities": {
|
|
129
|
+
"label": "能力标签",
|
|
130
|
+
"help": "coding, shell, browser, gpu 等"
|
|
131
|
+
},
|
|
132
|
+
"heartbeatIntervalMs": {
|
|
133
|
+
"label": "心跳间隔",
|
|
134
|
+
"suffix": "ms"
|
|
135
|
+
},
|
|
136
|
+
"reconnectIntervalMs": {
|
|
137
|
+
"label": "重连间隔",
|
|
138
|
+
"suffix": "ms"
|
|
139
|
+
},
|
|
140
|
+
"taskTimeoutMs": {
|
|
141
|
+
"label": "任务超时",
|
|
142
|
+
"suffix": "ms"
|
|
143
|
+
},
|
|
144
|
+
"autoConnect": {
|
|
145
|
+
"label": "自动连接"
|
|
146
|
+
},
|
|
147
|
+
"autoInjectSession": {
|
|
148
|
+
"label": "收到任务自动执行"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hpplay-lebo/cluster-hub",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "OpenClaw Hub cluster plugin — cross-network node collaboration, chat, and task orchestration",
|
|
5
|
+
"author": "HPPlay",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/shenyingjun5/cluster-hub"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/shenyingjun5/cluster-hub#readme",
|
|
12
|
+
"openclaw": {
|
|
13
|
+
"extensions": [
|
|
14
|
+
"./src/index.ts"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"src/",
|
|
19
|
+
"openclaw.plugin.json",
|
|
20
|
+
"README.md",
|
|
21
|
+
"docs/"
|
|
22
|
+
],
|
|
23
|
+
"keywords": [
|
|
24
|
+
"openclaw",
|
|
25
|
+
"openclaw-plugin",
|
|
26
|
+
"cluster",
|
|
27
|
+
"hub",
|
|
28
|
+
"multi-node",
|
|
29
|
+
"task-orchestration",
|
|
30
|
+
"ai-agent"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc --noEmit"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.19.33",
|
|
37
|
+
"@types/ws": "^8.18.1",
|
|
38
|
+
"typescript": "^5.9.3"
|
|
39
|
+
}
|
|
40
|
+
}
|