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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +577 -0
  3. package/bin/auto-init.js +104 -0
  4. package/bin/cli.js +5 -0
  5. package/bin/diagnose-plugin.js +174 -0
  6. package/bin/dm-bridge.cjs +12 -0
  7. package/bin/install.js +452 -0
  8. package/bin/postinstall.js +23 -0
  9. package/bin/qr-crypto-node.js +186 -0
  10. package/bin/setup.js +262 -0
  11. package/dist/auto-register.d.ts +49 -0
  12. package/dist/auto-register.js +328 -0
  13. package/dist/bridge-runner.d.ts +1 -0
  14. package/dist/bridge-runner.js +107 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +164 -0
  17. package/dist/device-status.d.ts +30 -0
  18. package/dist/device-status.js +109 -0
  19. package/dist/env-polyfill.d.ts +3 -0
  20. package/dist/env-polyfill.js +166 -0
  21. package/dist/group-config-manager.d.ts +22 -0
  22. package/dist/group-config-manager.js +130 -0
  23. package/dist/index.d.ts +17 -0
  24. package/dist/index.js +36 -0
  25. package/dist/logger.d.ts +14 -0
  26. package/dist/logger.js +103 -0
  27. package/dist/mac-address.d.ts +1 -0
  28. package/dist/mac-address.js +46 -0
  29. package/dist/openclaw-client.d.ts +41 -0
  30. package/dist/openclaw-client.js +530 -0
  31. package/dist/openclaw-config.d.ts +41 -0
  32. package/dist/openclaw-config.js +359 -0
  33. package/dist/openclaw.plugin.json +40 -0
  34. package/dist/package.json +112 -0
  35. package/dist/plugin-entry.d.ts +54 -0
  36. package/dist/plugin-entry.js +772 -0
  37. package/dist/postinstall.js +23 -0
  38. package/dist/rongcloud-client.d.ts +16 -0
  39. package/dist/rongcloud-client.js +274 -0
  40. package/dist/rongcloud-server-api.d.ts +53 -0
  41. package/dist/rongcloud-server-api.js +221 -0
  42. package/dist/utils.d.ts +9 -0
  43. package/dist/utils.js +97 -0
  44. package/openclaw.plugin.json +40 -0
  45. 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
@@ -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
+ });
package/bin/cli.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/cli.js').catch((err) => {
3
+ console.error('[clawmessenger] 启动失败:', err.message)
4
+ process.exit(1)
5
+ })