前言¶
DSH 跑在开发机上时,会话、审批和提问往往绑定在那一台电脑的浏览器里。你离开工位,只能等回到电脑前再处理;想在手机上续写对话或批准工具调用,也没有现成入口。常见做法是远程桌面或 SSH,但那是整台机器的接管,不是围绕 DSH 工作流的轻量遥控。
下面介绍 Blank-not-black 维护的 DSH Remote(GitHub:Blank-not-black/dsh-Remote)。它通过 DSH 插件、独立网关和 Android 应用 / WebUI 三件套,在局域网或 Tailscale 上提供会话查看、审批与提问处理、文件传输和运行状态总览,并用 Token 鉴权,数据只在你的设备之间流转。
这是什么¶
DSH Remote 是一套面向 DSH 的远程控制台:在手机或另一台电脑上查看会话、处理审批与提问、传输文件,并掌握主机运行状态。npm 包名为 dsh-remote-plugin,当前仓库版本为 0.6.15,许可证 MIT。
三个部分各司其职:
| 部分 | 角色 |
|---|---|
| DSH 插件 | 在 DSH Web 内提供入口,自动管理网关,展示主机与网关状态 |
| 独立网关 | 负责令牌鉴权、实时连接、文件传输和设备监控 |
| Android 应用 / WebUI | 手机、桌面浏览器和插件内嵌的远程操作界面 |
令牌即远程控制凭证。项目默认不引入额外账号系统;令牌保存在 ~/.dsh-remote/token,需像保护 SSH 密钥一样保管,不要提交到仓库或截图公开。
核心功能¶
以下能力均来自项目 README 与文档说明。
会话远程控制:查看会话、继续工作、切换模型、处理目标与后台任务。会话详情支持实时消息、历史加载、斜杠命令和全屏输入。
实时决策通知:审批、提问、任务状态实时推送;网络波动时可自动降级为轮询,恢复后再切回 WebSocket。
文件与图片:浏览主机目录,支持分块上传、断点续传、暂停与取消;可将拍照或相册图片作为 session.prompt 的图片内容发送到当前会话(取决于当前 DSH 组合与模型是否支持图像输入)。
运行全景:DSH 版本、网关链路、设备连接、Token 用量和近期活动集中在主页与统计页;插件面板和管理控制台可查看网关版本、端口、上游状态与 Token 近 7 日用量。
多网络接入:支持局域网、Tailscale,以及带认证的 WebSocket 隧道。手机与电脑应位于同一可信局域网,或通过 Tailscale 互通;不要把网关端口直接暴露到公网。
离线可看聊天记录:客户端可加载历史消息,便于弱网或短暂断连后继续查看。
安装与启用¶
插件需安装在 DSH Web 的 web profile。先确认本机 DSH Web 可正常打开,再在安装 DSH 的同一用户下执行:
dsh plugin --profile web add dsh-remote-plugin
dsh plugin --profile web list --depth 0
第二条命令用于确认插件已装入 web profile。
指定版本或从 Git 安装:
dsh plugin --profile web add dsh-remote-plugin@0.6.8
dsh plugin --profile web add "github:Blank-not-black/dsh-Remote#main&path:/packages/plugin"
经过上面的步骤后:
- 完整重启 DSH Web 进程(手动运行则停止后重新执行
dsh web;若使用 systemd 用户服务可执行systemctl --user restart dsh-web)。 - 在 DSH Web 中 Ctrl+F5 强刷,从侧栏打开 DSH Remote 面板。
- 在插件面板确认网关已运行,并在 DSH 主机上访问
http://127.0.0.1:8787/health,返回 JSON 表示网关端口可用。 - 从插件面板复制令牌或扫码配对;令牌亦保存在
~/.dsh-remote/token。 - 手机端在「设置 → 服务器」扫码,或填写
http://电脑局域网IP:8787与令牌(不可使用127.0.0.1或localhost)。 - 另一台电脑可直接打开
http://DSH主机IP:8787,浏览器进入桌面 WebUI。
插件内置网关,默认监听 0.0.0.0:8787,随 DSH 自动启动与自愈。网关开关意图保存在 ~/.dsh-remote/gateway.enabled。端口优先级为环境变量 DSH_REMOTE_GATEWAY_PORT → ~/.dsh-remote/gateway-port → 8787。
不使用插件时,可从 GitHub Releases 下载单文件网关(如 dsh-remote-linux-x64)独立运行:
./dsh-remote-linux-x64
PORT=9000 TOKEN=your-token ./dsh-remote-linux-x64
默认上游为本机 DSH Web http://127.0.0.1:3080,管理页为 http://127.0.0.1:8787/admin。
Android 应用安装包为 Release 中的 dsh-remote.apk。
典型用法¶
网关健康检查(在 DSH 所在电脑执行,便于区分网关未启动与网络不可达):
curl -i http://127.0.0.1:8787/health
ss -ltnp | grep ':8787'
curl -i http://127.0.0.1:3080/
若 /health 返回 ok: true 但 upstreamOk: false,说明网关已开而 DSH Web(默认 3080)不可达,需检查 DSH Web 进程而非网关本身。
文件传输 API(Bearer 令牌与插件面板或 ~/.dsh-remote/token 一致):
TOKEN=$(cat ~/.dsh-remote/token)
HOST=http://127.0.0.1:8787
curl -H "Authorization: Bearer $TOKEN" "$HOST/fs/list"
curl -OJ -H "Authorization: Bearer $TOKEN" "$HOST/fs/file?path=~/Downloads/example.zip"
curl -H "Authorization: Bearer $TOKEN" --data-binary @./photo.jpg \
"$HOST/fs/upload?path=~/Downloads&name=photo.jpg"
默认单文件上限 2GB,可通过 DSH_REMOTE_FS_MAX_UPLOAD 调整;允许目录默认包含当前用户目录及 DSH workspace.list 已登记的工作区,额外根目录可用 DSH_REMOTE_FS_ROOT 配置(Linux/macOS 用 : 分隔,Windows 用 ;)。
手机端导航:会话、文件、主页(链路健康与待办)、统计(Token 与费用)、设置(服务器、令牌、通知与皮肤)。
桌面 WebUI:左侧会话列表与工作台,文件传输、主页总览、统计抽屉,以及审批 / 提问通知卡片。
适用场景与注意¶
适合以下情况:
- DSH 在电脑上运行,需要在手机上查看会话、回复提问或处理工具审批。
- 需要在手机与 DSH 工作目录之间传文件,或把图片作为会话附件发送。
- 从另一台电脑查看会话、文件、Token 统计和设备连接,通过局域网或 Tailscale 访问,而不额外搭建账号系统。
使用前请注意:
- 插件以当前 DSH 进程的用户与权限运行,安装前应阅读源码并确认 MIT 许可证与行为是否符合预期。
- 网关默认监听所有网卡;防火墙需允许 TCP 8787 入站(无需对公网放行 DSH 3080)。手机连不上时检查是否使用了电脑局域网 IP 或 Tailscale
100.x.x.x地址,以及路由器 AP 隔离。 - 401 或未授权多为令牌不一致,应从当前插件面板重新扫码或复制令牌;页面黑屏或功能未更新时可 Ctrl+F5 或完全退出 App 后重开,避免静态资源缓存。
- 优先通过插件面板启动网关或重启 DSH Web 触发自愈;不要把
systemctl --user restart dsh-remote-gateway.service当作通用重启方式(插件拉起的网关可能是 transient 进程)。
DSH 生态理念是「一切皆插件」。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;dsh-remote-plugin 是社区维护的客户端类插件,GitHub 约 19 stars。
结尾¶
DSH Remote 把 DSH 最关键的决策面——会话、审批、提问和文件——搬到手机与第二台设备,而不是复制整台远程桌面。三件套分工明确,插件模式下一行命令即可启用,网关与 Token 机制也便于在可信内网或 Tailscale 中自托管。
- 目录页:https://www.skillhub.cn/plugins/Blank-not-black/dsh-Remote
- GitHub:https://github.com/Blank-not-black/dsh-Remote
- npm:https://www.npmjs.com/package/dsh-remote-plugin