开源 PR 审查引擎
确定性规则 · 可追溯证据 · 审查覆盖率 · 可选 AI 分析
快速体验 · 当前能力 · 接入指南 · 本地开发 · 参与项目
Evidence Review Bot 接收平台的 PR 事件,读取固定提交的变更快照,执行审查,并将结果发布回代码托管平台。报告会说明检查了什么、发现了什么、哪些范围没有完成。项目正在测试仓库阶段,适合评估报告方式和联调流程;检测效果与生产运行能力尚未经过充分验证。
|
从明确的凭据格式规则开始,记录匹配位置与脱敏候选。 |
结果绑定具体提交,保留规则、代码位置和证据来源。 |
|
明确展示已检查范围、部分完成原因与未运行的检查。 |
GitHub Check 与 Gitee 中文 PR 评论,共用审查核心。 |
无需数据库、平台账号或 AI 密钥,就能先查看报告格式。需要 Node.js 22.22.2 和 npm:
git clone --branch github https://github.com/ACatNight/evidence-review-bot.git
cd evidence-review-bot
npm ci
npm run demo:report -- github
npm run demo:report -- gitee这两个命令生成离线合成报告:不读取真实仓库代码,不执行扫描,不连接数据库或模型,也不会发布评论。报告展示候选问题、审查覆盖率、未检查范围和未运行的检查;不能用来判断检测准确率。真实接入请按下方的接入步骤操作。
| 能力 | 当前状态 | 边界 |
|---|---|---|
| GitHub PR 自动审查 | 已实现测试仓库链路 | GitHub App Webhook、固定 SHA 快照、Check 汇总 |
| Gitee PR 自动审查 | 已实现测试仓库链路 | 仓库 WebHook、固定 SHA 快照、中文 PR 评论报告 |
| 确定性规则 SEC-001 | 已实现 | 仅匹配指定 GitHub Token 与 PEM 格式;不验证凭据有效性 |
| AI 安全审查 | 可选,默认关闭 | 仅对授权仓库发送尽力脱敏的变更代码;输出是待人工核实的候选 |
| 审查覆盖率 | 已显示 | 区分已检查、部分完成和未运行;覆盖率不是安全评分或检出率 |
| Lint、构建、测试、依赖审计 | 机器人尚未执行 | 本仓库的 CI 独立运行这些检查,结果不代表目标 PR 已被机器人检查 |
| GitLab、反馈、抑制、回放、完整审计 | 规划中 | 当前没有可供用户启用的实现 |
零条候选不等于代码安全。 文件读取失败、超出限制、AI 调用失败和未运行的检查会在报告中体现。SEC-001 目前识别 GitHub 经典令牌、fine-grained PAT 和部分 PEM 私钥格式,仅报告涉及本次变更行的候选;其他服务密钥、普通密码和复杂 PEM 变体可能漏报。完整匹配条件见规则实现。
flowchart LR
A[GitHub App / Gitee WebHook] --> B[平台适配器]
B --> C[固定 SHA 的 PR 快照]
C --> D[审查引擎]
D --> E[确定性规则]
D --> F[可选 AI 分析]
E --> G[候选、证据与覆盖状态]
F --> G
G --> H[GitHub Check / Gitee 中文评论]
平台接入、任务处理和报告发布分别实现;领域契约与覆盖计算位于 src/domain/,规则位于 src/rules/。报告绑定具体提交,并在发布前核对 PR 状态,避免把旧快照的结果误当成当前结果。
当前可操作的部署路径是 Windows 本机试点。需要 PostgreSQL、Node.js、可供平台访问的 HTTPS Webhook 地址,以及所选平台的授权资料。首次配置后,脚本可构建、迁移并启动 API 与 Worker;它不会代建平台应用、数据库或公网入口。Docker Compose、跨平台安装器和管理界面尚未提供。
准备以下资料,并将密钥文件保存在仓库外:
| 配置 | 需要填写 |
|---|---|
| 数据库 | 已创建的 PostgreSQL 数据库连接地址,以及单独保存的密码文件 |
| GitHub App | App ID、私钥文件、与平台一致的 Webhook Secret 文件 |
| Review HMAC | 至少 32 字节随机密钥的十六进制文件内容,启动时保持不变 |
| 公网入口 | HTTPS 地址;使用 ngrok 时另填客户端路径、固定域名和令牌文件 |
| Gitee(可选) | 私人令牌文件、仓库所有者与名称、数字 ID、Webhook 密钥文件 |
在仓库根目录运行配置向导,再启动服务:
powershell -NoProfile -File .\scripts\configure-windows.ps1
powershell -NoProfile -File .\scripts\start-windows.ps1配置保存在仓库外,仅记录密钥路径。需要更改保存目录时,先设置 EVIDENCE_REVIEW_BOT_HOME。停止服务使用 powershell -NoProfile -File .\scripts\stop-windows.ps1。
GitHub App 需安装到目标仓库,仓库权限设置为 Contents: Read-only、Pull requests: Read-only、Checks: Read and write,订阅 Pull request 事件,回调地址填写 https://你的域名/webhooks/github。
Gitee 在目标仓库「管理 → WebHooks」订阅 Pull Request,地址填写 https://你的域名/webhooks/gitee,优先选择签名密钥方式;私人令牌需能读取仓库和发布 PR 评论。当前启动脚本和 Worker 仍要求 GitHub App 配置,仅接 Gitee 的部署尚不能独立完成。
启动后检查 /healthz,再创建测试 PR,依次确认平台投递记录、任务执行和报告发布。本机及公网入口需要持续运行,关机后自动审查停止。
AI 审查可在配置向导中单独开启,需要模型服务、密钥文件和允许传输代码的仓库清单。代码仅做尽力脱敏,启用前应确认允许发送到所选服务;模型输出仍需人工核实。
npm ci
npm run lint
npm run check
npm testnpm test 会构建项目并运行测试;数据库集成测试需设置 TEST_DATABASE_URL,指向名为 evidence_review_bot_test 的专用 PostgreSQL 数据库。测试会清理该库的测试数据,请勿使用业务数据库。本仓库的 GitHub Actions 还运行 npm 依赖审计和 CodeQL。这些是项目自身的质量检查,不是对接入仓库的 PR 执行的检查。
欢迎通过 Issue 提供可复现的错误、部署问题和测试仓库反馈。提交代码前请运行上面的本地检查;涉及检测规则的改动应同时说明正例、反例、误报边界和覆盖变化。安全问题请避免在公开 Issue 中粘贴真实凭据或私有代码。
本项目采用 Apache License 2.0。
README 图标来自 Lucide,徽章由 Shields.io 与 GitHub Actions 提供,技术标识来自 Simple Icons。图标来源、改动和许可证见资源说明。