dsh-remote
Operate DeepSeek Harness from your phone: self-hosted relay + desktop plugin tunnel with a mobile-adapted web UI. MIT
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 29, 2026
- Updated
- Aug 29, 2026
Introduction
用手机浏览器完整操作 DeepSeek Harness 桌面端: 自托管中继 + 桌面插件的点对点隧道,不改 dsh 内核与前端, 并为手机自动注入移动适配层。
组成
| 目录 | 角色 | 文档 |
|---|---|---|
relay-server/ | 自托管中继:配对认证、HTTP 反向代理、WS 帧桥接、管理台。部署在公网 VPS(TLS 之后)。 | 简体中文 · English |
dsh-remote/ | 桌面 host 插件:注册到中继,把手机流量桥接到本地 dsh web server;内置移动适配层与设置页。 | 简体中文 · English |
docs/PROTOCOL.md | 两端共同遵守的隧道协议契约(v1):帧格式、握手、安全边界。 | — |
架构
手机浏览器 ──HTTPS──> relay-server ──WS 帧──> dsh-remote 插件 ──HTTP/WS──> 本地 dsh web server
│ │ └─────────── 下行事件流透传(/events/*)────────────┘
│ (127.0.0.1:<port>)
├── 上行:/d/<deviceId>/* 全量反代,帧序即流序(SSE / blob 不受影响)
├── 配对:6 位配对码 + 一次性挑战-响应(HMAC-SHA256),HOST_TOKEN 为信任边界
└── 安全:落盘只存 sha256 摘要;日志永不打印令牌与配对码
快速开始
- 部署中继(公网 VPS,Node ≥ 22 + caddy TLS):
relay-server/内pnpm build后按其 README 的 systemd + caddy 步骤部署; CentOS/Rocky/Alma 可用自带deploy/install.sh <域名>一键完成。 - 安装插件(桌面 DSH,含 web profile):
dsh-remote/内pnpm build && pnpm build:client && pnpm pack, 然后dsh plugin --profile web add ./dsh-remote-<ver>.tgz并重启 DSH。 - 配对:桌面 设置 → 手机连接 填中继地址与
HOST_TOKEN, 手机扫二维码或在<relay>/pair输入 6 位配对码即可进入与桌面同源的操作界面。
移动适配(亮点)
dsh 自带 web 界面是纯桌面布局,本仓库在隧道内为手机补齐了完整移动体验:
- 聊天正文与输入卡片全宽(重定义布局 CSS 变量,非侵入);
- 设置弹窗全屏化、导航横滑条;模型下拉视口钳制;
- 侧栏抽屉化(展开时悬浮,不再挤压聊天区);
- 键盘不再遮挡输入框(
interactive-widget=resizes-content)。
适配样式只注入隧道流量,桌面 / GUI 打开的界面零变化;锚点全部避开构建期 hash 类名,dsh 升级若结构变化则自动退回原生桌面布局,不会更糟。
安全模型
HOST_TOKEN是 relay 的唯一信任边界;配对走一次性挑战-响应,防重放。- 中继落盘只存
sha256(code)/sha256(token);日志脱敏。 - 手机经 HttpOnly 会话 cookie 认证;管理台独立口令与会话。
- 部署必须置于 TLS 之后(README 提供 systemd + caddy 完整示例)。
完整威胁模型与帧格式见 docs/PROTOCOL.md。
开发
两个包均为独立 pnpm 项目:
cd relay-server && pnpm install && pnpm build && pnpm typecheck
cd dsh-remote && pnpm install && pnpm build && pnpm typecheck
dsh-remote的 tsconfig 类型映射指向本机的 deepseek-harness 检出 (../../deepseek-harness),CI 只做构建与node --check。
License
MIT © 2026 JochenYang