SuperAPI AI 工具集

quality-commit

编程与开发

查看项目

更新于 10-15 08:17

技能介绍

Quality Commit 是一个面向代码提交环节的质量门禁技能,用于在真正创建 git 提交之前,对已暂存的变更统一运行 lint、类型检查、Semgrep 安全扫描、可选的 CodeRabbit 审查以及相关测试。它的定位是替代手动多步的提交准备流程,减少 pre-commit 钩子带来的摩擦。

主要能力与执行流程

该技能的核心流程是:先检测是否存在已暂存文件,若没有则打印警告并退出;若有,则按顺序执行 Lint → TypeCheck → Semgrep → Tests → Commit。当使用 --review 或 --full 参数时,会在提交前额外加入 CodeRabbit 审查(较慢,约 30 秒)。当使用 --push 参数时,会在提交后对已提交文件再次运行 Semgrep,并推送到远程。

门禁执行细节

范围检测方面,技能通过 git diff --cached --name-only --diff-filter=ACMR 获取暂存文件,并调用 scripts/classify-staged-files.sh 将文件分类为 frontend、api、shared。

Semgrep 扫描采用逐文件方式,因为 Semgrep 1.146.0+ 在传入多个文件参数时会崩溃(Invalid_argument: invalid path)。因此技能始终使用循环逐个扫描文件,对 critical/high 级别发现进行阻断,对 medium/low 级别发出警告,未安装时跳过。

类型检查按工作区执行不同命令:frontend 使用 npx svelte-check --tsconfig ./tsconfig.json --threshold error(测试文件中 11 个既有错误为已知基线,忽略);api 与 shared 使用 npx tsc --noEmit。

相关测试发现通过 node scripts/find-related-tests.js <staged-file> 完成,例如从 src/lib/server/auth/rbac.ts 找到 src/lib/server/auth/rbac.test.ts,然后使用 npx vitest run <test-files> --reporter=verbose 运行发现的测试。

提交信息格式

提交信息采用 type(scope): description 格式,并包含 Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com。类型包括 feat、fix、refactor、test、docs、chore;范围包括 security、phaseX.Y、api、frontend、database、auth、workflows。

推送流程(仅 --push)

推送时会对已提交文件重新运行 Semgrep(同样逐文件循环,使用 git diff --name-only HEAD~1),检测上游分支(git rev-parse --abbrev-ref @{u} 2>/dev/null),若无上游则执行 git push -u origin $BRANCH,否则执行 git push。若 Semgrep 发现 critical/high 问题则中止推送,但提交保持完整,不会撤销提交。

参数说明

空参数:lint + typecheck + semgrep + tests + commit。--review / --full:增加 CodeRabbit 审查。--dry-run:运行所有门禁,跳过实际提交和推送。--push:提交后执行 semgrep 并推送到远程。--message "...":使用自定义提交信息。

使用限制与约束

技能明确规定:绝不运行 git add . 或 git add -A,始终按文件名暂存特定文件;绝不在门禁部分失败后绕过钩子进行提交;绝不让可选工具(CodeRabbit、Semgrep)在未安装时阻塞工作流,而是跳过并警告;绝不在提交准备期间扩大范围到无关的仓库清理;绝不尝试自动修复门禁失败并重试,而是报告错误,让代理先修复。

适用场景

适用于需要在提交前统一执行代码质量与安全检查的仓库,尤其是包含 frontend、api、shared 多工作区、使用 Svelte 与 TypeScript、并希望将 Semgrep 安全扫描和测试纳入提交门禁的开发流程。