Skill: zlszhonglongshen/ai-pr-doctor (version 1.0.0)

--- name: ai-pr-doctor description: AI PR 医生 - 自动诊断 GitHub PR 问题、修复 Bug、生成修复报告的端到端工作流。触发词：PR 诊疗、代码审查、修复 PR、PR 医生、自动合并。 category: AI triggers: PR 诊疗, 代码审查, 修复 PR, PR 医生, 自动合并 --- # AI PR 医生 (ai-pr-doctor) > GitHub PR → AI 代码审查 → 自动修复 → 合并 → 修复报告 → 飞书通知 ## 🎯 解决痛点 - ❌ 团队 PR 堆积，没人及时 review - ❌ 代码审查耗时，漏掉潜在 bug - ❌ 简单修复（格式、测试）手动操作太繁琐 - ❌ 合并后没有记录，不知道修了什么 ## 💡 解决方案 ``` GitHub PR 链接/编号 ↓ ┌──────────────────┐ │ github │ → gh pr view 获取 PR 信息 + 代码diff └────────┬─────────┘ ↓ ┌──────────────────┐ │ code-review-skill│ → 5维度 AI 并行审查：CLAUDE.md合规、Bug审计、 └────────┬─────────┘ Git历史分析、过往PR评论、代码注释合规 ↓ ┌──────────────────┐ │ auto-pr-merger │ → 尝试自动修复 + 重跑测试 + 自动合并 └────────┬─────────┘ ↓ ┌──────────────────┐ │ feishu_doc │ → 生成修复报告并发布至飞书文档 └──────────────────┘ ``` ## 📦 包含 Skills | Skill | 作用 | 调用顺序 | |-------|------|---------| | github | 获取 PR 信息、代码diff、合并操作 | 1 | | code-review-skill | 5维度 AI 并行代码审查 | 2 | | auto-pr-merger | 自动修复 + 测试 + 合并 | 3 | | feishu_doc | 生成诊疗报告并发布飞书 | 4 | ## 🔧 前置要求 1. **gh CLI** 已安装并认证 (`gh auth status`) 2. **GitHub 仓库** 可写（用于 auto-pr-merger push 修复） 3. **飞书机器人** 已配置 feishu_doc 权限 ## 📝 使用方法 ### 触发命令 ``` /ai-pr-doctor <PR_URL或编号> 诊断这个 PR 代码审查这个 PR 帮我看看这个 PR ``` ### 完整命令 ```bash # 方式 1：通过 OpenClaw openclaw run ai-pr-doctor --pr https://github.com/owner/repo/pull/123 # 方式 2：通过 cron 定时检查未合并的 PR openclaw cron add \ --name "PR 待审查提醒" \ --schedule "0 10 * * 1-5" \ --skill ai-pr-doctor \ --params '{"mode":"check-pending","repo":"owner/repo"}' ``` ## 🔄 工作流详情 ### Step 1: 获取 PR 信息 ```yaml 步骤: 1 技能: github 输入: action: pr view repo: ${repo_from_input} pr_number: ${pr_number} output: json 输出: pr_title: ${title} pr_body: ${body} pr_state: ${state} changed_files: ${files} diff_url: ${diff_url} author: ${user.login} ``` ### Step 2: AI 代码审查 ```yaml 步骤: 2 技能: code-review-skill 输入: pr_url: ${pr_url} review_dimensions: - CLAUDE.md 合规性审查 - 浅层 Bug 扫描 - Git 历史上下文分析 - 过往 PR 评论对照 - 代码注释合规检查 output_format: structured_json 输出: issues: ${issue_list} severity_scores: ${scores} review_summary: ${summary} ``` ### Step 3: 自动修复与合并 ```yaml 步骤: 3 技能: auto-pr-merger 输入: pr: ${pr_url} test: "npm test" # 可自定义测试命令 retries: 2 auto_merge_if_passed: true 输出: fixed_files: ${files_modified} test_results: ${test_output} merge_result: ${merge_state} ``` ### Step 4: 生成修复报告 ```yaml 步骤: 4 技能: feishu_doc 输入: action: create title: "🔬 PR 诊疗报告 #${pr_number} | ${pr_title}" content: ${report_markdown} 输出: doc_url: ${docUrl} doc_id: ${docId} ``` ## 📊 输出示例：PR 诊疗报告 ```markdown # 🔬 PR 诊疗报告 #123 | feat: 新增用户认证功能 **仓库**: owner/repo | **PR 链接**: https://github.com/owner/repo/pull/123 **作者**: @zhangsan | **审查时间**: 2026-04-25 --- ## 📋 PR 概览 | 字段 | 值 | |------|-----| | 状态 | ✅ 已合并 | | 文件变更 | +127 / -43 | | 审查轮次 | 1 | | 自动修复 | 2 处 | --- ## 🩺 AI 审查结果 ### 🔴 严重问题 (2) | # | 文件 | 行号 | 问题描述 | |---|------|------|---------| | 1 | src/auth/login.ts | L45 | SQL 注入风险：未使用参数化查询 | | 2 | src/middleware/logger.ts | L12 | 敏感信息日志外泄 | ### 🟡 中等问题 (3) | # | 文件 | 问题描述 | |---|------|---------| | 1 | src/auth/token.ts | Token 过期时间过长（30天，建议7天）| | 2 | tests/login.test.ts | 测试覆盖率仅 45%，建议提升至 80% | ### 🟢 低优先级 (1) | # | 问题 | |---|------| | 1 | 缺少 JSDoc 注释 | --- ## 🔧 自动修复记录 | 文件 | 修复内容 | 状态 | |------|---------|------| | src/utils/format.ts | Prettier 格式化 | ✅ | | tests/login.test.ts | Jest 配置修复 | ✅ | | src/auth/token.ts | Token 过期时间调整 | ⏭️ 跳过（需人工确认）| --- ## ✅ 合并结果 - **自动合并**: 成功 - **CI 状态**: 通过 🟢 - **审查通过**: 2/2 检查项 - **合并时间**: 2026-04-25 20:15 UTC --- *由 AI PR Doctor 自动生成* ``` ## ⚙️ 自定义配置 ### 修改测试命令 编辑 `workflow.json` 中的 auto-pr-merger 配置： ```json { "steps": [ { "id": "step3_merge", "skill": "auto-pr-merger", "input": { "test": "pytest tests/ -v", "retries": 3 } } ] } ``` ### 修改审查维度 ```json { "code_review": { "dimensions": [ "security", "performance", "maintainability", "test_coverage" ], "severity_threshold": 50 } } ``` ## ⚠️ 注意事项 1. **权限要求**: auto-pr-merger 需要对仓库有写权限才能 push 修复 2. **测试命令**: 请根据实际项目修改测试命令，默认 `npm test` 3. **安全审查**: 涉及安全的 PR 建议人工二次确认 4. **CI 依赖**: 依赖 GitHub Actions 状态，建议开启 required checks ## 📞 故障排除 | 问题 | 原因 | 解决方案 | |------|------|---------| | gh auth 失败 | 未登录 | 运行 `gh auth login` | | 自动修复失败 | 代码冲突 | 手动解决冲突后重试 | | PR 已被合并 | 无需处理 | 跳过此 PR | | CI 未通过 | 测试失败 | 查看详细日志，手动修复 |

path: README.md
content: # AI PR 医生 (ai-pr-doctor) - README

## 业务场景

开发者团队在日常协作中，经常面临 PR（Pull Request）堆积、审查效率低、简单 Bug 漏掉等问题。当一个 PR 提上来，团队需要花大量时间做代码审查，而很多简单问题（格式、测试配置）其实可以自动化修复。**AI PR 医生**就是为解决这个痛点而设计的自动化工作流。

## 痛点分析

| 痛点 | 影响 |
|------|------|
| PR 堆积，无人 review | 开发周期拉长，功能上线延迟 |
| 人工审查耗时 | 高优工程师时间浪费在简单格式问题 |
| 简单修复（格式、测试）手动操作繁琐 | 重复劳动，效率低下 |
| 合并记录缺失 | 问题溯源困难，团队知识流失 |
| CI 失败时需要手动排查 | 调试周期长，影响迭代速度 |

## Skill 编排图谱

```
GitHub PR 链接/编号
        │
        ▼
  ┌─────────────┐
  │   github    │  ← 获取 PR 信息 + diff + 变更文件
  └──────┬──────┘
         │
         ▼
  ┌──────────────────────┐
  │  code-review-skill   │  ← 5维度 AI 并行审查
  │  ┌───────────────┐   │    ① CLAUDE.md 合规
  │  │ Agent #1      │   │    ② 浅层 Bug 扫描
  │  ├───────────────┤   │    ③ Git 历史分析
  │  │ Agent #2      │   │    ④ 过往 PR 评论对照
  │  ├───────────────┤   │    ⑤ 代码注释合规
  │  │ Agent #3-5   │   │
  │  └───────────────┘   │
  └──────┬───────────────┘
         │
         ▼
  ┌─────────────────┐
  │ auto-pr-merger  │  ← 自动修复 + 测试 + 合并
  └──────┬──────────┘
         │
         ▼
  ┌─────────────┐
  │  feishu_doc │  ← 生成修复报告 → 飞书文档
  └─────────────┘
```

## 核心价值

1. **5维度 AI 并行审查** - 比人工审查更全面，涵盖 CLAUDE.md 合规、历史上下文等维度
2. **自动修复 + 测试** - 简单格式/配置问题自动修复，无需人工介入
3. **合并后生成完整报告** - 记录所有发现的问题和修复动作，形成团队知识沉淀
4. **飞书通知** - 开发者直接在飞书查看诊疗结果，无需切换工具

## 使用示例

### 场景 1：诊断单个 PR

```
用户：帮我看看这个 PR https://github.com/owner/repo/pull/123

AI PR 医生：
1. 获取 PR 信息（标题、作者、变更文件）
2. 5维度 AI 审查（30秒完成）
3. 自动修复格式问题 + 重跑测试
4. 报告：🔴 2个严重问题，🟡 3个中等问题，🟢 1个低优先级
5. 如测试通过 → 自动合并
6. 发布飞书诊疗报告
```

### 场景 2：定时检查未合并 PR

```bash
# 每天早上 10:00 检查团队未合并的 PR
openclaw cron add \
  --name "PR 待审查提醒" \
  --schedule "0 10 * * 1-5" \
  --skill ai-pr-doctor \
  --params '{"mode":"check-pending","repo":"my-team/repo"}'
```

### 场景 3：批量处理多个 PR

```
用户：帮我检查这周所有未合并的 PR

AI PR 医生：
→ 获取过去 7 天所有 open 状态的 PR
→ 逐个执行 AI 审查 + 自动修复
→ 生成汇总报告
→ 对严重问题标记人工复核
```

## 适用团队

- **开发者团队**：希望提升 Code Review 效率，减少堆积
- **开源项目维护者**：处理大量 PR，自动化分类优先级
- **DevOps 团队**：确保 CI/CD 流程顺畅，减少人工干预

## 技术栈

- **github** - PR 信息获取、合并操作
- **code-review-skill** - 5维度 AI 代码审查
- **auto-pr-merger** - 自动修复 + 测试 + 合并
- **feishu_doc** - 飞书文档发布

## 扩展方向

- 接入 `github-issues-skill` 自动创建 Issue 跟踪未解决问题
- 接入 `agentic-devops` 在修复前后做 Docker 环境检查
- 支持企业微信通知（wecom-doc/wecom-edit-todo）

path: workflow.json
content: {
  "name": "AI PR 医生",
  "version": "1.0.0",
  "description": "GitHub PR → AI 5维度审查 → 自动修复 → 合并 → 飞书诊疗报告",
  "combo_id": "ai-pr-doctor",

  "inputs": {
    "pr": {
      "type": "string",
      "required": true,
      "description": "PR 链接或编号，格式：https://github.com/owner/repo/pull/123 或 123"
    },
    "repo": {
      "type": "string",
      "required": false,
      "description": "仓库名称，格式：owner/repo（从 PR URL 自动提取，可手动指定）"
    },
    "test_command": {
      "type": "string",
      "default": "npm test",
      "description": "测试命令，用于 auto-pr-merger 重跑测试"
    },
    "auto_merge": {
      "type": "boolean",
      "default": true,
      "description": "测试通过后是否自动合并"
    },
    "notify_feishu": {
      "type": "boolean",
      "default": true,
      "description": "完成后是否发布飞书诊疗报告"
    },
    "feishu_folder": {
      "type": "string",
      "default": "",
      "description": "飞书目标文件夹 token（可选）"
    },
    "severity_threshold": {
      "type": "number",
      "default": 50,
      "description": "严重问题阈值分数（0-100），超过此分数的问题需人工复核"
    }
  },

  "steps": [
    {
      "id": "step1_fetch_pr",
      "name": "获取 PR 信息",
      "skill": "github",
      "input": {
        "action": "pr view",
        "pr": "${inputs.pr}",
        "repo": "${inputs.repo}",
        "json": true
      },
      "output": {
        "pr_title": "${step1.title}",
        "pr_body": "${step1.body}",
        "pr_state": "${step1.state}",
        "pr_author": "${step1.user.login}",
        "changed_files": "${step1.changed_files}",
        "additions": "${step1.additions}",
        "deletions": "${step1.deletions}",
        "head_ref": "${step1.head.ref}",
        "base_ref": "${step1.base.ref}"
      }
    },
    {
      "id": "step2_code_review",
      "name": "AI 5维度代码审查",
      "skill": "code-review-skill",
      "input": {
        "pr_url": "${inputs.pr}",
        "review_dimensions": [
          "CLAUDE.md 合规性审查",
          "浅层 Bug 扫描",
          "Git 历史上下文分析",
          "过往 PR 评论对照",
          "代码注释合规检查"
        ],
        "severity_threshold": "${inputs.severity_threshold}",
        "output_format": "structured_json"
      },
      "output": {
        "critical_issues": "${step2.critical}",
        "medium_issues": "${step2.medium}",
        "low_issues": "${step2.low}",
        "review_summary": "${step2.summary}",
        "false_positive_count": "${step2.false_positives}"
      }
    },
    {
      "id": "step3_auto_fix",
      "name": "自动修复 + 测试 + 合并",
      "skill": "auto-pr-merger",
      "condition": "${inputs.auto_merge} AND ${step2.critical} == 0",
      "input": {
        "pr": "${inputs.pr}",
        "test": "${inputs.test_command}",
        "retries": 2,
        "auto_merge_if_passed": true
      },
      "output": {
        "fixed_files": "${step3.fixed}",
        "test_passed": "${step3.test_passed}",
        "merge_result": "${step3.merge_state}",
        "retry_count": "${step3.retries_used}"
      }
    },
    {
      "id": "step4_report",
      "name": "生成飞书诊疗报告",
      "skill": "feishu_doc",
      "condition": "${inputs.notify_feishu}",
      "input": {
        "action": "create",
        "title": "🔬 PR 诊疗报告 | ${step1.pr_title}",
        "content": "${report_markdown}",
        "folder_token": "${inputs.feishu_folder}",
        "grant_to_requester": true
      },
      "output": {
        "doc_url": "${step4.docUrl}",
        "doc_id": "${step4.docId}"
      }
    }
  ],

  "report_template": {
    "title": "🔬 PR 诊疗报告 | {{pr_title}}",
    "sections": [
      {
        "name": "概览",
        "fields": ["仓库", "作者", "状态", "文件变更", "审查时间"]
      },
      {
        "name": "AI 审查结果",
        "subsections": [
          { "name": "严重问题", "severity": "critical", "icon": "🔴" },
          { "name": "中等问题", "severity": "medium", "icon": "🟡" },
          { "name": "低优先级", "severity": "low", "icon": "🟢" }
        ]
      },
      {
        "name": "自动修复记录",
        "fields": ["文件", "修复内容", "状态"]
      },
      {
        "name": "合并结果",
        "fields": ["自动合并", "CI状态", "审查轮次", "合并时间"]
      }
    ]
  },

  "output": {
    "doc_url": "${step4.doc_url}",
    "doc_id": "${step4.doc_id}",
    "pr_title": "${step1.pr_title}",
    "pr_state": "${step3.merge_result}",
    "critical_issues_count": "${step2.critical_count}",
    "fixed_files_count": "${step3.fixed_count}",
    "review_summary": "${step2.review_summary}"
  },

  "error_handling": {
    "retry": {
      "max_attempts": 2,
      "delay_ms": 5000
    },
    "fallback": {
      "step1": "返回错误：PR 信息获取失败，请检查 URL 格式",
      "step2": "跳过 AI 审查，直接进入自动修复步骤",
      "step3": "标记需要人工审查，生成报告时注明",
      "step4": "输出 markdown 内容到终端，不发布飞书"
    }
  },

  "metadata": {
    "author": "openclaw-agent",
    "created": "2026-04-25",
    "tags": ["github", "code-review", "pr", "automation", "ai-review", "feishu"],
    "category": "AI",
    "skills_count": 4,
    "skills": ["github", "code-review-skill", "auto-pr-merger", "feishu_doc"]
  }
}

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)