dsh-model-proxy
Route DeepSeek Harness model API requests through a local HTTP proxy, with local-port probing and a settings section.
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗dsh-model-proxy
让 DeepSeek Harness (DSH) 的模型 API 请求走本地代理端口、并在请求失败命中指定词汇时无限重试的插件,带本地端口探测和设置页。
面向的场景:你的模型 API 需要经过本地代理(Clash、v2rayN、Clash Verge、Privoxy 等)才能访问时,不用在系统层面改环境变量,直接在 DSH 设置里点几下就切过去。
功能特性
- 真正的流量路由:在 host 进程里把 undici 全局 dispatcher 指到代理端口。模型适配器(如
dsh-llm-deepseek)用的是 Node 内置fetch,走的正是这个 dispatcher,所以模型请求会被真正改走代理。 - 快速端口探测:只探测常见代理软件的预设端口(Clash 7890/7891、Clash Verge 7897/7898、v2rayN 10808/10809、Shadowsocks 1080、Privoxy 8118、Sing-box 2080),并行做 TCP → HTTP/SOCKS5 三级判断,响应快,只显示确实能转发流量的代理并给出延迟。
- 关键词无限重试:请求失败信息命中指定词汇/句子(支持逗号或换行分隔多个)时,把默认的有限重试改成无限重试,等待时间可配置。
- 设置页:打开「设置 → 模型请求 (Model)」自动探测;用明确的开关一键启用/禁用代理,点结果即可切换端口;下方独立配置重试规则。
- 持久化:代理与重试规则都写入包内
config.json,重启 DSH 后自动恢复。
原理
DSH 的模型适配器直接调用全局 fetch(),而 Node 22 的 fetch(undici)默认不理会 HTTP_PROXY/HTTPS_PROXY 环境变量,也没有任何代理挂钩。要拦截它,唯一干净的办法是安装一个 undici ProxyAgent 作为进程全局 dispatcher:
import { ProxyAgent, setGlobalDispatcher } from 'undici'
setGlobalDispatcher(new ProxyAgent('http://127.0.0.1:7890'))
这必须发生在 host 进程里,所以本插件是一个 host 平面的 composition 行(和模型路由同一平面),不是一个 agent preset,也不是临时动态插件。
关键词无限重试的原理:DSH 在每次模型请求失败时触发 agent/request-error waterfall。内置的 dsh-llm-retry 按重试策略(默认有限次)处理,超限后把决策交给后续监听器。本插件注册在它之后,检查失败信息的 message/code/status 是否命中关键词,命中则等待配置的时长后返回 { kind: 'retry' },从而持续重试,直到成功或用户中止(尊重 turn 的 abort signal)。
目录结构
dsh-model-proxy/
├── package.json # 包清单;dsh.client 声明 + exports["./client"]
├── lib/
│ ├── index.js # host 半边:代理 dispatcher + 端口探测 + /model-proxy/* JSON RPC
│ └── client.js # 浏览器半边:设置页(settings.section)
├── README.md
├── LICENSE
└── .gitignore
安装到 DSH
环境要求:DSH
>= 0.1.0-rc.6,webprofile(本插件注入webServer并注册设置页)。
方式 A:本地目录(开发/试用)
-
把本目录放到 web profile 的
node_modules下:/profiles/web/node_modules/dsh-model-proxy/(
DSH_HOME默认是~/.dsh,即 Windows 上 。)