WNLUO/dsh-mobile-plugin

dsh-mobile-plugin

DeepSeek Harness App 让你在手机上使用这台电脑或服务器上的 DeepSeek Harness。手机和平板都能用,安卓和苹果都支持。在手机上可以继续对话、查看文件、管理插件,也可以从正在用的这一台连上其他几台上的 DeepSeek Harness,分别打开来用。

待分类deepseek-harnessdshmobile

AI-HUB 移动端插件

AI-HUB:手机和平板上的 DeepSeek Harness 会话界面

电脑上开着的 DeepSeek Harness,手机上接着用。

AI-HUB 的手机端插件。 装在电脑这边,手机 App 就通过一条中转隧道或局域网配对连进你的 DeepSeek Harness —— 看会话、接着聊、管理文件和工作区,进度实时同步。

它和绝大多数 DSH 插件不一样的一点:不需要桌面外壳,也不需要 Electron。同一份包可以单独跑在没有图形界面的服务器上,当作无头宿主用 —— 手机连的是一台根本没有屏幕的机器。

手机 App 经中转或局域网连到你电脑上的 DeepSeek Harness

手机连的是你自己那台电脑上的 DeepSeek Harness,不是某个云端服务。电脑不用公网 IP,也不用在路由器上开端口:插件从内网主动往外建一条隧道,手机沿这条路回来。

功能

会话与工作区

  • 新建、接着聊、改名、搜索会话,也能从任意一条分出分支单独往下走。
  • 工作区建、改名、删除、置顶、归档都在手机上完成,手机端排的顺序会同步回电脑。
  • 回复逐块流式到达,跑到一半就能看见内容,工具调用也是实时的。
  • 手机上读过,电脑那边的未读绿点跟着消失;电脑侧边栏的展开、折叠状态同步到手机,两边结构一样。

不用回电脑也能操作

  • 审批与提问:电脑上会弹的卡手机同样有,权限请求、选择题、多选、自定义回答都能直接点。
  • 排队插话:正在跑的时候补一句,按队列排在当前这一步之后。
  • Git:看状态和 diff、暂存、提交、推送、切分支,提交信息可以先让模型写。
  • 文件:浏览目录、读文件,也能把手机上的文件传回电脑,落在固定的收件目录。
  • 插件:手机上的插件市场里搜索、安装、更新、卸载;插件自己也能升级到新版。
  • 模型:随时换模型,看有哪些渠道和可用模型,本机自建的渠道也能直接在手机上配。
  • 日程与子代理:定时任务能看、新建、改、暂停恢复、立刻跑一次、删掉;看正在跑的子代理,打断它或者补一句话。

远程电脑

在家里的 A 电脑打开插件控制台的「远程电脑」,生成并复制绑定信息,再到随身的 B 电脑粘贴添加。绑定信息十分钟内有效、只能使用一次;两台电脑都需要安装支持远程电脑的插件。

绑定后在 B 点击「在桌面端打开」,即可通过本机地址使用 A 的完整 DSH 网页,不需要域名或手机参与。默认自动选择局域网、直连、IPv6、中转或可用隧道;网络变化后重新选路,正常的实时连接不会因细小测速差异被打断。完整网页授权具有远程操作该 DSH 的能力,只向自己信任的电脑发放。

点击后优先由插件随包分发的桌面显示壳开窗口,而不是交给系统默认浏览器。它不是给最终用户双击安装的独立应用,也不做安装器:按平台作为插件的可选依赖 dsh-mobile-shell-<os>-<cpu> 一起装,插件把一次性地址和可选的设备名作为命令行参数交给它。一次点击启动一个进程、开一个窗口,窗口标题带设备名;同一台 B 电脑可以同时开多台 A 电脑的窗口,互不干扰。平台包的版本独立于插件,壳没改就不抬版本,插件更新不会重下它;机器上没装对应平台包时自动回退到原来的系统浏览器路径,远程电脑功能照常可用。

每次网页访问允许一小时,临近到期会提示;在 B 的插件控制台主动续期才能继续,到期后须重新打开,绑定关系保留。停止访问、插件退出或 A 撤销授权会断开网页连接,不停止 A 上已经运行的任务。A 可在「可访问本机的电脑」中撤销 B;B 可移除自己保存的绑定。

网页字节在两端插件之间加密,线路只转发密文;长期绑定凭据由宿主凭据存储保存,浏览器只持有本次访问的临时会话。默认只监听本机回环,不把浏览器入口开放给局域网。

连接

  • 两种连法:经 relay v2 隧道从公网连回来,或者同一个 Wi-Fi 下走局域网直连。
  • 配对码与配对策略可选,设备凭据能单独吊销,也能一次把全部撤掉。
  • iOS 离线推送可选,不配也不影响其它功能。

移动 API 只开手机需要的口子(/api/mobile/v1/*)—— 不暴露 shell、系统设置与任意文件写入。

安装与更新

装好手机 App 只是第一步,插件装在这边才算接通。

桌面端

在 DSH 的 设置 → 插件 里搜索并安装 dsh-mobile-plugin,然后打开 设置 → 移动端 → 打开配置页面 做配对。插件市场负责检查和安装更新,通常更新后不用重启 DSH。

装完以后,入口在 DSH 的「设置 → 移动端」:点「打开配置页面」,那里有配对二维码、当前监听地址和中转状态。手机上的所有功能都从这一页开始。

无头 Host(Linux)

需要 Node.js、pnpm,以及可用的 DSH 插件宿主依赖。仓库里的 host.js 就是独立入口:

pnpm install --frozen-lockfile
DSH_HOME=/opt/dsh-mobile/.dsh DSH_MOBILE_PROFILE=mobile node host.js

DSH_HOME 是数据根目录,默认 ~/.dsh;DSH_MOBILE_PROFILE 是 profile 名称,默认 mobile。无头 Host 的 Web 服务默认只监听 127.0.0.1:3080,不对局域网直接开放。

配置接口只限本机访问,看状态和拿配对信息:

curl http://127.0.0.1:3080/api/relay/status
curl http://127.0.0.1:3080/api/relay/pairing

无头部署

无头服务器上,启动器和插件本体是分开管的:启动器由部署流程同步到 /opt/dsh-mobile/,插件本体装进 profile:

cd <DSH_HOME>/profiles/<profile>
pnpm add dsh-mobile-plugin@<版本>

宿主优先挂 profile 里装的那份,没装才用源码树版本。设备凭据库随 npm 包一起发,不用单独装。仓库锁文件用 pnpm install --frozen-lockfile。

别用 npm install --legacy-peer-deps 装插件;正式安装走 DSH 插件市场。

配置与 API

无头运行时用这几个本机接口管远程连接:

  • POST /api/relay/toggle:开或关远程控制。
  • POST /api/relay/regenerate:重新生成配对码。
  • POST /api/relay/config:设置 relayUrl、lanEnabled、lanPort、name 和 pairingPolicy。
  • POST /api/relay/reconnect:重连隧道与局域网代理。

移动 API 要 Bearer token。设备事件流 GET /api/mobile/v1/events/stream 用 SSE 转发宿主事件。建会话时可以传 workspaceId 或 cwd,前者优先,并会把会话归进那个工作区;手机端的排序同样会同步到宿主工作区。

配对策略默认 code,凭配对码放行;设成 deny 就拒绝所有新配对。配对请求可以带设备信息,App 会发 id、deviceId、name、platform、osVersion 和 appVersion,局域网代理与中转会补上它们观察到的手机 IP。

session_cleanup 能归档会话,也能永久删除归档过的会话,删除前要显式确认,删掉不可恢复。删除是排队的:会话立刻从列表里消失,日志和投影缓存等宿主下次启动才从磁盘上清掉 —— 宿主没有「删除会话」的接口,运行中从它脚底下删文件会带走整个宿主进程。

为什么做这个

DeepSeek Harness 跑在电脑上,但我不是一直坐在电脑前。出门、在别的房间、躺床上,想知道刚才那个任务跑到哪一步了,或者它正卡在一个要我点的审批上,只能走回去。

这个插件的出发点就这么窄:不是把整个 DSH 塞进手机屏幕,而是让人离开电脑之后,还能看见、还能接着聊、还能把该点的那一下点掉。

所以有两条线是硬的。一条是网络:不要求公网 IP、不要在路由器上开端口、不要为了用一次去配 DDNS,插件从内网主动往外出,手机顺着回来。另一条是能力:手机上只开需要的那几个口子,能看会话、能审批、能传文件、能改点配置,但不把 shell 和任意文件写入递到手机上 —— 手机丢了或者被人捡到,损失是可估的。

和别的方案比

用手机浏览器开 DSH 的网页:不用装东西,但每次都得记住地址,界面按桌面尺寸排,在手机上要靠缩放拖拽;没有推送,离开页面就什么都不知道;审批那种要点准的东西最难用。

远程桌面:本质还是操作那块屏幕,手机只是个显示器。网络断了就是黑屏,小屏上做任何事都要先放大。

各家 AI 助手的手机 App:那些跑在厂商的服务器上,会话、文件和额度都在别人那儿。这里连的是你自己电脑上那个 DSH,模型是你配的,文件在你硬盘上。

已知限制

写在这里的是我们确实还没做到的,不是待办清单的美化版。

  • iOS 的后台提醒不是随时都准。系统不允许 App 常驻后台,所以任务完成通知靠 App 进后台那一段轮询加系统择机唤醒——被系统冻结或额度用尽时可能迟到,甚至这一轮收不到。配了离线推送才有稳定的兜底,没配只保证在前台与后台还有额度的时候提醒。
  • 中转能看到明文。链路是 WSS / HTTPS 加密的,但没有端到端加密,与 frp / ngrok 同一个模型。会话正文在中转上不落盘,但中转进程本身能解密。
  • 中转默认不做隧道鉴权:能连上中转端口的人就能接走隧道。要在公网上用,请开中转控制台的限制模式,或者只把端口暴露给可信网络。
  • 承载手机连接的那个插件不能在手机上卸。第三方插件的安装、升级、卸载都能在手机上做,但 dsh-mobile-plugin 自己卸掉这台手机就再也连不上了,所以入口不给;另外手机上卸完要等电脑下次启动 DSH 才真的不在。

交流与反馈

企业微信群二维码

扫上面的码进企业微信群。这个码更新于 2026-11-09,如果扫不出来或者提示已过期,说明二维码已经换了,发邮件到 admin@wnluo.com 索取新的,或者直接提 issue。

不方便的话发邮件到 admin@wnluo.com 或 wnluo2@gmail.com。用着顺手就给仓库点个 star,这是最实在的支持。

隐私政策见 PRIVACY.md,常见问题见 SUPPORT.md。

开发

pnpm install --frozen-lockfile
npm test

改过 React/ 面板源码,先在该目录跑 pnpm run build,并把生成的 lib/panel/index.html 和源码一起提交。

License

MIT,见 LICENSE。