Skip to content

dsh-mobile-connector

Verified

dsh-mobile-connector · v0.1.11 · MIT · Web UI

DSH 插件:手机端远程通道的电脑侧桥接

Install

dsh plugin add dsh-mobile-connector

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

dsh-mobile-connector

npm npm downloads ci license

DSH 插件:手机端远程通道的电脑侧网关。 装进 DeepSeek Harness 之后, 手机扫码就能连到这台电脑 —— 对话、轨迹、改动卡、审批与提问、子智能体与后台任务,都在手机上。

DSH 侧边栏「手机」面板

装好之后,DSH 侧边栏多一个「手机」入口:总览 · 连接 · 通道与地址 · 已配对设备 · 配对码 · 版本


要求

项 版本
DSH >=0.2.1-rc.5 <0.2.2
Node ^22.19.0 || >=24.0.0
对端 手机 App(Release 里的 APK)

安装

两条通道,装哪个都行(版本号可能不一致,见下):

# ① npm(DSH 插件面板里按包名装 = 走这条)
dsh plugin --profile <profile> add dsh-mobile-connector

# ② GitHub Release 的 tgz(面板「安装」里也能直接粘这个 URL)
dsh plugin --profile <profile> add \
  https://github.com/Imzl-zl/deepseek-harness-mobile/releases/download/v0.2.3/dsh-mobile-connector-0.1.9.tgz

装完要重启一次 DSH:插件热重载会让旧 fiber 先拆、新 fiber 再挂, 那一拍存储后端正在关,管理面可能挂不上(症状:面板 404、手机离线)。 新版已经对这一拍做了退避重试,但当次已经失败的那次挂载不会自己回来。

配置

三种写法等价,改哪个都生效(面板改的是 profile 的设置,不用重启):

A. 面板(推荐) —— DSH 侧边栏「手机」→「连接」卡:

  • 中转:内置中转(开箱即用)/ 自定义(填自己的中转根地址)
  • 令牌:粘贴中转的连接器令牌(只写不读,界面上不显示值);令牌行可点「去注册 / 登录」打开中转。
  • 直连:8790(局域网点对点用;0 = 不开)

B. profile 的 cordis.patch.yml:

- id: dsh-mobile-connector
  config:
    relayUrl: wss://relay.example.com/ws/connector   # 连接器拨的地址,带 /ws/connector
    relayTokenRef: relay-connector                   # 可选;不写就用默认格 relay-connector
    listenPort: 8790                                 # 局域直连端口,0 = 不开
    listenHost: 0.0.0.0

C. 环境 / 凭据面:令牌本体走 DSH 的 ctx.credentials,配置里只放引用名(relayTokenRef)。

地址形状容易搞错:电脑侧这条是连接器拨的,带 /ws/connector; 手机侧拿到的是根地址,它自己拼 /ws-ticket 与 /ws/device?ticket=。

面板能做什么

区块 能做的事
总览 中转状态 · 在线台数 · 直连端口,一眼判断"这台电脑现在通不通"
连接 选中转(内置 / 自定义)、写令牌、开/关直连端口,卡头直接保存
通道与地址 逐条启停(中转拨号 / 直连监听)· 删除不再上报的网卡地址(可恢复)· 追加一条不在枚举里的地址(Tailscale 这类)
已配对设备 停用 / 启用 · 接管(换掉正在服务的那台)· 删除(在用的也行:先停用拿终态,再抹记录)
配对新手机 出二维码(5 分钟有效,同一台手机重扫替换旧记录)
版本 当前插件版本 ·「检查更新」(电脑代查 npm 的 latest;查不到会说原因,不冒充"已是最新")

停 ≠ 卸载:停传输不清凭据、不动身份,再启动不用重扫。断开 ≠ 解绑:删设备才需要重新配对。

它怎么工作

  • 两条链路:一条控制连接接收路由与名册通知;每台设备再拨一条独立数据连接。
  • 端到端加密:每条连接现场协商密钥(X25519 + AEAD),手机只信任二维码里带出的电脑公钥;中转只转发密文与路由元数据。
  • 方法白名单:只暴露列出的方法;审批 / 提问 / 任务走同一条通道,不另开端口。
  • 独占 1:1:同一时刻只服务一台设备,被拒的那台会收到占用者的名字(面板里可以「接管」)。

排错

症状 多半是
面板整块红、出码报 HTTP 404: not found 管理面没挂上(装插件后的热重载那一拍)。重启一次 DSH
手机显示"端点点拨不通" 电脑不在线 / 换了网络。局域网直连要 listenPort 开着且同网段
中转一直是"连接中" relayUrl 少了 /ws/connector、或令牌不对(中转会 401)
手机上「检查更新」有新版但装不上 手机装的是 debug 签名包,与 Release 的正式签名不同 —— 只能卸载重装

开发与门禁

cd connector
pnpm exec tsc --noEmit     # 类型
pnpm build                 # 产出 lib/(插件入口)
pnpm test                  # 825 项
node --check client.js     # 浏览器半侧是手写 JS,没有类型检查

协议与设计文档:docs/subsystems/connector-and-relay.md、docs/subsystems/remote-channel.md(在仓库里)。

链接

仓库 · 连接器与中转 · 通道协议 · 自建中转

License

MIT