DSH 手机/外网远程访问插件:免配置公网隧道 + 局域网 HTTPS 直连 + 自定义公网链接/端口 + 微信机器人
45.2/100
综合分
19
GitHub 星标
460
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-web-remotenpm 源 · dsh-web-remote 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-web-remote @ 0.13.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 02:18:51
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 5 处,展示前 5 条)
- 读取本地文件dist/index.js:28
const pkg = JSON.parse(readFileSync(join(here, "..", "package.json"), "utf8")); - 读取本地文件dist/index.js:175
if (!existsSync(DEFAULT_HOST_CONFIG_PATH)) - 读取本地文件dist/lock-diagnostics.js:40
const readDir = deps.readDir ?? ((dir) => readdirSync(dir)); - 读取本地文件dist/lock-diagnostics.js:64
if (!existsSync(pkgJsonPath)) - 读取本地文件dist/lock-diagnostics.js:66
const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 免配置公网隧道
- 局域网HTTPS直连
- 自定义公网链接端口
最近更新
在 GitHub 查看全部 →v5.7.72026-10-31
· v5.7.7 — QQ 全面按钮化:手机上不用再打字
这是至今最大的一次更新:17 个提交、+1537 行,把 QQ 通道几乎所有常用操作都做成了内嵌键盘按钮。
· 🎯 以前 vs 现在
| 以前(手机上要打字) | 现在(点一下) |
|---|---|
| 看帮助 → 打 /帮助 | 点「帮助」按钮 |
| 切会话 → 打 /选择 3 | 点「③ 会话标题」按钮 |
| 切模型 → /切换模型 → /选择 N | 点模型名,直接切过去 |
| 停止任务 → 打 /停止 | 点「⏹ 停止」→ 二次确认 |
| 打开 DSH → 手动复制链接 | 点「🔗 打开 DSH」 |
| 复制链接 → 长按选择复制 | 点代码块右上角的复制按钮 |
· ✨ 新增能力
· 监听通知带按钮 —— 收到通知直接点,不用进聊天框敲命令(有开关可关)
· 帮助里每条指令都是按钮 —— 点哪个执行哪个
· 会话做成按钮 —— 点第 N 个 = /选择 N;第 7 个「全部」看全部会话
· 模型选择做成按钮 —— 点哪个直接切;列表分页;强度编号从 1 起
· 「⏹ 停止」二次确认 —— 避免误触把任务停掉
· 通知附带「一键复制链接」 —— 链接放进围栏代码块,QQ 自动给复制按钮
· 🔗 /链接 的改进
· 补上 Tailscale HTTPS 那条(以前只给公网隧道)
· 回复里每个 https 地址都挂跳转按钮
· P2P 那行不再整条消失 —— 没通就写明原因,不再是「看不出是没通还是忘给」
· 「最近回复」换成「选此会话」(按会话 id,异步也不会指错会话)
· 🐛 修了两个「静默失败」的坑(HTTP 200,但按钮全丢)
这两个坑很值得记:接口返回 200、消息正常送达、日志零报错,但按钮一个都不显示。
1. SDK 参数名是 opts.keyboard,不是 inlineKeyboard —— 传错了会被当成 undefined,消息照发、按钮静默丢掉。
2. 按钮 id 必须在整个键盘内唯一 —— 之前用「行内序号」编号,10 个按钮只有 3 个不同 id,整块键盘被服务端静默丢弃。
· ✅ 测试
npm test 55 项全过(44 → 55,新增 11 项守卫 #45~#55)
· 安装 / 升级
cd $DSH_HOME/profiles/web
pnpm add github:godchen520/dsh-web-remote
· 重启 dsh web
💡 命令不钉 ref —— 这样装完才能正常收到「有新版本」提示。
---
📋 完整技术细节(点开看 CHANGELOG 原文)
· 本版主题:把 QQ 变成「按钮式」操作 —— 手机上不用再打字
QQ 支持内嵌键盘(按钮)。本版把几乎所有常用操作都做成了按钮:
| 以前(手机上要打字) | 现在(点一下) |
|---|---|
| 看帮助 → 打 /帮助 | 点「帮助」按钮 ✅ |
| 切会话 → 打 /选择 3 | 点「③ 会话标题」按钮 ✅ |
| 切模型 → 打 /切换模型 → 再打 /选择 N | 点模型名,直接切过去 ✅ |
| 停止任务 → 打 /停止 | 点「⏹ 停止」→ 二次确认 ✅ |
| 打开 DSH → 手动复制链接 | 点「🔗 打开 DSH」✅ |
| 复制链接 → 长按选择复制 | 点代码块右上角的复制按钮 ✅ |
· Added — 按钮化
· 监听通知带按钮
监听推送现在带一排按钮(内嵌键盘),手机上不用再进聊天框敲命令。
有开关可关(默认开)。
· 帮助里每条指令都是按钮
/帮助 的每一条指令都做成按钮 —— 点哪个就执行哪个。
· 会话做成按钮
· 点第 N 个按钮 → 等价于发 /选择 N
· 文字部分列全部会话,按钮只给前 6 个
· 第 7 个按钮是「全部」(原名「其他…」)→ 单独发一条只含全部按钮的消息
· 模型选择做成按钮
· 点模型名 → 直接切到那个模型(不用先 /切换模型 再 /选择 N)
· 模型列表按会话列表那套分页,按钮数量自适应(强度跟档数、模型跟模型数)
· 强度编号改成从 1 起(原来从 0 起,容易点错)
· 「🔗 打开 DSH」+「⏹ 停止」二次确认
· 通知里多一个「🔗 打开 DSH」跳转按钮
· 「⏹ 停止」改成二次确认(danger 样式 + modal)—— 避免误触真的把任务停掉
· 通知附带「一键复制链接」
链接放进围栏代码块 —— QQ 会给代码块渲染复制按钮,点一下就复制好了。
· Changed — /链接 与 Tailscale
· /链接 补上 Tailscale HTTPS 那条,QQ 里可一键复制
以
v5.7.62026-10-24
· v5.7.6 — 修「换到 web 端后 QQ 监听一条都不推」
· 🐛 问题
从桌面端换到 web 端之后,QQ 的监听通知一条都不推 —— 但看起来一切都正常:
| 检查 | 当时的结果 |
|---|---|
| /remote/info 的 qqbot | connected ✅ |
| store 里的 qqbot.lastTarget | 在 ✅ |
| 直接调 QQ API 发消息 | HTTP 200 ✅ |
真相:通道本身没问题,是内存里的 lastTarget 空了(启动那次 qqbotRestoreTarget() 没生效)。
· 😤 更糟的是:诊断里毫无痕迹
QQ 分支原来是两个 if 都没有 else:
if (qqbotMonitorMode && qqbotChannel && health !== 'down') {
var qqTarget = qqbotChannel.getLastTarget();
if (qqTarget) { ... }
}
→ 分支没进时 monitorLastSendResult 里一个字都不留,
/remote/diag 只能看到 weixin 跳过…,完全看不出 QQ 去哪了。
· ✅ 修复(两件事)
1. 自愈:内存目标为空时,从 store.load().qqbot.lastTarget 读回来挂上,
之后就不用再管。日志会打印:
[qqbot] 监听推送目标为空,已从持久化自愈恢复()
2. 补全诊断:把「为什么没发」写进 monitorLastSendResult,四种原因分别写明:
· 通道实例不存在
· 通道已断开
· 状态读取失败: xxx
· 还没有会话目标(先给机器人发一条消息)
· 🛡️ 新增测试守卫
守卫 #44「监听通道可观测性」 —— 断言:
· QQ 分支必须有「跳过原因」记录(不能再静默)✅
· 目标为空时确实从 store.load().qqbot.lastTarget 自愈 ✅
· 自愈发生在发送之前 ✅
· 其它通道(微信 / 飞书 / Telegram / 钉钉)的跳过记录仍在 ✅
· ✅ 测试
npm test 44 项全过
· 安装 / 升级
cd $DSH_HOME/profiles/web
pnpm add github:godchen520/dsh-web-remote
· 重启 dsh web
💡 命令不钉 ref —— 这样装完才能正常收到「有新版本」提示。
---
📋 完整技术细节(点开看 CHANGELOG 原文)
· Fixed — 从桌面端换到 web 端后,QQ 监听一条都不推(内存目标丢失,且诊断里毫无痕迹)
用户:"换到 web 端后 QQ 监听没反应"
取证(/remote/diag 的 monitorLastSendResult):
weixin 跳过: ...
(QQ 一个字都没有) ← 完全看不出 QQ 去哪了
而同一时刻三项检查全部正常:
| 检查 | 结果 |
|---|---|
| /remote/info 的 qqbot | connected ✅ |
| store 里的 qqbot.lastTarget | 在 ✅ |
| 直接调 QQ API 发消息 | HTTP 200 ✅ |
→ 通道本身没问题,是内存里的 lastTarget 空了(启动那次 qqbotRestoreTarget() 没生效)。
为什么之前完全查不出来:QQ 分支原来是
if (qqbotMonitorMode && qqbotChannel && qqbotChannel.status().health !== 'down') {
var qqTarget = qqbotChannel.getLastTarget();
if (qqTarget) { ... }
}
两个 if 都没有 else —— 分支没进时 monitorLastSendResult 里一个字都不留,
于是 /remote/diag 只能看到 weixin 跳过…,完全看不出 QQ 去哪了。这次一半的时间浪费在这上面。
修法(两件事):
1. 自愈:内存目标为空时,从 store.load().qqbot.lastTarget 读回来,
用 setLastTarget() 挂上 —— 之后就不用再管。日志会打印:
[qqbot] 监听推送目标为空,已从持久化自愈恢复()
2. 补全诊断:把「为什么没发」写进 monitorLastSendResult(照钉钉那条的写法),
四种原因分别写明 —— 通道实例不存在 / 通道已断开 /
v5.7.52026-10-21
· v5.7.5 — 修桌面端「公网/局域网链接全部 502」
⚠️ 桌面版用户:如果你的远程链接打开全是 502,这个版本是给你的。
· 🐛 问题
桌面版的 DSH 端口是由宿主动态分配的(每次启动可能不同)。
插件此前把目标端口写死在配置里,一旦宿主分配到的端口和配置对不上:
· 公网链接 → 502 ❌
· 局域网链接 → 502 ❌
· 而且看起来"插件是正常的"(/remote/info 有响应),只是所有转发都失败 ❌ 很难一眼看出原因。
· ✅ 修复
目标端口改为向宿主校准 ✅:
1. 启动时向宿主查询真实的 Web 服务地址(webServer.getOrigin())
2. 把拿到的端口写回 targetPort
3. 这一步在创建代理之前完成(否则代理先绑定了旧端口)
4. 显式配置优先 —— 你自己在 cordis.patch.yml 里写了 targetPort 的,仍按你的来 ✅
· 🛡️ 新增测试守卫
守卫 #43「端口校准」 —— 断言:
· 向 webServer.getOrigin() 校准(不是猜端口)✅
· 结果写回 targetPort ✅
· 位于创建代理之前 ✅
· 显式配置优先 ✅
· ✅ 测试
npm test 43 项全过
· 安装 / 升级
cd $DSH_HOME/profiles/web
pnpm add github:godchen520/dsh-web-remote
· 重启 dsh web
💡 命令不钉 ref —— 这样装完才能正常收到「有新版本」提示。
---
📋 完整技术细节(点开看 CHANGELOG 原文)
· Fixed — 桌面端公网/局域网链接全部 502 Bad Gateway(web 端正常)
用户:"我用 web 端时是好的,现在换到桌面端就这样了" + "公网和局域网链接都显示 bad gateway"
取证(桌面端 /remote/info):
targetPort = 19387 ← 代理转发到这里
19387 = 没有监听 ← 转发过去没人接 → bad gateway
实际监听 = 11849 ← 桌面端这次分到的端口
根因:桌面版端口是宿主每次启动动态分配的,而这个值被写死了。
profiles/desktop/cordis.patch.yml 里有一段(上一版加的):
· id: web-remote
name: dsh-web-remote
config:
targetPort: 19387 # ← 上一台实例的端口,这次分到了 11849
web 端固定 3080,所以代理对得上、一直正常;桌面端换端口就必然对不上。
修法(这一版做对的两件事):
1. 删掉 profile 里写死的 targetPort(已改,那个 profile 的 cordis.patch.yml 现在只留注释说明为什么不能写死)
2. 插件改为向宿主校准端口:在 webServer 服务就绪后调用
ctx.webServer.getOrigin() 拿真实监听地址,写回 config.targetPort,
然后才建代理(校准点在 createProxyServer() 之前,token reader 也用校准后的值)。
显式配置仍优先(portSource === 'config' 时不覆盖),留给特殊部署。
为什么不能靠 DSH_WEB_URL(这条也踩过,值得记下):
DSH 文档里 surfaceContext 的原文是
"Expose DSH_WEB_URL to the agent's shell commands" ——
它只注入给 agent 的 shell 命令,不在插件进程的环境里。
所以插件里 process.env.DSH_WEB_URL 恒为空,那条探测分支在桌面端从来就没生效过
(portSource 显示 env 只在 dsh web 那种场景才可能出现)。
正确来源是 webServer.getOrigin() —— DSH 自己就是用它算公开地址的:
const appRootUrl = () => publicUrl ?? ctx.webServer.getOrigin();
测试:新增守卫 #43 —— 断言校准存在、写回 config.targetPort、位于建代理之前、
让位显式配置、token reader 用校准后的值。已反向验证:把 getOrigin() 换掉后
exit=1,报"没有向 webServer.getOrigin() 校准目标端口"。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-web-remote
手机 / 外网远程访问 DeepSeek Harness(DSH)的插件。随时随地通过浏览器,或微信 / 飞书 / Telegram / QQ官方 机器人控制你的 DSH。
✨ 功能亮点
| 功能 | 说明 |
| 🌐 公网访问 | Cloudflare Quick Tunnel,无需公网 IP、无需注册,cloudflared 缺失时自动下载 |
| 🖥️ 官方桌面版 | 支持 DSH 官方桌面版(dsh-app://):按钮注入走官方结构化通道,目标端口自动探测 |
| 📡 局域网直连 | HTTP + HTTPS 并列两条链接:HTTP 免证书直接可开,HTTPS 自签名(点「继续前往」即可) |
| 🔒 安全认证 | 每次启动生成随机令牌;HttpOnly Cookie;局域网可免 token |
| ⚡ 性能加速 | 反向代理自动 gzip 压缩,大历史会话加载更快 |
| 📱 侧边栏图标 | 手机快捷按钮常驻左下角,刷新不消失 |
| 🛰️ P2P(Tailscale) | 装了 Tailscale 时自动把 100.x 地址列到「公网」页,免 token 直连(在外面访问家里);/链接 命令同时发公网与 P2P 两条链接,P2P 没打通时写明 p2p未打通 |
展开完整文档(README 剩余 1 节)
dsh-web-remote 手机 / 外网远程访问 DeepSeek Harness(DSH)的插件。随时随地通过浏览器,或微信 / 飞书 / Telegram / QQ官方 机器人控制你的 DSH。 ✨ 功能亮点 | 功能 | 说明 | | 🌐 公网访问 | Cloudflare Quick Tunnel,无需公网 IP、无需注册,cloudflared 缺失时自动下载 | | 🖥️ 官方桌面版 | 支持 DSH 官方桌面版(dsh-app://):按钮注入走官方结构化通道,目标端口自动探测 | | 📡 局域网直连 | HTTP + HTTPS 并列两条链接:HTTP 免证书直接可开,HTTPS 自签名(点「继续前往」即可) | | 🔒 安全认证 | 每次启动生成随机令牌;HttpOnly Cookie;局域网可免 token | | ⚡ 性能加速 | 反向代理自动 gzip 压缩,大历史会话加载更快 | | 📱 侧边栏图标 | 手机快捷按钮常驻左下角,刷新不消失 | | 🛰️ P2P(Tailscale) | 装了 Tailscale 时自动把 100.x 地址列到「公网」页,免 token 直连(在外面访问家里);/链接 命令同时发公网与 P2P 两条链接,P2P 没打通时写明 p2p未打通 | | 📶 Tailscale 状态 | 面板直接显示「已连接 / 未登录 / 未运行」+ 手机在不在线 + 路径是直连还是中继(哪个节点) | | 🔌 自定义端口 | HTTP / HTTPS 端口可分别自定义,带同端口冲突拦截与占用检测 | | 🤖 微信机器人 | iLink 协议直连微信,支持 AI 对话、会话控制、模型切换 | | 💬 飞书机器人 | WebSocket 长连接,支持命令控制、会话监听通知 | | ✈️ Telegram 机器人 | 长轮询收发消息,支持 HTTP 代理、命令控制、监听推送 | | 🐧 QQ 官方机器人 | QQ 开放平台官方接入,WebSocket 长连接,无需额外 QQ 号 / 公网入口 | | 🔔 钉钉机器人 | 企业内部应用 + Stream 模式长连接,不需要公网地址,被动回复 + OpenAPI 主动推送 | | 👁️ 会话监听 | /监听 命令,Agent 思考完毕自动推送到已绑定通道 | | 🩺 通道健康监测 | 微信/飞书/Telegram/QQ官方/钉钉 独立监测,连续 3 次失败自动告警并停止,红点直达 + 一键重连 | ⚡ 一句话安装 复制下面这句话给你的 DSH,它自己会装好一切: 请帮我安装 dsh-web-remote 远程访问插件(https://github.com/godchen520/dsh-web-remote),装完告诉我如何重启 DSH Web。 不想麻烦 Agent?命令行一条: dsh plugin --profile web add github:godchen520/dsh-web-remote && dsh web 📸 截图 快捷按钮(页面左下角): 快捷按钮 远程面板(公网 / 局域网切换、一键复制链接、二维码、启动 / 停止): 远程面板 📋 安装方式 方式一:GitHub 直接安装(推荐) cd $DSH_HOME/profiles/web pnpm add github:godchen520/dsh-web-remote 在 package.json 的 dsh.profile.bundles 数组中添加 "dsh-web-remote",重启 DSH。 --config.minimumReleaseAge=0 可绕过 pnpm 11 新包发布年龄校验(如需要)。 方式二:手动 patch 把本包放入 profile 的 node_modules,然后在 cordis.patch.yml 追加: - insert: - id: web-remote name: 'dsh-web-remote' bundle 方式需重启;cordis.patch.yml 方式会被 HMR 热加载。 ⚙️ 配置 全部可选,不配置即开箱即用。在 cordis.patch.yml 里覆盖: | 参数 | 默认值 | 说明 | | targetPort | 自动探测 | DSH 自身端口。显式配置最优先;否则依次读 DSH_WEB_URL → DSH_PORT → 兜底 3080 | | httpPortStart | 3081 | 局域网 HTTP 起始端口(自动跳过占用) | | httpsPortStart | 3082 | 局域网 HTTPS 起始端口 | | cloudflaredPath | '' | 指定 cloudflared 路径;留空自动探测 / 自动下载 | | pfxPath | '' | 指定 PFX 证书;留空自动生成自签名 | | pfxPass | '' | PFX 密码 | | toolsDir | '' | 工具与证书缓存目录;留空使用 $DSH_HOME/tools | | autoStart | true | 插件加载即自动启动 | | lanOpen | true | 局域网免 token(私网来源放行) | 📱 使用方法 1. 启动后页面左下角出现 📱 图标 2. 点击图标 → 面板显示运行状态和链接 3. 手机浏览器打开链接即可访问 DSH 公网:https://xxx.trycloudflare.com/?token=... 局域网(同 Wi-Fi;默认免 token,并列给两条): - http://192.168.x.x:3081 —— 推荐,免证书,浏览器直接打开(非安全上下文,剪贴板 API 等受限) - https://192.168.x.x:3082 —— 自签名证书,浏览器提示不安全,需手动「高级 → 继续前往」(安全上下文) 面板功能: - 公网标签页:可填写自定义公网 URL(如自己的 ngrok 地址) - 局域网标签页:两条链接各自的端口号可点击直接修改(HTTP / HTTPS 分别设置),二维码指向 HTTP 地址(手机扫码直接能开) 🖥️ 官方桌面版 插件支持 DSH 官方桌面版(窗口地址 dsh-app://app/)。与浏览器版有两点差异: | 项 | 说明 | | 按钮注入 | 桌面版走静态部署渲染路径,只消费官方结构化注入行(webserver/index-inject),不跑 tapIndex。插件已同时使用两条通道,两端都覆盖 | | 目标端口 | 桌面版由宿主动态分配端口(实测 19387),且插件进程里看不到 DSH_WEB_URL(那是注入给 agent shell 的)。需要显式指定 | 在 profile 的 cordis.patch.yml 里补上端口: - id: web-remote name: dsh-web-remote config: targetPort: 19387 # 换成你桌面版的实际端口 不配置会兜底 3080,桌面版下的表现是隧道 502 Bad Gateway / Host Error。 面板 /remote/info 会返回 targetPort 与 portSource(config / env / default),可用来确认实际取到了哪个端口。 🤖 微信机器人 通过微信直接控制 DSH,支持: 远程控制命令: - /链接 — 获取公网链接(未启动自动开启) - /停止远程 — 关闭远程服务 - /监听 — 开启/关闭会话监听模式(思考完毕自动通知) 会话管理: - /会话列表 — 列出所有会话 - /选择 N — 选中第 N 个会话 - /当前会话 — 查看选中会话名称 - /历史内容 — 查看会话最近输出 模型切换: - /当前模型 — 查看当前使用的模型 - /切换模型 — 列出所有模型并切换 - /选强度 N — 设置思考强度 对话: - 直接发送内容 → 自动发到选中的会话并回传结果 - 未选择会话时提示先选择 💬 飞书机器人 通过飞书直接控制 DSH,支持: 远程控制命令: - /链接 — 获取公网链接 - /停止远程 — 关闭远程服务 - /监听 — 开启/关闭会话监听模式 - /帮助 — 显示命令列表 绑定方式: 在 DSH Web 面板 → 机器人标签页 → 飞书,填写 App ID 和 App Secret,点击绑定。 ✈️ Telegram 机器人 通过 Telegram 直接控制 DSH,支持: 远程控制命令: - /链接 — 获取公网链接 - /停止远程 — 关闭远程服务 - /监听 — 开启/关闭会话监听模式 - /帮助 — 显示命令列表 绑定方式: 在 DSH Web 面板 → 机器人标签页 → Telegram,填写 Bot Token,点击绑定。 代理支持: 国内网络无法直连 Telegram API 时,可在面板中配置 HTTP 代理地址。 🐧 QQ 官方机器人 通过 QQ 开放平台接入的官方机器人,支持: 远程控制命令: - /链接 — 获取公网链接 - /停止 — 关闭远程服务 - /监听 — 开启/关闭会话监听模式 - /模型 — 查看当前模型 - /状态 — 查看通道状态 - /帮助 — 显示命令列表 场景支持: QQ 群聊 + 消息列表单聊。 接入方式(两种,任选): 方式一:扫码绑定(推荐,全程不用复制密钥) 1. DSH Web 面板 → 机器人标签页 → QQ官方 → 点「📱 扫码绑定」 2. 用手机 QQ 扫描面板上出现的二维码 3. 在弹出的页面里选择你要绑定的机器人(已创建好的)→ 确认授权 4. 凭据自动填入并连接 注意:扫码是绑定已有机器人,不会新建机器人。若还没有,先用方式二创建。 方式二:手动填写 1. 打开 QQ 开放平台快捷创建,用 QQ 登录后点「创建机器人」(个人主体可创建 5 个) 2. 在开放平台「开发设置」里复制 AppID 与 AppSecret 3. 面板里填入后点「确认并连接」 特点: | 项 | 说明 | | 额外 QQ 号 | 不需要 —— 平台分配独立机器人身份,你的 QQ 只作为管理员 | | 公网入口 | 不需要 —— 走 WebSocket 长连接,SDK 自带心跳与 RESUME 补发 | | 备案 | 不需要 | | 会话持久化 | 支持,进程重启后可 RESUME 补上断连期间的消息 | | 主动推送 | 支持(需你曾给机器人发过消息;群聊需群主允许) | 群聊启用: 群主把机器人拉进群即可;若允许接收全量消息,需群主在机器人设置里开启。 说明: 这是本插件唯一的 QQ 接入方式。早期版本曾提供基于 OneBot 11(NapCat)的通道,已于 5.0.0 移除 —— 官方机器人合规稳定、无需额外 QQ 号,也不需要跑 NapCat 中间层。 🔔 钉钉机器人 通过 钉钉开放平台「企业内部应用 + 机器人」 接入,消息接收模式用 Stream 模式(长连接),因此和飞书/QQ官方一样:不需要公网 IP、域名、证书或内网穿透。 远程控制命令: 与其它通道完全一致 —— /帮助 /链接 /启动 /停止 /监听 /状态 /会话列表 /选择 N /当前会话 /历史内容 /当前模型 /切换模型 /选强度,以及直接发一句话(不带 /)转发进选中的会话。 特点: | 项 | 说明 | | 账号要求 | 需要企业/组织(个人版钉钉不支持应用机器人);自测可免费新建一个团队,自己当管理员 | | 公网入口 | 不需要 —— Stream 模式长连接(wss-open-connection.dingtalk.com) | | 被动回复 | 用消息自带的 sessionWebhook,无需额外权限;有效期 1.5 小时,过期自动回落 OpenAPI | | 主动推送 | 用 OpenAPI(单聊 oToMessages/batchSend / 群聊 groupMessages/send),需要「企业内机器人发送消息权限」 | | 监听通知 | 走 OpenAPI 主动推送,不受 1.5 小时限制;重启 DSH 后会自动恢复上次的会话目标 | | 群聊 | 需要 @机器人 才会收到消息;主动推送不支持 @ | | 单条长度 | 自动按 4000 字分片(群聊接口 msgParam 上限 15000 字节) | 接入步骤: 1. 用企业管理员(或让管理员给你开发者权限)登录 钉钉开发者后台 2. 应用开发 → 创建企业内部应用 → 记下 Client ID / Client Secret(即 AppKey / AppSecret) 3. 应用能力 → 添加 机器人 → 填写名称等信息 → 消息接收模式选「Stream 模式」 → 保存 4. 发布应用:版本管理与发布 → 创建新版本(勾选「机器人」)→ 发布没发布时,机器人不会出现在会话里,senderStaffId 也不会返回 —— 主动推送会拿不到 userId 5. 申请权限:开发配置 → 权限管理 → 搜索「企业内机器人发送消息权限」→ 申请只用被动回复(收到消息才回)可以不申请;/监听 通知必须申请 6. 群聊场景:群设置 → 群管理 → 机器人 → 添加机器人(群需属于该应用所在企业) 7. DSH 面板 → 机器人标签页 → 钉钉 → 填 Client ID / Client Secret → 「验证并连接」 排错: - 面板提示「AppKey 或 AppSecret 不正确」→ 凭证预检就失败了,核对后台的 Client ID / Client Secret - 面板提示「连接超时」→ 凭证有效但没连上:确认应用已发布、机器人消息接收模式是 Stream - 收到消息不回 → 看日志里是否有 [dingtalk] 收到消息;群聊必须先 @机器人 - 通知推不出去 → 检查是否申请了「企业内机器人发送消息权限」,以及是否给机器人发过至少一条消息(用来记录推送目标) 🩺 通道健康监测 微信 / 飞书 / Telegram / QQ官方 / 钉钉 各通道独立监测: - 连续 3 次失败 → 自动停止该通道并告警 - 远程图标显示红点提示(任一通道断开即亮) - 点击红点直达出问题的通道页,提供一键重连按钮 🔧 兼容性 | DSH 版本 | 状态 | | 0.2.x(0.2.0-rc.2 实测) | ✅ 支持 | | 0.1.2-rc.1 ~ 0.1.x | ✅ 支持 | | < 0.1.2-rc.1 | ❌ 不支持(那之前 session.events 还是属性,没有 snapshotEvents()) | 本插件不 import 任何 @deepseek-ai/* 官方包 —— 宿主能力(webServer、subprocess、agents、sessions、sessionQuery 等)全部通过 cordis 服务注入获取。因此 DSH 改动包级导出(例如 0.2.x 移除 dsh-settings 的 settingsNamespace / installSettingsSection)不会影响它。 需要跟着 DSH 适配的只有服务接口本身:目前用到 session.snapshotEvents()(0.1.2+ 的新形式)。 ❓ 常见问题 Q: 局域网链接打开提示"不安全"? A: 那是 HTTPS 自签名证书的预期行为(公网隧道用的是真证书,不会提示)。 最简单的办法是用面板里并列给出的 HTTP 那条链接 —— 免证书,直接打开。 若确实需要安全上下文(剪贴板 API 等),才用 HTTPS 那条:手机浏览器选「继续访问」,Edge 需关闭"增强安全性"。 Q: 重启 DSH 后链接变了? A: 公网隧道每次重启会生成新地址,这是正常行为。微信绑定的 token 会自动持久化恢复。 Q: cloudflared 下载失败? A: 首次启动需要联网下载 cloudflared(约 10MB),之后复用缓存。可手动下载放到 toolsDir 目录。 Q: 微信扫码后断开? A: 重启 DSH 后微信会自动重连(token 已持久化)。如仍断开,重新发送 /链接 扫码绑定。 📝 更新日志 查看 CHANGELOG.md 了解版本更新历史。 🤝 贡献 欢迎贡献!请查看 CONTRIBUTING.md 了解开发和提交流程。 📄 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
godchen520/dsh-web-remote
DSH 手机/外网远程访问插件:免配置公网隧道 + 局域网 HTTPS 直连 + 自定义公网链接/端口 + 微信机器人
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7