DeepSeek Harness(DSH)采用插件化架构,官方 Web UI 默认绑定在 0.0.0.0 时存在远程代码执行风险,绑定在 127.0.0.1 时手机无法访问。dsh-ios-control 插件通过在独立端口运行一个经过认证的反代网关,将官方 UI 安全地暴露到局域网,实现手机扫码遥控电脑上的 agent。
插件定位¶
这是一个基于 dsh-remote-link 的个人定制版插件(MIT 许可证),由开发者 Hjay1101 维护。它主要解决“如何在不牺牲安全性的前提下,从移动端控制 DSH agent”的问题。
核心功能¶
- 手机扫码遥控:通过二维码或短码进行一次性配对,手机浏览器可直接打开官方 UI 进行控制。
- 会话持久化:开启
pairing.persistSessions后,DSH 进程重启,已配对设备保持登录状态。 - 会话分叉工具 (
fork_session):模型可调用该工具,以最近一个回合为边界创建子会话,继承上下文但不影响当前会话。 - 链路保活:针对 DSH 事件下行流缺乏心跳的问题,网关在空闲时注入 WS ping,避免连接被运营商 NAT 静默断开。
- 状态监控:提供
/status状态页,实时展示连接的 RTT、设备身份、上游健康状态及保活计数。 - 设备管理:支持查看已连接设备列表、踢出旧设备或生成新的配对码。
- MiMo Code 支持:可作为认证网关,将 MiMo Code 服务的移动端 UI 也转化为手机可遥控的形式。
- 认证网关:基于 Loopback 反代,提供 HMAC 挑战-响应认证和 HttpOnly Cookie 会话管理。
安装与启用¶
通过官方 CLI 安装插件:
dsh plugin --profile web add ./dsh-ios-control
安装后,插件会接管 DSH 的 Web profile,在配置文件中添加 remote-link 配置项。默认绑定地址为 0.0.0.0,端口为 3081。
典型用法¶
配对设备:在聊天框输入指令获取一次性配对信息。
输入:
给我配对码
输出:包含二维码 URL、ASCII 二维码图及 6 位短码。
管理设备:查询或清理已配对的设备。
输入:
看看谁连过我 / 踢掉我的旧 iPad
工具:remote_devices
创建子会话:尝试不同的对话分支。
输入:
分个叉试试别的方向
工具:fork_session
手动配对:若手机无法扫码,可在任意设备打开配对地址。
访问:
http://<IP>:3081/pair并输入短码。
查看状态:在桌面浏览器查看链路健康度。
访问:
http://127.0.0.1:<port>/status
适用场景与注意事项¶
该插件适用于需要随时随地对本地运行的 DSH agent 进行调试或交互的开发者。
安全限制:
* 基于 HTTP 传输,LAN 嗅探者可复制 cookie 接管会话(存在 HTTP 天花板)。
* 非 loopback 绑定且既无密码又关闭配对时,网关将拒绝加载。
* 配对秘密仅在 URL fragment 中存在,服务器端只存储 SHA-256 摘要,5 分钟过期。
MiMo 模式:
* 在 MiMo Code 模式下,聊天框内的管理工具(如 remote_qr、fork_session)不可用,配对由 /qr 页面承担。
依赖与运行:
* 零运行时依赖,纯 Node.js 实现。
* 配置文件中 persistSessions 设为 true 时,会话摘要会以 0600 权限写入 $DSH_HOME/remote-link/ 目录。