@wenbin_wb/dsh-bridge 2.8.7 → 2.9.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/CHANGELOG.md +295 -250
- package/README.en.md +408 -572
- package/README.md +430 -570
- package/client/client.js +3844 -3764
- package/client/index.js +140 -876
- package/client/mobile-styles.js +802 -0
- package/docs/fix-plan-202608.md +108 -0
- package/lib/auth/login-template.js +381 -381
- package/lib/auth/manager.js +531 -469
- package/lib/bridge-rpc.js +436 -511
- package/lib/cloudflared-manager.mjs +361 -345
- package/lib/compat.js +129 -0
- package/lib/feishu/index.js +225 -222
- package/lib/feishu/node.js +433 -409
- package/lib/index.js +1765 -1804
- package/lib/platform/base.js +147 -156
- package/lib/platform/commands.js +221 -0
- package/lib/platform/conversation-bridge.js +816 -1570
- package/lib/platform/dsh-storage.js +117 -0
- package/lib/platform/index.js +10 -10
- package/lib/platform/message-split.js +191 -0
- package/lib/platform/session-catalog.js +372 -0
- package/lib/platform/stream-slices.js +21 -0
- package/lib/qq/index.js +312 -309
- package/lib/qq/node.js +532 -533
- package/lib/telegram/index.js +215 -212
- package/lib/telegram/node.js +348 -350
- package/lib/tunnel-client.mjs +39 -15
- package/lib/wechat/gateway.js +973 -960
- package/lib/wechat/index.js +244 -241
- package/lib/wechat/media.js +285 -281
- package/lib/wechat/node.js +352 -350
- package/package.json +106 -102
package/README.md
CHANGED
|
@@ -1,570 +1,430 @@
|
|
|
1
|
-
# dsh-bridge
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
4
|
-
<img src="docs/banner.jpg" alt="dsh-bridge banner" width="100%" />
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@wenbin_wb/dsh-bridge"><img src="https://img.shields.io/npm/v/@wenbin_wb/dsh-bridge.svg?style=flat-square&color=38bdf8&logo=npm" alt="npm version" /></a>
|
|
9
|
-
<a href="https://www.npmjs.com/package/@wenbin_wb/dsh-bridge"><img src="https://img.shields.io/npm/dt/@wenbin_wb/dsh-bridge.svg?style=flat-square&color=fbbf24&logo=npm" alt="npm downloads" /></a>
|
|
10
|
-
<a href="https://github.com/wenbin-wb/dsh-bridge/releases"><img src="https://img.shields.io/github/v/release/wenbin-wb/dsh-bridge?style=flat-square&color=10b981&logo=github" alt="GitHub release" /></a>
|
|
11
|
-
<a href="https://github.com/wenbin-wb/dsh-bridge/stargazers"><img src="https://img.shields.io/github/stars/wenbin-wb/dsh-bridge?style=flat-square&color=f43f5e&logo=github" alt="GitHub stars" /></a>
|
|
12
|
-
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-%E2%89%A522.19%20%7C%20%E2%89%A524-339933?style=flat-square&logo=node.js" alt="Node.js version" /></a>
|
|
13
|
-
<a href="LICENSE"><img src="https://img.shields.io/npm/l/@wenbin_wb/dsh-bridge?style=flat-square&color=a855f7" alt="license" /></a>
|
|
14
|
-
</p>
|
|
15
|
-
|
|
16
|
-
<p align="center">
|
|
17
|
-
<img src="https://img.shields.io/badge/Security-Access%20Auth%20%2B%20PBKDF2-6366f1?style=flat-square&logo=security" alt="Security" />
|
|
18
|
-
<img src="https://img.shields.io/badge/WeChat-ClawBot%20%7C%20iLink-07C160?style=flat-square&logo=wechat" alt="WeChat" />
|
|
19
|
-
<img src="https://img.shields.io/badge/QQ%20Bot-OpenAPI%20v2-12B7F5?style=flat-square&logo=tencentqq" alt="QQ" />
|
|
20
|
-
<img src="https://img.shields.io/badge/Feishu-WebSocket%202.0-00D6B9?style=flat-square&logo=lark" alt="Feishu" />
|
|
21
|
-
<img src="https://img.shields.io/badge/Telegram-Bot%20API-24A1DE?style=flat-square&logo=telegram" alt="Telegram" />
|
|
22
|
-
<img src="https://img.shields.io/badge/Cloudflare-Tunnel-F38020?style=flat-square&logo=cloudflare" alt="Cloudflare" />
|
|
23
|
-
</p>
|
|
24
|
-
|
|
25
|
-
<p align="center">
|
|
26
|
-
<b>简体中文</b> | <a href="README.en.md">English</a>
|
|
27
|
-
</p>
|
|
28
|
-
|
|
29
|
-
> **DeepSeek Harness 多通道远程访问与全域安全门禁插件**
|
|
30
|
-
>
|
|
31
|
-
> 手机扫个码,人不在电脑前也能继续用 DeepSeek Harness
|
|
32
|
-
>
|
|
33
|
-
>
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
#
|
|
102
|
-
dsh --
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
-
|
|
178
|
-
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
</
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
<
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
-
|
|
211
|
-
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
<
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
|
334
|
-
|
|
|
335
|
-
|
|
|
336
|
-
| `/
|
|
337
|
-
| `/
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
<
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
---
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
2. 在「事件与回调」中开启「使用长连接接收事件」,添加 `im.message.receive_v1` 和 `card.action.trigger` 事件
|
|
432
|
-
3. 打开 DSH 设置页「远程访问」→「IM 机器人」→ 选中「飞书」
|
|
433
|
-
4. 填入 App ID 和 App Secret,点击「保存并连接」即可
|
|
434
|
-
|
|
435
|
-
**飞书里的命令**(完整说明见 [飞书 Bot 使用说明](docs/feishu-usage.md))
|
|
436
|
-
|
|
437
|
-
| 命令 | 说明 |
|
|
438
|
-
|------|------|
|
|
439
|
-
| *(普通文本)* | 发给当前活动 agent |
|
|
440
|
-
| `/new <提示词>` | 在当前工作区新建会话并开始 |
|
|
441
|
-
| `/new <提示词> @N` | 在指定工作区新建会话 |
|
|
442
|
-
| `/sessions`(或 `/list`) | 查看所有历史会话(结构化表格排版) |
|
|
443
|
-
| `/use N`(或 `/resume N`) | 切换到会话 N |
|
|
444
|
-
| `/rename <新标题>` | 重命名当前活动会话 |
|
|
445
|
-
| `/workspaces` | 列出可用工作区 |
|
|
446
|
-
| `/addworkspace <路径>` | 注册添加新的电脑工作区目录 |
|
|
447
|
-
| `/end` | 结束当前会话 |
|
|
448
|
-
| `/stop` | 停止当前任务 |
|
|
449
|
-
| `/status` | 查看 agent 状态看板 |
|
|
450
|
-
| `/yes` `/no`(或 `1`/`2`) | 响应权限审批请求(或直接点击卡片按钮) |
|
|
451
|
-
| `/help` | 查看全部命令 |
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
### Telegram Bot(官方 Bot API + 代理支持)
|
|
456
|
-
|
|
457
|
-
接入 Telegram 官方 Bot API,单聊与群聊实时交互。采用官方 Long Polling(长轮询)机制,**无需公网 IP / 免 Webhook**,内置**零依赖 HTTP/HTTPS CONNECT 代理隧道**,国内网络即开即连。
|
|
458
|
-
|
|
459
|
-

|
|
460
|
-
|
|
461
|
-
**功能亮点**
|
|
462
|
-
|
|
463
|
-
- ⚡ **100% 免公网 IP**:官方 Long Polling 长轮询,本地电脑或内网服务器即可直连通信
|
|
464
|
-
- 🌐 **内置 HTTP/HTTPS 代理支持**:支持填写本地 Clash / v2ray 代理(如 `http://127.0.0.1:7890`),零外部依赖
|
|
465
|
-
- 📜 **实时打字机流式输出**:接入轮次生命周期,单条气泡原地 `editMessageText` 增量刷新,告别频繁发碎消息
|
|
466
|
-
- 🎯 **原生快捷指令菜单(Menu 按钮)**:自动注册全范围指令,输入 `/` 或点击左下角 `[Menu]` 按钮一键直达常用命令
|
|
467
|
-
- 🛡️ **Inline Keyboard 交互卡片**:权限审批下发 `[✓ 批准执行]` / `[✕ 拒绝执行]` 按键,一秒点击即时放行
|
|
468
|
-
- 🖼️ **多模态与文件传输**:支持入站图片/文档自动转存交付 Agent,出站产物文件自动推回 Telegram
|
|
469
|
-
- 🔄 **会话与工作区管理**:支持 `/sessions` 列出历史会话、`/use N` 切换、`/rename` 重命名、`/workspaces` 与 `/addworkspace` 调度工作区
|
|
470
|
-
|
|
471
|
-
**使用步骤**
|
|
472
|
-
|
|
473
|
-
1. 在 Telegram 中向 [@BotFather](https://t.me/BotFather) 发送 `/newbot` 创建机器人并获取 **Bot Token**
|
|
474
|
-
2. 打开 DSH 设置页「远程访问」→「IM 机器人」→ 选中「**Telegram**」
|
|
475
|
-
3. 填入 **Bot Token**(国内网络可按需填入代理地址如 `http://127.0.0.1:7890`),点击「保存并连接」
|
|
476
|
-
4. 手机 Telegram 扫码打开机器人,发送第一条消息(如 `/help`)即**自动完成白名单授权**
|
|
477
|
-
|
|
478
|
-
**Telegram 里的命令**(完整说明见 [Telegram Bot 使用说明](docs/telegram-usage.md))
|
|
479
|
-
|
|
480
|
-
| 命令 | 说明 | 交互卡片 |
|
|
481
|
-
|------|------|------|
|
|
482
|
-
| *(普通文本)* | 发给当前活动 agent | 实时打字机流式输出 |
|
|
483
|
-
| `/new <提示词>` | 在当前工作区新建会话并开始 | 立即启动新轮次 |
|
|
484
|
-
| `/new <提示词> @N` | 在指定工作区新建会话 | 多工作区调度 |
|
|
485
|
-
| `/sessions`(或 `/list`) | 查看所有会话列表 | 挂载一键切换按键 |
|
|
486
|
-
| `/use N`(或 `/resume N`) | 切换到会话 N | 快速切换上下文 |
|
|
487
|
-
| `/rename <新标题>` | 重命名当前活动会话 | 实时更新会话标题 |
|
|
488
|
-
| `/workspaces` | 列出可用工作区 | 查看工作区路径 |
|
|
489
|
-
| `/addworkspace <路径>` | 注册添加新的电脑工作区目录 | 自动绑定并生成快捷序号 |
|
|
490
|
-
| `/status` | 查看 agent 状态看板 | 挂载刷新/停止/结束按键 |
|
|
491
|
-
| `/stop` | 停止当前正在运行的任务 | 即刻中断执行 |
|
|
492
|
-
| `/end` | 结束当前活动会话 | 挂载快捷开始按键 |
|
|
493
|
-
| `/yes` `/no`(或 `1`/`2`) | 响应权限审批请求 | 支持直接点击卡片按钮 |
|
|
494
|
-
| `/help` | 显示快捷按键与完整帮助 | 挂载全套功能导航按键 |
|
|
495
|
-
|
|
496
|
-
---
|
|
497
|
-
|
|
498
|
-
## 可选配置
|
|
499
|
-
|
|
500
|
-
插件开箱即用,无需配置。如需修改代理端口,在 cordis.yml 中添加:
|
|
501
|
-
|
|
502
|
-
```yaml
|
|
503
|
-
- name: '@wenbin_wb/dsh-bridge'
|
|
504
|
-
config:
|
|
505
|
-
port: 3082 # 默认 3082
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
---
|
|
509
|
-
|
|
510
|
-
## 开发
|
|
511
|
-
|
|
512
|
-
```bash
|
|
513
|
-
git clone https://github.com/wenbin-wb/dsh-bridge.git
|
|
514
|
-
cd dsh-bridge
|
|
515
|
-
# 修改 client/index.js 后重新构建
|
|
516
|
-
npm run build:client
|
|
517
|
-
|
|
518
|
-
# 安装到 web profile 并重启 DSH
|
|
519
|
-
dsh plugin --profile web add .
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
---
|
|
523
|
-
|
|
524
|
-
## 常见问题 (FAQ)
|
|
525
|
-
|
|
526
|
-
<details>
|
|
527
|
-
<summary><b>Q1: 手机扫码或公网连接后,如何确保外部人员无法随意访问我的 DSH 控制台?</b></summary>
|
|
528
|
-
<br/>
|
|
529
|
-
|
|
530
|
-
- **回答**:
|
|
531
|
-
1. 在控制台「**安全认证**」Tab 中开启全局访问密码或安全 Token 门禁;
|
|
532
|
-
2. 开启后,无论是局域网 IP 访问还是公网隧道访问,访客必须先输入密码或携带合法认证 Token,彻底杜绝未授权访问;
|
|
533
|
-
3. 宿主电脑本机(`127.0.0.1`)享有物理特权,自动免密直通,不影响本地桌面端开发体验。
|
|
534
|
-
</details>
|
|
535
|
-
|
|
536
|
-
<details>
|
|
537
|
-
<summary><b>Q2: 微信 / QQ / 飞书 / Telegram 机器人的消息安全如何保障?其他人给机器人发消息会被执行吗?</b></summary>
|
|
538
|
-
<br/>
|
|
539
|
-
|
|
540
|
-
- **回答**:
|
|
541
|
-
1. **严格白名单机制**:插件内置自动与手动发件人白名单(Allowlist)。只有处于授权白名单内的用户消息才会驱动 Agent 执行;
|
|
542
|
-
2. **初次自动授权**:扫码或配置完成后,管理员向 Bot 发送第一条消息即自动完成白名单绑定;
|
|
543
|
-
3. **陌生消息静默忽略**:所有非白名单人员或群聊内非授权成员的消息均会被底层静默丢弃(Never fed to LLM),绝不消耗 Token 也不会触发任何指令执行。
|
|
544
|
-
</details>
|
|
545
|
-
|
|
546
|
-
<details>
|
|
547
|
-
<summary><b>Q3: Cloudflare 隧道临时域名与固定域名(Token 模式)有什么区别?</b></summary>
|
|
548
|
-
<br/>
|
|
549
|
-
|
|
550
|
-
- **回答**:
|
|
551
|
-
1. **临时免登录模式(默认)**:无需注册 Cloudflare 账号,一键开启即刻生成 `https://*.trycloudflare.com` 随机临时网址,适合临时外出时快速扫码连接;
|
|
552
|
-
2. **固定域名模式(Token 模式)**:在 Cloudflare Zero Trust 控制台创建 Named Tunnel 并填入 Tunnel Token,可绑定您自己的专属域名(如 `dsh.yourdomain.com`)。开启「随 DSH 启动自动开启」后,重启电脑或服务域名永久固定不变。
|
|
553
|
-
</details>
|
|
554
|
-
|
|
555
|
-
<details>
|
|
556
|
-
<summary><b>Q4: DSH 升级插件或重启服务后,之前的聊天会话和机器人配置会丢失吗?</b></summary>
|
|
557
|
-
<br/>
|
|
558
|
-
|
|
559
|
-
- **回答**:
|
|
560
|
-
1. **配置永久持久化**:所有 IM 平台凭证、授权白名单、公网隧道自启选项与安全认证规则均保存在本地系统目录(`~/.dsh/dsh-bridge/`),插件升级与 DSH 重启均不会影响已有配置;
|
|
561
|
-
2. **会话无感恢复**:会话历史由 DSH 核心引擎持久化管理,重启后在聊天软件中发送消息或使用 `/resume` 命令即可自动恢复上下文并继续执行;
|
|
562
|
-
3. **一键备份迁移**:在「**运维监控**」Tab 内支持一键导出全局配置 `.json` 备份文件,方便在重装系统或跨机器迁移时一键秒级恢复。
|
|
563
|
-
</details>
|
|
564
|
-
|
|
565
|
-
---
|
|
566
|
-
|
|
567
|
-
## 许可证
|
|
568
|
-
|
|
569
|
-
MIT © [wenbin-wb](https://github.com/wenbin-wb)
|
|
570
|
-
|
|
1
|
+
# dsh-bridge
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="docs/banner.jpg" alt="dsh-bridge banner" width="100%" />
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@wenbin_wb/dsh-bridge"><img src="https://img.shields.io/npm/v/@wenbin_wb/dsh-bridge.svg?style=flat-square&color=38bdf8&logo=npm" alt="npm version" /></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@wenbin_wb/dsh-bridge"><img src="https://img.shields.io/npm/dt/@wenbin_wb/dsh-bridge.svg?style=flat-square&color=fbbf24&logo=npm" alt="npm downloads" /></a>
|
|
10
|
+
<a href="https://github.com/wenbin-wb/dsh-bridge/releases"><img src="https://img.shields.io/github/v/release/wenbin-wb/dsh-bridge?style=flat-square&color=10b981&logo=github" alt="GitHub release" /></a>
|
|
11
|
+
<a href="https://github.com/wenbin-wb/dsh-bridge/stargazers"><img src="https://img.shields.io/github/stars/wenbin-wb/dsh-bridge?style=flat-square&color=f43f5e&logo=github" alt="GitHub stars" /></a>
|
|
12
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-%E2%89%A522.19%20%7C%20%E2%89%A524-339933?style=flat-square&logo=node.js" alt="Node.js version" /></a>
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/@wenbin_wb/dsh-bridge?style=flat-square&color=a855f7" alt="license" /></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<img src="https://img.shields.io/badge/Security-Access%20Auth%20%2B%20PBKDF2-6366f1?style=flat-square&logo=security" alt="Security" />
|
|
18
|
+
<img src="https://img.shields.io/badge/WeChat-ClawBot%20%7C%20iLink-07C160?style=flat-square&logo=wechat" alt="WeChat" />
|
|
19
|
+
<img src="https://img.shields.io/badge/QQ%20Bot-OpenAPI%20v2-12B7F5?style=flat-square&logo=tencentqq" alt="QQ" />
|
|
20
|
+
<img src="https://img.shields.io/badge/Feishu-WebSocket%202.0-00D6B9?style=flat-square&logo=lark" alt="Feishu" />
|
|
21
|
+
<img src="https://img.shields.io/badge/Telegram-Bot%20API-24A1DE?style=flat-square&logo=telegram" alt="Telegram" />
|
|
22
|
+
<img src="https://img.shields.io/badge/Cloudflare-Tunnel-F38020?style=flat-square&logo=cloudflare" alt="Cloudflare" />
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<b>简体中文</b> | <a href="README.en.md">English</a>
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
> **DeepSeek Harness 多通道远程访问与全域安全门禁插件**
|
|
30
|
+
>
|
|
31
|
+
> 手机扫个码,人不在电脑前也能继续用 DeepSeek Harness。无论躺在沙发上、出差通勤、还是跨网协作——都不用守着电脑,也不用自己搭公网服务器,扫码即可在手机、平板或任意设备上接着干。
|
|
32
|
+
>
|
|
33
|
+
> 将您本地运行的 DeepSeek Harness 无缝延伸至手机网页、PWA 原生全屏应用、公网安全隧道、以及 **微信 / QQ / 飞书 / Telegram** 机器人矩阵。随时随地调度 AI 编写代码、执行任务、审批操作与管理工作区。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 目录
|
|
38
|
+
|
|
39
|
+
- [✨ 功能特性](#-功能特性)
|
|
40
|
+
- [📦 环境要求与安装](#-环境要求与安装)
|
|
41
|
+
- [🚀 核心功能与使用指南](#-核心功能与使用指南)
|
|
42
|
+
- [1. 🛜 局域网访问与多网卡智能切换](#1-🛜-局域网访问与多网卡智能切换)
|
|
43
|
+
- [2. 🌐 公网隧道(Cloudflare 临时/固定域名 & 自建隧道)](#2-🌐-公网隧道cloudflare-临时固定域名--自建隧道)
|
|
44
|
+
- [3. 📱 移动端交互与 PWA 独立全屏 App](#3-📱-移动端交互与-pwa-独立全屏-app)
|
|
45
|
+
- [4. 🗂️ 远程工作区网页选择器](#4-🗂️-远程工作区网页选择器)
|
|
46
|
+
- [5. 🔐 全域安全认证与防篡改门禁](#5-🔐-全域安全认证与防篡改门禁)
|
|
47
|
+
- [6. 🤖 全能 IM 机器人矩阵(微信 / QQ / 飞书 / Telegram)](#6-🤖-全能-im-机器人矩阵微信--qq--飞书--telegram)
|
|
48
|
+
- [7. 📊 运维监控看板与一键平滑重启](#7-📊-运维监控看板与一键平滑重启)
|
|
49
|
+
- [💬 常见问题 (FAQ)](#-常见问题-faq)
|
|
50
|
+
- [🛠️ 开发与贡献](#️-开发与贡献)
|
|
51
|
+
- [📄 开源协议](#-开源协议)
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ✨ 功能特性
|
|
56
|
+
|
|
57
|
+
- **🛜 局域网多网卡智能识别与切换**:自动探测物理 Wi-Fi、以太网与虚拟网卡(WSL/VMware/Docker),支持在控制台可视化一键切换并记忆持久化,彻底解决多网卡 IP 不互通问题;
|
|
58
|
+
- **🌐 双模 Cloudflare 公网隧道**:免登录一键获取随机临时域名,或填入 Cloudflare Token 绑定固定域名并随 DSH 开机自启;支持 macOS 下 Gatekeeper 隔离自愈与全局探测;
|
|
59
|
+
- **📱 原生级移动端交互与 PWA 全屏应用**:动态居中会话标题、复用 DSH 原生侧边栏抽屉与 `[|` 收起图标、防重叠自适应工具栏,支持手机浏览器「添加到主屏幕」作为独立原生 App 运行;
|
|
60
|
+
- **🗂️ 远程工作区网页选择器**:手机端点击添加工作区唤出树形目录抽屉浏览器,电脑本机点击自动分流调用系统原生选择窗口;支持 IM 指令 `/addworkspace` 远程注册;
|
|
61
|
+
- **🔐 全域安全认证与双防线门禁**:专属二维码 256-bit Token 免密直通、外部访问密码门禁、独立后台管理员防篡改锁;内置物理机(`127.0.0.1`)最高特权与终端一秒救急重置(`reset-auth`);
|
|
62
|
+
- **🤖 全能 IM 机器人矩阵(微信 / QQ / 飞书 / Telegram)**:支持多工作区会话调度、跨重启会话持久化、Markdown 打字机流式输出、Card 2.0 原生一键点击审批与文件双向直传;
|
|
63
|
+
- **📊 运维看板与平滑升级**:系统 CPU / 内存 / Uptime 实时看板、网络连通性一键诊断、全局配置 JSON 导出恢复、npmmirror 极速版本检查与平滑重启。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 📦 环境要求与安装
|
|
68
|
+
|
|
69
|
+
### 环境要求
|
|
70
|
+
|
|
71
|
+
1. **Node.js ≥ 22**(DSH 要求 `^22.19.0` 或 `≥ 24.0.0`)
|
|
72
|
+
2. **dsh CLI 可用**(能在终端直接运行 `dsh` 命令)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 检查 Node 版本
|
|
76
|
+
node -v # 应显示 v22.19+ 或 v24+
|
|
77
|
+
|
|
78
|
+
# 检查 dsh 是否可用
|
|
79
|
+
dsh --version
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 安装插件
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# 方式一:从 npm 安装最新版(推荐)
|
|
86
|
+
dsh plugin --profile web add @wenbin_wb/dsh-bridge
|
|
87
|
+
|
|
88
|
+
# 方式二:免全局权限的 npx 方式
|
|
89
|
+
npx --yes @deepseek-ai/dsh plugin --profile web add @wenbin_wb/dsh-bridge
|
|
90
|
+
|
|
91
|
+
# 方式三:从源码安装
|
|
92
|
+
git clone https://github.com/wenbin-wb/dsh-bridge.git
|
|
93
|
+
dsh plugin --profile web add ./dsh-bridge
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 升级至最新版
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 方式一:在设置页「远程访问」底部点击「🚀 一键升级到最新版并重启」(推荐,全自动)
|
|
100
|
+
|
|
101
|
+
# 方式二:终端强制覆盖安装最新版
|
|
102
|
+
dsh plugin --profile web add @wenbin_wb/dsh-bridge@latest
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> 💡 **提示(pnpm 11 用户)**:如果升级后仍显示旧版,是由于 pnpm 11 的 `minimumReleaseAge` 机制限制。在 Web 控制台点击「一键升级」即可自动跳过限制安装最新版。
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🚀 核心功能与使用指南
|
|
110
|
+
|
|
111
|
+
启动 DeepSeek Harness 后,在设置面板找到 **「远程访问」** 即可开启全部功能:
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 1. 🛜 局域网访问与多网卡智能切换
|
|
116
|
+
|
|
117
|
+
插件启动后**自动随服务开启**局域网代理,无需手动配置。
|
|
118
|
+
|
|
119
|
+
<p align="center">
|
|
120
|
+
<img src="docs/screenshots/lan-access.jpg" width="600" alt="局域网扫码访问控制台" />
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
* **零配置极速扫码**:同一 Wi-Fi 下打开手机相机扫码即可直达移动端 Web 界面;
|
|
124
|
+
* **多网卡智能切换**:当主机存在多张网卡(如物理 Wi-Fi、以太网、WSL 虚拟网卡、VMware、Docker 等)时,控制台自动展示 **「🛜 局域网网卡 / IP 选择」** 下拉框;智能评分高亮推荐物理网卡,点选后二维码与访问 URL 秒级重新生成并**自动持久化保存**。
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### 2. 🌐 公网隧道(Cloudflare 临时/固定域名 & 自建隧道)
|
|
129
|
+
|
|
130
|
+
无需公网 IP 与路由器端口映射,随时随地从外网访问电脑上的 DeepSeek Harness:
|
|
131
|
+
|
|
132
|
+
<p align="center">
|
|
133
|
+
<img src="docs/screenshots/tunnel-access.jpg" width="600" alt="公网隧道配置控制台" />
|
|
134
|
+
</p>
|
|
135
|
+
|
|
136
|
+
- **模式 1:极速免登录临时隧道(默认)**
|
|
137
|
+
1. 直接点击「Cloudflare 隧道」卡片中的「开启」按钮;
|
|
138
|
+
2. 系统全自动准备 `cloudflared` 二进制(macOS 自动剥离 Gatekeeper 隔离属性与自愈校验);
|
|
139
|
+
3. 几秒内自动生成公网 URL 和二维码,点「重置链接」可随时换新。
|
|
140
|
+
|
|
141
|
+
- **模式 2:Cloudflare Token 固定域名(永久不变 · 免费)**
|
|
142
|
+
1. 在 [Cloudflare Zero Trust 控制台](https://one.dash.cloudflare.com/) 免费创建 Tunnel 并绑定域名(如 `dsh.yourdomain.com`);
|
|
143
|
+
2. 展开卡片底部的 **「⚙️ 高级配置:固定域名 (Cloudflare Token)」**,填入自定义域名与 Tunnel Token 并保存;
|
|
144
|
+
3. 勾选 **「随 DSH 启动自动开启」**,每次 DSH 重启即可自动恢复隧道,**URL 永久固定不变**!
|
|
145
|
+
|
|
146
|
+
- **模式 3:自建 WebSocket 隧道**
|
|
147
|
+
* 支持连接个人 VPS 隧道中转服务器([查看自建隧道部署教程](docs/custom-tunnel.md)),具备数据端到端 gzip 压缩与 SSE 响应优化。
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### 3. 📱 移动端交互与 PWA 独立全屏 App
|
|
152
|
+
|
|
153
|
+
针对手机屏幕与触控操作进行深度优化,无需额外配置即可获得原生 App 级流畅体验:
|
|
154
|
+
|
|
155
|
+
- **极简顶栏布局**:保留左侧菜单抽屉与右侧快速新建会话,顶部动态居中显示当前会话标题;
|
|
156
|
+
- **原生侧边栏抽屉**:完整复用 DSH 原生历史记录与工作区分类,顶部集成原生 `[|` 收起图标,支持边缘滑动与手势开合;
|
|
157
|
+
- **PWA 原生全屏支持**:在手机浏览器菜单点击「添加到主屏幕」即可作为 100% 独立原生全屏 App 运行(无浏览器地址栏与底栏);
|
|
158
|
+
- **自适应防重叠排版**:底部工具栏根据屏幕宽度弹性自适应,彻底消除权限预设与模型选择器重叠碰撞。
|
|
159
|
+
|
|
160
|
+
#### 移动端对话与工作区管理体验
|
|
161
|
+
|
|
162
|
+
<p align="center">
|
|
163
|
+
<img src="docs/screenshots/remote-web-mobile.jpg" width="23%" alt="移动端新会话主页" />
|
|
164
|
+
|
|
165
|
+
<img src="docs/screenshots/mobile-chat.jpg" width="23%" alt="移动端已有对话交互" />
|
|
166
|
+
|
|
167
|
+
<img src="docs/screenshots/mobile-drawer.jpg" width="23%" alt="移动端原生抽屉侧边栏" />
|
|
168
|
+
|
|
169
|
+
<img src="docs/screenshots/mobile-workspace-picker.jpg" width="23%" alt="移动端远程工作区选择器" />
|
|
170
|
+
</p>
|
|
171
|
+
|
|
172
|
+
#### 远程访问与移动端设置中心
|
|
173
|
+
|
|
174
|
+
<p align="center">
|
|
175
|
+
<img src="docs/screenshots/mobile-settings-lan.jpg" width="23%" alt="局域网访问控制台" />
|
|
176
|
+
|
|
177
|
+
<img src="docs/screenshots/mobile-settings-tunnel.jpg" width="23%" alt="公网隧道配置" />
|
|
178
|
+
|
|
179
|
+
<img src="docs/screenshots/mobile-settings-im.jpg" width="23%" alt="IM 机器人矩阵" />
|
|
180
|
+
|
|
181
|
+
<img src="docs/screenshots/mobile-settings-security.jpg" width="23%" alt="全局访问安全认证" />
|
|
182
|
+
</p>
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
### 4. 🗂️ 远程工作区网页选择器
|
|
187
|
+
|
|
188
|
+
针对手机端或远程浏览器无法唤起本地电脑文件弹窗的痛点,内置响应式网页树形目录浏览器:
|
|
189
|
+
|
|
190
|
+
<p align="center">
|
|
191
|
+
<img src="docs/screenshots/mobile-workspace-picker.jpg" width="380" alt="移动端远程工作区网页选择器" />
|
|
192
|
+
</p>
|
|
193
|
+
|
|
194
|
+
* **智能分流**:电脑本机访问(`127.0.0.1`)点击添加工作区直接呼出系统原生文件弹窗;手机或远程访问时自动弹出响应式底部目录抽屉;
|
|
195
|
+
* **极速直达**:支持 Windows 驱动器盘符(C盘、D盘)以及系统常用目录(桌面、文稿、下载、Projects)一键直达,支持层级深入浏览与手动输入校验。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### 5. 🔐 全域安全认证与防篡改门禁
|
|
200
|
+
|
|
201
|
+
打开设置页「远程访问」→「**安全认证**」Tab 即可一键启用全方位安全守护:
|
|
202
|
+
|
|
203
|
+
<p align="center">
|
|
204
|
+
<img src="docs/screenshots/security-auth-config.jpg" width="600" alt="安全认证配置面板" />
|
|
205
|
+
</p>
|
|
206
|
+
|
|
207
|
+
#### 1. 🛡️ 第一道防线:外部访问门禁(保护谁能进 Web 界面)
|
|
208
|
+
- **多通道分流生效**:
|
|
209
|
+
- `全部通道开启防护`:局域网与所有公网隧道均需认证;
|
|
210
|
+
- `仅公网隧道开启防护 (推荐)`:局域网同一 Wi-Fi 内保持免密,暴露至公网的隧道强制开启认证门禁;
|
|
211
|
+
- `仅局域网开启防护`:仅对局域网进行门禁拦截。
|
|
212
|
+
- **三种灵活验证模式**:
|
|
213
|
+
- 🟢 **扫码免密 + 密码认证 (默认推荐)**:控制台生成的二维码已自动注入 256-bit 专属安全 Token,手机扫码即可免密秒进;直接在浏览器手动输入 IP 或公网域名的访客,需输入您设置的访客访问密码;
|
|
214
|
+
- 🔑 **仅密码 / PIN 码**:所有外部设备一律要求输入访问密码;
|
|
215
|
+
- 🎫 **仅专属 Token 免密**:仅允许通过控制台生成的二维码或带 Token 的专属链接进入。
|
|
216
|
+
- **一键轮换凭据**:点击「🔄 重置安全 Token」即可使之前分享的旧二维码和链接立即全部失效。
|
|
217
|
+
|
|
218
|
+
<details>
|
|
219
|
+
<summary>📱 点击展开外部访问安全认证登录页截图</summary>
|
|
220
|
+
<br/>
|
|
221
|
+
<p align="center">
|
|
222
|
+
<img src="docs/screenshots/remote-auth-login.jpg" width="500" alt="外部访问安全认证登录页" />
|
|
223
|
+
</p>
|
|
224
|
+
</details>
|
|
225
|
+
|
|
226
|
+
#### 2. 🔒 第二道防线:管理后台防篡改(保护谁能改插件设置)
|
|
227
|
+
- **独立管理员密码**:访客访问密码与管理控制密码彻底分离,即使将访问密码告诉外部朋友,对方也无法查看或篡改您的插件设置;
|
|
228
|
+
- **三种后台权限策略**:
|
|
229
|
+
- 🔑 **需密码解锁 (默认推荐)**:远程设备进入控制台时全屏锁定,输入管理密码后解锁临时会话;
|
|
230
|
+
- 🛡️ **仅限电脑本机管理 (最高安全)**:远程设备一律禁止查看与修改任何网络、机器人配置与 Token,仅允许在电脑本机(`127.0.0.1`)操作;
|
|
231
|
+
- 🌐 **宽松模式**:允许通过访客认证的远程设备直接管理。
|
|
232
|
+
|
|
233
|
+
<details>
|
|
234
|
+
<summary>🖥️ 点击展开远程设备管理控制台防篡改锁定截图</summary>
|
|
235
|
+
<br/>
|
|
236
|
+
<p align="center">
|
|
237
|
+
<img src="docs/screenshots/admin-lock-screen.jpg" width="500" alt="管理控制台防篡改锁定" />
|
|
238
|
+
</p>
|
|
239
|
+
</details>
|
|
240
|
+
|
|
241
|
+
#### 3. 🛟 三重容灾保命体系(永不自锁)
|
|
242
|
+
- **物理机免密直通**:运行 DSH 的宿主电脑(`127.0.0.1` / `localhost`)享有全局最高物理特权,**永不要求输入访问密码,设置面板永不会被锁定**;
|
|
243
|
+
- **服务器一键救急指令**:无头 Linux 服务器或极端忘记密码时,在宿主电脑终端执行单行命令:
|
|
244
|
+
```bash
|
|
245
|
+
touch ~/.dsh/dsh-bridge/reset-auth
|
|
246
|
+
```
|
|
247
|
+
插件将在毫秒级自动清空密码与策略并删除标记,瞬间恢复初始免密状态;
|
|
248
|
+
- **全界面忘记密码指引**:访客登录页与锁屏页均提供 `❓ 忘记密码?` 救助展开卡片。
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### 6. 🤖 全能 IM 机器人矩阵(微信 / QQ / 飞书 / Telegram)
|
|
253
|
+
|
|
254
|
+
无需打开浏览器,直接在常用聊天软件中与本地 Agent 对话、下达任务、接收进度与审批操作:
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
#### 🟢 微信 Bot(ClawBot / iLink)
|
|
259
|
+
|
|
260
|
+
基于腾讯官方开放的微信 ClawBot 插件功能(底层 iLink Bot API),扫码登录微信个人号后即可对话与审批,全程走腾讯官方服务器,无需公网与隧道。
|
|
261
|
+
|
|
262
|
+
<p align="center">
|
|
263
|
+
<img src="docs/screenshots/wechat-bot-config.jpg" width="600" alt="微信 Bot 配置" />
|
|
264
|
+
</p>
|
|
265
|
+
|
|
266
|
+
<details>
|
|
267
|
+
<summary>📱 点击展开手机微信对话与审批截图</summary>
|
|
268
|
+
<br/>
|
|
269
|
+
<p align="center">
|
|
270
|
+
<img src="docs/screenshots/wechat-chat.jpg" width="380" alt="微信对话示例" />
|
|
271
|
+
</p>
|
|
272
|
+
</details>
|
|
273
|
+
|
|
274
|
+
* **使用步骤**:设置页「远程访问」→「IM 机器人」→ 选中「微信」→ 点「扫码登录」并扫码确认 → 向该微信 Bot 发送第一条消息即**自动完成白名单授权**。完整文档见 [微信使用说明](docs/wechat-usage.md)。
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
#### 🐧 QQ Bot(OpenAPI v2)
|
|
279
|
+
|
|
280
|
+
接入 QQ 官方机器人,支持单聊与群聊(群聊需 @机器人),支持 Markdown 渲染、快捷按钮键盘与富媒体文件直传。
|
|
281
|
+
|
|
282
|
+
<p align="center">
|
|
283
|
+
<img src="docs/screenshots/qq-bot-config.jpg" width="600" alt="QQ Bot 配置" />
|
|
284
|
+
</p>
|
|
285
|
+
|
|
286
|
+
<details>
|
|
287
|
+
<summary>📱 点击展开手机 QQ 单聊与群聊对话截图</summary>
|
|
288
|
+
<br/>
|
|
289
|
+
<p align="center">
|
|
290
|
+
<img src="docs/screenshots/qq-chat.jpg" width="48%" alt="QQ 单聊对话" />
|
|
291
|
+
<img src="docs/screenshots/qq-group.jpg" width="48%" alt="QQ 群聊对话" />
|
|
292
|
+
</p>
|
|
293
|
+
</details>
|
|
294
|
+
|
|
295
|
+
* **使用步骤**:在 [QQ 开放平台](https://q.qq.com) 创建机器人获取 AppID 和 ClientSecret → 填入并保存连接 → 添加机器人好友发送首条消息(或群聊首次 @机器人)自动加白名单。完整文档见 [QQ Bot 使用说明](docs/qq-usage.md)。
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
#### 🐦 飞书 Bot(官方 WebSocket 2.0)
|
|
300
|
+
|
|
301
|
+
接入飞书开放平台企业自建应用,采用官方 WebSocket 全双工长连接,**100% 免公网 IP / 免域名 / 免配置 Webhook**。
|
|
302
|
+
|
|
303
|
+
<p align="center">
|
|
304
|
+
<img src="docs/screenshots/feishu-bot-config.jpg" width="600" alt="飞书 Bot 配置" />
|
|
305
|
+
</p>
|
|
306
|
+
|
|
307
|
+
<details>
|
|
308
|
+
<summary>📱 点击展开手机飞书对话与卡片审批截图</summary>
|
|
309
|
+
<br/>
|
|
310
|
+
<p align="center">
|
|
311
|
+
<img src="docs/screenshots/feishu-chat.jpg" width="380" alt="飞书对话与卡片审批示例" />
|
|
312
|
+
</p>
|
|
313
|
+
</details>
|
|
314
|
+
|
|
315
|
+
* **使用步骤**:在 [飞书开放平台](https://open.feishu.cn/app) 创建企业自建应用并开启长连接接收事件 → 填入 App ID 与 App Secret 并连接。完整文档见 [飞书接入指南](docs/feishu-usage.md)。
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
#### ✈️ Telegram Bot(官方 Bot API + 代理支持)
|
|
320
|
+
|
|
321
|
+
接入 Telegram 官方 Bot API,单聊/群聊实时交互。采用官方 Long Polling(长轮询)机制,内置**零依赖 HTTP/HTTPS CONNECT 代理隧道**。
|
|
322
|
+
|
|
323
|
+
<p align="center">
|
|
324
|
+
<img src="docs/screenshots/telegram-bot-config.jpg" width="600" alt="Telegram Bot 配置" />
|
|
325
|
+
</p>
|
|
326
|
+
|
|
327
|
+
* **使用步骤**:向 [@BotFather](https://t.me/BotFather) 发送 `/newbot` 创建机器人获取 **Bot Token** → 填入 Token(国内可填代理如 `http://127.0.0.1:7890`)并保存 → 发送第一条消息自动完成授权。完整文档见 [Telegram 使用说明](docs/telegram-usage.md)。
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
#### 统一 IM 交互指令表
|
|
332
|
+
|
|
333
|
+
| 指令 | 说明 |
|
|
334
|
+
| :--- | :--- |
|
|
335
|
+
| *(普通文本)* | 驱动当前活动 Agent 思考与编码 |
|
|
336
|
+
| `/sessions`(或 `/list`) | 列出所有历史会话(按工作区分组排版) |
|
|
337
|
+
| `/use N`(或 `/resume N`) | 切换到指定序号的会话 |
|
|
338
|
+
| `/rename <新标题>` | 重命名当前活动会话 |
|
|
339
|
+
| `/workspaces` | 列出已在 DSH 注册的所有工作区目录 |
|
|
340
|
+
| `/addworkspace <路径>` | 远程向电脑注册添加新的项目文件夹 |
|
|
341
|
+
| `/new <提示词>` | 在当前工作区创建并开始新会话 |
|
|
342
|
+
| `/new <提示词> @N` | 在指定工作区序号下直接新建会话 |
|
|
343
|
+
| `/stop` | 立即中断当前正在运行的任务 |
|
|
344
|
+
| `/end` | 结束并挂起当前会话上下文 |
|
|
345
|
+
| `/yes` / `/no` (或 `1`/`2`) | 响应敏感操作权限审批(或直接点击卡片按钮) |
|
|
346
|
+
| `/status` | 查看 Agent 状态与系统摘要看板 |
|
|
347
|
+
| `/help` | 查看完整的指令与快捷帮助 |
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
### 7. 📊 运维监控看板与一键平滑重启
|
|
352
|
+
|
|
353
|
+
打开控制台 **「运维监控」** Tab,实时掌控系统状态与一键维护:
|
|
354
|
+
|
|
355
|
+
<p align="center">
|
|
356
|
+
<img src="docs/screenshots/mobile-remote-settings.jpg" width="380" alt="运维监控看板与系统状态" />
|
|
357
|
+
</p>
|
|
358
|
+
|
|
359
|
+
* **📊 宿主系统运行监控看板**:实时展示 CPU 核心型号、系统总内存与实时占用率、Node 进程堆内存与 DSH 服务连续运行时间(Uptime);
|
|
360
|
+
* **🔍 网络连通性一键诊断**:一键排查反向代理本地端口、局域网 IPv4、Cloudflare Anycast 边缘网络及国内 npm 镜像源延迟;
|
|
361
|
+
* **🗄️ 全局配置一键备份与迁移**:支持导出/导入包含 Token、白名单与隧道参数的 `.json` 备份包,重装系统一键还原;
|
|
362
|
+
* **🔄 平滑优雅重启**:支持在界面点击一键重启 DSH 服务,自动断线重连并自动刷新前端。
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 💬 常见问题 (FAQ)
|
|
367
|
+
|
|
368
|
+
<details>
|
|
369
|
+
<summary><b>Q1: 手机扫码后提示无法连接或打不开页面?</b></summary>
|
|
370
|
+
<br/>
|
|
371
|
+
|
|
372
|
+
1. **检查 Wi-Fi 连接**:确保手机和电脑连接在同一个局域网(Wi-Fi)下,且路由器未开启「AP 隔离」;
|
|
373
|
+
2. **多网卡切换**:如果电脑安装了 WSL、VMware、Hyper-V 或开启了 VPN,默认 IP 可能会匹配到虚拟网段。在控制台的 **「🛜 局域网网卡 / IP 选择」** 下拉框中切换为物理 Wi-Fi / 以太网 IP 即可;
|
|
374
|
+
3. **防火墙放行**:确认操作系统防火墙允许 Node.js 监听 `3082` 端口;
|
|
375
|
+
4. **使用公网隧道**:若跨网段或在公司内网,建议直接开启「Cloudflare 隧道」进行外网扫码访问。
|
|
376
|
+
</details>
|
|
377
|
+
|
|
378
|
+
<details>
|
|
379
|
+
<summary><b>Q2: 微信 / QQ / 飞书 / Telegram 机器人的消息安全如何保障?其他人发消息会被执行吗?</b></summary>
|
|
380
|
+
<br/>
|
|
381
|
+
|
|
382
|
+
1. **严格白名单机制(Allowlist)**:插件内置基于发件人 ID 的严格白名单。只有白名单内的授权用户消息才会驱动 Agent 执行;
|
|
383
|
+
2. **初次自动授权**:扫码或配置完成后,管理员向 Bot 发送第一条消息即自动完成白名单绑定;
|
|
384
|
+
3. **陌生消息静默阻断**:所有非白名单人员或群聊内非授权成员的消息均会被底层直接丢弃(Never fed to LLM),绝不消耗 Token 也不会触发任何本地指令。
|
|
385
|
+
</details>
|
|
386
|
+
|
|
387
|
+
<details>
|
|
388
|
+
<summary><b>Q3: Cloudflare 隧道临时域名与固定域名(Token 模式)有什么区别?</b></summary>
|
|
389
|
+
<br/>
|
|
390
|
+
|
|
391
|
+
1. **临时免登录模式(默认)**:无需 Cloudflare 账号,一键开启即刻生成 `https://*.trycloudflare.com` 随机临时网址,适合外出时临时连接;
|
|
392
|
+
2. **固定域名模式(Token 模式)**:在 Cloudflare Zero Trust 控制台创建 Named Tunnel 并填入 Token,可绑定您自己的专属固定域名(如 `dsh.yourdomain.com`)。开启「随 DSH 启动自动开启」后,重启电脑或服务域名永久固定不变。
|
|
393
|
+
</details>
|
|
394
|
+
|
|
395
|
+
<details>
|
|
396
|
+
<summary><b>Q4: 插件升级或重启 DSH 服务后,已有配置和聊天会话会丢失吗?</b></summary>
|
|
397
|
+
<br/>
|
|
398
|
+
|
|
399
|
+
1. **配置永久持久化**:所有 IM 凭证、授权白名单、公网隧道选项与安全密码均保存在系统主目录(`~/.dsh-bridge/`),升级与重启完全无损;
|
|
400
|
+
2. **会话无感恢复**:会话历史由 DSH 核心引擎持久化管理,重启后在聊天软件中发送消息或使用 `/resume` 命令即可自动恢复上下文;
|
|
401
|
+
3. **一键备份迁移**:支持在「运维监控」Tab 内一键导出全局配置 `.json` 文件,方便跨设备迁移。
|
|
402
|
+
</details>
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 🛠️ 开发与贡献
|
|
407
|
+
|
|
408
|
+
欢迎提交 Issue 与 Pull Request 共同完善插件!
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# 1. 克隆代码仓库
|
|
412
|
+
git clone https://github.com/wenbin-wb/dsh-bridge.git
|
|
413
|
+
cd dsh-bridge
|
|
414
|
+
|
|
415
|
+
# 2. 安装依赖并启动构建
|
|
416
|
+
npm install
|
|
417
|
+
npm run build:client
|
|
418
|
+
|
|
419
|
+
# 3. 运行全量单元测试
|
|
420
|
+
npm test
|
|
421
|
+
|
|
422
|
+
# 4. 安装到本地 DSH Web Profile 进行联调
|
|
423
|
+
dsh plugin --profile web add .
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## 📄 开源协议
|
|
429
|
+
|
|
430
|
+
本项目基于 [MIT 许可证](LICENSE) 开源发布。
|