dsh-proxy-gate:在会话里给 DSH 出站流量加开关

前言

DSH(DeepSeek Harness)的出站网络默认走启动时的网络策略,通常是直连。当你需要临时把模型 API、web_search、web_fetch、MCP、插件下载、bash 子进程这几路流量统一指向代理时,常见做法是改系统代理或改 .env,然后重启进程。改系统代理的问题是同机其它程序(浏览器、NAS 服务)也被带走;改 .env 需要重启,无法在运行时按需切换。

dsh-proxy-gate 解决的是这个问题:在插件设置页或会话里用 /proxy 命令一键切换 DSH 进程的出站代理,不改系统代理、不改 .env、不重启 DSH,同机其它程序始终直连。

这是什么

dsh-proxy-gate 是 elliotsu1107 维护的 DSH 插件,分类为联网工具,在社区目录 SkillHub 上有目录页。它只作用于 DSH 进程自身的流量:开启时把 undici 全局 dispatcher 换成指向指定代理的 dispatcher,关闭时恢复 DSH 启动时的网络策略。

有两点需要先说清楚:

  • 它不是系统代理开关,NAS 上其它程序不受影响。
  • 它改的是运行时状态。地址非法时命令直接报错,不会静默回退直连。

安装与启用

README 给出的安装命令是:

dsh plugin --profile web add "$PWD" --ignore-scripts

也可以通过 plugin_manager 以本目录安装,行 id 为 include:proxy-gate。装卸前建议先读一遍源码,运行时依赖从 DSH 安装解析 @deepseek-ai/dsh-http-proxy 和 @deepseek-ai/schemastery,两者都是 optional peerDependency,没有第三方运行时依赖。

装好后打开 设置 → 插件 → 出站代理,面板顶部是状态胶囊(已开启 / 已关闭 / 已开启(未生效)),下面是代理地址输入框和「启用代理 / 关闭代理」按钮,还有「测试连通性」。面板与 /proxy 命令读写同一份配置,两边操作互相可见,面板每 2.5 秒刷新一次状态。

卸载命令:

dsh plugin --profile web remove dsh-proxy-gate

卸载时插件 dispose 会调用安装时拿到的 restore 函数,恢复进程原有 dispatcher 与环境变量。

典型用法

下面这条路线不依赖图形界面,适合脚本化或无头环境。

1、查看当前状态。当前出口来自 DSH 自己的路由判定 proxyRouteFor,与真实请求同一套逻辑,不是读环境变量:

/proxy
# 或
/proxy status

2、设置代理地址并启用:

/proxy set http://192.168.1.100:7890
/proxy on

/proxy set 可以省略 http://。代理地址可以是局域网内另一台机器,例如同网段里跑 Clash 的路由器或虚拟机。

3、做一次连通性测试,走当前通道打一次 HTTP,输出状态码、耗时和响应片段:

/proxy test
# 也可以指定 URL
/proxy test https://www.google.com

4、关闭代理,恢复直连:

/proxy off

代理挂掉时 /proxy off 仍然可用:命令在 Host 侧执行,不经过模型,Web UI 又走回环直连。

配置项

配置项在插件配置里可改,也可以只用命令。四个字段都是 volatile,保存后原地生效,不需要重启插件:

字段 默认 说明
enabled false 是否启用代理
proxyUrl http://127.0.0.1:7890 代理地址;只支持 http(s),不支持内嵌账号密码
noProxy 空 额外直连名单(逗号分隔,不支持 CIDR);回环地址由核心强制直连
testUrl https://www.gstatic.com/generate_204 /proxy test 默认地址;直连时打不开属正常,说明没走代理

行为细节

有几条边界值得在用之前知道。

  • 回环地址(localhost / 127.0.0.1 / ::1 / [::1])始终直连,Web UI 不会绕进代理。
  • 子进程(bash 工具、curl、git、pnpm)通过 proxyEnvironmentForChild() 继承同一策略,HTTP_PROXY/HTTPS_PROXY/NO_PROXY 大小写都会写入。
  • 代理不可达时插件不会自动改配置,需要手动 /proxy off 回直连或 /proxy set 换代理。

README 里记录了两种验证方式,可以做参考:单元测试 node --test test/*.test.mjs 共 6 项,覆盖地址校验、volatile 读取、开启/关闭/非法地址/释放状态机;实机切换用本机起的临时代理做对照,开启后子进程环境出现 HTTP_PROXY/HTTPS_PROXY=http://127.0.0.1:18090、NO_PROXY=localhost,127.0.0.1,::1,[::1],对照代理记录到模型 API 域名的 CONNECT 与测试请求,关闭后这些变量全部消失、对照代理不再收到新连接。截至当前 README,作者也标注了未验证的部分:/proxy 在聊天框人工提交后的实际执行结果,以及面板在浏览器中的实际渲染与交互。

适用场景与注意

适合需要在运行时临时切换出站通道的场景:模型 API 与工具调用想走代理、又不想影响同机其它程序;或者代理源经常变化,不想改 .env 重启进程。

有三件事需要注意。第一,插件以当前 DSH 进程的权限运行,能控制进程内全部出站流量,包括 bash 子进程的环境变量,权限面比看起来大,安装前应检查源码与许可证。第二,proxyUrl 只支持 http(s),SOCKS、内嵌账号密码、带路径的地址都会被拒绝,用之前确认代理类型匹配。第三,社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,安装与版本以 GitHub 仓库为准。

链接与文档

  • 目录页:https://www.skillhub.cn/plugins/elliotsu1107/dsh-proxy-gate
  • GitHub:https://github.com/elliotsu1107/dsh-proxy-gate
  • 项目文档:https://github.com/elliotsu1107/dsh-proxy-gate/blob/main/docs/README.md
  • 变更记录:https://github.com/elliotsu1107/dsh-proxy-gate/blob/main/CHANGELOG.md
羽毛球分组比赛记分
小程序二维码

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

小夜