
AI 应用CLI开发工具【免费下载链接】ccusagenpx ccusage项目地址https://gitcode.com/gh_mirrors/cc/ccusage点击查看免费下载导读在 ccusage 仓库的create-pr技能skill所定义的完整 PR 生命周期中请求 AI 评审、回复评审线程、轮询 CI 是三个密不可分的环节。本文聚焦.agents/skills/create-pr/references/gh-review.md这份参考文档讲解ghCLI 原生命令porcelain覆盖不到的两个关键操作通过 GitHub REST API 在行内inline评审线程中回复以及通过 GraphQL API 读取线程的解析状态isResolved并结合仓库中的create-pr、ai-review、fix-ci技能与 CI 校验脚本给出可直接复制运行的完整命令与工作流。一、背景这份参考文档在 PR 工作流中的位置ccusage 仓库在.agents/skills/create-pr/SKILL.md中定义了完整的 PR 生命周期技能开分支、提交、推送、开 PR、请求 AI 评审、回复评审线程、驱动 CI 到全绿并最终合并。其中第 3 步明确写道Request and handle AI review —references/ai-review.md, with theghreply and thread-state calls inreferences/gh-review.md.也就是说gh-review.md专门提供ai-review.md需要、但gh没有内置命令no porcelain的底层 API 调用操作gh 内置命令gh-review.md 提供的方案发布顶层评论top-level commentgh pr comment已覆盖无需额外处理在行内线程中回复无REST replies 端点读取线程解析状态resolved/unresolved无GraphQLreviewThreads查询轮询评论、评审、状态检查gh pr view --json comments,reviews,statusCheckRollup、gh pr checks文档开头列出作为补充文档原文即声明gh pr comment,gh pr view --json comments,reviews,statusCheckRollup, andgh pr checkscover requesting review and polling. The calls below are the onesghhas no porcelain for.——这正是这份参考文档的存在理由补齐 gh 命令行无法直接表达的两个 API 能力。二、在行内评审线程中回复REST API2.1 为什么需要 REST replies 端点gh pr comment只能发布顶层评论无法把回复挂到某条具体的行内评审线程inline thread即 diff 上某一行旁边的评论下面。而当 CodeRabbitcoderabbitai或 Cubiccubic-dev-ai在 PR 上留下行内反馈后按ai-review.md的约定处理完每条 actionable 反馈需要在原线程内回复并且回复要以 bot 的 mention 开头说明改了什么、跑了哪些验证。2.2 完整调用链第一步拿到目标行内评论的 id。gh pr comment只发顶层评论所以要查询该 PR 的所有行内评论找到 bot 打开的那条线程对应的 comment idgh api repos/:owner/:repo/pulls/pr-number/comments第二步用 REST replies 端点把回复挂进这条线程gh api -X POST repos/:owner/:repo/pulls/pr-number/comments/comment-id/replies \ -f bodycoderabbitai Fixed in commit-sha. Validation: just typecheck, just test.这是gh-review.md原文给出的命令。几个要点:owner与:repo由gh自动替换为当前仓库pr-number与comment-id需要替换为实际值。-f body...以表单字段方式提交正文gh api会负责正确的编码正文中的coderabbitaimention 是让 bot 重新行动的触发条件。文档特别说明Reviewer handles are examples; use the ones current on the PR.——即示例中的 handle 是占位符应以该 PR 上实际出现的评审者为准例如 Cubic 在不同仓库可能使用不同的 handle。2.3 在仓库工作流中的语义结合.agents/skills/create-pr/references/ai-review.md回复线程的完整流程是开 PR 后发一条顶层评论 mention bot 请求评审每次有意义的新推送后再次 mention 相关 bot若 bot 没有自动重新运行则重复请求轮询评论、评审与行内线程gh pr view --json comments,reviews,statusCheckRollupgh pr checks把每条反馈分类为 actionable / question / false positive / informational对每条 actionable 反馈做最小修复、跑相关检查、通过commit技能提交推送然后在对应线程内回复——开头 mention bot说明变更内容与通过的验证。gh-review.md中的这条 REST 命令正是第 5 步的执行载体。三、读取线程解析状态GraphQL3.1 为什么只能走 GraphQL行内线程的已解析/未解析状态isResolved是 GitHub 的GraphQL-only字段REST API 与 gh 内置命令都无法直接读取。gh-review.md因此提供了reviewThreads查询。在判断 PR 是否真正ready时这个状态至关重要create-pr技能的 Ready means 一节要求no unresolved actionable feedback而线程是否被解析正是判断依据之一。3.2 查询命令gh api graphql \ -F ownerOWNER \ -F repoREPO \ -F numberpr-number \ -f query query($owner: String!, $repo: String!, $number: Int!) { repository(owner: $owner, name: $repo) { pullRequest(number: $number) { reviewThreads(first: 100) { nodes { id isResolved comments(first: 20) { nodes { id databaseId author { login } path body } } } } } } }要点说明-F ownerOWNER -F repoREPO用变量形式传入 GraphQL 变量-F numberpr-number中number会被gh api graphql按 GraphQL 的Int!类型自动序列化。reviewThreads(first: 100)只返回前 100 条线程文档明确指出addpageInfoandafterpagination for large PRs——大型 PR 需要自行追加pageInfohasNextPage/endCursor并在下一次查询中传入after游标完成分页。comments(first: 20)限制每条线程最多取 20 条评论返回databaseIdREST 体系中的数字 ID便于与 REST 的 replies 端点衔接——即先查 GraphQL 拿线程与评论结构再用 REST 的 comment id 去回复。3.3 与 REST 查询的配合实际轮询时可以先用 REST 接口获取行内评论列表含每条评论的id再用 GraphQL 查询拿到线程级isResolved状态与评论归属author.login、path、body。两者组合即可回答ai-review.md要求的poll comments, reviews, and inline threads before calling the PR ready。四、围绕评审循环的完整命令集把gh-review.md放入create-pr技能的完整上下文后一次典型 PR 评审循环涉及以下命令路径见 create-pr 技能 与 fix-ci 技能阶段命令用途开 PRgit push -u origin branch-name后gh pr create --body-file -推送并创建 PR正文经 stdin 传入避免 shell 转义问题详见 open-pr.md请求评审gh pr comment pr --body coderabbitai ...顶层评论 mention botai-review.md轮询状态gh pr view --json comments,reviews,statusCheckRollup、gh pr checks轮询评论、评审与状态检查行内回复REST replies 端点本文第二节在线程内回复修复说明读取解析状态GraphQLreviewThreads本文第三节确认无 unresolved 反馈查看 CI 失败日志gh run view run-id --log-failed从失败步骤日志与 annotation 定位根因fix-ci 技能合并gh pr merge pr --squash --delete-branch仅在用户明确要求且条件满足时执行五、为什么 PR 标题与正文同样受校验约束gh-review.md讲的是评审后处理而评审的对象——PR 本身——在本仓库有严格的形状约束理解这一点有助于把回复内容写得更贴合仓库约定。依据 open-pr.md本仓库采用squash mergePR 标题会直接成为main分支上的提交 subject因此标题必须按 Conventional Commit 书写check-pr-title.yaml 校验标题的 Conventional Commit 形状并针对 PR diff 重新运行 scripts/validate-commit-scope.nu该脚本同时被 commit-msg hook 用于本地提交两者保持同步从 scripts/validate-commit-scope.nu 源码可见scope 命名的是发生变更的 agent而非目录如feat(codex)、fix(kimi)跨切面 scope 为deps、release、pricing、revert跨多 agent 的工作区 scope 为adapter、all、rust。因此评审回复中若提到Validation: just typecheck, just test对应的是仓库 justfile 中的校验配方如just check、just rust::test、just test-node映射关系见 fix-ci 技能 中的表格。六、实操注意事项handle 以 PR 实况为准gh-review.md与ai-review.md都强调评审者 handle 只是示例Cubic 的 GitHub 用户是cubic.dev但也可能使用 PR 中出现的其他 handle复制命令时必须替换为当前 PR 上的真实值。分页勿遗漏reviewThreads(first: 100)在大型 PR 上会截断务必补充pageInfo/after游标分页否则可能漏掉未解析线程误判 PR ready。bot 只在被 mention 时行动create-pr技能的 Context 一节明确——bot 只有在 handle 被提及时才会响应初次请求和每次要求其做事的回复都要 mention。沉默不等于完成当 bot 或 CI 在合理轮询窗口内保持沉默要如实说明 pending 状态而不是声称完成。谨慎 force-push评审者已阅读 PR 后amend 或 force-push 需要用户明确要求。合并前确认条件分支已推送、PR 存在、CodeRabbit以及可用时的 Cubic已评审最新提交且无未解决 actionable 反馈、所有必需检查通过且用户明确要求合并——缺一不可。结语gh-review.md虽短却是 ccusage 仓库 AI 评审闭环中不可替代的一环它补上了ghCLI 的两个能力缺口——REST 层级的行内线程回复与 GraphQL 层级的线程解析状态查询。配合 ai-review.md 的分类与回复策略、open-pr.md 的标题与正文规范、fix-ci 的 CI 修复流程即可在任意 PR 上完整复现本仓库的评审循环。上述命令全部基于官方gh api/gh api graphql在任何使用 GitHub 的项目中均可直接迁移使用。赞分享AI 应用CLI开发工具【免费下载链接】ccusagenpx ccusage项目地址https://gitcode.com/gh_mirrors/cc/ccusage点击查看免费下载相关推荐使用 gh CLI 高效处理 GitHub PR 评审评论Codex 技能 gh-address-comments 实战指南使用 gh CLI 高效处理 GitHub PR 评审评论Codex 技能 gh address comments 实战指南 本篇技术指南讲解 Agent S人工智能AI 技能AI 插件tldraw 仓库 PR 维护自动化用 shepherd-pr 技能自主评审 PR 评论、修复构建失败与清理线程tldraw 仓库 PR 维护自动化用 shepherd pr 技能自主评审 PR 评论、修复构建失败与清理线程 本篇技术指南围绕 tldraw 开源仓库m前端UI组件awesome-codex-skills 实战用 gh-address-comments 技能自动定位并处置当前分支的 GitHub PR 评审评论awesome codex skills 实战用 gh address comments 技能自动定位并处置当前分支的 GitHub PR 评审评论 本技术指AI 技能AI 插件工作流自动化人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考