dsh-provider-proxy
在设置里为每个已启用的 provider 单独配置正向代理(HTTP/HTTPS/SOCKS5),未配置的 provider 与其它流量保持直连。
安装
dsh plugin --profile web add dsh-provider-proxy
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-provider-proxy 
给 DeepSeek Harness(0.2.0-rc.1 及以上)用的插件:在 设置 里为每个 provider 单独配置「这个 provider 要不要走代理」,填写代理类型 + IP/端口。只有被你打开开关的 provider 走代理,其余 provider 和 DSH 的其它流量保持原来的直连路径。
v1.1.0 (Advanced Extensions) 把它推进到「可观测 + 可分流」:后台定时心跳监测与失联预警(链路悄然中断时提前亮红灯)、搜索 / 推理流量分离(两类流量各走各的出口,绑定失效时拒绝而不是悄悄直连)、SOCKS5 over TLS(把到代理服务器的那一跳加密),外加设置页页签化与一轮无障碍封顶。0.8.0 / 0.9.0 / 1.0.0 的配置与备份均无需迁移。
上一版 v1.0.0 (GA) 是生产级治理中枢:运行监控仪表盘(覆盖率、连通成功率、平均时延与累计请求量)、全局紧急旁路(一键全局直连故障排查)、故障容灾自动降级(代理网络中断时自动直连重试,避免问答会话阻断)。
支持官方桌面版(DSH Desktop)与 dsh web。
安装
先确保已构建过产物(lib/index.js、lib/client.js):
npm install npm run build
桌面版(必须先完整打开一次桌面版以初始化 profile,然后完全退出,否则安装命令会拒绝执行):
dsh plugin --profile desktop add dsh-provider-proxy
Web:
dsh plugin --profile web add dsh-provider-proxy
安装后重启对应应用。设置项写在 $DSH_HOME/profiles/<profile>/cordis.patch.yml。
使用
打开 设置,左侧导航里会出现一项 Provider 代理(英文界面为 Provider Proxy)。
Provider 列表 页签里每个 provider 一张卡片,各自独立配置:
字段 · 说明
开关 · 该 provider 是否走代理
端点来源 · 下拉框:独立自定义配置 / 预设:默认预设 (127.0.0.1:7890) / 预设:<名称> (<地址>)。选中的端点整体提供本卡片的传输字段;选「默认预设」即原来的「使用默认代理」
类型 · HTTP / HTTPS / SOCKS5
IP / 主机 · 只填 IPv4、IPv6 或 ASCII 域名;不要带协议前缀、端口、路径或凭据。IDN 需先转 punycode
端口 · 1–65535 的整数
用户名 · 可选(与密码成对填写)
密码 · 可选(与用户名成对填写)。作为代理认证口令发给代理(HTTP / HTTPS / SOCKS5 均支持)。默认隐藏,可用密码框内右侧的眼睛图标临时查看,切换不会改写或保存密码
同一个代理要给多张卡片用时,只在 代理预设 页签的 默认代理 区块填一次,再在每张卡片勾上 使用默认代理。
勾上之后该卡片的传输字段(类型 / 主机 / 端口 / 用户名 / 密码)整体取自默认区块,卡片不再显示这些输入框,
改为显示它实际会用的地址——所以不会出现「填了一半、另一半不知道从哪来」的模糊状态。目标域名规则与自检目标
始终是卡片自己的。默认区块本身不可用时(未填地址、地址不是合法 IPv4/IPv6/域名、端口非法、凭据只填了一半),
勾了继承的卡片会被拒绝并说明原因(列在「连接诊断」里),卡片上也直接显示这条原因;默认块的「配置完整」
状态与批量按钮用的是同一个判定,所以不会出现「亮着绿灯却一张卡也用不上」。
页签布局(1.1.0)
设置页分成四个页签:Provider 列表(默认)/ 代理预设 / 全局设置 / 备份与恢复。
运行监控仪表盘与底部「连接诊断」留在页签之外——它们是整机状态,不是设置项。
- 页签是
role="tablist"+role="tab"/role="tabpanel",带aria-selected与
aria-controls,非活动面板用 hidden 而不是卸载:草稿、自检结果、筛选条件、折叠块的展开状态
都不会因为切换页签而丢失。
- 进入「代理预设」「全局设置」页签时会自动展开对应面板,不必再点一次标题。
- 页签选择记在
localStorage的查看偏好里,离开再回到本页仍停在上次那一页。
SOCKS5 over TLS / Proxy TLS(1.1.0)
协议选 SOCKS5 时,卡片与预设表单会展开 启用 TLS 加密隧道(SOCKS5 over TLS) 开关;
打开后再展开 允许自签名证书(附安全警示框,默认关闭=严格校验)。
- 开启后端点显示为
socks5s://host:port,诊断与卡片上的地址一眼可见 TLS 是否生效。 - 粘贴
socks5s://或socks5+tls://开头的地址会自动识别为 SOCKS5 + TLS。 proxyTls/proxyTlsRejectUnauthorized参与路由指纹:切换开关会立即重建 dispatcher,
不会继续用旧连接。
- 默认 严格校验证书(
proxyTlsRejectUnauthorized: true);关掉它等于接受任何证书,
只应在自签名的内网代理上临时使用。
后台心跳监测与失联预警(1.1.0)
全局设置 页签里的 启用后台心跳监测 开关(默认 关闭,坚持零额外流量原则):
- 开启后按
heartbeatInterval(60 / 300 / 900 / 1800 秒)向已启用的路由发送轻量探测,
每个 provider 之间打散抖动,并发受限,不会整点冲峰。
- 连续失败达到
heartbeatConsecutiveFails(默认 2)次即标记为 失联:仪表盘脉冲点转为红色,
顶部出现失联预警横幅,卡片与紧凑行打上 心跳失联 (ECONNREFUSED) 标签并显示上次成功时间。
- 未达阈值前会先在卡片上显示黄色
探测异常 N/M,不必等满阈值才发现问题。 - 代理恢复后的下一次探测即自愈为健康;关闭开关只停止探测,不抹掉已有记录,但记录也不再渲染。
搜索 / 推理流量分离(1.1.0)
web_search 与模型推理可以走不同的出口。全局设置 页签里的 搜索流量分流 提供四个策略
(单选框,默认 继承):
策略 · 搜索流量走哪
继承 · 沿用「Web 搜索」卡片(端点 + 目标域名规则);该卡片未启用则直连
独立 · 固定走绑定的代理预设;不绑定预设则使用「Web 搜索」卡片自己填的端点
直连 · 绕过本插件管理的所有代理,推理流量不受影响
自定义 · 完全交给「Web 搜索」卡片管辖,包括它的 only/bypass 规则
- 宁可拒绝,也不悄悄改走直连:
独立绑定的预设被删除或配置不完整时,每次搜索都会被拒绝
(错误信息里点名是哪个预设),而不是把搜索的真实出口漏到用户特意绕开的网络上。设置页会就地
红色告警,仪表盘也会出现拒绝横幅。
- 面板下方始终显示 当前解析:这次设置到底会让搜索走卡片、独立端点还是直连,一眼可见。
- 仪表盘的「累计转发请求量」拆成
推理 N · 搜索 M(直连 K);卡片与「最近调用」行分别标注
[推理] / [搜索],所以「搜索没走代理」与「搜索没被用过」不会混为一谈。
运行监控仪表盘与全局紧急旁路(1.0.0)
页面顶部常驻紧凑的 运行监控仪表盘(Dashboard Grid),实时掌控整机网络与代理健康度:
- 运行状态指示灯:矢量 SVG 纯圆呼吸灯,实时标识当前网络调度状态(绿色为正常代理接入,黄色为旁路模式)。
- 代理覆盖率:实时统计
X / Y 活跃(如3 / 12 活跃),与页面内的勾选/取消勾选操作实时乐观联动,无需切页或重刷。 - 连通成功率:基于近 24 小时内的真实请求和自检结果计算百分比(如
100% 成功/链路状态健康)。 - 近期平均延迟:基于近期多次探测与自检的加权平均耗时(如
260 ms/连通响应迅速,未测试时显示- ms)。 - 累计转发请求量:展示当前会话经由代理中转的累计请求次数(千分符格式化,如
1,420),数字右侧配有 重置 按钮,一键清零计数(调用 Host/dsh-provider-proxy/reset-hits)。 - 全局紧急旁路开关 (Bypass All):仪表盘右上角提供全局旁路总控。开启后整机所有 Provider 流量瞬间全量直连上游,卡片头上统一显示警示条;不会改写各个卡片的现有配置,关闭后瞬间恢复原有每张卡片的代理规则,极大简化代理故障时的对比排查。
故障容灾自动降级(1.0.0)
日常高频对话中,本地代理客户端(如 Clash/V2Ray)偶发崩溃、系统休眠唤醒或端口拒绝连接(ECONNREFUSED、ETIMEDOUT、EHOSTUNREACH 等网络级故障)可能直接导致问答流中断。
在页面 全局设置(高级) 折叠区中提供 代理宕机时自动降级直连 开关(enableFallbackDirect):
- 默认严格关闭(
false):严格保持安全 fail-closed 传统,不擅自向目标服务暴露本机真实 IP。 - 开启后自愈:当代理网络中断时,插件自动捕获网络层异常并立刻通过本机原生直连重试该请求,保障长任务或无人值守会话不中断,同时在卡片「最近调用」中以醒目标注高亮回显
[降级直连]。 - 安全告知:界面上附带显式警示框,提示开启后在代理失效时可能会向模型服务商暴露真实出口 IP。
多代理预设(0.9.0)
不同厂商常需要不同出口(OpenAI / Claude 走美区或新加坡、DeepSeek 走直连或香港、企业中转走专线),
所以除默认代理外还可以建命名预设:在 代理预设 页签里「添加预设」,填好端点后,
每张卡片的 端点来源 下拉里就会出现 预设:<名称>。
- 预设与默认代理是同一类东西:
默认预设 (Default)就是上方的「默认代理」区块,只是显示成一个预设。 - 改预设 = 改所有绑定它的卡片:这些卡片的「最近调用」记录与自检结果会立即失效,不会拿旧节点的测试结果冒充新节点。
- 删除仍被使用的预设会先确认,并在提示里列出依赖它的 provider;删除后这些卡片显示「配置被拒」并说明是哪个预设不存在,
不会悄悄退回卡片自己的空字段。
- 重命名预设会同时改写所有绑定关系的
profileId。 profileId非空时优先于useDefault;页面选择预设时会自动把useDefault置为 false。- 端点来源始终是下拉框,每个选项都带上它将使用的地址;选「默认预设」等价于原来的勾选「使用默认代理」,
写盘仍是 useDefault: true,旧配置与旧行为完全一致。
一键导入(0.9.0)
默认代理区块、每个预设行、以及每张卡片都提供一个 常用客户端… 下拉:
选项 · 填入
Clash / Mihomo · HTTP 127.0.0.1:7890
Clash Verge / Meta · HTTP 127.0.0.1:7897
V2Ray / Xray HTTP · HTTP 127.0.0.1:10809
V2Ray / Xray SOCKS5 · SOCKS5 127.0.0.1:10808
从环境变量 · Host 进程的 HTTPS_PROXY / HTTP_PROXY / ALL_PROXY
一次选择会一次性写入协议 / 主机 / 端口三项(不是三次写入),仍然走既有的地址与凭据校验,
选完可以直接改。环境变量只取地址:凭据永远不进 /dsh-provider-proxy/providers 的响应,
如果该变量带了用户名密码,页面会提示「请在下方补填」,而不是假装已经导入。
没检测到可用的环境变量时,该项显示「未检测到」并禁用。
官方上游域名模板(0.9.0)
卡片「高级:目标域名规则 → 仅走代理」下方,若 provider id 的首段是已知厂商
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:15,最后更新 2026-11-05