packages/dsh-remote-web-ui
zhu1090093659/dsh-web手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
通过 Android App 或手机浏览器访问 DeepSeek Harness,支持安全局域网连接、远程访问、持久设备配对和可自定义移动界面。
DSH Mobile
能做什么 · 快速开始 · 连接教程 · 扩展与自定义 · 设备管理 · 第三方插件适配 · 安全 · 兼容性 · 文档 · 贡献者 · 更新记录 · English
DSH Mobile 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
当前正式版本:0.6.16。新增相册入口、浏览器语言记忆和 FRP 字段提示,改善前台重连;配合独立发布的 Android App 0.6.7,可选择同电脑局域网/远程切换,并迁移符合条件的纯文本草稿。插件更新与下载 · 完整更新记录。
版本说明:自插件 0.6.2 起,Android App 与插件独立编号、独立发布,版本号无需一致;插件升级不代表 App 需要同步升级。兼容说明。
下载 Android App 0.6.7 版本说明与校验文件
DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、cloudflared、自建 FRP 或自有反向代理远程通道连接电脑,继续使用同一份会话、工作区、消息和工具。电脑端分别启停局域网与远程访问、分别管理配对授权;Android App 统一显示已配对电脑。插件不修改 DeepSeek Harness 源码。
移动访问使用独立 HTTPS 与设备配对;Android App 固定局域网私有 CA,公开远程通道使用系统信任的证书;自签 FRP 入口还需由 0.4.6 App 在配对时固定远程 CA。
它还能在 DSH 对话里用 /mobile 定制手机端。
配对设备可以操作电脑上的 DSH,应视为完全受信任的设备。局域网只在可信网络开启;远程访问应使用可靠的 HTTPS 通道。手机丢失时,请立即从电脑端撤销设备。
先在电脑安装插件,再用 Android App 或手机浏览器配对。按你使用的 DSH 选择安装方式。
在应用的 插件 页面安装并启用 dsh-mobile,再打开 移动访问 配置局域网或远程通道。Desktop 的 profile 由应用管理,不适用下面的 --profile web 命令。
安装或更新后,请从应用菜单正常退出并重新打开 Desktop,无需清除会话或配对数据。若仍提示 dsh-mobile-question-fixes: failed to import,请检查安装日志;这也可能是组件解析问题,单纯重启不一定能解决。
已经安装 dsh 命令时,在终端执行:
dsh plugin --profile web add dsh-mobile@latest
dsh plugin --profile web exec dsh-mobile setup
dsh --profile web使用 DeepSeek Harness 源码或社区插件市场
在 DeepSeek Harness 源码目录中执行:
pnpm install
pnpm dsh plugin --profile web add dsh-mobile@latest
pnpm dsh plugin --profile web exec dsh-mobile setup
pnpm dsh --profile web也可以通过插件市场安装(可选):
dsh plugin --profile web add dshmarket重启 DSH 后,在 设置 → 插件市场 里搜索 dsh-mobile 并安装。首次打开“移动访问”时,局域网页会列出电脑当前网络;确认网卡后由插件生成私有证书并配置局域网,按提示重启一次 DSH 即可使用,无需再打开终端运行 setup。
setup 会自动选择并记住当前局域网,切换 Wi-Fi、热点或 IP 后通常自动恢复;仅在自动选择失败时使用 --address 192.168.x.x。设置、证书、设备和自定义文件保存在 $DSH_HOME/mobile-access/。
从上方链接下载正式 Android APK,或用手机浏览器打开电脑端生成的配对链接。随后按连接教程选择局域网或远程访问;手机不需要安装额外的隧道客户端。
通过 npm 安装的插件会在桌面界面加载时检查新版本,有更新时在访问面板标题右侧显示“更新插件”,安装后需重启 DSH。App 下载入口展示最新版本;本地开发包不会被自动覆盖,Android App 不会主动检查或推送版本更新。
局域网和远程访问是两套相互独立的连接:在电脑附近优先使用局域网,延迟最低;离开当前网络时再启用远程访问。电脑端分别管理开关与配对授权;Android App 将所有已配对电脑集中显示在设备列表中。
适合同一 Wi-Fi、以太网或手机热点,是默认且最简单的连接方式。
侧栏底部有其他插件入口时,移动访问会收起为手机图标;悬停可查看名称,点击仍打开原面板。独占该区域时恢复文字显示。
端口说明:dsh web --port 修改 DSH Web 上游端口(默认 3080),插件会自动跟随;dsh-mobile setup --port 修改 Mobile HTTPS 监听端口(默认 3443),配对二维码会包含实际端口。
无界面主机、内网代理与额外来源网段
无图形界面的 Linux 主机,或通过局域网 IP / 反向代理打开 DSH Web 时,左下角 移动访问 管理口同样可用。管理 API 仍要求 TCP 对端是本机回环(例如本机 socat / 反向代理连到 127.0.0.1),不会把插件自己暴露到公网;浏览器 Host 可以是 localhost、RFC1918 或 IPv4 链路本地地址,公网 IP 和任意域名仍会返回 403。反向代理必须只对可信的本机或内网请求开放,不能把 /api/mobile-access 管理路径公开转发到互联网。手机走的独立 HTTPS 入口(默认 3443)仍是移动端界面,不会变成桌面管理口。
已有 WireGuard 等受控路由网络时,0.6.0 提供额外可信网段。它只追加明确的来源 CIDR,不建立 VPN 或路由,也不自动改 Windows 防火墙。
不安装 App 也可以访问:点击 复制配对链接,在手机浏览器中打开。局域网使用私有证书,浏览器首次访问可能提示不受信任;只在确认这是自己的 DSH 网关后按浏览器指引继续。公开证书的远程入口不应出现证书警告,若出现请检查通道和证书,不要直接忽略。
手机浏览器中的配对和重新连接页面支持简体中文、英文和意大利文。插件 0.6.16 起优先使用当前网关主机名下记住的 DSH 显示语言,没有可用偏好时再按浏览器的 Accept-Language 选择;清除网站数据或更换主机名可能重置偏好。Android 原生界面跟随系统语言;DSH 内的插件控制面板跟随 DSH 当前语言。
浏览器手动配对时填写电脑端显示的 43 位配对码;以 dsh1. 或 dsh2. 开头的是 Android App 密钥,不要填入浏览器配对框。优先打开电脑端复制的配对链接,它会自动填写配对码;过期后在电脑端重新生成。
适合手机离开电脑所在网络后使用。远程访问默认关闭,手机不需要另外安装 Tailscale、cpolar、cloudflared 或 FRP。
远程服务可能受带宽和连接限额影响:cpolar 免费方案 当前为 1 Mbps,Tailscale Funnel 也存在不可配置的带宽限制,cloudflared 的 quick tunnel 由 Cloudflare 免费提供、地址随机且有限流。DSH Mobile 使用静态资源 gzip、WebSocket 长连接和顶部按需加载改善体验;会话的历史窗口与分页大小由 DSH 决定,插件无法提高服务商限额。
页面能打开但一直“重连中”,应先区分 WebSocket 升级失败、慢速数据同步和心跳超时,操作见慢链路与反复重连指南。0.5.4 还提供按确切路径启用的 WebSocket 压缩,默认关闭;长会话或计量网络可按指南尝试,并对比实际传输量。
下表的使用参考来自维护者在中国大陆自用网络的长期体验,不是普适测评;实际表现受运营商、网络和套餐影响,请在自己的手机网络验证。
连接方式 · 需要准备 · 地址特点与注意事项 · 维护者使用参考 cpolar · cpolar 账号与 Authtoken · 免费临时地址可能变化 · 免费方案限速明显,日常加载与同步体验较差 cloudflared 快速隧道 · 无需账号或域名 · 临时随机地址;不支持 SSE,即时通知存在限制;官方仅定位为开发测试用途 · 长期使用中经常断连,原因尚未确认;只作临时或测试选择 cloudflared 命名隧道 · Cloudflare 账号与域名 · 固定域名;配置指南 · 已长期使用的通道中最稳定;有账号和域名可优先尝试 Tailscale Funnel · Tailscale 登录与 Funnel 授权 · 实际可用性取决于网络 · 自用网络常需代理辅助,仍可能连接失败;并非所有用户都需要代理 自建 FRP · 已有 VPS,域名或真实公网 IPv4 · 需管理服务器;部署或接入既有 frps · 部署与资源更可控,长期稳定性取决于 VPS 线路、配置与运维 自有反向代理 · 已有公开 HTTPS 代理 · 插件只提供私有认证后端;配置指南 · 可沿用自己的代理设施,稳定性取决于代理、线路与运维 托管 Caddy · 腾讯云 DNSPod 管理的域名与公网入站 · 插件管理 HTTPS 与证书;Windows/Linux x64;配置指南 · 不提供内网穿透,需自行确认入站端口和映射;已有 Cloudflared 用户不必迁移
各通道的安装与登录步骤
在面板选择对应通道后:
frpc 按需下载校验,VPS 需单独清理。需要 Android App 0.3.3 或更新版本;证书、端口和操作步骤见 自建 FRP 使用指南。远程通知、服务器运维与安全限制
远程通知说明:浏览器的 Notification 权限按 Origin 分别授权,网页系统通知只显示在运行该网页的设备上。Android App 的任务提醒是独立的 0.4.0 功能,需要在 App 内 DSH 的 设置 → 通用设置 中主动开启,且依赖 WebView 页面仍存活;它不是通用的后台推送。需要可靠的后台推送时,请使用你已配置的服务端 webhook 或机器人通道。Funnel 的运行组件把公开监听生命周期绑定到父进程和受限控制通道;父进程退出、控制通道关闭或显式停止时会结束当前代次并清理资源。中国大陆 VPS 上的未备案域名可能被云厂商拦截,此时可使用公网 IPv4 模式。插件会校验按需下载的固定版本组件;本机托管的配置与程序保存在 $DSH_HOME/mobile-access/,可在面板中清理。VPS 侧的文件须按自建连接指南单独清理。
自建 FRP 的托管部署使用指向 DSH 回环网关的 HTTP vhost:VPS 上的明文 vhost 只允许回环访问,由 Caddy 提供公网 HTTPS。0.4.6 新增“接入既有 frps”,不会安装或改动服务器;公开 CA 档仍需受限 HTTP vhost 与 Caddy,自签档则用 frps TCP 透传至电脑端 HTTPS 网关,须由 0.4.6 Android App 在配对时固定 CA。自签档目前面向公网 IPv4,旧版 App 不支持;两档都不开放任意 FRP 配置。frps 的 proxyBindAddr 是全局代理监听设置,不能只为新增 TCP 入口调整而忽略已有明文 vhost。接入指南。
自有反向代理的 HTTP 后端只允许留在可信私网;不要把它映射到公网,也不要绕过它直连 DSH 或现有 LAN 3443。来源 CIDR 匹配代理的直接 TCP 来源,不信任转发头;反代须保留外部 Host(含端口)、Origin、Cookie 和 WebSocket。清除代理配置不会删除已配对远程设备。
各通道的系统和组件支持范围见兼容性。本机托管的程序、凭据与配置可从面板清理;VPS 上的文件必须按对应指南单独清理。
dsh-mobile-iroh 正在独立开发,探索通过 iroh 连接电脑,并沿用 DSH Mobile 的配对、设备列表和 WebView 体验。目前本地开发候选已接通 Rust 传输与 Android,并通过本地 QUIC/HTTPS/WSS 验证和 Android 构建;尚未并入本插件或正式发布,电脑端操作界面、自动证书配置与真机跨网验收仍待完成。它还不是当前正式 App 可选的连接方式。
在 DSH 对话里输入 /mobile ,当前会话的 agent 会处理定制请求;文件修改完成后,手机端通常会在几秒内刷新。例如:
/mobile 把手机端做成老式终端的样子,让消息像终端输出一样逐行滚动也可以让手机端调用电脑端的能力,比如实时读取电脑状态:
/mobile 为手机端添加赛博朋克风格的电脑监控面板,实时显示电脑的 CPU、内存和磁盘占用/mobile 把需求交给 DSH 对话中的 agent,由它直接修改本机 $DSH_HOME/mobile-access/ 下的文件,已配对的移动页面会自动检查并应用。改动分两类:界面和交互在 mobile.css/mobile.js;需要电脑能力时用 extensions/ 下的扩展,其 host.mjs 以本机用户权限在电脑上运行。不修改 DeepSeek Harness 源码。
定制需要从 移动访问的配对入口进入。直接打开普通 DSH 网页或调整浏览器为手机视口,不等于完成移动配对;文件存在也不代表当前页面已加载。若扩展接口返回 401,先核对入口与配对状态,不要开放匿名访问或公开 Cookie、Token。
旧的 mobile.css 补丁可能覆盖新版内置修复。排查布局时先备份文件,在同一会话、方向和字号下对比有无该样式的效果,不要先叠加更多规则。匹配 CSS Modules 类名时应限定到已核对的区域祖先,例如 [data-dsh-mobile-header] [class*="_titleRow"],不要裸用后缀/子串选择器;用 display: none 隐藏操作区会移除其中功能,不等于折叠。感谢 #219 提供的对照记录。
扩展清单及其脚本、样式和资源按版本标识刷新。插件监听到 /mobile 或扩展文件变化后,会通过已认证连接通知手机立即更新;页面可见时每 45 秒、隐藏时每 5 分钟的检查只作为断线兜底。Host 暂存失败会继续使用现有版本;若 Host 已更新但新手机界面激活失败,则关闭该扩展并自动重试,避免混用新旧能力。
扩展动作的 input 可以直接使用 api.schema.object(...) 等 Schemastery schema,也可以使用带 parse(value) 的适配器;手机端 api.host.invoke() 会按 JSON 请求发送,输入会在电脑端动作执行前完成校验和规范化。
附件功能优先复用 DSH 自带的文件上传。扩展若需模拟拖放,dataTransfer 除了 files,还须提供可迭代的 items(文件项列表),不能只拼一个 files 数组。部分 WebView 的原生拖放构造不完整,兼容处理可参考插件内的文件投递实现;dragover 接受或事件派发成功不代表附件已加入,应检查输入框中的附件与预览。
0.6.3 新增可选的 Worker 执行模式,用于约束可信本地扩展的 JavaScript 阻塞;默认关闭,按扩展选择,故障后显式恢复,不自动重放操作。这不是权限沙箱,也不要求 App 同步版本。
你甚至可以通过扩展连接电脑上运行的酒馆,并从同一 App 打开它的简易移动前端。
host.mjs 与本机程序拥有相同权限;仅创建和运行你理解并信任的电脑端扩展。示例的实际效果:
Android App 在“已配对设备”中统一显示电脑及其局域网/远程连接记录。两种方式的授权彼此独立,同一台电脑可能有两条记录。升级会迁移旧凭据,无需重新配对;重新验证变化的地址后,相同身份的记录会合并并保留名称。自签 FRP 使用独立 CA 指纹,可能另成一条记录。Token 和固定的 CA 由 Android Keystore 加密;配对二维码含短期配对信息,不含长期设备 Token 或 CA 私钥。
未手动指定标识时,公开证书远程入口的新配对使用电脑保存的随机标识,避免相同安装路径让两台电脑的记录互相覆盖。已有连接无需为此重新配对,也不需要更新 Android App;局域网和自签 FRP 仍按各自的 CA 区分。更新后正常退出并重启 DSH,降级前请先阅读状态备份注意事项。
每条记录显示自定义名称、连接方式、Origin、定期更新的可达状态和最近连接时间。绿色状态点表示“可达”,灰色状态点表示“检测中”“暂不可达”“配对已过期”或“电脑端已移除”;可达性检查直接验证 DSH Gateway,不依赖 ICMP,也不会把暂时断网误判成电脑端撤销。