@adlc/consensus-fix

中文文档
1.12.0发布于 2026/10/10MITES Module构建来源已验证近 30 天下载 8252

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

中文使用文档
文档目录12 节
  1. 使用量
  2. 需要的旗帜
  3. 可选旗帜
  4. 退出代码
  5. 如何运作
  6. 全部潜水员检测
  7. 实例
  8. JSON 输出形状 --json (中文(简体) )
  9. 安全保障
  10. LLM 提供者检测
  11. 与兄弟姐妹工具的关系
  12. 核心差距

@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|frontiermid用于完成的 LLM 级 .
--provider <name>(自动检测)强迫单一提供者(anthropic|openai|gemini|agy整个运行,压倒性 ADLC_PROVIDER 仅此援引。 Additive——略去,单提供自动检测器不变. 相互排斥 --providers。 。 。 .
--providers <a,b,c>(无)绘制 一个 每个指定供养人家庭的候选修补 --n 1个自动检测供应商的复印件——每个供应商跨家庭多样性 ADR-0007 (英语)每名幸存者都记录了制作者。 相互独占 --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这是一种信号,即测试规格对负载的事物含糊不清——差异是证据而不是噪音.


实例

# 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(中文(简体) )

{
  "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 共发布 18 个版本,首次发布于 2026/06/14;过去 12 个月发布了 18 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.0latest2026/10/1027 天前
1.11.12026/09/091 个月前
1.11.02026/08/252 个月前
1.10.02026/08/112 个月前
1.9.02026/08/092 个月前
1.8.02026/08/082 个月前

关于 @adlc/consensus-fix 的常见问题

@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 和提交记录判断。