dsh-provider-show:在輸入框補齊當前模型的供應商

前言

在 DSH 裏切換模型時,輸入框右下角通常只顯示「模型 · 推理強度」,看不出這條模型背後走的是官方 DeepSeek 路由、你自己建的 API 路由,還是某個連接器插件提供的一方模型。當多個插件各自注冊供應商時,還可能出現同一條座位上重複畫供應商的情況。下面介紹的插件解決的就是這兩個問題:把當前模型的供應商補在「模型 · 推理強度」前面,並且對已經被其他插件接管的供應商自動讓位。

這個插件是什麼

dsh-provider-show 是 MosCloud 維護的 DSH 客戶端插件,版本 0.1.1,許可證 MIT,零外部依賴。它在 DSH 輸入框右下角的「模型 · 推理強度」前面補上當前模型所屬的供應商。對於已被其他插件接管的供應商(例如 WorkBuddy),插件識別後不顯示,整行與沒裝這個插件時保持一致。

核心功能

  • 在「模型 · 推理強度」左側補上供應商顯示名,例如 DeepSeek Account。
  • 供應商已被第三方插件接管時,插件不再畫自己的芯片,避免重複。
  • 新會話尚未做模型選擇時,顯示部署默認模型所屬的供應商;發出第一條消息或切一次模型後,改由該會話自己的選擇決定。
  • 供應商顯示名默認取目錄裏的 displayName,可通過 shortNames 縮短。
  • 歸屬判定與文案選擇是純函數,Host 與 Client 共用一份實現。

安裝與啓用

在 DSH 客戶端執行安裝命令,<你的-profile> 替換爲實際使用的 profile:

dsh plugin --profile <你的-profile> add dsh-provider-show

也可以在插件管理頁的「添加插件」裏填包名或 GitHub 倉庫地址。安裝後必須刷新頁面,因爲客戶端模塊是新增的,不刷新不會加載。

從源碼開發時改用本地目錄,改動即時生效:

dsh plugin --profile <你的-profile> add /path/to/dsh-provider-show

卸載通過插件管理頁,或從 profile 的插件清單移除。README 提到 npm 12 會留下一個 0.0.0-stage 佔位版本(339 字節),是其暫存發佈機制的產物;latest 指向真正的發佈版本,安裝不受影響。

配置

配置寫在 profile 的 cordis.patch.yml 的插件條目下。每項都有默認值,但一處配置會替換整個 config 對象,所以只寫需要改的鍵:

- id: dsh-provider-show
  name: dsh-provider-show
  config:
    enabled: true                    # 總開關,默認 true

    shortNames:                      # 供應商短名,覆蓋目錄裏的顯示名
      volcano-api: 火山

    overrides:                       # 強制某個供應商的處置
      some-connector-provider: third-party   # 讓位給接管它的插件
      another-provider: mine                 # 即使探測說被接管也顯示
      noisy-provider: hide                   # 不顯示,但不聲稱被別人接管

    coreNamespaces:                  # 宿主自有的 settings 命名空間,宿主升級可擴展
      - llm-pi-ai
      - llm-deepseek
      - llm-deepseek-account

歸屬判定規則

「是否已被第三方插件接管」由 Host 半讀取 LLM 目錄後判定,優先級自上而下:

順序 規則 結果
1 overrides[providerId] 顯式配置 third-party 讓位 / mine 顯示 / hide 不顯示
2 settingsNs 不在 coreNamespaces 內 判定爲已被插件接管,讓位
3 目錄裏查不到,或目錄不可讀 判定爲未知,照常顯示(fail-open)

settingsNs 是「註冊該 provider 的 Loader entry id」:

  • llm-pi-ai:你在設置裏自建的 API 路由,例如火山、OpenRouter 或任何 OpenAI 兼容服務。
  • llm-deepseek / llm-deepseek-account:官方 DeepSeek 兩條路由。
  • 其他任何值:某個插件用自己的 entry id 註冊的,例如 dsh-connect-workbuddy。

第 3 條選 fail-open,是因爲漏顯只是信息不全,而誤判會讓所有供應商都不顯示。默認通道若被第三方插件接管,仍然讓位。

架構

文件 職責
lib/ownership.js 歸屬判定與文案選擇,純函數、零 import,Host/Client 共用
lib/index.js Host 半:讀 LLM 目錄 → 決策 → 只讀路由 GET /plugins/dsh-provider-show/providers
lib/client.js Client 半:註冊 conversation.input.right,讀 Host 文檔並渲染

分層原則是:瀏覽器看不到的運行時事實(settingsNs)在 Host 決策,客戶端只消費結論,規則只有一份實現。設計取捨見 docs/design.md。

開發與驗證

npm test        # 單元 + 行爲測試(純 Node,不需要 DSH 運行時)
npm run check   # 語法檢查 + 靜態校驗 + 全部測試

scripts/verify.mjs 的每項檢查都對應一條只在運行時才容易暴露的規則:manifest 完整性、圖標合法性、locale 非佔位文案、客戶端不 import Harness Client 包、樣式只用主題 token 且有寬度上界、路由是隻讀 GET 且由 scope.effect 持有、歸屬規則只有一份實現、排版度量與宿主一致且禁止位移補償。零外部依賴,所以 CI 沒有安裝步驟,乾淨 checkout 直接跑同一套檢查,運行環境爲 Node 22 / 24。

適用場景與注意

適合需要在多供應商環境裏快速識別當前模型來源的 DSH 使用者,也適合要參考「讓位」機制做同類客戶端插件的開發者。插件以當前 dsh 進程權限運行,安裝前應先檢查源碼與許可證。

已知限制如下:

  • 芯片會讓模型名更早摺疊爲圖標(max-width: 140px,宿主按整行寬度判定摺疊)。
  • conversation.input.activity 展開整行時,宿主會隱藏整組 standardControls,芯片隨之隱藏。
  • 供應商顯示名默認取目錄裏的 displayName,想更短就配 shortNames。
  • 判定依賴第三方插件用自有 settingsNs 註冊 provider;若某插件複用核心命名空間,請用 overrides 顯式標註。
  • 只讀路由僅接受本頁同源請求;它是 /plugins/ 下的 exact 路由,優先級高於客戶端模塊的 /plugins 前綴路由,兩者不衝突。

小結

dsh-provider-show 用一份在 Host 做決策、Client 只消費的歸屬規則,在輸入框補齊當前模型的供應商,同時對已被接管的供應商保持沉默,避免重複顯示。它維護在 GitHub:https://github.com/MosCloud/dsh-provider-show ,社區目錄頁:https://www.skillhub.cn/plugins/MosCloud/dsh-provider-show 。

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

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

小夜