@gw/dsh-tools-manager:按 Agent 預設禁用工具

前言

在 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。

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

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

小夜