FishBottle7/opencode2dsh
FishBottle7/opencode2dsh has 386 GitHub stars and 66 forks. GitHot measured -3 stars in 24 hours. Last checked 2026-11-09 00:02 UTC. Last push 2026-11-03.
DSH plugin — free OpenCode Zen models for DeepSeek Harness (DSH). Free LLM API, no API key needed. 在 DSH 中使用 OpenCode Zen 免费模型,无需 API key
可以做什么
- Zero credential, zero setup — the anonymous lane needs no key; install, restart, chat
- Native adapter, no sidecar — one npm package, no child process, no binary, no local port (the legacy Go sidecar is not part of the published package; see legacy/)
- CLI-identical disguise — requests carry the OpenCode CLI user agent and its session/request/project header set, derived per conversation
- Selectable thinking levels — reasoning-capable free models expose an effort picker in DSH's model selector (declared ladders where the model metadata provides them, Off/Minimal/Low/Medium/High otherwise); Responses-only muse-spark-* models expose only upstream-supported effort levels, and no selection keeps the provider default
实测星标增长
- 24小时
- -3
- 7天
- 更新延迟
- 15天
- 更新延迟
- 1个月
- 更新延迟
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README.zh-CN.md
原文opencode2dsh
在 DSH(DeepSeek Harness)里原生使用 OpenCode Zen 的免费匿名模型。
无需 API Key。无需注册。无需额外进程。
English | 简体中文
opencode2dsh 会向 DSH 注册一个原生的 LlmAdapter,直接流式对接
OpenCode Zen 的匿名免费通道——也就是
OpenCode 官方 CLI 无需登录即可使用的那批免费模型,它们会以 opencode2dsh
这个常规 provider 出现在你的 DSH 模型选择器里。
插件发出的请求与 OpenCode CLI 的流量完全同形(相同的 User-Agent、相同的 关联请求头),模型目录通过三级回退链保持新鲜。不用登录任何账号,也不用 自己部署任何东西。
特性
- 零凭据、零配置——匿名通道不需要任何 Key;装好、重启、开聊
- 原生 adapter,无 sidecar——一个 npm 包,没有子进程、没有二进制、没有本地端口(旧版 Go sidecar 不随包发行,见
legacy/) - CLI 同形伪装——请求携带 OpenCode CLI 的 User-Agent 和整套会话/请求/项目关联头,按会话派生
- 思考等级可选——带推理的免费模型在 DSH 模型选择器里出现思考等级选项(模型声明档位的按声明展示,其余提供 Off/Minimal/Low/Medium/High);Off 向上游发送
reasoning_effort: "none"真正停思考,不选则保持上游默认 - 按声明支持图片输入——只要 models.dev 的模型条目在
modalities.input里列了image,图片附件就会被放行;只声明text的模型仍然拒绝;元数据缺省时退回已验证的视觉家族 - 实时目录 + 三级回退——上游实时列表 ∩ 元数据判定免费,断网时依次回退到磁盘缓存与已验证的静态名单
- 自愈能力——启动期快速重试、周期刷新,并落盘健康快照便于排查
- 规范的错误呈现——上游故障(限流、鉴权、超时、传输)以分类的 finish 原因送达 DSH,重试策略始终由 DSH 掌控
安装
从插件市场安装(推荐,收录后可用):在 DSH 里打开 设置 → 插件市场,
搜索 opencode2dsh,一键安装。
从 npm 安装:
dsh plugin --profile web add @opencode2dsh/dsh-plugin
从源码安装(自行打包):
git clone https://github.com/FishBottle7/opencode2dsh.git
cd opencode2dsh/packages/plugin
pnpm install && pnpm pack
dsh plugin --profile web add ./opencode2dsh-dsh-plugin-<version>.tgz
验证:重启 dsh web,打开模型选择器,在 opencode2dsh 分组里选模型即可。
需要 DSH(DeepSeek Harness)0.1.7 及以上、带 web profile(IP 池设置页依赖 0.1.7
的插件页契约);Node.js ≥ 20(DSH 能跑就满足);出站 HTTPS 需可达 opencode.ai 与 models.dev。
配置
默认配置开箱即用。需要覆盖时,编辑 profile 的 cordis.patch.yml:
- id: opencode2dsh
name: '@opencode2dsh/dsh-plugin'
config:
mode: adapter # adapter(默认)| sidecar
providerId: opencode2dsh
refreshSeconds: 300 # 目录刷新周期(秒)
| 配置项 | 默认值 | 说明 |
|---|---|---|
mode |
adapter |
adapter:原生 LlmAdapter 直连 Zen。sidecar:旧版本地 agent 模式,不随包发行——请从 legacy/agent 自行构建并通过 agentPath 指定。 |
providerId |
opencode2dsh |
在 DSH 中显示的 provider 名称。 |
refreshSeconds |
300 |
实时目录刷新间隔;定价元数据每 24 小时刷新。 |
allowedModels |
[] |
模型白名单,仅 adapter 模式生效(旧 sidecar 忽略;插件 0.3.14 起,issue #83):DSH 可展示和调用的模型 id,精确匹配。留空则暴露全部符合条件的免费模型。只做收敛——付费/弃用/本地阻止/探活规则仍然生效,直调名单外模型会在发起任何网络请求前快速失败并给出明确错误。 |
agentPath |
自动解析 | 仅 sidecar:agent 二进制路径。 |
agentArgs |
— | 仅 sidecar:传给 agent 的额外 CLI 参数。 |
restartDelayMs / restartMaxDelayMs / maxConsecutiveCrashes |
1000 / 60000 / 5 |
仅 sidecar:重启退避与熔断阈值。 |
firstEventMs / bodyIdleMs / responsesBodyIdleMs |
30000 / 120000 / 300000 |
仅 adapter,插件 0.3.7 起支持:流存活超时,单位毫秒,取 1 到 600000 的整数。分别控制首事件等待、流中静默,以及 Responses 模型(muse-spark-*)的静默下限。冷启动慢时可调大 firstEventMs。不设置则使用默认值;修改后重启 DSH。 |
本地 OpenCode 委托(插件 0.3.x,docs/delegation.md,ref #76)——针对持续 403 FreeTierError 凭据门禁的可选兜底。默认关闭;除非显式开启,匿名路径与现状逐字节一致:
delegation:
enabled: true # 总开关,默认 false
# opencodePath: '' # 显式指定 opencode 二进制;否则 managed → 全局 → npm
# minVersion: '1.18.0' # 低于此版本的候选直接跳过
# memLimit: '96MiB' # 注入子进程的 GOMEMLIMIT
# gcPercent: 30 # 注入子进程的 GOGC
# trimIntervalMs: 60000 # Windows EmptyWorkingSet 节拍;0 关闭
# startTimeoutMs: 60000 # 健康等待预算
开启后插件会保管你的 opencode 凭据(只取 opencode 一个条目,0600 种进隔离 XDG 根,绝不写日志),并仅在匿名车道与姊妹主机重试都被凭据门禁拒绝时,才把回合交给受管的本地 opencode serve。开启前请先读 docs/delegation.md §2 的安全说明。
工作原理
DSH 会话
│ harness chunk(block-start / text-delta / usage / finish …)
▼
ZenAdapter(注册的 LlmAdapter)
│ pi-ai openai-completions 流式
▼
https://opencode.ai/zen/v1 ← Authorization: Bearer public
携带与 CLI 同形的请求头:
user-agent: opencode/…
x-opencode-client, x-opencode-session, x-session-affinity,
X-Session-Id, x-opencode-request, x-opencode-project
- 会话关联——session/project id 由会话首条用户消息经 SHA-256 派生 (同一会话稳定、不可逆推),每个请求再附带一个全新的随机 id,与 CLI 行为一致。
- 目录回退链——S1:实时
GET /v1/models;S2:models.dev 定价元数据判定 "免费";S3:编译期验证的静态名单。上游故障时由磁盘缓存(约 7 天有效期)兜底。 - 韧性——adapter 在启动时立即注册;若首次目录拉取撞上网络尚未就绪 (VPN/TUN 重连、DNS 等),会以短周期重试(约 1 分钟内),随后转入常规刷新。
- sidecar 模式(
mode: sidecar,旧版)——拉起本地 Go agent( opencode2api 的单租户移植版), 监听127.0.0.1:<随机端口>、token 鉴权,并注册标准llm-pi-ai路由。 不随包发行;请从legacy/agent构建(go build ./cmd/agent)并把agentPath指向产物。
健康状态与排查
插件在每轮刷新后写入健康快照:
~/.opencode2dsh/adapter-status.json
{
"status": "ready",
"total": 64,
"exposed": 9,
"lastError": "",
"writtenAt": "2026-08-29T07:01:54.915Z"
}
| 现象 | 可能原因与处理 |
|---|---|
403 FreeTierError / "OpenCode's free tier can only be used from within OpenCode" |
上游限制免费通道的客户端,插件会保留该说明;这不是个人 API 密钥错误。请使用上游支持的 OpenCode 客户端或正式 API 服务。若拒绝是持续的(直连 + 姊妹主机都 403,而请求形状/IP 都干净),issue #76 的可选本地委托会让回合改走你自己的 opencode 登录——读完安全说明后再开启 delegation.enabled。 |
启动页报 Failed to load plugins … list slot "plugins.item" requires options.id,或 IP 池条目没有配置页 |
DSH 早于 0.1.7 的插件页契约。升级 DSH 到 0.1.7(推荐最新);页面挂载门控是 configForms.whileServed,0.1.6 及更早上整页不出现,模型路由不受影响。 |
安装插件后 DSH 0.1.7/0.2 无法启动,报 pending … settingsScope |
更新插件到 0.3.5;DSH 0.2 的 IP 池设置在插件页的 opencode2dsh 条目里。 |
| 只有 3 个模型 | 启动时网络未就绪,重试会在约 1 分钟内补齐;看 adapter-status.json 里的 lastError。 |
lastError: "fetch failed" 持续出现 |
出站 HTTPS 到 opencode.ai 被拦截;检查代理/VPN 规则。 |
对话中报限流错误(429 … Endpoint is unavailable) |
匿名通道按 IP 限额,免费模型竞争大。#51 修复后,插件的 provider 重试策略会静默扛过 429 突发(8 次重试、约 1s→20s 退避、每步最坏约 90s),不再直接抛给用户;仍被打满时可降低思考强度、换一个竞争较小的 -free 模型,或在插件设置页开启 IP 池(多出口轮换)。 |
| 思考耗尽输出预算,没有正文 | 插件 0.3.6 会在模型支持 Off 时关闭思考重试一次。已有任何正文或工具调用则不会重试。重试保持原输出上限,仍可能失败,两次请求的用量合并统计。不支持 Off 的模型(如 Muse)需要手动调整设置或更换模型。 |
Muse 报 REGION_BLOCKED / "This model is not available in your country" |
Zen 不向当前网络地区提供该模型。插件 0.3.5 保留上游解释;旧版会把这个 403 误报为 API 密钥无效。匿名通道不需要个人密钥,可使用当前地区可用的模型。 |
连接 127.0.0.1:* 报错 |
残留的 sidecar 路由遮蔽了 adapter;插件 ≥ 0.2.1 启动时会自动清理。 |
安装时报 ERR_PNPM_IGNORED_BUILDS |
pi-ai 的传递依赖(@google/genai、protobufjs)带构建脚本,运行时并不需要。在插件市场里按提示选择允许/拒绝,或在 profile 的 pnpm-workspace.yaml 的 allowBuilds: 下把这两项设为 false。 |
安全性
- 不涉及任何机密:匿名通道的 Key 就是字面量
public;插件不存储任何东西,也没有任何遥测。 - 安装产物仅限
lib/;不执行任何依赖的构建脚本。 - 所有请求均从你的机器直连
opencode.ai/models.dev。 - 本地 OpenCode 委托(docs/delegation.md,ref #76)默认关闭、需显式开启。开启后插件将保管你的 opencode 凭据——只取
opencode一个条目,0600 种进隔离 XDG 根,绝不写日志,除本地子进程外绝不外发——并经由受管的本地opencode serve代理。若上游因此判定异常使用,后果由你的账号承担。在你机器上执行工具被三层纵深挡住(ask-then-reject + 响应体扫描 + 环境隔离),详见文档。
开发
git clone https://github.com/FishBottle7/opencode2dsh.git
cd opencode2dsh/packages/plugin
pnpm install
pnpm typecheck && pnpm test
pnpm build # 打包到 lib/
旧版 Go sidecar 在 legacy/agent(go test ./...)。架构说明与移植记录见 docs/。
发布:在 packages/plugin 执行 pnpm pack(prepack 会构建并同步文档)。
致谢
- opencode2api,作者
@jasonxu114514——
legacy/agent里的旧版 Go sidecar 是其匿名通道实现的移植版,目录回退链与请求伪装细节同样源自它。 本项目能成立,全靠它踩过的路。
贡献者
与维护者一起修复、测量、设计的社区成员:
@1Dreamer666——#99 上下文上限探针矩阵与 300k 修复(#100);#103 流截断的根因诊断、修复提案与并行 PR(#104,塑造了最终合并的实现)。
@IThanjie——#96/#98 reasoning 回传问题的根因链(pi-ai dist 逐行定位)与本地验证补丁。
@kizaki-R——#80 免费通道门禁测量与姊妹主机重试;#84 自适应 blocklist 探测;#83 白名单设计意见。
@GT-610——#65 会话 id 派生修复(0.3.12 的核心)与 #70 订阅池健康体系大修。
@ftf112233——#86 上下文窗口修复与 #87 哨兵竞争修复。
@BobJu0721——#74 免费通道测量与 #67 会话 id 修复。
@reisen-ww——#76 凭据门 A/B 证据、本地委托方案设计与 PR #92 背后的 MIT opengate 参考实现。
OpenCode——运营免费匿名 Zen 通道。
@earendil-works/pi-ai——adapter 模式使用的线上协议层。
DeepSeek Harness 与 dsh-market 社区。
友链
LinuxDo —— 新的理想型社区
许可证
MIT © FishBottle7
探索相关项目
affaan-m/ECC
智能体执行与控制框架的性能优化系统。面向 Claude Code、Codex、Opencode、Cursor 等,涵盖技能、本能、记忆、安全与研究优先的开发。
300,197 星标NousResearch/hermes-agent
与你一同成长的智能体
262,052 星标multica-ai/andrej-karpathy-skills
一个用于改进 Claude Code 行为的 CLAUDE.md 文件,源自 Andrej Karpathy 对 LLM 编程陷阱的观察。
231,329 星标firecrawl/firecrawl
借助来自网络及其他来源的数据,强化你的 AI 智能体。正在构建面向超级智能的资料库。🔥
199,847 星标