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 插件目錄

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

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

小夜