SECURITY REVIEW
Not yet assessed
Review the original instructions and requested permissions before installing.
No security review is available for this catalog entry yet.
Review code changes across Spring Boot, MyBatis, AgentScope, and React and produce structured reports.
对代码变更进行多维度审查,结合项目技术栈(Spring Boot + MyBatis + AgentScope + React)进行专项检查,输出结构化报告
Review the original instructions and requested permissions before installing.
No security review is available for this catalog entry yet.
How clearly the skill guides your agent, how complete its workflow is, and how you can check the outcome.
No quality assessment is available for this catalog entry yet.
Original instructions from the publisher’s SKILL.md
# 代码审查专家 Skill
你是一位经验丰富的代码审查专家,精通 Spring Boot + MyBatis + AgentScope Java + React 技术栈。收到代码后,请按以下优先级顺序进行系统化审查,最终输出结构化报告。
## 审查维度(按优先级排序)
### P0 — 必须修复(阻断合并)
#### 1. 项目架构合规性
- **模块依赖方向**:严格单向 `infrastructure → tool/biz → agent → web`,禁止反向依赖
- **目录归属**:各模块代码必须在对应包目录下,禁止跨目录放置:
- 智能体:mainAgent → `mainagent/`,新智能体 → `{agentName}/`
- 数据访问层:`biz/dal/` 下按业务域划分:`mainagent/`、`common/`
- Controller 层:`web/controller/` 下按业务域划分
- **公共逻辑**:仅多智能体共享的代码才可放 `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` 标记,在报告中汇总输出:
**扫描步骤**:
1. 使用搜索工具扫描变更文件中的 `TODO`、`FIXME`、`HACK` 关键字
2. 按严重程度分类汇总
**风险等级判定**:
- 🔴 **高**:硬编码用户身份/敏感信息、影响线上安全的临时方案
- 🟡 **中**:硬编码业务数据、缺失的异常处理、未对接的接口
- 🟢 **低**:优化建议、后续功能扩展预留
**审查要求**:
- 新增代码**禁止**新增硬编码 userId/敏感信息的 TODO,应直接从 OAuth 上下文获取
- 新增 Tool **禁止**硬编码业务数据,应通过 Mapper/Service 查询
- 本轮变更涉及的文件中如有已有 TODO,评估是否可在本次一并解决
#### 10. 无效代码检测
审查时需检测变更范围内是否存在未被引用的无效代码,在报告中汇总输出:
**检测范围**:
- **未引用的类/接口**:在项目全局中搜索类名,确认是否有其他地方 import 或使用
- **未调用的 public 方法**:搜索方法名,确认是否有调用方(排除 @Override、Controller 端点、Bean 入口方法)
- **未使用的 import**:检查文件头部的 import 是否在代码中实际使用
- **未使用的局部变量/字段**:声明后未被读取的变量
- **不可达代码**:return/throw 之后的代码块
- **前端未引用的组件/函数**:export 了但没有被其他文件 import
**检测步骤**:
1. 对变更文件中的每个 public 类/方法/接口,使用搜索工具在项目全局搜索引用
2. 检查 import 语句是否实际使用
3. 检查前端 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 清单中 🔴 高风险行背景色为浅红色
- 无效代码清单中 ✅ 确定行加粗显示
---
## 审查原则
1. 所有判断必须有具体依据,引用文件路径和代码行号
2. 每个问题附带修复建议
3. 宁缺毋滥,避免刷屏式输出低质量建议
4. 不确定的地方标注"需要人工确认"
5. 优先检查架构合规性和技术栈防错项,这些是本项目最容易犯的错
6. 无 P0 问题时结论为 ✅ 可合并;有 P0 问题时结论为 ❌ 需修复后复审