# dsh-proxy-config DeepSeek Harness 代理配置插件:**配置代理后自动生效**,让 Harness 访问外网(LLM API / Web 搜索 / MCP / 插件安装等)以及它拉起的 pnpm / git 子进程都自动走 HTTP / SOCKS 代理;本机 / 回环 / 内网(127.0.0.1 / localhost / ::1 / 私有网段 / `.local`)直连不绕代理。 > 解决场景:国内访问 `codeload.github.com` 等目标被墙/限速导致插件安装卡死,或 Harness 自身出网(DeepSeek API、网页抓取、MCP)走不了代理。 --- ## 安装 ```bash dsh plugin --profile web add github:lhf6623/dsh-proxy-config ``` 安装后**重启 harness**,在 **设置 → 插件 → 网络代理** 里填写代理地址即可。 > 该插件是 host 端 bundle 插件,改动后需要重启 harness 才会加载;Web 页面本身不会自动热更新。 ## 快速开始 1. 打开设置页 **设置 → 插件 → 网络代理**。 2. 填写代理地址(HTTP 或 SOCKS 任选其一即可): - HTTP/HTTPS:`http://127.0.0.1:7890` - SOCKS5:`socks5://127.0.0.1:7891` 3. 点 **保存**。默认「启用代理」为打开,填了有效代理地址就自动生效。 **关闭**:把「启用代理」开关关掉再保存即可(保留代理地址,仅暂停使用);点 **清除配置** 会删除配置并清空代理变量。 ## 配置项 | 字段 | 说明 | 示例 | | --- | --- | --- | | `enabled` | 是否启用代理(默认 `true`) | `true` / `false` | | `http` | HTTP/HTTPS 转发代理,同时作为 https 代理 | `http://127.0.0.1:7890` | | `socks` | SOCKS5 / SOCKS4 代理 | `socks5://127.0.0.1:7891` | - 两个字段可只填一个;同时填时 HTTP 代理优先用于进程内请求(HTTP 与 HTTPS 目标)。 - 配置持久化到 `$DSH_HOME/proxy-config.json`。 - 未配置代理时插件完全透明,不影响现有网络。 ## 生效范围 | 场景 | 是否走代理 | | --- | --- | | Harness 自身访问外网(LLM API / Web 搜索 / MCP) | ✅ 自动走代理 | | 插件安装时 spawn 的 pnpm / git / npm / curl 等子进程 | ✅ 自动走代理 | | 本机 / 回环 / 内网目标(127.0.0.1、localhost、::1、私有网段、`.local`) | ❌ 直连,不绕代理 | | 「启用代理」开关关闭 | ❌ 全部直连(配置仍保留) | | 未配置代理 | ❌ 全部直连 | ## 工作原理 1. **子进程**:插件把 `http_proxy` / `https_proxy` / `all_proxy` / `no_proxy` 写入 `process.env`,pnpm / git 等子进程自动继承。 2. **Harness 自身出网**:宿主 Node 进程的全局 `fetch`(undici)本不读环境变量代理,插件安装了一个 undici 全局 Dispatcher 作为出口路由: - 命中 `no_proxy` 的目标 → 直连; - 其余目标 → 走 HTTP / HTTPS CONNECT 隧道或 SOCKS5。 - 底层是 undici 原生 fetch 引擎,因此保留标准 `Response` 语义(含 SSE 流式 body)、重定向、默认请求头与证书校验。 3. **即时生效**:每次保存设置后立即重建并应用 Dispatcher / 环境变量。 ## 注意 - 新增依赖 **`undici`**,安装时由 pnpm 自动拉取。 - Harness 启动环境若已另有代理,本插件会用配置的代理覆盖对应的进程内出口与子进程环境变量;不需用时可用「启用代理」开关临时关闭,或点「清除配置」彻底移除。 - `no_proxy` 默认合并了回环、链路本地、私有网段(`10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16`、`169.254.0.0/16`、`fc00::/7`、`fe80::/10`)及 `*.local`,并保留你已有的 `NO_PROXY` 条目。 ## 卸载 / 清理 1. 在「网络代理」设置页先点 **清除配置**。 2. 执行: ```bash dsh plugin --profile web remove dsh-proxy-config ``` 「清除配置」会删除 `$DSH_HOME/proxy-config.json`、移除进程内代理变量,并还原全局 dispatcher;插件被停止时也会自动清理,不残留。 --- ## 许可证 MIT