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。

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

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

小夜