前言¶
DeepSeek Harness(dsh)的模型列表来自各 llm-provider 适配器。若你想用 OpenCode Zen 的免费模型车道,常见做法是自建 HTTP 代理、改 provider 的 baseURL,或自己维护 API Key 与可用性判断。Zen 免费车道对客户端身份有闸门要求,直接按普通 OpenAPI 端点配置,容易遇到 403 FreeTierError、426 UpgradeRequired,或在限流时反复出现 429 FreeUsageLimitError,模型目录里还会混进当前其实不可用的 -free 条目。
下面介绍社区插件 dsh-zen-proxy(维护者 Yee-h,分类:联网工具)。它以进程内 llm-provider 方式注册 OpenCode Zen 免费车道,注入官方 OpenCode 桌面客户端所需的请求头,并按周期探测后只把判定可用的免费模型放进模型选择器。当前 README 说明:新版本已移除本地 HTTP 代理面,不再需要监听端口、写 settings.yaml 或用户 API Key。
这是什么¶
dsh-zen-proxy 是一个 dsh 插件(npm 包名 dsh-zen-proxy,当前资料中版本 0.2.2,MIT 许可证)。它把 OpenCode Zen 的免费模型接成 dsh 的原生 provider:装上并重启宿主后,可在桌面端模型选择器里直接使用 Zen 免费模型。
凭据为上游池化的 Bearer public,由插件携带;插件每 10 分钟(可配置)拉取上游清单、过滤 id 以 -free 结尾的模型并逐个探测,仅将「可用」与「地区受限」两类结果分别挂到两条路由分组(展示名分别为「OpenCode Zen 免费模型」与「OpenCode Zen 免费模型(地区受限)」)。付费模型、判定不可用及尚未完成判定的模型不会出现在目录中。
社区目录页:SkillHub - dsh-zen-proxy。源码与说明:GitHub - Yee-h/dsh-zen-proxy(资料中 GitHub 星标约 3、fork 约 2)。
核心功能¶
两条模型路由¶
dsh 的 listModels / normalizeModelInfo 契约中没有「不可用」字段,插件用路由分组表达可用性:
| 路由 id | 含义 | 目录内容 |
|---|---|---|
opencode-free |
免费模型(主分组) | 最近一次探测判定为可用的免费模型 |
opencode-free-region |
免费模型(地区受限) | 最近一次探测判定为地区受限的免费模型 |
「免费」判据为模型 id 以 -free 结尾(上游清单项仅有 id / object / created / owned_by)。
探测与目录更新¶
- 挂载后立即异步发起一轮探测,不阻塞挂载;之后按配置周期重复(默认 10 分钟)。
- 可用性判定需解析流式数据帧:HTTP 200 仍可能在流里携带错误对象,插件按 README 描述的顺序分类失败类型。
- 瞬时故障(限流、上游 5xx、网络失败)在连续 3 次以内保留此前判定;整轮全部限流时探测间隔指数退避(下限为配置周期,上限 1 小时)。
403 FreeTierError或426 UpgradeRequired视为插件级失败,两条路由清空并记录诊断;清单拉取失败仅作废本轮,既有目录保持不变。- 最近一次判定持久化到
$DSH_HOME/zen-proxy/availability.json(未设置DSH_HOME时为宿主配置根下同名路径),重启后在首轮探测完成前可反映上次已知状态。
上游身份与协议¶
清单:GET https://opencode.ai/zen/v1/models。对话按模型 id 选择 chat 或 responses 族(muse-spark* 走 responses,其余走 chat;README 注明该判据在本机无法完全证真)。
每个上游请求携带六个身份头(节选 README 示例):
user-agent: opencode/<version> # version >= 1.18.0
authorization: Bearer public
x-opencode-client: desktop
x-opencode-project: global
x-opencode-session: ses_<12 hex><14 base62>
x-opencode-request: msg_<12 hex><14 base62>
请求体需 stream: true 并声明工具数组(含 bash、glob、grep、read 等闸门要求的工具名;插件会按 README 规则映射调用方工具)。
因 Zen 免费车道只接受 user-agent: opencode/<version>(不低于 1.18.0),与 dsh 默认的 deepseek-harness/... attribution 互斥,插件在此覆盖 user-agent 以过闸;README 在 src/identity.js 处有源码级说明。
思考强度菜单¶
模型选择器中的「思考强度」由插件提供:上游网关实际主要受输出预算上限影响,插件将 light / balanced / deep 三档折算为 max_tokens(chat 族)或 max_output_tokens(responses 族),并可在配置中配合模型容量(详见 README「思考强度」一节)。
安装与启用¶
profile 由 pnpm 管理;请用 dsh plugin 或 pnpm install,不要用 npm install 以免 lock 文件不一致。
1. 桌面端插件管理器(推荐)¶
在桌面端「设置 → 插件」中安装 dsh-zen-proxy(本地 checkout 或 git 地址均可)。插件管理器会调用该 profile 的包管理器安装,并把包名自动追加进 package.json 的 dsh.profile.bundles(缺少该条目时 bundle 不会被当作 profile 层加载)。
2. 命令行安装¶
dsh plugin --profile desktop add git+https://github.com/Yee-h/dsh-zen-proxy.git
# 或在本地 checkout 时:
# dsh plugin --profile desktop add file:C:/path/to/dsh-zen-proxy
dsh plugin 只透传参数给包管理器,不会自动写回 dsh.profile.bundles。装完后可重启宿主让其 reconcile(检测到带 bundle patch 的依赖时追加 bundles),或手工编辑 $DSH_HOME/profiles/desktop/package.json:
{
"dsh": {
"profile": {
"bundles": [
"dsh-zen-proxy"
]
}
}
}
3. 重启宿主¶
本包通过 cordis.patch.yml 注入 loader 条目(id:zen-proxy)。插件无浏览器半身,无需额外 dsh.client 配置。
4. 可选配置¶
| 字段 | 默认值 | 说明 |
|---|---|---|
probeIntervalMinutes |
10 |
探测周期(分钟);运行中修改后下一轮生效 |
opencodeVersion |
1.18.31 |
伪装 OpenCode 版本;低于 1.18.0 会回退到门槛值并记诊断 |
不再需要把 provider 的 baseURL 指向本地端口,也不再需要 settings.yaml。
典型用法¶
经过上面的安装与重启步骤后,在 dsh 桌面端打开模型选择器,在 OpenCode Zen 免费模型 或 OpenCode Zen 免费模型(地区受限) 分组中选择已出现在目录中的 -free 模型即可开始对话。首次挂载后目录可能在首轮探测返回前为空或沿用上次持久化结果,属 README 描述的正常行为。
若刚完成一轮探测后立即对话遇到 429 RATE_LIMIT,README 实测建议等待约一分钟再试;探测流量使用独立 session,与用户对话 session 隔离,避免探测占满对话配额。
适用场景与注意¶
适合谁: 已在用 dsh 桌面 profile、希望在不配置 API Key 的前提下试用 OpenCode Zen 免费模型,并依赖插件自动维护「当前可用」模型列表的开发者。
运行与信任边界: 插件在 dsh 进程内以 llm-provider 身份发起对外 HTTPS 请求,并覆盖部分 attribution 头以符合上游闸门。安装前应阅读 源码仓库 与 MIT 许可证,确认可接受其行为与网络出站范围。Node 引擎要求见 package.json:^22.19.0 || >=24.0.0。
已知限制(摘自 README): 部分 muse-spark 地区受限模型在本机出口无法走通真实可用链路,只能验证归类;responses 协议族在本机同样受限。地区受限与限流的先后关系会导致限流时先看到 429 而非 RegionError,插件用宽限逻辑保留此前的地区归属。
SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,插件由社区维护,可用性与上游政策变化请以实际探测结果为准。
结尾¶
dsh-zen-proxy 把 OpenCode Zen 免费车道从「自建代理 + 手改 baseURL」收成「安装 bundle、重启、在模型选择器里选模型」的路径,并用周期性探测减少把不可用免费模型当成可选项的情况。需要细节、配置与探测语义时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/Yee-h/dsh-zen-proxy
- GitHub:https://github.com/Yee-h/dsh-zen-proxy