dsh-pocket-relay

remotetested: passnpmGPL-2.0

Phone and remote access to the DSH Web UI: scan a LAN QR code, or reach your PC from anywhere through a self-hosted relay server you run yourself instead of a cloudflared tunnel. Per-device credentials that pair, list, and revoke individually, and several PCs sharing one relay with automatic failove

下载量 / Downloads
850
依赖体积 / node_modules
2.72 MB
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-pocket-relay

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

<p align="center">

<img src="docs/banner.jpg" alt="DSH Pocket Relay" width="100%">

</p>

<h1 align="center">DSH Pocket Relay</h1>

<p align="center"><a href="README.en.md">English</a> | <a href="README.md">中文</a></p>

<p align="center">

<a href="https://www.npmjs.com/package/dsh-pocket-relay"><img alt="npm" src="https://img.shields.io/npm/v/dsh-pocket-relay?color=4d6bfe&label=npm"></a>

<a href="https://www.npmjs.com/package/dsh-pocket-relay"><img alt="downloads" src="https://img.shields.io/npm/dm/dsh-pocket-relay?color=4d6bfe"></a>

<a href="https://github.com/kinderao/dsh-pocket-relay/actions"><img alt="CI" src="https://github.com/kinderao/dsh-pocket-relay/actions/workflows/release.yml/badge.svg"></a>

<a href="LICENSE"><img alt="License: GPL-2.0" src="https://img.shields.io/badge/license-GPL--2.0-red.svg"></a>

<a href="https://github.com/kinderao/dsh-pocket-relay/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/kinderao/dsh-pocket-relay"></a>

<a href="https://awesome-dsh-plugin.com/zh/"><img alt="Awesome DSH Plugin" src="https://awesome-dsh-plugin.com/badge.svg"></a>

</p>

把 DeepSeek Harness 装进你的口袋:局域网扫码即用;人在外面,走你自己服务器的中继随时随地访问——设备级认证,多台电脑共存与热备。
本项目基于 shaobeichen/dsh-pocket 二次开发(GPL-2.0):把公网传输从 cloudflared 隧道改为自建 relay 中继(Go 单二进制服务端 + Web 管理端),并增加了设备认证与多 PC 端管理。

这是什么

你不在电脑前,也想用电脑上的 DeepSeek Harness。

  • 下班路上,agent 在电脑上跑任务,你想掏出手机看看它干到哪了、结果如何
  • 出门在外,突然想让电脑上的 agent 查点资料、写段代码,但没有远程桌面、没有 SSH
  • 电脑在宿舍/办公室,你人在外面,想随时"操控你的 DeepSeek Harness"——发任务、看输出、点审批

DSH Pocket 就是干这个的:装上它,手机扫个码,就能实时看到并操控电脑上的 DeepSeek Harness 界面——人在外面也能用。

实际效果——手机上的界面就是电脑上的界面,实时同步:

<p align="center">

<img src="docs/interface.jpg" alt="手机上的 DSH 界面" width="100%">

</p>

✨ 特性

特性 · 说明

📶 局域网扫码 · 装好即用:设置 → 手机访问,打开就有局域网二维码,手机连同一 WiFi 扫码即开(自动识别本机局域网 IP,WSL 环境自动取 Windows 物理网卡 IP)

🚪 局域网开关 · 设置页可一键关闭/开启局域网访问(切换时弹窗提醒):关闭后局域网二维码/链接立即失效,仅公网可用

🌐 公网扫码(人在外面) · 点「开启公网访问」→ cloudflared 隧道 → 出公网二维码,4G/任何网络都能访问

🏷️ 公网固定域名 · 可选「命名隧道」模式:填 Cloudflare Tunnel Token + 自己的域名,公网地址固定不变(重启不再变;见下方说明)

🔐 访问密码 · 公网链接需输入 8 位密码(默认每次开启公网自动换新;可自定义固定密码——自定义后不再换新);局域网有独立 8 位密码(默认开启,设置页可一键关闭——关闭后局域网扫码直连)

🔑 自定义密码 · 公网/局域网密码都可在设置页设成自己固定的 8 位密码(英文字母大小写或数字)(自定义后公网不再自动换新)

🧘 会话保持 · 手机输一次密码后长期免输(登录状态绑定电脑上的 dsh web 进程:只要它不重启,手机不用再输;dsh web 重启/更新后需重新输入一次)

⚡ 实时同步 · 流式输出走 WebSocket 全透传——电脑上在输出,手机上同步在滚,可双向操作;内置心跳保活(防路由器 NAT/省电机制静默断链,断线自动重连)

📱 移动端适配 · 窄屏自动变抽屉布局(移植 dsh-web-mobile,MIT):侧栏抽屉、会话全宽、状态栏安全区、触控优化

📁 文件浏览 · 移动端「文件浏览」入口需要宿主提供 explorer 面板(dsh-web-ui 组件);官方 DSH 未内置时入口自动隐藏,不会出现"点了没反应"

🗜️ 传输压缩 · 大 JSON 响应自动 gzip/brotli(长会话 17MB → ~1MB,brotli 质量 6:快且省流量),手机加载更快、更省流量

🔁 隧道自动恢复 · DSH 重启后自动重新拉起之前开着的公网隧道,无需手动重开

🛰 自建中继 · 用自己的服务器中转(PC 与手机都出站连接),不依赖 Cloudflare、地址固定、PC 无需任何入站端口;TLS 由 relay 自己终结,可跑在任意端口(不必占 443)

📵 设备认证 · 中继通道用设备认证而非共享密码:每台手机一个独立密码,可单独撤销;凭据永不落盘(只存 SHA-256),登录需「凭据 + 密码」同时成立

🔛 常开(无人监听) · 中继配置好即常开:只要 dsh 在跑就在线,不用每次手动开;带急停「暂停远程」

🧩 零依赖安装 · 一个 npm 包、一个设置页,没有核心/适配器要分开装;无需账号、无需服务器

🚀 怎么用

入口在哪:安装完成并重启 dsh web 后,打开 设置,左侧边栏就能看到 「手机访问」 入口(和「通用设置」「模型」同级):

<p align="center">

<img src="docs/entry.jpg" alt="手机访问入口" width="70%">

</p>

前提:电脑上已装好 DeepSeek Harness。如果终端提示 dsh: command not found(找不到 dsh 命令),先安装:

npm install -g @deepseek-ai/dsh     # 全局安装;验证:dsh --version
# 不想全局装?每次命令前加 npx:npx @deepseek-ai/dsh <命令>
# 1. 装插件(一个包全都有)
dsh plugin --profile web add dsh-pocket-relay -w

# 2. 重启 dsh web
npx @deepseek-ai/dsh web

局域网(同一 WiFi)

设置 → 手机访问 → 手机扫「📶 局域网」二维码 → 打开链接输入局域网密码(显示在设置页局域网区块,点「刷新」可换新,或点「自定义」设成自己固定的 8 位密码——英文字母大小写或数字)→ 打开的就是电脑上的 DSH,实时同步。

「局域网访问」开关默认开:可一键关闭/开启(切换时弹窗提醒)——关闭后局域网二维码/链接立即失效(手机打不开),公网不受影响;想恢复时再点「开」即可。
局域网密码默认开启(安全优先)。如果只有自己用、嫌每次输密码麻烦,可在设置页局域网区块把「局域网访问密码」切到关——之后局域网扫码直连、无需密码(仅同一局域网设备可访问;公网始终要密码,不受影响)。
手机登录一次后长期免输:只要电脑上的 dsh web 不重启,再次打开手机不用再输入(dsh web 重启/更新后需重新输入一次)。
高级选项:自动识别在 Tailscale/VPN 等场景下可能选不到可达地址。可在「局域网地址」下拉框手动选择已检测到的 IP;一般不需要修改。

公网(人在外面)

同一页点「开启公网访问」→ 每次都会先弹出安全免责声明,勾选「我已知情」后才能开启(公司/涉密网络请先确认合规)→ 等隧道建立(首次会下载 cloudflared,macOS/Linux 走清华镜像秒下)→ 手机扫「🌐 公网」二维码 → 打开链接输入 8 位访问密码(密码显示在设置页公网区块,默认每次开启公网变新,也可点「自定义」设成固定密码——英文字母大小写或数字,自定义后不再换新)→ 人在外面(4G/公司网)也能访问。

更新到新版本:dsh plugin --profile web update dsh-pocket-relay --latest -w(跨大版本时 --latest 是必须的,^0.x 范围不会自动升到 1.x)。

公网固定域名(命名隧道,可选)

默认「快速隧道」的公网地址每次重启都会变(前缀随机)。想要固定公网地址,可用 Cloudflare

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::3,最后更新 2026-09-17

Links

GitHub · Homepage · npm

Same category