前言¶
DeepSeek Harness(DSH)的 Web 界面默认绑定在本机回环地址,同一局域网内的手机或另一台电脑无法直接打开会话界面。常见做法是再套一层 nginx 或 Caddy,自行处理 WebSocket 升级、Origin 校验和 HTTPS 差异;配置项一多,排查 403 或 WS 握手失败会占不少时间。
smanx/dsh-proxy 是社区维护的 DSH 插件(分类:联网工具),在本地 DSH 服务之外再监听一个端口,做 HTTP 与 WebSocket 的全协议反向代理,并可选 Basic Auth。插件版随 dsh web 或桌面应用启停,不必单独跑进程。仓库 GitHub 上约 28 stars、9 forks;npm 包 @smanx/dsh-proxy 当前版本 0.1.6,MIT 许可证。
这是什么¶
一句话:dsh-proxy 把局域网上的访问请求转发到本机 DSH 服务(默认上游 127.0.0.1:3080),在代理层提供 Basic Auth、Origin/Host 对齐,以及面向 LAN 非安全上下文的补丁(如 crypto.randomUUID polyfill)。
维护者 smanx。除 DSH 插件外,同一仓库还提供 Go/Node 独立可执行版本;本文以 DSH 插件版 为主,与独立版在认证与转发行为上对齐,并多一块设置页面。
核心功能¶
以下能力均来自仓库 README 与插件说明。
反向代理
- HTTP + WebSocket 反向代理,目标为本地 DSH Web 服务。
- 通过 Origin 对齐与 Host 改写,配合 DSH
/api同源校验,减少局域网访问时 WebSocket 403。 - 对 HTML 注入
crypto.randomUUIDpolyfill,便于 LAN 下非安全上下文使用实时通道。 - dsh 0.1.1+ 场景下重写所服务 JS,缓解 LAN 访问设置页时出现 “settings are unavailable in this browser”(与插件版行为一致)。
Basic Auth
- 浏览器原生 Basic Auth 弹窗;HTTP 与 WebSocket 握手统一校验。
- 默认空用户名、空密码表示关闭密码登录;同时设置用户名和密码才启用。
- 部分公开静态资源(如
/manifest.webmanifest)免认证,避免浏览器拉 manifest 时 401。
设置页面
- 入口:DSH 设置 → 局域网代理。
- 状态指示、启动/停止、修改代理监听端口、用户名密码与「免 token 登录」开关;表单回写当前值,留空即设为空。
- 桌面应用内置服务端口由应用分配,插件默认
upstreamPort: 0自动跟随,一般无需手填上游端口。
skipLaunchToken(可选,默认关闭)
- 由代理代替浏览器完成 DSH 启动 token → cookie 兑换,首次访问不必粘贴 token。
- 该选项会移除 DSH 自身的 token 校验;文档建议与用户名密码搭配使用。
安装与启用¶
插件按 profile 安装:web 与 desktop 相互独立,只对谁生效就装谁;两边都用则各装一次。
Web 端(dsh web)¶
npm 安装(推荐,版本固定在 registry):
dsh plugin --profile web add @smanx/dsh-proxy
从 GitHub 跟随 master:
dsh plugin --profile web add github:smanx/dsh-proxy#master
本地路径安装(示例路径按本机修改):
dsh plugin --profile web add file:C:/mydata/codes/dsh-proxy
核对与卸载:将 add <spec> 换成 ls 或 remove @smanx/dsh-proxy。
国内网络下 dsh plugin 按 pnpm 配置的注册表拉包,镜像对新版本可能有分钟级延迟;刚发布的版本装不到可稍后重试,或将 pnpm registry 指向 npm 官方源后再装。
桌面端(DeepSeek Harness 桌面应用)¶
不要用终端对 desktop profile 执行 dsh plugin(会报错:profile "desktop" is managed exclusively by the Electron application)。
在应用左侧 插件 → 添加插件,输入框填入例如:
@smanx/dsh-proxy- 或
github:smanx/dsh-proxy#master - 或本地绝对路径
安装完成后完全退出桌面应用再打开。已安装列表中应出现 @smanx/dsh-proxy;卸载在同一面板操作。
典型用法¶
1、按上文安装到对应 profile,重启 dsh web 或桌面应用。
2、在 设置 → 局域网代理 中启动代理,按需改监听端口、用户名密码;若启用 skipLaunchToken,请同时配置 Basic Auth。
3、在同一局域网设备上访问 http://<局域网IP>:3081(默认代理端口以设置页为准;README 示例为 3081)。若已配置凭据,浏览器会先弹出 Basic Auth。
独立可执行版若需命令行验证,README 给出 curl 与 WebSocket 示例(端口需与 --target-port 一致):
curl -i http://127.0.0.1:3091/
curl -u admin:admin http://127.0.0.1:3091/
插件版日常以设置页启停为主,不必单独下载 Release 二进制。
适用场景与注意¶
适合谁
- 需要在平板、手机或同事机器上访问本机
dsh web/ 桌面内置 Web UI,又不想自建完整反向代理栈的 DSH 用户。 - 希望用一层 Basic Auth 限制局域网入口,并可选择代理侧处理 launch token 的场景(须理解 skipLaunchToken 的安全含义)。
权限与安全
- 插件与当前 DSH 进程同权限运行;安装前应阅读 源码与 LICENSE,确认符合你的环境策略。
- skipLaunchToken 会削弱 DSH 自带 token 校验,文档明确要求与用户名密码组合使用,不宜在公网裸露端口上单独开启。
生态说明
- DSH 社区插件目录托管在 skillhub.cn,与 DeepSeek / 幻方无官方从属关系;安装 spec 以 README 为准,勿凭仓库名自行拼接未文档化的命令。
备选
- 不使用 DSH 插件、或需要独立进程时,可从 GitHub Releases 下载 Go 或 Node 单文件版;交互式启动或
dsh-proxy --source-port 3080 --target-port 3081 --user admin --pass admin等非插件路径见 README「独立可执行版本」一节。
结尾¶
smanx/dsh-proxy 把「第二端口 + Basic Auth + HTTP/WebSocket 转发 + DSH 设置页」收进一个联网类插件,减少为 LAN 访问 DSH 单独维护代理配置的重复劳动。插件详情见 SkillHub 目录页,实现与独立版说明见 GitHub 仓库。