dsh-mobile
DSH Mobile
在手机上安全、实时地使用电脑中的 DeepSeek Harness。
能做什么 · 快速开始 · 连接教程 · 扩展与自定义 · 更新记录 · English
DSH Mobile 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
0.4.0 更新:加入多设备管理、电脑端撤销状态同步、无 Session 可达性检查;完善插件市场局域网引导、任务状态通知、原生 WebView 沉浸布局和三语配对页。详细记录。
升级提醒:0.4.0 需要同步更新插件与 Android App 才能使用多设备列表;旧 App 仍可使用原有单设备配对。兼容说明。
下载 Android App 0.4.0
版本说明与校验文件
DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、自建 FRP 远程通道连接电脑,继续使用同一份会话、工作区、消息和工具。局域网与远程访问分别启停、分别管理设备,且都不修改 DeepSeek Harness 源码。
移动访问使用独立的 HTTPS 与证书固定,只有配对过的设备能通过校验接入。
它还能在 DSH 对话里用 /mobile <需求> 定制手机端。
- 在手机上继续电脑端的工作:同一份会话、工作区、消息和工具,实时同步。
- 用对话定制手机端:直接在 DSH 对话里改手机页面的布局、交互和功能,几秒内刷新。
- 专属触屏布局:会话抽屉、工具详情、设置、提问卡片和输入栏都按手机重新组织。App 原生页面跟随系统显示简体中文、英文或意大利文;插件界面跟随 DSH 的语言设置,意大利语资源已为 DSH 后续支持预留。
- 图片附件:文件选择使用 DSH 原生“添加”组;DSH Mobile 只在该组补充“拍照”,拍摄结果按 DSH 原生附件流程发送。
- 自动发现、无需重新配对:切换 Wi-Fi、热点或 IP 后通常自动恢复。
- 一键连接诊断:检查版本、网关、网卡、防火墙和远程通道;稳定的原因码在界面中本地化,并生成不含凭据与完整地址的脱敏报告。
- 第三方插件 WebSocket 一键放行:诊断页按目录分组记录被拦截的插件连接(含次数),点允许即放行确切路径,未批准的一律拦截;有新拦截时侧栏红点提醒(#47)。若某插件的连接一直失败(如终端报 1006),先到诊断页看看有没有被拦的连接,一键放行即可,通常无需手动配置。
- 更快恢复连接:远程重开会并行恢复可信连接、复用版本化资源,并压缩移动端启动批次。
- 三种配对方式:扫码、配对链接、密钥。
配对设备被视为完全信任,可以操作电脑上的 DSH;建议只在可信的家庭、办公局域网或可信 VPN 中使用。
快速开始
已经安装 dsh 命令:
dsh plugin --profile web add dsh-mobile@latest
dsh plugin --profile web exec dsh-mobile setup
dsh --profile web
直接使用 DeepSeek Harness 源码:
corepack enable; 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/。
安装并启动 DSH 后,按照下一节选择局域网或远程连接。
通过 npm 安装的插件会在桌面界面加载时检查新版本,有更新时在访问面板标题右侧显示“更新插件”,安装后需重启 DSH。App 下载入口展示最新版本;本地开发包不会被自动覆盖,Android App 暂无主动更新通知。
连接教程
局域网和远程访问是两套相互独立的连接:在电脑附近优先使用局域网,延迟最低;离开当前网络时再启用远程访问。两边分别管理开关、设备和登录状态,互不影响。
局域网访问
适合同一 Wi-Fi、以太网或手机热点,是默认且最简单的连接方式。
- 让手机和电脑连接同一个局域网,在 DeepSeek Harness 左下角打开 移动访问 → 局域网。
- 如果尚未开启,点击 开启局域网访问;随后点击 生成并复制密钥,面板会显示配对二维码。
- 在 Android App 中进入 局域网访问,扫描发现电脑并点击设备,再扫描二维码或粘贴配对密钥。
- 配对完成后会建立持久设备信任。以后打开 App 会自动发现并连接,切换 Wi-Fi、热点或 DHCP 地址通常不需要重新配对。
端口说明: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)仍是移动端界面,不会变成桌面管理口。
不安装 App 也可以访问:点击 复制配对链接,在手机浏览器中打开;首次访问需要按浏览器提示手动信任插件证书。
手机浏览器中的配对和重新连接页面会按浏览器的 Accept-Language 显示简体中文、英文或意大利文;Android App 则跟随系统语言。DSH 内的插件控制面板继续跟随 DSH 当前语言。
远程访问
适合手机离开电脑所在网络后使用。远程访问默认关闭,手机不需要另外安装 Tailscale、cpolar 或 FRP。
远程服务可能受带宽和连接限额影响:cpolar 免费方案 当前为 1 Mbps,Tailscale Funnel 也存在不可配置的带宽限制。DSH Mobile 通过 10 条分页、顶部按需加载、gzip 和 WebSocket 长连接减少流量与等待,但无法突破服务商限额。
- 在 DeepSeek Harness 左下角打开 移动访问 → 远程,选择一种连接方式:
- Tailscale Funnel:点击 启用远程访问,在打开的官方页面完成一次 Tailscale 登录;按面板提示继续允许 Funnel,然后返回 DSH 等待连接就绪。
- cpolar:点击 安装官方组件,登录 cpolar 控制台取得 Authtoken,粘贴后点击 保存并连接。组件只会在确认后下载到插件私有目录;免费临时地址可能在 DSH 或 cpolar 重启后变化。
- 自建 FRP(高级):展开 自建连接,填写 VPS、frps 端口、共享 Token 和公开 HTTPS 地址;公开地址可以是自己的域名,也可以直接是 VPS 公网 IPv4(例如
https://203.0.113.10,请换成你自己的真实地址,文档示例网段会被拒绝)。可以复制受限模板手动部署,也可以填写 SSH 用户、SSH 端口和本机私钥路径,点击 部署 frps + Caddy 自动部署。自动部署支持 Ubuntu/Debian + systemd,使用 OpenSSH 密钥或 ssh-agent,不接受密码,也不会覆盖非 DSH Mobile 管理的 Caddyfile;部署与清理前都会展示服务器主机指纹,需到 VPS 控制台核对后才能继续。公网 IP 模式会申请约 6 天有效的 Let’s Encrypt IP 证书并配置每日自动续期。部署完成后再安装官方frpc并验证连接。不再需要服务器时可用“复制 VPS 卸载脚本”或一键清理,只删除 DSH Mobile 自己的服务与配置。需要 Android App 0.3.3 或更高版本。详见自建 FRP 使用指南。
- 状态变为“远程访问已就绪”后,点击 生成远程配对二维码。
- 在 Android App 中进入 远程访问,扫描二维码完成独立配对。
- 此后 App 会保存当前地址和设备凭据并自动重连。若 cpolar 免费临时地址发生变化,请扫描电脑端当前远程二维码重新验证连接;无需清除 App 数据。旧设备 token 只会发送到原先保存的精确 Origin,不会发送给二维码中的新域名。
远程通知说明:浏览器通知权限按地址分别授权,远程地址需在浏览器中单独允许;系统级弹窗只出现在电脑上,手机收不到。任务完成要推送到手机时,请使用第三方通道(如 dsh-messager 的飞书/企业微信/Telegram 推送),它们走服务端下发,不受网关影响。
Tailscale Funnel 覆盖范围广,但在中国大陆网络下可能不稳定。其运行组件把公开监听生命周期绑定到父进程和受限控制通道;父进程退出、控制通道关闭或显式停止时会结束当前代次并清理资源。cpolar 更适合国内网络;自建 FRP 适合已有 VPS、希望避开公共服务带宽限制的用户。中国大陆 VPS 上的未备案域名可能被云厂商拦截,此时可使用公网 IPv4 模式。插件会校验按需下载的固定版本组件,配置与程序均保存在 $DSH_HOME/mobile-access/,可随时在面板中彻底清除。
自建 FRP 只生成一个指向 DSH 回环网关的 HTTP vhost,不提供任意 FRP 配置、TCP/UDP 代理或 FRP 插件。VPS 的明文 vhost 必须只监听 127.0.0.1,由 Caddy 提供公网 HTTPS;插件会拒绝可从公网访问的明文端口,并在公开发现接口确认连接到当前电脑后才显示“已就绪”。
远程公开地址仍受 DSH 设备配对保护。内置 Funnel 与托管 cpolar 当前支持 Windows x64;按需安装的 FRP 0.70.1 支持 Windows、Linux、macOS 的 x64 与 arm64。
扩展与自定义
在 DSH 对话里输入 /mobile <需求>,DSH 会直接修改手机端的文件,几秒内生效。例如:
/mobile 把手机端做成老式终端的样子,让消息像终端输出一样逐行滚动
也可以让手机端调用电脑端的能力,比如实时读取电脑状态:
/mobile 为手机端添加赛博朋克风格的电脑监控面板,实时显示电脑的 CPU、内存和磁盘占用
/mobile 把需求交给 DSH 对话中的 agent,由它直接修改本机 $DSH_HOME/mobile-access/ 下的文件,保存后手机端自动生效。改动分两类:界面和交互在 mobile.css/mobile.js;需要电脑能力时用 extensions/ 下的扩展,其 host.mjs 以本机用户权限在电脑上运行。不修改 DeepSeek Harness 源码。
扩展清单及其脚本、样式和资源按版本标识刷新。插件监听到 /mobile 或扩展文件变化后,会通过已认证连接通知手机立即更新;页面可见时每 45 秒、隐藏时每 5 分钟的检查只作为断线兜底。Host 暂存失败会继续使用现有版本;若 Host 已更新但新手机界面激活失败,则关闭该扩展并自动重试,避免混用新旧能力。
扩展动作的 input 可以直接使用 api.schema.object(...) 等 Schemastery schema,也可以使用带 parse(value) 的适配器;手机端 api.host.invoke() 会按 JSON 请求发送,输入会在电脑端动作执行前完成校验和规范化。
你甚至可以通过扩展连接电脑上运行的酒馆(
host.mjs与本机程序拥有相同权限;仅创建和运行你理解并信任的电脑端扩展。
示例的实际效果:
设备管理
Android App 将局域网、cpolar、Tailscale Funnel 和自建 FRP 统一整理到“已配对设备”列表。首次升级会自动迁移旧版局域网与远程凭据,不要求重新配对;地址变化时按 DSH 安装的稳定 instanceId 合并原记录,保留自定义名称。设备 Token 和局域网 CA 继续由 Android Keystore 加密保存,不会显示在列表或二维码中。
每条记录显示自定义名称、连接方式、Origin、实时可达状态和最近连接时间。绿色状态点表示“可达”,灰色状态点表示“检测中”“暂不可达”“配对已过期”或“电脑端已移除”;可达性检查直接验证 DSH Gateway,不依赖 ICMP,也不会把暂时断网误判成电脑端撤销。
- 启动时打开 → 直接进入 DSH(默认):单设备直接连接;多设备优先连接上次使用的设备,其次按最近连接时间选择仍有效的设备。连接超过有限重试预算后自动回到列表,不会无限转圈。
- 启动时打开 → 显示设备列表:每次启动先选择电脑,适合经常在多台设备之间切换。该选项位于列表右上角的设置按钮中,修改后立即保存。
- 点按设备行可连接;右侧“…”和长按提供相同的操作面板,可编辑名称、立即检测、重新配对或删除本地记录。删除前会二次确认,并提供短暂撤销;撤销只恢复本机记录,不恢复电脑端已经撤销的授权。
- 在 WebView 页面打开 DSH 设置 → 通用,选择 切换电脑 可回到已配对设备列表;该动作仅在 Android App 中显示。电脑端撤销设备后,App 保留该条目并显示“电脑端已移除”,停止自动重连,同时提供 重新配对 和 删除本地记录。
![]() 设备管理列表:查看已配对电脑、连接方式和可达状态 |
![]() 启动行为设置:选择直接进入 DSH 或显示设备列表 |
第三方插件适配
移动适配保持 DSH 原有的工作区、任务管理、终端和文件面板入口,不会把第三方插件内容隔离成另一套页面。下面的宽屏截图展示 Android App 在宽屏下的布局。App 会根据屏幕宽度自适应:手机使用抽屉和浮层,宽屏使用并排面板;两种布局共享相同的功能和连接方式。第三方插件仍由 DSH 自己加载,移动层负责适配布局与连接,不修改 DeepSeek Harness 源码。
兼容条件与 WebSocket 放行规则:
代理页面为兼容部分社区插件允许嵌入 HTTP 页面;这类内容未加密,可能被篡改,浏览器也可能因混合内容策略拦截。处理敏感内容时请使用 HTTPS。通过 HTTPS 管理入口打开远程面板时,页面顶部会显示相同提醒。
- 本版本已按 DSH
0.1.5-rc.2的 renderer-v2 合同检查,并保留对0.1.5-rc.1局域网路径的验证。DSH 页面需要提供标准的会话、main/panelInfo和rightbar插槽;插件自身需要通过 DSH 的标准面板或侧边栏入口注册内容。 - 网关默认只允许 DSH 内置的第一方 WebSocket 路径。社区侧边栏插件使用的其他路径默认拦截,通常会在诊断页显示为待处理项目;截图中的
/sidebar/ws/agent-terminals就属于这类需要按实际插件确认的路径。 - 在 连接诊断 → 第三方 WebSocket 路径 中,只对确认过的精确路径点击 允许。系统不接受带查询字符串或模糊前缀的路径;不建议使用“全部允许”。已允许的路径可以随时移除,局域网和远程连接使用同一套规则。
- 放行只代表该路径可以通过已认证、同源的 DSH Mobile 网关,不会开放任意 TCP/UDP 端口,也不会绕过设备配对。若社区插件仍然连接失败,先看诊断页的实际拦截路径,再按一条路径放行。
![]() Android App 下社区侧边栏插件的兼容 |
![]() 连接诊断:检查第三方 WebSocket 路径并按需放行 |
App 与手机浏览器
| 方式 | 适合场景 | 说明 |
|---|---|---|
| Android App | 日常使用 | 首屏分开显示局域网与远程入口;局域网自动发现,远程使用系统信任的 HTTPS 通道 |
| 手机浏览器 | 临时或跨平台访问 | 打开“移动访问”卡片显示的 HTTPS 地址;首次连接需在浏览器手动信任该证书 |
Android App 只是 Kotlin WebView 薄壳,不内置另一份网页;手机浏览器访问的是同一页面。需要排查兼容性时,可在浏览器地址后追加 ?frontend=stock,临时回到旧的桌面页面适配模式。
社区客户端(非官方):微信小程序客户端 原生微信小程序实现,复用「移动访问」的配对与 Remote 流协议(需 dsh-mobile ≥ 0.3.8)。 因微信正式版强制「合法域名」(需 ICP 备案的自有 HTTPS 域名),目前需通过微信开发者工具 / 真机调试使用,详见其 README。
工作原理
flowchart LR
Phone["Android App / 手机浏览器"] -->|"局域网 HTTPS"| Lan["局域网网关"]
Phone -->|"远程 HTTPS"| Remote["独立远程网关"]
Lan --> Gateway["DSH Mobile Gateway Core"]
Remote --> Gateway
Gateway -->|"回环代理"| DSH["原生 DSH Web 与 Host"]
DSH -->|"同一工作区、会话和事件流"| Phone
插件包含三层:Host face 负责发现、配对、HTTPS、回环代理和扩展注册表;Client face 提供独立的移动布局与扩展 SDK;Android App 提供受限的原生 Bridge。Bridge 使用 androidx.webkit WebMessage,每条消息都校验精确顶层 Origin 和主 Frame,并限制消息大小;不使用 addJavascriptInterface。DeepSeek Harness 的源码和当前 Web 页面(默认端口 3080,可通过 dsh web --port 修改)都不会被改动,安装和卸载完全通过插件机制完成。
安全
- 局域网监听只用于可信家庭、办公网络或可信热点;不要自行做端口转发。
- 远程地址可从公网到达,但未配对请求无法进入 DSH;不使用时应关闭远程开关。
- cpolar 仅在用户确认后下载固定官方版本并校验大小和 SHA-256;不会安装系统服务、写入 PATH 或设置开机启动,插件清理会删除其托管文件。
- 自建 FRP 仅在用户确认后从官方 Release 下载固定版本
frpc,校验来源、精确大小、SHA-256、压缩包路径和可执行文件版本;共享 Token 不会出现在状态、诊断或日志中。复制服务器模板时 Token 会进入系统剪贴板,请粘贴后及时清除;本机清理只删除插件管理的文件,VPS 需要用面板提供的卸载脚本或一键清理单独清除。自动部署与一键清理前都会展示 SSH 主机指纹,必须到 VPS 控制台核对后才能继续。 - 配对设备拥有控制电脑端 DeepSeek Harness 的能力,应视为完全可信设备;丢失手机后应在电脑端撤销设备。
- 移动网关开启时才监听局域网;关闭后 DeepSeek Harness 仍正常在电脑本机运行。
完整说明见 SECURITY.md。
兼容性
下表列出各插件版本验证支持到的 DeepSeek Harness 版本(早于该版本的 0.1.x 均兼容)。0.3.6 起插件不再按版本号拒绝启动,未列出的更新版本由 CI 契约检查兜底。历史记录见 CHANGELOG.md。
| DSH Mobile 插件 | 验证支持的 DeepSeek Harness 版本 |
|---|---|
0.3.15、0.3.16、0.4.0 |
0.1.5-rc.2(契约检查);0.1.5-rc.1(@idoall 局域网实测) |
0.3.14 |
0.1.3-alpha.2 |
0.3.9-0.3.12 |
0.1.3-alpha.1 |
0.3.6-0.3.8 |
0.1.2-rc.1 |
0.3.4、0.3.5 |
0.1.2-alpha.2 |
0.3.0-0.3.3 |
0.1.2-alpha.1 |
0.1.4、0.2.x |
0.1.1-rc.2 |
现有 0.3.3–0.4.0 App 无需重新配对;cpolar 用户应使用 0.3.15 或更新 App,较早版本可能在免费线路的慢速首次加载完成前超时;更早的 App 还使用不同的状态栏策略。App 0.4.0 才支持多设备列表、启动行为设置和电脑端撤销状态同步;旧版 App 仍可连接已保存的单台设备。App 0.1.3 及更早版本需卸载重装并重新配对。
卸载
dsh plugin --profile web remove dsh-mobile
同时清除插件数据:
dsh plugin --profile web exec dsh-mobile purge --yes
dsh plugin --profile web remove dsh-mobile
源码模式把上述 dsh 换成 pnpm dsh。
开发
npm ci
npm run verify
Android 构建见 App 文档。
Apache-2.0,详见 LICENSE。




