按会话开关 REA 工具与指令,省下上下文开销
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aurumple/dsh-rea-toggle该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-rea-toggle
English · 中文
每个会话一个开关,决定 REA(reverse-engineer-anything)MCP 服务器的上下文到底会不会进入模型。
REA 注册了 207 个工具 schema,外加一段好几 KB 的服务器指令。dsh-mcp-client 把这两样都放在全局层,于是每个智能体每次请求都要为它们付出代价——不管这一轮跟逆向工程有没有关系。
装上这个插件后,输入框下方会出现一个小胶囊:
- REA on(绿色)——和装插件之前完全一样。模型能看到 REA 的工具和指令。
- REA off(灰色)——那 207 个工具 schema 和 mcp:rea 指令块离开模型上下文,下一步生效。
开关按会话生效。 每个会话记住自己的状态,新会话默认关闭。这正是关键所在:一个聊 Web 应用的会话,不该因为别的会话需要,就为 207 个逆向工程 schema 买单。子代理继承创建它的会话的状态,所以在逆向工程工作里派活,不会悄悄把子代理弄坏。
同一个开关也在键盘上:/rea off、/rea on、/rea status、/rea toggle——都作用于你输入命令的那个会话。
不卸载任何东西,也不重启任何东西。MCP 连接一直保持;只是模型不再被告知这些工具存在。
展开完整文档(README 剩余 1 节)
dsh-rea-toggle
English · 中文
每个会话一个开关,决定 REA(reverse-engineer-anything)MCP 服务器的上下文到底会不会进入模型。
REA 注册了 207 个工具 schema,外加一段好几 KB 的服务器指令。dsh-mcp-client 把这两样都放在全局层,于是每个智能体每次请求都要为它们付出代价——不管这一轮跟逆向工程有没有关系。
装上这个插件后,输入框下方会出现一个小胶囊:
- REA on(绿色)——和装插件之前完全一样。模型能看到 REA 的工具和指令。
- REA off(灰色)——那 207 个工具 schema 和 mcp:rea 指令块离开模型上下文,下一步生效。
开关按会话生效。 每个会话记住自己的状态,新会话默认关闭。这正是关键所在:一个聊 Web 应用的会话,不该因为别的会话需要,就为 207 个逆向工程 schema 买单。子代理继承创建它的会话的状态,所以在逆向工程工作里派活,不会悄悄把子代理弄坏。
同一个开关也在键盘上:/rea off、/rea on、/rea status、/rea toggle——都作用于你输入命令的那个会话。
不卸载任何东西,也不重启任何东西。MCP 连接一直保持;只是模型不再被告知这些工具存在。
它到底做了什么
token 开销来自两个不同的地方,走两条不同的路径,所以一种机制不够用:
| 目标 | 机制 |
| 工具 schema | tools.restrict({ deny }) 在每个智能体自己的上下文里调用。ToolRuntime.view() 过滤该作用域从全局层继承的内容,面向模型的 schema 列表在每次组装时都从这个视图重建。保留的 run_code 传输位于可过滤层之外,因此不受影响。 |
| 指令文本 | dsh-mcp-client 把服务器指令注册为名为 mcp:<server> 的提示词段落,顺序为 MCP_SERVERS(3100)。同名的作用域段落会遮蔽全局段落——这是 systemPrompt.section() 的书面约定(「作用域段落遮蔽同名全局段落」),不是实现细节——空段落在渲染时会被丢弃(renderPrompt 只保留 text.length > 0)。因此注册这个名字并返回 '',就能只对那个智能体移除该块。 |
两者都是作用域注册,所以销毁它们能精确恢复之前的状态。这就是为什么拨动开关不需要重启,也不需要重载。
覆盖范围包括子代理:agent/created 是串行的,注册表会等待它,所以在其中安装会赶在任何提示词组装之前落地。
安装
dsh plugin --profile <profile> add github:aurumple/dsh-rea-toggle
或者指向一个本地检出:
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-rea-toggle
bundle 行 id 是 rea-toggle,包名是 dsh-rea-toggle。
用法
| 位置 | 作用 |
| 输入框下方的胶囊按钮 | 点击切换当前会话。绿色 = 开,灰色 = 关,红色边框 = 宿主没有响应。 |
| /rea off · /rea on | 设置当前会话的开关状态。enable / disable 也可以。 |
| /rea toggle | 切换当前会话。 |
| /rea status | 报告当前会话的开关状态。 |
新会话默认关闭。第一次打开某个会话时,该会话会被记住;你从未动过的会话保持默认值,不会被写入。
开关状态记在 $DSH_HOME/rea-toggle.json(通常是 ~/.dsh/rea-toggle.json),以 session id 为键,重启后仍然有效。文件保留最近变更的 500 个会话;更早的会话直接回落到默认值。
配置
每个字段都可选。
yaml
- id: rea-toggle
name: dsh-rea-toggle
config:
server: rea # one MCP server to govern; default "rea"
servers: [rea, ghidra] # or several; wins over server when present
defaultEnabled: true # new conversations start ON instead of off
改 server 就按同样的规则管辖另一个 MCP 服务器:工具前缀 mcp__<server>__,指令段落 mcp:<server>。这套机制是通用的,所以只要某个 MCP 服务器的工具由 dsh-mcp-client 桥接,就能用——REA 只是当初催生它的那个场景。
defaultEnabled 是给想恢复插件安装前行为的人准备的:打开它,没人切换过的会话表现和没装这个插件时完全一样。
HTTP API
Client 端通过 webServer 上的一条固定路由与 Host 端通信(和其他 bundle 的形态一样,所以不走 /api 前缀围栏)。会话在 GET 里是 session=,在 POST 里是 body 字段:胶囊按钮始终知道自己显示的是哪个会话,而一个不说自己属于哪个会话的请求,没法替它回答。
GET /rea-toggle/state?session=<id>
-> { session, enabled, known, defaultEnabled, servers, agents, tools, statePath }
GET /rea-toggle/state (no session: a summary)
-> { session: null, defaultEnabled, servers, conversations, agents, tools, statePath }
POST /rea-toggle/state
body: { "session": "<id>", "enabled": true | false } (omit enabled to flip)
-> the per-conversation status object
known 表示这个会话是否被切换过;为 false 时,enabled 就是 defaultEnabled,还没写入任何东西。agents 是该会话当前被覆盖的活跃智能体数量;tools 是管辖服务器中被识别出的工具数量,这也是「它到底找没找到 REA」的诚实答案——如果读到 0,说明服务器没有以那个名字连接(而且保持 0 是安全的,因为 restrictableNames 是可拒绝集合,不是过滤后的视图)。
范围与限制
- 默认每行一个服务器。 其他 MCP 服务器不受影响;用 servers 管控多个。
- 隐藏,不是卸载。 MCP 连接保持在线,REA 进程继续运行。开关关闭时,模型就是够不到它——包括通过 run_code 间接访问。这是有意为之:留第二条路只会省下一半 token。
- 按对话保存状态,进程内生效。 位置在 apply() 时从文件读取,每次变更时写入。两个 DSH 实例共用一个配置档时,各自读一次,彼此不做实时同步。
- 它不删除任何东西。 关掉一键可逆,卸载插件会解除全部注册。
自己验证
要验证的是工具从模型上下文中消失,而不只是藏在 UI 里。到模型自身视图暴露的地方去查:
1. 开关开着,让智能体列出它的工具——mcp__rea__ 条目都在(标准 REA 安装有 207 个)。
2. 关掉,再问一次——它们没了,按名字调用会返回 Error: unknown tool "mcp__rea__binary_session"。
3. 再开回来——它们原样回来。
4. 打开第二个对话,查看它的工具列表:它是关的,而第一个对话仍然是开的。这正是这个插件区别于全局开关的地方。
开发 bash
npm test # node:test, no dependencies
测试套件拿真实的 apply() 跑,对着它依赖的三份契约的小模型(工具视图、提示词段落合并、智能体注册表)。它固定住这些行为:「关」移除了什么,「开」精确还原之前的状态,新子代理在第一步之前就被覆盖,位置在重启后仍然保留,HTTP 接口会校验输入。
许可证
MIT
一个开关(每个对话一个),决定 REA(reverse-engineer-anything)MCP 服务器的上下文是否进入模型。
REA 注册了 207 个工具 schema,外加一段几千字的服务端说明。
dsh-mcp-client 把它们放在全局层,所以每个智能体、每次请求都在为它们付 token —— 不管这一轮到底要不要逆向。
装上这个插件后,聊天输入框下方会多一个小胶囊:
- REA 开(绿色)— 和装之前完全一样,REA 的工具与说明对模型可见。
- REA 关(灰色)— 这 207 个工具 schema 和 mcp:rea 说明块从模型上下文里消失,下一步请求立即生效。
开关按对话独立:每个对话记住自己的位置,新对话默认关。这正是它存在的理由——一个聊 Web 应用的对话,不该因为另一个对话要逆向就一直背着 207 个逆向 schema。子智能体继承创建它的那个对话的位置,所以在逆向对话里派活不会把子智能体悄悄废掉。
同样的开关也在键盘上:/rea off、/rea on、/rea status、/rea toggle ——全都只作用于你敲命令的那个对话。
不卸载任何东西,也不重启。MCP 连接照旧,只是模型不再被告知这些工具存在。
它到底做了什么
token 成本来自两个不同的地方,走的是两条不同的路径,所以一种机制不够:
| 目标 | 机制 |
| 工具 schema | 在每个智能体自己的 ctx 上调 tools.restrict({ deny })。ToolRuntime.view() 用这层限制过滤它从全局层继承来的工具,而模型可见的 schema 列表每次组装都从这个 view 重建。保留名 run_code 挂在可过滤层之外,不受影响。 |
| 说明文本 | dsh-mcp-client 把服务端说明注册成 prompt section,名为 mcp:<server>,order 为 MCP_SERVERS(3100)。同名 section 在子作用域会遮蔽全局的(SystemPrompt.assemble 按名合并),而空 section 在渲染时被丢弃(renderPrompt 只保留 text.length > 0)。所以在 agent 作用域注册同名 section 并返回 '',就只对那个 agent 抹掉这一段。 |
两者都是作用域注册,dispose 之后状态精确还原 —— 这就是切换不需要重启、不需要刷新的原因。
覆盖范围包括子智能体:agent/created 是串行且被注册表 await 的事件,在它里面安装就落在任何组装之前。
安装 bash
dsh plugin --profile <profile> add github:aurumple/dsh-rea-toggle
或者指向本地目录: bash
dsh plugin --profile <profile> add link:/本目录绝对路径
bundle 行 id 是 rea-toggle,包名是 dsh-rea-toggle。
使用
| 位置 | 作用 |
| 输入框下方的小胶囊 | 点一下翻转本对话。绿=开,灰=关,红框=宿主没应答。 |
| /rea off · /rea on | 设定本对话的位置(enable / disable 亦可)。 |
| /rea toggle | 翻转本对话。 |
| /rea status | 报告本对话的位置。 |
新对话默认关。你第一次把某个对话打开时,那次选择才会被记下来;从没碰过的对话一直走默认值,不写盘。
位置存在 $DSH_HOME/rea-toggle.json(通常是 ~/.dsh/rea-toggle.json),按 session id 索引,重启后保持。文件保留最近改动的 500 个对话,更早的自动回落到默认值。
配置
字段全部可选。
yaml
- id: rea-toggle
name: dsh-rea-toggle
config:
server: rea # 要控制哪个 MCP server,默认 rea
servers: [rea, ghidra] # 也可以给多个;存在时优先于 server
defaultEnabled: true # 新对话默认改为「开」
改了 server 就按同样规则控制另一个 MCP server:工具前缀 mcp__<server>__、说明 section mcp:<server>。机制本身是通用的,所以任何由 dsh-mcp-client 桥接的 MCP server 都能用 —— REA 只是促成它的那个场景。
defaultEnabled 是给想退回装插件前行为的人用的:打开它,没被手动切过的对话就和没装这个插件时完全一样。
HTTP 接口
Client 那一半通过裸 webServer 上的 exact 路由说话(和已装的几个 bundle 同样的形状,不走 /api 前缀栅栏)。对话在 GET 里是 session=,在 POST 里是 body 字段:胶囊永远知道自己显示的是哪个对话,而一个不说自己是谁的请求没法替它回答。
GET /rea-toggle/state?session=<id>
-> { session, enabled, known, defaultEnabled, servers, agents, tools, statePath }
GET /rea-toggle/state (不带 session:汇总)
-> { session: null, defaultEnabled, servers, conversations, agents, tools, statePath }
POST /rea-toggle/state
body: { "session": "<id>", "enabled": true | false } (省略 enabled 表示翻转)
-> 该对话的状态对象
known 表示这个对话有没有被切过;为 false 时 enabled 就是 defaultEnabled,盘上还没有它的记录。
agents 是当前这个对话里被覆盖的 agent 数,tools 是识别到的该 server 工具数。
tools 是「它到底认没认到 REA」的诚实答案 —— 读作 0 说明服务器没以这个名字连上(restrictableNames 是「可拒绝集合」而不是过滤后的视图,所以关着的时候这个数照样是准的)。
边界
- 默认一行只管一个 server。别的 MCP server 照旧;要管多个就用 servers。
- 是隐藏,不是卸载。MCP 连接还在,REA 进程照跑。关着的时候模型够不到它 ——包括通过 run_code 间接够到。这是有意的:留第二条路等于只省了一半 token。
- 状态按对话,但仍在进程内。apply() 时读一次文件,每次改动写一次。多个 DSH 实例共用一个 profile 时各自读一次,互不实时同步。
- 它不删除任何东西。关掉一键可逆,卸载 bundle 会把所有注册都撤掉。
自己验一遍
要验的是「工具从模型上下文里没了」,不是「UI 上藏起来了」。在暴露模型视角的地方查:
1. 开关开着,让 agent 列一下工具 —— mcp__rea__ 都在(原版 REA 是 207 个)。
2. 关掉,再列一次 —— 全没了;直接按名字调用会返回 Error: unknown tool "mcp__rea__binary_session"。
3. 再打开 —— 原样回来。
4. 开第二个对话再看它的工具清单:它是关的,而第一个对话仍然是开的。这一条才是它区别于全局开关的地方。
开发 bash
npm test # node:test,无依赖
测试用一个小模型模拟它依赖的契约(工具视图、prompt section 合并、带归属关系的 agent 注册表),驱动真实的 apply()。它钉住的是:新对话默认关、一次切换只影响那一个对话、子智能体继承父对话的位置、「开」精确还原、「关」抹掉了什么、位置跨重启后保持状态,HTTP 接口负责校验输入。
还有一条回归守卫:一次 tools/change 只允许做有界的注册/注销。曾经在 reconcile 的锁之外去卸注册,会带着开着的锁重入事件监听器,一次外部事件放大成约 4 万次 register/dispose,把整个界面卡死。这类问题在测试里表现为超时,所以直接用计数守住。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
aurumple/dsh-rea-toggle
按会话开关 REA 工具与指令,省下上下文开销
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,270已汉化DSH
70.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。