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
羽毛球分组比赛记分
小程序二维码

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

小夜