用途
OpenClaw GHSA Maintainer 是一个专门用于仓库安全公告(GitHub Security Advisories,GHSA)维护的技能。它仅适用于 OpenClaw 仓库安全公告工作流,不应被用于稳定版或测试版发布工作——那类任务应使用 openclaw-release-maintainer。
使用前准备
在审查或发布仓库公告之前,必须先阅读 SECURITY.md,并遵守公告护栏。任何发布动作之前都需要征求许可。
主要能力
获取并检查公告状态
获取当前公告以及最新已发布的 npm 版本:
gh api /repos/openclaw/openclaw/security-advisories/<GHSA>
npm view openclaw version --userconfig "$(mktemp)"
利用获取结果确认公告状态、关联的私有分支以及漏洞 payload 形态,然后再进行修补。
验证私有分支 PR 已关闭
发布前,验证公告的私有分支没有未关闭的 PR:
fork=$(gh api /repos/openclaw/openclaw/security-advisories/<GHSA> | jq -r .private_fork.full_name)
gh pr list -R "$fork" --state open
发布前该 PR 列表必须为空。
安全地准备公告 Markdown 和 JSON
通过 heredoc 将公告 Markdown 写入临时文件,不要使用转义的 \n 字符串。
使用 jq 构建 PATCH payload JSON,而不是手工转义的 shell JSON。
示例模式:
cat > /tmp/ghsa.desc.md <<'EOF'
<markdown description>
EOF
jq -n --rawfile desc /tmp/ghsa.desc.md \
'{summary,severity,description:$desc,vulnerabilities:[...]}' \
> /tmp/ghsa.patch.json
按正确顺序应用 PATCH 调用
不要在同一个 PATCH 调用中同时设置 severity 和 cvss_vector_string。当公告需要同时包含这两个字段时,使用分开的调用。
发布的方式是 PATCH 公告并设置 "state":"published",不存在单独的 /publish 端点。
示例形态:
gh api -X PATCH /repos/openclaw/openclaw/security-advisories/<GHSA> \
--input /tmp/ghsa.patch.json
发布并验证成功
发布后重新获取公告并确认:
- state=published
- published_at 已设置
- 描述中不包含字面转义的 \n
验证模式:
gh api /repos/openclaw/openclaw/security-advisories/<GHSA>
jq -r .description < /tmp/ghsa.refetch.json | rg '\\\\n'
常见 GHSA 陷阱
- 如果缺少必需字段或私有分支仍有未关闭的 PR,发布会以 HTTP 422 失败。
- 如果 Markdown 是用转义换行字符串拼装的,payload 在 shell 中看起来正确也可能出错。
- 公告 PATCH 的顺序很重要;当 GHSA API 约束要求时,应将字段更新分开处理。
适用场景与限制
该技能仅适用于 OpenClaw 仓库的 GHSA 安全公告工作流,覆盖检查、修补、验证与发布公告等环节。不适用于常规发布(稳定版或测试版)任务。使用前必须阅读 SECURITY.md,发布前必须获得许可。具体字段、漏洞载荷与端点细节以资料提供的命令和约束为准,其他信息暂未提供。