关于 pr-triage
分析 GitHub PR,并生成供后续代码审查使用的结构化分流数据。支持利用先前审查状态进行增量分析,并根据变更文件数量调整差异检查方式。
主要功能
- 01获取 PR 信息和变更文件
- 02分类文件及变更类型
- 03检测表层问题
- 04选择相关审查参考资料
- 05增量复用先前审查状态
- 06将分流结果写入 JSON
适用场景
- 01为后续代码审查阶段准备 PR 信息
- 02仅重新检查上次审查后变更的文件
- 03在 CI 工作流中生成结构化分流结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ xtone/ ai_development_tools --skill pr-triage安装后在 Claude Code 中输入/pr-triage确认已加载。
详细介绍
PR 分诊
分析 PR 的变更内容,并以结构化形式输出后续代码审查阶段所需的信息。 此技能旨在使用轻量级模型(Haiku)运行,有助于优化 CI 环境中的成本。
步骤
- 使用
gh pr view <PR番号> --json title,body,headRefName,baseRefName,changedFiles获取 PR 信息 - 使用
gh pr diff <PR番号> --name-only获取变更文件列表 - 获取差异(如果 changedFiles 大于等于 15,则跳过步骤 3,仅根据文件名和 PR 说明进行分析):
- 仅当 changedFiles 小于 15 时,使用
gh pr diff <PR番号>获取代码差异 - 如果需要进行表层检查的文件(.ts、.js、.tsx、.jsx)较多,则使用
gh pr diff <PR番号> -- <file>单独获取
- 仅当 changedFiles 小于 15 时,使用
- 检查
.pr-review-state.json是否存在(上次审查状态) - 进行以下分析:
- 对变更文件进行类别划分(added/modified/deleted)
- 检测所用语言和框架
- 判断变更类别(授权变更、DB 变更、RLS 变更、API 变更、测试变更、配置变更、技能变更)
- 判断所需的参考文件
- 检测 Minor/Suggestion 级别的表层问题(增量模式下仅检查变更文件)
- 总结差异(不超过 200 字)
- 列出审查时应关注的要点
- 将分析结果输出到
.pr-triage.json文件
增量模式(存在 .pr-review-state.json 时)
利用上次的审查状态优化检查范围:
- 获取
.pr-review-state.json中的last_reviewed_commit - 使用
git diff <last_reviewed_commit>..HEAD --name-only确定上次审查后发生变更的文件 - 未变更的文件的
surface_issues直接沿用上次状态(添加"carried_over": true)。不再重新检查。 - 仅对发生变更的文件执行表层检查
- 将上次的
surface_issues和review_comments中,对应位置已修复的问题纳入resolved_issues - 在输出的
.pr-triage.json中添加"incremental": true、"base_commit"、"changed_since_last_review"、"unchanged_since_last_review"、"resolved_issues"字段
resolved_issues 的格式:
{
"comment_id": 12345678,
"file": "<ファイルパス>",
"line": 42,
"issue": "<元の問題の説明>",
"resolution": "fixed"
}
如果
.pr-review-state.json不存在,则执行常规的完整分诊。 如果.pr-review-state.json格式无效(例如 JSON 解析错误),则输出警告并执行完整分诊。不得根据已损坏的状态文件运行增量模式。
所需参考文件的判定标准
仅在符合以下条件时,才将相应参考文件加入 required_references:
- 修改了 TypeScript/JavaScript 文件 →
typescript-best-practices.md - 修改了与认证或授权相关的代码(包含 auth、permission、role、session、token 等关键词) →
authorization-review-general.md - 修改了与 PostgreSQL RLS 相关的内容(包含 RLS、row level security、policy 等关键词) →
authorization-review-postgres-rls.md - 修改了 SKILL.md 文件 →
skill-review.md - 需要在 CI 环境中向 GitHub 发布内容 →
github-pr-review-actions.md(始终包含)
表层检查项目(Minor/Suggestion)
检查差异并检测以下问题(仅限适用项):
- 使用
any类型(TypeScript) - 使用
var关键字(TypeScript/JavaScript) - 空接口定义
- 使用魔法数字
- 命名规范违规(camelCase/PascalCase/UPPER_CASE)
- 未添加测试(存在新文件但没有测试文件)
输出格式
将以下 JSON 结构输出到 .pr-triage.json:
{
"pr_number": 123,
"incremental": false,
"base_commit": "<前回レビュー時のコミットSHA(インクリメンタル時のみ)>",
"summary": "<変更の概要(1-2文)>",
"files": {
"added": ["<追加ファイルパス>"],
"modified": ["<変更ファイルパス>"],
"deleted": ["<削除ファイルパス>"]
},
"changed_since_last_review": ["<前回から変更があったファイル(インクリメンタル時のみ)>"],
"unchanged_since_last_review": ["<前回から変更がないファイル(インクリメンタル時のみ)>"],
"languages": ["<検出された言語>"],
"frameworks": ["<検出されたフレームワーク>"],
"change_categories": {
"has_auth_changes": false,
"has_db_changes": false,
"has_rls_changes": false,
"has_api_changes": false,
"has_test_changes": false,
"has_config_changes": true,
"has_skill_changes": true
},
"required_references": ["<必要なリファレンスファイル名>"],
"surface_issues": [
{
"severity": "Minor|Suggestion",
"file": "<ファイルパス>",
"line": 15,
"issue": "<問題の説明>",
"suggestion": "<改善案>",
"carried_over": true
}
],
"resolved_issues": [
{
"comment_id": 12345678,
"file": "<ファイルパス>",
"line": 42,
"issue": "<元の問題の説明>",
"resolution": "fixed"
}
],
"diff_summary": "<差分の要約(200文字以内)>",
"estimated_complexity": "low|medium|high",
"focus_areas": ["<レビュー時の注目ポイント>"]
}
重要:
- 尽量减少文本输出,专注于输出
.pr-triage.json。
评论
支持 Markdown