前言¶
在 DSH 里挂上 REA 这类逆向工程 MCP server 时,常常会一次性暴露上百个工具。它们的 JSON Schema 会随每次模型请求进入上下文,占用可观的 token 预算;而在不调试二进制的日常对话里,这些工具往往用不上。
常见做法是临时卸掉 server 或改 preset,但切换成本高,也不容易在界面上看到「这次对话到底省了多少上下文」。REA Switch 把「是否需要 REA」做成输入框旁的本机开关:关闭后立刻在执行层拦截调用,并从 live agent 的工具列表与 MCP 相关提示词中隐藏 REA,同时在 chip 上显示隐藏工具数量与 token 估算。
下面介绍插件定位、能力与安装启用方式;事实以 GitHub 仓库 README 为准。社区目录页:yankess233/rea-switch。
这是什么¶
REA Switch(包名 @local/rea-switch,当前版本 1.3.0)是由维护者 yankess233 发布的 DSH 本地 composer 插件,分类为 admin-security。它不改变 REA server 进程本身,而是在 DSH 侧提供可见、可点的偏好:需要时一键开启,不需要时一键关闭,并在关闭时处理执行拦截、schema 掩码与提示词 shadow 三层,减少模型看到无关工具与说明的机会。
宿主要求 DSH 0.2.2-rc.1(engines.dsh:>=0.2.1-rc.5 <0.3.0-0),Node.js >=24.9.0,默认面向名为 rea 的 MCP server(名称可配置)。许可证 MIT。
核心功能¶
输入框 chip¶
插件在 conversation.input.left 注册紧凑开关,位于权限/计划 chip 旁。点击即可切换,支持键盘焦点与 aria-pressed。chip 会反映读取中、已开启、已关闭、离线、部分隐藏、不可用等状态,并在关闭且 mask 正常时展示隐藏工具数与约略 token 数(approxTokens = round(toolBytes / 4),仅为估算)。
关闭时的三层处理¶
- 执行层 guard:全局
tools.guard在关闭时拦截mcp__<server>__*,以及对应该 server 的list_mcp_resources、list_mcp_resource_templates、read_mcp_resource;参数不明时保守拦截。 - 按 agent mask:通过
tools.restrict({ deny })从每个 live agent 的可见 schema 中移除继承的 REA 工具名。 - 提示词 shadow:用空的
mcp:<server>section 遮蔽 server 描述;重写mcp-resource-servers列表并保留其他 server;追加关闭提示。
若 agent 自行 scope 注册的工具落在 host mask 覆盖范围外,插件会检测并将 mode 标为 partial,不谎报「全部隐藏」;执行层 guard 仍按当前开关值拦截。
状态持久化与本机 API¶
默认状态文件为 <DSH_HOME>/rea-switch.state.json,原子写入;文件不存在时首次运行默认开启。损坏、不可读、版本不符、符号链接、超大文件等异常按关闭处理。
仅在 Web 服务绑定 loopback 时注册控制路由前缀 /dsh-local/rea-switch:GET /state 读取快照,POST /set 接受 {"enabled": true|false}(JSON,请求体上限 1024 字节)。同源与 Host 校验、拒绝常见代理头等防护见 README「安全模型」。
语言¶
界面以中文为主,英文按页面/浏览器语言回退。
安装与启用¶
资料中的安装方式为在 DSH profile 里以本地包依赖接入,而非单独的 dsh plugin add 命令。前置条件:DSH 0.2.2-rc.1、Node >=24.9.0、已配置的 REA MCP server(默认注册名 rea),插件源码位于 <WORKSPACE>/plugins/rea-switch。
方式一:link(开发工作区)¶
在 profile 的 package.json 中加入:
{
"dependencies": {
"@local/rea-switch": "link:<WORKSPACE>/plugins/rea-switch"
}
}
在 profile 目录执行:
pnpm install
工作区路径移动或重命名后需重新安装。
方式二:tarball¶
在插件目录打包:
cd <WORKSPACE>/plugins/rea-switch
pnpm pack
将生成的 tarball 写入 profile 依赖后同样 pnpm install:
{
"dependencies": {
"@local/rea-switch": "file:C:/path/to/local-rea-switch-1.3.0.tgz"
}
}
插入 Cordis 补丁¶
通过 cordis.patch.yml 启用:
- insert:
- id: rea-switch
name: '@local/rea-switch'
自定义 MCP server 名称或状态文件路径时:
- insert:
- id: rea-switch
name: '@local/rea-switch'
config:
serverName: rea
stateFile: C:/path/to/rea-switch.state.json
保存配置后重新加载 DSH profile 或重启 DSH,并刷新 Web 页面。chip 出现在已有会话输入框左侧;新会话 Hero 空态可能暂时无 chip,进入已有对话即可看到。
验证控制接口(将 <PORT> 换为当前 DSH Web 端口):
curl.exe -s http://127.0.0.1:<PORT>/dsh-local/rea-switch/state
典型用法¶
点击 chip 即在开启/关闭之间切换。开启时显示绿点与「开」;关闭时显示空心点与「关」,并给出隐藏工具数量与 token 估算文案(具体数值取决于当前注册表中的 REA schema 投影)。
切换过程中按钮进入 busy/pending,关闭完成前不显示「全部隐藏」的终态文案。若出现「部分工具仍可见」类 degraded 提示,执行层 guard 仍会拦截 REA 相关调用;partial 与 guard 表示 mask 未完全到位,不代表开关失效。
需要脚本或自动化时,可在同一台机器、loopback 绑定前提下调用上述 HTTP API;请勿将 DSH Web 暴露到非 loopback 而不在代理层拦截 /dsh-local/rea-switch。
适用场景与注意¶
适合谁:经常在 DSH 里挂载 REA、又希望在非逆向调试对话中节省上下文 token 的开发者;需要在界面上直观看到 REA 工具面开闭状态与估算成本时。
安全边界(必读):README 明确说明 REA Switch 是本机偏好开关,不是访问控制或权限边界。关闭它不会停止 MCP server 进程,也不阻止本机其他进程直接访问该 server;带 shell 的 preset 等路径仍可能旁路 DSH 工具调度器。硬隔离应在 preset、OS、网络或 MCP 配置层处理。反向代理暴露 DSH Web 时须在代理层拦截控制路径并启用认证。
安装前:插件以当前 DSH 进程权限运行,安装前应阅读仓库源码、LICENSE 与 SECURITY.md,确认与你的工作区与合规要求一致。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
REA Switch 把「这次对话要不要 REA」收敛成输入框旁的一键偏好,并在关闭时同步处理拦截、schema 掩码与提示词 shadow,辅以 chip 上的工具数与 token 估算。若你已在 profile 中维护本地插件依赖,按上文 link 或 tarball 方式接入并配置 cordis.patch.yml 即可试用。
- 目录页:https://www.skillhub.cn/plugins/yankess233/rea-switch
- 源码与文档:https://github.com/yankess233/rea-switch