前言¶
在 DeepSeek Harness(DSH)裏寫 composer 時,右下角模型選擇器是高頻入口:換 provider、換模型、調推理等級,往往在一兩次點擊裏完成。內置選擇器的交互與 ZCode composer 不一致時, muscle memory 會打架——菜單展開方向、子菜單相對主菜單的位置、鍵盤在面板間怎麼收放,都和你在 ZCode 裏習慣的不一樣。
dsh-model-fold 是社區客戶端插件,由 KKYZD 維護,分類爲「客戶端」。它不改 DSH 源碼,通過 conversation.input.model 槽位接管 composer 的模型位,把交互對齊 ZCode:提供方菜單向上展開、模型子菜單開在側面、支持推理等級選擇與完整鍵盤導航。目錄頁見 SkillHub,源碼與說明見 GitHub。
這是什麼¶
一句話:dsh-model-fold 用 ZCode composer 選擇器的交互模式,替換 DSH composer 右下角的模型選擇器。
實現上它是獨立客戶端插件,註冊在 DSH 插件體系的 single 槽位 conversation.input.model 上。內置模型選擇器默認優先級爲 0,本插件使用 priority: -1 完成遮蔽——這是註冊表自身的選舉機制,不是對 DSH 的 monkey-patch。選擇仍走同一個 ModelDirectory 實例的 directory.select(...),因此在 composer 裏切換模型,/model 彈窗會同步;反之亦然。
核心功能¶
下面介紹 README 中已覈實的行爲,均可在安裝後於 composer 右下角觸發器上體驗。
觸發器與標籤¶
觸發器顯示當前模型與當前推理等級,格式爲 模型名 · 等級名(等級在 caption 弱化色);帶 14px 小 chevron(↓)。字號、行高與 ZCode 對齊(--ui-font-size: 14px、32px 行高)。
提供方菜單與子面板¶
點擊或鍵盤打開後,提供方菜單向上展開,右對齊錨在觸發器上方,並考慮右緣與底緣碰撞。每個有模型的提供方一行,行尾有向右 chevron(›);當前模型所屬的提供方帶 ✓,不展開也能看到「我在哪」。
懸停、點擊或按 → 可打開模型子面板:優先開在菜單右側,右側空間不足時翻到左側;垂直方向按 ZCode/Radix 規則——子面板第一行與所懸停的提供方行對齊,底部溢出時整體上移,過高則釘在頂部並內部滾動。長目錄在面板內滾動。
選擇模型後菜單關閉,觸發器標籤立即更新。
推理等級¶
菜單底部(分隔線之下)有「推理等級」行,顯示當前等級;懸停、點擊或 → 打開等級子面板。等級來自當前模型的 reasoning.efforts(如 Off/Low/High/Max 等);無默認等級的模型多一項「Default」。當前等級帶 ✓。選擇新等級等於以當前 provider/model 加新 reasoningEffort 重新提交,語義與內置座位一致;選當前等級則僅關閉。模型不帶 reasoning 元數據時該行不出現。
鍵盤導航¶
↑/↓:在當前面板(提供方菜單或子面板)內移動焦點→:打開聚焦行(提供方或推理等級)的子面板並聚焦第一行←/Esc:收回子面板回到所在行Esc(菜單級):關閉整個選擇器並把焦點還給觸發器
錯誤與空態¶
目錄加載失敗時,菜單內顯示錯誤與重試按鈕;目錄爲空時顯示空態。
已知邊界¶
- 隻影響 composer 的模型位。
/model命令彈窗走commandUi的popupSelect,是另一套渲染,本插件不改它。 - ZCode 的視覺徽標(如 vision 標籤)未照搬——DSH 目錄數據裏沒有對應字段。
- 若內置選擇器未來改用不同優先級註冊,遮蔽可能失效(界面退回內置樣式,一般不會報錯)。
安裝與啓用¶
DSH 版本要求 >= 0.2.0-rc.1(README 註明在 0.2.0-rc.2 上測試)。package.json 中 engines.node 爲 >=20。許可證爲 MIT(npm 包版本 1.0.0)。
發佈到 npm 後,或在 DSH 插件面板裏直接填包名,執行:
dsh plugin --profile desktop add dsh-model-fold
本地開發時,在本插件目錄下執行(將路徑換成你的絕對路徑):
dsh plugin --profile desktop add "link:<本目錄絕對路徑>"
安裝後 package.json 的 dsh.profile.bundles 會新增一行 dsh-model-fold。宿主插件行在 DSH 重啓後生效;改 lib/client.js 後同樣需要重啓 DSH(遷移到 ~/.dsh/plugins/ 後,宿主 HMR 通常不再捕獲此處變更,重啓是可靠路徑)。
卸載:
dsh plugin --profile desktop remove dsh-model-fold
移除後 single 槽位選舉自動回落到內置模型選擇器,無需其他清理;插件不修改 DSH 安裝目錄或 asar。
典型用法¶
安裝並重啓 DSH 後,在 composer 輸入區右下角找到模型觸發器(顯示 模型 · 推理等級)。
- 鼠標:點擊觸發器 → 在上方的提供方列表中選 provider → 在右側(或左側)子面板中選模型;需要改推理等級時,在提供方菜單底部的「推理等級」行打開子面板並選擇。
- 鍵盤:聚焦觸發器後打開菜單 → 用
↑/↓選提供方 →→進入模型列表 →Enter確認模型;改等級時聚焦「推理等級」行再→進入等級面板。 - 與
/model配合:在 composer 用本插件換模型後,可通過/model彈窗覈對是否已同步;在彈窗中的變更也會反映到 composer 觸發器標籤。
維護者在 README 中提供了本地自檢命令(開發插件時可參考,普通用戶不必運行):
node tools/verify.cjs
node tools/validate.cjs <本目錄>
node tools/discover.cjs <profile cordis.yml> dsh-model-fold
node tools/smoke.cjs <本目錄>
node tools/election.cjs
對帶 --remote-debugging-port=9222 啓動的 DSH 做端到端驗證時:
node tools/cdp-probe.cjs --reload --capture errors.json
node tools/cdp-probe.cjs --eval tools/e2e-picker.js
適用場景與注意¶
適合誰:日常在 DSH desktop composer 裏切換模型,且更習慣 ZCode 式「向上主菜單 + 側面子菜單 + 鍵盤閉環」的開發者;需要頻繁調整 reasoningEffort 且希望與內置提交語義一致的用戶。
生態說明:DSH 社區插件目錄(如 SkillHub)是獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝包來自維護者發佈的 npm 或你指定的本地 link,不是「官方應用商店」一鍵 curated 列表。
安全與權限:客戶端插件在當前 DSH 進程權限下運行,可參與 UI 注入與槽位選舉。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認來源與行爲符合你的環境策略。README 未提供獨立配置項文件;行爲由槽位註冊與共享 ModelDirectory 決定。
結尾¶
dsh-model-fold 把 composer 模型位換成 ZCode 式交互:向上展開的提供方菜單、側面模型子面板、推理等級行與完整鍵盤導航,且不碰 DSH 源碼、卸載即可回退內置選擇器。若你主要在 composer 右下角完成選模,而不是依賴 /model 彈窗的 UI,這個插件值得試裝。
- 目錄頁:https://www.skillhub.cn/plugins/KKYZD/dsh-model-fold
- GitHub:https://github.com/KKYZD/dsh-model-fold