SuperAPI AI 工具集

check-upstream

部署与运维

查看项目

更新于 10-16 04:09

技能介绍

用途

check-upstream 用于对比当前 fork 与上游仓库(mattpocock/skills)之间的差异,给出处理建议,并在用户明确同意后,将上游改动以 PR 形式合并进来,同时保留 fork 独有的全部改动。

该技能按设计存放在 .claude/skills/ 目录下,位于 skills/ 之外,因此既不会被 scripts/link-skills.sh 分发,也不会随消费者的技能更新而分发。

主要能力

  • 生成报告:运行 bash .claude/skills/check-upstream/scripts/report.sh,输出引用、自 fork 点以来的上游提交、上游改动的文件、发布状态、fork 独有路径,以及列出所有将冲突文件的合并预览。若已是最新,则报告并停止。
  • 逐条建议:阅读报告中每个提交背后的差异(git show <sha>),为每个提交给出判定:take(需要,落在 fork 未改动的路径)、collides(触及 fork 已编辑的文件,需指出受影响的 fork 行为)、irrelevant(仅触及 fork 未携带的路径)。再按报告打印的发布边界拆分:位于或低于最后一次版本提升的提交已发布,其上的尾部提交将在下一版本发布。最终给出一个建议——立即合并、等待发布,或带指定编辑合并,并附一行理由。
  • 门控确认:展示判定、冲突列表和建议,然后请求明确同意。只有得到清晰肯定答复才执行合并。
  • 合并:从 fork 默认分支切出同步分支(git switch -c sync/upstream-$(date +%Y-%m-%d) main),记录该基线的 sha(git rev-parse main),然后执行 git merge upstream/main。
  • 冲突解决:索引文件(README.md、skills/*/README.md、.claude-plugin/plugin.json、skills/engineering/ask-matt/SKILL.md)按并集解决,上游条目与 fork 独有条目均保留;fork 编写的技能位于 skills/fork/,在 skills/fork/README.md 和顶层 README.md 的 Fork 标题下列出,该块上游从不写入,因此此处冲突属于合并产物而非真实编辑,应整体采用 fork 一侧。版本文件(package.json、.claude-plugin/plugin.json 的 version 字段、CHANGELOG.md)整体采用上游一侧。.changeset/ 保留双方条目。fork 编辑过的共享技能,围绕 fork 行为应用上游编辑;若两者真正矛盾,停止并询问用户以哪一方为准。
  • 验证:运行 bash .claude/skills/check-upstream/scripts/verify.sh <pre-merge sha>,确认每个 fork 独有路径仍逐字节一致,每个 fork 独有技能仍在其曾列出的每个索引文件中被命名。然后执行 claude plugin validate . --strict。两者均通过即完成。verify.sh 标记的任何内容要么恢复,要么向用户解释为有意解决。
  • 创建 PR:gh pr create --repo <fork> --base <default branch>。需明确指定 fork:在 fork 上,gh 默认指向上游父仓库,会因权限不足而失败。PR 正文包含合并范围、所做的每项解决,以及仍需用户关注的内容,并报告 URL。

使用方式

步骤 1–3 为只读操作,在得到明确肯定答复前不会合并任何内容。同步分支从默认分支切出,因此会携带这些脚本。若该技能仍位于未合并分支上,需先提取脚本:git archive <branch> .claude/skills/check-upstream | tar -x -C .temp/,然后运行该副本。

适用场景

适用于用户询问上游是否有改动、希望审查上游差异,或希望将上游改动合并进 fork 的场景。

限制

该技能为仓库本地技能,不随技能更新分发。合并前必须获得用户明确同意。冲突解决需遵循既定规则,真正矛盾时需用户裁决。在 fork 上创建 PR 必须显式指定仓库,否则会因权限问题失败。