dsh-anywhere:为 DSH iOS App 与多终端协同准备的连接枢纽

前言

在 DSH 上用手机或浏览器跟进会话时,常见问题是多端互相踢线、锁屏后白屏断线、以及各端输出流不一致。普通 Web 访问往往只能单端占线,切到后台再回来还要手动刷新。下面介绍社区插件 dsh-anywhere(维护者 liushQAQ),它面向 DSH iOS App 与桌面/浏览器等多端同时使用同一进程与会话,并在传输与前端代理层做了针对性改造。

DeepSeek Harness(DSH)生态奉行「一切皆插件」;插件目录由社区站点 SkillHub 收录,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看仓库源码与 MIT 许可证,插件随当前 DSH 进程权限运行。

这是什么

dsh-anywhere 是 DSH 的客户端类插件(package.json 当前版本 1.0.9)。定位是:多设备同时在线、实时同屏收发、锁屏后快速自愈重连(Fast-Resume),统一以 3083 端口作为本机主控入口,并可选局域网直连或多种公网穿透方式。

核心能力

多端同屏与 Fast-Resume

插件在 README 中说明,其重构了底层传输与事件流,目标包括:

  1. 多终端同时在线:桌面客户端、浏览器、DSH iOS App、iPad 等可同时打开同一会话;任一端发送指令,各端流式输出尽量保持同步滚动。
  2. Fast-Resume:应用切后台或锁屏后,重新打开 DSH iOS App 时,在约 0.25 秒内完成静默换票重连并补齐断线期间的消息增量,减少白屏与整页重载。
  3. 跨场景切换:在电脑与手机之间切换时,上下文与进行中的任务可延续使用。

统一 3083 端口主控

无论桌面 DSH 还是无头模式,插件侧强调由单进程监听 3083,手机与公网入口对齐同一端口,以降低双进程、文件锁争抢导致的 stored session 丢失或多端状态分裂。

连接方式

README 推荐优先局域网,再按需配置外网。

局域网(首选)

手机与电脑连同一 Wi-Fi,在 DSH iOS App 中填写:

http://<电脑局域网IP>:3083

也可通过插件生成的二维码接入。局域网 IP 在典型家庭网络下相对稳定,无需额外穿透即可低延迟使用。

外网(可选)

配置文件 tunnelMode 区分三种模式(见下文配置表):

  • quick:内置自动隧道,面向国内网络做了镜像与 http2 协议等说明,开箱即用。
  • named:绑定 Cloudflare Zero Trust 命名隧道与自定义域名、tunnelToken。
  • fixed:填入自建 FRP、异地组网或公网 IP 等外部地址(fixedWanUrl),由插件接管访问认证与多端协同相关逻辑。

访问安全

  • 局域网与公网可分别设置访问密码(lanAuthEnabled 等)。
  • 单 IP 连续输错密码 5 次会封禁 24 小时,用于降低公网扫描与暴力破解风险。

旧版 iOS Safari 白屏兜底

DSH 官方前端部分正则使用 RegExp 后行断言((?<=…) / (?<!…)),在 iOS 16.4 以下 Safari 会在解析阶段抛出 SyntaxError,导致整页白屏。插件在代理层将已知形态的字面量正则改写为运行期 new RegExp(...),老系统走降级分支;未知形态则剥离后行断言以保页面可打开(匹配范围可能放宽)。含 v flag 的纯字面量正则出于误伤链式除法的风险,README 标明当前不做改写。

移动端抽屉「设置」入口

DSH 移动端设置原在账号菜单弹层中,抽屉展开时不易发现。插件在抽屉底部账号行右侧注入设置齿轮(v1.0.8 起与头像同行),点击后打开账号菜单并进入设置,并自动收起抽屉,避免遮挡设置面板。

安装与启用

不要用 npm 上的同名包。 README 写明 registry 中的 dsh-anywhere@0.1.2(维护者 tangwenhao)与本仓库无关;npm i dsh-anywhere 装到的不是本插件。

在 DSH Profile 目录(例如 ~/.dsh/profiles/desktop)下,使用 GitHub 源安装:

# pnpm
pnpm add github:liushQAQ/dsh-anywhere

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

若曾误装 npm 同名包,先移除再安装:

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

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

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

在 Profile 的 settings.yaml 中启用(键名与 package.json 的 name 一致):

plugins:
  dsh-anywhere:
    enabled: true

运行环境要求(来自 package.json):Node >=20,DSH >=0.1.0,@deepseek-ai/cordis >=4.0.0。

典型用法

局域网同屏

  1. 电脑端已启用插件并运行 DSH。
  2. 手机连接同一 Wi-Fi,打开 DSH iOS App。
  3. 地址栏输入 http://<电脑局域网IP>:3083 或扫码连接。

公网接续

  1. 在 ~/.dsh/dsh-anywhere/settings.json 中按需设置 tunnelMode 及对应字段。
  2. 在 iOS App 中填写插件提供的公网地址,与家中 DSH 保持同一会话协同。

首次运行会自动生成 settings.json,README 说明默认不包含个人敏感链接。

配置文件说明

路径:~/.dsh/dsh-anywhere/settings.json

字段 类型 默认值 说明
lanEnabled boolean true 是否开启局域网多设备访问
lanAuthEnabled boolean true 局域网访问是否需要密码验证
tunnelMode string "quick" "quick" / "named" / "fixed"
tunnelHostname string "" named 模式下的完整自定义域名
tunnelToken string "" named 模式下的 Cloudflare Token
fixedWanUrl string "" fixed 模式下的自定义外部穿透地址

适用场景与注意

适合需要在 电脑 + DSH iOS App(或多台移动设备)之间频繁切换、且希望同一会话实时同步的用户。若仅偶尔用手机浏览器访问、不需要多端同屏与 Fast-Resume,可先评估是否必须安装额外插件。

安装与公网暴露前请阅读 GitHub 仓库 源码与 issue;公网模式务必设置强密码并理解 IP 封禁策略。插件不替代你对穿透方案(Cloudflare、FRP、Tailscale 等)的安全评估。

结尾

经过上面的步骤,你可以在 Profile 中从 GitHub 源安装 dsh-anywhere,用 3083 统一入口做局域网或可选公网的多端协同。更多细节与更新记录见仓库 README。

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

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

Xiaoye