前言¶
在 DeepSeek Harness(DSH)裏,插件一旦安裝就是全局可見的:每個會話都會看到同一套工具目錄。寫代碼、寫文章、做檢索、或希望儘量少插件干擾時,往往只能手動開關 bundle,或在大量工具裏挑選,既容易誤用,也不利於把注意力限制在當前任務。
dsh-plugin-classes 把「已安裝插件」拆成若干互不可見的插件類:會話只掛載它所屬類裏的插件;類以外的插件不僅在界面上被禁用,在工具目錄和提示裏也不存在。類可以在輸入框左側、模型選擇器旁的 Composer chip 上切換(對尚未開始的會話即時生效)。維護者爲 Uruz123321,歸類爲 admin-security,當前在 GitHub 上版本爲 0.1.0(MIT)。
這是什麼¶
一句話:dsh-plugin-classes 是 DSH 的插件類管理擴展——用命名分組(相對 host 基線的增刪 delta)描述「這一會話該裝哪些插件」,並通過 DSH 自帶的 agentPresets 註冊機制綁定到會話,而不是再套一層獨立加載器。
數據落在 profile 的 cordis.patch.yml 裏該插件行的 volatile config(字段含 classes、host、sessions、plugins)。改類或爲會話勾選類會退役舊 revision、註冊新 preset,無需重啓進程;已在跑的會話保持當時已掛載的組合。
工作原理(簡要)¶
每個不同的「host 基線 ⊕ 若干類 delta」組合,會註冊爲一個普通的 @deepseek-ai/dsh-agent-preset 定義,例如 id 形如 cls-a+b。綁定到該 preset 的會話只掛載對應插件列表。DSH 原有的作用域隔離、會話綁定與重啓恢復邏輯照常複用。
Host baseline(cls-host) 全局始終包含,不作爲可編輯類列出;新會話默認用它,並承載與發行版 standard 模板對應的基線。若你改過部署裏的 standard,需在該插件配置裏編輯 host: 字段,基線不會自動跟隨後續 standard 變更。
核心功能¶
| 能力 | 行爲 |
|---|---|
| 插件類 | 命名分組,對 host 基線做 add/remove;一會話可同時勾選多個類 |
| Composer chip | 模型選擇器左側多選類;對未開始的會話切換類會立即換 preset |
| 類管理面板 | 側欄:創建/重命名/隱藏類,勾選類內插件,查看未歸類插件與各會話使用的類 |
| 新裝插件對話框 | 安裝後居中詢問歸屬哪些類;確認後寫入對應類,並在 host 層禁用該 bundle,使僅被選中的類可見 |
| 會話中途加類 | 會話在首輪之後 DSH 會鎖定組合;再勾新類會開單輪臨時會話(同 workspace,原類 + 新類),結束後歸檔,答案不會回填原會話;已勾選的類不能取消勾選 |
| 「刪除」實爲隱藏 | 隱藏類會從選擇器消失,但 preset 仍註冊,避免空會話因 preset 消失而無法打開 |
與「僅禁用」的區別:未納入當前會話類的插件,對該會話而言不存在於工具目錄與 prompt,而不只是灰色不可用。
安裝與啓用¶
下列命令摘自倉庫 README;安裝後會把包追加到 profile 的 dsh.profile.bundles。新加的 bundle 只在進程啓動時導入,需重啓 Electron 桌面端或 dsh web 進程;之後編輯類不需要重啓。
# npm 註冊表
dsh plugin --profile web add dsh-plugin-classes
# 直接從 GitHub(無註冊表時)
dsh plugin --profile web add github:Uruz123321/dsh-plugin-classes
# 本地開發目錄
dsh plugin --profile web add link:/absolute/path/to/dsh-plugin-classes
Desktop 等自行管理 node_modules 的 profile 可手工:將包物理複製到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-plugin-classes(junction/symlink 可能導致 @deepseek-ai/* 解析失敗);在 dependencies 與 dsh.profile.bundles 中加入 dsh-plugin-classes 後重啓。
典型用法¶
- 安裝本插件並重啓 DSH(見上)。
- 在側欄打開類管理:創建例如 coding / writing / research / clean 等類,爲每類勾選應包含的插件。
- 新建會話前,在 Composer 左側 chip 勾選需要的類;未開始的會話可隨時改選,preset 即時切換。
- 通過
dsh plugin新裝插件時,在彈出對話框裏指定歸屬類;確認後插件只在所選類中可見,host 層對該 bundle 禁用。 - 若要在已開始的會話裏「臨時」多一套工具,勾一個新類會走單輪臨時會話;需知該輪迴答不會寫回原會話線程。
狀態隨 profile 的 cordis.patch.yml 遷移;複製該文件即可帶走類與會話綁定關係。
兼容性與依賴¶
| 項 | 要求 |
|---|---|
| DSH | >=0.2.0-rc.2 <0.3.0(README 寫明在 0.2.0-rc.2 驗證;0.2.1-rc.x 未測) |
| Node | >=20.18 |
| Profile | web、desktop |
| 前置能力 | 依賴帶 agent presets 的 profile;無 preset 的 profile 不適用 |
本插件使用 DSH 的 settings、agentPresets(register/select/list)、pluginManager、pluginInventory、session 等服務。
安全與信任邊界¶
DSH 插件與宿主同進程、同權限運行。dsh-plugin-classes 會:
- 註冊/退役 agent preset,從而決定各會話掛載哪些插件;
- 在 host 層調用
pluginManager.setBundleEnabled(實現「從 host 基線隱藏插件」); - 僅讀寫本插件行在
cordis.patch.yml中的 volatile config,並讀取插件清單。
README 明確:不髮網絡請求、無遙測、不讀憑據、不寫 profile 配置以外的文件。安裝它等同於授予「重塑其他會話插件組合」的能力,審閱源碼與 MIT 許可證後再裝,與對待 shell 類宿主插件相同。
已知限制與排錯提示¶
- 已開始會話不能改組合;新類僅能通過單輪臨時會話體驗,且不能 untick 已選類。
- 新裝 bundle 需重啓;改類不需重啓。
- 類主要管控 agent 平面插件;host 級插件仍全局可見,除非安裝時通過對話框在 host 層禁用。
- 若誤刪類導致
agent-preset/not-found: Unknown agent preset: cls-xxx、新會話打不開,設計上是「隱藏」而非退役 preset;已損壞時倉庫提供node scripts/repair-sessions.mjs做臨時修復(見 README Troubleshooting)。 - 客戶端插件若報
cannot get property "remote.settings" without inject,需在聲明中列出所用 remote 命名空間(remote.settings、remote.agentPresets等),不能僅寫remote。
結尾¶
若你已在 DSH 裏堆了很多插件,卻希望不同任務只看到各自工具集,dsh-plugin-classes 用 preset 組合把「全局安裝」拆成可按會話選擇的類,並在 UI 裏完成歸類與切換。更多信息見社區目錄頁與源碼倉庫。
- 目錄頁:https://www.skillhub.cn/plugins/Uruz123321/dsh-plugin-classes
- GitHub:https://github.com/Uruz123321/dsh-plugin-classes
社區目錄站點與 DeepSeek / 幻方無官方從屬關係;插件由社區維護,使用前請自行覈對版本與兼容性說明。