dsh-link:用手机浏览器接入桌面版 DSH 会话

前言

DeepSeek Harness(DSH)桌面版的主 Web 服务默认只监听 127.0.0.1:19387,官方也不建议把主服务绑到 0.0.0.0,以免控制面暴露到网络。因此手机浏览器无法直接打开桌面版同一会话里的工作区与聊天界面。

若你希望在同一 Wi-Fi 或 Tailscale 网络里,用手机继续当前桌面会话(流式回复、Markdown、工具调用卡片、图片上传),需要在桌面进程旁另起一条受密钥保护的通道,并在设置里给出可复制的接入信息。dsh-link 是社区维护的 DSH 客户端类插件,走这条路径。

这是什么

dsh-link(GitHub:paayton/dsh-link,维护者 paayton)是 DeepSeek Harness 的移动端 H5 桥接插件:在桌面版设置页增加 Link 栏,同时在本机启动独立 HTTP/WebSocket 监听,供手机浏览器打开极简 H5,与 Mac 桌面版正在运行的会话交互(工作区边栏、基础聊天、流式回复等)。

插件形态为双段 Cordis 插件(host 进程内段 + 桌面设置页 client 段),H5 静态资源零构建、零第三方运行时依赖。当前 package 版本为 0.1.0,许可证 MIT;与 DSH 桌面版 0.2.0-rc.2 强绑定(见下文兼容性)。

核心功能

下面按 README 已说明的能力归纳,不超出仓库文档。

client 段在 设置 → Link 展示网络状态、连接密钥、手机访问地址与操作指引。控制面路由 /m/link/* 仅绑定回环,通过桌面版的 cookie(connection.admit)鉴权,不向 LAN 暴露密钥生成等敏感操作。

独立 LAN 监听与三类路由

host 段不复用桌面主 webServer,另起默认 127.0.0.1:19388 的监听(可配置绑定地址与端口)。路由按受众隔离:

前缀 受众 鉴权 暴露位置
/m 手机浏览器(静态 H5) 公开(无敏感数据) 回环 + LAN
/m/api/* 手机 H5(数据 + WebSocket) 连接密钥(LAN 侧强制) 回环 + LAN
/m/link/* 桌面设置页 cookie 仅回环

LAN 侧只提供静态 H5 与只读/聊天 API,不暴露完整桌面控制面。

H5 对话体验

H5(src/public/)为移动优先单页:Markdown 正文、思考块、工具调用卡片(可展开参数/输出)、流式增量、更早历史分页、会话边栏(筛选/折叠/侧滑、设置面板)、发送即插话、深浅色主题,支持 PWA 加到主屏。静态资源带内容哈希 ETag,回到前台或定时自检可在不改版本号的情况下无感升级。

图片上传

手机相册或拍照后,客户端按长边 1568px 压缩,经 /m/api/upload 换取 DSH fileUploads 收据,再随 prompt 发送;历史与工具结果中的图片通过 /m/api/attachment 拉回显示。若 profile 未注入 fileUploads,上传接口返回 503,其余功能仍可工作。

实现要点(与使用相关)

  • 初始历史来自 follow 的 snapshot 帧;更早消息用 /m/api/messages?beforeSeq= 分页。
  • WebSocket 服务端为插件自研的零依赖实现(ws-mini.ts),适配 link: 安装环境下无法解析 ws 包的情况。
  • host 段 TypeScript 编译到 dist/;H5 改 src/public/* 保存即可生效,改 host 需重启桌面版。

安装与启用

安装步骤以仓库 README 为准。需要先取得插件源码目录,再链入 desktop profile:

git clone https://github.com/paayton/dsh-link.git
# 1) 链接插件到 profile(pnpm link)
dsh plugin --profile desktop add ./dsh-link
# 2) 把 dsh-link 加进 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 数组
# 3) 桌面版热重载 profile(编辑 package.json 即触发)后生效

卸载:从 dsh.profile.bundles 移除 "dsh-link",并执行:

dsh plugin --profile desktop remove dsh-link

配置写在 cordis.patch.yml 的 config 段:

键 默认 说明
lanEnabled true 是否开启独立监听
lanPort 19388 监听端口
bindHost 127.0.0.1 绑定地址;手机经内网/Tailscale 接入时改为 "0.0.0.0"

改为 0.0.0.0 会把受密钥保护的只读/聊天口暴露到局域网;内网 HTTP 为明文,README 建议在可信网络使用,有安全要求时走 Tailscale。手机接入前务必在 设置 → Link 生成连接密钥。

典型用法:手机连接

在 bindHost 设为 0.0.0.0 且 LAN 监听开启后:

  1. 桌面版打开 设置 → Link,点击「生成密钥」并复制。
  2. 手机与 Mac 连同一 Wi-Fi,或登录同一 Tailscale 账号。
  3. 手机浏览器打开 Link 栏里列出的地址,例如 http://<内网IP或Tailscale名>:19388/m/。
  4. 输入密钥(会自动保存),进入会话边栏后即可聊天。

改 host 代码或新增 API 后若出现 404 或 throwIfAborted 类错误,README 要求重启桌面版(仅重组 profile 不足以重载 host 段)。

适用场景与注意

适合谁:已在 Mac 上跑 DSH 桌面版,希望在手机浏览器里跟进同一会话、查看工具卡与流式输出,且能接受内网或 Tailscale 接入方式的开发者。

版本:dsh-link 0.1.x 对应 DeepSeek Harness 桌面版 0.2.0-rc.2。插件依赖 DSH 内部 API(sessionController、fileUploads、Cordis 上下文等),升级桌面版后若接口报错,需在插件仓库同步 @deepseek-ai/* 的 devDependency 版本并跑 pnpm typecheck。

安全与权限:host 段在 DSH 进程内以与桌面版相同的全权限运行;独立监听虽用连接密钥保护聊天口,但把 bindHost 设为 0.0.0.0 仍会把该口暴露到 LAN。安装前应阅读源码与 MIT 许可证,仅在可信网络生成并使用密钥。

故障排查速查(摘自 README):

症状 处置
密钥门提示失效 桌面重新生成密钥后,在手机重输
/m/api/upload 等 404 重启桌面版使 host 加载新代码
手机连不上 检查 bindHost 是否为 0.0.0.0,端口是否为 lanPort

结尾

dsh-link 用「设置栏 + 独立 LAN 服务 + 移动 H5」补齐桌面 DSH 在手机侧的会话接入,功能边界与路由设计在 README 里写得很具体。若要查看分类与简介,可打开社区目录页;源码、配置项与测试说明见 GitHub 仓库。

  • 目录页:https://www.skillhub.cn/plugins/paayton/dsh-link
  • GitHub:https://github.com/paayton/dsh-link
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye