# 性能与测量方法

下面保留先前六个小场景的 macOS/Linux 结果，并补充 [2026-10-24 大库、Go/Rust 与常驻 MCP](#2026-10-24-大库gorust-与常驻-mcp) 的独立数据。新增的 TypeScript 大库上原版 CLI 更快、Native 峰值 RSS 较低；常驻 MCP 的 pack/read 另行统计。这些结果只描述各自输入、选项和平台，不代表所有工作负载都更快。

## 先前六个小场景：测量环境

- 本工具源码：`b0d1bbbb54c2ea7486b03ae5b9bed817cb9a06a1`，MoonBit `0.10.15+943464bfa`，native release。
- 本工具二进制 SHA-256：`5f1e7d8016ca3f8142709eac9747ee73b7b93f12c34dab4411d742e4fa1ee43f`。
- 对照：npm `repomix@1.18.1`，Node.js `v25.9.0`。npm 包没有 gitHead，不将其与同名源码归档当作字节相同的发布物。
- Apple M4、10 核、16 GiB RAM，macOS 26.2。采用 `/usr/bin/time -lp`；wall 单位为秒，进程峰值 RSS 单位为 bytes。

每组预热一次，然后以新进程交替执行五轮；预热不计入统计。原版的常规线程池保留，独立 HOME/XDG/TMPDIR 和 token 缓存目录在预热后继续使用，既不删除用户缓存，也不在每轮清空原版内容缓存。

## 相同输入的端到端结果

原文和压缩均输出 JSON，开启安全扫描与 parsable-style，使用 o200k_base。配置文件显式指定，原版 processors 为空、Git 变更频率排序关闭；执行过程中不运行仓库配置代码或脚本。

| 仓库与模式 | 文件数 | 原版耗时中位数 | 本工具耗时中位数 | 原版耗时 / 本工具耗时 |
| --- | ---: | ---: | ---: | ---: |
| Repomix 原文 | 144 | 0.26 s | 0.14 s | 1.86× |
| Repomix 结构压缩 | 144 | 0.29 s | 0.20 s | 1.45× |
| Express 原文 | 12 | 0.19 s | 0.05 s | 3.80× |
| Express 结构压缩 | 12 | 0.21 s | 0.06 s | 3.50× |
| Requests 原文 | 19 | 0.21 s | 0.05 s | 4.20× |
| Requests 结构压缩 | 19 | 0.22 s | 0.07 s | 3.14× |

这六个场景中，耗时减少约 31%–76%，进程峰值 RSS 中位数为原版的 12.8%–16.6%。本工具的峰值 RSS 中位数为 25.1–31.8 MiB，原版为 154.3–239.0 MiB。RSS 是进程统计，不是所有子进程峰值的求和；wall 显示分辨率为 0.01 s，不能把显示相同的多轮结果解释为没有抖动。

固定输入版本与范围：

- [Repomix](https://github.com/yamadashy/repomix)：`80b4280a9196feace092fc672dfe2b5fac62ef08`，`src/**,LICENSE`。
- [Express](https://github.com/expressjs/express)：`1faf228935aa0a13111f92c28ee795be64ce3f0f`，`lib/**,LICENSE`。
- [Requests](https://github.com/psf/requests)：`0e322af87745eff34caffe4df68456ebc20d9068`，`src/requests/**,LICENSE`。

两端接受的文件集合相同。原版会 trim 正文，输出结构和 AST 保留策略也不同，因此不声称执行了逐字节相同的工作。优化前后的本工具则保持六个场景的文件正文和完整产物逐字节相同；计时外使用旧版 `encode().length()` 与新版 `count()` 复核完整文档，18 份输出计数全部相同。104 组独立 token ID 黄金数据以及完整 199,998 条词表的参考解码检查仍通过。

## Linux CI 复验

[CI 39874664420](https://github.com/Delthin/moon-repomix/actions/runs/39874664420) 在源码 `d5de18c67f27c37920134f00ae01ac865966ecf1` 上运行相同三源、两模式，使用 GNU time、Node 25.9.0 和 Repomix 1.18.1。每端每场景预热一次，再交替执行五轮；全部 60 次计时、12 次预热和 3 次计时外源映射检查完成，输入与程序散列在批内不变。

| 场景 | 本工具 wall 中位数 | 原版 wall 中位数 | 原版 / 本工具 |
| --- | ---: | ---: | ---: |
| Repomix 原文 | 0.24 s | 0.62 s | 2.58× |
| Repomix 结构压缩 | 0.36 s | 0.76 s | 2.11× |
| Express 原文 | 0.09 s | 0.40 s | 4.44× |
| Express 结构压缩 | 0.12 s | 0.53 s | 4.42× |
| Requests 原文 | 0.11 s | 0.43 s | 3.91× |
| Requests 结构压缩 | 0.15 s | 0.54 s | 3.60× |

六场景的 wall 与 RSS 中位数均更低，RSS 约为原版的 11.6%–16.5%，不利场景为零。`performance-linux-x64` artifact 保留所有样本、命令/退出码、配置与文件 SHA、API/ranges 检查和代表输出；共享 runner 的噪声仍需随每轮样本一起判断，CI 成功只表示执行及内容契约通过，胜负以报告为准。

同次三平台 CI 还压缩本项目真实 MoonBit 代码：75 个接受文件中 60 个应用压缩，12 个接口保持原文；含完整源映射的 JSON 从 87,133 降到 28,186 tokens。三端结果一致，`moonbit-self-pack-*` artifacts 可直接下载原文、骨架及诊断。

## 优化内容

- 资源通过同一句柄以最多 1 MiB 块有界读取；直接解析 ASCII/Base64/rank，保留两份 SHA-256、顺序、重复与单字节 token 覆盖检查。
- 精确计数复用 BPE 合并规则，减少 ID 数组、临时字节及重复片段分配；缓存局限于单次调用，编码器保持不可变。
- 安全扫描仍验证原文；无命中时不建立逐字符坐标表，命中时只计算实际边界的磁盘字节和行位置。
- glob 复用路径分段与动态规划行，literal 直接比较；规则顺序、否定、Unicode、Git 字节匹配、目录剪枝及原始输出保持不变。
- 批量任务定期让出执行机会，替代逐文件的固定 1 ms 定时等待，保留取消检查。

这些改动没有关闭扫描、缩减输入、使用近似 token 计数或引入跨进程结果缓存。当前也未使用文件处理线程池。

## 可复现的性能入口

`scripts/benchmark.mbtx` 是维护者工具，支持 Linux（GNU `/usr/bin/time`）和 macOS（`/usr/bin/time -lp`）。需要项目指定的 MoonBit 工具链、Node **25.9.0**、npm、Git，以及 Linux 的 `sha256sum` 或 macOS 的 `shasum`。Node 只用于开发对照，不是本工具运行依赖。运行目录为产品仓库根目录。

```sh
moon build --target native --release
# WORKSPACE 必须是尚不存在的绝对路径，位于源码 checkout 之外，例如临时目录下。
WORKSPACE="${TMPDIR:-/tmp}/moon-repomix-benchmark-unique"
moon run --target native scripts/benchmark.mbtx prepare "$WORKSPACE"
moon run --target native scripts/benchmark.mbtx run "$WORKSPACE" \
  _build/native/release/build/cmd/moon-repomix/moon-repomix.exe \
  assets/tokenizer-o200k_base.tiktoken
```

`prepare` 从上述三个公共 HTTPS Git 源按精确 commit 浅取，验证 HEAD，稀疏检出指定目录及 `LICENSE`，再核对 144/12/19 个文件。Git 禁用 hooks、凭据 helpers、fsmonitor、全局配置和子模块递归。参考 CLI 安装命令固定为 `npm install --ignore-scripts --no-audit --no-fund --save-exact repomix@1.18.1`；安装目录、锁文件和缓存均位于 workspace，不改项目依赖。不会执行语料的脚本、JS 配置或 processors。下载仅访问公共源；不会上传本地源码。下载/安装失败属于 **setup failure**，不是性能落后；不自动重试。

已有固定源码和参考 CLI 时，可以离线复用，免去重新下载、安装：

```sh
moon run --target native scripts/benchmark.mbtx local "$WORKSPACE" \
  "$REFERENCE_CLI" "$REPOMIX_SOURCE" "$EXPRESS_SOURCE" "$REQUESTS_SOURCE"
# 再执行上述 run 命令。
```

`local` 仅复制指定范围的普通文件，拒绝符号链接，核对文件数和复制前后 SHA-256；不改原目录，也不运行其中的代码。此模式将固定 revision 标为维护者声明，**不冒充远程 HEAD 验证**；实际文件清单与散列始终保存。两种准备方式都会拒绝已有 workspace；同一 workspace 只允许一次 `run`，失败证据不覆盖、不删除。要重新运行须明确选择新的 workspace，而不是择优重试。

### 契约、统计与产物

- 两端使用显式 JSON 配置、安全扫描、o200k_base、parsable JSON、`--top-files-len 0`；Node 的 `input.processors=[]`、`output.git.sortByChanges=false`，不改变正常线程池。
- 子进程只继承白名单环境。每批新建 HOME/XDG/TMP 和 `REPOMIX_TOKEN_CACHE_PATH`，预热后保留常规缓存；每个场景每端预热一次，再以新进程交替先后运行五轮。预热不纳入统计。
- 保存每次命令参数、exit、stdout、stderr、wall、user/sys CPU、RSS、输出大小/散列、接受集合和 API 检查。非零退出、已知计数失败警告、集合/源正文/API/ranges 不完整或批内输入/程序资源变化均 hard fail。原文 Native 逐字节对源文件，Node 允许自身 trim 行为；各端产物必须逐轮稳定。
- 压缩额外执行一次**计时外** Native `--full-metadata`：正文须与计时输出一致，记录须覆盖全部接受文件，ranges 有序且在原始行界内，检查独立抽样 API 的源行覆盖，fallback 正文逐字节完整；拒绝解析失败等异常 fallback。它不是对整个语法树的等价证明。Node 压缩的 API 缺失只记录策略差异，不作为 Native 等价守卫。
- GNU time 的 `%M` 从 KiB 换算为 bytes，macOS RSS 已是 bytes；报告 wall 来自 elapsed/real，绝不把 user+sys 当 wall。RSS 不代表所有进程峰值之和。
- `report/REPORT.md` 给出每个 case 的 wall/RSS `better` 或 `not-better` 及所有不利 case；`summary.json` 保存全部五轮样本、median/min/max/MAD，`rounds.json` 保存逐轮记录。没有共享 runner 的性能硬阈值，不丢慢样本、不按胜负决定退出码。CI 绿不代表任意平台都更快。

`report/complete.json` 仅在全批校验结束后生成；`setup-started.json` / `setup-complete.json` 区分准备进度。失败时查相应命令的 `logs/*.exit.json`、stdout/stderr 和 CI step 日志；进程启动失败可能只有 command 记录。所有 workspace 内容保留，工具不执行 cleanup。计时外检查可独立重验已保存的 documents，不重跑计时：

```sh
moon run --target native scripts/benchmark.mbtx verify "$WORKSPACE"
```

Linux CI 复用已有 release CLI，运行同样六场景；macOS/Windows 功能测试不增加性能矩阵。`performance-linux-x64` artifact 在成功或失败时都尝试上传，包含 `report/`、`logs/`、`manifest/`，并保留两端每场景的预热输出及计时外源映射输出，方便直接检查正文；其余计时输出以散列证明与预热一致。不包含语料 checkout、node_modules、cache 或完整环境。离线 `verify` 仍需恢复固定源文件，不能仅靠 artifact 重跑。三 OS 另外上传 `moonbit-self-pack-*`，范围仅为 `dist/self-pack/moonbit-*` 的真实 MoonBit 自打包证据。

### 开发依赖与数据许可

工具独立导入 [moonbitlang/async 0.22.5](https://github.com/moonbitlang/async)（Apache-2.0），不修改产品运行时依赖；对照使用 [Node.js 25.9.0](https://nodejs.org/)（MIT，含第三方声明）和 [Repomix 1.18.1](https://www.npmjs.com/package/repomix/v/1.18.1)（MIT，其 npm 依赖另有各自许可）。三个语料来自前述固定公共 Git commit：Repomix、Express 为 MIT，Requests 为 Apache-2.0；准备阶段保留各仓库 `LICENSE`。它们只作开发测试输入，不打进产品发行包；再分发语料或 npm 依赖时应同时遵守各自许可/声明。

原版 parsable-style 也计数完整文档；其大于 1,000,000 UTF-16 单位的输出会分块处理。上述先前六个小场景都低于该阈值。本工具始终计数完整输出，不用分块或逐文件求和代替预算计数。

## MoonBit 压缩是单独能力

原版未提供 MoonBit grammar，不能把其未执行 MoonBit 压缩算作同功能性能胜利。本工具当前 76 份源码/接口都能通过 AST 解析；默认安全流程排除含合成测试凭据的一份文件，实际导出其余 75 份。

在同一接受集合上，完整 JSON 从 87,133 降至 19,389 tokens，减少 77.7%；60 份应用压缩，15 份保持原文，包括完整保留的 12 份 `.mbti`。另核对了 235 个完整声明 header 与原始行范围。完整元数据模式为 28,186 tokens，按需选择；两种模式文件正文相同。

## 2026-10-24 大库、Go/Rust 与常驻 MCP

这批使用冻结的 native release：源码 `4a8c3e3c8f9ef89e14d624e9586b19799eded96e`，二进制 SHA-256 `67da22e745ca556a0e37bb9ea86d1813371d4951c7f504a431e016f3d07327b9`。工具链为 MoonBit `0.10.15+943464bfa`、脚本复用 async `0.22.5` 与 moonbitlang/x `0.5.5` crypto（均 Apache-2.0）；对照复用已隔离安装、带 package-lock 的 Repomix `1.18.1` 和 Node `v25.9.0`。o200k_base 产品资源 SHA-256 为 `446a9538cb6c348e3516120d7c08b09f57c36495e2acfffe59a5bf8b0cfb1a2d`。本次只执行 Apple M4 / macOS 26.2；下列数据没有新增 Linux 或 Windows 复验。

### 固定输入与新进程 CLI

| 来源 | 固定版本 / commit | 预先选定范围 | 源文件数 | 原始 bytes |
| --- | --- | --- | ---: | ---: |
| Microsoft TypeScript | v5.9.3 / `c63de15a992d37f0d6cec03ac7631872838602cb` | `src/**,LICENSE.txt` | 736 | 35,182,011 |
| go-chi/chi | `71307f9b7e4e9527638bc951c42b782cd1560331` | 7 份根目录 Go 源码与 LICENSE | 8 | 50,684 |
| dtolnay/itoa | `8ee97f64bf3cbfa42d357a2c39955fd062492e7d` | `src/**,LICENSE-MIT,LICENSE-APACHE` | 4 | 23,718 |

公开准备入口默认从三个公共 HTTPS Git URL 按上述固定 commit 稀疏检出，并验证 HEAD；TypeScript 还核对 v5.9.3 tag。本表使用的 Go/Rust 源副本逐一符合内置的 12 份源码/许可 SHA-256；原定的全部声明/导入锚点也内置在脚本中，在线和离线准备均核对相同常量。TypeScript 为 Apache-2.0，chi 为 MIT，itoa 为 MIT/Apache-2.0 双许可；许可文件随语料保留，语料只作开发输入。独立输入只含选定文件、空 `.git` 边界及安全 JSON 配置，不执行仓库代码、JS 配置或 processors。TypeScript 不是从大库挑出的性能小样本。

每来源、模式、端点预热一次，接着交替先后顺序运行五个新进程：共 **60 次正式计时、12 次预热**。白名单环境中的独立 HOME/XDG/TMP/token cache 批内保留，普通线程池和安全扫描开启。这里的“新进程”不表示冷磁盘、冷 OS 页缓存或每轮清空 token cache。本表的压缩行是 Native **完整元数据压缩**（`--compress --full-metadata`）对照原版自身压缩，和前面六个小场景的 Native 默认轻量压缩不是同一工作。保留原有 72 份产物；18 份 Native 完整元数据压缩输出在计时外检查 ranges。

| CLI 场景 | Native wall 中位数 s | 原版 wall 中位数 s | Native RSS 中位数 bytes | 原版 RSS 中位数 bytes |
| --- | ---: | ---: | ---: | ---: |
| TypeScript 原文 | 2.89 | **1.61** | 412,352,512 | 1,426,980,864 |
| TypeScript 完整元数据压缩 | 4.45 | **1.97** | 384,057,344 | 1,152,647,168 |
| chi 原文 | 0.04 | 0.21 | 26,116,096 | 160,448,512 |
| chi 完整元数据压缩 | 0.04 | 0.23 | 27,590,656 | 188,940,288 |
| itoa 原文 | 0.04 | 0.21 | 26,083,328 | 159,514,624 |
| itoa 完整元数据压缩 | 0.04 | 0.24 | 27,688,960 | 190,693,376 |

TypeScript 两项都是 Native 更慢；Go/Rust 四项 wall 和 RSS 中位数较低。macOS `/usr/bin/time -lp` 的 RSS 本来就是 bytes，表示被测进程峰值而非子进程之和，wall 分辨率为 0.01 s。每批 `report/summary.json` 保存全部五轮 wall、user、sys、RSS 样本及 median/min/max/MAD；`logs/` 保存命令、退出码和原始 time 输出。统计包含全部慢样本、回退和输出差异。

Native 的 `--quiet --report-json` 在 **stderr** 输出 schema-1 JSON，time 行另行解析。36 份保留报告均为 `status=ok`、`operation=pack`、`publication=committed`、`exitCode=0`、`style=json`，单文件输出，安全检查开启；`maxFiles=20000`、`maxTotalSize=209715200` bytes，token limit 为 null、exceeded=false，index tokens/bytes 均为 0。接受集合、声明 bytes 与实际输出、documents/index/total 算术、精确计数字符串、相同输出 SHA 的计数稳定性和 time 指标均离线核对。

| Native CLI 场景 | 接受 / 跳过 | 安全状态 / findings | 完整文档精确 tokens | 输出 bytes |
| --- | ---: | --- | ---: | ---: |
| TypeScript 原文 | 735 / 2 | excluded / 1 | 9,709,413 | 37,206,811 |
| TypeScript 完整元数据压缩 | 735 / 2 | excluded / 1 | 7,739,936 | 28,488,489 |
| chi 原文 | 8 / 1 | passed / 0 | 16,410 | 55,329 |
| chi 完整元数据压缩 | 8 / 1 | passed / 0 | 11,007 | 44,274 |
| itoa 原文 | 4 / 1 | passed / 0 | 6,214 | 24,648 |
| itoa 完整元数据压缩 | 4 / 1 | passed / 0 | 6,199 | 25,112 |

这里的 tokens 来自保留的 Native 完整文档精确计数报告；离线复核不再次编码或启动 CLI。itoa 的完整元数据压缩产物 bytes 比原文更大，不能把正文压缩等同完整输出变小。

内容与工作差异直接影响解读：

- Native 实际接受 TypeScript **735/736** 份；`src/testRunner/unittests/services/colorization.ts` 的合成 `token: string` 测试命中 `credential-assignment`，被安全扫描排除。原版接受 736 份。只读路径解释保留了 `SecurityFinding`、规则和 19,156 readBytes；输入与扫描器保持原样。这不是相同接受集合的对比。Go/Rust 两端接受集合相同。
- Native 每份 TypeScript 压缩输出都为 535 applied、116 `not-fewer-tokens`、45 `not-smaller`、35 `unsupported`、4 `parse-error`；六轮一致，没有观察到 timeout。四份解析回退为 `src/compiler/transformers/utilities.ts`、`src/compiler/types.ts`、`src/lib/es2015.symbol.wellknown.d.ts`、`src/services/exportInfoMap.ts`，全部保留原文、空 ranges，而不是关闭保护。chi 为 7 applied + 1 许可原文，itoa 为 2 applied + 2 许可原文。
- 原文检查遵循各自输入契约：Native 仅去掉一个初始 UTF-8 BOM，原版 trim；原始 bytes/SHA 始终对磁盘文件统计。Native 的接受集合、回退正文、完整记录、有序有界 ranges 和抽样声明源行覆盖均严格检查。
- TypeScript 的 7 个声明/导入锚点在 Native 全部保留。原版压缩保留抽样声明，但省去 program 的 performance 导入和 session 的 protocol 导入。Go/Rust 的 42 个预定 API/图锚点在 Native 全部保留；原版 itoa 压缩缺少 `#![no_std]`、关联 `Buffer` 类型、`write` trait 方法和 no-panic 属性四项。它们是内容策略差异，不包装成同功能速度收益。另在源文件上核对了两条 TypeScript import 的目标以及 Rust `mod udiv128` 的目标文件与散列。
- 原版对大于 1,000,000 UTF-16 单位的文档，按 200,000 单位切片独立计数再求和。TypeScript 原版原文为 36,661,647 单位 / **184 块**，压缩为 26,099,066 单位 / **131 块**；Native 仍精确计数完整文档。因此不能称为同一种完整文档计数工作。Go/Rust 未超过阈值。

### 真正常驻 MCP：同一 PID 的重复 pack/read

固定在同一 TypeScript commit，测量前将范围限定为 **`src/server/**,LICENSE.txt`，18 份、817,532 原始 bytes**。这与上述 35 MB 单库 CLI 是不同工作负载。先通过原版真实 `tools/list` 检查 schema，确认安装版本的 `pack_codebase` 支持 `style:"json"`，`read_repomix_output` 支持完整读取；未替换或修改 SDK。

两端协商 **2025-06-18**。每模式每端各启动一个真实常驻服务器，在同一进程中执行 1 次预热 + 5 次重复事务：pack 后读完所有产物。共 **4 个正式服务器、4 次预热、20 次正式事务**，另有 1 个只读 schema 探测进程。Native 使用 `pack_repository` + 逐资源 `resources/read`，原版使用 `pack_codebase` + 无行范围的 `read_repomix_output`，校验 `linesRead == totalLines`。每轮 PID 和 wrapper/PPID/RSS 收据证明没有在轮间重启。

Native host 为每卷 96,000 tokens、总输出上限 16,777,216 bytes、最多 32 卷，单资源 4 MiB 保护保持开启。原文读 4 卷 + index，共 862,593 bytes；压缩读 2 卷 + index，共 462,422 bytes（index 包含压缩 ranges）。原版分别读 1 份 862,303 / 408,088 bytes 的 JSON，工具的 `topFilesLength` schema 最小值为 1。两端都接受全部 18 份，原文与三项声明/导入锚点核对通过；原版压缩依然省去 protocol 导入，Native 保留。

| 模式 / 端点 | spawn 至 initialize ms | pack 中位数 ms | 读全中位数 ms | pack+读全中位数 ms | 生命周期 peak RSS bytes |
| --- | ---: | ---: | ---: | ---: | ---: |
| 原文 Native | 38 | 86 | 350 | 436 | 40,878,080 |
| 原文 原版 | 227 | 112 | 3,703 | 3,815 | 251,002,880 |
| 压缩 Native | 39 | 130 | 170 | 300 | 40,271,872 |
| 压缩 原版 | 224 | 201 | 875 | 1,078 | 287,621,120 |

这些是此本地客户端的实际事务时间：包含 RPC 传输、MoonBit 客户端 JSON 解码、完整 NDJSON 归档和官方 read 工具的包装，不是纯服务器计算时间。原版响应中的正文包装/重复、Native 的资源分卷与压缩索引、产物字节数也不同；不据此给出算法速度倍数。pack 时间不含后续读全，initialize 单列、不摊入五轮。全部五轮分别保留 pack/read/e2e 的样本与 median/min/max/MAD；例如 Native 原文 e2e 为 `[436,435,455,435,818]` ms，818 ms 慢轮同样纳入，压缩读全 431 ms 的慢轮也保留。

RSS 的两种测量分别保留：`time -lp` 覆盖整个服务器生命周期；`ps` 在 initialize 和每轮响应/计时外校验后采样实际子进程，KiB 乘 1024 转为 bytes。初始化 → 第五轮 idle RSS，原文 Native 为 25,640,960 → 40,861,696，原版为 83,296,256 → 224,198,656；压缩 Native 为 25,657,344 → 40,255,488，原版为 83,165,184 → 255,279,104。没有强制 GC；idle 不是最小稳态内存。

Native 每次 pack 后旧 URI 返回 `-32002`，`release_context` 后资源列表为空、最后 URI 也失效；释放后 RSS 未立即下降，不能把资源失效等同 allocator 归还。原版没有相同释放工具，旧 outputId 仍可真实读出，临时文件在本批 owned TMP 下保留。旧 ID 检查在计时外完成，生命周期 RSS 也包括这些检查。Native stdin EOF 正常退出 0；两次原版会话在全部六次事务完成后对核验的自有 PID 发送 SIGTERM，实际退出 **-15，并非干净退出 0**，原始收据为准。

### 复现与离线检查

从产品根运行这两个聚焦 `.mbtx`。`CLI_WORK`、`MCP_WORK` 为尚不存在的绝对路径；`REFERENCE_CLI` 为已有隔离 npm 项目中 Repomix 1.18.1 的 `bin/repomix.cjs` 绝对路径，项目根须保留 `package-lock.json` 以便归档（脚本不安装依赖）。默认 `prepare` 仅需这两个参数，不需要外部 hash/anchor 文件或私有源码目录：它按公开 URL 和固定 SHA 安全检出 TypeScript、chi、itoa，只复制选定源码与许可，不执行这些仓库的代码或 JS 配置。

`FROZEN_NATIVE` 是上述固定 SHA256 二进制的绝对路径，`VOCAB_ABSOLUTE` 是仓库 `assets/tokenizer-o200k_base.tiktoken` 的绝对路径。本组 `run` 明确校验冻结产品/词表/原版身份；不同的自建 binary 需要维护者显式更新固定身份、另建批次，不可冒用本表。

```sh
moon run --target native scripts/benchmark-workloads.mbtx -- prepare "$CLI_WORK" "$REFERENCE_CLI"
moon run --target native scripts/benchmark-workloads.mbtx -- run "$CLI_WORK" \
  "$FROZEN_NATIVE" assets/tokenizer-o200k_base.tiktoken
moon run --target native scripts/benchmark-workloads.mbtx -- verify "$CLI_WORK"

moon run --target native scripts/benchmark-resident.mbtx -- prepare "$MCP_WORK" "$CLI_WORK"
moon run --target native scripts/benchmark-resident.mbtx -- probe "$MCP_WORK" \
  "$FROZEN_NATIVE" "$VOCAB_ABSOLUTE" "$REFERENCE_CLI"
moon run --target native scripts/benchmark-resident.mbtx -- run "$MCP_WORK" \
  "$FROZEN_NATIVE" "$VOCAB_ABSOLUTE" "$REFERENCE_CLI"
moon run --target native scripts/benchmark-resident.mbtx -- verify "$MCP_WORK" "$CLI_WORK"
```

若已有同范围源副本，可选 `benchmark-workloads.mbtx -- local NEW_CLI_WORK REFERENCE_CLI SOURCE_ROOT`；`SOURCE_ROOT` 下是 `typescript/`、`chi/`、`itoa/`。该入口不联网，仍核对内置 12 SHA、文件数/bytes 和全部锚点，但不把本地 TypeScript 声称为已验证远端 HEAD。`verify-prepared NEW_CLI_WORK PRIOR_CLI_WORK` 可逐文件比较已验证源批的全部 748 个 SHA，确认准备逻辑没有换语料。

每批自带 `manifest/`（固定来源、逐文件 SHA、配置及运行身份）、`logs/`（完整 argv、退出码、stdout/stderr/time）、`documents/` 和 `report/`。CLI `verify` 同时产出 `report/native-stderr-audit.json`；`audit-reports CLI_WORK` 可仅复核原生 stderr 报告。常驻各 session 保存真实工具 schema、NDJSON、pack/read 正文、固定 PID/PPID/RSS、退出码及全部五轮统计；`verify` 的末尾可选新收据路径，避免覆盖旧证据。关闭结果以 `exit.json` / `shutdown-result.json` 的实际状态为准，`/bin/kill` 返回 0 只证明信号发送成功。

脚本不安装原版依赖、不清理用户缓存，已有目录拒绝覆盖；没有盲重试。可用 `--target-dir` 将编译产物放到独立目录。此组仅实测 macOS，未测 Linux/Windows、冷页缓存、付费模型；协议、内容与性能结果不能外推。
