claw_messenger 1.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/LICENSE +21 -0
- package/README.md +577 -0
- package/bin/auto-init.js +104 -0
- package/bin/cli.js +5 -0
- package/bin/diagnose-plugin.js +174 -0
- package/bin/dm-bridge.cjs +12 -0
- package/bin/install.js +452 -0
- package/bin/postinstall.js +23 -0
- package/bin/qr-crypto-node.js +186 -0
- package/bin/setup.js +262 -0
- package/dist/auto-register.d.ts +49 -0
- package/dist/auto-register.js +328 -0
- package/dist/bridge-runner.d.ts +1 -0
- package/dist/bridge-runner.js +107 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +164 -0
- package/dist/device-status.d.ts +30 -0
- package/dist/device-status.js +109 -0
- package/dist/env-polyfill.d.ts +3 -0
- package/dist/env-polyfill.js +166 -0
- package/dist/group-config-manager.d.ts +22 -0
- package/dist/group-config-manager.js +130 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +36 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.js +103 -0
- package/dist/mac-address.d.ts +1 -0
- package/dist/mac-address.js +46 -0
- package/dist/openclaw-client.d.ts +41 -0
- package/dist/openclaw-client.js +530 -0
- package/dist/openclaw-config.d.ts +41 -0
- package/dist/openclaw-config.js +359 -0
- package/dist/openclaw.plugin.json +40 -0
- package/dist/package.json +112 -0
- package/dist/plugin-entry.d.ts +54 -0
- package/dist/plugin-entry.js +772 -0
- package/dist/postinstall.js +23 -0
- package/dist/rongcloud-client.d.ts +16 -0
- package/dist/rongcloud-client.js +274 -0
- package/dist/rongcloud-server-api.d.ts +53 -0
- package/dist/rongcloud-server-api.js +221 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.js +97 -0
- package/openclaw.plugin.json +40 -0
- package/package.json +112 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 quukk
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
# Claw Messenger
|
|
2
|
+
|
|
3
|
+
虾说 IM 的 OpenClaw 插件与 CLI 管理工具。提供融云消息收发、后台服务管理、节点注册等一站式能力。
|
|
4
|
+
|
|
5
|
+
## 功能概述
|
|
6
|
+
|
|
7
|
+
- **OpenClaw 插件**:作为 OpenClaw Channel,打通 IM 消息与 AI 能力
|
|
8
|
+
- **后台服务管理**:自动安装/更新 `claw-subagent-service`,支持系统服务注册
|
|
9
|
+
- **节点注册**:自动向虾说后端注册节点,获取融云 token
|
|
10
|
+
- **多平台支持**:Windows(系统服务)、Linux(systemd)、macOS(launchd)、Docker
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 环境要求
|
|
15
|
+
|
|
16
|
+
| 项目 | 要求 |
|
|
17
|
+
|------|------|
|
|
18
|
+
| Node.js | >= 16.0.0 |
|
|
19
|
+
| OpenClaw | >= 2026.3.24(peer dependency,可选
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
### npx 快速安装(推荐)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx claw_messenger@latest
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
按提示输入节点昵称,脚本会自动完成:
|
|
32
|
+
1. 将插件安装到 OpenClaw extensions 目录
|
|
33
|
+
2. 安装/更新 `claw-subagent-service` 后台服务
|
|
34
|
+
3. 注册系统服务(Windows/Linux 有管理员权限时)
|
|
35
|
+
4. 向虾说后端注册节点并获取融云 token
|
|
36
|
+
5. 显示节点二维码,扫码即可添加
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 常用命令
|
|
41
|
+
|
|
42
|
+
### 主安装脚本
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# 交互式安装/更新(注册节点 + 安装后台服务 + 配置插件)
|
|
46
|
+
npx claw_messenger
|
|
47
|
+
# 或
|
|
48
|
+
claw_messenger
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 后台服务管理
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 安装为系统服务(开机自启)
|
|
55
|
+
clawmessenger install-service
|
|
56
|
+
|
|
57
|
+
# 卸载系统服务
|
|
58
|
+
clawmessenger uninstall-service
|
|
59
|
+
|
|
60
|
+
# 查看服务状态
|
|
61
|
+
clawmessenger status
|
|
62
|
+
|
|
63
|
+
# 手动下载/更新后台服务包
|
|
64
|
+
clawmessenger download
|
|
65
|
+
|
|
66
|
+
# 检测并确保后台服务运行
|
|
67
|
+
clawmessenger ensure
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### OpenClaw 桥接
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# 启动交互式桥接(直接向 OpenClaw 发送消息并获取回复)
|
|
74
|
+
claw-bridge
|
|
75
|
+
|
|
76
|
+
# 重新配置节点昵称(重新注册节点)
|
|
77
|
+
claw-bridge-setup
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 平台部署指南
|
|
83
|
+
|
|
84
|
+
### Windows
|
|
85
|
+
|
|
86
|
+
#### 环境准备
|
|
87
|
+
|
|
88
|
+
- 安装 Node.js(建议 v20 LTS)
|
|
89
|
+
- 安装 OpenClaw(如需插件模式)
|
|
90
|
+
|
|
91
|
+
#### 安装
|
|
92
|
+
|
|
93
|
+
以**管理员身份**运行 PowerShell:
|
|
94
|
+
|
|
95
|
+
```powershell
|
|
96
|
+
npx claw_messenger@latest
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
安装完成后会自动注册 Windows 系统服务并开机自启。
|
|
100
|
+
|
|
101
|
+
#### 常用管理命令
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
# 查看服务状态
|
|
105
|
+
clawmessenger status
|
|
106
|
+
|
|
107
|
+
# 手动安装/刷新系统服务
|
|
108
|
+
clawmessenger install-service
|
|
109
|
+
|
|
110
|
+
# 卸载系统服务
|
|
111
|
+
clawmessenger uninstall-service
|
|
112
|
+
|
|
113
|
+
# 停止服务
|
|
114
|
+
sc.exe stop claw-subagent-service
|
|
115
|
+
|
|
116
|
+
# 启动服务
|
|
117
|
+
sc.exe start claw-subagent-service
|
|
118
|
+
|
|
119
|
+
# 查看服务详情
|
|
120
|
+
sc.exe query claw-subagent-service
|
|
121
|
+
sc.exe qc claw-subagent-service
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
#### 注意事项
|
|
125
|
+
|
|
126
|
+
- **必须以管理员身份运行**,否则无法注册系统服务
|
|
127
|
+
- 如果 `npm update -g` 报 `EBUSY: resource busy or locked`,说明旧服务进程仍在运行:
|
|
128
|
+
```powershell
|
|
129
|
+
net stop "claw-subagent-service" 2>$null
|
|
130
|
+
sc.exe delete "claw-subagent-service" 2>$null
|
|
131
|
+
taskkill /f /im "clawsubagentservice.exe" 2>$null
|
|
132
|
+
npm install -g claw_messenger@latest
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### Linux(systemd)
|
|
138
|
+
|
|
139
|
+
#### 环境准备
|
|
140
|
+
|
|
141
|
+
- Node.js >= 16
|
|
142
|
+
- `systemctl` 可用(大多数现代 Linux 发行版)
|
|
143
|
+
|
|
144
|
+
#### 安装
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
npx claw_messenger@latest
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
如果提示权限不足,使用 sudo:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
sudo npx claw_messenger@latest
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### 常用管理命令
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 查看服务状态
|
|
160
|
+
sudo systemctl status claw-subagent-service
|
|
161
|
+
|
|
162
|
+
# 启动/停止/重启
|
|
163
|
+
sudo systemctl start claw-subagent-service
|
|
164
|
+
sudo systemctl stop claw-subagent-service
|
|
165
|
+
sudo systemctl restart claw-subagent-service
|
|
166
|
+
|
|
167
|
+
# 设置/取消开机自启
|
|
168
|
+
sudo systemctl enable claw-subagent-service
|
|
169
|
+
sudo systemctl disable claw-subagent-service
|
|
170
|
+
|
|
171
|
+
# 查看日志
|
|
172
|
+
sudo journalctl -u claw-subagent-service -f
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### 故障排查
|
|
176
|
+
|
|
177
|
+
**203/EXEC 错误(Node 路径问题)**
|
|
178
|
+
|
|
179
|
+
使用 nvm 时,systemd 服务文件中的 Node 路径可能不正确:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# 1. 确认实际 node 路径
|
|
183
|
+
which node
|
|
184
|
+
|
|
185
|
+
# 2. 修正服务文件
|
|
186
|
+
sudo sed -i "s|ExecStart=.*|ExecStart=$(which node) $(npm root -g)/claw-subagent-service/service/daemon.js|" /etc/systemd/system/claw-subagent-service.service
|
|
187
|
+
|
|
188
|
+
# 3. 重载并启动
|
|
189
|
+
sudo systemctl daemon-reload
|
|
190
|
+
sudo systemctl start claw-subagent-service
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
### Linux(无 systemd / Docker)
|
|
196
|
+
|
|
197
|
+
#### 直接运行
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm install -g claw_messenger@latest
|
|
201
|
+
|
|
202
|
+
# 前台运行(调试用)
|
|
203
|
+
clawmessenger ensure
|
|
204
|
+
# 或
|
|
205
|
+
claw-subagent-service --run
|
|
206
|
+
|
|
207
|
+
# 后台运行
|
|
208
|
+
nohup claw-subagent-service --run > /dev/null 2>&1 &
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
#### Docker 部署
|
|
212
|
+
|
|
213
|
+
```dockerfile
|
|
214
|
+
FROM node:20-alpine
|
|
215
|
+
|
|
216
|
+
# 安装必要工具
|
|
217
|
+
RUN apk add --no-cache lsof curl
|
|
218
|
+
|
|
219
|
+
# 安装 claw_messenger(会自动安装后台服务)
|
|
220
|
+
RUN npm install -g claw_messenger@latest
|
|
221
|
+
|
|
222
|
+
# 暴露健康检查端口
|
|
223
|
+
EXPOSE 28765
|
|
224
|
+
|
|
225
|
+
# 环境变量
|
|
226
|
+
ENV SILENT_SERVICE_HOST=0.0.0.0
|
|
227
|
+
ENV SILENT_SERVICE_PORT=28765
|
|
228
|
+
|
|
229
|
+
# 前台运行
|
|
230
|
+
CMD ["claw-subagent-service", "--run"]
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
构建并运行:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
docker build -t claw-messenger:latest .
|
|
237
|
+
|
|
238
|
+
docker run -d --name claw-messenger \
|
|
239
|
+
-p 28765:28765 \
|
|
240
|
+
--restart unless-stopped \
|
|
241
|
+
-e SILENT_SERVICE_HOST=0.0.0.0 \
|
|
242
|
+
claw-messenger:latest
|
|
243
|
+
|
|
244
|
+
# 查看日志
|
|
245
|
+
docker logs -f claw-messenger
|
|
246
|
+
|
|
247
|
+
# 健康检查
|
|
248
|
+
curl http://localhost:28765/health
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Docker 注意事项**:
|
|
252
|
+
|
|
253
|
+
- 必须设置 `SILENT_SERVICE_HOST=0.0.0.0`,否则外部无法访问健康检查端口
|
|
254
|
+
- 精简镜像(Alpine)建议安装 `lsof`,否则端口冲突时无法自动释放
|
|
255
|
+
- Docker 内无需 systemd,直接使用 `--run` 前台运行
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
### macOS
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
npx claw_messenger@latest
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
macOS 会尝试使用 `launchd` 注册系统服务,或使用用户级守护进程作为兜底。
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 配置说明
|
|
270
|
+
|
|
271
|
+
### 环境变量
|
|
272
|
+
|
|
273
|
+
| 变量名 | 默认值 | 说明 |
|
|
274
|
+
|--------|--------|------|
|
|
275
|
+
| `DM_APP_KEY` | `bmdehs6pbyyks` | 融云应用 Key |
|
|
276
|
+
| `DM_SERVER_URL` | `https://newsradar.dreamdt.cn/im` | 虾说后端服务地址 |
|
|
277
|
+
| `SILENT_SERVICE_HOST` | `127.0.0.1` | 后台服务 HTTP 监听地址(Docker 需改为 `0.0.0.0`) |
|
|
278
|
+
| `SILENT_SERVICE_PORT` | `28765` | 后台服务 HTTP 监听端口 |
|
|
279
|
+
| `OPENCLAW_PROFILE` | - | OpenClaw 配置文件后缀(多环境时使用) |
|
|
280
|
+
|
|
281
|
+
### 配置文件位置
|
|
282
|
+
|
|
283
|
+
- **节点配置**:`~/.claw-bridge/openclaw/config.json`
|
|
284
|
+
- **OpenClaw 插件目录**:`~/.openclaw/extensions/claw_messenger/`
|
|
285
|
+
- **后台服务数据**:`~/.clawmessenger/`
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 健康检查
|
|
290
|
+
|
|
291
|
+
### HTTP 接口
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# 健康检查
|
|
295
|
+
curl http://127.0.0.1:28765/health
|
|
296
|
+
# 预期返回: alive
|
|
297
|
+
|
|
298
|
+
# 查看版本
|
|
299
|
+
curl http://127.0.0.1:28765/version
|
|
300
|
+
|
|
301
|
+
# 查看融云连接状态
|
|
302
|
+
curl http://127.0.0.1:28765/rongcloud/status
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### CLI 状态检查
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
clawmessenger status
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## 日志查看
|
|
314
|
+
|
|
315
|
+
### 日志文件位置
|
|
316
|
+
|
|
317
|
+
后台服务(`claw-subagent-service`)将日志写入安装目录下的 `logs/` 文件夹中:
|
|
318
|
+
|
|
319
|
+
| 平台 | 日志目录 |
|
|
320
|
+
|------|----------|
|
|
321
|
+
| npm 全局安装(Linux/macOS) | `$(npm root -g)/claw-subagent-service/logs/` |
|
|
322
|
+
| npm 全局安装(Windows) | `%APPDATA%\npm\node_modules\claw-subagent-service\logs\` |
|
|
323
|
+
| 用户级安装(无管理员权限) | `~/claw-subagent-service/logs/` |
|
|
324
|
+
| 本地源码运行 | `./silent-service/logs/` |
|
|
325
|
+
|
|
326
|
+
日志文件按日期和组件分类:
|
|
327
|
+
- `worker-YYYY-MM-DD.log` — Worker 进程日志(融云消息收发、OpenClaw 调用)
|
|
328
|
+
- `daemon-YYYY-MM-DD.log` — Daemon 进程日志(服务生命周期管理)
|
|
329
|
+
- `updater-YYYY-MM-DD.log` — 自动更新日志
|
|
330
|
+
|
|
331
|
+
### 快速查看命令
|
|
332
|
+
|
|
333
|
+
#### Linux / macOS / Docker
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
# 1. 确定安装路径
|
|
337
|
+
INSTALL_DIR=$(npm root -g)/claw-subagent-service
|
|
338
|
+
# 如果是本地源码运行
|
|
339
|
+
# INSTALL_DIR=/data/node_cli
|
|
340
|
+
|
|
341
|
+
# 2. 查看当天 worker 日志(实时跟踪)
|
|
342
|
+
tail -f $INSTALL_DIR/logs/worker-$(date +%Y-%m-%d).log
|
|
343
|
+
|
|
344
|
+
# 3. 查看当天 worker 日志(最后 100 行)
|
|
345
|
+
tail -n 100 $INSTALL_DIR/logs/worker-$(date +%Y-%m-%d).log
|
|
346
|
+
|
|
347
|
+
# 4. 查看 daemon 日志
|
|
348
|
+
tail -f $INSTALL_DIR/logs/daemon-$(date +%Y-%m-%d).log
|
|
349
|
+
|
|
350
|
+
# 5. 查看所有日志文件列表
|
|
351
|
+
ls -la $INSTALL_DIR/logs/
|
|
352
|
+
|
|
353
|
+
# 6. 搜索特定关键词(如错误、SSE、融云)
|
|
354
|
+
grep -i "error\|sse\|融云\|rongcloud" $INSTALL_DIR/logs/worker-$(date +%Y-%m-%d).log
|
|
355
|
+
|
|
356
|
+
# 7. 查看最近 1 小时内的日志
|
|
357
|
+
grep "$(date -d '1 hour ago' +%H)" $INSTALL_DIR/logs/worker-$(date +%Y-%m-%d).log
|
|
358
|
+
|
|
359
|
+
# 8. 合并查看 worker + daemon 日志(按时间排序)
|
|
360
|
+
cat $INSTALL_DIR/logs/worker-$(date +%Y-%m-%d).log $INSTALL_DIR/logs/daemon-$(date +%Y-%m-%d).log | sort
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
#### Docker 专用命令
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# 查看容器内日志文件(进入容器后执行)
|
|
367
|
+
docker exec -it <容器名> sh -c "tail -f \$(npm root -g)/claw-subagent-service/logs/worker-\$(date +%Y-%m-%d).log"
|
|
368
|
+
|
|
369
|
+
# 直接在宿主机查看(如果日志挂载到卷)
|
|
370
|
+
docker exec <容器名> cat /usr/lib/node_modules/claw-subagent-service/logs/worker-$(date +%Y-%m-%d).log
|
|
371
|
+
|
|
372
|
+
# 查看容器标准输出
|
|
373
|
+
docker logs -f <容器名> --tail 200
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
#### Windows
|
|
377
|
+
|
|
378
|
+
```powershell
|
|
379
|
+
# 查看当天 worker 日志
|
|
380
|
+
Get-Content "$((npm root -g)\claw-subagent-service\logs\worker-$(Get-Date -Format yyyy-MM-dd).log)" -Tail 100
|
|
381
|
+
|
|
382
|
+
# 查看 daemon 日志
|
|
383
|
+
Get-Content "$((npm root -g)\claw-subagent-service\logs\daemon-$(Get-Date -Format yyyy-MM-dd).log)" -Tail 100
|
|
384
|
+
|
|
385
|
+
# 搜索错误
|
|
386
|
+
Select-String -Path "$((npm root -g)\claw-subagent-service\logs\*.log)" -Pattern "ERROR|error|失败"
|
|
387
|
+
|
|
388
|
+
# wrapper 日志(node-windows 生成)
|
|
389
|
+
Get-Content "$env:APPDATA\npm\node_modules\claw-subagent-service\service\daemon\clawsubagentservice.wrapper.log" -Tail 50
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### 按运行模式查看日志
|
|
393
|
+
|
|
394
|
+
#### systemd 模式
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
# 查看 systemd 管理的日志
|
|
398
|
+
sudo journalctl -u claw-subagent-service -f
|
|
399
|
+
|
|
400
|
+
# 查看最近 50 条日志
|
|
401
|
+
sudo journalctl -u claw-subagent-service -n 50
|
|
402
|
+
|
|
403
|
+
# 查看今天所有日志
|
|
404
|
+
sudo journalctl -u claw-subagent-service --since today
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
#### 用户级守护进程模式(无 systemd)
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
# 查找日志目录(可能在多个位置)
|
|
411
|
+
find / -name "worker-*.log" -path "*/claw-subagent-service/logs/*" 2>/dev/null
|
|
412
|
+
|
|
413
|
+
# 常见路径
|
|
414
|
+
# /usr/lib/node_modules/claw-subagent-service/logs/
|
|
415
|
+
# /root/.clawmessenger/logs/
|
|
416
|
+
# ~/claw-subagent-service/logs/
|
|
417
|
+
|
|
418
|
+
# 实时监控
|
|
419
|
+
LOG_DIR=$(find /usr -name "claw-subagent-service" -path "*/node_modules/*" 2>/dev/null | head -1)/logs
|
|
420
|
+
tail -f $LOG_DIR/worker-$(date +%Y-%m-%d).log
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
#### 前台运行模式(调试)
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
# 直接运行,日志输出到终端
|
|
427
|
+
claw-subagent-service --run
|
|
428
|
+
|
|
429
|
+
# 后台运行并保存到文件
|
|
430
|
+
nohup claw-subagent-service --run > /tmp/claw-subagent.log 2>&1 &
|
|
431
|
+
tail -f /tmp/claw-subagent.log
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Linux
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
# systemd 日志
|
|
438
|
+
sudo journalctl -u claw-subagent-service -f
|
|
439
|
+
|
|
440
|
+
# 日志文件
|
|
441
|
+
tail -f ~/claw-subagent-service/logs/worker-$(date +%Y-%m-%d).log
|
|
442
|
+
tail -f ~/claw-subagent-service/logs/daemon-$(date +%Y-%m-%d).log
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Docker
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
docker logs -f claw-messenger --tail 100
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## 故障排查
|
|
454
|
+
|
|
455
|
+
### 安装失败 / 服务未注册
|
|
456
|
+
|
|
457
|
+
**Windows**:
|
|
458
|
+
|
|
459
|
+
```powershell
|
|
460
|
+
# 检查服务是否已注册
|
|
461
|
+
sc.exe query claw-subagent-service
|
|
462
|
+
|
|
463
|
+
# 手动注册
|
|
464
|
+
clawmessenger install-service
|
|
465
|
+
|
|
466
|
+
# 如果仍失败,检查 wrapper 日志
|
|
467
|
+
Get-Content "$env:APPDATA\npm\node_modules\claw-subagent-service\service\daemon\clawsubagentservice.wrapper.log" -Tail 30
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
**Linux**:
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
# 检查服务文件是否存在
|
|
474
|
+
ls -la /etc/systemd/system/claw-subagent-service.service
|
|
475
|
+
|
|
476
|
+
# 手动注册
|
|
477
|
+
sudo claw-subagent-service --install
|
|
478
|
+
|
|
479
|
+
# 检查状态
|
|
480
|
+
sudo systemctl status claw-subagent-service
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### 端口 28765 被占用
|
|
484
|
+
|
|
485
|
+
**Docker / 精简系统**:
|
|
486
|
+
|
|
487
|
+
缺少 `lsof` 会导致服务无法释放被占用的端口:
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
# 安装 lsof
|
|
491
|
+
apk add lsof # Alpine
|
|
492
|
+
apt-get install lsof # Debian/Ubuntu
|
|
493
|
+
|
|
494
|
+
# 检查是否有多个实例
|
|
495
|
+
ps aux | grep node
|
|
496
|
+
|
|
497
|
+
# 杀掉占用进程后重启
|
|
498
|
+
kill -9 <PID>
|
|
499
|
+
claw-subagent-service --run
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### 融云连接失败
|
|
503
|
+
|
|
504
|
+
1. 检查节点是否已注册:`cat ~/.claw-bridge/openclaw/config.json`
|
|
505
|
+
2. 检查 token 是否有效
|
|
506
|
+
3. 检查网络是否可以访问融云服务器
|
|
507
|
+
|
|
508
|
+
### 插件未加载
|
|
509
|
+
|
|
510
|
+
1. 确认插件已安装到 OpenClaw extensions 目录:`ls ~/.openclaw/extensions/claw_messenger/`
|
|
511
|
+
2. 重启 OpenClaw
|
|
512
|
+
3. 检查 OpenClaw 日志中的插件加载信息
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## 卸载
|
|
517
|
+
|
|
518
|
+
### Windows
|
|
519
|
+
|
|
520
|
+
```powershell
|
|
521
|
+
# 方式一:npm 卸载(自动清理服务)
|
|
522
|
+
npm uninstall -g claw_messenger
|
|
523
|
+
|
|
524
|
+
# 方式二:手动彻底清理
|
|
525
|
+
net stop "claw-subagent-service" 2>$null
|
|
526
|
+
sc.exe delete "claw-subagent-service" 2>$null
|
|
527
|
+
taskkill /f /im "clawsubagentservice.exe" 2>$null
|
|
528
|
+
npm uninstall -g claw_messenger claw-subagent-service
|
|
529
|
+
Remove-Item -Recurse -Force "$env:USERPROFILE\claw-subagent-service" -ErrorAction SilentlyContinue
|
|
530
|
+
Remove-Item -Recurse -Force "$env:USERPROFILE\.claw-bridge\openclaw" -ErrorAction SilentlyContinue
|
|
531
|
+
Remove-Item -Recurse -Force "$env:USERPROFILE\.clawmessenger" -ErrorAction SilentlyContinue
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
### Linux
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
# 停止并禁用服务
|
|
538
|
+
sudo systemctl stop claw-subagent-service
|
|
539
|
+
sudo systemctl disable claw-subagent-service
|
|
540
|
+
|
|
541
|
+
# 卸载
|
|
542
|
+
sudo claw-subagent-service --uninstall
|
|
543
|
+
npm uninstall -g claw_messenger claw-subagent-service
|
|
544
|
+
|
|
545
|
+
# 手动清理残留
|
|
546
|
+
sudo rm -f /etc/systemd/system/claw-subagent-service.service
|
|
547
|
+
sudo systemctl daemon-reload
|
|
548
|
+
rm -rf ~/claw-subagent-service
|
|
549
|
+
rm -rf ~/.claw-bridge/openclaw
|
|
550
|
+
rm -rf ~/.clawmessenger
|
|
551
|
+
rm -f /tmp/.claw-subagent-service.pid
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Docker
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
docker stop claw-messenger
|
|
558
|
+
docker rm claw-messenger
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## 开发
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
git clone <repository-url>
|
|
567
|
+
cd clawmessenger
|
|
568
|
+
npm install
|
|
569
|
+
npm run build
|
|
570
|
+
npm test
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## License
|
|
576
|
+
|
|
577
|
+
MIT
|
package/bin/auto-init.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* claw_messenger - 自动初始化
|
|
5
|
+
* 无需用户交互,自动生成配置
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as crypto from 'crypto';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
import axios from 'axios';
|
|
13
|
+
|
|
14
|
+
const SERVER_URL = process.env.DM_SERVER_URL || 'https://newsradar.dreamdt.cn/im';
|
|
15
|
+
const CONFIG_DIR = path.join(os.homedir(), '.claw-bridge', 'openclaw');
|
|
16
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
17
|
+
const LEGACY_CONFIG_FILE = path.join(os.homedir(), '.claw-bridge', 'config.json');
|
|
18
|
+
|
|
19
|
+
function generateNodeId() {
|
|
20
|
+
const random = crypto.randomBytes(3).toString('hex');
|
|
21
|
+
return `claw_${random}`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function loadConfig() {
|
|
25
|
+
try {
|
|
26
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
27
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
28
|
+
return JSON.parse(content);
|
|
29
|
+
}
|
|
30
|
+
// 兼容旧路径
|
|
31
|
+
if (fs.existsSync(LEGACY_CONFIG_FILE)) {
|
|
32
|
+
const content = fs.readFileSync(LEGACY_CONFIG_FILE, 'utf-8');
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
} catch {}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function saveConfig(config) {
|
|
40
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
41
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function registerNode(nodeName) {
|
|
47
|
+
const nodeId = generateNodeId();
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
const resp = await axios.post(`${SERVER_URL}/api/claw/register`, {
|
|
51
|
+
node_id: nodeId,
|
|
52
|
+
name: nodeName,
|
|
53
|
+
}, { timeout: 10000 });
|
|
54
|
+
|
|
55
|
+
if (resp.data?.code === 200 || resp.data?.code === 409) {
|
|
56
|
+
const tokenResp = await axios.get(`${SERVER_URL}/api/claw/token/${nodeId}`, { timeout: 10000 });
|
|
57
|
+
|
|
58
|
+
if (tokenResp.data?.code === 200) {
|
|
59
|
+
return {
|
|
60
|
+
nodeId,
|
|
61
|
+
token: tokenResp.data.data.token,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return null;
|
|
67
|
+
} catch (err) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function main() {
|
|
73
|
+
// 检查已有配置
|
|
74
|
+
let config = loadConfig();
|
|
75
|
+
|
|
76
|
+
if (config) {
|
|
77
|
+
// 已有配置,跳过
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 自动生成节点名
|
|
82
|
+
const nodeName = `OpenClaw-${crypto.randomBytes(2).toString('hex')}`;
|
|
83
|
+
|
|
84
|
+
// 注册节点
|
|
85
|
+
const result = await registerNode(nodeName);
|
|
86
|
+
|
|
87
|
+
if (!result) {
|
|
88
|
+
throw new Error('自动注册失败');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
config = {
|
|
92
|
+
nodeId: result.nodeId,
|
|
93
|
+
nodeName: nodeName,
|
|
94
|
+
token: result.token,
|
|
95
|
+
createdAt: new Date().toISOString(),
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
saveConfig(config);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
main().catch(err => {
|
|
102
|
+
// 静默失败,不影响安装
|
|
103
|
+
process.exit(0);
|
|
104
|
+
});
|