SuperAPI AI 工具集

candid-loop

编程与开发

查看项目

更新于 10-16 01:58

技能介绍

Candid Loop 是一个与 candid-review 配合使用的技能,用于反复运行代码审查并应用修复,直到代码变干净,或达到配置的最大迭代次数。

用途

该技能解决的是“审查发现问题后还需要反复修复和复查”的场景。它自动化执行 fix-review-fix 循环:应用修复、重新运行审查,直至不再存在问题(或达到 max iterations)。

工作流程

技能按顺序执行以下步骤:

第 1 步:加载配置

从 CLI 标志和配置文件加载 loop 配置。优先级从高到低为:CLI flags、项目配置(.candid/config.json 的 loop 字段)、用户配置(~/.candid/config.json 的 loop 字段)、默认值。

CLI 参数:

  • --mode <auto|review-each|interactive>:执行模式,默认 auto
  • --max-iterations <N>:最大循环迭代次数,默认 5
  • --categories <list>:要强制执行的类别,逗号分隔,默认 all

有效模式:auto(自动应用全部修复)、review-each(逐个修复,每个 Yes/No)、interactive(完全控制,含跳过、忽略和批量选项)。

有效类别:critical、major、standards、smell、edge_case、architectural、all。

如果提供了 CLI 标志,则对这些特定选项使用它们并跳过配置文件检查。随后读取 .candid/config.json 的 loop 字段,若不存在则尝试 ~/.candid/config.json,提取 ignored 中的 categories、patterns、ids。未设置的项采用默认值:mode = "auto"、maxIterations = 5、enforceCategories = ["all"]、ignored = { categories: [], patterns: [], ids: [] }。建议把已知误报加入忽略列表,并把 maxIterations 保持在 5-10。

第 2 步:初始化循环状态

设置跟踪变量:iteration、totalFixesApplied、allFixedIssues、registerQuestionsRaised、registerQuestionsResolved、registerPriorDecisionsApplied,并显示模式横幅。

第 3 步:运行审查循环

在主循环中,每次迭代执行 Step 3.1 到 Step 3.6,若 exitLoop 为 true 则跳出。若达到最大迭代次数且仍有剩余问题,输出警告并列出剩余问题。

循环不变量:

  • PASS 需要一次全新的干净审查:只有最后一轮修复应用后运行 candid-review 并发现 0 个过滤后问题,状态才为 PASS,可通过比对 .candid/last-review.json 时间戳与最后一次 Edit 验证。
  • 无进展则停止:如果某次迭代应用了 0 个修复且仍存在过滤后问题,立即退出为 INCOMPLETE。
  • 振荡检查:如果某个已修复问题 id 在后续迭代中再次出现,停止并提示振荡,列出两次修复以供人工解决。
  • 不重复询问已拒绝的问题:通过 “No”/“Skip” 跳过的问题 id 会加入 sessionSkipped,在后续迭代中过滤掉。

Step 3.1:运行 candid-review,通过 Skill 工具执行 /candid-review,等待完成并保存状态到 .candid/last-review.json。auto 模式下选择“Apply all fixes”;interactive 模式下遵从用户在 candid-review 中的选择。若启用决策登记,每次迭代会独立读取和更新登记文件,从而复用此前已回答的问题。

Step 3.2:读取审查结果,解析 .candid/last-review.json 中的 issues 数组,每个 issue 含 id、file、line、category、title、description。若文件不存在或为空则报错退出。

Step 3.3:按类别过滤。若 enforceCategories 不是 ["all"],仅保留匹配类别的问题。

Step 3.4:过滤忽略项。移除类别在 ignored.categories、标题匹配 ignored.patterns(不区分大小写正则)或 id 在 ignored.ids 中的问题。

Step 3.5:检查完成。若 filteredIssues 长度为 0,则输出无问题并跳到 Step 4。

Step 3.6:按模式处理问题。

  • auto 模式:显示问题并应用修复,记录每个已修复问题,累加计数;决策登记启用时,此前决定自动应用,新的待澄清问题不会自动应用、记录为开放问题并视为跳过,不阻塞循环完成。
  • review-each 模式:逐个显示问题,用 AskUserQuestion 询问“Apply this fix?”,选项为应用、跳过、显示精确 diff;选择 Yes 则应用并计数。
  • interactive 模式:询问每个问题的处理方式:应用修复、跳过、加入忽略列表、跳过全部剩余。应用则计数,加入忽略列表则将 id 写入 ignored.ids,跳过全部剩余则退出内层循环。

Step 3.7:若用户选择加入忽略列表,读取或创建 .candid/config.json,将问题 id 加入 loop.ignored.ids 并写回文件。

第 4 步:显示摘要

循环退出后显示最终摘要,包括迭代次数、修复问题数、状态(PASS、INCOMPLETE 或 CANCELLED)。INCOMPLETE 时列出剩余问题并给出提示:增加 --max-iterations、为误报添加持久忽略、手动审查复杂问题。CANCELLED 时列出跳过的问题。若决策登记启用,追加登记摘要:已应用此前决定数、新提出问题数、已解决问题数、开放问题数,并提示开放问题可在 registerPath/review-decision-register.md 查看。

配置

配置文件 .candid/config.json 示例包含 version、tone 与 loop 字段。loop 字段说明:

  • loop.mode:字符串,默认 "auto",取值为 "auto"、"review-each" 或 "interactive"
  • loop.maxIterations:数字,默认 5,最大审查-修复循环次数
  • loop.enforceCategories:数组,默认 ["all"],要强制执行的类别
  • loop.ignored.categories:数组,默认 [],完全跳过的类别
  • loop.ignored.patterns:数组,默认 [],匹配问题标题的正则(例如 ["Unicode", "timezone"])
  • loop.ignored.ids:数组,默认 [],要跳过的特定问题 ID

CLI 示例

  • 使用默认值运行:/candid-loop
  • 组合参数:/candid-loop --mode review-each --max-iterations 10 --categories critical,major

问题类别参考

  • critical(🔥):生产杀手:崩溃、安全漏洞、数据丢失
  • major(⚠️):严重问题:性能、缺少错误处理
  • standards(📜):违反 Technical.md
  • smell(📋):可维护性:复杂性、重复
  • edge_case(🤔):未处理场景:null、空、并发
  • architectural(💭):设计问题:耦合、违反 SRP

适用场景

适用于希望在代码审查后自动循环修复、并可控地管理修复范围与忽略规则的开发流程。

限制

资料未提供关于收费、价格、平台支持等更多信息,暂未提供。