一键配齐逆向分析引擎并体检修复能力缺口
36.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-rea-powerpacknpm 源 · dsh-rea-powerpack 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · ui
装得上吗
静态安装检查通过
未做真实安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-rea-powerpack @ 0.1.4
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.1.6-alpha.1 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0 · 最新 0.2.1-rc.5 兼容
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 03:19:44
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 73 处,展示前 58 条)
- 读取本地文件lib/index.js:267
const info = await stat(path) - 读取本地文件lib/index.js:277
const text = await readFile(join(home, 'logs', 'powerpack.log'), 'utf8') - 读取本地文件lib/index.js:305
const manifest = JSON.parse(await readFile(join(dirname(LAUNCHER), '..', 'package.json'), 'utf8')) - 执行外部命令来自配置/变量lib/index.js:409
const child = spawn(node, [LAUNCHER, profile, 'mcp'], { - 读取本地文件lib/index.js:922
raw = JSON.parse(await readFile(body.path.trim(), 'utf8')) - 读取本地文件lib/index.js:929
raw = JSON.parse(await readFile(candidate, 'utf8')) - 发起网络请求lib/client.js:741
return fetch(API_PREFIX + '/' + route, init).then(function (response) { - 写入剪贴板lib/client.js:795
function writeClipboard(text) { - 写入剪贴板lib/client.js:798
return navigator.clipboard.writeText(value); - 写入剪贴板lib/client.js:2164
return writeClipboard(text).then(function () { - 写入剪贴板lib/client.js:2228
return writeClipboard(dir).then(function () { - 执行外部命令来自配置/变量lib/engines.js:68
execFile(command, args, { windowsHide: true, ...options }, (error, stdout, stderr) => { - 读取本地文件lib/engines.js:112
return statSync(path).isFile() - 读取本地文件lib/engines.js:120
return statSync(path).isDirectory() - 读取本地文件lib/engines.js:129
if (isAbsolute(name)) return existsSync(name) ? name : null - 读取本地文件lib/engines.js:231
return JSON.parse(await readFile(path, 'utf8')) - 写入本地文件lib/engines.js:238
await mkdir(dirname(path), { recursive: true }) - 写入本地文件lib/engines.js:241
await writeFile(temporary, content, 'utf8') - 写入本地文件lib/engines.js:242
await rename(temporary, path) - 删除本地文件lib/engines.js:244
await rm(temporary, { force: true }).catch(() => {}) - 写入本地文件lib/engines.js:252
await mkdir(dirname(logPath(home)), { recursive: true }) - 写入本地文件lib/engines.js:254
await appendFile(logPath(home), line, 'utf8') - 读取本地文件lib/engines.js:465
return readdirSync(directory).filter((name) => expression.test(name)).map((name) => join(directory, name)).sort() - 读取本地文件lib/engines.js:527
return readdirSync(directory) - 写入本地文件lib/engines.js:803
await mkdir(home, { recursive: true }) - 删除本地文件lib/engines.js:806
await rm(probeFile, { force: true }) - 发起网络请求lib/engines.js:843
const connectRequest = http.request({ - 发起网络请求lib/engines.js:858
secure.once('secureConnect', () => resolvePromise({ request: () => https.request(target, { createConnection: () => secure, headers: { 'user-agent': US - 发起网络请求lib/engines.js:862
const direct = https.request(target, { headers: { 'user-agent': USER_AGENT } }) - 发起网络请求lib/engines.js:868
return Promise.resolve({ request: () => (target.protocol === 'https:' ? https : http).request(target, { headers: { 'user-agent': USER_AGENT } }), stre - 发起网络请求lib/engines.js:883
const request = opened.request() - 删除本地文件lib/engines.js:946
await rm(partial, { force: true }).catch(() => {}) - 删除本地文件lib/engines.js:949
await rm(destination, { force: true }).catch(() => {}) - 删除本地文件lib/engines.js:953
await rm(partial, { force: true }).catch(() => {}) - 删除本地文件递归lib/engines.js:993
await rm(destination, { recursive: true, force: true }) - 读取本地文件lib/pin.js:59
return normalizePin(JSON.parse(await readFile(pinPath(home), 'utf8'))) - 写入本地文件lib/pin.js:69
await mkdir(dirname(path), { recursive: true }) - 写入本地文件lib/pin.js:71
await writeFile(temporary, JSON.stringify(value, null, 2) + '\n', 'utf8') - 写入本地文件lib/pin.js:72
await rename(temporary, path) - 读取本地文件lib/pin.js:153
return statSync(path).isFile() - 读取本地文件lib/pin.js:236
const manifest = JSON.parse(await readFile(join(profileDir, 'node_modules', PACKAGE, 'package.json'), 'utf8')) - 执行外部命令来自配置/变量lib/pin.js:288
const child = spawn(process.execPath, [entry, 'mcp'], { cwd: profileDir, env, windowsHide: true, stdio: ['pipe', 'pipe', 'pipe'] }) - 写入本地文件lib/pin.js:408
await mkdir(directory, { recursive: true }) - 读取本地文件lib/pin.js:410
if (!existsSync(manifestFile)) { - 写入本地文件lib/pin.js:411
await writeFile(manifestFile, JSON.stringify({ name: 'rea-powerpack-staging', private: true, version: '0.0.0' }, null, 2) + '\n', 'utf8') - 读取本地文件lib/pin.js:421
entries = await readdir(root, { withFileTypes: true }) - 读取本地文件lib/pin.js:430
const info = await readFile(join(full, 'package.json'), 'utf8') - 删除本地文件递归lib/pin.js:439
await rm(stale.path, { recursive: true, force: true }).catch(() => {}) - 读取本地文件lib/reload.js:38
const [bytes, info] = await Promise.all([readFile(file), stat(file)]) - 读取本地文件lib/reload.js:38
const [bytes, info] = await Promise.all([readFile(file), stat(file)]) - 读取本地文件lib/reload.js:50
current = await readFile(snapshot.file) - 写入本地文件lib/reload.js:56
await writeFile(temporary, snapshot.bytes) - 写入本地文件lib/reload.js:57
await rename(temporary, snapshot.file) - 读取本地文件lib/rea-mcp.mjs:156
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) - 执行外部命令来自配置/变量lib/rea-mcp.mjs:167
const output = execFileSync(execPath, ['-v'], { - 读取本地文件lib/rea-mcp.mjs:208
if (!existsSync(absolute) || !statSync(absolute).isFile()) return - 读取本地文件lib/rea-mcp.mjs:208
if (!existsSync(absolute) || !statSync(absolute).isFile()) return - 执行外部命令来自配置/变量lib/rea-mcp.mjs:268
const child = spawn(chosen.path, [SELF_PATH, ...argv.slice(1)], {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
为 DeepSeek Harness 打造的全功能 REA(逆向工程智能体):13 个托管分析引擎、固定版本的 MCP 工具服务器、能力诊断器、设置界面。
最近更新
在 GitHub 查看全部 →v0.1.42026-10-27
· 0.1.4 — 安装文档对齐「已发布到 npm」
dsh-rea-powerpack 已在 npm 上:<
· README:加 npm 徽章;仓库行同时给 GitHub 与 npm;「安装」段改为 npm 优先(桌面 UI 填包名 / dsh plugin --profile web add dsh-rea-powerpack),源码安装降级为开发者路径;「日常维护」升级方式同步。
· ARCHITECTURE §9 发布段与版本历史同步;CHANGELOG 记录 0.1.3 的发布方式(granular token + bypass 2FA;发布后约 90 秒 packument 才可见,期间 409 属正常)。
· 无运行时代码变更。
· 实测(本机,REA 6.8.0 + 13 个托管引擎)
| 指标 | 值 |
| --- | --- |
| MCP 工具 | 229 |
| 可用工具组 | 50 / 76 |
| 可用组内工具 | 142 |
| 引擎就绪 | 13 / 13(矩阵 21 行)|
CI:4 腿全绿(windows/ubuntu × node 22/24)。
v0.1.32026-10-27
0.1.3 是首个带 CI 的版本:4 个 job(windows-latest / ubuntu-latest × Node 22 / 24)全绿。
· 修了什么(真实的红→绿过程)
首推 CI 在 ubuntu leg 挂了:引擎矩阵与状态目录解析默认跟随 process.platform,而引擎清单是 Windows 定向的(Linux 上 forPlatform('linux') 是空表)。
· composeEnv(home, settings, platform = process.platform) 与 powerpackHome(profileDir, platform = process.platform, env = process.env) 改为 platform/env 可注入,默认行为不变;
· test/engines.test.mjs:composeEnv 的 6 处调用钉住 'win32',powerpackHome 覆盖 win32 / darwin / linux 三条分支;
· test/catalog.test.mjs:默认平台断言从「等于 ENGINES.length」改为 forPlatform() === forPlatform(process.platform);
· test/docs.test.mjs + .github/workflows/ci.yml:矩阵改成 windows + ubuntu 双平台,Windows leg 是真正的目标平台,Linux leg 只是保证纯逻辑测试与宿主无关;
· README 安装段改为诚实版:npm 尚未发布,唯一可用路径是 clone 后 node dev/install-plugin.mjs --repo .,并加 CI / License / Node / 版本徽章。
· 实测数字(本机 Windows,REA 6.8.0)
| 指标 | 值 |
| --- | --- |
| MCP 工具 | 229 |
| 可用工具组 | 50 / 76(无引擎基线 42 / 77) |
| 托管引擎 | 13 / 13 verified |
| 握手耗时 | ~0.5 s |
完整内容见 CHANGELOG.md。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-rea-powerpack
把 REA 在 Windows 上做到最强:补齐分析引擎、固定 MCP 版本、体检能力缺口,并在 DSH 设置里用一张卡片把这一切说清楚。
REA 是逆向分析 MCP 服务器:原生二进制、托管代码、Electron/JavaScript、固件、浏览器目标都能拆。但它只是适配层—— Ghidra、JADX、WABT、frida 这些引擎得在这台机器上真的能跑。
仓库:<https://github.com/Zhishulo/dsh-rea-powerpack> · npm:<https://www.npmjs.com/package/dsh-rea-powerpack>(源码、issue 与发行版都在这里)
已收录于 DSH 插件市场(awesome-dsh-plugin #10097,2026-10-28 合并)——在 dshmarket 里搜 dsh-rea-powerpack 即可安装。
dsh-rea-powerpack 干三件事:
1. 引擎:按矩阵检测 / 安装 / 卸载分析引擎,合成 env 与 PATH 喂给 REA;
2. 版本:把 rea-agents 精确固定,检查新版、影子预检、可回滚;
3. 体检:调用 REA 的 doctor,把「缺什么、为什么缺、怎么修」按 reason 分组列出来。
展开完整文档(README 剩余 1 节)
dsh-rea-powerpack
把 REA 在 Windows 上做到最强:补齐分析引擎、固定 MCP 版本、体检能力缺口,并在 DSH 设置里用一张卡片把这一切说清楚。
REA 是逆向分析 MCP 服务器:原生二进制、托管代码、Electron/JavaScript、固件、浏览器目标都能拆。但它只是适配层—— Ghidra、JADX、WABT、frida 这些引擎得在这台机器上真的能跑。
仓库:<https://github.com/Zhishulo/dsh-rea-powerpack> · npm:<https://www.npmjs.com/package/dsh-rea-powerpack>(源码、issue 与发行版都在这里)
已收录于 DSH 插件市场(awesome-dsh-plugin #10097,2026-10-28 合并)——在 dshmarket 里搜 dsh-rea-powerpack 即可安装。
dsh-rea-powerpack 干三件事:
1. 引擎:按矩阵检测 / 安装 / 卸载分析引擎,合成 env 与 PATH 喂给 REA;
2. 版本:把 rea-agents 精确固定,检查新版、影子预检、可回滚;
3. 体检:调用 REA 的 doctor,把「缺什么、为什么缺、怎么修」按 reason 分组列出来。
亮点
- 一张卡片说清全部状态:REA 版本、pin 来源、引擎就绪数、最近体检、更新策略,以及每个引擎的 tier / 版本 / 状态徽章 / 动作按钮。
- 安装即校验:带 sha256 的引擎强制校验,半装状态不进清单、不进环境变量。
- 用户设置优先:你手动设的 REA_ 环境变量永远赢,被保留的变量名会列出来。
- 更新不赌运气:新版本先在影子目录里握手体检(serverInfo 版本 + 工具数 ≥ 200),通过了才进配置档;进配置档后复检失败自动回滚,坏版本进 withheldBuilds。
- 失败可解释:所有错误走稳定错误码 + 中英双语文案;未知码原样显示,不吞。
- 无构建步骤:浏览器半边是 lazy-CJS(window.__ModuleLoader__.load),只用 React + 内联样式,配色跟随宿主主题变量。
装好之后,REA 变成什么样(本机实测)
数字来自本机握手探针(dev/verify-mcp.mjs → dev/.v2.json,REA 6.8.0, Java 25 + Ghidra 12.1.4 + 托管引擎就位):
| 指标 | 实测值 | 说明 |
| MCP 工具总数 | 229 | 装引擎不改变工具清单,改变的是「哪些组真的能用」 |
| 可用工具组 | 50 / 76 | 剩余 26 组:11 组要先 open_binary(target_required)、13 组本平台不支持(unsupported_host)、2 组缺 JEB(provider_missing)|
| 可用组内工具 | 142 | doctor 的 toolsInAvailableGroups |
| 引擎就绪 | 13 / 13 | 矩阵 21 行:13 项 Windows 可用(全部 verified),另 8 项 REA 本身不支持 Windows |
| 握手耗时 | 约 0.5 s | initialize + 分页 tools/list |
无引擎基线(同一台机器、未注入任何 REA_,裸启动 REA): 42 / 77 组可用,按 reason 分布 target_required 11 / unsupported_host 13 / provider_unavailable 7 / provider_missing 4。注入托管引擎后: provider_unavailable 7 → 0,provider_missing 4 → 2(只剩 JEB,商业软件不预装)。
组数 77 → 76 是 JEB 相关两个组在注入后合并了一组,工具总数始终是 229。
复现基线:
REA_POWERPACK_HOME=/tmp/rea-empty node dev/verify-mcp.mjs --launcher "<repo>/lib/rea-mcp.mjs" --list-tools # 空目录 = 不注入任何引擎
产物见 dev/BASELINES.md(两组基线:42/77 与 50/76,附复现命令)与 dev/baseline-no-engines.json(含命令、时间戳与完整 unavailable 列表)。
dev/ 只随本仓库分发、不进 npm 包,复现命令在 clone 出来的仓库根目录执行。
一句话:powerpack 不扩充 REA 的能力清单,而是让清单里「本该能用」的组真的可用:引擎类 provider 缺口由矩阵补齐;剩下的缺口被逐条解释成「先开目标 / 本平台不支持 / 缺某个 provider」,而不是一句「工具不可用」。JEB 不在引擎矩阵内,需要自备 JEB 客户端。
安装
要求 Node >= 22.19.0(REA 自身要求),DSH 桌面版 / web / tui 均可。
发布状态:已发布到 npm —— <https://www.npmjs.com/package/dsh-rea-powerpack> (首版 0.1.3,当前 0.1.4)。
npm 安装(推荐)
桌面版:设置 → 插件 → 添加,来源填包名 dsh-rea-powerpack。
web / tui:
dsh plugin --profile web add dsh-rea-powerpack
dsh plugin --profile web ls
Desktop 的 profile 由 Electron 独占管理,dsh plugin --profile desktop 会被拒绝 ——这是 DSH 的硬约束,桌面用户请走上面的 UI。
从源码安装(开发者 / 想改代码)
junction 装法:改仓库里的代码不用重装,刷新即生效。
git clone https://github.com/Zhishulo/dsh-rea-powerpack.git
cd dsh-rea-powerpack
node dev/install-plugin.mjs --repo . --dry-run # 先看它准备改什么
node dev/install-plugin.mjs --repo . # 真正安装
git clone 若报 schannel: failed to receive handshake,是本地代理/网络抖动,
重试 2–3 次即可,与本仓库无关。
桌面版也可以走 UI:侧栏 插件 → 添加,来源填刚 clone 下来的目录(file:<绝对路径>)。
dev/install-plugin.mjs 只做四件事(--profile <dir> 覆盖默认的 ~/.dsh/profiles/desktop,--uninstall 反向执行):
1. 备份 profile 的 package.json / cordis.patch.yml / pnpm-lock.yaml 到 <profile>/.rea-powerpack-backup/<时间戳>/;
2. 在 profile 里 pnpm add "link:<repo>" --save-exact(junction 安装:改仓库代码不用重装);
3. 把 dsh-rea-powerpack 写进 dsh.profile.bundles,并把旧的 dsh-rea-agents 从 bundles 移除(两个 bundle 都会挂一行名为 rea 的 MCP client,同时开会撞车);
4. 清掉 profile cordis.patch.yml 里残留的 - id: rea-agents 行(原文件留在备份里)。
装完重启 DSH:bundle 列表与 patch 层在 boot 时一次性合成。
插件向配置注入两行:dsh-rea-powerpack(卡片宿主)与 rea-powerpack-mcp(名为 rea 的 MCP 服务,所以工具仍是 mcp__rea__)。
插件不安装分析引擎以外的任何东西,也不会改写你的全局环境变量或注册表。
首次配置
1. 打开卡片:设置 → 插件 → REA 强化 tab。
2. 装 REA 本体:卡片会显示「未安装」;点「安装」按当前 registry 最新版精确定装(pnpm add rea-agents@x.y.z --save-exact)。
3. 装引擎:概览会告诉你「引擎就绪数 x/y」。先在矩阵里装 tier 0/1 (Java、Ghidra → adb、apktool、jadx、wabt、python、frida)。
依赖顺序见 docs/ENGINES.md。
4. 跑一次体检:「能力体检 → 运行体检」,确认 REA 实际暴露的工具数(正常 ≥ 200)。
5. 选更新策略:默认 notify(只提示)。想随时跟进可改 auto-idle。
状态目录与引擎目录
状态目录默认 %LOCALAPPDATA%\rea-powerpack(REA_POWERPACK_HOME 可覆盖),卡片里的「维护」区会显示当前真实路径:
| 文件 | 内容 |
| engines.json | 引擎清单:每个引擎的 path/version/verified,以及 root |
| settings.json | updatePolicy、engineRoot、toolTimeoutMs、checkIntervalHours、locale |
| pin.json | 当前固定的 REA 版本、pin 来源、可回滚的上一版、被拒版本 withheldBuilds |
| state.json | 最近一次体检与最近一次热重载的结果(卡片「最近体检时间」读它) |
| logs/powerpack.log | JSONL 日志:每次安装/校验/升级/回滚/重载一条 |
引擎默认装在 ...\rea-powerpack\engines\<id>\;在设置里改 engineRoot 可换盘。
移动或删除引擎目录后,点一次「全部校验」,卡片会把对应行标成 missing,不会继续引用一个不存在的路径。
引擎矩阵
| id | 名称 | tier | 环境变量 | 安装 |
| java | Java (JDK) | 0 | JAVA_HOME | 手动(外部) |
| ghidra | Ghidra | 0 | GHIDRA_INSTALL_DIR | 手动(外部) |
| adb | Android Platform Tools | 1 | REA_ADB_PATH | 托管 zip |
| apktool | Apktool | 1 | REA_APKTOOL_COMMAND | 托管 github-latest |
| jadx | JADX headless MCP | 1 | REA_JADX_MCP_JAR | 托管 file(sha256) |
| wabt | WABT | 1 | REA_WABT_BIN_DIRECTORY | 托管 zip |
| python | Python 3.12 | 1 | PATH | 托管 winget |
| frida | Frida tools | 1 | PATH | 托管 pip |
| objdump | GNU objdump | 2 | REA_OBJDUMP_COMMAND | 手动(外部) |
| rizin | Rizin | 2 | REA_RIZIN_COMMAND | 手动(外部) |
| dotnet | .NET SDK 8 | 2 | PATH | 托管 winget |
| ilspy | ilspycmd | 2 | REA_ILSPY_CMD_PATH | 手动(外部) |
| mitmproxy | mitmdump | 2 | REA_MITMDUMP_COMMAND | 托管 pip |
另有 8 个引擎 REA 不支持 Windows(tshark、capinfos、binwalk、unblob、 sigrok、pwntools、wakaru、process-capture):卡片会以 unsupported_host 明确列出,不提供安装按钮,免得装了个用不上的东西。
对应的 Windows 不可用能力(doctor 会按 unsupported_host 归组):
| 能力 | 平台 | 说明 |
| Mach-O / plist / Interface Builder / asset catalog / keyed archive、macOS 原生 UI 截取与调用 | macOS | 依赖 Xcode 与系统框架 |
| 固件提取(Binwalk / Unblob)、信号解码(sigrok)、pwntools 核心检查 | Linux | 依赖 Linux 工具链与 prlimit |
| pcap 抓包解析(tshark / capinfos) | Linux(Windows 走 Wireshark 自带工具,不在矩阵内) | REA 需要显式指定二进制 |
| JavaScript 反混淆恢复(Wakaru) | Linux x64 | — |
| 进程捕获 capture_process_scenario | Linux / macOS | Windows 无 PTY 捕获面 |
| JEB 反编译 | 任意(需自备 JEB 客户端) | 不属于引擎矩阵,卡片标 provider_missing |
完整矩阵、状态语义与合成规则见 docs/ENGINES.md。
更新与回滚
- 检查:走配置档自己的 registry,只读,不改 pin。
- 升级:影子目录安装 → 影子体检(版本 + 工具数)→ 正式安装 → 复检 → 固定。
失败自动回滚;坏版本进 withheldBuilds。
- 回滚:回到 pin.retained.from;回滚同样体检。
- 自动策略:notify / auto-idle / manual,忙碌时不会自动动。
- 热重载:能热就热(mode: hot),不能就明说 restart-required。
细节、决策矩阵、离线行为见 docs/UPDATES.md。
日常维护:升级、卸载、重启
- 升级插件本体(npm 安装):桌面版在 插件页 对该插件点更新;web/tui 跑 dsh plugin --profile web add dsh-rea-powerpack(会拉到 registry 最新版)。
从源码安装的话:cd 进仓库 git pull,再跑一次 node dev/install-plugin.mjs --repo .。
- 卸载插件:桌面版在 插件页 移除;web/tui dsh plugin --profile web remove dsh-rea-powerpack。
移除后 cordis.patch.yml 里的两行(宿主 + MCP)随之失效,不会留下半个服务。
- 重启 DSH:改了 MCP 行(引擎/版本/超时)后先点「维护 → 热重载 MCP 行」,成功会显示 mode: hot;显示 restart-required 时再重启 DSH。
插件代码自身更新(lib/.js)必须重启 DSH,模块表在启动时构建。
- 清理:卸载插件不会删除引擎与状态目录(那是你花时间装的东西)。
要彻底清掉,手动删除 %LOCALAPPDATA%\rea-powerpack 即可。
故障排查
先看 docs/TROUBLESHOOTING.md:里面有 20 个错误码的含义与处理方式,以及「卡片不出现」「引擎 broken」「体检与引擎不一致」等场景。
维护区还能一键导出诊断报告(Markdown)和复制体检报告。
导出诊断报告
| 想要 | 入口 | 拿到什么 |
| 体检缺口 | 能力体检 → 复制报告 | GET /doctor 的 JSON:按 reason 分组、remedy、工具名列表 |
| 完整诊断 | 维护 → 导出诊断报告 | GET /report 的 Markdown:state 快照、引擎矩阵、pin、最近体检与重载、最近日志 |
| 原始引擎清单 | 打开状态目录里的 engines.json | 每个引擎的 path/version/verified |
| 完整日志 | %LOCALAPPDATA%\rea-powerpack\logs\powerpack.log | JSONL,一行一个事件 |
报告里没有你的源码、密钥或分析目标内容;它只有引擎路径、版本号、pinning 状态和 doctor 的缺口摘要,可以直接贴进 issue。
隐私与安全
- 只监听 loopback:/rea-powerpack/ 只接受 127.0.0.1 / ::1,其他来源一律返回 403 {code:"loopback_only"}(test/http.test.mjs 守着这条)。
- 卡片不联外网:浏览器半边只有一个 fetch 调用点,且只能拼 /rea-powerpack/ 前缀;没有外部 origin、没有 CDN、没有遥测(test/client-bundle.mjs 断言)。
- 唯一的出网行为:① 检查/升级 REA 时读取配置档自己的 pnpm registry 元数据;② 安装托管引擎时从 lib/catalog.js 里写死的官方 URL 下载(jadx 带 sha256 强校验;没有官方校验和的下载项会在报告里如实说明)。不主动上报任何数据。
- 不改全局环境:不写注册表、不改系统 PATH;合成出的 env 只在启动 REA 子进程时生效。你手动设置的 REA_ 永远优先,被保留的变量名会出现在 REA_POWERPACK_OVERRIDES 里。
- 权限:用 winget 装 Python/.NET 时可能弹 UAC,那是 Windows 包的正常提示。
- 不装引擎也能用:REA 仍能正常启动;依赖缺失的工具返回 provider_unavailable,卡片会告诉你缺哪个引擎、装它要多久。
开发与测试
npm test # node --test test/ (catalog / engines / pin / http / client / docs)
npm run lint # node --check 逐个核心文件
npm run check:client # 在 fake module-loader 下加载 lib/client.js 并校验 DICT 对齐
- 测试全部离线:不联网、不调用 pnpm、不写用户目录(临时目录用 os.tmpdir())。
- 仓库自带 dev/ 验收工具链(只随仓库分发,不进 npm 包,见 dev/README.md): node dev/gate.mjs --full 一次跑完跨切面验收(dev/acceptance.mjs)、HTTP 路由探针(dev/http-probe.mjs)与单测;dev/verify-mcp.mjs 独立做一次真实 stdio MCP 握手并读 binary_session 的工具可用性;dev/install-plugin.mjs 把本仓库 link: 进配置档(带备份)。
- 浏览器半边没有构建步骤,改完 lib/client.js 刷新页面即可;但模块表在启动时构建,个别情况需要重启 DSH。
- 结构约定见 ARCHITECTURE.md(契约)与本仓库 docs/。
许可
MIT,见 LICENSE。REA 与各分析引擎各自遵循其上游许可;本插件不重新分发任何引擎二进制。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Zhishulo/dsh-rea-powerpack
一键配齐逆向分析引擎并体检修复能力缺口
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目