前言¶
在 DeepSeek Harness(DSH)裏走 OpenCode Go、Command Code 這類網關路由時,常見麻煩是:路由缺 api 會報 needs an api、要自己填 baseURL、模型列表不完整,發往 OpenCode 的請求還可能因缺少會話頭觸發 400 MissingSessionID。手工改路由配置能緩解,但每個宿主、每條路由都要重複維護,且引擎目錄裏未必已經包含 DeepSeek V4.1 等新型號。
itchenshi/dsh-gateway-models 是社區維護的只有宿主半邊的 DSH 插件(分類:模型推理)。它在裝配層自動補全上述路由的 wire 協議、默認端點與模型清單,併爲 OpenCode 相關請求附加 x-opencode-session,裝好後重啓引擎即可生效,無需單獨打開插件頁面。
這是什麼¶
- 名稱:
dsh-gateway-models(GitHub:itchenshi/dsh-gateway-models) - 維護者:itchenshi
- 定位:DeepSeek Harness 插件,面向
opencode-go與commandcode網關路由,聲明 OpenCode Go / Command Code 的路由協議與 endpoint,補齊模型列表,並處理會話頭。 - 許可:MIT(見倉庫 README)
插件不註冊頁面半邊,也不讀本機 HTTP 路由;密鑰仍由引擎按 apiKeyEnv 解析,插件不寫、不讀 API key。
核心功能¶
下面按兩條路由分別說明插件在啓動裝配階段做了什麼(事實以倉庫 README 爲準)。
OpenCode Go(opencode-go)¶
- 爲路由聲明 wire 協議
api: openai-completions,避免目錄外模型報needs an api。 - 讀取引擎自身的模型目錄,把 DeepSeek V4.1 系列補進
opencode-go清單,並排到第一位;用戶已配置的條目保留且順序不變。 - 若路由沒有
baseURL,補上https://opencode.ai/zen/go/v1;已配置的地址不會被修改。
重啓後可在模型選擇器裏覈對:第一項應爲 DeepSeek V4.1 Flash;llm-pi-ai.providers.opencode-go 中 V4.1 排在首位。
Command Code(commandcode)¶
- 爲路由聲明
api與baseURL,用戶側通常只需填密鑰,不必手填 API 地址。 - 通過公開目錄接口
GET https://api.commandcode.ai/provider/v1/models(無需 key、請求不帶 Authorization)補齊模型清單,策略爲只增不改、冪等。
Command Code 半側只對用戶層已配置過的路由生效(例如填過密鑰),並按接口地址 api.commandcode.ai 識別路由;路由名叫 commandcode、commandcode-goat 等均可。
會話頭 x-opencode-session¶
對發往 OpenCode / OpenCode Go 路由的請求附加 x-opencode-session:
- 默認
mode: uuid:每個會話一個隨機 UUID,不把內部會話 ID 發給第三方。 - 可選
mode: session-id:顯式發送內部會話 ID。
用於緩解 MissingSessionID 一類錯誤,並支持會話親和等場景。
安裝與啓用¶
安裝命令須來自官方 README,裝完按提示重啓引擎(無頁面半邊,無需額外界面配置)。
DSH Ready GUI(推薦)¶
插件隨 GUI 內置:打開 GUI → 設置窗口 →「第三方插件」勾選網關路由,安裝後重啓引擎。
其它 DSH 宿主(dsh web / CLI)¶
任選一條(兩條裝到的都是倉庫完整內容,含 cordis.patch.yml):
# 推薦:直接從 GitHub 裝
dsh plugin --profile web add github:itchenshi/dsh-gateway-models
# 備選:從 Release tarball 裝(示例版本 v0.2.6)
dsh plugin --profile web add https://github.com/itchenshi/dsh-gateway-models/releases/download/v0.2.6/dsh-gateway-models-0.2.6.tgz
本包不在 npm 上(
registry.npmjs.org查無此包),只能用 GUI 內置或上述兩種方式安裝。
配置(可選)¶
cordis.patch.yml 裏 id: opencode-go 對應行的 config 全部可選:
| 鍵 | 默認 | 說明 |
|---|---|---|
providers |
[opencode, opencode-go] |
附加會話頭的路由名;自定義路由名時加入 |
commandcodeProviders |
無 | 額外的 Command Code 路由 id;僅當某條路由的地址在配置裏看不到時纔要填 |
mode |
uuid |
uuid = 每會話隨機 UUID;session-id = 發送內部會話 ID |
debug |
false |
true 時記錄每個收到會話頭的流式調用 |
debugFile |
無 | 追加 JSON 日誌的路徑;僅 $DSH_HOME/logs 或系統臨時目錄下生效,超過 8 MiB 停止追加 |
不改動配置時,使用上述默認值即可。
典型用法與驗證¶
沒有獨立 UI:安裝並重啓引擎後,插件在裝配層改路由配置。
- OpenCode Go:在模型選擇器確認第一項爲
DeepSeek V4.1 Flash;必要時查看llm-pi-ai.providers.opencode-go中排序。 - Command Code:在已配置密鑰的路由上查看模型列表是否相對安裝前增多;啓動日誌中正常會出現類似
[gateway-models] "commandcode": N model(s) from the provider catalog (list X -> Y)的行。 - 會話頭:默認 UUID 模式;若需調試,將
debug設爲true或指定合規的debugFile路徑。
宿主啓動日誌中若出現
[gateway-models] active for providers [opencode, opencode-go] with mode uuid (debug=off),表示 OpenCode 相關半側已激活。
適用場景與注意¶
適合誰
- 使用 DSH 網關路由(OpenCode Go、Command Code),希望少填
baseURL、少手工維護模型列表的開發者。 - 需要 DeepSeek V4.1 在 OpenCode Go 列表置頂,或需要從 Command Code 公開目錄同步完整模型清單的場景。
- 遇到 OpenCode 路由
MissingSessionID、需要穩定 per-conversation 會話頭時。
環境與兼容性
- DSH >= 0.2.0-rc.2(0.1.x 因設置服務 API 變更無法寫入路由配置)。
- Node >= 20。
- 依賴引擎裝配層、
settings服務與llm事件的公開契約;契約變更時引擎會在啓動時顯式報插件加載失敗,而非靜默失效。
安全與信任
插件以當前 DSH 進程權限運行;安裝前應閱讀倉庫源碼與 MIT 許可證。除 Command Code 公開模型目錄的 GET 請求外,插件不發起需密鑰的出站調用,也不註冊本機 HTTP 路由。配置寫入經 settings 服務校驗,失敗時整筆拒絕,不會留下半份配置。
常見問題(摘自 README)
- V4.1 未出現:若日誌爲
llm.discoverModels() is unavailable或could not detect the "opencode-go" model catalog,插件會跳過自動補模型,而不是猜測。 - Command Code 列表未補齊:若出現
could not read the Command Code model catalog (...),說明公開目錄請求失敗,原列表保持不變。
DSH 生態理念是「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-gateway-models 把 OpenCode Go 與 Command Code 網關路由上重複的協議、端點、模型與會話頭工作收到一個宿主插件裏:V4.1 置頂、Command Code 目錄同步、默認 x-opencode-session,裝完重啓即可在模型選擇器與日誌裏驗證。