dsh-plugin-classes:按會話隔離 DSH 插件組合

前言

在 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 後重啓。

典型用法

  1. 安裝本插件並重啓 DSH(見上)。
  2. 在側欄打開類管理:創建例如 coding / writing / research / clean 等類,爲每類勾選應包含的插件。
  3. 新建會話前,在 Composer 左側 chip 勾選需要的類;未開始的會話可隨時改選,preset 即時切換。
  4. 通過 dsh plugin 新裝插件時,在彈出對話框裏指定歸屬類;確認後插件只在所選類中可見,host 層對該 bundle 禁用。
  5. 若要在已開始的會話裏「臨時」多一套工具,勾一個新類會走單輪臨時會話;需知該輪迴答不會寫回原會話線程。

狀態隨 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 / 幻方無官方從屬關係;插件由社區維護,使用前請自行覈對版本與兼容性說明。

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

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

小夜