mcpField
S
sc-pr-fix

sc-pr-fix

github.com/tony363开发2091 次安装30 周前更新
代码仓库

关于 sc-pr-fix

用于创建拉取请求并监控 CI 检查的技能,可交互式引导修复失败项。它通过重试上限和确认提示控制操作,也支持预览以及对低风险问题进行可选自动修复。

主要功能

  1. 01创建分支、提交和拉取请求
  2. 02通过 `gh` 监控 CI 检查
  3. 03解析常见 CI 失败日志
  4. 04应用修复前征求确认
  5. 05限制重试并检测重复失败

适用场景

  1. 01创建拉取请求并跟踪 CI 检查
  2. 02诊断并修复 lint 或测试失败
  3. 03通过试运行预览 Git 和拉取请求操作

MCP 相关

该技能使用 PAL MCP 调试复杂的 CI 失败,并在应用前审查拟议的修复。

安装

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

$npx skills add https://github.com/tony363/superclaude --skill sc-pr-fix

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
check_pr_status.py
fix_orchestrator.py
parse_check_failures.py

详细介绍

PR 修复技能

创建拉取请求,并交互式修复 CI 检查失败,直到所有检查通过。

快速开始

# Create PR from current changes
/sc:pr-fix "fix: resolve test failures" --branch fix/tests

# Dry run to preview
/sc:pr-fix "feat: new feature" --dry-run

# With custom PR details
/sc:pr-fix "chore: update deps" --title "Update dependencies" --body "Monthly update"

# Auto-fix low-risk issues
/sc:pr-fix "fix: lint errors" --auto-fix

行为流程

  1. 验证 - 检查 git 状态,确保存在更改
  2. 分支 - 创建并切换到新分支
  3. 提交 - 暂存所有更改,并使用提供的消息提交
  4. 推送 - 将分支推送到 origin
  5. 创建 PR - 通过 gh CLI 创建拉取请求
  6. 监控 - 按配置的间隔轮询 CI 状态
  7. 修复循环 - 对每项失败的检查:
    • 解析失败日志
    • 提出修复方案(复杂问题借助 PAL MCP)
    • 提示用户确认(交互模式)
    • 应用修复并推送
    • 重新监控检查
  8. 完成 - 所有检查通过或达到最大尝试次数

标志

标志类型默认值说明
--branchstringauto新分支名称(auto:pr-fix/<timestamp>)
--basestringmainPR 的目标分支
--titlestringcommit msgPR 标题
--bodystringautoPR 描述正文
--dry-runboolfalse预览操作,不实际执行
--auto-fixboolfalse自动应用低风险修复,仅对高风险修复进行提示
--max-fix-attemptsint5CI 修复迭代的最大次数(硬性上限:5)
--poll-intervalint30CI 状态检查之间的秒数
--no-pushboolfalse创建分支并提交,但不推送或创建 PR

交互模式

默认情况下,该技能会在每次修复前提示:

================================================================================
CI Check Failed: build (lint)                                   Attempt 2 of 5
================================================================================

Error Summary:
  - src/component.ts:42:15 - Missing semicolon (semi)
  - src/utils.ts:18:1 - Unexpected console statement (no-console)

Proposed Fix:
  1. Add semicolon at src/component.ts:42
  2. Remove console.log at src/utils.ts:18

Risk Level: LOW (auto-fixable lint errors)

--------------------------------------------------------------------------------
[A]pply fix  [S]kip this check  [V]iew full log  [Q]uit
>

使用 --auto-fix 跳过低风险修复(lint、格式调整)的提示。 高风险修复(测试更改、安全性、核心逻辑)始终会提示。

风险分类

级别示例行为
低Lint 错误、格式调整、空白字符若启用 --auto-fix,则自动修复
中测试更新、文档始终提示
高核心逻辑、安全性、API 更改始终提示,并进行 PAL 审查

证据要求

此技能要求提供操作成功的证据:

  • Git 操作必须成功(已创建并推送分支)
  • PR 创建必须返回有效的 PR URL
  • 必须能够通过 gh CLI 获取 CI 状态
  • 修复尝试必须显示文件差异

工具协调

  • Bash - 执行 Git 和 gh CLI
  • Read - 分析失败日志和源代码
  • Edit - 应用对源文件的修复
  • AskUserQuestion - 交互式提示用户确认修复
  • PAL MCP debug - 诊断复杂的 CI 失败
  • PAL MCP codereview - 在应用修复前验证修复质量

MCP 集成

  • PAL MCP debug - 分析 CI 失败的根本原因
  • PAL MCP codereview - 在应用前审查提议的修复

安全机制

  1. 硬性上限:最多进行 5 次修复迭代(不可覆盖)
  2. 停滞检测:同一错误连续出现 3 次即中止
  3. 振荡检测:出现“修复-回退-修复”模式即中止
  4. 交互式确认:所有结构性更改都必须获得批准
  5. 绝不跳过检查:必须修复或明确中止,不得跳过
  6. 备份分支:开始前创建 backup/<branch>-<timestamp>

CI 状态轮询

该技能使用以下方式轮询 GitHub Actions 检查状态:

gh pr checks <pr_number> --json name,state,conclusion,url

轮询行为:

  • 初始等待:推送后等待 10 秒(留出 CI 启动时间)
  • 轮询间隔:--poll-interval 秒(默认:30)
  • 超时:检查完成等待 10 分钟
  • 处理 pending、queued、in_progress 和 completed 状态

失败日志解析

支持的 CI 输出格式:

  • ESLint/TSLint JSON 格式
  • 带回溯信息的 pytest 输出
  • ruff/flake8 格式
  • Jest/Vitest 输出格式
  • 通用错误模式(error:、ERROR、failed)
  • GitHub Actions 注释

示例

创建基本 PR 并进入修复循环
/sc:pr-fix "fix: resolve ESLint errors"

输出:

Creating branch: pr-fix/20240115-143022
Committing: fix: resolve ESLint errors
Pushing to origin...
Creating PR #42: fix: resolve ESLint errors

Monitoring CI checks...
  - lint: pending
  - test: pending

[30s later]
  - lint: failed
  - test: passed

Parsing lint failures...
Found 2 errors in 1 file.

================================================================================
CI Check Failed: lint                                           Attempt 1 of 5
================================================================================
...
[A]pply fix  [S]kip  [V]iew log  [Q]uit
> a

Applying fix...
Pushing fix commit...
Monitoring CI checks...
  - lint: passed
  - test: passed

All checks passed! PR #42 is ready for review.
PR URL: https://github.com/owner/repo/pull/42
创建包含详细信息的功能 PR
/sc:pr-fix "feat: add user dashboard" \
  --branch feat/user-dashboard \
  --title "Add User Dashboard Component" \
  --body "Implements user dashboard as per spec #42"
预览模式
/sc:pr-fix "refactor: cleanup utils" --dry-run

输出:

[DRY RUN] Would execute:
  1. git checkout -b pr-fix/20240115-143022
  2. git add -A
  3. git commit -m "refactor: cleanup utils"
  4. git push -u origin pr-fix/20240115-143022
  5. gh pr create --base main --title "refactor: cleanup utils"
  6. Monitor CI and fix failures interactively

No changes made.
自动修复低风险问题
/sc:pr-fix "fix: formatting" --auto-fix

使用 --auto-fix 时,会自动应用低风险修复(lint、格式化)。 中风险和高风险修复仍会提示确认。

终止条件

满足以下条件时,修复循环将终止:

条件退出状态消息
所有检查均通过SUCCESS"所有检查均已通过!PR 已准备好供审查。"
达到最大尝试次数(5 次)FAILED"已达到最大修复尝试次数。需要人工干预。"
停滞不前(3 次出现相同错误)FAILED"尝试 3 次后仍存在相同错误。正在中止。"
用户退出ABORTED"用户已中止修复循环。"
CI 超时TIMEOUT"CI 检查未能在超时时间内完成。"

提交消息格式

修复提交遵循 Conventional Commits:

fix(ci): resolve <check_name> failures

- <description of fix 1>
- <description of fix 2>

Automated fix by sc-pr-fix skill

脚本

此技能使用 scripts/ 中的 Python 辅助脚本:

  • check_pr_status.py - 通过 gh pr checks 轮询 PR 检查状态
  • parse_check_failures.py - 解析 CI 失败日志以提取错误
  • fix_orchestrator.py - 使用安全机制协调修复循环

错误处理

场景行为
没有 git 仓库退出并显示错误消息
工作树不干净提示:暂存、提交或中止
分支已存在提示输入其他名称
推送失败检查权限,并提供重试选项
创建 PR 失败显示 gh CLI 错误,并建议手动操作
CI 超时报告状态,并提供继续监控选项
解析失败回退为显示原始日志
应用修复失败增加尝试计数器,并继续循环
用户中止正常退出并显示状态摘要

评论

支持 Markdown