前言¶
DeepSeek Harness(DSH)内置的推理提供商目录是在构建时打进去的快照。OpenCode 在端点上已经上线新模型(例如 README 中提到的 kimi-k3.1-pro)时,只要 DSH 还没有发新版,模型选择器里往往仍然选不到该模型。常见变通是等 DSH 发版、改 app.asar,或自己写协议适配——成本高,也容易和官方默认配置打架。
下面介绍社区插件 dsh-opencode-model-sync(维护者 Viyangle,分类:模型推理)。它从 opencode.ai 拉取 live OpenCode Go 模型目录,写入 DSH 的 llm-pi-ai 设置段,使新模型在同步之后即可出现在选择器里,而不必等待 DSH 重新构建。插件当前版本为 0.2.0(见仓库 package.json),许可证 MIT。
这是什么¶
一句话:把 DSH 模型选择器与 OpenCode Go 线上模型目录对齐——新模型在同步后出现,而不是等新 DSH 发行版。
DSH 仍自带构建期快照;本插件不替换整套提供商体系,只维护它声明的三条 provider 路由,其余提供商与凭据不动。目录变更时若与当前设置一致,则不会重复写入(幂等)。
核心功能¶
与内置快照的差异¶
| 方面 | DSH 默认 | 本插件 |
|---|---|---|
| 模型来源 | 构建期快照 | GET 配置的 modelsUrl(默认 https://opencode.ai/zen/go/v1/models) |
| 新模型可见时机 | 新 DSH 构建 | 启动同步、周期刷新或手动 sync 之后 |
| 实现方式 | 无 | 无需 DSH 重编译、无需 patch app.asar、无需自写协议层 |
写入的三条路由¶
插件按 wire protocol 分组,在 llm-pi-ai 的 providers 下维护三条路由(默认前缀 opencode-go,可在配置里改 routePrefix):
| 路由 id | DSH 协议 | 目录中的端点 |
|---|---|---|
opencode-go-chat |
openai-completions |
https://opencode.ai/inference/go/openai/v1 |
opencode-go-anthropic |
anthropic-messages |
https://opencode.ai/inference/go/anthropic/v1 |
opencode-go-responses |
openai-responses |
https://opencode.ai/inference/go/openai/v1 |
每条路由携带从目录翻译来的模型列表、上下文/输出上限、图像能力、推理档位等。DSH 无法对接的协议(README 写明当前为 Gemini 的 generate-content)会被跳过。
内置的 bundled opencode-go 路由默认不修改,避免单一路由无法同时表达多协议时的会话头与兼容性问题;同步出来的路由负责「发现新模型」。若要去掉重复项,可配置 retireBundledRoute: true(见下文注意)。
同步时机与 Agent 工具¶
- 启动后:
syncOnStart默认为true,DSH 启动数秒后执行一次同步。 - 周期:默认
intervalMinutes: 360;设为0关闭定时刷新。 - 手动:注册工具
opencode_model_sync,可在智能体侧调用。
凭据与安全¶
需要 OpenCode API Key:默认读环境变量 OPENCODE_API_KEY,或通过 DSH credentials 中同名项解析。README 明确:插件不会把 key 的值写入日志、工具输出或 settings。
环境与前置条件¶
| 条件 | 说明 |
|---|---|
DSH Desktop / 含 llm-pi-ai 的运行时 |
README 写明在 DSH Desktop 44.7.0(@deepseek-ai/dsh-desktop@0.2.1-rc.5)上构建与测试 |
| OpenCode API Key | 见上 |
默认 profile 中的 llm-pi-ai |
需存在 bundled 的 opencode-go 路由行 |
Node 引擎要求:>=20.3(package.json)。
安装与启用¶
发行包由 npm pack 产出,附在 GitHub Releases,文件名为 dsh-opencode-model-sync-<version>.tgz。请从 latest release 下载,不要凭仓库名自行拼接未在文档出现的 CLI 安装命令。
通过 Plugin Manager 安装 bundle¶
- 从最新 Release 下载
.tgz。 - 用支持 Plugin Manager 的智能体或 DSH 插件 UI,对下载文件的绝对路径(或解压后的目录)执行 bundle 安装。
文档给出的调用形式如下:
install_bundle target: /absolute/path/to/dsh-opencode-model-sync-0.2.0.tgz
UI 侧同样接受本地包路径;具体入口以你当前的 DSH 版本为准。
- 按提示启用 bundle。若当前环境支持 HMR,会立即生效;否则重启 DSH。
从本地目录链接开发版¶
若已有插件源码目录(非本文要求的 git clone 步骤,仅当你本地已有 checkout):
install_bundle target: /absolute/path/to/dsh-opencode-model-sync
链接目录会被就地使用,改代码后需等待下次 recomposition 或重启 DSH。
典型用法¶
在界面选模型¶
在模型选择器中使用 OpenCode Go · Chat Completions、OpenCode Go · Messages 或 OpenCode Go · Responses 下的条目。目录里新增的模型会在下一次同步之后出现。
手动同步(Agent 工具)¶
opencode_model_sync action=status
opencode_model_sync action=sync
opencode_model_sync action=sync dryRun=true
opencode_model_sync action=remove
status:最近一次尝试/成功、错误、各生成路由上的 live 模型数量,以及与 DSH bundled 目录的对比。sync:立即拉目录;仅变更的路由会写 settings。sync dryRun=true:预演不写盘。remove:从 settings 删除当前前缀下的三条生成路由。
配置说明¶
配置写在 Cordis patch 里该 bundle 行的 config,字段均可选。默认值如下(与 README 一致):
- id: opencode-model-sync
name: dsh-opencode-model-sync
config:
enabled: true
syncOnStart: true
intervalMinutes: 360
modelsUrl: https://opencode.ai/zen/go/v1/models
apiKeyEnv: OPENCODE_API_KEY
routePrefix: opencode-go
displayNamePrefix: OpenCode Go
sessionId: 00000000-0000-7000-8000-000000000000
retiredModels: drop
retireBundledRoute: false
excludeModels: []
timeoutMs: 20000
常用字段含义摘要:
enabled:总开关;关闭时不注册工具、不同步。intervalMinutes:自动刷新间隔(分钟);0关闭周期任务。sessionId:生成路由所需的x-opencode-session头;所有走这些路由的对话共享该值。retiredModels:drop跟随 live 目录移除已下线模型;keep则保留仍挂在路由上的旧模型 id。excludeModels:永不同步的模型 id 列表。routePrefix:变更前缀会新增一组路由,旧前缀需用action=remove清理;安装后宜保持稳定。
可选:退役 bundled opencode-go¶
retireBundledRoute: true 时,下次 sync 会尝试删除 bundled 的 opencode-go provider,并把 agent-default-model 迁到能 serve 同一模型的生成路由上。约束(README 原文):
- 仅当 profile 仍为未改动的默认
opencode-go: {}时才删除;已自定义则保留并告警。 - 若默认模型不在 live 目录中,退役中止,避免指向不存在路由。
- 从
llm-pi-ai的providers中移除opencode-go。
该操作单向:之后把选项改回 false 不会自动恢复 bundled 路由;需手动加回 opencode-go: {}。会话里曾 pinned 在旧 provider 下的模型,退役后可能报 UNKNOWN_MODEL,README 说明不会做会话级迁移。
工作原理(简述)¶
经过上面的配置与安装,插件在运行期大致执行:
- 通过
ctx.credentials解析 API key(可回落到 Host 进程环境)。 - 带 Bearer token 请求
modelsUrl。 - 按协议翻译
type: chat记录(窗口、输出上限、图像、reasoningEfforts等)。 - 按协议分组,加上
x-opencode-session与 Chat Completions 所需的thinkingFormat: deepseek等兼容项。 - 与当前
llm-pi-aiprovider 比较,有变才ctx.settings.update。 - 网络错误、HTTP 429、5xx 会重试一次(README 截断处仍包含此行为)。
适用场景与注意¶
适合谁:日常通过 OpenCode Go 推理、希望 DSH 模型列表跟线上目录走、又不想等 DSH 发版或改 asar 的开发者。
权限与安全:插件在 当前 DSH 进程权限 下运行,会读写 llm-pi-ai 中与上述三条路由相关的 settings,并访问配置的目录 URL。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认凭据与网络策略符合你的环境。
生态说明:DSH 强调「一切皆插件」;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系,本文不以「官方应用商店」口吻描述。
重复模型:在 retireBundledRoute: false 时,快照里已有的模型可能在 bundled 与生成路由各出现一次,属 README 说明的预期行为。
结尾¶
dsh-opencode-model-sync 用线上 OpenCode Go 目录填补 DSH 构建期快照的滞后:启动同步、定时刷新和 opencode_model_sync 工具三种方式更新模型列表,且只动三条自管的 provider 路由。需要进一步了解安装包与变更记录,见目录页与 GitHub:
- 目录页:https://www.skillhub.cn/plugins/Viyangle/dsh-opencode-model-sync
- GitHub:https://github.com/Viyangle/dsh-opencode-model-sync