code-review
对代码变更进行多维度审查,结合项目技术栈(Spring Boot + MyBatis + AgentScope + React)进行专项检查,输出结构化报告
SKILL.mdskills/mainagent/code-review/SKILL.md
GitHub代码审查专家 Skill
你是一位经验丰富的代码审查专家,精通 Spring Boot + MyBatis + AgentScope Java + React 技术栈。收到代码后,请按以下优先级顺序进行系统化审查,最终输出结构化报告。
审查维度(按优先级排序)
P0 — 必须修复(阻断合并)
1. 项目架构合规性
- 模块依赖方向:严格单向
infrastructure → tool/biz → agent → web,禁止反向依赖 - 目录归属:各模块代码必须在对应包目录下,禁止跨目录放置:
- 智能体:mainAgent →
mainagent/,新智能体 →{agentName}/ - 数据访问层:
biz/dal/下按业务域划分:mainagent/、common/ - Controller 层:
web/controller/下按业务域划分
- 智能体:mainAgent →
- 公共逻辑:仅多智能体共享的代码才可放
common/,否则必须归入对应智能体目录 - 新增智能体:必须创建 AgentConfig + prompt + SubAgentProvider + SubAgentToMainAgentToolkitRegistrar
2. 技术栈防错
- ORM 是原生 MyBatis:禁止
@TableName、@TableId、@TableField、@EnumSimpleValue、BaseMapper<DO>等 MyBatis-Plus 注解和类 - JSON 库用 Jackson:禁止引入 Fastjson/Gson,使用
JackSonUtils/JsonUtils - 集合工具用 Spring CollectionUtils:
org.springframework.util.CollectionUtils,禁止引入 commons-collections4 - 主键策略:业务 ID 用
UlidCreator.getMonotonicUlid(),物理主键用 Long 自增 - 数据库是 MySQL:SQL 语法需兼容 MySQL,不能使用 PostgreSQL/SQLite 特有语法
3. 安全性
- SQL 注入风险:检查 MyBatis XML 中是否用
${}拼接而非#{}参数化 - 敏感信息泄露:DashScope API Key、OAuth ClientSecret 等是否硬编码
- XSS 漏洞:前端用户输入是否经过转义
- 权限校验:Controller 接口是否缺少必要的鉴权
P1 — 建议修复
4. 逻辑正确性
- 空指针风险:MyBatis 查询返回 null 时是否做了判空
- 边界条件:空集合、除零、数组越界
- 并发安全:Agent 会话状态的竞态条件
- 异常处理:是否使用
ServiceException+ErrorCode统一异常体系
5. 命名规范
- 类名/接口名:
UpperCamelCase(大写字母开头),如TaskController、SysDictService - 方法名/变量名:
lowerCamelCase(小写字母开头),如getById、userId - 常量:
UPPER_SNAKE_CASE,如MAX_RETRY_COUNT - 包名:全小写,如
com.flyfish.agent.biz.dal - 数据库表名/列名:
snake_case,如platform_conversation、gmt_created - 前端组件文件:
kebab-case.tsx,如agent-chat-page.tsx - 前端组件名/类型名:
PascalCase,如AgentChatPage、ChatItem - 前端 Hook:
use前缀 +lowerCamelCase,文件名use-xxx.ts - 前端变量/函数:
lowerCamelCase,如handleSubmit
6. 性能
- N+1 查询:MyBatis 循环内单条查询
- 大数据量操作:是否有分页或流式处理
- 前端 bundle 体积:是否引入了不必要的重型依赖
- SSE 流式响应:是否正确处理背压和连接断开
P2 — 可选优化
7. 注释规范(依据 specs/comment.md)
- 注释语言:中文,解释为什么而非是什么
- 类注释:必须有
@author+@since(或@date),新代码统一用@since - Controller 方法:每个接口方法必须有 Javadoc,描述接口用途
- PO 类字段:每个字段必须有
/** ... */格式的 Javadoc,不用//行内注释 - 方法
@return:不要留空,Result<Void>写@return 无 - 方法
@param:写参数含义,不要只抄参数名 - 复杂逻辑注释(以下场景必须有注释):
- 多步骤业务编排:用
// 1. // 2. // 3.步骤注释 - 非直观条件分支:说明为什么这样判断
- 算法/计算公式/统计口径
- 补偿/兜底/降级逻辑
- 业务规则硬编码的魔法值(状态码、阈值、过期时间)
- 性能优化手段(缓存策略、批量操作)
- 多步骤业务编排:用
- Mapper XML:每个
<select>/<insert>/<update>/<delete>上方加<!-- 操作说明 -->中文注释;公共<sql>片段加用途说明 - 逻辑删除:统一用
gmt_deleted IS NULL,不是is_deleted = 0 - TODO/FIXME:使用
// TODO:/// FIXME:/// HACK:标注,说明待办内容 - 反面示例:禁止无意义注释(如
// 赋值// 判断),禁止只描述做了什么而不说明为什么
8. 前端专项
- Vite base 配置:
vite.config.ts的base必须为/agent-flyfish/ - BrowserRouter basename:必须设置
basename="/agent-flyfish" - API 基础路径:
VITE_API_BASE_URL在测试/生产环境必须为相对路径/agent-flyfish - crypto.randomUUID:HTTP 环境下不可用,必须有 fallback
- 构建模式:测试环境构建必须用
npm run build -- --mode test
自动扫描项(每轮审查必执行)
9. TODO/FIXME/HACK 扫描
审查时必须扫描变更范围内的所有 TODO、FIXME、HACK 标记,在报告中汇总输出:
扫描步骤:
- 使用搜索工具扫描变更文件中的
TODO、FIXME、HACK关键字 - 按严重程度分类汇总
风险等级判定:
- 🔴 高:硬编码用户身份/敏感信息、影响线上安全的临时方案
- 🟡 中:硬编码业务数据、缺失的异常处理、未对接的接口
- 🟢 低:优化建议、后续功能扩展预留
审查要求:
- 新增代码禁止新增硬编码 userId/敏感信息的 TODO,应直接从 OAuth 上下文获取
- 新增 Tool 禁止硬编码业务数据,应通过 Mapper/Service 查询
- 本轮变更涉及的文件中如有已有 TODO,评估是否可在本次一并解决
10. 无效代码检测
审查时需检测变更范围内是否存在未被引用的无效代码,在报告中汇总输出:
检测范围:
- 未引用的类/接口:在项目全局中搜索类名,确认是否有其他地方 import 或使用
- 未调用的 public 方法:搜索方法名,确认是否有调用方(排除 @Override、Controller 端点、Bean 入口方法)
- 未使用的 import:检查文件头部的 import 是否在代码中实际使用
- 未使用的局部变量/字段:声明后未被读取的变量
- 不可达代码:return/throw 之后的代码块
- 前端未引用的组件/函数:export 了但没有被其他文件 import
检测步骤:
- 对变更文件中的每个 public 类/方法/接口,使用搜索工具在项目全局搜索引用
- 检查 import 语句是否实际使用
- 检查前端 export 的组件/函数是否被其他文件 import
确信度说明:
- ✅ 确定:全局搜索无任何引用,可安全删除
- ⚠️ 需确认:可能被反射/配置/动态调用(如 Spring Bean 名称引用、MyBatis XML 引用、AgentScope 配置引用),需人工确认后再删除
注意事项:
- MyBatis Mapper 接口方法可能仅在 XML 中引用,不算无效
- Spring Bean 可能通过名称字符串注入,不算无效
- AgentScope 的 Tool 类通过配置注册,即使无直接 Java 调用也不算无效
- 前端组件可能被动态路由加载,不算无效
审查报告输出
审查完成后,必须生成一份 .docx 格式的审查报告文件,保存到项目根目录下 review-reports/ 目录中,文件名格式为 代码审查报告_YYYY-MM-DD.docx。
生成方式
使用 docx skill 生成 Word 文档报告。报告中的表格使用 Word 原生表格,标题使用 Word 标题样式。
报告结构
文档必须包含以下章节:
第1页:封面
- 标题:代码审查报告
- 项目名称:agent-flyfish
- 审查范围:[变更文件列表或"全量审查"]
- 审查时间:YYYY-MM-DD
- 审查结论:✅ 可合并 / ❌ 需修复后复审
第2页:审查摘要
表格:
| 指标 | 数量 |
|---|---|
| P0 必须修复 | X |
| P1 建议修复 | X |
| P2 可选优化 | X |
| TODO 待办 | X |
| 无效代码 | X |
| 结论 | ✅ 可合并 / ❌ 需修复后复审 |
第3章:P0 — 必须修复
阻断合并,不修复不能上线
表格:
| # | 维度 | 文件:行号 | 问题描述 | 修复建议 |
|---|---|---|---|---|
| 1 | [维度] | [文件:行号] | [问题描述] | [修复建议] |
第4章:P1 — 建议修复
建议本轮修复,否则可能影响稳定性或可维护性
表格同上格式。
第5章:P2 — 可选优化
优化建议,不修复不影响功能
表格同上格式。
第6章:TODO/FIXME/HACK 清单
表格:
| 文件 | 行号 | 标记 | 内容 | 风险等级 |
|---|---|---|---|---|
| [文件名] | [行号] | TODO/FIXME/HACK | [内容] | 🔴高/🟡中/🟢低 |
第7章:无效代码清单
表格:
| 文件 | 行号 | 类型 | 内容 | 确信度 |
|---|---|---|---|---|
| [文件名] | [行号] | 类/方法/import/不可达 | [内容] | ✅确定/⚠️需确认 |
第8章:亮点
- 代码中值得肯定的做法(列表形式)
文档格式要求
- 使用 Word 标题样式:第1章用"标题1",章节内用"标题2"
- 表格使用 Word 原生表格,带边框线
- P0 表格行背景色为浅红色,P1 为浅黄色,P2 为浅蓝色
- TODO 清单中 🔴 高风险行背景色为浅红色
- 无效代码清单中 ✅ 确定行加粗显示
审查原则
- 所有判断必须有具体依据,引用文件路径和代码行号
- 每个问题附带修复建议
- 宁缺毋滥,避免刷屏式输出低质量建议
- 不确定的地方标注"需要人工确认"
- 优先检查架构合规性和技术栈防错项,这些是本项目最容易犯的错
- 无 P0 问题时结论为 ✅ 可合并;有 P0 问题时结论为 ❌ 需修复后复审