前言¶
在 DSH 里给进程设全局 HTTPS_PROXY 时,@deepseek-ai/dsh-http-proxy 会在启动时读一次环境变量,之后所有出站 HTTPS 共用同一条代理路径,没有按 provider 或按域名拆开的能力。代理客户端没开、节点不可用或限速时,受影响的不只是需要翻墙的模型 API,还包括 platform.deepseek.com(账号资料)、插件市场目录、pnpm add 拉包等——而会话本身往往仍正常,因为 api.deepseek.com 常在 NO_PROXY 里直连。要么忍受「一挂全挂」,要么干脆全直连、牺牲部分外连目标。
下面介绍社区插件 dsh-egress-router(维护者 funny0A0):为单个外连目标在本机开一个回环端口,只让走该端口的请求经可选上游代理转发,其余流量保持直连。
这是什么¶
dsh-egress-router 是 DeepSeek Harness 的联网类插件:逐目标在本机 127.0.0.1 上监听,把 provider 的 baseURL 等配置「外科手术式」改指向该端口,再由插件把请求经 CONNECT 隧道转到真实目标(可选经 config.proxies 里命名的上游,如本机 Clash)。路由状态落在 $DSH_HOME/storages/egress-router/state.json,不写满 cordis.patch.yml;重启后按持久化路由重建监听,并支持配置漂移校正与声明式兼容补丁的自愈。
- 仓库:github.com/funny0A0/dsh-egress-router
- 社区目录:skillhub.cn 插件页
- 当前包版本(资料):0.12.0,许可证 MIT
- 运行要求:Node ≥ 20,DSH 桌面版 ≥ 0.2.1-rc.2(
package.json中compatibility.dsh为>=0.2.1-rc.2 <0.3.0),平台 Windows | Linux(README 安装段亦含 macOS 路径示例)
核心功能¶
逐目标路由与故障半径¶
每个目标可绑定独立本机端口,上游选「直连」或 proxies 表中的某一项(例如 clash: http://127.0.0.1:7897)。与全局代理相比,单个中转异常时通常只影响对应目标,而不是账号页、市场目录和装包一起失效。
发现、探活与改写¶
- 发现:从
cordis.patch.yml、.env、已装插件默认配置等扫描工作区外的 HTTPS 目标,标记「已路由 / 待确认 / 受保护」。 - 探活:对同一目标分别试直连与经代理,返回连通性、耗时、是否仅到 TLS 等。
- 改写 + 回滚:只替换 provider 的
baseURL一行(保留注释与锚点),改前备份、改后校验,失败自动还原;应用后会起监听并真实请求一次目标,不通则回滚。
指标、中转与补丁¶
- 指标:每端口请求数、上下行字节、失败数、状态码分布、首字节延迟 p50/p95;另有跨重启累计(
metricsTotals)。 - 本机中转(relay):对没有可改
baseURL的调用方,仍可建「只监听、不改目标配置」的路由,供 CLI、脚本或其它插件把地址换成http://127.0.0.1:<端口>。 - 机器人代理:对 Telegram 等写死地址的插件,通过补丁与
DSH_TELEGRAM_PROXY仅注入本进程(README 提醒勿把错误写法放进$DSH_HOME/.env,否则 DSH 可能拒绝启动)。 - 兼容补丁:声明式补丁(包名 / 版本 / 文件 / 锚点),重装被冲掉后可在下次启动自动修复。
- 漂移自愈:
baseURL与运行监听不一致时自动校正;外部反复改写时可暂停并显示原因。 - 宿主契约探测:依次尝试多种注册方式,不依赖版本号猜接口形状。
- 界面支持中英双语(跟随浏览器语言)。
工作原理(简述)¶
Provider 经 patch 把 baseURL 指到例如 http://127.0.0.1:8792/v1beta/openai;RelayManager 为每条路由起一个只绑 127.0.0.1 的 http.Server,再经可选上游代理 CONNECT 到真实主机。要点:路由在 state.json;cordis.patch.yml 里主要保留 id: egress-router 与 proxies 等;重启自动重建监听。
安装与启用¶
前置:pnpm,以及 README 中的 Node、DSH 版本要求。
在 DSH 桌面 profile 目录安装(路径以官方 README 为准;本地开发用 file: 指向源码目录,发布后可用包名 dsh-egress-router)。
Windows:
cd "$env:USERPROFILE\.dsh\profiles\desktop"
pnpm add file:F:\projects_all\AI_projects\dsh-egress-router
# 或在发布后: pnpm add dsh-egress-router
Linux / macOS:
cd ~/.dsh/profiles/desktop
pnpm add file:/path/to/dsh-egress-router
# 或在发布后: pnpm add dsh-egress-router
在 profiles/desktop/package.json 的 dsh.profile.bundles 中加入 "dsh-egress-router",重启 DSH。设置入口:设置 → 插件 → 出口路由。更完整的安装与升级说明见仓库内 docs/install.md。
安装后可按 README 自检:查看 node_modules/dsh-egress-router/package.json 版本、请求 http://127.0.0.1:<GUI端口>/plugins/egress-router?op=state、以及对某中转端口访问 http://127.0.0.1:8792/__health(端口以实际路由为准)。
配置示例¶
上游代理表(cordis.patch.yml)¶
只保留代理表与插件 id,勿再写 name: dsh-egress-router(会与 bundles 重复加载冲突)。
- id: egress-router
config:
proxies:
clash: http://127.0.0.1:7897
自定义观察目标(config.targets)¶
对不在任何 provider baseURL 里的端点,可声明为「自定义」行,支持检查与测试,但无 baseURL 时 apply 会返回 not_patchable:
- id: egress-router
config:
proxies:
clash: http://127.0.0.1:7897
targets:
- { id: github, name: GitHub API, host: api.github.com, port: 443 }
- { id: hf, target: huggingface.co:443 }
- { id: ghcr, url: https://ghcr.io/v2/ }
受保护域名与 origins 兜底(0.11.0)¶
内置受保护项包括 platform.deepseek.com、api.deepseek.com、registry.npmjs.org、awesome-dsh-plugin.com、dsh-plugin-catalog 等;可通过 guarded 追加。origins 在账本缺失时用于恢复 provider 的真实公网地址。
典型用法¶
- 打开 设置 → 插件 → 出口路由,点 扫描,列出模型 provider、Telegram 及配置中的其它 HTTPS 目标。
- 对不确定的行点 检查,对比直连与经代理;需要时点 找端口 分配空闲端口。
- 每行在下拉中选择 直连 或
config.proxies中的名字(如clash)。 - 点 应用:写入
baseURL、起监听、真实请求自检;成功后再刷新可见 运行中。 - 首次应用或改端口后重启 DSH;之后监听随宿主重建,一般无需反复改配置。
对纯中转、不改目标配置的场景,可通过 GUI「本机中转」或 HTTP API(README 示例)创建 relay,例如向 ?op=routes POST:
curl -s -X POST "http://127.0.0.1:<GUI 端口>/plugins/egress-router?op=routes" \
-H 'content-type: application/json' -H 'sec-fetch-site: same-origin' \
-d '{"action":"upsert","id":"relay:hf","target":"huggingface.co:443","listenPort":8793,"proxy":"clash"}'
之后将调用方地址改为 http://127.0.0.1:8793;删除用 {"action":"delete","id":"relay:hf"}。这类路由不写 cordis.patch.yml,restartRequired 为 false。
设置页还提供 端口检查、上游 探链、诊断(脱敏 JSON)、回滚上次改动,以及兼容补丁状态与最近操作审计。
适用场景与注意¶
适合谁: 需要在 DSH 里同时使用直连(账号、市场、装包)与代理(部分模型或外网 API),且希望按目标而不是按进程统一代理的开发者。
权限与安全: 插件在 DSH 宿主进程内运行,会改写配置、起本机监听、并可能应用 npm 包补丁。安装前请阅读源码与 MIT 许可证,确认上游代理地址可信;受保护域名列表用于避免误改关键 DeepSeek 与生态端点。
生态说明: DSH 奉行「一切皆插件」;skillhub.cn 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区维护的联网工具插件。
结尾¶
dsh-egress-router 把出站策略从「进程只有一个代理答案」拆成「每个目标可选直连或指定上游」,并用备份、自检、回滚和状态持久化降低改 baseURL 的风险。需要细节、变更记录与 issue 时,以 GitHub 仓库为准;在 DSH 内可从社区目录页跳转安装说明。
- 目录页:https://www.skillhub.cn/plugins/funny0A0/dsh-egress-router
- GitHub:https://github.com/funny0A0/dsh-egress-router