mcpField
P
pr-triage

pr-triage

github.com/xtone测试与质量31.7k 次安装1 周前更新
代码仓库

关于 pr-triage

分析 GitHub PR,并生成供后续代码审查使用的结构化分流数据。支持利用先前审查状态进行增量分析,并根据变更文件数量调整差异检查方式。

主要功能

  1. 01获取 PR 信息和变更文件
  2. 02分类文件及变更类型
  3. 03检测表层问题
  4. 04选择相关审查参考资料
  5. 05增量复用先前审查状态
  6. 06将分流结果写入 JSON

适用场景

  1. 01为后续代码审查阶段准备 PR 信息
  2. 02仅重新检查上次审查后变更的文件
  3. 03在 CI 工作流中生成结构化分流结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/xtone/ai_development_tools --skill pr-triage

安装后在 Claude Code 中输入/pr-triage确认已加载。

详细介绍

PR 分诊

分析 PR 的变更内容,并以结构化形式输出后续代码审查阶段所需的信息。 此技能旨在使用轻量级模型(Haiku)运行,有助于优化 CI 环境中的成本。

步骤

  1. 使用 gh pr view <PR番号> --json title,body,headRefName,baseRefName,changedFiles 获取 PR 信息
  2. 使用 gh pr diff <PR番号> --name-only 获取变更文件列表
  3. 获取差异(如果 changedFiles 大于等于 15,则跳过步骤 3,仅根据文件名和 PR 说明进行分析):
    • 仅当 changedFiles 小于 15 时,使用 gh pr diff <PR番号> 获取代码差异
    • 如果需要进行表层检查的文件(.ts、.js、.tsx、.jsx)较多,则使用 gh pr diff <PR番号> -- <file> 单独获取
  4. 检查 .pr-review-state.json 是否存在(上次审查状态)
  5. 进行以下分析:
    • 对变更文件进行类别划分(added/modified/deleted)
    • 检测所用语言和框架
    • 判断变更类别(授权变更、DB 变更、RLS 变更、API 变更、测试变更、配置变更、技能变更)
    • 判断所需的参考文件
    • 检测 Minor/Suggestion 级别的表层问题(增量模式下仅检查变更文件)
    • 总结差异(不超过 200 字)
    • 列出审查时应关注的要点
  6. 将分析结果输出到 .pr-triage.json 文件

增量模式(存在 .pr-review-state.json 时)

利用上次的审查状态优化检查范围:

  1. 获取 .pr-review-state.json 中的 last_reviewed_commit
  2. 使用 git diff <last_reviewed_commit>..HEAD --name-only 确定上次审查后发生变更的文件
  3. 未变更的文件的 surface_issues 直接沿用上次状态(添加 "carried_over": true)。不再重新检查。
  4. 仅对发生变更的文件执行表层检查
  5. 将上次的 surface_issues 和 review_comments 中,对应位置已修复的问题纳入 resolved_issues
  6. 在输出的 .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