中文EN

dsh-provider-proxy

model已测通过npmMIT

在设置里为每个已启用的 provider 单独配置正向代理(HTTP/HTTPS/SOCKS5),未配置的 provider 与其它流量保持直连。

下载量 / Downloads
2,182
依赖体积 / node_modules
3.58 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-provider-proxy

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-provider-proxy ![DSH Market](https://dsh.market/)

给 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

链接

GitHub · Homepage · npm

同类插件