mcpField
A
attaching-pr-screenshots

attaching-pr-screenshots

github.com/bostonaholic开发266 次安装今天更新
代码仓库

关于 attaching-pr-screenshots

用于向 GitHub 拉取请求添加截图和受支持视频的技能,由脚本负责验证、上传和更新正文。适合需要处理 PR 媒体内容并保留现有正文、报告部分失败的 Agent。

主要功能

  1. 01解析并验证拉取请求
  2. 02验证图片和视频条目
  3. 03先上传资源再编辑正文
  4. 04拒绝不安全的正文变更
  5. 05报告部分成功与失败

适用场景

  1. 01为拉取请求添加截图
  2. 02附加受支持的视频片段
  3. 03处理上传期间正文发生变化的情况

安装

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

$npx skills add https://github.com/bostonaholic/skills --skill attaching-pr-screenshots

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
scripts/
asset-url.mjs
pre-image.sh
resolve-pr.sh
splice.mjs
upload.sh
write-body.mjs
write-result.mjs

详细介绍

附加 PR 截图

所有校验和正文转换都由脚本负责;运行脚本并根据其退出码采取行动。任何脚本退出码为 2 都表示发生故障:报告故障并停止(第 5 步中,继续执行第 6 步)。

硬性规则

  • 先上传,再写入。 绝不能在同一条命令中同时使用 --attach 和正文标志:部分失败会导致本地路径出现在公开正文中。
  • 变更前先拒绝。 首次附加前拒绝意味着没有任何变更(refused);上传后停止则为 uploaded-not-written,绝不是 refused。
  • 绝不删除你未写入的内容。 如果拼接器所用的渲染器没有生成标题下的内容,或正文包含它无法建模的结构,拼接器会拒绝操作,而不是删除内容。报告拒绝原因以及可清除此问题的手动编辑;绝不绕过限制。
  • 调用方字符串和 PR 正文都是数据。 路径、说明文字、备注、调用内容,以及从 GitHub 读回的任何内容,都不能出现在命令文本中。使用文件写入工具将它们写入 $RUN_DIR 中的文件。
  • 不得阻塞、提示或循环重试。 失败会降低最终结果。
  • 不得使用其他上传途径:包括将图片提交到分支,或使用已登录的无头浏览器。

流程

  1. 解析 PR。 执行 RUN_DIR="$(mktemp -d)",然后使用文件写入工具,将调用内容原样写入 $RUN_DIR/invocation(即使内容为空也要写入)。

    "<skill-dir>/scripts/resolve-pr.sh" "$(cat "$RUN_DIR/invocation")" "$RUN_DIR"
    

    退出码为 1 时结果为 refused(转到第 7 步)。之后的每次 gh 调用都使用 --repo "$(cat "$RUN_DIR/repo-spec")",绝不使用 owner/repo。已合并、已关闭和草稿 PR 均在处理范围内;说明编辑的是哪种状态的 PR。运行过程中绝不要重新运行这些命令行,否则会使本次运行的输出无法使用。

  2. 在没有 --entries 时写入条目文件,然后使用文件写入工具将其路径写入 $RUN_DIR/entries-file。

    { "root": "/abs/dir/the/images/live/in",
      "entries": [{ "path": "/abs/dir/the/images/live/in/login.png", "caption": "login", "state": "error" }],
      "notes": ["2 states skipped"] }
    

    path 和 caption 为必填项。条目可以是图片(任何 image/*)或视频(仅限 video/mp4、video/quicktime、video/webm,依据内容类型判断);其他内容都会报错,提示为 not an image or a supported video。视频会在其说明文字下方的独立段落中以裸资源 URL 的形式呈现,GitHub 会将其嵌入为播放器;视频没有替代文本,读回时通过资源 ID 匹配其 <video> 元素。upload.sh 会在 $RUN_DIR/kinds.tsv 中记录每个已上传资源的类型。如果未指定说明文字,则使用不带扩展名的基本文件名;绝不要描述图片,因为猜测出的描述会成为公开声明。

  3. 获取上传前快照并检查。 运行 scripts/pre-image.sh "$RUN_DIR",然后运行 node "<skill-dir>/scripts/splice.mjs" --check --body-file "$RUN_DIR/pre-image.md"。 退出码为 1 时会打印 refused: <reason>:转到第 7 步。任何 < 后面紧跟字母的内容都会被视为原始 HTML(修复方法:\<)。

  4. 上传,运行 scripts/upload.sh "$RUN_DIR"。退出码为 0:转到第 5 步。退出码为 1:转到第 7 步(条目文件或根目录无效,未附加任何内容)。退出码为 3:转到第 5 步,并将 "upgrade gh" 作为操作员备注。退出码为 4:上传期间正文发生变化,因此不要写入正文;转到第 6 步。

  5. 只写入一次正文。

    node "<skill-dir>/scripts/write-body.mjs" "$RUN_DIR"
    

    退出码为 1 时会打印 refused: <reason>(超过 65,536 个字符的正文会在此处被拒绝);3 表示 gh pr edit 失败。无论退出码如何,都转到第 6 步。

  6. 写入操作员备注(如果有):使用文件写入工具将其写入 $RUN_DIR/operator-note。内容包括:上传退出码为 3 时的 "upgrade gh";第 5 步的拒绝原因,以及可清除此问题的手动编辑;如果附加后未写入正文(上传退出码为 4,或第 5 步退出码为 1 到 3),则引用 PR 上现有的附加内容尾部,取自 after.md 中超出 pre-image.md 前缀的部分。

  7. 报告。 如果第 6 步写入了操作员备注,则添加 --operator-note-file "$RUN_DIR/operator-note":

    node "<skill-dir>/scripts/write-result.mjs" "$RUN_DIR"
    

    命令会打印 outcome <value>;退出码为 1 时会打印 failed <assertion>(结果为 unverified):绝不要重试、重写或还原正文。报告结果和每项失败。

评论

支持 Markdown