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 目录页。

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

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

小夜