前言¶
在 DSH 里做调研或调工具时,出网路径往往要靠手工设置 http_proxy / https_proxy,流量去了哪台主机、这次任务搬了多少字节,也很难事后核对。系统级代理会接管整台机器,又容易和「只想管 DSH 自己请求」的需求错位。下面介绍社区插件 dsh-clashVerge(维护者 dawnsss,分类:联网工具):它在 DSH 与外部网络之间插入本机统计代理,提供四种出口预设和按字节的流量报表,只作用于 DSH 进程及其子进程,不改系统代理、不开 TUN。
这是什么¶
dsh-clashVerge 是 DeepSeek Harness(DSH)的 Web 侧插件(platform: web),当前版本 0.1.0,MIT 许可证,源码托管于 GitHub。它解决两类问题:一是为 web_fetch、web_search、bash 中的 curl / nmap 以及走 Node fetch 的插件统一选路;二是从字节流累加计量,按目标主机聚合,回答「这次调研吃了多少流量、都去了哪些主机」。
插件目录页:https://www.skillhub.cn/plugins/dawnsss/dsh-clashVerge(社区独立站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
四种出口模式¶
| 模式 | 标识 | 含义 | 典型场景 |
|---|---|---|---|
| 不接管 | off |
不插策略,出网与启动环境一致;不统计 | 排查问题、不想让代理介入 |
| 直连 | direct |
全部直连,仍经本地代理,照常统计 | 只要报表、不走上游 |
| 外网 | external |
公网走上游,内网/回环按目标分流直连 | 拉 GitHub、查外网资料 |
| 全局 | global |
除回环外全部走上游 | 需要内网目标也经代理链出的场景 |
模式持久化在 ~/.dsh/storages/clash-verge/state.json,DSH 重启后自动恢复。切换即时生效,只影响之后的请求;正在进行的下载保持原路由。
工作方式¶
DSH 进程 ──fetch/子进程──▶ 127.0.0.1:<临时端口> 本地统计代理 ──┬─▶ 直连目标
└─▶ 上游代理 ──▶ 节点
本地代理随插件启动,端口随机、仅监听回环。策略通过 @deepseek-ai/dsh-http-proxy 安装:进程内 fetch 替换 undici 全局 dispatcher,子进程在 spawn 时读取 http_proxy / https_proxy。
上游默认从本机 verge.yaml 的 verge_mixed_port 探测(常见 7897),读不到则用 7897;面板可改为任意 host:port 或 http(s)://host:port。仅支持 HTTP/HTTPS 上游,socks5:// 会被拒绝。
流量报表¶
面板提供:最近 5 秒均值的上行/下行速率;累计上下行、请求数、活动连接;最近 120 秒吞吐折线;流量去向(上游 vs 直连)与模式分布;目标主机 Top 20(字节、请求数、实际路由、最近访问时间)。统计的是真正搬动的字节,含失败重试与中断的传输。
Agent 可调用的工具¶
模型可调用 egress_mode 切换模式,返回当前上游、可达性、代理地址与累计流量,便于写成「先切全局 → 打内网 → 切回外网」的流程,无需人手在面板前点选。
上游故障行为¶
每 15 秒探活:external 在上游不可达时可降级直连并记账;global 默认失败关闭(拒绝发送、记 blocked),可用配置项 globalFailClosed: false 改为降级。行为可在面板与配置中调整。
安装与启用¶
安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,会改写出网路径与本地状态文件。
官方命令(Web profile):
dsh plugin --profile web add github:dawnsss/dsh-clashVerge
亦可在 GUI 插件页用「本地目录」安装。装完后刷新页面,左侧栏出现「出口模式」。
环境要求:package.json 中 engines.node 为 >=22.15。
HTTP 接口与配置¶
前缀 /clash-verge/api:
| 方法 | 路径 | 作用 |
|---|---|---|
| GET | /state |
当前模式、上游、代理状态、完整报表 |
| POST | /mode |
{ "mode": "off" \| "direct" \| "external" \| "global" } |
| POST | /config |
{ upstream?, bypass?, intranetSuffixes?, globalFailClosed? } |
| POST | /probe |
立即探测上游 |
| POST | /reset |
清零统计 |
写操作需 application/json 与本进程当次启动的 x-clash-verge-token(由 GET /state 下发)。仅接受同源请求;经反向代理访问时,可将对外 Host 加入环境变量 CLASH_VERGE_TRUSTED_HOSTS(逗号分隔)。
典型用法¶
- 日常外网调研:切到
external,公网走 Clash Verge 等本机混合端口,内网仍直连。 - 只要看清 DSH 去了哪些主机:切到
direct,不走上游,报表照常累计。 - 自动化流程:在对话中让 agent 调用
egress_mode,按步骤切换后再执行web_fetch或 shell 里的curl。 - 排查代理本身:切到
off,恢复与启动环境一致的出网,且不统计。
本地开发与改代码时,README 也给出克隆后本地目录安装的方式;host 半改 lib/index.js / lib/proxy.js 需重启 dsh web,客户端改 lib/client.js 可由 DSH 按 mtime 热更新面板。
适用场景与注意¶
适合谁:在 DSH 内频繁拉外网、做安全调研或需要可审计流量账单的开发者;已在本机运行 Clash Verge(或其它 HTTP 上游)且希望 DSH 单独走代理、不动整机系统代理的用户。
边界与注意:
- 作用域仅限 DSH 及其子进程;不修改系统代理、不操作 TUN 或第三方 profile。
external按主机名判内网,不做 DNS 后再判;公网域名若解析到内网地址仍会走上游(刻意设计,避免每次多一次 DNS)。- 需要内网也走代理时使用
global,并将bypass留空。 - 仓库提供
node tests/smoke.mjs、host.mjs、client.mjs、bench.mjs等自测脚本;smoke与bench不依赖外网。
本地代理额外开销约为回环一跳与 HTTP 头解析;README 中记载小请求回环基准(如经代理直连约 0.96 ms 中位往返),真实上游延迟取决于本机代理进程与节点,不在插件账上。
结尾¶
dsh-clashVerge 把 DSH 出网从环境变量手工维护,收敛为侧栏上的模式开关和按主机聚合的字节账单,并与 agent 的 egress_mode 衔接。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。