dsh-mobile README

The project's README from github.com/saya-ch/dsh-mobile. As one markdown file: README.md.

用手机使用电脑中的 DeepSeek Harness

DSH Mobile

在手机上安全、实时地使用电脑中的 DeepSeek Harness。

npm 版本 npm 月下载量 CI Android 10+ Apache-2.0 Awesome DSH Plugin

能做什么 · 快速开始 · 连接教程 · 扩展与自定义 · 更新记录 · English

DSH Mobile 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。

0.3.14 更新:0.3.13 布局回归修复(右栏在已发布与开发线宿主均可显示)+ 面板「更新插件」现在先展示最新版更新内容与注意事项、确认后才更新;0.3.13 功能不变(第三方 WebSocket 一键放行 #47、面板修整、读屏播报)。详细记录。

升级提醒:推荐升级到插件 0.3.14(0.1.3 各版本桌面均适用,含 alpha.1)。安装新插件后需重启 DSH。现有 0.3.3-0.3.13 App 可继续使用,无需重新配对。兼容说明。

DSH Mobile 安卓应用图标
下载 Android App 0.3.14
版本说明与校验文件

DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、自建 FRP 远程通道连接电脑,继续使用同一份会话、工作区、消息和工具。局域网与远程访问分别启停、分别管理设备,且都不修改 DeepSeek Harness 源码。

移动访问使用独立的 HTTPS 与证书固定,只有配对过的设备能通过校验接入。

它还能在 DSH 对话里用 /mobile <需求> 定制手机端。

能做什么

配对设备被视为完全信任,可以操作电脑上的 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,一键安装即可。

setup 会自动选择并记住当前局域网,切换 Wi-Fi、热点或 IP 后通常自动恢复;仅在自动选择失败时使用 --address 192.168.x.x。设置、证书、设备和自定义文件保存在 $DSH_HOME/mobile-access/。

安装并启动 DSH 后,按照下一节选择局域网或远程连接。

通过 npm 安装的插件会在桌面界面加载时检查新版本,有更新时在访问面板标题右侧显示“更新插件”,安装后需重启 DSH。App 下载入口展示最新版本;本地开发包不会被自动覆盖,Android App 暂无主动更新通知。

连接教程

局域网和远程访问是两套相互独立的连接:在电脑附近优先使用局域网,延迟最低;离开当前网络时再启用远程访问。两边分别管理开关、设备和登录状态,互不影响。

局域网访问

适合同一 Wi-Fi、以太网或手机热点,是默认且最简单的连接方式。

DSH Mobile 局域网访问、配对二维码与设备管理

  1. 让手机和电脑连接同一个局域网,在 DeepSeek Harness 左下角打开 移动访问 → 局域网。
  2. 如果尚未开启,点击 开启局域网访问;随后点击 生成并复制密钥,面板会显示配对二维码。
  3. 在 Android App 中进入 局域网访问,扫描发现电脑并点击设备,再扫描二维码或粘贴配对密钥。
  4. 配对完成后会建立持久设备信任。以后打开 App 会自动发现并连接,切换 Wi-Fi、热点或 DHCP 地址通常不需要重新配对。

不安装 App 也可以访问:点击 复制配对链接,在手机浏览器中打开;首次访问需要按浏览器提示手动信任插件证书。

远程访问

适合手机离开电脑所在网络后使用。远程访问默认关闭,手机不需要另外安装 Tailscale、cpolar 或 FRP。

远程服务可能受带宽和连接限额影响:cpolar 免费方案 当前为 1 Mbps,Tailscale Funnel 也存在不可配置的带宽限制。DSH Mobile 通过 10 条分页、顶部按需加载、gzip 和 WebSocket 长连接减少流量与等待,但无法突破服务商限额。

DSH Mobile 远程访问与通道选择

  1. 在 DeepSeek Harness 左下角打开 移动访问 → 远程,选择一种连接方式:
    • Tailscale Funnel:点击 启用远程访问,在打开的官方页面完成一次 Tailscale 登录;按面板提示继续允许 Funnel,然后返回 DSH 等待连接就绪。
    • cpolar:点击 安装官方组件,登录 cpolar 控制台取得 Authtoken,粘贴后点击 保存并连接。组件只会在确认后下载到插件私有目录。
    • 自建 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 使用指南。
  2. 状态变为“远程访问已就绪”后,点击 生成远程配对二维码。
  3. 在 Android App 中进入 远程访问,扫描二维码完成独立配对。
  4. 此后 App 会保存设备信任并自动重连;不使用时可以关闭远程访问,局域网连接不会受影响。

远程通知说明:浏览器通知权限按地址分别授权,远程地址需在浏览器中单独允许;系统级弹窗只出现在电脑上,手机收不到。任务完成要推送到手机时,请使用第三方通道(如 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 已更新但新手机界面激活失败,则关闭该扩展并自动重试,避免混用新旧能力。

你甚至可以通过扩展连接电脑上运行的酒馆(

host.mjs 与本机程序拥有相同权限;仅创建和运行你理解并信任的电脑端扩展。

示例的实际效果:

/mobile 定制为老式终端界面 /mobile 定制为老式终端界面 /mobile 定制为赛博朋克监控面板 /mobile 定制为赛博朋克监控面板

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 的源码和 3080 桌面页面都不会被修改,安装和卸载完全通过插件机制完成。

安全

完整说明见 SECURITY.md。

兼容性

下表列出各插件版本验证支持到的 DeepSeek Harness 版本(早于该版本的 0.1.x 均兼容)。0.3.6 起插件不再按版本号拒绝启动,未列出的更新版本由 CI 契约检查兜底。历史记录见 CHANGELOG.md。

DSH Mobile 插件 验证支持的 DeepSeek Harness 版本
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.3.14 App 无需重新配对;更早的 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。

dsh-mobile (saya-ch/dsh-mobile)

webview
Searching Database…

What is this?DSH Mobile is an Android app and companion plugin for DeepSeek Harness (DSH) that lets you access your desktop DSH session from your phone over LAN or an optional remote tunnel, keeping the same workspace, messages and tools in sync in real time.
Is this a plugin or a standalone app?Both: a DSH plugin runs on your desktop providing the connection server, while the Android app is just a thin Kotlin WebView shell around the same mobile web interface; you can also skip installing the app and just open the page in your phone's browser.
How do I get it running?If dsh is already installed you can run it directly from DeepSeek Harness, or install the plugin from the in-app plugin marketplace (Settings → Plugin Marketplace, search dsh-mobile), restart DSH, then pair your phone through the LAN panel with a QR code, link, or key.
Do I need to install Tailscale or FRP on my phone?No. Remote access is optional and off by default, and your phone doesn't need Tailscale, cpolar, or FRP installed — those tools, if used, only run on the desktop side.
Is remote access always fast and reliable?Not necessarily: the free cpolar plan caps bandwidth at 1 Mbps and Tailscale Funnel has its own non-configurable bandwidth limit, so the app minimizes traffic but can't exceed those provider caps, and Tailscale Funnel can be unstable inside mainland China.
Does the remote tunnel work from any desktop OS?Built-in Tailscale Funnel and the managed cpolar integration currently only work from a Windows x64 desktop, while the manual self-built FRP tunnel supports Windows, Linux and macOS on both x64 and arm64.
How do I customize the mobile UI?Type /mobile in a DSH chat and the agent will directly edit the mobile.css/mobile.js files and anything under extensions/, with changes pushed to your phone within seconds.
What do I do if a plugin's WebSocket keeps failing on mobile?Open the diagnostics page, which groups blocked third-party plugin connections by directory; allowing the exact blocked path with one click usually fixes errors like a terminal reporting code 1006.
Will I have to re-pair every time I switch Wi-Fi networks?Usually not — the app auto-discovers the desktop again after switching Wi-Fi, hotspot, or IP address without requiring a new pairing.
Creator
saya-ch
Size
49.2 MB
Stars
502
Age
2mo
Commits · 90 Days