feat: 添加 dev-workflow 和 pr-review-gate 技能

## dev-workflow
- Spec-Driven 开发流程
- 从需求生成 spec.md
- 创建功能分支
- 调用子代理开发
- 自动创建 Gitea PR

## pr-review-gate
- 3 审查者并行审查(安全/质量/逻辑)
- 自动合并逻辑
- 修复循环(最多3次)

## .planning
- PROJECT.md: 项目定义
- REQUIREMENTS.md: 需求列表
- ROADMAP.md: 开发路线图
- STATE.md: 当前状态
This commit is contained in:
2026-03-09 01:22:28 +08:00
parent 3850bc33dc
commit 33c8de02da
12 changed files with 1501 additions and 0 deletions
+274
View File
@@ -0,0 +1,274 @@
---
name: pr-review-gate
description: "PR 审查门禁技能。当 PR 创建后自动触发,启动 3 个审查子代理并行审查。"
---
# pr-review-gate - PR 审查门禁
## 什么时候使用
- PR 创建后自动触发
- 用户说"审查 PR #xxx"
- 用户说"开始审查"
## 环境变量
| 变量名 | 用途 | 必需 |
|--------|------|------|
| `GITEA_TOKEN` | Gitea API Token | 是 |
| `GITEA_URL` | Gitea 服务地址 | 否 |
| `GITEA_REPO` | 仓库路径 | 否 |
## 工作流程
```
PR 创建
↓
┌─────────────────────────────────────────────────────┐
│ 并行启动 3 个审查子代理 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Security │ │ Quality │ │ Logic │ │
│ │ Reviewer │ │ Reviewer │ │ Reviewer │ │
│ │ (安全) │ │ (质量) │ │ (逻辑) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ approve? approve? approve? │
│ │ │ │ │
└─────────┼───────────────┼───────────────┼───────────┘
│ │ │
└───────────────┼───────────────┘
▼
┌───────────────────────┐
│ 收集审查结果 │
└───────────┬───────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
全部 approve 有 reject CI 失败
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 自动合并 │ │ 修复循环 │ │ 等待修复 │
│ 到 main │ │ (最多3次) │ │ │
└───────────┘ └───────────┘ └───────────┘
```
## 审查者角色
### 1. Security Reviewer (安全审查者)
**关注点:**
- 输入验证
- SQL 注入 / XSS / CSRF
- 敏感数据处理
- 权限检查
- 依赖安全
**审查清单:**
- [ ] 所有用户输入都经过验证和清理
- [ ] 没有硬编码的密钥或凭据
- [ ] 文件操作有路径检查
- [ ] API 调用有适当的认证
### 2. Quality Reviewer (代码质量审查者)
**关注点:**
- 代码可读性
- 命名规范
- 代码结构
- 测试覆盖
- 文档完整性
**审查清单:**
- [ ] 函数/变量命名清晰
- [ ] 代码有适当的注释
- [ ] 复杂逻辑有文档说明
- [ ] 有单元测试覆盖
- [ ] SKILL.md 已更新(如适用)
### 3. Logic Reviewer (业务逻辑审查者)
**关注点:**
- 需求是否满足
- 边界条件处理
- 错误处理
- 与现有功能的兼容性
- 性能影响
**审查清单:**
- [ ] 实现符合 spec 描述
- [ ] 边界条件已处理
- [ ] 错误情况有适当的处理
- [ ] 不会破坏现有功能
- [ ] 性能可接受
## 执行步骤
### Step 1: 获取 PR 信息
```bash
python3 pr_gate.py --get-pr --number 123
```
获取 PR 的:
- 标题和描述
- 变更文件列表
- diff 内容
### Step 2: 启动审查子代理
使用 `sessions_spawn` 并行启动 3 个审查子代理:
```
# Security Reviewer
sessions_spawn(
task="审查 PR #xxx 的安全性",
label="security-reviewer",
runtime="subagent"
)
# Quality Reviewer
sessions_spawn(
task="审查 PR #xxx 的代码质量",
label="quality-reviewer",
runtime="subagent"
)
# Logic Reviewer
sessions_spawn(
task="审查 PR #xxx 的业务逻辑",
label="logic-reviewer",
runtime="subagent"
)
```
### Step 3: 收集审查结果
等待所有子代理完成,收集结果:
```json
{
"security": {
"reviewer": "security",
"result": "approve|reject",
"comments": ["..."],
"issues": []
},
"quality": {
"reviewer": "quality",
"result": "approve",
"comments": ["..."],
"issues": []
},
"logic": {
"reviewer": "logic",
"result": "approve",
"comments": ["..."],
"issues": []
}
}
```
### Step 4: 决策
**全部 approve + CI 通过:**
```bash
python3 pr_gate.py --merge-pr --number 123
```
**有 reject:**
```bash
python3 pr_gate.py --fix-loop --number 123 --attempt 1
```
### Step 5: 修复循环(最多 3 次)
1. 汇总所有问题
2. 启动修复子代理
3. 修复后重新审查
4. 3 次后仍有问题 → 汇报失败
## CLI 命令
```bash
# 获取 PR 信息
python3 pr_gate.py --get-pr --number 123
# 启动审查
python3 pr_gate.py --review --number 123
# 检查审查结果
python3 pr_gate.py --check-results --number 123
# 合并 PR
python3 pr_gate.py --merge-pr --number 123
# 修复循环
python3 pr_gate.py --fix-loop --number 123 --attempt 1
# 完整流程
python3 pr_gate.py --full-pipeline --number 123
```
## 输出格式
### 审查通过
```
✅ PR #123 审查通过
**审查结果:**
| 审查者 | 结果 | 评论数 |
|--------|------|--------|
| Security | ✅ approve | 0 |
| Quality | ✅ approve | 2 |
| Logic | ✅ approve | 1 |
**CI 状态:** ✅ 通过
正在合并到 main...
```
### 需要修复
```
⚠️ PR #123 需要修复
**问题汇总:**
| 审查者 | 问题 |
|--------|------|
| Security | 输入验证缺失 (HIGH) |
| Quality | 缺少单元测试 (MEDIUM) |
启动修复流程 (尝试 1/3)...
```
### 最终失败
```
❌ PR #123 修复失败
经过 3 次修复尝试,以下问题仍未解决:
1. [Security] 输入验证缺失
- 位置: dev_workflow.py:45
- 描述: 用户输入未经过验证直接使用
请人工介入处理。
```
## 与其他技能的协作
| 技能 | 协作方式 |
|------|----------|
| **dev-workflow** | PR 创建后触发审查 |
| **Gitea CI** | 等待 CI 通过后才合并 |
## 注意事项
1. 审查子代理必须独立运行,互不干扰
2. 修复循环有明确的上限(3 次)
3. 最终失败必须汇报详细问题
4. 合并前必须确认 CI 通过