前言¶
DeepSeek Harness(DSH)通过插件扩展能力。接入第三方模型时,往往需要从上游清单中过滤付费项、确认哪些可用、再决定是否启用。OpenCode Zen 免费车道有大量模型,但上游返回的 86 个模型中大部分是付费的,手动筛选既繁琐又容易漏掉变化。dsh-freemodels-opencode 插件把 OpenCode 免费车道接入 DSH,提供一键刷新清单、勾选启用、连通性测试与人工评级排序的能力,让模型选择和验证过程更可控。
这是什么¶
dsh-freemodels-opencode 是一个 DSH 插件,维护者为 xiean676,分类为联网工具。它把 OpenCode Zen 免费车道的模型接入 DSH 的模型选择器,解决”这堆模型到底哪个能用”的问题。插件独立实现 provider opencode,与原插件 @opencode2dsh/dsh-plugin 可以共存。
核心功能¶
- 刷新模型:从上游重新拉取模型清单,包含 models.dev 的上下文窗口与弃用标记。
- 勾选启用:勾上的模型才会以 provider
opencode出现在模型选择器里;不勾选则不显示。 - 测试连通性:对单个或全部已勾选模型发送真实尺寸请求,给出九档结论。
- 按能力排序:每个模型带人工评级徽章(S/A/B/C),卡片和选择器按同一顺序排列。
安装与启用¶
桌面版安装命令:
dsh plugin --profile desktop add dsh-freemodels-opencode
从源码安装:
git clone https://github.com/xiean676/dsh-freemodels-opencode.git
cd dsh-freemodels-opencode
npm install --ignore-scripts
npm run build
dsh plugin --profile desktop add .
安装完成后重启 DSH,进入 设置 → 模型 页面,滚动到最底部即可看到「opencode 免费模型」卡片。
如果卡片显示”读不到插件状态”,说明桌面端没有把 webServer 服务暴露给插件,此时勾选和探测功能不可用,但 provider 本身仍然可用(使用上次保存的勾选状态)。
典型用法¶
- 点 刷新模型:拉取最新的模型清单。首次安装会自动执行一次。
- 勾选需要的模型:只有被勾选的模型才会出现在模型选择器里。
- 单模型测试:点某个模型右边的 测试,发送一个真实尺寸请求(96 token 上限)。几百毫秒到几十秒会给出结论。
- 批量测试:点 测试已勾选(N),串行测试已勾选的模型。遇到「需付费」「车道额度用尽」或带较长
retry-after的「被限流」会立即停止,避免继续消耗额度。
批量测试会先弹出确认对话框:「确认测试 N 个模型?」,因为它会真的发起 N 次请求。同一个模型在 60 秒内不会重复测试,重复点击只会显示”刚测过”。
探测结论与应对¶
插件给出九档结论与对应建议:
| 结论 | 含义 | 建议 |
|---|---|---|
| 可用 | 上游完整响应了请求 | 使用该模型 |
| 被限流 | 429 FreeUsageLimitError,额度暂时用完 |
等到建议的时间点再测 |
| 车道额度用尽 | 403 FreeTierError,按客户端指纹拒绝 |
换模型或等上游放开 |
| 需付费 | 401/403 AuthError,匿名车道无凭据 |
换免费车道模型 |
| 区域受限 | 403 RegionError,当前出口 IP 被拒 |
换网络出口 |
| 上游不提供 | 400,模型 id 不存在或协议不匹配 | 不选该模型 |
| 上游临时故障 | 5xx Upstream request failed |
等待后重测 |
| 刚测过 | 60 秒内测过同一模型 | 等待一分钟后重测 |
| 未测出 | 超时或空响应 | 重测 |
「被限流」与「可用」分开,因为探测请求从 ping 改成了真实任务(96 token 上限),能证明整条链路刚刚完整响应过一次。结论只在当前会话里存在,不落盘,避免限流过期后仍然显示”不可用”。
排序与评级¶
卡片上方提供三个排序按钮:
- 按能力:按人工评级从高到低,评级相同再按上下文窗口,与模型选择器顺序一致。
- 按名称:按模型名字母排序。
- 按上下文:按上下文窗口从大到小排序。
左边的 S/A/B/C 徽章是人工评级,不是跑分结果。评级基于模型”干长活儿稳不稳”的判断:S(90+)、A(80+)、B(70+)、C。鼠标悬停可查看具体理由。想调整顺序,编辑 src/rank.ts 文件。
未在人工表里的新模型会走关键词启发式打分(基于版本号和 flash/preview 等档位词),分数上限为 63,低于最低人工分(64),因此不会顶掉人工评级模型。启发式按 - / _ / . 分词后整词匹配,避免早期版本中子串匹配导致的误判。
推理档位¶
免费模型全部声明支持推理档位,但各自能选的档位不同。space-bunny-free / beam-free 支持 low/medium/high/xhigh/max;nemotron-3.5-super-vl-free 支持 none → xhigh;deepseek-v4.1-flash-free / glm-5.3-flash-free 支持 low/high/max;big-pickle / mimo-v2.6-flash-free / longcat-2.5-preview-free / nemotron-3.5-lightning-free 上游未声明,插件默认提供 off/low/high/max 四档。
默认四档是实测可接受的写法,故意去掉了 medium 档(写错会导致每次都硬 400)。档位配置在 src/adapter.ts 的 DEFAULT_EFFORT_LADDER。DSH 自带的 dsh-thinking-slider 插件补齐四档功能不适用于此 provider,因为 opencode 是本插件自己的 provider。
如果模型在 DSH 里看不到档位选项,先点 刷新模型 重新拉取元数据,再重启 DSH。档位来自 models.dev 元数据,目录未刷新就不会出现在选择器里。
models.dev 是一个 5.8 MB 的大文档,解析需要约 15 秒。插件将超时放宽到 90 秒并重试一次,即使失败也会沿用上次成功拉取的档位和上下文窗口,避免需要重新配置。点「刷新模型」只拉 Zen 清单(秒回),models.dev 元数据在后台补全,卡片会在 15 秒 / 60 秒 / 150 秒自动跟进刷新。
Zen 清单拉取本身也可能失败(如 DNS 解析间歇性超时)。插件增加了 1 次重试 + 1.5 秒退避,超时放宽到 45 秒,并将错误翻译成人话(DNS 失败 / 连接重置 / TLS 协商失败 / 证书校验失败 / 请求超时),而不是只显示 fetch failed。
会话失败时的重试策略¶
在 DSH 会话中发送消息时,如果遇到限流,插件会声明自己的重试策略:
RATE_LIMIT不重试:限流窗口是分钟到小时级,重试没有意义。AUTH、LANE_EXHAUSTED、REGION_BLOCKED、MODEL_UNAVAILABLE不重试:这些原因换 key、换模型或等待都无法自动解决。- 只对
EMPTY_RESPONSE、TIMEOUT、TRANSPORT重试 1 次。
这样避免对限流错误重复重试,浪费额度。失败消息会带上上游给出的等待窗口(如「opencode: Rate limit exceeded. Please try again later.(上游建议 20 小时后再试)」),不需要猜测。
实现与维护¶
插件源码结构如下:
| 文件 | 作用 |
|---|---|
src/zen-ids.ts |
免费车道要求的 ses_* 会话 id 与 7 个伪装头 |
src/rank.ts |
人工评级表与能力排序(调整顺序只需改此文件) |
src/catalog.ts |
拉取 Zen 清单 + models.dev 元数据,过滤付费模型后合并 |
src/probe.ts |
单模型探测与九档分类,永不抛异常,流式判级 |
src/net-errors.ts |
将 fetch failed 翻译成人话 |
src/store.ts |
$DSH_HOME/data/dsh-freemodels-opencode/state.json,串行写、原子替换 |
src/adapter.ts |
provider opencode 的 LlmAdapter,只列勾选模型,流式转发 |
src/bridge.ts |
四条同源路由:/status /refresh /select /probe(探测走 NDJSON 流式返回) |
src/index.ts |
宿主入口:注册 adapter、加载清单、挂路由 |
src/client/ |
浏览器入口 + 卡片 |
模型清单的权威由插件自己提供:LlmAdapter.listModels() 返回勾选集,勾选为空时返回 [],于是模型选择器不显示任何模型。选择器顺序也由 rank.ts 的能力序决定,任一变化都会触发重新发布。
适用场景与注意¶
适合需要接入 OpenCode 免费车道、希望批量测试模型可用性、依赖人工评级排序的开发者。
插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。许可证为 MIT,第三方依赖来自 opencode2dsh 项目。
结尾¶
dsh-freemodels-opencode 通过清单过滤、勾选控制、连通性测试与人工评级排序,让 OpenCode 免费车道在 DSH 中更易用。如需更多信息,可访问插件目录页或 GitHub 仓库。