前言¶
在 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 或中文组名替你猜语义。
核心功能¶
下面介绍插件在资料中明确写明的验收能力。
- 期望由你声明:
direct/proxy/block,或具体策略名(精确比较);可选ip、sourceIp、port、network,以便离线判定IP-CIDR、SRC-IP-CIDR、DST-PORT、NETWORK等规则。 - 实际命中可溯源:规则序号与规则原文写入报告;代理组目标算「走代理」,并注明组内当前节点由运行时决定、配置里看不到。
- 无法离线判定单独列出:需 DNS、IP 地理位置库或手机运行时才能决定的规则(如
GEOIP,<国家>、无 IP 的IP-CIDR、远程规则集等)标明原因,不猜测结果。 - 基线对比:提供上一份旧报告时,可检查「国内规则没变」等回归场景。
- 双入口:对话视图「分流验收」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 目录页。