前言¶
在 DeepSeek Harness(dsh)里,智能体通过内置的 web_fetch 拉取网页内容。若本机用 hosts 类加速工具(SteamCommunity302、Watt Toolkit / Steam++ 等)把 github.com 指到 127.0.0.1,再由本地反向代理出网,未做适配时每次访问 GitHub 都会失败,报错类似:
Error: URL hostname "github.com" resolves to a non-public IP address
即便绕过地址校验,Node 默认不信任操作系统证书库里的加速工具根证书,还可能遇到 UNABLE_TO_GET_ISSUER_CERT_LOCALLY。下面介绍社区插件 dsh-github-accelerator(npm 包名 @citisen/dsh-github-accelerator,仓库 caparisen/dsh-github-accelerator),它在保持其余域名仍走 dsh 内置安全策略的前提下,让白名单内的主机可以继续被 web_fetch 访问。
这是什么¶
dsh-github-accelerator 是 dsh 的一个 bundle 插件,分类为联网工具,维护者对应 GitHub 用户 caparisen。它注册额外的 fetch provider(默认 id 为 http-accelerated):请求主机名在配置白名单内时,使用系统解析结果连接本地加速端点,并在 TLS 握手时纳入操作系统信任锚;不在白名单内的请求仍交给内置 http provider,公网地址校验、重定向策略、字节上限与超时等行为与官方默认一致。
失败原因(背景)¶
内置 http provider 会解析主机名,若解析结果中出现非公网单播地址则整次请求被拒绝——hosts 里 127.0.0.1 github.com 会必然触发这一条。加速工具对 TLS 的中间人证书通常安装在操作系统证书库中;浏览器和 curl 能信任,而 Node 在未显式加载系统根证书时无法验证该证书链。
核心功能¶
- 白名单路由:仅对白名单主机禁用「必须解析到公网地址」的检查,并走加速路径;例如默认未列入的
http://127.0.0.1:8080/仍会被内置 provider 拒绝。 - 系统证书信任:对白名单主机默认开启
trustSystemCertificates: true,使本地加速 CA 可被接受(需 dsh 宿主 Node ≥ 24.9 以使用tls.getCACertificates;更旧运行时回退到 Node 自带根证书,必要时可设insecureTLS: true)。 - 与内置 http 协同:非白名单流量完全沿用内置
httpprovider,不扩大匿名抓取器的暴露面。 - 可配置主机列表:除默认 GitHub 相关域名外,可在
cordis.patch.yml中扩展(如huggingface.co等加速工具 hosts 块里的域名),但只应加入你愿意信任其解析结果的主机名。
环境要求¶
- 带
web服务与内置httpfetch provider 的 dsh(任意官方 profile)。README 记载在 dsh0.2.1-rc.2(desktop,Electron 44 / Node 24.21)上做过验证。 - 宿主 Node ≥ 24.9 时才能可靠使用操作系统证书库;否则需考虑
insecureTLS等兜底配置。
安装与启用¶
Web UI:Plugins → install,输入 @citisen/dsh-github-accelerator 后启用。
终端(desktop profile):
dsh plugin --profile desktop add @citisen/dsh-github-accelerator
从 GitHub 安装同一包:
dsh plugin --profile desktop add github:caparisen/dsh-github-accelerator
若通过 CLI 使用浏览器 profile,将 --profile desktop 改为 --profile web。包声明了 dsh.bundle,启用后一般无需手改 YAML;若 provider 未生效,可完全退出并重新打开 dsh。
卸载示例:
dsh plugin --profile desktop remove @citisen/dsh-github-accelerator
配置¶
默认已包含 GitHub 常用 hosts。在 profile 的 cordis.patch.yml 中覆盖 bundle 层即可,例如:
- id: web-fetch-accelerated
name: '@citisen/dsh-github-accelerator'
config:
hosts:
- github.com
- '*.github.com'
- '*.githubusercontent.com'
- huggingface.co
- '*.huggingface.co'
常用配置项(摘自 README 表格):
| 键 | 默认值 | 含义 |
|---|---|---|
hosts |
GitHub 相关域名 | 允许解析到非公网地址的主机名;支持 *.example.com |
trustSystemCertificates |
true |
对白名单主机将 OS 证书库加入 TLS 信任 |
insecureTLS |
false |
跳过证书校验(仅最后手段) |
timeoutMs |
30000 |
单次抓取超时 |
maxResponseBytes |
5000000 |
响应体字节上限 |
maxBodyChars |
100000 |
解码后字符上限,超出会截断并标记 |
maxRedirects |
5 |
同源重定向次数上限 |
selfTestUrl |
空 | 启动时经 ctx.web.fetch 请求一次并写日志,用于自检 |
验证¶
设置 selfTestUrl 后查看宿主启动日志,应出现 provider 注册行及自检结果,例如:
[web-fetch-accelerated] registered provider "http-accelerated" for 5 host pattern(s): github.com, *.github.com, ...
[web-fetch-accelerated] self-test https://github.com/ -> HTTP 200 html 57684 chars in 812 ms
随后对 https://github.com/ 的 web_fetch 应返回页面内容,对 https://api.github.com/rate_limit 应返回 JSON。
适用场景与注意¶
适合:本机长期运行 hosts 加速、需要在 dsh 智能体会话里用 web_fetch 读 GitHub(或你自行加入白名单的加速域名)文档与 API 的开发者。
安全:白名单主机不再做公网地址校验;若某白名单域名被指向内网服务,web_fetch 可能访问到该内网。白名单上的 TLS 信任范围与操作系统一致,宽于 Node 默认根证书。仅影响模型侧的 web_fetch 路径;shell 里的 git、curl、包管理器不受该错误影响,也本就不由此插件接管。
插件在 当前 dsh 进程权限 下运行;安装前建议在 GitHub 查看源码与 MIT 许可证(当前 package 版本 0.1.0),自行评估是否纳入你的工作流。
排障速查:仍报 non-public IP → 检查 bundle 是否启用、web 的 fetchProvider 是否为 http-accelerated、主机是否在 hosts 列表;证书不信任 → 确认加速 CA 已装入 OS 或 Node 版本 / insecureTLS;ECONNREFUSED → 加速工具未运行或未接管该域名。
结尾¶
dsh-github-accelerator 用独立的 http-accelerated provider 把「hosts 加速 + 系统 CA」这类本机网络现实接进 web_fetch,其余抓取逻辑仍留在官方 http provider。插件目录页:https://www.skillhub.cn/plugins/caparisen/dsh-github-accelerator;源码与完整说明:https://github.com/caparisen/dsh-github-accelerator。DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。