mcpField
B
babysit

babysit

github.com/thedotmack测试与质量104.0k5.0k 次安装今天更新
代码仓库

关于 babysit

面向编码 Agent 的 PR 跟进技能,持续检查状态、审查反馈和讨论线程,直到可处理的问题解决且 PR 状态清晰。

主要功能

  1. 01监控 PR 状态与检查
  2. 02查看评论和审查线程
  3. 03对照代码核实问题
  4. 04修复问题并重新测试
  5. 05确认最终状态干净

适用场景

  1. 01跟进尚未完成的检查
  2. 02在多轮修订中处理审查反馈
  3. 03最终汇报前核验 PR

安装

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

$npx skills add https://github.com/thedotmack/claude-mem --skill babysit

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

详细介绍

跟进 PR

持续跟进 PR,直到它确实没有问题。如果评论或评审讨论串仍未解决,不要在检查一轮后就停止。

工作流

  1. 确认 PR 编号、分支和基分支。
  2. 确认 PR 不是草稿,并检查合并状态、检查项、评审决定、评论和评审讨论串。
  3. 等待待处理的检查项完成。以合适的间隔轮询,通常为 30-60 秒,除非用户要求采用其他频率。
  4. 阅读新评论和未解决的评审讨论串。将机器人摘要视为有用信息,但要对照代码核实其中需要采取行动的问题。
  5. 在专注的提交中修复实际问题,运行相关测试和构建,推送,然后返回第 2 步。
  6. 只有在确认代码或生成的产物已解决评论后,才解决过时的评审讨论串。
  7. 只有在检查项全部通过或被有意跳过、评审决定可接受、没有需要处理的评论且没有未解决的评审讨论串时,才停止。

GitHub CLI 检查

使用 gh pr view 查看总体状态:

gh pr view <number> --json \
  number,state,isDraft,mergeable,mergeStateStatus,reviewDecision,headRefOid,statusCheckRollup,url

使用 GraphQL 前,先确定仓库所有者和名称:

repo_json=$(gh repo view --json owner,name)
owner=$(jq -r '.owner.login // .owner.name' <<<"$repo_json")
repo=$(jq -r '.name' <<<"$repo_json")

使用 GraphQL 查询未解决的评审讨论串。包含 pageInfo;第一页省略 cursor,之后在 hasNextPage 为 true 时,通过 -f cursor="$cursor" 传入前一页的 endCursor。

gh api graphql \
  -f query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}' \
  -f owner="$owner" -f repo="$repo" -F number=<number>

PR 可能包含许多评审讨论串时,使用此循环:

thread_query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}'
cursor_args=()

while :; do
  page=$(gh api graphql -f query="$thread_query" -f owner="$owner" -f repo="$repo" -F number=<number> "${cursor_args[@]}")
  printf '%s\n' "$page" | jq -r '.data.repository.pullRequest.reviewThreads.nodes[]
    | select(.isResolved==false)
    | [.id,.path,(.line//""),(.isOutdated|tostring),(.comments.nodes[-1].author.login//""),(.comments.nodes[-1].body|gsub("\n";" ")|.[0:240])]
    | @tsv'

  jq -e '.data.repository.pullRequest.reviewThreads.pageInfo.hasNextPage' >/dev/null <<<"$page" || break
  cursor=$(jq -r '.data.repository.pullRequest.reviewThreads.pageInfo.endCursor' <<<"$page")
  cursor_args=(-f cursor="$cursor")
done

使用 jq 筛选未解决的讨论串:

jq -r '.data.repository.pullRequest.reviewThreads.nodes[]
  | select(.isResolved==false)
  | [.id,.path,(.line//""),(.isOutdated|tostring),(.comments.nodes[-1].author.login//""),(.comments.nodes[-1].body|gsub("\n";" ")|.[0:240])]
  | @tsv'

只有在确认修复有效后,才解决过时的讨论串:

gh api graphql \
  -f query='mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id,isResolved}}}' \
  -f threadId=<thread-id>

操作规则

  • 长时间检查仍在等待时,保持监视进程运行。
  • 如果生成的文件属于分发内容,在解决评论前,确认源文件和生成的产物一致。
  • 如果机器人针对过时的代码报告问题,确认该讨论串是否已过时,或是否已在最新的 head 中解决。
  • 最终报告前,重新检查一次 PR 状态、未解决的讨论串、近期评论和本地 git status。
  • 提供具体证据:最新提交 SHA、检查项名称及结果、未解决讨论串数量、运行的测试,以及未作处理的本地脏文件。

评论

支持 Markdown