dsh-zen-proxy:在 DSH 里原生接入 OpenCode Zen 免费模型

前言

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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye