前言¶
DSH 的對話界面裏,模型選擇器只顯示模型名。同時接了多個平臺(例如 DeepSeek 賬號、Trae 企業版)時,DeepSeek-V4-Flash 這類同名模型很難一眼分辨來自哪個平臺,調用錯了也只能回溯會話記錄。
下面介紹 Menpengpeng 維護的 dsh-plugin-model-provider。它在模型選擇彈層的「模型」行和輸入框上方的模型按鈕裏,把模型所屬平臺名追加在模型名後面。它是純界面裝飾:下拉候選列表保持原樣,也不改變實際請求。
這是什麼¶
一句話定位:一個 DSH 客戶端插件,把「模型 → 平臺」映射渲染到界面上,不參與模型路由。
- 倉庫:https://github.com/Menpengpeng/dsh-plugin-model-provider
- 目錄頁:https://www.skillhub.cn/plugins/Menpengpeng/dsh-plugin-model-provider
- 維護者:Menpengpeng
- 分類:模型推理
- 許可證:MIT
核心功能¶
README 給出的生效範圍有三處:
| 位置 | 效果 |
|---|---|
| 輸入框上方的模型按鈕 | DeepSeek-V4.1-Flash(DeepSeek 賬號) |
| 彈層「模型」行 | DeepSeek-V4.1-Flash(DeepSeek 賬號) |
| 下拉候選列表每一項 | 保持原樣,不帶平臺名 |
平臺名用次要文字色、略小字號顯示,不影響模型名本身的主視覺。
README 還說明:0.0.2 起改爲純 DOM 裝飾,不再復刻官方 1017 徽標邏輯,該徽標已在較新的 DSH 宿主中移除。
實現方式¶
README 描述的幾個要點:
- 不註冊任何插槽。原因:
dsh-codex-subscription等插件會搶佔conversation.input.model這個 single 插槽卻不聲明conversation.input.model.label子插槽,導致基於slots.inject的註冊根本不執行;且該子插槽是 single,多個連接器會互相競爭。 - 包裝
Response.prototype.json/text,從宿主自身的/api/session/modelCatalog響應裏學習「模型 → 平臺」映射。宿主連接層會緩存fetch引用,所以包裝fetch無效。 - 打開模型菜單時,從分組標題與候選項文本補充學習,作爲兜底。
- 用 CSS
::after+data-mp-platform屬性追加平臺名,不改 React 子節點,因此不會被 re-render 清掉。 - 平臺名自動去除尾部括號限定詞以避免雙層括號;匹配時兼容
Hy4 · x0.29這類倍率後綴。
代價:依賴 .codexModelSelect* 這組 DOM 類名,宿主大改版時需同步調整選擇器。
安裝與啓用¶
README 給出兩種方式。方式一是 file 依賴,適合本地開發:
- 將本目錄放到工作區或任意位置。
- 在 profile 目錄(通常
~/.dsh/profiles/desktop/)下編輯package.json:
{
"dependencies": {
"dsh-plugin-model-provider": "file:/path/to/dsh-plugin-model-provider"
},
"dsh": {
"profile": {
"bundles": ["dsh-plugin-model-provider"]
}
}
}
- 在 profile 的
cordis.patch.yml末尾追加:
# 本地插件:在「模型」行與輸入框上方的模型按鈕裏,模型名後追加平臺名。
- insert:
- id: ui-model-provider-label
name: 'dsh-plugin-model-provider'
- 將插件複製到
~/.dsh/profiles/desktop/node_modules/dsh-plugin-model-provider/。 - 重啓 DeepSeek Harness。
方式二是 dsh plugin add:
dsh plugin add /path/to/dsh-plugin-model-provider
README 提示:某些 DSH 版本的 dsh plugin add 存在文件鎖問題(報 EPERM on package.json.lock),此時請改用方式一手動安裝。
典型效果¶
README 給出的截圖示例:
彈層:
模型 DeepSeek-V4-Flash(Trae 企業版) ›
推理等級 high ›
輸入框上方按鈕:
[DeepSeek-V4-Flash(Trae 企業版) ▾]
下拉候選列表:
DeepSeek-V4-Flash ← 不帶平臺名
gpt-6-sol
kimi-k3
兼容性¶
- DeepSeek Harness >= 0.2.1-rc.3
- React ^18.2.0
- 僅 Web 平臺(
dsh.client.platform: "web")
package.json 中 version 爲 0.0.2,private: true。文件結構爲 package.json(插件清單)、cordis.patch.yml(bundle patch 聲明)、lib/index.js(服務端入口,空 apply)、lib/client.js(瀏覽器側組件)。
README 還提到編碼約束:所有文件使用無 BOM 的 UTF-8。DSH 的 resolveMeta() 使用 JSON.parse(readFileSync(path, "utf8")) 讀取 package.json,不去 BOM,帶 BOM 會報 SyntaxError: Unexpected token '\uFEFF'。這與官方所有插件保持一致。
回退¶
刪除 node_modules/dsh-plugin-model-provider/,從 profile package.json 的 dependencies 和 dsh.profile.bundles 移除本插件,刪掉 cordis.patch.yml 末尾的 insert 段,重啓即可恢復。
適用場景與注意¶
適合:同時接了多個模型平臺、希望當前模型所屬平臺在界面上直接可見的 DSH 用戶;以及想參考「繞開插槽搶佔、改用 DOM 裝飾」這種實現路徑的插件開發者。
注意:插件以當前 DSH 進程權限運行,安裝前應自行檢查源碼與許可證(MIT)。它隻影響界面顯示,不改變模型路由;平臺名的準確性取決於宿主 /api/session/modelCatalog 的返回內容。另外它依賴 .codexModelSelect* 類名,宿主結構大改版時需要跟進調整。
DSH 的理念是「一切皆插件」。上面提到的目錄頁是獨立的社區站點,與 DeepSeek / 幻方無官方從屬關係。