dsh-proxy-router:DSH 直連優先、代理兜底的取回路由

前言

在 DeepSeek Harness(DSH)裏,智能體經常要拉取訂閱頁、文檔或 API。環境變量一把梭 HTTP_PROXY 時,直連能通的站點也會進代理;直連失敗又沒有按主機重試,往往只能手動換鏡像或反覆重啓。DSH 社區插件 dsh-proxy-router(維護者 Lequait,分類:聯網工具)針對的是另一層需求:導入一份代理訂閱,在 harness 側做「直連優先、失敗自動走本地代理」,並按主機記住下次該走哪條路。

下面介紹它是什麼、和內置 dsh-http-proxy 的差別、如何安裝與調用。

這是什麼

dsh-proxy-router 給 DSH 提供「直連優先、代理兜底」的取回能力:訂閱鏈接 → 本機監督的 mihomo 內核 → 本地混合端口;插件側的 smartFetch 先查路由記憶,直連失敗再走代理重試,成功則記住該主機應走的路徑。

與 DSH 自帶的 dsh-http-proxy 對比(README 中的說明):

  • dsh-http-proxy 啓動時把 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 裝成 undici 全局 dispatcher,要麼全代理要麼全直連,不按主機區分,也沒有失敗後再換路的邏輯。
  • 本插件補的是:兩條路 + 按主機記憶 + 與代理健康解耦——代理沒有健康節點時,直連路徑仍可用;傳輸層使用 Node 內置 node:http / node:https / node:tls 與 CONNECT 隧道,無額外 npm 依賴。

節點選擇與故障切換交給 mihomo(訂閱、url-test 組、204 探測);直連/代理策略由插件負責。當前版本 0.2.1,許可證 MIT,要求 DSH >=0.1.0-rc.6。

工作原理(概覽)

  1. 用訂閱鏈接生成/更新內核配置,由插件監督 mihomo,對外提供例如 http://127.0.0.1:<mixedPort> 的混合端口(默認 mixedPort 19097,controllerPort 19098,與 Clash Verge 常用端口錯開)。
  2. smartFetch:按主機查路由記憶(默認 TTL 約 30 分鐘)→ 直連優先 → 失敗則經本地代理重試 → 成功則寫入記憶。
  3. 內核路徑:依次嘗試環境變量 DSH_PROXY_CORE、PATH、常見安裝目錄、已運行進程、Windows 註冊表等;都沒有時可自動下載 mihomo 到 <DSH_HOME>/cache/proxy-router/bin/(GitHub 直連失敗會換鏡像源)。

安裝與啓用

在目標 profile 下安裝插件(命令來自倉庫 README):

dsh plugin --profile <你的profile> add dsh-proxy-router
# 或用 GitHub 源
dsh plugin --profile <你的profile> add github:Lequait/dsh-proxy-router

重啓 harness 後,會話中會出現 proxy_router 工具。

訂閱與配置

最少輸入:一個訂閱地址。 支持 Clash YAML 與 base64 節點列表。

方式 ①:交給 agent(推薦)

啓動時帶上訂閱,插件會寫入 <DSH_HOME>/cache/proxy-router/subscription.txt,後續 status / test / fetch 不必重複提供:

proxy_router { action: "start", subscriptionUrl: "https://你的訂閱鏈接" }

方式 ②:寫在 profile 的 cordis.patch.yml

在 proxy-router 條目的 config 中設置 subscriptionUrl,需要隨 harness 自動拉起內核時可設 autoStart: true。其餘字段均可選,例如:

- id: proxy-router
  name: dsh-proxy-router
  config:
    subscriptionUrl: 'https://你的訂閱鏈接'
    corePath: ''
    autoStart: true
    mixedPort: 19097
    controllerPort: 19098
    directTimeoutMs: 8000
    proxyTimeoutMs: 12000
    healthUrl: 'http://cp.cloudflare.com/generate_204'
字段 默認 說明
subscriptionUrl '' 訂閱鏈接(含 token,請自行保管)
corePath 自動探測→自動下載 通常留空;或設 DSH_PROXY_CORE
autoStart false 是否隨 harness 啓動內核
mixedPort / controllerPort 19097 / 19098 本地混合端口與控制器端口
directTimeoutMs / proxyTimeoutMs 8000 / 12000 直連與代理超時
healthUrl cloudflare 204 節點健康探測 URL

工具 proxy_router 典型用法

action 作用
status 內核狀態、當前節點、健康節點數、路由記憶條數
start / stop 啓停本地內核
test 逐節點實測健康度,按延遲排序
fetch 按「直連優先 → 代理兜底」取回 URL(force: true 可忽略記憶重試)
routes / forget 查看或清空按主機的路由記憶

用 fetch 驗證某 URL 是否能在當前網絡下被智能體取回,是常見調試步驟;生產使用前可用 test 確認訂閱裏是否還有健康節點。

適用場景與注意

適合誰: 需要在 DSH 會話裏穩定抓取外網資源、又不想全局代理拖慢直連站點,或希望「第一次失敗就換路、第二次起少試錯」的開發者。

務必知曉:

  • 插件以當前 dsh 進程權限 運行,並會啓動第三方內核 mihomo;安裝前請閱讀 GitHub 源碼 與 MIT 許可證,只安裝你信任的來源。
  • 訂閱 URL 會出現在 <DSH_HOME>/cache/proxy-router/config.yaml 等生成文件中,含憑據,勿同步或提交到版本庫。
  • 若訂閱節點全部不可用,插件會報告健康節點爲 0,僅直連仍可用,不會因代理掛掉而拖死 agent。
  • 本插件尚未接管內置 web_fetch;提供的是獨立工具與本地代理端口。若要讓內置抓取也走同一路由,需額外註冊 ctx.web 抓取提供方(README 邊界說明)。

DSH 生態強調「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-proxy-router 把「訂閱 → 本地 mihomo → 直連優先、失敗走代理、按主機學習」收成 harness 內可調用的 proxy_router 工具,與全局環境變量代理相比,更貼近按站點選路的需求。進一步瞭解可查看 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜