dsh-split-proof:Clash/Mihomo 分流規則離線驗收

前言

在 DeepSeek Harness(DSH)裏做與代理、分流相關的自動化時,常見前提是:一份從客戶端導出的 Clash 或 Mihomo 配置,以及你對「某域名應走直連、代理還是攔截」的聲明。配置裏的規則按順序 first-match,規則一多,很難憑肉眼或臨時上網驗證「某個域名到底命中哪一條」。社區網絡類插件多爲遠程連接類能力,分流命中缺少可複覈的對照手段。dsh-split-proof 由 dingchenhui0618-arch 維護,歸類爲 admin-security,在 DSH 內提供只讀、離線的分流驗收:讀配置與用例,按規則鏈求值,輸出期望與實際及命中規則原文。

這是什麼

dsh-split-proof 是給 DeepSeek Harness 的分流驗收器:讀取一份 Clash/Mihomo profile 和一份域名期望用例,按配置中規則的真實順序逐條求值,報告每個域名「期望走哪條路」與「實際命中哪條規則」。全程只讀、不聯網、不寫任何設備配置。當前版本 0.1.0,許可證 MIT;package.json 要求 DSH >=0.2.1-rc.2 <0.3.0。目錄見 SkillHub 插件頁,源碼與說明見 GitHub 倉庫。

它不做的事需要先看:不連接路由器、不拉訂閱、不改配置;整個包無 http/https/net/DNS 調用。不是網絡探針——報告描述的是「配置按規則會怎麼走」,不能證明手機此刻實際出口。期望來自用例文件,插件不用 TLD 或中文組名替你猜語義。

核心功能

下面介紹插件在資料中明確寫明的驗收能力。

  1. 期望由你聲明:direct / proxy / block,或具體策略名(精確比較);可選 ip、sourceIp、port、network,以便離線判定 IP-CIDR、SRC-IP-CIDR、DST-PORT、NETWORK 等規則。
  2. 實際命中可溯源:規則序號與規則原文寫入報告;代理組目標算「走代理」,並註明組內當前節點由運行時決定、配置裏看不到。
  3. 無法離線判定單獨列出:需 DNS、IP 地理位置庫或手機運行時才能決定的規則(如 GEOIP,<國家>、無 IP 的 IP-CIDR、遠程規則集等)標明原因,不猜測結果。
  4. 基線對比:提供上一份舊報告時,可檢查「國內規則沒變」等迴歸場景。
  5. 雙入口:對話視圖「分流驗收」Tab 與 Agent 工具 split_proof;CLI 與面板共用同一驗收引擎;--html 與 GET /dsh-split-proof/report 產出同一份自包含 HTML 報告。

支持的規則類型包括 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、DOMAIN-REGEX、RULE-SET(classical/domain/ipcidr)、MATCH/FINAL、多種 IP/端口/網絡規則、GEOIP,LAN;PASS 按 Mihomo 語義跳過繼續匹配。規則集僅讀配置目錄內本地文件;type: http 的規則集不聯網拉取。其餘未支持類型使用例會進入「無法離線判定」。

安裝與啓用

先確認使用的 DSH profile,再按官方 README 安裝插件:

dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-split-proof

裝好後重啓 DSH:對話視圖出現「分流驗收」Tab,Agent 多一個 split_proof 工具。桌面端在應用內安裝插件時,profile 由應用自己管理。插件在 DSH 進程權限下運行,安裝前請自行覈對倉庫源碼與 MIT 許可證;SECURITY.md 說明只讀邊界與 HTTP 路由不宜暴露到不可信網絡——它是驗收器,不是安全邊界。

典型用法

面板三十秒上手

在「分流驗收」面板點「跑內置樣例」即可。fixtures/ 內有刻意留有兩處誤傷的家庭 Wi-Fi 配置、一份用例和一份「改動前」基線報告,用於對照報告如何讀失敗與無法判定條目。

CLI 跑同一套引擎

不想開圖形界面時,可直接調用 CLI(退出碼是接口的一部分):

node bin/split-proof.mjs \
  --config fixtures/home-wifi.yaml \
  --suite fixtures/domestic-foreign.json \
  --baseline fixtures/baseline.json \
  --html report.html
退出碼 含義
0 每條用例都通過
1 至少一條期望與命中不一致
2 配置或用例讀不了、解析失敗
3 沒有失敗,但有無法離線判定的用例

用例文件結構

用例 JSON 中聲明 directGroups、rejectGroups(例如把「廣告攔截」聲明爲攔截組),以及 cases 數組。示例字段如下:

{
  "name": "家裏 Wi-Fi · 國內不變、國外分流",
  "directGroups": ["DIRECT", "直連"],
  "rejectGroups": ["REJECT", "廣告攔截"],
  "cases": [
    { "domain": "www.taobao.com", "expect": "direct", "group": "國內" },
    { "domain": "www.youtube.com", "expect": "proxy", "group": "國外" },
    { "domain": "ads.doubleclick.net", "expect": "block", "group": "攔截" },
    { "domain": "github.com", "expect": "節點選擇", "group": "國外" },
    { "domain": "router.lan", "expect": "direct", "ip": "192.168.1.1" }
  ]
}

報告結論怎麼讀

結論 含義
通過 命中規則後的目標與期望一致
失敗 期望與命中不一致;含規則序號、原文與實際策略
無法離線判定 鏈路走到需 DNS/IP 庫/運行時的規則
用例無效 缺 domain/expect,或域名無法規範化

靜態樣例頁 docs/sample-report.html 可直接用瀏覽器打開;倉庫 docs/report.png 對應 CLI --html 產出樣式。

適用場景與注意

適合:在改 Clash/Mihomo 規則或合併訂閱導出後,用固定域名用例做迴歸;在 DSH Agent 工作流裏把 split_proof 當作只讀檢查步驟;需要把「命中哪條規則」寫進文檔或 CI(CLI 退出碼)的團隊。

注意:須提供從客戶端導出的配置及配置目錄內的本地規則集文件;不讀取手機文件系統。遠程規則集、GEOSITE、PROCESS-NAME 等會導致部分用例無法離線判定,屬設計行爲而非靜默失敗。DSH 生態是「一切皆插件」;SkillHub 等爲社區目錄,與 DeepSeek/幻方無官方從屬關係。

結尾

經過上面的步驟,可以把「分流靠手感」換成一份可複覈的對照報告:期望你寫、命中可溯源、離線不能判的直說原因。進一步細節見 GitHub README,安裝入口見 SkillHub 目錄頁。

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

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

小夜