dsh-clash-proxy
Verifieddsh-clash-proxy · v0.2.0 · MIT · Web UI
Self-contained rule-splitting proxy plugin for DeepSeek Harness: subscription-based routing (domestic direct / international via ss/trojan/vless/vmess/hysteria2/socks5/http nodes) confined to the harness process tree, with a native Web GUI management page
Install
dsh plugin add dsh-clash-proxy Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-clash-proxy
⚠️ 本插件完全由 AI 生成 ⚠️
给 DeepSeek Harness(DSH)使用的智能分流代理插件:完全自包含——不依赖外部 Clash/mihomo 客户端,仅靠内置规则引擎 + 订阅节点,让 Harness 进程环境内国内流量直连、国外流量走订阅节点,两边都流畅;系统其他程序完全不受影响。
特性
- 自包含、零外部依赖:主体纯 JavaScript 实现(
node:net/node:tls/node:crypto);hysteria2与vless reality经内置 Go 原生连接器(见「原生连接器」),不依赖外部 mihomo 等程序,安装即用 - 自研规则引擎:内置国内域名后缀表(11 万条压缩至 467KB)与国内 IP 段(IPv4/IPv6,约 8.7K 条),加上订阅自带规则与自定义规则,
DOMAIN/DOMAIN-SUFFIX/DOMAIN-KEYWORD/IP-CIDR/REJECT全部支持 - 订阅解析:支持完整 Clash 配置、裸节点列表、base64 包裹,节点分组
- 节点协议(国外流量出口):
- ✅
socks5/http上游代理 - ✅
ss(shadowsocks AEAD:aes-128-gcm / aes-256-gcm / chacha20-ietf-poly1305) - ✅
trojan(tcp / tls / ws) - ✅
vless(tcp / tls / ws) - ✅
vlessreality(xtls-rprx-vision + reality-opts,经原生连接器) - ✅
vmess(AEAD alterId=0,tcp / ws,AES-128-GCM) - ✅
hysteria2(QUIC,经原生连接器) - ❌
tuic(QUIC 变体,暂未实现)
- ✅
- 单端口双协议:HTTP CONNECT + SOCKS5 共用一个回环端口,兼容 curl、Node、几乎所有代理客户端
- 仅限 Harness 环境:
- 监听
127.0.0.1,不碰系统代理、不开 TUN - DSH 派生的子进程(pwsh/terminal、jobs、workflow)经环境变量继承代理
- DSH 自身
fetch(联网搜索、LLM、MCP)经运行时调度器走代理 - 回环地址强制绕过(NO_PROXY),无代理环
- 监听
- 原生 Web GUI:设置 → Clash 代理:状态、启停、订阅更新、节点列表、逐节点测速、组选择、实时流量
- 节点选择:
url-test(自动最快)/select(手动)/fallback,手动选择持久化 - 自动更新订阅:可配置间隔(小时),0 关闭
安装
dsh plugin --profile web add dsh-clash-proxy
# 或本地路径 / git 仓库:
dsh plugin --profile web add <path/to/dsh-clash-proxy>
重启 DSH(dsh web),打开 设置 → Clash 代理,填入订阅地址即可。无需任何其他软件。
配置
设置页「Clash 代理」卡片(或 profile 补丁覆盖层):
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关;关闭时不监听、不注入 |
subscriptionUrl |
空 | Clash 订阅地址;也可用环境变量 CLASH_SUBSCRIPTION_URL |
fetchProxyUrl |
空 | 抓取订阅本身可选的上游代理(订阅被墙时用) |
autoUpdateHours |
24 |
订阅自动更新间隔(小时),0 关闭 |
groupType |
url-test |
自动组类型:url-test / select / fallback |
latencyTestUrl |
gstatic 204 | 节点健康检查与测速 URL |
latencyTimeoutMs |
3000 |
测速超时(毫秒) |
noProxy |
回环地址 | 追加 NO_PROXY 条目(回环永远强制绕过) |
extraRules |
[] |
追加规则,如 DOMAIN-SUFFIX,example.com,DIRECT |
excludeRules |
[] |
从订阅规则剔除(子串匹配) |
数据目录:$DSH_HOME/clash-proxy/(订阅缓存与选择状态)。分流数据内嵌于包中(lib/core/data/*.json.gz),离线可用;npm run build:cn-data 可重新生成。
工作原理
DSH 进程树
├─ DSH 自身 fetch ──(运行时调度器)──┐
├─ pwsh / terminal / jobs ─(环境变量)┤
└─ workflow / subagent ───(继承 env)┘
▼
规则代理 (127.0.0.1:随机端口)
├─ 国内域名/IP → 直连(快)
└─ 国外 → 订阅节点 (ss/trojan/vless/vmess/hysteria2/socks5/http)
系统其他程序 ── 完全无感(不碰系统代理/TUN)
- 每连接按规则引擎决策
direct/proxy/reject - 管理页通过 DSH webserver 的
/clash-proxy/*JSON 接口访问 - 插件停用/卸载时恢复环境变量与 fetch 调度器,无残留
- 每个 DSH 进程随机端口,多实例互不冲突
插件复用 DSH 的以下能力(不自造轮子):
| DSH 能力 | 复用方式 |
|---|---|
timer 服务 |
订阅自动更新 + 定时全量测速循环 |
webServer 服务 |
注册 /clash-proxy/* 前缀路由,浏览器轮询 JSON API |
设置系统(dsh-settings) |
installSettingsSection 注册可编辑设置卡片,与浏览器共享同一份配置 |
客户端 slots / locale / settingsScope |
在「设置」页挂载管理面板,注册中英双语词典 |
| 运行时 fetch 调度器 | 注入 dispatcher,DSH 自身联网(搜索/LLM/MCP)走代理 |
| 环境变量注入 | 派生子进程(pwsh/jobs/workflow)继承 HTTP(S)_PROXY |
使用与验证
使用示例(在 DSH 内执行):
curl -x http://127.0.0.1:<代理端口> https://ipinfo.io # 看到国外出口 IP
curl https://www.baidu.com # 国内直连,秒开
验证情况(分层):
- ✅ 已验:
- 规则引擎 / 订阅解析 / SS AEAD(
test/smoke.mjs) - vmess(ws)、trojan(ws+tls)、vless(ws) 端到端(本地 xray oracle)
- hysteria2 / vless-reality 经真实节点人工验证(验证脚本含真实凭据,未随仓库发布)
- 真实分流 + socks5/ss 节点 + curl 实测(
test/proxy-e2e.mjs)
- 规则引擎 / 订阅解析 / SS AEAD(
- ⏳ 待验(发布前建议补):
- 全新 profile 安装冒烟(
dsh plugin add后首次启动) npm pack --dry-run产物完整性(确认lib/native/connector.exe与cordis.patch.yml入包)- 多实例随机端口互不冲突
- 全新 profile 安装冒烟(
开发与测试
npm install
npm run build:cn-data # 重新生成国内分流数据(需要国际网络)
node test/smoke.mjs # 规则引擎/订阅/SS 加密帧 单测
node test/vmess-e2e.mjs # vmess(ws) 端到端(本地 xray 服务器)
node test/trojan-ws-echo.mjs # trojan(ws+tls) 端到端(本地 xray 服务器)
node test/vless-ws-echo.mjs # vless(ws) 端到端(本地 xray 服务器)
node test/proxy-e2e.mjs # 端到端:真实分流 + socks5/ss 节点 + curl 实测
端到端测试内置 socks5/ss 协议夹具服务器;vmess/trojan/vless 测试需要 .clash-test/xray/xray.exe(本地 oracle 服务器)。设 TEST_UPSTREAM_PROXY=http://127.0.0.1:7890 可让夹具链路借道任意 HTTP 代理访问国际网络(仅测试用)。
原生连接器
hysteria2(QUIC)与 vless reality(uTLS 指纹)在纯 JS 中无法实现,插件自带一个自编译的 Go 原生连接器 lib/native/connector.exe(源码在 native/,go build -o ../lib/native/connector.exe . 重新构建),Node 通过 stdio 与其桥接。它只做这两种协议的「拨号 + 双向转发」,规则引擎、订阅、节点选择仍在纯 JS 侧,不依赖任何外部 Clash/mihomo 程序。
常见问题
- 状态「缺少订阅」:填
subscriptionUrl(或设CLASH_SUBSCRIPTION_URL)后点「更新订阅」。 - 订阅更新失败:订阅本身可能需要代理访问,把
fetchProxyUrl填上。 - 节点连不上:确认节点类型是
ss/trojan/vless/vmess/hysteria2/socks5/http(GUI 节点列表可见类型);tuic暂不支持。 - 验证分流:DSH 里跑
curl -x http://127.0.0.1:<端口> ipinfo.io看出国 IP;访问百度应秒开。 - 和已有 Clash 客户端共存:完全独立、随机端口,互不干扰。
已知限制
| 限制 | 原因 | 缓解方案 |
|---|---|---|
hysteria2 / vless-reality 依赖内置 Go 连接器(Windows amd64 二进制) |
QUIC / uTLS 指纹无法在纯 JS 实现 | 其他平台/架构用 native/ 源码执行 go build -o ../lib/native/connector.exe . 重新编译 |
tuic 暂不支持 |
另一 QUIC 变体,未实现 | GUI 选择 ss/trojan/vless/vmess/hysteria2/socks5/http 节点 |
| 部分节点对 google / wikipedia / x.com 出口不稳定(实测有超时) | 取决于订阅节点出口线路 | GUI 逐节点「测速」后换用更稳的节点 |
| 只作用于 Harness 进程树,不修改系统代理 | 设计如此(安全边界) | 需要系统级代理请另配系统工具 |
| 纯 JS 传输极高并发下吞吐有限 | node:net / node:tls 事件循环模型 |
国内流量已直连;国外按需使用 |
更新日志
- 0.2.0 — 支持
ss/trojan/vless(tcp/tls/ws) /vmess/socks5/http纯 JS 传输;新增hysteria2与vless-reality(内置 Go 原生连接器);Web GUI(状态/订阅更新/节点列表/测速/选择/流量);规则引擎 + 国内分流数据 + 订阅解析。
协议与合规
MIT 协议。本插件仅提供技术能力,请确保你的代理服务与使用方式符合当地法律法规。