# @deeeed/metamask-harness 中文文档

规范地址：https://npmcn.com/package/%40deeeed/metamask-harness/

版本：0\.96\.11
npm 元数据更新时间：2026-11-10T15:01:18.766Z
中文译文更新时间：2026-11-11T19:39:06.836Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40deeeed/metamask-harness
原文对照：https://npmcn.com/package/%40deeeed/metamask-harness/?lang=original
项目主页：https://github.com/MetaMask/experimental-metamask-harness#readme
源码仓库：https://github.com/MetaMask/experimental-metamask-harness

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.4 MB，509 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：16 个
- 首次发布：2026-07-03T10:40:02.460Z
- 最新版本发布：2026-11-10T15:01:18.524Z
- 近 30 天下载量：12806（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：255（近 12 个月 255 个）

## 中文简介

一个CLI用于操作MetaMask扩展、移动和Core并产生可审查的食谱证据。 在检查出内运行;自动检测出产品、槽、端口和运行时路径.

## 安装

```sh
npm install @deeeed/metamask-harness
```

也可以使用：`pnpm add @deeeed/metamask-harness`、`yarn add @deeeed/metamask-harness`、`bun add @deeeed/metamask-harness`

## README

# 毫米- 强度

用于操作MetaMask扩展、移动和核心并生产的一个CLI 可审查的食谱证据。 在一次检查中运行; 产品,插槽,端口, 和运行时路径自动检测.

-   **行动:** 一个打字操作.
-   **食谱 :** 可重复使用、参数化的行动图和所谓的食谱.

通用图形引擎和证据计划 [农场](https://farmslot.io/) 软件包. `mm-harness` 拥有MetaMask运行时控制和域能.

## 项目任务助手

注册的项目可以使用 `farmslot task init`, (中文(简体) ), `mark`, (中文(简体) ), `verify` 财务报告和审定财务报表 `closeout`, (中文(简体) ), `farmslot review checklist` 财务报告和审定财务报表 `domain`,以及 `farmslot recipe quality`。 。 。 . MetaMask 供应商提供 diff 检查门、 学习目的地、 审查 规则、均等运行时间和选入建议。 选择任务中注册的项目 初始化;其工具和政策随任务而保留。 见 [农场地命令参考](https://farmslot.io/docs/reference/recipe-cli)。 。 。 .

## 每日发布

同样的食谱可以验证昨天的域名更改 或发布 后面那个 `main`编辑 `mms-recipe-qa` 技能冻结变化范围 标准; 团队库提供烟雾和可重复使用的旅行; 此 CLI 运行 并保留断言、追踪和捕捉.

使用安装的技能 `references/domain-qa.md` 用于窗口/范围输入和 报告政策。 范围选择和时间安排在控制之外。 发现 食谱通过 `run --list` 财务报告和审定财务报表 `run <recipe> --describe`,然后跟随 锁定版本 `help --json` 组成和漂移诊断。 调整a 试验释放的秘方,不改变释放或削弱释放 标准。 需要发展手段的内部行动不能 证明在未修改的释放文物上的行为.

## 从零开始

没有退房了吗? `mm-harness setup-base` 复制MetaMask产品重置为一 标准布局和运行每个 repo 的 依赖性安装 — 不安装此功能 启动所需的软件包 :

```bash
npx -p @deeeed/metamask-harness mm-harness setup-base
```

它产生,在 `~/dev/metamask` 默认:

```text
metamask-extension-1..N   metamask-mobile-1..N   core-1..N
```

在终端中不带旗帜运行, 它会询问您想要哪些工程以及有多少 副本。 传出全部跳过提示的旗帜——这就是脚本, CI,母工具应引用:

```bash
mm-harness setup-base --only core --counts core=1
mm-harness setup-base --dir ~/work/metamask --counts extension=3,mobile=1,core=2
mm-harness setup-base --only mobile --dry-run        # plan only, changes nothing
```

基准目录按优先级解决 : `--dir`,则 `$MM_HARNESS_BASE_DIR`, (中文(简体) ), 然后保存首选项,然后 `~/dev/metamask`。成功运行会保存基础 使用目录和计数,所以以后通过它们——检查 `--show-config`,清除 `--reset-config`。重运行是安全的:已存在 克隆被取出,从不重置,也从不删除.

**范围围栏.** 它克隆并安装依赖性. 没有别的——没有平台 工具链,没有模拟器,没有 `.env` 文件,没有构建。 工作流程上载是一个 快速; 环境准备 `mm-harness doctor`,这正是它的位置 下个点数.

`setup-base` 是单曲上的普通命令 `mm-harness` 进入点。 其工作 留在一可读贝壳叶中 `npx -p` 提供同样的命令 在全局安装之前.

## 安装

```bash
npm install -g @deeeed/metamask-harness@latest
mm-harness --version
mm-harness doctor
```

`doctor` 只读. `doctor --fix` 修理自带运行时状态,但 不启动应用程序、创建证书或选择钱包固定.

```bash
mm-harness doctor --fix
mm-harness fixtures init --from /secure/path/wallet-fixture.json
# Disposable public testing only; never fund this wallet. It writes account
# hardhat0 (public key), which cannot trade on Hyperliquid testnet:
mm-harness fixtures init --dev
# For Perps orders, replace it with a funded fixture:
mm-harness fixtures init --from <funded-fixture> --force
```

使用 `mm-harness update` 用于更新已公布的安装。 新任务使用 `farmslot task init` 在写入任务标记之前保留其CLI、提供者和库输入。 运行 `farmslot task verify <task-dir>` 在恢复前检查这些投入。 全球升级保留了现有任务记录的工具和标记.

## 运行

```bash
# Extension
mm-harness launch
mm-harness launch --sidepanel

# Mobile
mm-harness launch ios
mm-harness launch android

# Any checkout
mm-harness status
mm-harness stop
mm-harness logs
mm-harness debug
mm-harness reload                 # Mobile Metro reload / Extension CDP refresh
mm-harness fixtures set

# Delete the current wallet, then reapply the canonical fixture from clean state.
mm-harness fixtures reset
```

延长 `launch` 保持它的增量监视器运行。 刷新活动 成功重建后的页面; 使用 `launch --build` 只为明确 类似生产型的LavaMoat重建.

macOS 在登录会话锁定时停止绘制可见窗口 。 在锁定的Mac上:

-   标题扩展或网络应用( 结束) `run`编号 :`call` 拒绝使用 `SESSION_LOCKED` 在其运行时间检查中,在启动或驱动浏览器之前,而不是在截图和UI动作上拖延;
-   a headful web-dapp 启动,包括重用运行的浏览器,拒绝同样的方式.

扩展版没有无头模式,因此解锁Mac. 对于网页应用程序,解锁或重新启动其无头浏览器(`mm-harness launch --adapter terminal --headless`,或设置 `TERMINAL_HEADLESS=1` 发射前: `TERMINAL_HEADLESS=1` 当一个有头槽的浏览器仍在运行时,单靠自己是无用的. 咖啡因使Mac保持清醒,但没有解锁.

### 扩展浏览器

`RECIPE_HARNESS_BROWSER` 选择未打开的扩展主机浏览器 :

| 数值 | 浏览器 |
| --- | --- |
| `auto` (默认) | 退机的 Playwright Chrome 用于测试 当它开始和油漆在这个机器上, 否则谷歌 Chrome |
| `cft` | 测试颜色, 从未被探测过 : 汽车存在前的行为 |
| `chrome` | 谷歌颜色 |
| `/abs/path` | 那个可执行文件 |

`RECIPE_HARNESS_CHROME_BIN=/path` 仍然覆盖一切并用作 给出。 谷歌克罗姆忽略 `--load-extension`,所以绳子加载的建筑 超过`Extensions.loadUnpacked`,与 `--enable-unsafe-extension-debugging`(中文(简体) ) 输入插槽 并检查ID与显示的密钥。 其它 该配置文件中的用户扩展已禁用, 因为 `--disable-extensions-except` 用于测试的 Chrome; 扩展不能是企业政策指针 被禁用,所以发射会发出警告,并用运行证据记录它们.

单位 `auto`,带有新剖面探测器的发射 发射机的启动方式(头,通过macOS上的发射服务). 这个 判决在 `~/.cache/farmslot/browser-probe.json`: 保存崩溃 直到 OS 构建或浏览器更改; 仅超时的探测器被重试 30分钟后 同时发射等待每个浏览器构建一个探测器 联合国 `<cache>.<key>.locks/` 缓存旁边编号的门票目录; a 超过3分钟的持有者算不上已经走了 所以一个比它活得更久的探测器 与下一个重叠,在从一个使用一个 `.lock` 文件重复探测器是可能的。 车票从未被取出 绑:每个探测器增加两个小文件,一个坠毁的持有者未释放 罚单暂住(一旦其过程消失,票就不再被挡住). 为了收回 空格,在没有启动或医生运行时删除锁目录 : `rm -r ~/.cache/farmslot/browser-probe.json.*.locks`。 。 。 . 在冷藏地上 探测器可长达80秒 显示一个小型(约480x360)浏览器窗口; `doctor --adapter extension` 运行同样的探测器.

在Google Chrome由政策管理的Mac上, `auto` 使用克罗梅 未读取这些政策的测试, 因此无法打开强制扩展 窗口。 只读 MDM 管理的首选项 (单位:千美元)`/Library/Managed Preferences/com.google.Chrome.plist` 及其每个用户 抄录于 `/Library/Managed Preferences/<user>/`(没有) `defaults` 用户集 本身; 已安装的外延(`ExtensionInstallForcelist`, (中文(简体) ), `ExtensionSettings`)或被强制签入(`BrowserSignin: 2`, (中文(简体) ), `ForceBrowserSignin`计数为管理; 将策略存储为数据或日期 价值被视为不存在。 如果测试的克罗姆没有开始 在那里画画,发射结束 `BROWSER_UNLAUNCHABLE` 而不是说 回到管理中的克罗姆;出路是 `RECIPE_HARNESS_BROWSER=chrome` (接受强制延长可能开放) ,或者装入量较少的机器。 医生列出强制 扩展名 ids,其中包含可以读取的名称(最大努力,只读: 槽记录,或操作员自己的Chrome配置文件夹). 插槽配置文件 在管理的 Chrome 上创建它,并带有重设配置的警告.

然后保留浏览器类型,其配置是用它创建的,直到 重新设置配置文件( e)`mm-harness fixtures set` 或者说 `fixtures reset`:

-   在 Chrome 测试上创建: 当前测试的测试选择 (Playwright的升级被跟踪并重新被复制);它移动到Google Chrome 只有那座建筑被证明会崩溃,就永远不回来;
-   在 Google Chrome 或一个明确的路径上创建: 二进制; 如果删除, 发射失败,并说如何恢复而不是切换浏览器;
-   创建于 `RECIPE_HARNESS_CHROME_BIN`,输入路径 `RECIPE_HARNESS_BROWSER`, (中文(简体) ), 或发射装置 `--chrome-bin` 直接 : 每晚都会有二进制 `auto` 发射,即使它是一个克罗姆 测试建设.

保留在Chrome上用于测试的插槽,该插槽是“不交出帧”(a) 即时判决, 保留在 Chrome 测试上) 移动到 Google Chrome 不重设配置文件 : 使用 `RECIPE_HARNESS_BROWSER=chrome`。 。 。 . 这个简介是Google Chrome的简介,后来是 `auto` 继续发射 谷歌克罗姆. 换个方式打开一个旧浏览器的配置,所以 重设配置文件 .

在此浏览器记录存在之前创建的配置文件没有记录, 因此 第一个 `auto` 发射探测器像一个新的剖面图,可能移动到Google Chrome.

`mm-harness doctor --adapter extension` 显示当前选择; 每次发射 写给 `temp/recipe/runtime/browser-resolution.json` 使用浏览器 程序身份,并运行证据(`product-provenance.json`名称 浏览所驱动的运行在检查该精确进程后仍然服务于 CDP 移植已执行的运行 。 CDP 端口的拥有者是命名为 简介 `SingletonLock`,并且只有锁名这个主机 程序在锁被写入之前开始(一个再利用的pid没有),它 在配置文件中保存打开的文件 。 那个证据是有用的 `lsof`什么样的macOS船; 没有它,发射停止 并有一个解释。 启动时间被精确比较为 `ps -o lstart` 在协调世界时打印它们,所以用较早的带来记录 建设( 当地时间) 无约束`boundTo: none`直到插槽重新启动.

在macOS上,插槽浏览器从背景开始,没有启动窗口, 它的第一个窗口打开 CDP 作为背景窗口。 发射后 解析后有一个焦点检查: 只有槽浏览器自己的进程 最前面的是以前专注的应用程序 一次是前端 (单位:千美元)`FARMSLOT_FOCUS_HOLD=0` 关掉这个). 在槽窗口右侧单击 因此,在发射后可以取消一次. `FARMSLOT_FOCUS_HOLD` 财务报告和审定财务报表 `FARMSLOT_FOCUS_BROWSER` 属于 `@farmslot/adapter-web`; 结算延迟 在检查之前, `MM_HARNESS_FOCUS_SETTLE_MS`属于这个绳子 发射器.

```bash
# Roll back to Chrome for Testing with a fresh slot profile (a profile Google
# Chrome has opened is not reopened in the older Chrome for Testing). Keep
# RECIPE_HARNESS_BROWSER=cft set for later launches too: on a plain auto launch
# the profile follows Chrome for Testing only until a probe proves it dies.
RECIPE_HARNESS_BROWSER=cft mm-harness fixtures set
rm ~/.cache/farmslot/browser-probe.json        # forget probe verdicts
```

### 远程特性旗

`--remote-flag KEY=VALUE[,KEY=VALUE]` 为发射打上远程特性旗, 这就是A/B变体后面的屏门如何可以到达:

```bash
mm-harness launch --remote-flag perpsTAT3938AbtestScreenVsBottomSheet=treatment
mm-harness launch ios --remote-flag perpsEnabled=true,perpsConfig='{"tier":2}'
```

光字是已命名的变种(`treatment` 变成 `{ "name": "treatment" }`, (中文(简体) ), `true`编号 :`false` 是一个布尔,和一个值打开 `{` 或者说 `[` 解析为 贾森。 语法被解析一次 每片叶子都得到解析图 所以 布尔保持布尔而不是成为字符串 `"true"`。 。 。 .

每一次发布都会让应用程序的超能力 精确地设定钱包的固定 `remoteFeatureFlags` 对象(基线每个运行的股份)与 `--remote-flag` 两种客户端的地图(一次发射的覆盖). 一个平地 `launch` 因此放弃了先前的运行 `--remote-flag` 变种和保持固定的. 移动清空并重新应用运行中的设定 `RemoteFeatureFlagController` 如果发射未读取,则发射失败。 这个 扩展将其写入每个运行的不快的快照显示并重新读取 拥有的磁带记录`_harness.remoteFeatureFlags`,每页 ),所以发射报告它所证明的指针;重用运行的浏览器 只允许在记录已等于请求时重装 将记录带过重建的快照 `--watch` (哪个) 永远不要重新创建快照)拒绝 `--remote-flag`食谱本身的恢复 重启时携带活针,而不是在中跑时放下. 经核实 文物从不重写 所以发射必须把它钉上 (单位:千美元)`--remote-flag` 或悬挂旗帜的固定装置)拒绝试验 手臂不对.

随动作一起读取或更改运行中的应用程序上的标记 . `fixtures set` 如下 与发射相同的规则: 固定块是基线和 `fixtures set --remote-flag KEY=VALUE` 层上有一个单运行的覆盖,即 怎么样 `prepare --remote-flag` 把它的指针通过固定步骤.

```bash
mm-harness call metamask.feature_flags.read
mm-harness call metamask.feature_flags.set 'flags={"perpsEnabled":true}'   # mobile
mm-harness call metamask.feature_flags.clear                                      # mobile
```

`doctor` 财务报告和审定财务报表 `status` 打印 a `feature flags:` 指定每个活动的行 覆盖,所以一个插槽从不运行一个无名变体下的证明. 线条 区分 `(no runtime)` 和无法读取的真象 `0 override(s)`。 。 。 .

日志来源分开 :

```bash
mm-harness logs --source extension  # Extension page
mm-harness logs --source dapp       # active dapp
mm-harness logs --source webpack    # compiler
mm-harness logs --source watcher    # watcher lifecycle
mm-harness logs --source rebuild    # incremental rebuilds
mm-harness logs --source app        # Mobile app
mm-harness logs --source metro      # Mobile bundler
```

Live Mobile 和扩展配方自动索引一个有界限、有编辑功能的 `network/run-summary.json` 带有请求时间和食谱节点界限。 使用 明确 `app.network_capture` 财务报告和审定财务报表 `app.network_assert` 过滤的节点 窗口和机器检查请求预期值。 见 [辅助扫描网络捕获](https://npmcn.com/package/%40deeeed/metamask-harness/docs/NETWORK-CAPTURE.md)。 。 。 .

移动和扩展配方可以将清晰的UI-smoothess 窗口与 `app.performance_capture` 并核实他们的证据 `app.performance_assert`捕捉从来不是自动的 见 [UI 平滑捕捉](https://npmcn.com/package/%40deeeed/metamask-harness/docs/PERFORMANCE-CAPTURE.md)。 。 。 .

## 工作任务

```bash
# Pick a checklist from the shared catalog.
mm-harness execution-template list --package-templates <catalog> --json

# Write the task directory the agent works from.
farmslot task init temp/tasks/fix/TAT-1 --project <project> \
  --flow fix-bug --template fix-bug/mobile \
  --package-templates <catalog> --title "Wrong total on the receipt" --ticket TAT-1

# Bring the checkout to a proven-ready state before the first step.
mm-harness prepare --artifacts-dir temp/tasks/fix/TAT-1/artifacts --json

# Use the generated marker, which verifies the task's retained tooling.
temp/tasks/fix/TAT-1/mark start
temp/tasks/fix/TAT-1/mark 1
temp/tasks/fix/TAT-1/mark complete --mark-last
```

`farmslot task init` 写入 `TASK.md`, (中文(简体) ), `CHECKLIST.md`,则 `mark` 嘘,和 `inputs/`。 。 。 . 它保留了选定的CLI、提供者和图书馆。 使用 `farmslot task verify <task-dir> --json` 检查他们的身份。 现有任务保留原有的标记和收发. `CHECKLIST.md` 是唯一一个将框算作阶梯的文件。 没有 `checklist-target.json`; 缺席手段 `CHECKLIST.md` + 键 `SIGNAL.json`。 。 。 .

`prepare` 运行 `doctor --fix`, (中文(简体) ), `status`, (中文(简体) ), `launch --verify`, (中文(简体) ), `fixtures set`,以及 `verify` 在第一次失败时停止 记录一个准备状态记录 时间 `<artifacts-dir>/sandbox.json`核心跳过发射和固定装置;移动取用 `ios`编号 :`android` 从检查对象,然后从设备 `status` 报告,并问何时是含糊不清的。 退出 0 表示 准备 见 [任务目录](https://npmcn.com/package/%40deeeed/metamask-harness/site/task-dir.html)。 。 。 .

## 发现和证明

```bash
mm-harness actions positions
mm-harness actions --action metamask.wallet.ensure_unlocked
mm-harness call metamask.wallet.ensure_unlocked

mm-harness run --list
mm-harness run perps.smoke --describe
mm-harness run wallet.smoke --describe
mm-harness run wallet.import method=auto
# When a visible Terms of Use gate follows import and acceptance is authorized:
mm-harness run wallet.accept-terms accept=true

# Use visible client UI to delete and import the wallet again.
mm-harness run wallet.reset-import
mm-harness run path/to/recipe.json market=ETH --plan
mm-harness run path/to/recipe.json
```

`run` 选择一个检出- 本地文物目录, 除非 `--artifacts-dir <dir>` 超过它。 人类产出印出诊断和 绝对路径的报告,追踪,执行的食谱, 和文物清单. 使用 `mm-harness last --json` 在不重复上次行动的情况下恢复.

关于自动化, `--json` 发出一个稳定的文档. `run --json-stream` 发射 线性缓冲 JSONL 进度和终端事件。 它的状态符合食谱 `pass`, (中文(简体) ), `fail`,或 `unknown` 判决; `unknown` 仍然离开非零.

## 团队图书馆

```bash
export RECIPE_LIBRARY_PATH="team=$HOME/shared-library/team-recipes"
mm-harness run --list
```

共享的图书馆有持久的行动和可调和的食谱。 任务接受 标准仍然是任务所在地。 见 [食谱](https://npmcn.com/package/%40deeeed/metamask-harness/docs/RECIPES.md)。 。 。 .

关于将接受标准与图书馆流动相匹配和评估的可选模式咨询 草案或证据,见 [可选食谱顾问](https://npmcn.com/package/%40deeeed/metamask-harness/docs/RECIPES.md#optional-recipe-advisor)。 。 。 . 选择一个提供者 `--advisor typesafe` 或保存 `advisor.enabled` 财务报告和审定财务报表 `advisor.provider` 结束 `mm-harness config`检查有效的政策 `farmslot recipe quality advisor-status --project <project> --json`; 使用 `--advisor off` 每个任务. 普通食谱执行不需要顾问或API密钥.

不需要导出: 在 `mm-harness config set libraries.<name> <path>`,或者在产品检出旁检查,到达 `run`, (中文(简体) ), `actions`和模板的发现. `mm-harness status` 列出这个 机器解决,每个地点的修改和食谱计数.

一个库可以在知识文件中声明命名的测试账户 `recipe-library.json` 清单`"knowledge": ["knowledge/test-accounts.json"]`, (中文(简体) ), 每个 `{ "name", "secret", "index", "address", "purpose" }`: 该账户是 HD 指数 `index` 名称 `secret`,所以定着 只保守他们的秘密 图书馆注册(`--library`, (中文(简体) ), `RECIPE_LIBRARY_PATH` 即你们所设定的,或你们所设定的,不是结对的, `mm-harness help` 列出它们( 名称、 地址、 目的), 每个钱包, 命令 启动时可以使用它们(Web-dapp,扩展和移动固定导入,Core),以及 食谱, `metamask.app.launch` 财务报告和审定财务报表 `metamask.wallet.select_account` 选择一个 名称或地址.

团队维持他们的图书馆取出。 任务开始前更新; 记录本地修改和食谱摘要,但不获取或 检查上游更新。 运行时保持所选库不变 .

## 公布更改

```bash
# Write artifacts/pr-description.md in the repository PR template shape (prose
# only), then render the publishable body.
mm-harness pr-body render temp/tasks/dev/TAT-1 --command 'mm-harness run artifacts/recipe.json'
```

`pr-body render` 写入 `artifacts/pr-body.md`:带有"变相"的描述 食谱"和"Validation Logs"两节 `artifacts/recipe.json` 财务报告和审定财务报表 `artifacts/recipe-run/report.md` (和"收工"从 `artifacts/workflow.mmd` 当它存在时,用手替换任何粘贴。 工人从来不贴文物 因此栅栏无法断裂。 当通过运行记录了任务 选中的尝试, 两节都来自该尝试的验证软件包; 一个软件包 无法验证的,将被拒绝,任何文字都不写.

## 审查更改

```bash
# Which team library owns the change (declared --domain wins, else owned-paths.json).
farmslot review domain --project <project>

# The review guide: base review + the library's anti-pattern families and parity rule.
farmslot review checklist --project <project> --domain perps

# A checklist the mark shim can track: Setup, Base review, Domain patterns, Parity, Verdict.
farmslot review checklist --project <project> --domain perps --out temp/tasks/review/TAT-1/CHECKLIST.md
farmslot review checklist --project <project> --domain perps --since <last-reviewed-sha>   # incremental re-review

# Where this machine keeps libraries and the other platform's checkout (outside any repo).
mm-harness config set references.extension ~/dev/metamask-extension
```

团队图书馆用品 `review/antipatterns.md` (一个) `##` (a) 每个家庭, 选项 `review/antipatterns.<adapter>.md` 仅配有适配器的家庭, `review/parity.md`,以及 `owned-paths.json`{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}绳子会编织而来 永远不会 复制它们。 位置解析嵌入( E)`RECIPE_LIBRARY_PATH`, (中文(简体) ), `MM_HARNESS_REF_<ADAPTER>`(中文(简体) ) → `mm-harness config` - 结账前或下方的兄弟目录 `~/shared-library` ~ 浅取入 `<checkout>/.skills-cache/<name>`。 。 。 . `MM_HARNESS_SIBLING_LIBRARIES=0` 关闭兄弟的台阶,用于图书馆和 参考检查相同(测试沙盒设置). 缺少参考文献 取出后, 将等价步骤降低为“ 不检查 ” .

## 回收

```bash
mm-harness doctor
mm-harness doctor --fix
mm-harness verify
mm-harness cleanup
```

失败就是下一个行动 核心是无头;浏览器,设备,日志, 和调试器的能力报告为没有,而不是捏造. 稳定退出代码为 `1` 运行时间/ 动作失败, `2` 无效的 CLI 使用 , `3` 基础设施故障, `4` 有限度地拒绝追回,以及 `5` 审定/信任 失败.

## 参考文献

-   [食谱](https://npmcn.com/package/%40deeeed/metamask-harness/docs/RECIPES.md) ——发现,作曲,作者,共享证明.
-   [警卫](https://npmcn.com/package/%40deeeed/metamask-harness/docs/SECURITY.md) 信任、批准、固定装置和证据安全.
-   [质量保证](https://npmcn.com/package/%40deeeed/metamask-harness/docs/QA.md) ——清洁机和人放行检查.
-   [捐款](https://npmcn.com/package/%40deeeed/metamask-harness/docs/CONTRIBUTING.md) ——所有权,布局,并更换出入口.

对于开发,请直接引用源检出:

```bash
/path/to/metamask-harness/bin/mm-harness --version
```

农场选择相同的软件包通过 `recipe.provider.root.env`,配置为 `MM_HARNESS_PACKAGE_ROOT`二进制环境不会改变公众进入点的方向.

### 工作流程进入点和完成点

明确援引 `mms-recipe-dev`, (中文(简体) ), `mms-recipe-fix-bug`, (中文(简体) ), `mms-recipe-qa` 或团队的静态审查技巧. `mms-recipe-cook` 选择或恢复其共享的Markdown清单。 匹配描述或已改变的路径永远不会激活这些工作流程.

主机任务选择执行节点上的核对表,而不是网关. 核心、移动和扩展包将他们的食谱烹饪清单根植于 `CONSENSYS_RECIPE_COOK_ROOT` 及其行凶者核对表 `PERPS_RECIPE_LIBRARY_ROOT`设置在每个节点的池中 `env`不只是网关 缺少选定清单的根的节点拒绝此任务为无法使用源 .

静态Perps审查使用生成的源清单,而不安装或启动应用套接字. `recipe-qa` 冻结 PR、 范围或每日更改窗口, 并需要运行时的烟雾和选定的食谱证明。 官方发布验证使用其命名的发布剖面和证明道.

TASK.md持有请求;CHECKLIST.md是唯一的一步列表. 被冻结的终端合同和任务当地标记验证完成。 出版,保留会话和工作空间清理属于呼叫者. 农场通过控制平面处理它们;直接援引将结果交还给工程师。 见 [任务指南](https://npmcn.com/package/%40deeeed/metamask-harness/site/task-dir.html) 财务报告和审定财务报表 [QA 辅导](https://npmcn.com/package/%40deeeed/metamask-harness/site/tutorials/v5.html)。 。 。 .

### 便携式运行时间证明

`validateRuntimeProof(bundle, smokeTarget)` 从 `@farmslot/recipe-cli/harness` 验证一个保留了的Recipe v1 文物包,要求对其宣布的目标执行行为断言. 仅通过命令或结束节点是不够的。 QA 技能从中导入 `@farmslot/recipe-cli` 其锁定的绑带安装取决于;不需要网关、农场简介或运行的ID.

## 常见问题

### @deeeed/metamask-harness 是什么？

一个CLI用于操作MetaMask扩展、移动和Core并产生可审查的食谱证据。 在检查出内运行;自动检测出产品、槽、端口和运行时路径\.

### 如何安装 @deeeed/metamask-harness？

在项目目录运行 npm install @deeeed/metamask-harness，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mm-harness，可以用 npx mm-harness 直接运行。

### @deeeed/metamask-harness 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/deeeed\_\_metamask-harness 是否存在。

### @deeeed/metamask-harness 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @deeeed/metamask-harness 可以商用吗？

@deeeed/metamask-harness 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @deeeed/metamask-harness 的下载量有多少？

根据 npm 官方下载统计，@deeeed/metamask-harness 在 2026/10/12 – 2026/11/10 这 30 天内被下载 12,806 次，日均约 427 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @deeeed/metamask-harness 还在维护吗？

最新版本 0\.96\.11 发布于 2026/11/10（1 天前）；至今共发布 255 个版本，其中过去 12 个月发布了 255 个；首次发布于 2026/07/03。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

