dsh-context-domains:在會話頂部按「領域」整塊開關 skill 與 tool

前言

在 DeepSeek Harness(DSH)裏,技能和工具往往隨插件增多而變長:模型可見目錄、工具表、上下文成本都會一起漲。常見做法是手動關某個 skill,或在配置裏改白名單,但一次對話裏往往只需要某一類能力(例如辦公文檔 + 幾塊 MCP),其它條目仍佔着目錄。

下面介紹維護者 guicaiyue 的客戶端插件 dsh-context-domains:把一組 skill 與 tool 歸成一個「領域」,在會話頭正下方用一條橫條整塊加載或卸載,並在設置頁維護成員名單。插件當前版本爲 0.3.2(MIT 許可),可通過 SkillHub 目錄頁 與 GitHub 倉庫 獲取。

這是什麼

dsh-context-domains 是 DSH 的 Web 客戶端插件(dsh.client.platform: web)。它不改變「領域裏可同時裝 skill 和 tool」這一概念;真正加載時,skill 從模型目錄側處理,tool 從工具表側處理。

會話級選擇在 $DSH_HOME/context-domains/state.json 持久化(原子寫、串行寫)。領域數據包括 id、name、可選 icon / description、defaultOn,以及成員列表 members[{type,name}]。

界面與操作

領域條

新會話與進行中的對話,都在會話頭正下方顯示一行領域芯片:格式爲 ● 名稱。綠點表示該領域已加載,灰點表示未加載;單擊即可開關。懸停可展開成員,分「技能」「工具」兩段,名稱以頓號連接。

設置 → 上下文領域

左側爲領域清單,右側爲當前領域的成員(按技能 / 工具分段,僅名字與複選框)。頁面還提供基於全局目錄的建域建議。

README 中的截圖說明:新會話頁可在開會話前就通過頂部芯片定好本次上下文;混裝領域懸停可看到多項技能與工具名稱。

背後怎麼生效

插件在 Host 側對 tool 使用 agent.ctx.tools.restrict({ deny }),並在 schema、查找、執行三處一致移除;另用 agent.ctx.tools.guard(...) 做同步兜底拒絕。

對 skill,在 agent scope 用同名 runtime skill 重投,並設 modelInvocable:false,使條目從模型目錄消失,但 /名字 仍可調用;另有按名拒絕 skill 調用的 guard。若技能被關到「全關」場景,會額外摘掉 skill 工具。

HTTP 接口掛在 /context-domains/api/{health,snapshot,catalog,domains,toggle,exclude,probe},均經 requestRejection 柵欄。POST /toggle 只需 { sessionId, domainId, enabled }(自 v0.3 起不再傳 kind)。

安裝與重啓

推薦使用 npm 預構建包(可跳過 allowBuilds 構建授權):

dsh plugin --profile web add dsh-context-domains

也可從 GitHub Release 安裝 tarball:

dsh plugin --profile web add https://github.com/guicaiyue/dsh-context-domains/releases/latest/download/dsh-context-domains.tgz

本地開發可鏈到工作區:

dsh plugin --profile web add link:/workspace/dsh-context-domains

安裝後需要重啓 dsh。README 註明:改動 Host 側 index.js、lib/**、cordis.patch.yml 必須重啓;僅改 client.js 可走熱更。

運行環境要求(見 package.json):Node >=22.5.0,dsh >=0.2.2-rc.1。

配置項

可在插件配置中調整以下鍵(括號內爲默認值):

鍵 默認 說明
skillGate shadow shadow 按域過濾目錄;coarse 僅在全關時摘 skill 工具;off 不干預
protectedTools ["present"] 永不被領域關掉的工具
allowEmptyToolSet false 是否允許把工具全部關閉
tokenEstimate chars 成本估算口徑(字符/4),僅影響 API 數字
managedPresets [standard, ptc, minimal, cordis] 只治理這些 preset 的會話
manageUnknownPresets false 不認識的 preset 一律退出治理

第三方插件常爲受限 agent 聲明私有 preset(自帶 skill 供給與工具白名單)。若領域插件對這類會話也施加 restrict / guard,可能把對方自帶供應判成違規。README 以 dsh-archify-projects 爲例說明:錯誤治理會導致 skill: archify 被拒、整輪空轉。

默認因此只治理內置四個 preset。不歸管的會話,/snapshot 裏 session.managed 爲 false,界面條子仍可只讀展示,skillGate 爲 unmanaged。

典型用法

  1. 安裝插件並重啓 dsh。
  2. 打開 設置 → 上下文領域,按建議或手工建域,勾選要歸入同一領域的 skill / tool 成員。
  3. 新建會話或進入對話,在頂部領域條點芯片:開會話前即可預定本次上下文;對話中可隨時整塊開關。
  4. 需要排查時,可對運行中的實例請求健康檢查,例如開發容器內:
curl -s -b <cookie> http://127.0.0.1:3080/context-domains/api/health

倉庫提供 npm run verify(語法與單測)、npm run test:integration(需 cookie jar 與運行中的 dsh),以及 node test/e2e/mask.mjs 等端到端腳本;集成測試找不到 cookie 時會整組跳過。

適用場景與注意

適合誰:習慣按任務分批啓用能力包的 DSH 用戶——例如某次只開「辦公 + 記憶 MCP」,其它目錄項整塊卸掉,減少模型可見噪音與誤調用。

權限與安全:插件與 DSH 進程同權運行;安裝前請閱讀源碼與 MIT 許可證,確認領域成員裏包含的工具與技能來源可信。

生態說明:DSH 奉行「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-context-domains 把 skill / tool 按領域打包,在會話頂部一鍵整塊開關,並在設置頁維護成員;Host 側用 restrict、guard 與 skill 遮蔽保證關域後目錄與執行路徑一致。若要安裝或查版本,見 目錄頁 與 GitHub。

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

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

小夜