# @adlc/consensus-fix 中文文档

规范地址：https://npmcn.com/package/%40adlc/consensus-fix/

版本：1\.12\.0
npm 元数据更新时间：2026-10-10T03:04:32.580Z
中文译文更新时间：2026-11-06T00:17:57.649Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40adlc/consensus-fix
原文对照：https://npmcn.com/package/%40adlc/consensus-fix/?lang=original
项目主页：https://github.com/voodootikigod/adlc/tree/main/packages/consensus-fix#readme
源码仓库：https://github.com/voodootikigod/adlc

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

- 包体积（解压后）：61.7 kB，11 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=18
- 运行依赖：1 个
- 首次发布：2026-06-13T21:12:11.966Z
- 最新版本发布：2026-10-10T03:04:32.268Z
- 近 30 天下载量：8252（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：18（近 12 个月 18 个）

## 中文简介

失败测试的N-版本编程——粉丝 N LLM 完成,通过协议分组,推荐最小的共识固定(C7/P4).

## 安装

```sh
npm install @adlc/consensus-fix
```

也可以使用：`pnpm add @adlc/consensus-fix`、`yarn add @adlc/consensus-fix`、`bun add @adlc/consensus-fix`

## README

# @adlc/共识-fix

失败测试的 N 版本编程 。 范恩独立LLM在同一破碎的测试中完成,通过协议评价每个候选人,组类幸存者,从最大的共识组中推荐最小的修补.

**已服务阶段:C7/P4** ——单发所修复的硬虫无法破解,利用采样多样性(E1).

* * *

## 使用量

```
consensus-fix --test-cmd "..." --files a.mjs,b.mjs [options]
```

### 需要的旗帜

| 旗帜 | 说明 |
| --- | --- |
| `--test-cmd <cmd>` | 壳牌命令运行失败测试. 当错误出现时必须退出非零 . |
| `--files <paths>` | LLM 允许修改以逗号分隔的源文件列表 . |

### 可选旗帜

| 旗帜 | 默认 | 说明 |
| --- | --- | --- |
| `--rails <cmd>` | _(无)_ | 这个 **回归门**:运行全能冷冻铁路套件(所有测试+类型)的指令. 候选人只有两人能活下来 `--test-cmd` 财务报告和审定财务报表 `--rails` 0号出口。 一个可以修补轨迹的人选是 **被拒绝**,不排序。 如果省略,只对照 `--test-cmd` (单位:千美元) **警告** 被打印(没有无声盖). |
| `--n <int>` | `3` | 要生成的独立固定候选人数量。 忽略当 `--providers` 给出(宽度变为指定供应商的数目). |
| `--tier cheap|mid|frontier` | `mid` | 用于完成的 LLM 级 . |
| `--provider <name>` | _(自动检测)_ | 强迫单一提供者(`anthropic|openai|gemini|agy`整个运行,压倒性 `ADLC_PROVIDER` 仅此援引。 Additive——略去,单提供自动检测器不变. 相互排斥 `--providers`。 。 。 . |
| `--providers <a,b,c>` | _(无)_ | 绘制 **一个** 每个指定供养人家庭的候选修补 `--n` 1个自动检测供应商的复印件——每个供应商跨家庭多样性 [ADR-0007 (英语)](https://npmcn.com/package/docs/adr/0007-multimodel-adversarial-review.md)每名幸存者都记录了制作者。 相互独占 `--provider`。 。 。 . |
| `--apply` | 关 | 写取胜法. 默认为干燥( 只有报告) . |
| `--allow-dirty` | 关 | 跳过脏树检查。 在 CI 中有用, 仅有舞台更改 . |
| `--json` | 关 | 机器可读输出(JSON to stdout). |
| `--prompt-only` | 关 | 打印将发送的提示并退出 0 。 以零 API 键工作 . |

* * *

## 退出代码

| 代码 | 含义 |
| --- | --- |
| `0` | 门口:至少有一名候选人活了下来,有一个有2名以上成员的协商一致小组(或 `--n < 3`) (中文(简体) ). |
| `1` | 操作错误: 参数差, 文件无法读取, 下层树( 无) `--allow-dirty`),没有LLM提供者. |
| `2` | 门故障:没有候选人幸存,或者所有幸存者都是单胞胎 `--n >= 3` (通通分出,分出分出分出. |

* * *

## 如何运作

1.  **飞行前**: 运行 `--test-cmd` 一次 一次吗 如果它退出0,测试已经通过—— `opError`。 。 。 .
2.  **抓图**: 抓取每个 `--files` 路径.
3.  **风扇**: 发送 N 独立、 无国籍的 LLM 补全与提示并行: 失败命令 + 最后一个 4000 字符的测试输出 + 一个已窗口 **节选** 每个源文件(在测试输出时,任何行周围的区域都引用它,或者在找不到参考物时使用长盖尾巴——从没有过小尺寸的任何东西的整个文件)。 请求 JSON `{changes: [{file, hunks: [{startLine, endLine, replacement}]}]}` ——线程编辑,不是完整文件内容.
4.  **依次评估**:每个候选人:
    -   分析并验证JSON. 如果无效则丢弃, 如果有的话 `file` 没有在 `--files`,或者如果 `changes` - 提议不作改动的候选人是无选择的,不是固定的,绝不允许成为幸存者(否则将适用干净,只根据是否 `--test-cmd` 恰好通过第二次 与未触动源.
    -   应用汉克,运行 `--test-cmd` (单位:千美元) **转接闸门**) (中文(简体) ). 他的猎人 `startLine`编号 :`endLine` 并不完全适用于真实文件(超出界限,重叠的又一个"hunk") 抛弃的只是那个候选人——永远不要跑. 如果重新鉴定通过 `--rails` 已经提供,运行 `--rails` (单位:千美元) **回归门**对照相同的应用修改。 候选人只有0号出口才能活下来 一个通过复赛但复赛但复赛的选手被否决(Lands in the respect) `failed`没有 `survivors`) (中文(简体) ).
    -   记录通过/失败和换行计数(直接从hunks自己的行距计算出——不需要单独的diff步骤).
    -   还原快照( E)`finally`不论结果如何.
5.  **协定分组**: 使每个幸存的变换器的hunks(每行相撞白空格,行距上键+正态替换)和组同组.
6.  **胜者选择**:在通过两条门的候选人中,选择变化最少(按候选人指数打破的字数)的最大协议组成员。 最小的跳跃者从来不会看到一个失败了铁道的候选人,所以它不能奖励一个游戏固定.
7.  **产出**: 默认的干燥报告; `--apply` 写胜利者.

### 全部潜水员检测

何时 `--n >= 3` 每个幸存者都属于自己的单子组, 工具输出2个带消息 `all-divergent: spec ambiguity — escalate`这是一种信号,即测试规格对负载的事物含糊不清——差异是证据而不是噪音.

* * *

## 实例

```bash
# Dry-run: see what the winning fix would be without writing it
consensus-fix --test-cmd "node --test test/math.test.mjs" \
              --files src/math.mjs \
              --n 5

# Repro gate + full rails regression gate (recommended).
# A candidate that fixes the one test but breaks any other test is rejected.
consensus-fix --test-cmd "node --test test/math.test.mjs" \
              --rails    "node --test test/*.test.mjs" \
              --files src/math.mjs \
              --n 5

# Apply the winner
consensus-fix --test-cmd "npm test -- --grep 'add function'" \
              --rails    "npm test" \
              --files src/add.mjs,src/utils.mjs \
              --apply

# Preview prompts without any API key
consensus-fix --test-cmd "cargo test test_parse" \
              --files src/parser.mjs \
              --n 3 \
              --prompt-only

# Machine-readable output for orchestrators
consensus-fix --test-cmd "pytest tests/test_core.py::test_sum" \
              --files lib/core.mjs \
              --json

# Allow running against an uncommitted working tree
consensus-fix --test-cmd "node --test test/*.test.mjs" \
              --files lib/broken.mjs \
              --allow-dirty --n 3

# Draw one candidate fix per distinct provider family instead of 3 samples
# of one auto-detected model (requires an API key for each named provider).
consensus-fix --test-cmd "node --test test/math.test.mjs" \
              --rails    "node --test test/*.test.mjs" \
              --files src/math.mjs \
              --providers anthropic,openai,gemini

# Force a single non-default provider for the whole run
consensus-fix --test-cmd "node --test test/math.test.mjs" \
              --files src/math.mjs \
              --provider gemini --n 3
```

* * *

## JSON 输出形状`--json`(中文(简体) )

```json
{
  "summary": {
    "total": 3,
    "passed": 2,
    "failed": 1,
    "discarded": 0,
    "groups": 1,
    "allDivergent": false,
    "railsChecked": true
  },
  "groups": [
    { "groupIndex": 0, "size": 2, "candidateIndices": [0, 2] }
  ],
  "winner": {
    "index": 0,
    "changedLines": 1,
    "largestGroupSize": 2,
    "changes": [{ "file": "src/math.mjs", "hunks": [{ "startLine": 12, "endLine": 12, "replacement": "..." }] }],
    "applied": false
  },
  "discardedDetails": []
}
```

* * *

## 安全保障

-   **肮脏的护林员**:拒绝与一棵肮脏的树相撞,除非 `--allow-dirty`防止意外损失未完成的工作.
-   **抓图 + 恢复到 `finally`**:每个候选人评价恢复所有 `--files` 即使测试崩溃或 LLM 返回垃圾.
-   **终止信号恢复**:SIGINT,SIGTERM或SIGHUP在报告前的任意时间点(包括候选人测试或铁路命令运行期间)停止跑道:飞行中指令的流程组获得SIGTERM,再由SIGKILL在2 s后,原始文件从快照恢复出,没有应用中标,流程出局1. SIGKILL 发送到协商一致的修补本身无法处理,所以可以将候选人的修补放入磁盘;用 `git checkout -- <files>`。 。 。 .
-   **原子写**:文件还原,候选hunk应用程序,和中选候选人-应用写作是原子(在同一目录中写临时文件,再重命名Sync),以防范部分写作或截取.
-   **文件列表执行**: 外部引用文件的任何候选人 `--files` 用诊断信息丢弃, 绝不写.

* * *

## LLM 提供者检测

继承来源 `@adlc/core`。检查(顺序): `ANTHROPIC_API_KEY`, (中文(简体) ), `OPENAI_API_KEY`, (中文(简体) ), `GEMINI_API_KEY` (那时) `agy` 若为 `ADLC_AGY` 已设定). 强制提供者使用 `ADLC_PROVIDER` (env,全壳)或 `--provider <name>` (逐项召集,推翻) `ADLC_PROVIDER`) (中文(简体) ). 覆盖每层的模型 `ADLC_MODEL_CHEAP`, (中文(简体) ), `ADLC_MODEL_MID`, (中文(简体) ), `ADLC_MODEL_FRONTIER`。 。 。 .

单一提供者自动侦查仍然是默认情况(按ADR-0007计算成本/相关性) - `--provider`编号 :`--providers` 是添加剂,而不是默认行为改变。 使用 `--providers <a,b,c>` 当您想要从 N 不同模型家族而不是从一个模型的 N 样本中抽取 N 候选修饰时; 每一个被请求的提供者必须配置自己的 API 密钥, 或者在 LLM 调用缺失的密钥之前运行失败 .

* * *

## 与兄弟姐妹工具的关系

-   **闪光探测器(C6)**: 单剂旋转时检测出. `consensus-fix` 是升级路径 – 当闪光探测器向硬相机开火时运行它 .
-   **死前(C2)**: 在构建前识别失败模式. `consensus-fix` 修正在测试运行中发现的失败模式.
-   **护栏(C5)**:执行只读铁道. `consensus-fix` 尊重 `--files` 列表为自己的铁路边界.
-   **空心试验(C4)**:找到实际上没有测试任何东西的测试. 测试 `consensus-fix` 继续失败可能是空洞的——跑 `hollow-test` 检查.

* * *

## 核心差距

无. `fan`, (中文(简体) ), `complete`, (中文(简体) ), `extractJson`, (中文(简体) ), `detectProvider`, (中文(简体) ), `resolveModel`, (中文(简体) ), `PROVIDER_NAMES`, (中文(简体) ), `parseArgs`, (中文(简体) ), `pass`, (中文(简体) ), `gateFail`, (中文(简体) ), `opError`, (中文(简体) ), `printJson`, (中文(简体) ), `promptOnly`,以及 `isDirty` 全部由 `@adlc/core`。 。 。 .

## 常见问题

### @adlc/consensus-fix 是什么？

失败测试的N-版本编程——粉丝 N LLM 完成,通过协议分组,推荐最小的共识固定\(C7/P4\)\.

### 如何安装 @adlc/consensus-fix？

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

### @adlc/consensus-fix 支持 TypeScript 吗？

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

### @adlc/consensus-fix 支持 ESM 还是 CommonJS？

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

### @adlc/consensus-fix 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @adlc/consensus-fix 可以商用吗？

@adlc/consensus-fix 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @adlc/consensus-fix 的下载量有多少？

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

### @adlc/consensus-fix 还在维护吗？

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

