前言¶
在 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。