dsh-opencode-go-models
DSH 插件 – 同步 OpenCode Go 套餐的模型清单,并基于精确的家族配置标记多模态(图像/视频)支持。
⚠️ 范围声明:本插件仅覆盖 OpenCode Go 订阅套餐
(端点 https://opencode.ai/zen/go/v1)。OpenCode Zen 另有主套餐
(端点 https://opencode.ai/zen/v1),其模型清单、每 1M tokens 按量价格、
计费模式(按量付费 vs Go 的订阅制)和弃用节奏均与 Go 不同——本插件
不处理 Zen 主套餐,请勿将本插件的模型/价格数据套用到 /zen/v1。
功能
- 拉取
https://opencode.ai/zen/go/v1/models 获取最新模型列表
- 与 pi-ai 安装 catalog(
data/opencode-go.json)对比,计算新增/下线模型
- 新增模型直接写入 catalog JSON(dsh 运行时经 pi-ai 包装模块在加载时 import 该 JSON,重启即生效):
- 协议准确:每个模型记录自带上
api 字段,按 opencode.ai 文档端点分配
anthropic-messages / openai-completions / openai-responses,绝不强制统一协议
- 容量/价格优先取内置模板表(文档定价表 + 同族容量),未知模型回退同族/家族配置
- 精确区分多模态模型:
input: ['text', 'image'] 仅授予官方确认的视觉模型
- 原子写入遵循官方
@deepseek-ai/dsh-atomic-write:withFileLock 跨进程写锁 +
writeFileAtomic(排除性临时文件 + rename 原子提交),任何失败旧文件保持完好
- 注意:catalog 在 dsh 启动时加载进内存,同步后需重启 dsh 才能看到新模型
安装与加载
从 npm 安装(推荐,已发布 dsh-opencode-go-models)
npx @deepseek-ai/dsh plugin --profile web add dsh-opencode-go-models
-
装完重启 dsh 生效(bundle 层变更);发布包内含 cordis.patch.yml,
dsh.bundle 声明随包生效,无需手工 patch
-
国内网络若等不到镜像同步,可用官方源:
cd ~/.dsh/profiles/web
pnpm add dsh-opencode-go-models --registry=https://registry.npmjs.org
-
升级:npx @deepseek-ai/dsh plugin --profile web update dsh-opencode-go-models
从源码安装(开发/贡献)
git clone <your-repo-url>
cd dsh-opencode-go-models
pnpm install
pnpm run build
npx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-opencode-go-models
对本机已有运行实例做热加载(开发模式)
本地安装后,编辑 ~/.dsh/profiles/web/cordis.patch.yml 追加:
- insert:
- id: dsh-opencode-go-models
name: 'dsh-opencode-go-models'
patch 层经 HMR 热生效,无需重启;但模型列表的同步结果仍需重启 dsh(catalog 启动时加载)。
使用
在 DSH 对话中:
- 同步模型:
请帮我同步 opencode-go 的模型列表
- 预览变更:
请预览 opencode-go 模型同步的变更
- 查询多模态支持:
kimi-k3 支持图片输入吗?
- 恢复原样:
恢复 opencode-go 模型清单(撤销插件对 catalog 的全部修改)
自动同步
插件默认在加载时自动同步,但受冷却窗口节制(默认 12 小时,可配置):
冷却期内启动零网络、零写盘;超窗才拉取线上清单比对,仅在确有差异时
写入 catalog 并提示"重启后生效"。凭据缺失/网络失败只记日志跳过,不影响插件加载。
手动同步(sync_opencode_models)始终可用,与自动同步共享同一套原子写路径;
冷却期在自动检查与手动同步后都会刷新。
调整自动同步的 patch 配置示例:
- insert:
- id: dsh-opencode-go-models
name: 'dsh-opencode-go-models'
config:
autoSync: true
autoSyncIntervalHours: 12
发布与 CI/CD
推送形如 v0.1.0 的 tag 即自动发布到 npm(工作流 .github/workflows/publish.yml:
标签版本校验 → npm ci → 构建 → 打包核查 → npm publish):
npm version patch
git push --tags
首次使用需在 GitHub 仓库 Settings → Secrets and variables → Actions 添加 secret
NPM_TOKEN:
- 到 https://www.npmjs.com/settings/<你的账号>/tokens 创建 Granular Access Token:
Packages 选
dsh-opencode-go-models,权限 Read and write,勾选 Bypass 2FA
- 把
npm_xxx 填入 NPM_TOKEN(npmjs 发布强制 2FA,普通 token 会 403)
也可以用 workflow_dispatch 手动触发一次发布。
卸载与恢复原样
官方文档(develop/basic)规定:通过 ctx 注册的监听/工具/定时器在插件卸载时会被
自动清理;需要手动管理的资源用 ctx.effect() 注册清理函数。本插件修改的是持久
文件(catalog),采用备份 + 卸载恢复方案:
- 插件首次修改 catalog 前把原文件整体备份到
opencode-go.json.dsh-backup.json
(内容含 original 原文件与 ours 插件写入版本)
- 卸载时自动恢复:dispose 时检查 profiles 目录是否仍有配置文件
(
cordis.patch.yml / package.json)引用本插件——patch 层被移除或依赖被删除
(真卸载)→ 把备份整体写回;HMR 重载 / 普通关停 / 换 profile(仍被引用)→
不恢复,避免每次重启丢失已同步模型
- 随时手动恢复:
恢复 opencode-go 模型清单 → reset_opencode_models 工具
- 防护:当前文件若已不含插件写入的模型 id(例如被 pi-ai 升级整体替换)→
跳过恢复并清理备份,避免回退升级结果
- 语义说明(整体备份方案):恢复会回退到"首次同步前"的完整文件——同步之后
的手工改动会一并回退;需要只撤销插件改动时请在恢复前自行确认
维护多模态列表
编辑 src/families.ts,在 FAMILIES 数组中:
- 新增
prefixes 条目,并设置 input: ['text', 'image'] 表示支持多模态
- 或设置
input: ['text'] 强制设为纯文本
重新构建即可生效(影响 check_model_supports_image 工具的判定)。
维护记录模板(协议/价格/容量)
src/sync.ts 的 RECORD_TEMPLATES 是新增模型记录的唯一权威来源(wire 协议、
显示名、input 模态、价格、容量——基于 opencode.ai 官方文档端点/定价表):
- 厂商文档更新后修改对应条目即可;未收录的未知模型回退到同族记录(
siblingOf)或 src/families.ts 家族配置
PROTOCOL_MAP 记录文档确认的非 completions 模型(responses / anthropic-messages),其余默认 openai-completions
修改后 npm run build,下次同步即按新模板生成。
已知限制
- 同步后需重启 dsh 才能看到新模型(catalog 在启动时加载进内存)
- 升级 pi-ai 会覆盖其
data/*.json(含本插件写入的模型),升级后重新同步即可
- 新模型的容量/价格优先来自
src/sync.ts 的 RECORD_TEMPLATES(基于 opencode.ai 官方文档),未收录的未知模型回退到同族记录或 src/families.ts 的家族配置——请按官方文档校准
- 文档未收录"模型 ID ↔ 端点协议"对照时按
openai-completions 兜底(/v1 端点原生 OpenAI 兼容)