导入 Clash 订阅,自动选最快节点为 Agent 出网
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/FIZMIE/dsh-net-proxy.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 20 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-net-proxy」归属 mafeis/dsh-net-proxy,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-net-proxy @ 0.8.0
✓Node 引擎要求 >=22.6 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/13 09:39:12
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 21 条)
- 读取本地文件lib/index.js:76
if (!existsSync(file)) return undefined; - 读取本地文件lib/index.js:77
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 读取本地文件lib/index.js:144
return { ...DEFAULT_CONFIG, ...JSON.parse(readFileSync(configPath(), 'utf8')) }; - 写入本地文件lib/index.js:152
mkdirSync(stateDir(), { recursive: true }); - 写入本地文件lib/index.js:153
writeFileSync(configPath(), `${JSON.stringify(state.config, null, 2)}\n`, 'utf8'); - 发起网络请求lib/index.js:236
const response = await fetch(`http://127.0.0.1:${state.config.apiPort}${path}`, { - 读取本地文件lib/index.js:269
if (!existsSync(dir)) return undefined; - 读取本地文件lib/index.js:270
const found = readdirSync(dir).find((file) => /^mihomo.*\.exe$/i.test(file)); - 读取本地文件lib/index.js:294
if (!existsSync(from) || existsSync(to)) continue; - 写入本地文件lib/index.js:296
copyFileSync(from, to); - 写入本地文件lib/index.js:323
mkdirSync(stateDir(), { recursive: true }); - 写入本地文件lib/index.js:335
writeFileSync(runtimeConfigPath(), buildRuntimeConfig(readFileSync(subscriptionPath(), 'utf8')), 'utf8'); - 执行外部命令来自配置/变量lib/index.js:339
const spawned = spawn(kernel, ['-d', stateDir(), '-f', runtimeConfigPath()], { - 写入本地文件lib/index.js:358
try { writeFileSync(kernelLogPath(), output.join(''), 'utf8'); } catch { } - 执行外部命令来自配置/变量lib/index.js:582
const helper = spawn(kernel, ['-d', dir, '-f', configFile], { - 删除本地文件递归lib/index.js:613
try { rmSync(dir, { recursive: true, force: true }); break; } catch { await sleep(300); } - 发起网络请求lib/index.js:625
const response = await fetch(`http://127.0.0.1:${apiPort}/version`, { - 发起网络请求lib/index.js:677
const response = await fetch(url, { - 发起网络请求client/client.js:152
const response = await fetch(BASE + path, { - 发起网络请求client/client.js:186
const response = await fetch(BASE + "/status", { cache: "no-store" }); - 发起网络请求client/client.js:205
const response = await fetch(BASE + "/log", { cache: "no-store" });
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 导入Clash订阅
- 自动选最快节点
- 故障自动转移
为 DeepSeek Harness 桌面应用自带出站代理:内置 mihomo 内核、导入 Clash 订阅、自研延迟排序与自动故障转移。无需第三方代理客户端,也不占用系统代理。
README
由 DeepSeek 最新模型翻译生成dsh-net-proxy
把下面这段直接粘给你的 AI Agent(Claude Code、Codex、Cursor、DeepSeek Harness——任何能跑命令的都行),它会帮你装好并配置这个插件:
把 https://github.com/FIZMIE/dsh-net-proxy 这个 DSH 插件装到我的 DeepSeek Harness 里。
读它的 README,接进 ~/.dsh/profiles/<profile>/package.json 和 cordis.patch.yml,再用它 tools/ 目录里的脚本把 mihomo 内核和规则库拉下来。
问我要 Clash 订阅链接,导入,打开代理,然后访问 https://github.com 验证它真的通了。
给 DeepSeek Harness 桌面版的自包含出网代理。
你需要一个订阅。 这个插件是客户端,它自己不提供也不售卖任何线路——请用你现有服务商的 Clash 格式订阅链接。没有订阅它就没有节点可连。
它做什么
订阅链接只需粘一次。
展开完整文档(README 剩余 1 节)
dsh-net-proxy
把下面这段直接粘给你的 AI Agent(Claude Code、Codex、Cursor、DeepSeek Harness——任何能跑命令的都行),它会帮你装好并配置这个插件:
把 https://github.com/FIZMIE/dsh-net-proxy 这个 DSH 插件装到我的 DeepSeek Harness 里。
读它的 README,接进 ~/.dsh/profiles/<profile>/package.json 和 cordis.patch.yml,再用它 tools/ 目录里的脚本把 mihomo 内核和规则库拉下来。
问我要 Clash 订阅链接,导入,打开代理,然后访问 https://github.com 验证它真的通了。
给 DeepSeek Harness 桌面版的自包含出网代理。
你需要一个订阅。 这个插件是客户端,它自己不提供也不售卖任何线路——请用你现有服务商的 Clash 格式订阅链接。没有订阅它就没有节点可连。
它做什么
订阅链接只需粘一次。之后插件会:
1. 启动自己的代理内核 —— 内置 mihomo 二进制,不用额外装任何东西
2. 自己实测每个节点 —— 并发对 https://github.com 测延迟
3. 用最快的那个 —— 节点挂了自动切换
4. 接管 Agent 的出网 —— web_fetch、模型请求,以及 git、npm 这类子进程
不用后台常驻 Clash 客户端,不用开系统代理,不用改 hosts,不需要管理员权限。
为什么会有这个插件
在被墙的网络里让 Agent 干活是这样的:请求超时 → Agent 判断"网络坏了" → 你每次会话都要手动跟它解释一遍你的代理怎么开。
常见的办法对 Agent 都不好使:
- 系统代理它看不见 —— Node 进程里的 fetch 根本不吃系统代理
- 图形界面代理客户端可能没开着,而 Agent 在沙箱里也起不了 GUI 程序
- 客户端自带的 url-test 组按固定间隔(常常是一天)对 gstatic.com 测速 —— 那既不是你关心的站点,而且请求失败时它也不会重测
所以这个插件做的事是:在该测的时候,测你真正关心的那个站点;请求失败时立刻切换。
安装
一句话交给 AI
把文件顶部那段粘给一个能执行 shell 的 Agent。那段话里已经包含它需要的一切:仓库地址、profile 在哪、跑哪些脚本、怎么验证结果。
手动安装
1. 克隆到一个固定位置(别放进 profile 的 node_modules 里)
git clone https://github.com/FIZMIE/dsh-net-proxy.git "$env:USERPROFILE\.dsh\plugins\dsh-net-proxy"
2. 让 profile 认到它在 $DSH_HOME\profiles\<profile>\package.json 里加:
"dependencies": { "dsh-net-proxy": "link:C:/Users/<你>/.dsh/plugins/dsh-net-proxy" }
"dsh": { "profile": { "bundles": [ ..., "dsh-net-proxy" ] } }
然后建链接,让加载器能解析这个名字: New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-net-proxy" -Target "$env:USERPROFILE\.dsh\plugins\dsh-net-proxy"
3. 在 $DSH_HOME\profiles\<profile>\cordis.patch.yml 里注册这个 bundle:
- id: dsh-net-proxy
disabled: false
4. 自检
node "$env:USERPROFILE\.dsh\plugins\dsh-net-proxy\tools\verify-setup.mjs"
5. 重启 DeepSeek Harness(新的宿主插件没法热挂载)
内核和规则库已经提交在仓库里,所以重启就是最后一步 —— 不需要下载任何东西。
以后想更新它们(或者你为了缩小克隆体积把它们删了),见 THIRD-PARTY-NOTICES.md。
用法
打开 设置 → 网络代理。
- 第一次:粘订阅链接 → 点 更新订阅
- 之后每次:点 启用代理 就行。整个流程就这一步 —— 它会启动内核、给所有节点测速、接管出网,大约 2 秒。
节点表会列出每个节点和实测延迟;点节点名可以固定用它,点 自动选最快 恢复自动。
显示日志 可以看到插件在干什么。
你不点它就一直关着
打开应用什么都不会发生:不起内核、不下载订阅、不挂载任何东西(约 4 ms)。
上次关掉时代理是开着的,也不会自动恢复 —— 插件每次启动都是关闭的,等你点。
如果你不想每次惦记它,下面那节"写进 Agent 记忆"就是干这个的。
写进 Agent 记忆
安装时插件会往 $DSH_HOME/AGENTS.md 追加一小节,告诉 Agent 有这个代理、怎么开。
没有这一步,Agent 根本不知道它存在,只会一直报"GitHub 连不上"。
它只写一次,且仅在文件里没有等效章节时才写 —— 你后来改过的文件永远不会被重写。
想关掉,把 $DSH_HOME/.dsh-net-proxy/config.json 里的 "writeMemory" 设为 false。
实测行为
在一个真实的 23 节点订阅上测得:
| 节点测速 | 23/23 可达,最快约 90 ms,最慢约 274 ms |
| 点击到可用 | 点「启用代理」后约 2 秒 |
| 应用启动开销 | 约 4 ms,且不启动任何进程 |
| 开代理后出口 IP | 5.34.221.111 — 🇯🇵 日本东京(Akari Networks) |
| 关代理时出口 IP | 112.50.79.219 — 🇨🇳 广东广州(China Mobile) |
| 故障切换 | 淘汰当前节点 → 自动走到下一个 → https://github.com 返回 200 |
| loopback | 始终直连(127.0.0.1:19387 打到 DSH 本体,没走代理) |
内核自己的日志是流量确实经过它的证据:
[TCP] 127.0.0.1:60196 --> github.com:443 match DomainKeyword(github) using 九云[...]
[TCP] 127.0.0.1:60206 --> 127.0.0.1:19387 match IPCIDR(127.0.0.0/8) using DIRECT
设计说明
改代码前值得读一遍 —— 下面每一条都是踩坑踩出来的。
绝不重塑订阅文档。 mihomo 的 YAML 解析器拒绝重复键(比 YAML 规范严格),所以把自己的键前置会直接失败;而把 dns: 这类块从文档里抽出来会破坏相邻结构。插件只就地改写几个监听/控制器的标量键,所有块原样留在供应商放置的位置 —— 包括供应商的怪癖写法,比如节点名里不带引号的全角冒号。
用订阅自带的选择组,不自建。 自建组就要改组列表,又撞上上面那条。真实订阅都自带一个覆盖全部节点的 selector,所以插件通过 API 发现它并在其中切换。
不重启换节点。 路由走一个装在 Node 全局 dispatcher 槽位的 undici dispatcher —— 这就是 @deepseek-ai/dsh-http-proxy 用的同一套跨包机制。dispatcher 是每次请求读取的,所以切换节点会改变下一个请求的去向。
规则库必须内置,而且必须是完整版。 订阅规则里引用 GEOIP,CN / GEOSITE,所以内核在解析配置之前就需要这些数据。缺了它,内核会去 GitHub 下载然后卡死且没有任何报错;把 geox-url 置空则会直接 fatal 退出。而「精简版」数据库砍掉了 gfw 分类,DNS 配置引用了它的订阅会报 list gfw not found in geosite.dat 起不来。另外内核是在工作目录里找这些文件,不是可执行文件旁边,所以每次启动都会复制过去。
订阅下载有第二条路:走内置内核。 宿主的 fetch 受进程所带代理环境影响,在被墙的网络里可能完全没有出口 —— 而这是最不该失败的地方,因为那次下载是插件的唯一入口。所以 fetch 失败时,插件会用一份只有 MATCH,DIRECT 的临时配置把内置内核拉起来(不需要订阅、不需要节点、不需要规则库就能启动),拿它当 HTTP 代理把订阅拉下来,然后清理掉。另一个进程有另一套网络栈,这是实打实的第二次机会;而订阅服务商通常恰恰是唯一直连可达的那个域名。
启停串行,且停止要等进程真死。 child.kill() 只投递信号;旧进程还占着端口和工作目录时启动新的,表现为第二次启动静默卡住。所有启停走一条队列,旧进程的退出会被等待,而且它的 exit 回调会先确认自己仍是当前子进程才去动状态。
运行配置每次启动重建。 写一次然后复用,会让文件和内存状态不一致 —— 文件里留着过期端口,插件就会去一个没人监听的地址轮询,把已经成功启动的内核报成失败。
启动失败要能看见,不能吞掉。 启用是立即返回、后台完成的,所以那里的异常没有 HTTP 响应可搭车。错误会存进 state.lastError,由 /status 读回给界面 —— 否则用户看到的只是一个"点了没反应"的按钮。
HTTP 接口
全部在 /dsh-net-proxy 下,仅接受环回来源:
| 方法 | 路径 | 用途 |
| GET | /status | 内核、节点、当前出口、路由状态、进度、最近错误 |
| GET | /log | 最近 200 行日志 |
| POST | /enabled | {"enabled":true\|false} 总开关 |
| POST | /subscription | {"url":"..."} 保存订阅链接 |
| POST | /refresh | 重新下载并加载;{"preferCache":true} 用本地缓存 |
| POST | /test | 立即重新测速 |
| POST | /select | {"node":"..."} 固定节点,{"node":"auto"} 恢复自动 |
| POST | /kernel | {"action":"start"\|"stop"\|"restart"} |
| POST | /failover-test | 走一遍故障切换;{"force":true} 先淘汰当前节点 |
目录结构
lib/index.js 宿主半边:内核生命周期、订阅、测速排序、故障切换、路由 client/client.js 浏览器半边:设置页(手写的 ModuleLoader bundle) bin/ 内置的 mihomo 内核 + 规则库 tools/ fetch-kernel.mjs、fetch-geodata.mjs、verify-setup.mjs
运行要求
- DeepSeek Harness 桌面版,Windows x64
- 一个 Clash 格式的订阅链接
- 不需要管理员权限,不需要其他代理客户端
已知限制
- 只吃 Clash YAML 订阅。 base64 订阅链接会被明确拒绝,请在服务商后台切换格式。
- 只支持 HTTP 代理。 DSH 自己的代理层只接受 http(s)://,而内置内核提供的是 HTTP 混合端口 —— 实际不构成限制,但纯 SOCKS 订阅不支持。
- 模型请求默认不走代理(proxyModelCalls: false),这样坏节点不会把对话一起拖下水。可在 config.json 里改。
- 内置内核仅 Windows x64。 插件自身代码与平台无关,但 bin/ 不是。
- 规则库不自动更新。 随插件走;需要时用 tools/fetch-geodata.mjs 刷新。
许可
插件自身源码为 MIT。内置的 mihomo 内核与规则库是 GPL-3.0,以独立文件形式原样再分发 —— 见 THIRD-PARTY-NOTICES.md。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
FIZMIE/dsh-net-proxy
导入 Clash 订阅,自动选最快节点为 Agent 出网
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1