dsh-dev-plugins:在非 localhost 权威下提供 dsh Web UI

前言

DeepSeek Harness(dsh)的 dsh web 默认面向本机浏览器:Host/Origin 校验、页面是否视为 loopback、启动 token 等行为都按「浏览器与监听进程在同一台机器」设计。把 Web UI 放到反向代理、SSH 隧道或局域网地址后,常见现象是 /api 返回 403、Models 页提示 settings 不可用、每次重启 token 变、裸 URL 只有 401。手工改安装包里的 bundle 能勉强跑,但升级 dsh 要重复打补丁。

下面介绍社区插件 dsh-dev-plugins(维护者 0xshawn),以 web profile 下的插件 bundle 方式扩展 dsh,在不 patch 已安装 dsh 的前提下,补齐远程访问与若干开发向 UI 能力。项目托管于 GitHub,目录页见 SkillHub。许可证 MIT,当前 package 版本 0.8.2,要求 Node >= 20;package.json 中声明的 dsh 引擎范围为 >=0.2.0-0 <0.3.0-0。

这是什么

dsh-dev-plugins 是一组随 bundle 安装的 dsh 插件集合。当前 release 的核心价值是:通过反向代理、SSH 隧道或 LAN 地址等非 localhost authority 访问 dsh Web UI,同时保留 stock 的认证模型(launch token 换 signed、authority 绑定的 session cookie;每个 /api 请求仍走 Host/Origin fence)。插件解决部署摩擦,不绕过访问控制。

与 stock dsh web 的差异

README 用对照表归纳了六类问题,下面按同一口径简述。

问题 stock dsh 本插件
/api Host/Origin fence 仅接受 loopback、监听 bind 字面量、--trusted-host;代理 authority 下 RPC 易 403 将 DSH_DEV_PLUGINS_TRUSTED_HOSTS 中的 authority 追加到同一列表(--trusted-host 仍可用)
页面视图(connection.isLoopback) 由 location.hostname 推导;代理页被当作非 loopback,settings 可能只在进程内存、host-document 动作隐藏 注入 __DSH_TRANSPORT__ = { ownsHost: true },与 dsh desktop shell 使用的 host-owned transport 一致
Launch token 每进程随机;重启后只能从日志找带 ?token= 的 URL 可通过 DSH_WEB_TOKEN 或插件配置固定
首次登录 裸部署 URL 返回 plain 401 默认在裸 URL 提供 HTML token 表单(loginPage,可关)
后台关注 标签页在后台时完成会话或待审批不可见 默认 Web Notification(notifications,可关)
Token 用量历史 聊天条仅当前 Session 默认侧边栏 Token usage 页,按 workspace/日聚合 Host 持久 session 日志(statsPage,可关)

此外 bundle 还提供:聊天 composer 中 Enter 换行(composerNewline),以及可选的 browser-control MCP 与 Chrome 扩展相关能力(browserControl)。0.5.0 起包名由 dsh-remote-access 改为 dsh-dev-plugins,环境变量由旧名改为 DSH_DEV_PLUGINS_TRUSTED_HOSTS;若曾安装旧包,需先 remove 旧 row 再添加,并同步重命名环境变量。

安装与启用

从 GitHub 安装(公开仓库,无需 build):

dsh plugin --profile web add git+https://github.com/0xshawn/dsh-dev-plugins.git

本地 checkout 可用路径安装:

dsh plugin --profile web add /path/to/dsh-dev-plugins

安装后需 重启 dsh web——dsh 在启动时加载 bundle。确认 profile 中该 row 已激活:

dsh --profile web --dump-config | grep -A6 'dsh-dev-plugins'

移除:

dsh plugin --profile web remove dsh-dev-plugins

下次重启后恢复 stock 行为。

配置

环境变量

变量 取值 作用
DSH_DEV_PLUGINS_TRUSTED_HOSTS 逗号分隔的 bare authority,如 dsh.example.com,dsh.example.com:8443 追加到 --trusted-host;无端口项可匹配任意端口
DSH_WEB_TOKEN 非空 launch token 固定登录 token;空或未设置则仍为每进程随机 token

可用于 systemd、launchd、Docker 或 shell profile。若仍习惯 flag,可保留 --trusted-host;环境变量中的 authority 会追加到调用列表。authority 格式错误(含 scheme、path、userinfo 或零填充端口)会在启动时按上游校验失败,不会静默忽略。

示例:

DSH_WEB_TOKEN="$(cat /etc/dsh/web-token)" \
DSH_DEV_PLUGINS_TRUSTED_HOSTS="dsh.example.com" \
dsh web --host 127.0.0.1 --port 3080 --no-open

注意:若其他 profile patch 层整段覆盖 connection.config,需在该层中重新声明 trustedHosts 等字段,否则环境变量追加的 authority 可能被丢掉。

插件 config

在 $DSH_HOME/profiles/web/cordis.patch.yml 中覆盖 dsh-dev-plugins row,例如:

- id: dsh-dev-plugins
  config:
    loopback: true
    launchToken: ''
    loginPage: true
    notifications: true
    statsPage: true
    composerNewline: true
    browserControl: true

launchToken 为空时回退 DSH_WEB_TOKEN,再回退随机 token;README 建议敏感 token 优先用 DSH_WEB_TOKEN,因 profile 配置为明文。Settings → Dev plugins 提供表单,可不改 YAML 切换上述开关。

loginPage: true 时,已通过 Host/Origin fence 的 authority 在裸 URL 会看到 token 表单,提交后走 stock 的 GET ./?token=... 交换;未信任 authority 仍为 401。loginPage: false 恢复 stock 401,适合前端已有自有登录页的场景。

典型用法

反向代理后访问:浏览器侧地址由 --public-url(及 DSH_WEB_URL 等)对外宣告;本插件不改变该语义。代理需保留浏览器 Host、正确处理 mount 前缀与 WebSocket Upgrade/Connection,并按上游文档处理 cookie Path 与 HTTPS 下的 Secure。

从源码 patch 迁移:停止在安装流程里 patch dsh bundle;安装本 bundle 到 web profile 并重启;保留 DSH_WEB_TOKEN 与 trusted host 配置;确认启动日志仍打印相同的 ?token= URL。

首次登录无 printed URL:在已信任的 authority 上打开裸 URL,使用默认登录表单输入 token;错误 token 会重新渲染表单并提示错误。

适用场景与注意

适合需要在 非本机 authority 上使用 dsh Web UI、又不想每次升级 dsh 都重打补丁的开发者或自托管部署。附带通知、workspace 级 token 统计、composer 换行等能力,面向日常 web profile 开发体验。

插件与当前 dsh 进程同权限 运行;安装前请自行审阅 源码与 LICENSE。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-dev-plugins 把远程访问 dsh Web UI 时常见的 fence、loopback 视图、固定 token 与登录体验问题收进官方插件机制,并可选增强通知与 token 统计。需要细节与反向代理清单时,以仓库 README(含 中文文档)为准。

  • 目录页:https://www.skillhub.cn/plugins/0xshawn/dsh-dev-plugins
  • GitHub:https://github.com/0xshawn/dsh-dev-plugins
羽毛球分组比赛记分
小程序二维码

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

小夜