dsh-plugin-proxy:DSH 运行时代理切换插件

前言

在开发基于 DeepSeek Harness (DSH) 的智能体时,经常需要根据网络环境或特定任务切换代理服务器。手动修改配置文件并重启服务不够灵活,或者使用系统代理容易影响其他进程。DSH 插件体系旨在通过模块化解决这类问题,dsh-plugin-proxy 正是为此而生。

这是什么

这是一个运行时动态切换出站代理的 DSH 插件。它通过接管 DSH 进程内的 globalThis.fetch 请求,支持 HTTP 和 SOCKS5 协议。插件维护者 ID 为 1624318455,遵循 MIT 许可证。

它解决了在 DSH 运行过程中(不重启进程)快速切换代理模式、配置代理白名单以及将代理环境变量传递给子进程的需求。

核心功能

  1. 运行时切换:支持 direct(直连)、system(跟随系统代理)、manual(手动指定)三种模式。修改配置后立即生效。
  2. Web 设置卡片:在 DSH 的 Web 界面(Settings → Plugins → Plugin configuration)中可直接编辑配置,无需操作配置文件。
  3. 单协议匹配:HTTP 和 SOCKS5 使用同一个路由分发器,noProxy 规则在两种协议下语义一致。
  4. 子进程跟随:启用 exportEnv 后,插件会将 HTTP(S)_PROXY 等环境变量传递给 DSH 启动的子进程(如 bash-tool 中的 curl、git 等)。

安装与启用

安装前请确保环境满足要求:DSH 版本 ≥ 0.1.2-rc.1,Node.js 版本 ≥ 20。

执行以下命令安装:

dsh plugin --profile <name> add github:1624318455/dsh-plugin-proxy

安装完成后,重启 dsh web 服务,即可在设置中找到该插件。

典型用法

你可以通过编辑 $DSH_HOME/settings.yaml 文件或使用 Web 设置卡片来配置。

配置示例

在 settings.yaml 中添加 dsh-proxy 配置段:

dsh-proxy:
  mode: manual                           # direct | system | manual
  proxy: socks5://127.0.0.1:1080         # 仅 manual 模式有效
  noProxy:
    - localhost
    - .internal.example
  exportEnv: true                        # 仅 manual 模式有效,传递给子进程

模式说明

模式 行为
direct 所有请求直连,不经过代理。
system 读取系统环境变量或 macOS 系统网络代理设置。配置文件中的 proxy、noProxy 和 exportEnv 在此模式下被忽略。
manual 使用配置文件中 proxy 字段指定的代理地址,noProxy 用于绕过特定主机。

适用场景与注意

适用场景:
* 需要在不同网络环境间快速切换的智能体开发。
* 需要为 LLM 请求、Web 搜索、HTTP MCP 服务器统一走代理的场景。
* 需要确保子进程(如 Git 操作)也使用代理的场景。

注意事项:
* 进程隔离:插件仅对 DSH 主进程内的 fetch 请求生效。内置的浏览器主机(Browser Host)和浏览器下载功能是独立进程,不经过此插件代理,需自行配置浏览器代理。
* Bedrock 路由:如果使用 pi-ai 的 Bedrock 路由,AWS SDK 会管理自身的代理,插件导出的环境变量在此处同样会被 SDK 读取。
* 子进程生效时机:exportEnv 仅对插件加载后新启动的子进程有效。切换模式前已运行的子进程不会自动更新环境变量。
* SOCKS5 实验性:底层的 Undici SOCKS5 Agent 目前上游标记为实验性功能。
* 手动模式环境变量:在 manual 模式下,插件会忽略当前环境中的 HTTP_PROXY/NO_PROXY 等变量,完全由配置文件决定路由策略。

总结

dsh-plugin-proxy 为 DSH 提供了灵活的代理管理能力。通过配置文件或 Web 卡片,开发者可以在不重启服务的情况下调整路由策略,配合 exportEnv 功能,可以很好地解决智能体开发中网络请求的代理隔离与统一问题。

更多细节可查阅:GitHub 仓库 | DSH 插件目录

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

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

小夜