dsh-workspace-scope:按工作区启停 Skill 与全局 MCP 的 DSH 插件

前言

在 DeepSeek Harness(DSH)「一切皆插件」的思路下,装进环境的 Skill 和全局 MCP 服务器会越积越多。麻烦在于,这些能力默认对所有会话可见:每个新会话的启动上下文都带着全套工具清单,而单个工程往往只用得到其中几个。

dsh-workspace-scope 解决的就是这件事:让每个工作区(工程)自己决定新会话暴露哪些 Skill 和 Host 全局 MCP。效果类似 VS Code 装了很多语言插件,但每个工程只启用用得到的那几个。下面介绍它的定位、核心功能、安装方式和具体用法。

这是什么

dsh-workspace-scope 是一个 DeepSeek Harness 插件,由 Ri0n72Y 维护,MIT 许可,当前版本 0.4.0。README 徽章显示适配 DeepSeek Harness 0.1.3-alpha.1,作者同时声明插件正在积极开发中、版本更新频繁。

一句话定位:按工作区(工程)启停 Skill 与 Host 全局 MCP。它管理的范围是明确的——只处理 Host 全局注册、由 Agent 继承的 MCP 服务器;Agent / Preset 自己作用域内注册的 MCP 不归它管。界面上的开关最终落成工作区根目录的一份配置文件。

核心功能

按已核实的 README 和 package.json,插件提供:

  1. 按工作区(工程)启用/禁用 Skill 与 Host 全局 MCP 服务器;
  2. 新建会话界面的「工作区能力」弹窗:搜索过滤、逐行开关、点行展开详情(技能显示描述,全局 MCP 显示工具数量)、底部「全部启用」「全部禁用」快捷按钮,所有改动即时保存;
  3. 配置写入工作区根目录的 .dsh-scope.json,在首次真实 prompt assembly 时读取并锁定;
  4. Host 全局 MCP 的有效排除集合变化时,先更新 Agent 原生的 tools.restrict(),再让 DSH 重做一次完整 prompt assembly,native 与 PTC 两种工具呈现使用同一策略;
  5. Skill 在每个 pre-step 根据锁定配置刷新;被排除但原本允许用户调用的技能,仍可用 /技能名 手势临时加载;
  6. 配置读取兼容 default(全部启用)与 blacklist(列表为排除集);
  7. web 客户端 UI 注入(dsh.client.platformweb,注入 @deepseek-ai/dsh-client-ui-slots)。

安装与启用

资料里唯一核实到的安装命令来自仓库 package.json 的 deploy 脚本,是本地路径安装:先构建产物,再把当前目录注册为 web profile 的插件。

pnpm run prepare && dsh plugin --profile web add .

--profile web 与插件的 web UI 注入是对应的。截至写作时,没有核实到 npm install -gdsh plugin add github:... 这类远程安装命令,具体安装方式请以仓库 README 为准。

环境要求:Node 引擎要求 ^22.19.0 || >=24.0.0;peer 依赖为 @deepseek-ai/cordis ^4.0.1react ^18.2.0

典型用法

打开「工作区能力」弹窗

入口在新建会话界面:输入卡右侧工具行里的「工作区能力」按钮。已进行的对话不显示这个入口。

弹窗按「技能」和「全局 MCP 服务器」两个分组列出全部可管理条目,每组标题可以单独折叠。操作方式:

  1. 搜索框过滤条目;
  2. 每行一个开关,打开即启用;
  3. 点行本身展开详情:技能显示描述,全局 MCP 显示工具数量;
  4. 底部「全部启用」「全部禁用」一键切换;
  5. 所有改动即时保存。

配置文件

保存后,配置写入当前工作区根目录的 .dsh-scope.json,格式如下:

{
  "default": {
    "mode": "whitelist",
    "skills": ["<skill-name>"],
    "mcps": ["<server-name>"]
  }
}

字段含义:

  • mode:字符串,保存时固定为 whitelist;读取时兼容 default(全部启用)与 blacklist(列表为排除集);
  • skills:启用的技能名列表;
  • mcps:启用的 Host 全局 MCP 服务器名列表。

锁定时机与生效方式

经过上面的步骤,配置已经落盘,但它不会立刻生效。配置会在该会话第一次真正开始模型请求时锁定:新建界面里的改动仍能作用于即将开始的对话,而之后再修改 .dsh-scope.json,不会改变已经锁定的会话。

以一次新会话为例,生效过程是:

  1. 首次带模型 turn 的 prompt assembly 读取并锁定配置;
  2. 计算 Host 全局 MCP 的有效排除集合,若发生变化,先更新 Agent 原生 tools.restrict(),再重做一次完整 prompt assembly;若没有变化,沿用当前 assembly;
  3. Skill 在每个 pre-step 按锁定配置刷新。

如果某个技能被排除但仍属于「原本允许用户调用」的类别,在会话里输入 /技能名 仍可临时加载它。

适用场景与注意

适合的场景:在同一个 DSH 环境里切换多个工程,安装的 Skill 和全局 MCP 不少,希望每个工程的新会话只携带需要的部分,控制启动上下文体积。

使用前有几点需要留意:

  1. 插件只管理 Host 全局注册、由 Agent 继承的 MCP;Agent / Preset 作用域内注册的 MCP 不受影响;
  2. 配置锁定后,改文件对已锁定的会话无效,要换组合就开新会话;
  3. mode 字段保存时固定为 whitelist,手工改动文件时需要留意读取时的兼容行为;
  4. 插件版本更新频繁,README 徽章标注适配 DeepSeek Harness 0.1.3-alpha.1,升级 DSH 前先确认兼容性。

另外提醒:插件以当前 dsh 进程的权限运行,安装第三方插件前建议先过一遍源码和许可证。dsh-workspace-scope 采用 MIT 许可,README 与 package.json 均有标明;仓库接受 issue,改动前先读 CONTRIBUTING.md 再提 PR。

小结

dsh-workspace-scope 把「装了什么」和「这个工程用什么」分开:能力全局安装,暴露范围按工作区决定,配置落在一个 .dsh-scope.json 文件里,随时可改、可入库。对维护多个 DSH 工程的人来说,它能直接压低每个新会话的启动上下文负担。

  • GitHub 仓库:https://github.com/Ri0n72Y/dsh-workspace-scope
  • 社区插件目录页(独立站点,与 DeepSeek / 幻方无官方从属关系):https://www.skillhub.cn/plugins/Ri0n72Y/dsh-workspace-scope
羽毛球分组比赛记分
小程序二维码

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

小夜