用途
本技能提供一套两阶段代码审查工作流,将快速模式检测(Semgrep)与 AI 驱动的语义分析(CodeRabbit)结合,以在提交或合并前获得更全面的覆盖与效率。
主要能力
第一阶段:快速模式检测(10-20 秒)
运行 Semgrep 捕获安全模式、架构违规与代码质量问题,包括:
- 硬编码密钥(API key、token、密码)
- SQL 注入模式(字符串拼接、未验证输入)
- XSS 漏洞(不安全的 {@html}、模板注入)
- 受保护路由缺失认证守卫
- 绕过 Repository Pattern 的直接数据库访问
- 弱加密(MD5、SHA1、已弃用函数)
- 代码质量(console.log、any 类型、注释代码)
命令:
semgrep scan --config .semgrep.yaml --error
第二阶段:AI 语义审查(5-30 分钟)
运行 CodeRabbit 分析代码逻辑、架构与业务上下文,包括:
- 逻辑正确性与边界情况
- 行为变更上的测试覆盖缺口
- 错误处理与韧性
- 架构与设计模式
- API 契约与破坏性变更
- 多租户隔离与安全
- 性能优化机会
命令:
coderabbit --prompt-only -t uncommitted
合并报告
- 按优先级排列的发现(CRITICAL → HIGH → MEDIUM → LOW)
- 每个问题的清晰说明与修复指引
- 性能指标与改进建议
- 合规验证(安全、架构、代码质量)
使用方式
- 在 OpenCode 中加载技能:
/skill semgrep-coderabbit-review - 安装插件:安装 opencode-semgrep-coderabbit-plugin 以获取工具
- 运行审查:使用提供的命令之一
- 遵循工作流:第一阶段(Semgrep)→ 第二阶段(CodeRabbit)→ 修复 → 验证
执行顺序:
- 第一阶段 Semgrep:运行扫描;若失败则修复所有违规并重跑直至通过;若通过则进入第二阶段。
- 第二阶段 CodeRabbit:运行审查、评估发现、修复问题。CRITICAL 立即修复(安全、认证、数据损坏);HIGH 合并前修复(架构、破坏性变更);MEDIUM 合理时修复(代码质量);LOW 可选考虑(建议)。
- 验证:重跑两个工具,确认未引入新问题。
适用场景
- 提交前审查未提交变更
- 审计特定功能实现
- 验证 API 层合规
- 检查数据库查询安全
- 审查前端代码(Svelte 5、TypeScript)
- 合并前安全与架构验证
- 确保多租户隔离与数据保护
- 验证 API 契约(OpenAPI 同步)
不适用场景:
- 仅需快速语法/linter 检查(直接使用 linter)
- 样式或格式化修复(使用 Prettier/ESLint)
- 文档审查(使用 Codex 安全审查)
各层审查重点
API 层(Fastify 路由)
Semgrep 捕获:受保护路由缺失 preHandler: [fastify.authenticate]、直接 db.query() 而非 Repository Pattern、原始查询中的 SQL 注入模式、路由定义中的硬编码密钥。
CodeRabbit 捕获:OpenAPI schema 不匹配、HTTP 状态码错误(创建应为 201、删除应为 204 等)、错误响应格式不一致、限流配置错误、API 契约破坏性变更。
数据库层(Repository Pattern)
Semgrep 捕获:原始 SQL 查询(应使用 Oracle 参数化查询)、缺失错误处理、路由中的直接数据库访问。
CodeRabbit 捕获:参数化正确性、用户上下文作用域(多租户隔离)、错误恢复逻辑、查询性能模式。
前端层(Svelte 5、TypeScript)
Semgrep 捕获:旧版 Svelte 4 语法($:、export let、bind:)、未净化的 {@html}(XSS 风险)、any 类型、console.log 语句。
CodeRabbit 捕获:Svelte 5 runes 合规($state、$derived 等)、组件逻辑正确性、性能(N+1 查询、不必要的重渲染)、可访问性问题、移动端响应式。
共享类型与契约
Semgrep 捕获:共享定义中的 any 类型、硬编码值(应为常量或环境变量)。
CodeRabbit 捕获:Zod schema 完整性(匹配 OpenAPI 定义)、类型推断正确性、破坏性变更文档。
优先级参考
- CRITICAL(阻塞):密钥、认证绕过、SQL 注入、XSS、数据泄露——合并前必须修复
- HIGH(架构):缺失守卫、schema 不匹配、破坏性变更、竞态条件——合并前修复
- MEDIUM(质量):弱加密、错误处理不佳、类型安全、重复——合理时修复
- LOW(打磨):建议、优化、风格——可选考虑
常见问题与修复
安全:硬编码密钥移至 process.env.SECRET 或 OCI Vault;SQL 字符串拼接改用参数化绑定;{@html userContent} 改用 {@html DOMPurify.sanitize(userContent)};缺失认证守卫添加 preHandler: [fastify.authenticate];console.log(token) 移除或使用不含密钥的安全日志。
架构:await fastify.db.query(...) 改用 await request.repos.entity.method(ctx);缺失 DbContext 时向所有数据库操作传递用户 ID 上下文;Svelte 的 export let prop 改用 let { prop } = $props();状态码修正(创建 201、删除 204、验证 400);any 类型改为显式类型或带类型守卫的 unknown。
代码质量:生产环境 console.log 移除或使用日志层;MD5 改用 crypto.subtle.digest('SHA-256', ...);补充测试覆盖;重复逻辑提取为可复用函数/组件;N+1 查询改为批量查询或数据库 join。
效率提示
- 先修复 Semgrep:模式确定、验证快、无歧义。
- 仔细阅读 CodeRabbit:它提供上下文与推理,可用行内评论澄清。
- 批量修复相似问题:不要在不同问题类型间切换上下文,每批后运行单元测试。
- 最多 3 轮:若需超过 3 个审查周期,拆分为更小的 PR。
- 边改边测:每批修复后运行单元测试,立即验证 Semgrep 通过,提交前运行一次 CodeRabbit。
相关技能与参考
- 插件:opencode-semgrep-coderabbit-plugin(为本技能提供工具)
- 文档:AGENTS.md、.semgrep.yaml、.coderabbit.yaml
- Repository Pattern:packages/database/src/repositories/
- API 示例:apps/api/src/routes/
故障排查
- Semgrep 超过 30 秒:变更集过大或模式复杂——在更小子集上运行或按规则过滤。
- CodeRabbit 超过 30 分钟:变更过大(>500 行)——拆分为更小 PR。
- 发现过多:代码质量债务积累——修复 critical/high,为 medium/low 安排后续。
- 重跑出现相同问题:修复不完整或理解有误——重读反馈,向 CodeRabbit 请求澄清。
- Semgrep 误报:规则过宽或上下文特定——审查规则定义,若安全可标记为预期。
- 工具反馈冲突:工具视角不同——信任 Semgrep(确定性),结合上下文验证 CodeRabbit。
限制
- 需要安装并配置 opencode-semgrep-coderabbit-plugin(>= 1.0.0)。
- 需要 .semgrep.yaml 与 .coderabbit.yaml 配置文件。
- 不适用于仅需语法/linter 检查、样式格式化或文档审查的场景。
- 具体收费、价格、平台支持范围等资料暂未提供。
版本:1.0;最后更新:2026 年 1 月 22 日;状态:Production Ready。