前言¶
在 DeepSeek Harness(DSH)裏,同一個 profile 往往掛多種 Agent 預設(模式):有的偏對話、有的偏自動化。不同模式對模型可見、可調用的工具集合並不總是一致。若只靠 preset 掛載插件或零散 restrict,很難在 UI 裏按模式點名「禁掉某幾個工具」,且缺少統一的黑名單持久化。下面介紹的插件 @gw/dsh-tools-manager(社區倉庫 1497105876/dsh-tools-manager)專門做這件事:按 preset id 維護禁用名單,只有黑名單,沒有白名單;裝完默認什麼都不禁,具體規則在設置頁或規則文件裏配置。
這是什麼¶
@gw/dsh-tools-manager 是 DSH 社區插件,npm 包名 @gw/dsh-tools-manager,當前資料中版本爲 2.1.100,MIT 許可,維護者對應 GitHub 用戶 1497105876。分類上屬於 admin-security:從管理面限制模型側工具,而不是擴展新能力。
一句話定位:按 Agent 預設(模式)禁用工具。 沒被本插件點名禁用的工具,本插件一概不碰——能否使用、是否出現在列表裏,由 DSH 自身、preset 掛載的插件以及其他插件的 restrict 決定;設置頁因此沒有「已啓用」一欄。
核心功能¶
資料中明確的能力如下。
| 能力 | 說明 |
|---|---|
| 按模式禁用 | 規則按 preset id 索引(如 standard、qq 或任意自定義 id),各模式各管各的 |
| 兩層攔截 | restrict 讓模型看不見工具 schema;guard 讓硬調用被拒。看不見的調不了,會話中途才註冊的工具也能被 guard 攔住 |
| 兜底規則 | 規則文件裏可用 "*" 覆蓋所有未單獨配置的模式 |
| 設置頁 | 左側欄「工具管理」:頂部選模式,下面一行一個工具,右側開關;開關打開表示禁用 |
實現上,兩個 API 都註冊在 agent 自己的 ctx 上,且需全撤全裝:ctx.tools.restrict({ deny }) 只過濾繼承來的工具;ctx.tools.guard(fn) 爲 monotonic,返回字符串即拒絕,不能反向開綠燈。規則裏點了名但當前不存在的工具會原樣保留,便於工具日後出現時立刻生效。
安裝與啓用¶
官方 README 未給出 dsh plugin add github:... 一類命令,安裝需把包放進 profile 的 node_modules(scope @gw),並在 cordis.patch.yml 中註冊插件。
1、把本包裝進對應 profile 的 node_modules/@gw/,或使用符號鏈接(桌面客戶端將路徑中的 web 換成 profiles/desktop):
# web profile(桌面客戶端換成 profiles/desktop)
ln -s /path/to/dsh-tools-manager ~/.dsh/profiles/web/node_modules/@gw/
注意:必須掛裸包名且包要真在 profile 的 node_modules 裏(link 也算)。使用 file:// 會連坐搞掛整個前端 bundle。
2、在 profile 的 cordis.patch.yml 追加:
- insert:
- id: tools-manager
name: '@gw/dsh-tools-manager'
3、重啓 DSH。設置頁左側欄應出現「工具管理」。
運行環境(來自 package.json):Node.js >= 18,DSH / @deepseek-ai/dsh 爲 >=0.2.1-rc.2 <0.3.0。
設置頁用法¶
頂部選擇要管理的模式,下方爲工具表。
| 界面表現 | 含義 |
|---|---|
| 開關關閉、無標籤 | 本插件未禁;該模式當前能用到此工具 |
| 開關變紅並標「已禁用」 | 本插件已禁:模型看不到 schema,硬調會被拒 |
| 灰標籤「不可見」 | 本插件未動它,但在所選模式下不出現——可能屬於別的模式,或被其他插件限制 |
左側開關控制禁用/放開,只有開關可點;從工具名到行尾其餘區域用於展開/收起該工具的 description(來自 schema,禁用前會緩存)。列表按名字排序,禁用不會置頂。
若該模式當前沒有活動會話,頁面會說明清單來自全局註冊表、僅供參考——沒有 agent 實例時無法還原該 preset 的真實工具集。
規則文件¶
持久化路徑:~/.dsh/plugin-data/tools-manager/rules.json(根目錄可由 DSH_HOME 改變)。示例:
{
"version": 2,
"rules": {
"qq": { "deny": ["bash", "subagent_fork"] },
"*": { "deny": [] }
}
}
規則按 preset id 索引,不按 profile 分目錄——preset 名在跨 profile 時仍按 id 唯一對應。首次啓動會把舊版 denyNames 合併遷移爲 v2 的 deny(舊文件原地保留,不再讀取)。
適用場景與注意¶
適合需要在不同 Agent 預設下統一、可審計地「關掉少數危險或無關工具」(例如某模式禁 bash、subagent_fork),又不想維護白名單、也不想替 DSH 猜測「該不該出現」的場景。
使用前請注意:
- 插件在當前 DSH 進程權限下運行,安裝前應自行審閱 源碼 與 MIT 許可證。
- 僅黑名單:不能通過本插件「只允許某幾個工具」;白名單語義需其他機制配合。
- 社區目錄頁 skillhub.cn 上的條目 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;DSH 生態本身是「一切皆插件」的擴展方式。
結尾¶
@gw/dsh-tools-manager 把「按模式禁用工具」做成設置頁 + rules.json,並用 restrict 與 guard 雙層攔截,適合 admin-security 類治理需求。詳情與 issue 見 GitHub:https://github.com/1497105876/dsh-tools-manager;目錄介紹見 https://www.skillhub.cn/plugins/1497105876/dsh-tools-manager。