READMESource: main@1f36d431
dsh-global-proxy
让 DSH(DeepSeek Harness)进程的所有网络请求走 HTTP 代理的可安装插件:模型端点、联网搜索、MCP 等全部 fetch / http / https 流量。
Node.js 本身不跟随系统的 *_proxy 环境变量,DSH 又禁止在 .env 中设置代理类变量,因此默认情况下所有请求都是直连。本插件在进程内开启 Node.js 内建代理支持(http.setGlobalProxyFromEnv,Node.js ≥ 24),并把配置接入 DSH 设置服务与 WebUI——用户无需手动编辑任何配置文件。
功能
- 跟随环境变量(默认):读取
http_proxy/https_proxy/all_proxy/no_proxy/noproxy及全部大写形式;all_proxy兜底,HTTPS 缺省时回退到 HTTP 代理。 - 手动设置:统一代理地址 + 可选的 HTTP/HTTPS 细分 +
no_proxy例外列表。写入 DSH 设置文档,重启后自动生效。 - 关闭:一键恢复全直连。
- WebUI 设置页:「设置 → 网络代理」,含当前生效状态、环境变量检测(密码脱敏)、连通性测试。
- 作用域:进程内全局
fetch(undici)、http、https(CONNECT 隧道)。WebSocket 不受影响。
安装
# 从 npm(若已发布)
dsh plugin --profile <name> add dsh-global-proxy
# 或从 GitHub:pnpm ≥10 需要先在 profile 的 pnpm-workspace.yaml 中允许构建
# allowBuilds:
# dsh-global-proxy: true
dsh plugin --profile <name> add github:<you>/dsh-global-proxy
# 本地检出
dsh plugin --profile <name> add ./dsh-global-proxy
安装/更新后重启 DSH,打开 WebUI →「设置 → 网络代理」。(Host 半在启动时加载;若设置页提示"命名空间未提供",说明 Host 半未激活——先重启,仍异常则查看启动日志中 dsh-global-proxy 的加载错误。)
从 GitHub 更新
dsh plugin --profile <name> update dsh-global-proxy # 重新拉取 git 分支头部并触发 prepare 构建
# 更新失败时:remove 后重新 add(allowBuilds 允许保留)
要求
- Node.js ≥ 24(插件探测不到
setGlobalProxyFromEnv时会在设置页显示"不支持",请求保持直连)。 - 环境变量模式下,代理变量必须在启动 DSH 的 shell 中 export(DSH 禁止
.env设置此类变量)。
注意
- 仅支持
http:///https://代理地址(Node 内建限制,socks5 不受支持)。 - Node 内建代理不会自动绕过 localhost / 127.0.0.1:本地服务(Ollama、本地 MCP 等)需要直连时,请把
localhost,127.0.0.1加入no_proxy。 - 代理地址中的账号密码会以明文存入 DSH 设置文档(与 npm 配置代理的惯例一致);状态展示时会脱敏。
- 不要与动态版
proxy-1插件同时运行(两者都操作进程全局代理状态)。
结构
├── cordis.patch.yml # bundle 层:插入 Host 插件行
├── src/
│ ├── index.ts # Host 半:settings 命名空间 + setGlobalProxyFromEnv + 状态/测试路由
│ ├── shared.ts # 两半共享的类型与常量
│ └── client/index.tsx # Client 半:settings.section 设置页
├── tsdown.config.ts # 构建 lib/index.js(ESM)与 lib/client.js(__ModuleLoader__ 闭包格式)
└── smoke-test.mjs # Host 半冒烟测试:node smoke-test.mjs(四种模式 + 路由 + 逃逸验证)
开发
pnpm install
pnpm build # 产出 lib/index.js + lib/client.js
pnpm typecheck # tsc --noEmit
prepare 脚本会在 git 安装时自动构建,因此从 GitHub 安装无需预构建产物;npm 发布则在发布时携带 lib/。
No comments yet. Be the first to write one.