pr-babysitter
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePR Babysitter
PR照看工具
- IS: keeping one open PR moving: conflicts, CI across GitHub Actions/Buildkite/Vercel/Fly.io, inbound review comments, and merge readiness, as a background monitor or as one-shot fixes.
- IS NOT: opening or editing the PR (), reviewing the diff for bugs (
pr-creator), applying a localpr-reviewerreport (pr-reviewer), or npm release PRs (tidywatches its own release CI; never babysit a release or Version Packages PR it drives).autoship
- 功能: 持续推进单个已打开PR的进程:监控冲突、跨GitHub Actions/Buildkite/Vercel/Fly.io的CI状态、 incoming评审评论以及合并就绪状态,支持后台监控或一次性修复。
- 不包含: 打开或编辑PR(使用)、评审差异以查找bug(使用
pr-creator)、应用本地pr-reviewer报告(使用pr-reviewer),或处理npm发布PR(tidy会自行监控其发布CI;请勿照看由它驱动的发布PR或Version Packages PR)。autoship
Mode Selection
模式选择
| Invocation | Mode |
|---|---|
| "babysit", "watch this PR", "monitor", "keep it green" | Monitor: Phase 1 once, then phases 2-5 on every event or tick |
| "fix CI", "why is CI red", "loop on CI" | One-shot Phase 3 loop |
| "resolve conflicts", "rebase onto main", "update the branch" | One-shot Phase 2 |
| "address the comments", "reply to the reviewers", "triage review comments" | One-shot Comment Triage Workflow |
| "is it ready", "what is blocking the merge" | One-shot Phase 5 report |
Standing rules, every mode:
- No setup questions. Auto-detect the PR, the CI platforms, and the defaults (poll every 2 minutes, auto-resolve noise, no auto-merge), then start. Overrides arrive inline: "poll every 5 minutes", "enable auto-merge".
- Skip closed or merged PRs. Skip drafts () unless asked.
isDraft - Comment triage runs autonomously; the plan file is an audit trail, not an approval gate.
- Speak only on transitions. A quiet poll says nothing.
| 调用指令 | 模式 |
|---|---|
| "babysit"、"watch this PR"、"monitor"、"keep it green" | 监控模式:先执行第一阶段一次,之后在每次事件触发或定时检查时执行第2-5阶段 |
| "fix CI"、"why is CI red"、"loop on CI" | 一次性第三阶段循环 |
| "resolve conflicts"、"rebase onto main"、"update the branch" | 一次性第二阶段 |
| "address the comments"、"reply to the reviewers"、"triage review comments" | 一次性评论分类工作流 |
| "is it ready"、"what is blocking the merge" | 一次性第五阶段报告 |
所有模式通用规则:
- 无需设置问题。自动检测PR、CI平台及默认配置(每2分钟轮询一次、自动解决无效问题、不自动合并),然后启动。可通过内联指令覆盖默认值:“每5分钟轮询一次”、“启用自动合并”。
- 跳过已关闭或已合并的PR。除非明确要求,否则跳过草稿PR(为真)。
isDraft - 评论分类自动执行;计划文件仅作为审计跟踪,而非审批关卡。
- 仅在状态发生变化时通知。无变化的轮询不发送任何消息。
Reference Files
参考文件
| File | Read when |
|---|---|
| Phase 1: watch ladder detail, Monitor watch script, cron fallback, state file format, defaults |
| Phase 2: |
| Phase 3: |
| Comment triage: run |
| Comment triage: script output contract, manual GraphQL/REST fallback, thread accounting, anchor ladder, awaiting-reply rule, reply and resolve |
| Comment triage: reviewer detection, severity mapping, merge gates, noise markers, dedup, false positives |
| Comment triage: plan file format and the legal ignore reasons |
| Before any commit: lint, type-check, test, |
| A git command hangs or fails transiently (fsmonitor wedge, stale |
| Only when changing this skill; never during a PR task |
| 文件 | 读取时机 |
|---|---|
| 第一阶段:监控层级细节、监控脚本、cron备选方案、状态文件格式、默认配置 |
| 第二阶段: |
| 第三阶段: |
| 评论分类:先运行 |
| 评论分类:脚本输出约定、手动GraphQL/REST备选方案、线程统计、锚点层级、待回复规则、回复与解决 |
| 评论分类:评审者检测、严重程度映射、合并关卡、无效标记、去重、误报处理 |
| 评论分类:计划文件格式及合法忽略原因 |
| 提交前:代码检查、类型校验、测试、 |
| Git命令挂起或临时失败(fsmonitor阻塞、过期 |
| 仅在修改此技能时使用;PR任务执行期间绝不使用 |
Monitor Loop
监控循环
Phase 1 runs once in the foreground and starts the watch. Every event or tick then runs phases 2-5, diffs against the state file, and speaks only when something changed.
Copy this checklist to track progress:
text
PR babysit progress:
- [ ] Phase 1: Initialize (detect PR, pick watch mechanism, snapshot state)
- [ ] Phase 2: Conflict check
- [ ] Phase 3: CI check (diagnose, fix, gate, push)
- [ ] Phase 4: Comment check (triage new comments)
- [ ] Phase 5: Readiness check (report transitions, write state file)第一阶段在前台执行一次并启动监控。之后每次事件触发或定时检查时执行第2-5阶段,与状态文件对比差异,仅在发生变化时通知。
复制以下清单跟踪进度:
text
PR照看进度:
- [ ] 第一阶段:初始化(检测PR、选择监控机制、快照状态)
- [ ] 第二阶段:冲突检查
- [ ] 第三阶段:CI检查(诊断、修复、关卡、推送)
- [ ] 第四阶段:评论检查(分类新评论)
- [ ] 第五阶段:就绪检查(报告状态变化、写入状态文件)Phase 1: Initialize
第一阶段:初始化
- . No PR for the branch: say so and stop.
gh pr view [N] --json number,url,title,state,isDraft,headRefName,baseRefName,headRefOid,mergeable,mergeStateStatus,reviewDecision - for the calls that need
gh repo view --json owner,name.owner/repo - Detect CI platforms from (dispatch table in Phase 3).
gh pr checks --json name,link - Pick the watch mechanism: first rung that applies.
| Rung | Available when | Behaviour |
|---|---|---|
| Harness PR subscription | A PR-subscription tool is exposed (cloud sessions: | GitHub pushes review comments, CI failures, and check-suite success into the session. GitHub sends nothing when the base branch advances, so pair it with a slow Monitor poll (10 minutes) on |
| Monitor tool | | Start the watch script from the monitoring reference with |
| Cron | | |
| None | Neither | Do not claim monitor mode. Run the matching one-shot mode, or say this runtime cannot keep polling |
- Snapshot state to : mechanism and ID, head SHA, mergeability, check states, open and awaiting-reply thread counts, review decision. This folder is never staged.
.claude/pr-babysitter/babysit-pr-{N}.md - Confirm in five lines: PR, watch mechanism and ID, detected CI, current state, defaults in effect.
- 执行。若当前分支无对应PR,告知用户并停止。
gh pr view [N] --json number,url,title,state,isDraft,headRefName,baseRefName,headRefOid,mergeable,mergeStateStatus,reviewDecision - 执行获取需要
gh repo view --json owner,name的调用所需信息。owner/repo - 通过检测CI平台(第三阶段有调度表)。
gh pr checks --json name,link - 选择监控机制:按优先级选择适用的方式。
| 层级 | 可用条件 | 行为 |
|---|---|---|
| Harness PR订阅 | 存在PR订阅工具(云端会话: | GitHub将评审评论、CI失败及检查套件成功事件推送到会话。当基准分支更新时GitHub不会发送事件,因此需搭配慢速监控轮询(10分钟)检查 |
| 监控工具 | 工具列表中包含 | 从监控参考文档启动监控脚本,设置 |
| Cron | 工具列表中包含 | 设置 |
| 无 | 以上均不可用 | 不启用监控模式。运行匹配的一次性模式,或告知当前运行时无法持续轮询 |
- 将状态快照保存到:包含监控机制及ID、头部SHA、可合并性、检查状态、未关闭及待回复线程数、评审决策。该文件夹永远不会被暂存。
.claude/pr-babysitter/babysit-pr-{N}.md - 用五行内容确认:PR信息、监控机制及ID、检测到的CI、当前状态、生效的默认配置。
Phase 2: Conflict Check
第二阶段:冲突检查
gh pr view --json mergeable,mergeStateStatusDIRTYBEHINDUNKNOWNbash
git fetch origin {base} && git rebase origin/{base}
git push --force-with-lease --force-if-includes- Clean rebase: push, notify.
- Conflicts only in lockfiles, generated files, or changelogs: regenerate per the reference, continue the rebase, push.
- Conflicts in source logic, migrations, or API contracts: , then notify with the files and what each side changed. Human intent decides those.
git rebase --abort
Bare is never used. A refused lease means someone else pushed: abort and notify rather than overwrite their commits. More than one author on the branch means a rebase rewrites their commits: merge instead.
--forceorigin/{base}执行。状态需解决冲突;状态需更新分支;表示GitHub仍在计算,下次轮询再检查;其他状态则进入下一阶段。
gh pr view --json mergeable,mergeStateStatusDIRTYBEHINDUNKNOWNbash
git fetch origin {base} && git rebase origin/{base}
git push --force-with-lease --force-if-includes- 干净变基:推送代码并通知用户。
- 仅锁文件、生成文件或变更日志存在冲突:根据参考文档重新生成文件,继续变基,推送代码。
- 源代码逻辑、迁移或API契约存在冲突:执行,然后通知用户冲突文件及双方的变更内容。此类冲突需人工决策。
git rebase --abort
绝不使用裸参数。若推送被拒绝,说明他人已推送代码:终止操作并通知用户,而非覆盖他人提交。若分支有多个作者,变基会重写他人提交:改为合并分支。
--forceorigin/{base}Phase 3: CI Check
第三阶段:CI检查
- .
gh pr checks --json name,state,bucket,link,workflowisbucket,pass,fail,pending, orskipping;cancelis the details URL.link - Anything : wait. Diagnosing a half-finished run fixes the wrong thing.
pending - Every : fetch logs by platform.
fail
Check | Platform | Logs |
|---|---|---|
| Buildkite | |
| Vercel | |
| Fly.io | |
| Anything else | GitHub Actions | |
- Classify per the reference: flaky (re-run once), stale dependency (reinstall and rebuild before touching source), code error (fix), (delete dead code or configure), infrastructure (notify; not fixable from code).
knip - Fix, run the verification gate, commit, push. Flag regressions against the previous state (was passing, now failing).
One-shot loop ("fix CI"): after each push, (exit 0 green, 1 a check failed, 8 still pending). Stop and summarize when checks are green, the failure is infrastructure, or the same check fails twice with the same error after a fix. Two identical failures is the signal to stop pushing, not to try a third variant.
gh pr checks --watch --fail-fast- 执行。
gh pr checks --json name,state,bucket,link,workflow的值为bucket、pass、fail、pending或skipping;cancel为详情URL。link - 若存在状态:等待。诊断未完成的运行可能会修复错误的问题。
pending - 每个状态:按平台获取日志。
fail
检查 | 平台 | 日志获取方式 |
|---|---|---|
前缀为 | Buildkite | 若 |
名称包含 | Vercel | |
前缀为 | Fly.io | |
| 其他 | GitHub Actions | |
- 根据参考文档分类:不稳定(重新运行一次)、依赖过期(重新安装并构建后再修改源代码)、代码错误(修复)、问题(删除死代码或配置)、基础设施问题(通知用户;无法通过代码修复)。
knip - 修复问题,执行验证关卡,提交,推送。标记与之前状态相比的回归(之前正常,现在失败)。
一次性循环(“修复CI”): 每次推送后,执行(退出码0表示正常,1表示检查失败,8表示仍在等待)。当检查正常、故障为基础设施问题,或同一检查在修复后连续两次失败且错误相同时,停止并总结。连续两次相同失败是停止推送的信号,而非尝试第三种方案。
gh pr checks --watch --fail-fastPhase 4: Comment Check
第四阶段:评论检查
- Count open threads and threads awaiting my reply (newest comment not mine, in any resolution state, minus a reviewer who resolved their own last comment).
- Compare both counts and the newest across review and issue comments against the state file. An edited-in-place bot comment and a reply on a resolved thread both have to register.
updated_at - Any increase: notify "N new review comments on PR #{N}" and run the Comment Triage Workflow.
- 统计未关闭线程数和待回复线程数(最新评论不是自己的,无论解决状态如何,减去自行解决最后一条评论的评审者)。
- 将这两个计数以及评审和issue评论的最新与状态文件对比。机器人编辑的评论和已解决线程中的回复都需被识别。
updated_at - 若计数增加:通知“PR #{N}收到N条新评审评论”并启动评论分类工作流。
Phase 5: Readiness Check
第五阶段:就绪检查
- Ready means all of: , every required check
mergeable == MERGEABLE,passfrom a review whosereviewDecision == APPROVEDis the head SHA, zero open blocking threads, zero threads awaiting my reply, every merge gate satisfied.commit_id - A merge-gate comment reading "Human review required" is a blocker to report with the criteria that forced it, not a finding to fix.
- Ready: notify "PR #{N} is ready to merge." Merge is a one-way door: with the repo's merge method, and only when the user opted in.
gh pr merge --auto - Not ready: name the blockers ("Waiting on: 2 checks pending", "Awaiting your answer: 2 questions from @reviewer", "Approval is stale: reviewed abc1234, head def5678").
- Write the state file for the next tick.
- 就绪状态需满足所有条件:、所有必填检查
mergeable == MERGEABLE、pass且评审的reviewDecision == APPROVED为当前头部SHA、无未关闭的阻塞线程、无待回复线程、所有合并关卡均已满足。commit_id - 包含“需要人工评审”的合并关卡评论是需要报告的阻塞项,而非需要修复的问题。
- 就绪状态:通知“PR #{N}已准备好合并”。合并是单向操作:仅当用户选择启用时,使用仓库的合并方式执行。
gh pr merge --auto - 未就绪状态:列出阻塞项(“等待中:2项检查未完成”、“待您回复:评审者@reviewer的2个问题”、“评审已过期:评审基于abc1234,当前头部为def5678”)。
- 写入状态文件供下次轮询使用。
Comment Triage Workflow
评论分类工作流
Inline from Phase 4 or one-shot. Autonomous: no approval gate, the plan file is the audit trail.
从第四阶段内联启动或作为一次性任务执行。自动执行:无需审批,计划文件作为审计跟踪。
Fetch
获取评论
Run . It pages every thread and every thread's comments, recovers anchors, buckets threads, and computes against your own login. A non-zero exit prints one sentence on stderr saying why; fall back to the manual queries in the API reference only when or cannot be installed.
${CLAUDE_SKILL_DIR}/scripts/fetch-comments.sh {N}owedReplyghjqCheck before classifying: every login that spoke must appear in the output with findings, a verdict, or an explicit "no content". A reviewer with reviews but zero comments is a fetch that lost something. means finish the anchor ladder against the working tree before judging that finding.
reviewers[]anchor.source == "needs-translation"Early exit only when open threads, awaiting-reply threads, actionable reviews, and actionable issue comments are all zero.
运行。该脚本会遍历每个线程及其中的评论,恢复锚点,分类线程,并根据您的登录名计算。若退出码非零,会在stderr输出一句话说明原因;仅当无法安装或时,才使用API参考文档中的手动查询作为备选方案。
${CLAUDE_SKILL_DIR}/scripts/fetch-comments.sh {N}owedReplyghjq分类前检查:每个发言的登录名必须在输出中包含结果、结论或明确的“无内容”。若评审者有评审记录但无评论,说明获取过程丢失了信息。表示在判断问题前需完成工作树的锚点层级恢复。
reviewers[]anchor.source == "needs-translation"仅当未关闭线程、待回复线程、可操作评审和可操作issue评论均为零时才提前退出。
Classify
分类
- Every inline comment from every author is read. An author absent from the bot table is unknown, not noise; noise needs a positive marker match.
- Classify per comment, not per thread: a human reply inside a bot's thread carries full human weight.
- Author type from content first, then login. is shared by reviewers and noise alike.
github-actions[bot] - Severity from the source's own markers; unknown sources default to Major. Severity orders the queue; it never decides whether a comment is read.
- Human intent: fix request, question, nitpick, or acknowledgement. A question gets an answer, not a code change. Human comments are never auto-ignored: fix unless the reviewer marked it optional.
- Merge-gate verdicts are Phase 5 inputs: record, never fix, never reply, never resolve.
- Deduplicate bots only (same path within 3 lines, keep the highest severity). A multi-location finding is one item.
- Every ignore carries one of the legal reasons from the plan template. "Author unrecognized" and "thread already resolved" are not among them.
- 读取每个作者的每条内联评论。若作者不在机器人列表中则视为未知,而非无效;无效内容需要明确的标记匹配。
- 按评论分类,而非按线程:机器人线程中的人工回复具有完整的人工权重。
- 先根据内容判断作者类型,再根据登录名。既可能是评审者也可能是无效内容。
github-actions[bot] - 根据来源自身的标记确定严重程度;未知来源默认设为Major。严重程度决定处理顺序;但绝不决定是否读取评论。
- 人工意图:修复请求、问题、小问题或确认。问题需回复,而非修改代码。人工评论绝不会被自动忽略:除非评审者标记为可选,否则需修复。
- 合并关卡结论是第五阶段的输入:记录即可,绝不修复、回复或解决。
- 仅对机器人内容去重(路径相差3行以内,保留最高严重程度)。多位置问题视为一项。
- 每个忽略项需包含计划模板中的合法原因之一。“作者未识别”和“线程已解决”不属于合法原因。
Fix
修复
- Write the plan () to
references/fix-plan-template.md, print the counts, proceed..claude/pr-babysitter/pr-{N}-review-plan.md - Ignored threads: one-line reply, then resolve.
- Questions: post the answer, leave the thread open. The reviewer resolves it.
- Resolved threads with an unanswered human reply: reply in place, do not unresolve, note it in the report.
- Fixes, one commit per logical group. Run the verification gate before each commit and stage only that group's files.
- Reply, then resolve, each fixed thread.
- Re-run the script and report: open threads, threads still awaiting my reply, questions answered but not yet acknowledged, and current CI status. The re-run is the evidence; "addressed everything" is not.
- 将计划()写入
references/fix-plan-template.md,打印计数,继续执行。.claude/pr-babysitter/pr-{N}-review-plan.md - 忽略的线程:回复一行内容,然后解决线程。
- 问题:发布答案,保持线程未关闭。由评审者解决线程。
- 已解决线程中存在未回复的人工评论:在原地回复,不重新打开线程,在报告中注明。
- 修复:每个逻辑组提交一次。每次提交前执行验证关卡,仅暂存该组的文件。
- 回复每个已修复的线程,然后解决线程。
- 重新运行脚本并报告:未关闭线程、仍待回复的线程、已回答但未确认的问题、当前CI状态。重新运行的结果是证据;不要说“已处理所有问题”。
Stopping
停止操作
- "Stop babysitting" / "cancel the monitor": read the mechanism and ID from the state file. Monitor watch: . Cron:
TaskStop. Harness subscription: the matching unsubscribe tool.CronDelete - PR merged or closed: the watch script emits and exits; cron detects it next tick and self-cancels.
TERMINAL - Session exit: watches and cron jobs are session-scoped and clean themselves up. Background tasks are not restored on ; re-run the skill.
--resume
On stop, report: polls or events handled, fixes applied, conflicts resolved, comments triaged, current state.
- “停止照看PR” / “取消监控”:从状态文件读取监控机制及ID。监控脚本:执行。Cron:执行
TaskStop。Harness订阅:使用对应的取消订阅工具。CronDelete - PR已合并或关闭:监控脚本输出并退出;Cron会在下次定时检查时检测到并自动取消。
TERMINAL - 会话退出:监控和Cron任务属于会话范围,会自动清理。后台任务在时不会恢复;需重新运行此技能。
--resume
停止时报告:处理的轮询或事件数、应用的修复、解决的冲突、分类的评论、当前状态。
Gotchas
注意事项
- errors:
gh pr checks --json name,state,conclusion,detailsUrlandconclusionbelong todetailsUrl. The check fields aregh pr view --json statusCheckRollupandbucket.link - Filtering threads on : GitHub collapses resolved threads, so a human reply posted after the resolve is the comment most likely to go unread.
isResolved == false - : thread comments arrive oldest first, so a truncated page hides the newest comment, the one that decides whether you owe a reply. The script pages every thread to the end.
comments(first: 20) - returned
viewerDidAuthoron the viewer's own comments. Comparefalsetoauthor.login.gh api user --jq .login - A null means outdated or multi-line, not PR-level. Only a null
lineis PR-level. Recover the anchor before deciding anything.path - Triaging a bot's review body: the body is a count. Codex, Devin, Copilot, and Bugbot all put findings inline. Four empty-body human reviews are one review pass with its content in threads, not four reviewers with nothing to say.
- Bots that edit one comment in place (auto-approval assessments, DangerJS) keep the same , so a state diff on ids sees nothing. Compare
id.updated_at - Counting a review whose is not the head SHA as an approval: branch protection with "dismiss stale approvals" drops it on the next push, and the PR reads ready until then.
commit_id - streams runtime logs. A failed build lives in
vercel logs {url}.vercel inspect --logs {url} - without
bkfirst: keychain tokens expire and a dead token stalls the cycle. Fall through to REST, then the checkbk auth status.link - A monorepo type-check failure pointing into a sibling package's is usually stale build output. Reinstall and rebuild before editing source.
dist - after a fix commits hook artifacts (a root
git add -A) into the PR. Sweepschema.gqland stage paths.git status --porcelain - Resolving a thread without replying first: the reviewer sees a silent resolve and unresolves it.
- A subscription-only watch never sees conflicts: GitHub emits no webhook when the base branch advances into one.
- Cron when Monitor is available wakes the agent on every quiet tick and burns tokens for no signal. Polling under 2 minutes does the same to the GitHub rate limit.
- 报错:
gh pr checks --json name,state,conclusion,detailsUrl和conclusion属于detailsUrl。检查字段应为gh pr view --json statusCheckRollup和bucket。link - 过滤的线程:GitHub会折叠已解决线程,因此解决后发布的人工评论最可能被遗漏。
isResolved == false - :线程评论按时间从旧到新返回,因此截断的页面会隐藏最新评论,而最新评论决定是否需要回复。脚本会遍历每个线程到最后。
comments(first: 20) - 对查看者自己的评论返回
viewerDidAuthor:将false与author.login对比。gh api user --jq .login - 为null表示评论已过时或为多行,而非PR级评论。只有
line为null才是PR级评论。在做决定前需恢复锚点。path - 分类机器人的评审正文:正文是计数。Codex、Devin、Copilot和Bugbot都会将问题放在内联评论中。四个空正文的人工评审表示一次评审通过,内容在线程中,而非四个评审者无内容可说。
- 机器人原地编辑一条评论(自动审批评估、DangerJS)会保留相同的,因此基于id的状态差异检测不到变化。需对比
id。updated_at - 将非当前头部SHA的评审视为批准:开启“驳回过期批准”的分支保护会在下次推送时移除该批准,PR会显示就绪直到那时。
commit_id - 会流式传输运行时日志。失败的构建日志在
vercel logs {url}中。vercel inspect --logs {url} - 使用前未执行
bk:密钥链令牌过期会导致循环停滞。 fallback到REST接口,再到检查bk auth status。link - monorepo类型检查失败指向兄弟包的目录通常是因为构建输出过期。重新安装并构建后再编辑源代码。
dist - 修复后执行会将钩子产物(根目录的
git add -A)提交到PR中。清理schema.gql并暂存指定路径。git status --porcelain - 未回复就解决线程:评审者会看到静默解决并重新打开线程。
- 仅订阅的监控永远看不到冲突:当基准分支更新导致冲突时,GitHub不会发送webhook。
- 当Monitor可用时使用Cron会在每次无变化的定时检查时唤醒代理,浪费令牌。轮询间隔小于2分钟也会消耗GitHub的速率限制。
Related Skills
相关技能
- : opens or edits the PR; babysitting starts after it exists
pr-creator - : writes plans a fresh session executes. The fix plan this skill writes is an audit trail for one PR, not a
planningdeliverableplanning - : local diff review for bugs; run it on monitor-authored fixes beyond a trivial patch
pr-reviewer - : applies a
tidyreport to the working tree; this skill applies GitHub review commentspr-reviewer - : npm release pipelines; it watches its own release CI, so never babysit a release PR it drives
autoship
- :打开或编辑PR;PR照看从PR创建后开始
pr-creator - :编写供新会话执行的计划。此技能生成的修复计划仅针对单个PR的审计跟踪,而非
planning的交付物planning - :本地差异评审以查找bug;对监控工具生成的非 trivial修复运行此技能
pr-reviewer - :将
tidy报告应用到工作树;此技能应用GitHub评审评论pr-reviewer - :npm发布流水线;它会自行监控其发布CI,因此请勿照看由它驱动的发布PR
autoship