dsh-net-switch:Harness 運行時出網切換

前言

DeepSeek Harness(DSH)裏,LLM 調用、Web 搜索/抓取、HTTP MCP 以及部分 agent shell 子進程的 HTTP 流量,都走進程內的 HTTP 棧。官方通過 @deepseek-ai/dsh-http-proxy 在啓動時從環境變量(或 $DSH_HOME/.env)讀一次策略,裝成進程級 undici dispatcher;它不支持 SOCKS、PAC,也不會讀操作系統代理。因此 Clash Verge 的「系統代理」對 Harness 本體無效——只有 shell 裏的 curl、git、npm 等子進程會受系統代理影響。

想換路由,官方路徑通常是改環境變量並重啓 Harness。若你本地用 Clash Verge Rev 做混合代理,又希望 agent 在「走代理」和「直連/局域網」之間隨時切換而不重啓,社區插件 dsh-net-switch(維護者 B1aZerr,分類:聯網工具)針對的就是這個缺口。

這是什麼

dsh-net-switch 給 DSH 提供一個運行時出網開關:在「本地 Clash Verge 代理」與「直連(含局域網)」之間切換 Harness 自身的出站流量,無需重啓。當前版本爲 0.1.0,許可證 MIT,要求 DSH >=0.2.0-rc.2。

三個入口驅動同一套邏輯:

入口 用法
會話頭部狀態膠囊 緊鄰模式選擇按鈕右側;綠點「代理」/ 灰點「直連」/ 琥珀「代理離線」,點擊切換
Agent 工具 network_mode:模型可按任務臨時切到 clash,用完切回 lan
斜槓命令 /net clash、/net lan、/net status

插件目錄頁:https://www.skillhub.cn/plugins/B1aZerr/dsh-net-switch;源碼與說明:https://github.com/B1aZerr/dsh-net-switch。

核心功能

進程內路由替換

插件把官方「啓動時一次性解析」的 dispatcher 換成每次請求現判的 SwitchDispatcher:

  • mode=clash → 經 ProxyAgent 發往 Clash Verge(默認 127.0.0.1:7897,可從 verge.yaml 自動讀混合端口)
  • mode=lan → 使用原直連 dispatcher
  • 命中 NO_PROXY 的目標永遠直連

覆蓋範圍包括:LLM 調用、web 搜索/抓取、HTTP MCP;可選通過 publishEnvToChildren 同步 HTTP_PROXY / HTTPS_PROXY / NO_PROXY / NODE_USE_ENV_PROXY 到 git/curl/npm/pwsh 等子進程。

私網與迴環繞過

比官方策略更嚴的繞過列表:localhost、127.0.0.0/8、::1、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16,以及配置項 noProxy 中的額外主機名/IP/CIDR。NAS、局域網 IP、本地服務不會被誤送進代理。

失敗開放與狀態展示

選了 clash 但代理端口探不通時,默認自動回退直連(fail-open),避免 agent 卡死;狀態保留 mode: clash 且 degraded: true,膠囊顯示琥珀「代理離線」。若需要「無代理即失敗」,將 autoFallback 設爲 false。

插件只讀 Clash Verge 的 verge.yaml 做端口發現,不修改其系統代理、TUN 或訂閱。卸載時會恢復原有 dispatcher 與代理環境變量。

GUI 與安全

狀態膠囊註冊在 conversation.session.header.actions(order: -5,介於 agent-preset 與 job-list 之間),隨頭部流式排布,不覆蓋已有控件。

宿主暴露僅限迴環的 HTTP 路由:GET /dsh-net-switch/state、POST /dsh-net-switch/mode(支持 {"mode":"clash"|"lan"} 或 {"toggle":true})。Host 須爲迴環;跨站 POST 會因 Origin 校驗被拒絕。

安裝與啓用

前置:帶 profile 的 DSH(示例 profile 名爲 desktop),Clash Verge Rev 在運行(混合端口默認 7897)。

下面三種方式任選其一(命令來自項目 README):

# 方式 A:從 GitHub 安裝(推薦)
dsh plugin --profile desktop add github:B1aZerr/dsh-net-switch

# 方式 B:本地 link(開發時改代碼即時生效)
git clone https://github.com/B1aZerr/dsh-net-switch
dsh plugin --profile desktop add link:<克隆路徑>\dsh-net-switch

# 方式 C:從 tgz 安裝
dsh plugin --profile desktop add file:<解壓路徑>\dsh-net-switch-0.1.0.tgz

預構建包(無需本地構建):

https://github.com/B1aZerr/dsh-net-switch/releases/latest/download/dsh-net-switch.tgz

裝完後可在插件目錄執行自檢(對運行中的 host):

node dsh-net-switch\tools\verify-install.mjs

會話頭部、模式選擇按鈕右側應出現狀態膠囊(默認「直連」)。若修改了 host 側代碼,需在「設置 → 插件」中關閉再打開 net-switch,或重啓 DSH Desktop,否則 host 模塊緩存可能導致改動不生效;client 半刷新頁面即可。

典型用法

  1. 手動切換:點擊頭部膠囊,或在會話中執行 /net clash、/net lan;用 /net status 查看當前模式與探活結果。
  2. Agent 自主切換:在對話中讓模型調用 network_mode,例如需要訪問境外 API 時切 clash,任務結束後切回 lan。
  3. 可選配置:在 profile 的 cordis.patch.yml 中覆蓋插件 config(節選):
- id: net-switch
  name: 'dsh-net-switch'
  config:
    proxy: 'http://127.0.0.1:7897'
    mode: lan
    autoFallback: true
    probeIntervalMs: 5000
    probeTimeoutMs: 2000
    noProxy: ['nas.home.arpa']
    persist: true
    publishEnvToChildren: true
    enabled: true

模式優先級:config.mode → 持久化狀態文件(默認 $DSH_HOME/storages/dsh-net-switch.json)→ lan。

適用場景與注意

適合誰:本機長期跑 Clash Verge、用 DSH Desktop 做 agent 開發或日常對話,需要在「Harness 本體走代理」和「直連/內網」之間頻繁切換,且不想每次改 .env 並重啓的人。

務必知曉:

  • 插件以當前 DSH 進程權限運行,安裝前請閱讀源碼與 MIT 許可證,確認代理 URL 與路由邏輯符合你的安全策略。
  • 不支持 SOCKS/PAC;代理地址須爲 HTTP 形式(與官方 http-proxy 一致)。
  • 社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態遵循「一切皆插件」,本插件爲社區維護的聯網工具類擴展。

結尾

dsh-net-switch 把 Harness 出網從「啓動定死」改成「運行時一鍵切換」,並與 Clash Verge 混合端口、頭部 UI、network_mode 工具、/net 命令打通。若你的痛點正是「系統代理對 Harness 無效、重啓才能換路由」,可按上文命令安裝並在頭部膠囊或斜槓命令裏驗證。

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

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

小夜