mcpField
O
open-pr

open-pr

github.com/ouyangjiahong26开发577 次安装1 天前更新
代码仓库

关于 open-pr

open-pr 是用于 GitHub 仓库的编码工作流技能,可推送分支、创建或复用 PR,并评审改动。它也支持链式 PR 入栈和 Project 状态更新;合并与 CI 预检交由其他流程处理。

主要功能

  1. 01推送分支并创建或复用 PR
  2. 02按提交信息生成标题与正文
  3. 03支持链式 PR 入栈
  4. 04评审改动并标记阻塞项
  5. 05更新 PR 的 Project 状态

适用场景

  1. 01为已完成的分支创建 PR
  2. 02提交基于下层分支的链式 PR
  3. 03创建 PR 前检查改动并报告问题

安装

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

$npx skills add https://github.com/ouyangjiahong26/skills --skill open-pr

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

详细介绍

来自项目 README

推送分支、创建带 AI 标记的 PR、评审改动,报告结果。合并、CI 预检与清理交由 /merge-pr。分支属于 GitHub 栈时,base 指向下层分支,并把这一层入栈。

1. 确认分支与 base

  1. 分支取参数第一项。没有参数则运行 git rev-parse --abbrev-ref HEAD。
  2. 识别默认分支:git remote show origin 取 HEAD 分支。查询失败时用仓库中存在的 main / master。
  3. 确定 base(本分支是栈的一层时为下层分支,否则为默认分支):
    • 参数给了下层分支:base 取它。
    • 否则查当前分支已有 PR:gh pr list --head <branch> --json baseRefName --jq '.[0].baseRefName'。有值且不是默认分支时 base 取它。
    • 否则 base 是默认分支。
  4. 当前分支是默认分支、没有 GitHub remote,或 git log <base>..<branch> --oneline 为空时,停止并说明原因。
  5. base 不是默认分支时(本分支是栈的一层):
    • 下层分支必须有 open PR(gh pr list --head <base> --json number,state --jq '.[0]')。没有就停止,提示用户先对下层分支跑 /open-pr。gh stack link 会给缺 PR 的下层自动建 draft PR,不借它做这件事。
    • gh stack --version 失败时停止,请用户跑 gh extension install github/gh-stack。链式 PR 不入栈时,上层 PR 的 CI 与分支规则不会按栈底分支触发。

2. 推送并创建 PR

  1. 执行 git push origin <branch>。
  2. 检查已有 PR:
gh pr list --head <branch> --json url,number --jq '.[0]'
  1. 已有 PR 时复用其 URL 和编号,标题保持不动,正文默认不改写。需要更新正文时,先用 gh pr view <number> --json author --jq .author.login 与 gh api user --jq .login 比对作者。作者是本人时,询问用户并得到明确同意后,用 gh pr edit <number> --body-file <文件> 更新。作者不是本人时,不改正文,只用评论提出更新建议,评论首行写 AI 贡献标记(> **[AI Generated]** 本评论由 AI 完成。)。没有已有 PR 时:
    • 从 git log <base>..<branch> --pretty=%s 找关联 #N。标题写 [AI Generated][<类型>] <描述>:类型取 [FIX]、[DOCS]、[FEAT]、[REFACTOR]、[TEST]、[CHORE]、[STYLE] 中的一个,描述取第一条 commit message 去掉 type(scope): 前缀后的部分。
    • 起草 body:关联 issue、改动摘要、测试命令及结果。分支上有多条 commit 时改动摘要覆盖全部 commit。没有关联 issue 时明确写无关联 issue。
    • 用 gh pr create --base <base> --head <branch> --title "<标题>" --body "<body>" 创建。
  2. base 不是默认分支时把这一层入栈(新建 PR 和复用已有 PR 都要做)。gh stack link 自己会 push 分支,且要求给全链:
    1. 下层 PR 已在栈里时,用 <owner>/<repo>(gh repo view --json nameWithOwner --jq .nameWithOwner)读栈:
gh api /repos/<owner>/<repo>/pulls/<下层PR号> --jq '.stack.number // empty'
gh api /repos/<owner>/<repo>/stacks/<栈号> --jq '.base.ref, ([.pull_requests[].head.ref] | join(" "))'

第一行给出栈号(空即下层还没入栈)。第二行给出 trunk 与自底向上的分支链,当前分支不在链里就补到末尾。 2. 只有两层时链是 <下层分支> <分支>,trunk 取下层 PR 的 baseRefName。 3. gh stack link --base <trunk> <链…>。缺层会报 Cannot update stack: this would remove #N from the stack,报错即停止,不自行拼链。 4. 复核:gh api /repos/<owner>/<repo>/pulls/<PR号> --jq '.stack' 应给出 number、position、size。 5. 把 PR 自身加入 Project,Status 置 In review,按 github-project skill 的 references/sync-discipline.md 执行,失败处理见该文件的失败处理表。之后报告 PR URL。

gh 未登录时提示用户运行 gh auth login。不要猜测或替代认证方式。

3. 评审

本轮会话已有同一分支且其后无新 commit 的评审结论,则复用。否则以 git merge-base <base> <branch> 为固定点调用 code-review skill。base 是下层分支时,这个固定点正好是下层分支的最新提交,评审范围就是本层 diff。

将安全漏洞、数据丢失或崩溃风险、任务要求缺失、范围蔓延和错误实现视为阻塞项。风格与可维护性建议不阻塞。

  • 存在阻塞项:按来源列出阻塞项和非阻塞建议,停止等待修复。
  • 评审执行失败:报告错误,询问用户是否跳过评审。只有明确同意才继续。
  • 无阻塞项:报告评审结论。

4. 报告

报告:分支已推送、PR URL、评审结论、PR 的 Project 状态。入栈时另报栈号与层级(stack #<number> 第 <position>/<size> 层)。CI 与可合并性由 /merge-pr 在合并前预检。下一步提示用户运行 /merge-pr。

边界

情况处理方式
用户只要求创建 PR创建并报告 PR URL 后停止,不评审
评审发现阻塞项停止等待修复。修复后重新提交、推送并重跑本 skill
gh pr create 失败报告错误与原因,不做替代操作
gh stack 扩展未安装停止,请用户 gh extension install github/gh-stack
下层分支没有 open PR停止,提示先对下层分支跑 /open-pr
gh stack link 失败报告错误与原因。不自行拼链,也不改用 gh stack submit(它自造标题并新建 draft PR)

评论

支持 Markdown