用途:对 GitHub 账号做跨机器仓库卫生审计与清理,采用“审计→批准→执行”流程,所有破坏性操作须经用户确认。也用于排查失败的 GitHub Actions、处理 Dependabot 告警与未使用依赖、定期账号维护。不适用于创建仓库或工作流、管理 issue/PR、搭建 CI/CD、修改仓库内容。
前置条件:gh auth status 必须通过,并核对 API 用户名与认证用户名一致。
主要能力与阶段:
- 跨机器工作区扫描:用 scripts/repo-sweep.sh 扫描本地与远程主机的克隆,查找未提交或未推送的工作。示例:"$S" local ~/Repos ~/.claude;"$S" ssh hezza '$HOME/Repos' '$HOME/.claude'。
- 失败工作流审计:遍历含工作流的仓库,检查 CodeQL 默认设置(注意其通过安全设置配置,API 为 code-scanning/default-setup,非工作流文件)、近期运行失败、action 版本(可从 simonw/actions-latest 的 versions.txt 获取,git ls-remote 解析 tag 到 SHA)。
- 陈旧 fork 审计:列出 fork 并用 compare API 查看 ahead/behind;ahead_by 为 0 且 behind 较大者建议删除。
- 孤立密钥审计:列出各仓库 secrets,与工作流文件中 secrets. 引用交叉比对,仅呈现供确认,绝不自动删除。
- 安全配置审计:检查 dependabot.yml、漏洞告警、代码扫描状态。
- Dependabot 告警处理:扫描开放告警,将告警溯源到直接依赖,优先移除未使用依赖而非升级锁文件;区分未使用的直接依赖、未使用依赖的传递依赖、真实使用依赖的传递依赖、fork 上游代码。修复示例:uv lock --upgrade、uv sync、uv run pytest;npm uninstall PACKAGE_NAME、npm install、npm test。注意 Dependabot 关闭的仓库返回 403 JSON 对象,需 isinstance(d, list) 判断,勿把错误字段计为告警。
- 通用依赖卫生:对比声明依赖与源码实际 import,处理“已声明未导入”“已导入未声明”及运行时引擎例外(openpyxl、lxml、kaleido、pytest-asyncio 等)。
- 强制检查清单:本地克隆的过期 remote、GitHub Apps、部署密钥、Webhook、协作者。
- 清理执行:汇总后用 AskUserQuestion 获取批准,再执行 gh repo delete GH_USER/REPO --yes、删除 secret、禁用 CodeQL(PATCH state=not-configured)、gh workflow disable,并做事后验证。
权限要求:删除仓库需 delete_repo(gh auth refresh -h github.com -s delete_repo),修改安全设置需 security_events;读取仓库与列出密钥为默认权限。
限制:需 gh CLI 与认证;删除类操作不可逆,必须先批准;Dependabot 告警清除为异步,推送后需自行核验锁文件而非等待。