DeepSeek Harness 插件

lifeopsgo/dsh-capability-toggle-plugin

Star 数 ★ 3 分类 工具与能力 收录于 2026-08-27

在 DSH WebUI 中为技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫提供会话、项目与全局三级控制,并在当前 agent 作用域内强制执行。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

dsh-capability-toggle-plugin

在 DSH WebUI 中控制 agent 能力,并在运行时真正强制执行。

English · 简体中文

会话 · 项目 · 全局 —— 蓝色对勾 = 开,红色叉 = 关,虚线横杠 = 未设。

这是什么

一个 DeepSeek Harness(DSH)WebUI 插件,在输入栏旁增加能力开关。它可以在会话、项目或全局层级控制技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫。

停用不是界面上的假过滤:能力会在模型下一步从可见能力面中消失,强行调用也会在执行时被拦截。

兼容的 DSH 版本

本版本面向 DSH 0.2.0-rc.1,全部 DSH peer 依赖均精确锁定到该 RC。Host 已迁移到 agent/created 生命周期、持久化 configEditor 写入和 Loader volatile 配置更新;每次写入都会重新协调全部仍存活的 agent binding。

DSH 版本 状态 验证方式
0.2.0-rc.1 支持 Host 与 Client 类型检查、363 项自动化测试、生产构建、框架链接校验、组合 profile 检查和浏览器验证

本版本不声明兼容其他 DSH 版本。

快速开始

需要 Node.js ^22.19.0 或 ≥ 24.0.0(与 DSH 0.2.0-rc.1 相同)。

dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v2.0.0
dsh --profile web web

刷新页面,在 agent 空闲时点击输入栏 ➕ 旁边的开关按钮。若使用其他 profile,请替换 web。

# 升级或降级:tag 换成 releases 页面上的任意版本
dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v2.0.0

# 卸载
dsh plugin --profile web remove dsh-capability-toggle-plugin

功能说明

三级生效模型

每项能力都有三个独立层级:

会话  ›  项目  ›  全局  ›  默认(启用)

最近的明确设置优先。未设会向下一层跟随;三层都未设时保持启用。行尾徽标始终显示三级综合后的真实结果。

按钮只显示当前状态:点击在开 ↔ 关之间切换,点击右上角清除角标可回到未设。

能力分类

Tab 控制内容
技能 单个模型可调用技能,包含从会话工作区发现的项目级技能(.dsh/skills、.agents/skills)
MCP MCP 服务器;展开行可查看成员工具
工具 单个模型可见工具及其指导段
提示词 经过安全筛选并探测实际存在性的提示词注入项
安全 审批升权和 5 个可选安全守卫

强制机制

所有机制只作用于当前 agent,不修改全局注册。

能力族 强制方式
tool / mcp 通过 ctx.tools.restrict({ deny }) 移除;强行调用被拒绝
skill 用同名 modelInvocable:false 运行时技能覆盖
prompt 用空文本覆盖,或通过 suppressRuntimeContext() 抑制
approval scoped 审批请求直接返回 rejected
guard tools/pre-execute 对命中调用执行拦截或确认

安全控制

关闭审批升权后,该 agent 的所有审批请求都会被拒绝,但不会修改系统 /permission 设置。

安全守卫默认关闭,按需启用:

守卫 动作
只读模式 拦截文件写入、新建和编辑
保护密钥 拦截常见密钥文件与凭据访问
危险 shell 高风险 shell 命令需确认
破坏性 git 可能丢失历史或工作区内容的 git 命令需确认
外网出站 网络工具与外连 shell 操作需确认

用量统计

技能、MCP 服务与工具行会显示一个小徽章,标明本会话模型调用了多少次(「调用 7 次」)。计数在面板打开时于每轮结束后刷新,只存活于单个 agent 生命周期且不持久化——与安全守卫的「命中 N 次」徽章采用同一保留策略。

统计的是请求次数而非成功执行次数:被守卫拦截或转确认的调用同样计入,因为「模型想要用这个能力」本身就是值得看见的信号。守卫是被调用匹配而非被调用,因此沿用自己的徽章、不显示用量;提示词与审批行同样不显示。

面板偏好

面板标题旁的折叠箭头展开三个显示偏好,存入 localStorage,因此刷新页面与重启浏览器后仍然保留:

偏好 作用
标签页显示「启用数 / 总数」 tab 徽章由纯总数改为分数形式(67/106),一眼看出每族能力的启用比例;无论开关与否,悬停提示都以文字给出两个数字。
显示调用统计 控制上文的每行用量徽章是否显示。
显示的层级列 将网格收窄为仅会话级、会话级 + 项目级,或三级全显。

分数只把已生效的守卫计入启用数。guard 行复用同一个 disabled 字段表示「已激活」,与其他默认启用族的方向相反——所以审批开关打开、五个守卫都未激活时,安全 tab 显示 1/6 而不是 6/6。

收窄层级列只影响显示:三级优先级解析照常运行,被隐藏的项目级或全局级设定仍然生效。每行的徽章与层级开关始终反映综合解析后的状态——默认启用族显示「生效中/已停用」,守卫显示「守护中/未启用」——因此隐藏一列不会隐藏任何生效影响。名称列会吸收释放出来的宽度;布局由 CSS 变量驱动,因此与窄屏适配保持对齐。

其他行为:agent 运行时,会写入设定的控件锁定——每行的层级开关、其清除徽章、以及批量菜单——但浏览保持可用,因此搜索框、层级列下拉、tab 切换、行展开照常工作;关闭弹窗或跨轮次后状态仍保留;界面语言跟随 WebUI。

规划

以下为规划中、尚未实现:

  • 跨项目同步配置 — 从其他项目复制或引用项目级配置,无需逐个项目重新配置。
  • 能力调用统计 — 已于 v1.2.0 实现:技能、MCP 服务与工具行会以徽章显示本会话被模型调用的次数。
  • 分数格式的 tab 计数 — 已于 v1.3.0 实现:tab 徽章改为「已启用 / 总数」,面板标题旁的折叠箭头提供三个显示偏好。安全 tab 的 guard 只有已生效才计入分子,其反转的 disabled 字段不会虚增启用数。
  • 可自定义默认项的设置菜单 — 在设置菜单中暴露插件自身的配置项,例如新发现能力的默认状态(当前三层都未设的能力解析为启用,但可选的安全守卫默认不启用)。
  • 只显示已启用 / 只显示已禁用 — 在搜索框旁增加状态过滤(搜索当前只匹配名称与描述)。安全守卫需要与分数计数同样的处理:guard 复用 disabled 表示「已激活」,因此「只显示已禁用」不能把实际生效中的守卫列进去。该过滤还会缩小批量操作的作用范围,因为批量作用于当前可见的所有行。
  • 筛选与全选 — 已于 v1.1.0 实现:工具栏搜索框可筛选行,各层级的批量菜单可对当前可见的所有行执行启用/停用/清除。
  • 筛选全选后批量操作 — 已于 v1.1.0 与筛选功能一同交付(搜索缩小范围,批量作用于当前可见行)。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。