# code-review-agent **Repository Path**: ch_sen_cloud/code-review-agent ## Basic Information - **Project Name**: code-review-agent - **Description**: 基于 Next.js + AI + Gitee OpenAPI 的 PR 自动代码审查 Agent - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-13 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🤖 AI Code Review Agent 基于 Next.js + AI SDK v7 + Gitee OpenAPI 构建的 PR 自动代码审查 Agent。 输入 PR 链接,AI 自动分析 diff,发现 bug / 安全漏洞 / 性能问题,并发布结构化评论到 PR。 ## 快速开始 ```bash # 1. 安装依赖 npm install # 2. 配置 Gitee Token(需要 pull_requests 权限) cp .env.example .env.local # 编辑 .env.local 填入 GITEE_TOKEN # 3. 启动 npm run dev ``` 打开 http://localhost:3000,粘贴 Gitee PR 链接即可使用。 ## 架构 ``` src/ ├── lib/ │ ├── gitee.ts ← Gitee OpenAPI 集成(获取 diff / 文件列表 / 文件内容 + 发布评论) │ ├── review-types.ts ← 类型定义 │ ├── review-tools.ts ← AI SDK tool 定义(3 个数据获取 + 1 个结构化提交) │ └── review-agent.ts ← Agent 核心 prompt + DeepSeek 流式审查逻辑 └── app/ ├── page.tsx ← 前端界面(流式消费) ├── layout.tsx ← 布局 ├── components/ ← UI 组件 │ ├── PRInput.tsx │ ├── ReviewResult.tsx │ └── ReviewCommentCard.tsx └── api/review/ ├── route.ts ← POST 接口(SSE 流式审查 + 可选自动发布) └── post-comments/ └── route.ts ← POST 接口(手动发布评论到 PR) ``` ## 技术栈 | 组件 | 版本/工具 | |------|----------| | 框架 | Next.js 16 (App Router) | | AI SDK | v7 (`ai` + `@ai-sdk/deepseek`) | | 模型 | DeepSeek V4 Pro (`deepseek-v4-pro`) | | Git 平台 | Gitee OpenAPI v5 | | 参数校验 | Zod v4 | | 样式 | Tailwind CSS v4 | ## 工作原理 1. 用户输入 PR URL,前端解析出 `owner` / `repo` / `prNumber` 2. POST 请求触发 `/api/review`,可选开启 `postToGitee` 自动发布 3. Agent 使用 3 个数据获取工具获取 PR 信息: - `getPRFiles` — 获取修改的文件列表 - `getPRDiff` — 获取完整 diff(截断到 30000 字符) - `getFileContent` — 获取特定文件的完整内容 4. 分析完成后调用 `submitReview` 工具提交结构化结果 5. DeepSeek V4 Pro 逐文件分析,检测:🐛 Bug / 🔒 安全 / ⚡ 性能 6. 结果通过 SSE 流式返回前端展示,可选自动发布到 PR 评论区 ## AI SDK v7 注意事项 本项目基于 AI SDK v7 实现,与旧版 v5 有以下 API 变化: | 旧 API (v5) | 新 API (v7) | |-------------|-------------| | `parameters: z.object({...})` | `inputSchema: zodSchema(z.object({...}))` | | `maxSteps: 20` | 已移除,用 `stopWhen: isStepCount(20)` 控制 | | 默认 1 步 | 需要 tool 调用场景要显式设置 `stopWhen` | ## API 接口 ### POST `/api/review` **请求体:** ```json { "owner": "gitee-user", "repo": "my-repo", "prNumber": 12345, "postToGitee": false } ``` | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `owner` | string | 是 | 仓库所有者 | | `repo` | string | 是 | 仓库名称 | | `prNumber` | number | 是 | PR 编号 | | `postToGitee` | boolean | 否 | 是否自动发布评论到 Gitee,默认 `false` | **返回(SSE 流,NDJSON 格式):** 每行一个 JSON 事件,可能包含以下类型: | type | 说明 | |------|------| | `text` | AI 审查过程的文本流,`content` 字段包含内容 | | `done` | 审查完成,`review` 字段包含结构化结果,`posted` 表示是否已发布 | | `error` | 异常中止,`error` 字段包含错误信息 | **done 事件的 review 结构:** ```json { "summary": "审查完成,发现 3 个问题...", "comments": [ { "severity": "warning", "file": "src/xxx.ts", "line": 42, "issue": "未处理的 Promise 拒绝", "suggestion": "添加 .catch() 处理" } ], "approved": false } ``` ### POST `/api/review/post-comments` 手动将审查结果发布到 Gitee PR 评论区。 ```json { "owner": "gitee-user", "repo": "my-repo", "prNumber": 12345, "comments": [ { "severity": "warning", "file": "src/xxx.ts", "line": 42, "issue": "未处理的 Promise 拒绝", "suggestion": "添加 .catch() 处理" } ] } ``` ## 审查维度 - 🐛 **Bug**:空指针、未处理异常、类型错误、边界条件、竞态条件 - 🔒 **安全**:注入、敏感信息泄露、权限绕过 - ⚡ **性能**:N+1 查询、内存泄漏、不必要的循环 严重程度分为 `critical`(运行时错误/安全漏洞)、`warning`(潜在 bug/违反最佳实践)和 `suggestion`(有价值的改进建议)。 ## 环境变量 | 变量 | 说明 | |------|------| | `GITEE_TOKEN` | Gitee 私人令牌(需要 `pull_requests` 权限) | 创建地址:https://gitee.com/profile/personal_access_tokens ## License MIT