前言¶
DeepSeek Harness(DSH)的会话、审批和右侧工作区都围绕桌面端设计。你离开电脑时,Agent 在等工具批准或追问,只能回到桌前点开界面。社区里也有远程桌面、消息转发等做法,但要么权限面太大,要么和 DSH 的 Gateway 审批流对不上。
@kinocode/dsh-mobile 是 kinocode-jp 维护的 DSH 主机侧插件,配合单独发布的 DSH Mobile Android 应用(不在本仓库内),在电脑上起 HTTPS 网关,用手机扫 QR 配对后,在手机上使用常规 DSH Web UI,并在通知里回复审批与 Agent 问题。这是非官方项目,与 DeepSeek 无隶属关系。插件在 SkillHub 插件目录 归类为「客户端」;源码见 GitHub:kinocode-jp/dsh-mobile。
这是什么¶
npm 包名为 @kinocode/dsh-mobile(当前版本 0.3.7,MIT 许可证)。它不作为 Android 安装包分发,而是装进 DSH Desktop 所在环境,为已配对的手机提供网关、配对管理与(可选)通知中继对接。手机与电脑需在同一局域网,或双方均在 Tailscale 上。
核心功能¶
README 中列出的能力如下,均经主机插件与移动端协同实现:
- 在 DSH 侧栏扫 QR(或复制链接)完成手机配对。
- 通过电脑上的 HTTPS 网关在手机上使用常规 DSH Web 界面。
- 在桌面实时会话中,从手机通知回复审批请求与 Agent 问题(任意设备先提交的回答生效)。
- 当被监视的会话完成一轮(turn)时,向手机推送通知。
插件以进程内 owner 客户端连接 DSH Gateway 事件流,不注册审批监听器,因此不会从桌面「抢走」请求;Gateway 接受第一个提交的答案后,各端提示会一并关闭。
环境与依赖¶
安装前请确认:
- DeepSeek Harness 版本
>=0.2.1-rc.2且<0.3.0(插件依赖尚未稳定的内部 Gateway API,版本范围被固定)。 - DSH Desktop 自带的 webserver 服务可用。
- Node.js 22.4+(DSH Desktop 捆绑的运行时即可)。
- 需要通知且手机走移动数据、无法直连电脑时:须自建或信任的中继(relay),见下文配置;无中继时,只要手机能直连电脑,除通知外其余功能仍可用。
安装与启用¶
在 DSH 的 Plugins 页面添加 @kinocode/dsh-mobile,或在终端执行:
dsh plugin --profile desktop add @kinocode/dsh-mobile
重启 DSH 后,日志中应出现类似 [mobile-bridge] gateway listening {"origins":[...]} 的行,表示网关已在私网地址上监听(默认端口 3543)。
配对手机¶
- 在 DSH 侧栏底部点击 スマホを接続(Connect phone)。
- 在 Android 应用中点 QR を読み取る(Scan QR)扫码;无摄像头可用 リンクをコピー(Copy link)把链接粘贴进应用。
- 配对码一次性,5 分钟过期;可点 新しい QR(New QR)重新生成。
侧栏面板会列出已配对设备并可移除;移除后立即撤销该设备访问。该面板目前仅日语界面。
配对后,手机端会隐藏默认侧栏以让对话区占满宽度;左上角圆形按钮可叠开侧栏。在手机上添加工作区时,会列出电脑上的文件夹而非在电脑上弹目录选择器。右侧栏(文件、预览、变更审查、浏览器、终端)在手机上全屏打开;依赖本机 Finder/应用的按钮会隐藏,文件预览提供 スマホに保存(Save to phone)保存到手机 Downloads。若 DSH 重启后页面空白,一般会自行重载;仍异常时可参考下文故障排除。
配置(可选)¶
所有字段可选,写入 profile 的 cordis.patch.yml。注意 profile patch 会替换插件整段配置,需保留的字段要一并写上。配置 ID 为 mobile-bridge(与旧版兼容)。
- id: mobile-bridge
config:
relayUrl: https://relay.example.com
relayEnrollToken: '...'
| 字段 | 默认 | 含义 |
|---|---|---|
relayUrl |
''(关闭) |
用于通知及从通知回复的中继地址。 |
relayEnrollToken |
'' |
仅接受已知计算机的中继注册令牌。 |
gatewayEnabled |
true |
是否运行供手机使用的 HTTPS 网关。 |
gatewayPort |
3543 |
网关端口(1024–65535)。 |
gatewayHosts |
自动检测 | 监听的 IPv4;仅接受私网地址。 |
hostLabel |
计算机名 | 手机上显示的主机名。 |
previewMaxChars |
400 |
应用中命令预览最长字符(50–4000)。 |
stateDir |
$DSH_HOME/mobile-bridge |
主机身份、配对设备与证书的目录;$DSH_HOME 默认为 ~/.dsh。 |
通知与中继¶
手机在蜂窝网络下通常无法直连电脑网关,通知经出站 WebSocket 连到你配置的中继;中继通过 Firebase Cloud Messaging 下发推送,并把手机已签名的请求转发回电脑。中继不能伪造签名,也不承载 DSH 画面或 DSH 登录。
未提供公共中继。 默认推送内容含会话标题、工具名或问题标题、最多三个选项等;若在应用中开启 ロック画面にコマンド全文を表示(锁屏显示完整命令),中继还可看到最长 400 字符的预览等更多信息。经中继转发的请求对中继可读范围见 README「Notifications and the relay」——仅使用你自建或充分信任的中继。
会话权限预设需会触发审批(例如非「Full access」)才会出现待批复通知;DSH 正常退出时插件会尝试撤回未完成通知(最多等待约 3 秒)。
工作原理(摘要)¶
- 网关:仅在私网 IPv4(含 Tailscale
100.64/10)监听;证书由插件自建 CA 签发,QR 内含 CA 指纹,应用只信任该 CA。 - 配对:应用在 Android Keystore 生成 ECDSA P-256 密钥,用一次性码注册公钥。
- 控制请求:待办列表、答案、设置等请求由设备密钥签名;插件校验签名、时间戳(±5 分钟)与 nonce,防重放。
- DSH 画面:配对后应用获得最长 12 小时的网关会话;网关直接登录本机 DSH webserver,手机不持有 DSH 自身登录态。
更完整说明见仓库 README 的 “How it works” 与 SECURITY.md。
故障排除¶
| 现象 | 建议检查 |
|---|---|
| 手机连不上 | 是否同网或 Tailscale?防火墙是否放行 3543?电脑 IP 变更后需重新生成 QR。 |
| 证书与 QR 不匹配 | QR 来自其他机器,或网关 CA 已重建;重新生成 QR。 |
| 无通知 | 手机通知权限、relayUrl 是否配置、日志是否 relay connected、会话是否需审批。 |
| DSH 重启后手机画面空白 | DSH 启动完成后关闭并重开应用一次。 |
适用场景与注意¶
适合需要在离开工位时仍处理 DSH 审批与追问、或希望在手机上浏览同一 DSH 会话的开发者。插件与当前 dsh 进程同权限运行,安装前请阅读 kinocode-jp/dsh-mobile 源码与 MIT 许可证,并理解网关、配对与中继带来的暴露面;社区目录 skillhub.cn 与 DeepSeek / 幻方无官方从属关系,DSH 生态奉行「一切皆插件」,本应用亦属社区贡献。
结尾¶
@kinocode/dsh-mobile 把 DSH 的 Web 体验延伸到 Android,并用可选中继把审批推到通知栏,与桌面 Gateway 先答先得的规则一致。安装命令为 dsh plugin --profile desktop add @kinocode/dsh-mobile;Android 客户端需另行获取。目录页:https://www.skillhub.cn/plugins/kinocode-jp/dsh-mobile,仓库:https://github.com/kinocode-jp/dsh-mobile。