前言¶
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