dsh-anywhere-hub:为 DSH iOS 与多终端协同做的 3083 连接枢纽

前言

在 DSH 上用手机或 iPad 跟进同一会话时,常见问题是:一端连上另一端被挤下线、锁屏再打开白屏要重载、各端流式输出不同步。普通 Web 反代往往只解决「能连上」,不处理多端广播和移动端挂起恢复。

下面介绍社区插件 dsh-anywhere-hub(维护者 liushQAQ,分类:客户端)。它在 DSH 侧统一主控 3083 端口,重构传输与事件流,面向 DSH iOS App 与桌面端实现多设备同时在线、实时同屏,并内置锁屏后的 Fast-Resume 自愈与外网多种接入方式。插件当前版本 1.2.8(MIT),仓库星标为 0;安装与配置以 GitHub README 为准。

这是什么

dsh-anywhere-hub 是 DeepSeek Harness(DSH)生态下的客户端类插件:包名、实例 id 与 settings.yaml 配置键均为 dsh-anywhere-hub,状态目录为 $DSH_HOME/dsh-anywhere-hub/。宿主要求 Node ≥ 20、dsh ≥ 0.1.0,并依赖 @deepseek-ai/cordis ≥ 4.0.0。

除 DSH 本体多端协同外,插件还内置 zcode-rc/ 网关,可把桌面端「手机远程页」类 Web 上游(首个对接 ZCode)经改写层代理到手机,与 DSH 共用同一套语法降级与缓存击穿逻辑。社区目录页:SkillHub 插件页。该目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

核心能力

多终端同时在线、实时同屏

电脑(桌面客户端或浏览器)、iPhone / iPad(DSH iOS App)可同时打开同一会话。任一端发送指令,各端屏幕同步滚动,AI 流式回复在各端一致展示,避免「各打各的、消息看不见」。

Fast-Resume(锁屏秒级自愈)

手机切后台或锁屏后,重新打开 DSH iOS App 时,插件侧协调 静默换票重连;README 描述在约 0.25 秒 内完成重连并补齐断线期间的消息增量,减轻白屏与整页重载。

3083 端口统一主控

无论桌面 DSH 还是无头模式,由单进程监听 3083,手机与公网接入同一进程,减少双进程抢锁、stored session 丢失类问题,多端状态由同一主控聚合。

连接方式(局域网优先)

  1. 局域网(推荐):手机与电脑同一 Wi-Fi,在 DSH iOS App 中填写 http://<电脑局域网IP>:3083,或扫码接入。延迟低、无需额外穿透。
  2. 外网(按需):README 列出多档方案——默认内置隧道(含国内镜像与 http2 协议选项)、Cloudflare Zero Trust 命名隧道、以及 SakuraFrp / OpenFrp / 自建 FRP、Tailscale、ZeroTier 或公网 IP 等自定义地址;在设置中填入穿透地址后可生成二维码并由插件接管访问认证与多端协同。

简介中提到的 局域网 3082/3083 隔离与公网通道分层,与「3083 统一主控、局域网优先」一并使用;具体端口分工以实现机 README 与插件设置为准。

访问安全

局域网与公网可使用独立访问密码,支持自定义固定密码。连续输错密码 5 次 的同一 IP 会被封禁 24 小时,用于降低公网扫描与暴力尝试风险。

老版本 iOS / Safari 语法降级

DSH 官方前端使用的 ES2022 类静态初始化块、RegExp 后行断言等语法,在 iOS 16.3 及以下 会在解析期报错导致白屏。插件在 代理改写层 自动做等价降级(含 static { } 改写、new RegExp 分支、部分后行断言语义等价或剥离、v flag 降为 u 等),并对改写结果做 ETag / Cache-Buster,减轻手机强缓存「服务端已修、客户端仍旧白屏」的问题。README 注明:不含后行断言但带 v flag 的纯字面量正则不改写,以避免误伤除法表达式。

版本与 UI 细节

插件采用「识别旧版本、代理层向下自适应」思路,不在操作路径上强制升级弹窗;旧包名 dsh-anywhere 仅作兼容别名(状态目录迁移、旧 RPC、layout 键等),正式名称仅为 dsh-anywhere-hub。移动端抽屉底部账号行右侧增加「设置」齿轮入口,点击后打开账号菜单并进入设置,同时收起抽屉,避免 280px 抽屉遮挡设置面板。

ZCode 手机页(内置网关)

从 v1.1.0 起,zcode-rc/ 随包发布。典型部署(在 Profile 目录执行):

npx zcode-rc --target D:\zcode-rc\zcode-rc-gateway --task

或:

node node_modules/dsh-anywhere-hub/zcode-rc/install.mjs --target D:\zcode-rc\zcode-rc-gateway --task

--task 用于注册开机自启。完整 ZCode 链路需手机端 DSH iOS App、本插件、zcode-rc-gateway 与 ZCode 桌面端原版,README 中有分步说明(本文截断处之后仍可在仓库查看)。

安装与启用

在 DSH Profile 目录(例如 ~/.dsh/profiles/desktop)下安装:

# pnpm
pnpm add github:liushQAQ/dsh-anywhere-hub

# 或 npm
npm i github:liushQAQ/dsh-anywhere-hub

若曾安装 npm 上他人占用的旧名 dsh-anywhere,应先移除再安装本仓库:

pnpm remove dsh-anywhere
pnpm add github:liushQAQ/dsh-anywhere-hub

也可从本地 tgz 安装(路径按实际替换):

pnpm add /path/to/dsh-anywhere-hub-<version>.tgz

在 settings.yaml 中启用:

plugins:
  dsh-anywhere-hub:
    enabled: true

安装前建议阅读仓库源码与 MIT 许可证。插件在当前 DSH 进程权限下运行,反代与隧道能力会扩大本机网络暴露面,公网场景务必设置强密码并理解封禁策略。

典型用法

局域网同屏

  1. 手机连接与电脑相同的 Wi-Fi。
  2. 打开 DSH iOS App,地址填 http://<电脑局域网IP>:3083,或扫描插件提供的二维码。

公网随身

  1. 按 README 开启并配置任意外网方案,获得稳定访问地址。
  2. 在 DSH iOS App 中填写该公网地址,与家中电脑上的同一会话实时接续。

适用场景与注意

适合谁:已使用或计划使用 DSH iOS App,需要在手机、平板与电脑间切换且希望保持同屏与流式一致的用户;需要在 iOS 14.5+ / 15 / 16.3 等老系统上打开 DSH Web 前端的用户;想把 ZCode 等桌面「远程页」接到同一套手机壳的用户。

注意:

  • 依赖 GitHub 源安装时,需本机能访问 GitHub;README 推荐 github:liushQAQ/dsh-anywhere-hub 以绕开 npm 发包与同名包混淆。
  • 语法降级对未知正则形态可能放宽匹配范围,换取「不崩页」;极端前端写法仍可能有边界,见 README「已知边界」。
  • 外网穿透与安全策略由使用者自行选型;插件提供密码与 IP 封禁,不替代防火墙与 Zero Trust 整体设计。

结尾

dsh-anywhere-hub 把 DSH 多端协同收拢到 3083 主控 + 代理改写层:同屏广播、Fast-Resume、老 iOS 兼容与外网通道在同一插件内完成,并可扩展更多 Web 上游。进一步了解功能与版本说明,见 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

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

小夜