dsh-gateway-models:爲 OpenCode Go 與 Command Code 網關路由補齊協議、地址與模型清單

前言

在 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)

  1. 爲路由聲明 wire 協議 api: openai-completions,避免目錄外模型報 needs an api。
  2. 讀取引擎自身的模型目錄,把 DeepSeek V4.1 系列補進 opencode-go 清單,並排到第一位;用戶已配置的條目保留且順序不變。
  3. 若路由沒有 baseURL,補上 https://opencode.ai/zen/go/v1;已配置的地址不會被修改。

重啓後可在模型選擇器裏覈對:第一項應爲 DeepSeek V4.1 Flash;llm-pi-ai.providers.opencode-go 中 V4.1 排在首位。

Command Code(commandcode)

  1. 爲路由聲明 api 與 baseURL,用戶側通常只需填密鑰,不必手填 API 地址。
  2. 通過公開目錄接口 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:安裝並重啓引擎後,插件在裝配層改路由配置。

  1. OpenCode Go:在模型選擇器確認第一項爲 DeepSeek V4.1 Flash;必要時查看 llm-pi-ai.providers.opencode-go 中排序。
  2. Command Code:在已配置密鑰的路由上查看模型列表是否相對安裝前增多;啓動日誌中正常會出現類似
    [gateway-models] "commandcode": N model(s) from the provider catalog (list X -> Y) 的行。
  3. 會話頭:默認 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,裝完重啓即可在模型選擇器與日誌裏驗證。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜