본문으로 건너뛰기
H

dsh-pocket

hotpot1993/dsh-pocket

把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。

설치

dsh plugin --profile web add github:hotpot1993/dsh-pocket

README

DSH Pocket

DSH Pocket

English | 中文

DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫二维码就实时打开电脑上的同一个界面——人在外面也能用。

本仓库由 dsh-pocket 派生,并做了精简(见下方「与上游的差异」)。

这是什么

你不在电脑前,也想用电脑上的 DeepSeek Harness。DSH Pocket 让你用手机扫码就能看到并操控电脑上的 DSH——发任务、看输出、点审批,实时同步。

手机上的 DSH 界面

功能

功能说明
👥 局域网扫码打开设置 → 手机访问,即可看到局域网二维码,手机连同一 WiFi 扫码即开(自动识别本机局域网 IP,WSL 下取 Windows 物理网卡 IP)
🌐 公网扫码点「开启公网访问」→ cloudflared 隧道 → 出公网二维码,4G / 任何网络都能访问
🔐 访问密码公网需 8 位数字密码(默认每次开启公网自动换新,可自定义固定密码);局域网有独立 8 位数字密码(默认开启,可关)
🧘 会话保持手机输一次密码后长期免输(绑定电脑上的 dsh web 进程;重启/更新后需重新输入一次)
⚡ 实时同步流式输出走 WebSocket 全透传,手机与电脑界面同步滚动,可双向操作;内置心跳保活与断线重连
🗜️ 传输压缩大 JSON 响应自动 gzip/brotli 压缩(长会话 17MB → ~1MB),更省流量
🔁 隧道自动恢复DSH 重启后自动重新拉起之前开启的公网隧道
🧩 零依赖安装一个 npm 包、一个设置页,无需账号、无需服务器

移动端适配:由外部插件 dsh-web-mobile@dsh-external/dsh-mobile-nav,MIT)提供,需单独安装——让窄屏变抽屉布局、状态栏安全区、触控优化。见下方安装。

安装

前提:电脑已装好 DeepSeek Harness。若 dsh: command not found,先 npm install -g @deepseek-ai/dsh(或每条命令前加 npx @deepseek-ai/dsh)。

# 1. 装插件(一个包全都有)
dsh plugin --profile web add @hotpot1993/dsh-pocket -w

# 2. (可选,推荐)装移动端适配插件——让 DSH 在手机竖屏下更好用
dsh plugin --profile web add github:mexiaosqwq/dsh-web-mobile

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

重启后打开 设置,右侧边栏即可看到 「手机访问」 入口(与「通用设置」「模型」同级)。

局域网(同一 WiFi)

设置 → 手机访问 → 扫「📶 局域网」二维码 → 输入局域网密码(可刷新/自定义)→ 打开的就是电脑上的 DSH,实时同步。

  • 「局域网访问」开关默认,可一键关闭/开启(关闭后局域网二维码/链接立即失效,公网不受影响)。
  • 局域网密码默认开启,可在设置页关闭(关闭后局域网扫码直连,仅同网络设备可访问;公网始终要密码)。
  • 手机登录一次后长期免输;只要电脑上的 dsh web 不重启,再次打开无需再输。

公网(人在外面)

同一页点「开启公网访问」→ 每次先弹安全免责声明,勾选「我已知情」→ 等隧道建立(首次会下载 cloudflared)→ 扫「🌐 公网」二维码 → 输入 8 位访问密码 → 人在外面也能访问。

更新到新版本:dsh plugin --profile web update @hotpot1993/dsh-pocket --latest -w(跨大版本需 --latest)。

安全(必读)

  • DSH 能执行你电脑上的代码。局域网二维码/URL 配上独立 8 位数字密码才是钥匙,请勿把二维码、URL 或密码发给别人
  • 开启公网前必须阅读并勾选免责声明(服务端强制校验,无法绕过)。公网 = 把能执行代码的 DSH 暴露到互联网,请用强密码、用完即关、涉密网络勿用。
  • 公网 8 位数字密码 默认每次开启换新、旧链接立即作废;自定义密码后不再自动换新。
  • 登录限速:同一 IP 连续输错 5 次锁定 60 秒,防止暴力破解。
  • 公网 URL 由 cloudflared 随机分配,每次重启会变化(旧链接自动失效)。
  • 公网密码存本机 $DSH_HOME/@hotpot1993/dsh-pocket/token(默认每次开启换新),局域网密码存 token-lan,开关/自定义标记存 settings.json

常见问题

现象原因与解决
dsh: command not founddsh CLI 没装:npm install -g @deepseek-ai/dsh,或命令前加 npx @deepseek-ai/dsh
ERR_PNPM_ADDING_TO_ROOTpnpm 9 workspace 限制:安装/更新命令末尾加 -w
装完/更新了但没变化必须重启 dsh web 才生效
公网 error 1033多半是本机代理/VPN(Clash 等 TUN 模式)掐断了隧道连接:先关掉代理的 TUN 模式,或彻底退出代理后重试;必要时给代理加直连规则放行 *.argotunnel.com*.trycloudflare.com

首次开启公网时「下载 cloudflared」失败:macOS/Linux 优先走清华镜像;Windows 走官方直连。全部失败时可手动安装 cloudflaredbrew install cloudflared / winget install cloudflared 等),装好后插件直接用 PATH 里的,不再下载。

与上游的差异(本仓库精简点)

  • 移除「一键更新 / 自重启 dsh web / 版本检测」——更新请走 CLI(见上)。
  • 移动端适配外部化:删除内置的 dsh-web-mobile 移植码,改为依赖外部 @dsh-external/dsh-mobile-nav 插件。
  • 保留局域网 + 公网扫码同屏、代理、密码、免责声明等核心功能。

架构

文件说明
lib/index.js插件入口:自动起代理 + 注册 RPC + 访问密码管理 + 局域网开关 + 桌面端适配
lib/settings.mjs设置持久化(局域网开关 / 密码开关 / IP 覆盖 / 自定义密码标记)存 settings.json
lib/service.mjs服务:代理生命周期(端口自适应)、公网隧道(自动恢复)、状态快照(含二维码)
lib/proxy.mjs改头反向代理:Host/Origin → loopback,HTTP + WebSocket 透传 + polyfill 注入 + gzip/brotli 压缩 + 按 Host 区分的访问令牌认证
lib/tunnel.mjscloudflared:多镜像源下载(清华优先)/自适应多线程/启动/解析公网 URL
lib/web-rpc.jsloopback RPC:status / tunnel.start / tunnel.stop / 局域网与密码相关端点
client/设置页「手机访问」(局域网/公网二维码 + 密码 + 免责声明);移动端适配由外部插件提供
bin/hotpot1993-dsh-pocket.mjsCLI:局域网/公网模式,打印 URL + 二维码

开发

npm install
node client/build.mjs   # 改 client/ 后重新打包
npm test                # 代理 / 认证 / 压缩 / 隧道 / 服务 / RPC
npm run docs:sync       # 同步「开发日志」/ docs 文档

开发日志 / 文档(标准文件路径)

类别路径用途
开发日志开发日志/DEVLOG.md记录每次开发事项;npm run docs:sync 自动追加
需求docs/需求/各版本功能需求
技术方案docs/方案/关键实现方案与取舍
设计规范docs/设计规范/代码风格、文档格式、目录约定
执行步骤docs/执行步骤.md一项目标的分步执行记录

约定:改代码 → 更新 docs/需求/docs/方案 → 跑 npm run docs:sync 汇总进开发日志; npm run prepare 会把 git core.hooksPath 指向 .githooks,提交前自动触发。

致谢

License

GPL-2.0 —— 自由软件许可:可自由使用、修改、分发,但修改版必须同样以 GPL 开源并保留版权声明;商用同样适用。


有问题?欢迎反馈:请到 GitHub Issues 提交 🙏

관련 플러그인