前言¶
在 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。
典型用法¶
- 安裝插件並重啓 dsh。
- 打開 設置 → 上下文領域,按建議或手工建域,勾選要歸入同一領域的 skill / tool 成員。
- 新建會話或進入對話,在頂部領域條點芯片:開會話前即可預定本次上下文;對話中可隨時整塊開關。
- 需要排查時,可對運行中的實例請求健康檢查,例如開發容器內:
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。