通过自建中继从手机访问 DSH(WSS 由你自己的 TLS 终止代理提供):含桥接守护与扫码登录的 bundle 插件、原生 Android 应用,并支持服务端设备吊销。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:zdx8637-gitdog/dshmobile#path:/plugins
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
开箱即用的手机远程桥接:装一次即用,无需任何网络配置、无需本地补丁, 重启 dsh 后左侧栏即出现常驻二维码面板(跨平台,DSH 升级免疫)。
- 常驻二维码(Web 左侧栏底部箭头弹窗):与登录态无关,永远可扫—— · 电脑已登录 → 手机(哪怕未登录)扫码直接登录同账号; · 电脑未登录 → 手机(已登录)扫码授权,电脑自动登录;
- bridge 子进程守护:账号密码模式或手机授权 token 模式(无密码直连,401 自动刷新);
- 手机端一码三用:微信扫=下载 App、相机扫=跳 App 配对、App 内扫=直接登录/授权。
安装
先选方式:DSH 桌面版 0.2.0 及以上 → 用 §A(GUI,推荐);旧版 dsh web(0.1.7)→ 用 §B(CLI)。
两种方式装的是同一个包:@zdx8637/dshmobile-bridge(当前版本 1.0.7)。
A. DSH 0.2.0 桌面版:GUI 安装(推荐)
打开 DSH 桌面版 → 插件管理器 → 点 「添加插件」;
在输入框里粘贴带精确版本号的包名(输入框提示原文是「输入插件的包名、GitHub 仓库地址或 本地目录路径。」,GitHub 仓库地址与本地目录路径它同样接受):
@zdx8637/dshmobile-bridge@1.0.7右侧 「安装源」 按网络情况选
npm 官方源或中国大陆镜像源;点安装;
重启 DSH(宿主需要重新加载插件才会生效);
打开面板:Web 左侧栏底部出现 ▶ 箭头,点开即配置面板。
⚠️ 务必带上精确版本号(如
@zdx8637/dshmobile-bridge@1.0.7)。 profile 目录里有pnpm-lock.yaml,只写包名重装时锁文件可能把版本钉回旧的 (实测:线上已经发到 1.0.2,重装后却仍然是 1.0.0)。
⚠️ 没有自动更新。 弹窗原文:「插件安装后,暂不支持自动更新。若需升级,请先卸载再安装新版」。 升级 = 先在插件管理器里卸载,再按上面的步骤装上带新版本号的包名。
B. DSH 0.1.7(旧版:dsh web + CLI):CLI 安装
npx -y @deepseek-ai/dsh plugin --profile web add @zdx8637/dshmobile-bridge@latest
# 重启 dsh 后,Web 左侧栏底部出现 ▶ 箭头,点开即配置面板
前置:本机需要 pnpm(dsh plugin 子命令依赖它;corepack enable 或
npm i -g pnpm)。
仅限旧版:
@deepseek-ai/dsh的 npmlatest指向 0.1.7 的 CLI,所以这条命令拿到的是 0.1.7 的dsh plugin。0.2.0 及以上请改用上面的 §A(GUI),CLI 不是 0.2.0 的安装路径。
手机 App:扫描面板二维码 → 落地页下载 APK(或从 发布页获取)。
免补丁:面板走官方通道,旧 HTTP 通道保留兜底
DSH 0.1.0-rc.6 默认不向浏览器暴露第三方 settings 命名空间(上游标注为
deferred work)。本插件不依赖该通道:面板与宿主优先走官方连接服务的 RPC 通道
(ctx.connection.rpc,通道名 /dshmobile,同源相对路径,不依赖页面 origin),
探测不到该服务时自动退回 127.0.0.1:17653 的本地 HTTP(轮询状态 + 下发动作,
CORS 回显请求方 origin)。两条通道共用同一份数据与同一批动作,因此
- 装一次即用,无需任何本地补丁;
- Windows/macOS/Linux 通用;
- 桌面版(窗口 origin 为
dsh-app://app)与dsh web都能工作; - DSH 升级不受影响(历史版本 0.1.0-beta.3 及更早需要
scripts/expose-settings-namespace.ps1补丁,已废弃)。
DSH 版本要求(只支持 v0.1.5+)
v0.1.5 起 DSH 给本地 Web 服务加了浏览器会话鉴权(dsh web 打印的 URL 里带
进程级 launch token → 浏览器换会话 Cookie,/api 全部请求校验),并把 RPC
协议升级为 Typert 端点(session/list、{args} 载荷、/api/remote.mux
流复用、$events 审批/提问瀑布)。插件 0.1.0-beta.17 起适配该协议:
- host 半边经
ctx.connection.authenticatedUrl()取 launch token 交给桥子进程; - 桥一次性换 Cookie(HMAC 签名、30 天有效),缓存于状态目录、401 自动重铸,
所有
/api请求与 WS 升级携带 Cookie; - 会话/工作区/命令端点映射到新协议,事件流走
/api/remote.mux的session/follow+workspace/follow+session/control,审批/提问走$events+$events/result。
⚠️ 自 0.1.0-beta.23 起不再支持旧版 DSH(≤ v0.1.0-rc.6):原先的"双协议自适应" (legacy:点号端点、裸 payload、
events.mux/events.host、/api/respond、无鉴权直连) 已整体删除,协议面只留一条:adapter −283 行 / dsh −59 / main −21 / host −8, 另删掉整条"仿旧版 DSH"的 smoke 脚本。请确保 DSH ≥ v0.1.5; 若桥连不上 DSH,会在bridge.log给出明确提示: 「v2 协议握手失败:请确认 DSH 正在运行(dsh web);本插件版本已不再支持旧版 DSH(≤0.1.5-rc.6)」。
自检脚本:node scripts/smoke-dsh-v2.mjs(仿新版 DSH 全链路)、
node scripts/probe-real-dsh.mjs(对运行中真实 DSH 只读验证,需本机浏览器
已登录过一次 Web 面板以生成签名密钥)、
node scripts/archive-session.mjs --list | --newest-idle(安全清理闲置会话;默认拒绝归档活跃会话)、
node scripts/unarchive-session.mjs <id> 与 node scripts/probe-session-archive.mjs <id>
(DSH 没有"取消归档"接口:归档集合在宿主内存里,改状态文件后需重启 DSH 才生效——细节与检查清单见
docs/dsh-session-archive.md)。
单实例保护(防"两个桥互相顶替")
同一台机器上如果同时跑着两个桥(多开了一个 DSH、上次 DSH 被强杀留下的孤儿桥、或新旧插件混跑),
它们共用同一份状态目录 ~/.dsh-mobile ⇒ 同一个 relay 设备身份 ⇒ 在 relay 侧互相把对方踢下线,
手机端表现为"登录后刷新不出会话"。自 0.1.0-beta.23 起有四层防护:
- 桥侧单例锁:按状态目录散列出一个本机回环端口当锁(进程退出即自动释放);新实例会请旧实例"让位", 让位失败则以退出码 42 退出,绝不并存;
- 宿主接管:每次启动桥之前先结束本机其它桥进程(更新/重启 DSH 时会顺手清掉旧孤儿,保证新代码在跑);
- 父进程看门狗:宿主消失时桥立即退出,不再产生孤儿;
- 桥侧自愈:若被 relay 按
4000 duplicate connection反复顶替(说明本机还有老版本桥), 主动清理其它桥进程。
面板入口的状态点会显示「另一个桥实例在运行」;此时在面板保存一次或重启 DSH 即可重新接管。
诊断用 ~/.dsh-mobile/bridge.lock.json 与 bridge.log(UTF-8)。
临时第二桥(做 UI 验证时)请用独立状态目录并加 --state-dir=<该目录> 参数,或设
DSHMOBILE_BRIDGE_SINGLETON=0。细节见
docs/bridge-singleton.md。
relay 说明
插件默认连接 https://www.deepseek-claudex.cn(作者自营 relay:账号注册、
设备管理、消息路由均走该服务器)。也可自建:见主仓库
dshmobile 的 relay/ 目录与
dsh-remote/docs/04-operations.md,然后在面板里把 relay 地址改成你自己的。
开发
npm install
node scripts/build.mjs # 产出 lib/index.js + lib/client.js
node scripts/smoke-host.mjs <u> <p> # 账号密码模式冒烟
node scripts/smoke-grant.mjs <u> <p> # 手机授权模式冒烟
完整三端(手机 App / relay / 协议)见主仓库 zdx8637-gitdog/dshmobile。
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-remote-web-ui★ 8707
手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
zhu1090093659/dsh-web#packages/dsh-ssh★ 8707
SSH 远程运维面板:Web 终端、SFTP 传输、本地端口转发与一条命令并发集群执行,Agent 与面板共用同一份主机配置。
saya-ch/dsh-mobile★ 449
通过 Android App 或手机浏览器访问 DeepSeek Harness,支持安全局域网连接、远程访问、持久设备配对和可自定义移动界面。
liguobao/ds-harness-remote★ 327
DeepSeek Harness 多端远程访问:从手机、平板、浏览器或另一台电脑继续进行中的会话,端到端加密通道(Noise IK + 自适应 Relay/WebRTC 传输),设备授权管理;远程端仅开放 ApiProxy 能力,支持 dsh-file-viewer 只读文件预览,不提供 Shell、远程桌面或写入权限。
ZSeven-W/dsh-ios★ 322
在对话里直接操作 iOS 模拟器或 USB 连接的 iPhone:22 个 Agent 工具用于启动、构建、按无障碍标识或 OCR 文本驱动 UI、列表行操作与 SwiftUI 预览热重载,并附带可点击拖拽的流式侧边栏面板。
wenbin-wb/dsh-bridge★ 195
DeepSeek Harness 远程与移动端接入插件:提供局域网扫码直连、Cloudflare 与自建公网隧道,以及微信、QQ、飞书、Telegram 机器人交互,内置安全认证与访问控制。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。