SuperAPI AI 工具集

review-prs

编程与开发

查看项目

更新于 10-15 20:08

技能介绍

用途:扫描配置的 PR 仓库中近期开放的 PR,检查是否违反已记录的最佳实践。支持单 PR(#12345)、状态过滤(open/closed/all)和供 cron 使用的自动模式。交互模式(默认)先起草评论并请求用户批准再发布;auto 模式自动发布所有违规,面向 cron/无头使用。full 参数会审查每个 PR 的全部文件,否则只审查自上次审查以来发生变化的文件,无变化的 PR(rebase、合并基分支)不再审查。该技能只依据现有最佳实践审查,审查过程中绝不创建、修改或新增规则或文档。

架构:基于文件的流水线,通过文件而非上下文传递大量数据以降低 LLM token 消耗。prepare-review.py(零 token)拉取 PR、diff、评论,计算自上次审查以来变化的文件,在每个 PR head 创建工作树,为每个规则块及 bug 生成一个 detect 提示写入临时工作目录,并输出指向工作目录的小型 JSON。Detect 子代理(Sonnet)从文件读取提示,对照规则检查 diff,将候选发现写入 JSON 文件,不读取源文件。select-candidates.py(零 token)丢弃 post-review.py 本会丢弃的候选,并为仍有候选的 PR 生成 validate 提示。Validate 子代理(Opus)每个 PR 一个,对照源树验证候选。collect-results.py(零 token)读取验证结果并交给 post-review.py 处理优先级、去重、发布、批准和缓存更新。主 LLM 会话只负责编排。

用法:以 /review-prs [days|page<N>|#<PR>] [open|closed|all] [auto] [reviewer-priority] [full] 调用。步骤 1 运行 prepare 脚本:python3 $SKILL_DIR/prepare-review.py [days|page<N>|#<PR>] [open|closed|all] [--auto] [--reviewer-priority] [--full],解析 stdout JSON 获取 work_dir。步骤 2 读取 {work_dir}/manifest.json,打印 progress_lines 并记录错误。步骤 3 为每个 PR 的每个 subagent_prompts 条目启动 Task 子代理(general-purpose、sonnet),提示为“Read your instructions from: {prompt_file} Work from the diff in that file; do not read source files. Never post anything to GitHub.”,全部并发启动。步骤 4 运行 python3 $SKILL_DIR/select-candidates.py --work-dir "$WORK_DIR"。步骤 5 为每个 validator 启动 Task 子代理(general-purpose、opus)。步骤 6 运行 python3 $SKILL_DIR/collect-results.py --work-dir "$WORK_DIR" [--auto]。交互模式下需先读取各 validator 的 validated.json,逐条向用户展示违规并批准,仅将批准的写回后再运行 collector。

限制:每个 PR 的工作树是 /var/tmp/review-prs 下的完整检出(可用 REVIEW_PRS_WORK_DIR 覆盖),每次运行每个 PR 需超过 1GB。自动模式下无法创建工作树的 PR 会被丢弃并记入 errors。主会话绝不可自行向 GitHub 发布审查、评论或批准,所有发布仅由 collect-results.py → post-review.py 处理,否则会产生重复。显示 PR 编号时必须使用完整 markdown 链接 PR #<number>。审查已关闭或已合并 PR 时,若 API 发布内联评论失败,可回退使用 gh pr comment --repo $PR_REPO {number} --body "[file:line] comment text",并创建后续 issue:gh issue create --repo $PR_REPO --title "Fix: <brief description>" --body "Found during post-merge review of PR #<NUMBER>. <description>"。