dsh-proxy-router:DSH 直连优先、代理兜底的取回路由

前言

在 DeepSeek Harness(DSH)里,智能体经常要拉取订阅页、文档或 API。环境变量一把梭 HTTP_PROXY 时,直连能通的站点也会进代理;直连失败又没有按主机重试,往往只能手动换镜像或反复重启。DSH 社区插件 dsh-proxy-router(维护者 Lequait,分类:联网工具)针对的是另一层需求:导入一份代理订阅,在 harness 侧做「直连优先、失败自动走本地代理」,并按主机记住下次该走哪条路。

下面介绍它是什么、和内置 dsh-http-proxy 的差别、如何安装与调用。

这是什么

dsh-proxy-router 给 DSH 提供「直连优先、代理兜底」的取回能力:订阅链接 → 本机监督的 mihomo 内核 → 本地混合端口;插件侧的 smartFetch 先查路由记忆,直连失败再走代理重试,成功则记住该主机应走的路径。

与 DSH 自带的 dsh-http-proxy 对比(README 中的说明):

  • dsh-http-proxy 启动时把 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 装成 undici 全局 dispatcher,要么全代理要么全直连,不按主机区分,也没有失败后再换路的逻辑。
  • 本插件补的是:两条路 + 按主机记忆 + 与代理健康解耦——代理没有健康节点时,直连路径仍可用;传输层使用 Node 内置 node:http / node:https / node:tls 与 CONNECT 隧道,无额外 npm 依赖。

节点选择与故障切换交给 mihomo(订阅、url-test 组、204 探测);直连/代理策略由插件负责。当前版本 0.2.1,许可证 MIT,要求 DSH >=0.1.0-rc.6。

工作原理(概览)

  1. 用订阅链接生成/更新内核配置,由插件监督 mihomo,对外提供例如 http://127.0.0.1:<mixedPort> 的混合端口(默认 mixedPort 19097,controllerPort 19098,与 Clash Verge 常用端口错开)。
  2. smartFetch:按主机查路由记忆(默认 TTL 约 30 分钟)→ 直连优先 → 失败则经本地代理重试 → 成功则写入记忆。
  3. 内核路径:依次尝试环境变量 DSH_PROXY_CORE、PATH、常见安装目录、已运行进程、Windows 注册表等;都没有时可自动下载 mihomo 到 <DSH_HOME>/cache/proxy-router/bin/(GitHub 直连失败会换镜像源)。

安装与启用

在目标 profile 下安装插件(命令来自仓库 README):

dsh plugin --profile <你的profile> add dsh-proxy-router
# 或用 GitHub 源
dsh plugin --profile <你的profile> add github:Lequait/dsh-proxy-router

重启 harness 后,会话中会出现 proxy_router 工具。

订阅与配置

最少输入:一个订阅地址。 支持 Clash YAML 与 base64 节点列表。

方式 ①:交给 agent(推荐)

启动时带上订阅,插件会写入 <DSH_HOME>/cache/proxy-router/subscription.txt,后续 status / test / fetch 不必重复提供:

proxy_router { action: "start", subscriptionUrl: "https://你的订阅链接" }

方式 ②:写在 profile 的 cordis.patch.yml

在 proxy-router 条目的 config 中设置 subscriptionUrl,需要随 harness 自动拉起内核时可设 autoStart: true。其余字段均可选,例如:

- id: proxy-router
  name: dsh-proxy-router
  config:
    subscriptionUrl: 'https://你的订阅链接'
    corePath: ''
    autoStart: true
    mixedPort: 19097
    controllerPort: 19098
    directTimeoutMs: 8000
    proxyTimeoutMs: 12000
    healthUrl: 'http://cp.cloudflare.com/generate_204'
字段 默认 说明
subscriptionUrl '' 订阅链接(含 token,请自行保管)
corePath 自动探测→自动下载 通常留空;或设 DSH_PROXY_CORE
autoStart false 是否随 harness 启动内核
mixedPort / controllerPort 19097 / 19098 本地混合端口与控制器端口
directTimeoutMs / proxyTimeoutMs 8000 / 12000 直连与代理超时
healthUrl cloudflare 204 节点健康探测 URL

工具 proxy_router 典型用法

action 作用
status 内核状态、当前节点、健康节点数、路由记忆条数
start / stop 启停本地内核
test 逐节点实测健康度,按延迟排序
fetch 按「直连优先 → 代理兜底」取回 URL(force: true 可忽略记忆重试)
routes / forget 查看或清空按主机的路由记忆

用 fetch 验证某 URL 是否能在当前网络下被智能体取回,是常见调试步骤;生产使用前可用 test 确认订阅里是否还有健康节点。

适用场景与注意

适合谁: 需要在 DSH 会话里稳定抓取外网资源、又不想全局代理拖慢直连站点,或希望「第一次失败就换路、第二次起少试错」的开发者。

务必知晓:

  • 插件以当前 dsh 进程权限 运行,并会启动第三方内核 mihomo;安装前请阅读 GitHub 源码 与 MIT 许可证,只安装你信任的来源。
  • 订阅 URL 会出现在 <DSH_HOME>/cache/proxy-router/config.yaml 等生成文件中,含凭据,勿同步或提交到版本库。
  • 若订阅节点全部不可用,插件会报告健康节点为 0,仅直连仍可用,不会因代理挂掉而拖死 agent。
  • 本插件尚未接管内置 web_fetch;提供的是独立工具与本地代理端口。若要让内置抓取也走同一路由,需额外注册 ctx.web 抓取提供方(README 边界说明)。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-proxy-router 把「订阅 → 本地 mihomo → 直连优先、失败走代理、按主机学习」收成 harness 内可调用的 proxy_router 工具,与全局环境变量代理相比,更贴近按站点选路的需求。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye