275 lines
8.1 KiB
Markdown
275 lines
8.1 KiB
Markdown
---
|
||
name: gitea-start-scheduler
|
||
description: 启动定时任务(Issue 处理和 PR 审核)
|
||
---
|
||
|
||
创建两个定时任务,自动处理 Issues 和审核 PRs。
|
||
|
||
## 工作流程
|
||
|
||
### 第一步:读取配置
|
||
|
||
从环境变量读取配置:
|
||
- `GITEA_URL`: Gitea 实例地址
|
||
- `GITEA_TOKEN`: API 访问令牌
|
||
- `GITEA_OWNER`: 仓库所有者
|
||
- `GITEA_REPO`: 仓库名称(如果没有,则使用当前目录名)
|
||
- `CODE_AGENT_INTERVAL`: Code Agent 间隔(默认 5 分钟)
|
||
- `PR_AGENT_INTERVAL`: PR Agent 间隔(默认 10 分钟)
|
||
|
||
### 第二步:创建 Code Agent 定时任务
|
||
|
||
使用 CronCreate 创建定时任务,定期扫描和处理未完成的 Issues。
|
||
|
||
**定时任务逻辑**:
|
||
```
|
||
每 N 分钟执行一次:
|
||
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 文档中的 Issue 操作指南获取所有打开的 Issues
|
||
2. 过滤出未处理的(没有 PR 关联)
|
||
3. 按优先级排序
|
||
4. 依据 API-QUICK-REFERENCE.md 文档检查依赖是否满足
|
||
5. 选择优先级最高的未阻塞 Issue
|
||
6. 检查是否有正在运行的子Agent
|
||
7. 如果没有,使用 Agent 工具启动子Agent处理该 Issue
|
||
8. 子Agent完成后自动退出
|
||
9. 等待下次定时任务
|
||
```
|
||
|
||
**使用 Agent 工具启动子Agent**:
|
||
```javascript
|
||
Agent({
|
||
subagent_type: "general-purpose",
|
||
description: `处理 Issue #{number}`,
|
||
prompt: `你是一个 Code Agent,负责处理 Gitea Issue #{number}。
|
||
|
||
环境变量(已配置):
|
||
- GITEA_URL: ${process.env.GITEA_URL}
|
||
- GITEA_TOKEN: ${process.env.GITEA_TOKEN}
|
||
- GITEA_OWNER: ${process.env.GITEA_OWNER}
|
||
- GITEA_REPO: ${process.env.GITEA_REPO}
|
||
|
||
工作流程:
|
||
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 文档中的 Issue 操作指南获取 Issue #{number} 详情
|
||
2. 解析 Issue 描述,提取需求
|
||
3. 依据 API-QUICK-REFERENCE.md 文档检查依赖 Issue 是否已完成
|
||
4. 如果依赖未满足,报告并退出
|
||
5. 创建特性分支: feature/issue-{number}
|
||
6. 分析需要实现的功能
|
||
7. 读取现有代码结构
|
||
8. 增量式生成实现代码
|
||
- 只实现 Issue 要求的功能
|
||
- 不重复已有代码
|
||
- 遵循项目代码规范
|
||
9. 生成测试代码
|
||
- 单元测试
|
||
- 集成测试(如果需要)
|
||
10. 运行测试
|
||
- 如果测试失败,修复代码并重试
|
||
11. 提交代码
|
||
git add .
|
||
git commit -m "feat: 实现 Issue #{number}"
|
||
git push origin feature/issue-{number}
|
||
12. 依据 API-QUICK-REFERENCE.md 文档中的 Pull Request 操作指南创建 Pull Request
|
||
- 标题: [Issue #{number}] {Issue 标题}
|
||
- 描述: 关联 Issue,说明实现内容
|
||
- 标签: 继承 Issue 的标签
|
||
13. 依据 API-QUICK-REFERENCE.md 文档中的 Issue 评论操作指南在 Issue 中添加评论,说明已创建 PR
|
||
|
||
完成后报告处理结果(成功/失败/跳过)并退出。`,
|
||
run_in_background: false // 前台运行,完成后继续主流程
|
||
})
|
||
```
|
||
|
||
### 第三步:创建 PR Agent 定时任务
|
||
|
||
使用 CronCreate 创建定时任务,定期审核未审核的 PRs。
|
||
|
||
**定时任务逻辑**:
|
||
```
|
||
每 N 分钟执行一次:
|
||
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 文档中的 Pull Request 操作指南获取所有打开的 Pull Requests
|
||
2. 过滤出未审核的
|
||
3. 对每个 PR 使用 Agent 工具启动子Agent审核
|
||
4. 子Agent完成后自动退出
|
||
5. 等待下次定时任务
|
||
```
|
||
|
||
**使用 Agent 工具启动子Agent**:
|
||
```javascript
|
||
Agent({
|
||
subagent_type: "general-purpose",
|
||
description: `审核 PR #{number}`,
|
||
prompt: `你是一个 PR Agent,负责审核 Gitea PR #{number}。
|
||
|
||
环境变量(已配置):
|
||
- GITEA_URL: ${process.env.GITEA_URL}
|
||
- GITEA_TOKEN: ${process.env.GITEA_TOKEN}
|
||
- GITEA_OWNER: ${process.env.GITEA_OWNER}
|
||
- GITEA_REPO: ${process.env.GITEA_REPO}
|
||
- AUTO_MERGE: ${process.env.AUTO_MERGE || false}
|
||
|
||
工作流程:
|
||
1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 文档中的 Pull Request 操作指南获取 PR #{number} 详情
|
||
- 代码变更
|
||
- 关联的 Issue
|
||
- 提交历史
|
||
|
||
2. 代码质量检查
|
||
- 代码规范(如果有 linter)
|
||
- 代码风格一致性
|
||
- 潜在的 bug
|
||
|
||
3. 测试检查
|
||
- 检查是否有测试代码
|
||
- 运行测试(如果有测试框架)
|
||
- 验证测试覆盖率
|
||
|
||
4. 安全检查
|
||
- 检查是否有敏感信息泄露
|
||
- 检查是否有安全漏洞
|
||
|
||
5. 依据 API-QUICK-REFERENCE.md 文档中的 PR 审核操作指南创建审核评论
|
||
如果发现问题:
|
||
- 列出所有问题
|
||
- 提供修复建议
|
||
- 请求修改(REQUEST_CHANGES)
|
||
|
||
如果审核通过:
|
||
- 批准(APPROVE)
|
||
- 根据 AUTO_MERGE 配置决定是否自动合并
|
||
|
||
6. 如果需要修改且 AUTO_MERGE=true
|
||
- 使用 Agent 工具启动修复子Agent
|
||
- 修复问题
|
||
- 推送修复
|
||
|
||
完成后报告审核结果(通过/需修改/拒绝)并退出。`,
|
||
run_in_background: false // 前台运行,完成后继续主流程
|
||
})
|
||
```
|
||
|
||
### 第四步:显示任务状态
|
||
|
||
创建完成后,显示:
|
||
- 两个定时任务的 ID
|
||
- 下次执行时间
|
||
- 如何停止任务(/gitea-stop-scheduler)
|
||
|
||
## 配置选项
|
||
|
||
### 环境变量
|
||
|
||
创建 `.env` 文件(如果不存在):
|
||
|
||
```bash
|
||
# Gitea 配置
|
||
GITEA_URL=http://your-gitea-url
|
||
GITEA_TOKEN=your-api-token
|
||
GITEA_OWNER=your-username
|
||
GITEA_REPO=your-repo-name # 可选,默认使用当前目录名
|
||
|
||
# 定时间隔(分钟)
|
||
CODE_AGENT_INTERVAL=5 # 默认 5 分钟
|
||
PR_AGENT_INTERVAL=10 # 默认 10 分钟
|
||
|
||
# 审核配置
|
||
AUTO_MERGE=false # 是否自动合并审核通过的 PR
|
||
REQUIRE_REVIEW=true # 是否需要代码审查
|
||
TEST_COVERAGE_TARGET=80 # 测试覆盖率目标
|
||
```
|
||
|
||
### 定时间隔建议
|
||
|
||
根据项目规模调整间隔:
|
||
|
||
- **小型项目** (< 10 个 Issues):
|
||
- Code Agent: 3-5 分钟
|
||
- PR Agent: 5-10 分钟
|
||
|
||
- **中型项目** (10-50 个 Issues):
|
||
- Code Agent: 5-10 分钟
|
||
- PR Agent: 10-15 分钟
|
||
|
||
- **大型项目** (> 50 个 Issues):
|
||
- Code Agent: 10-15 分钟
|
||
- PR Agent: 15-20 分钟
|
||
|
||
## 示例输出
|
||
|
||
```
|
||
🚀 启动定时任务
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
✅ 读取配置
|
||
• 仓库: chen/task-manager-unity
|
||
• Code Agent 间隔: 5 分钟
|
||
• PR Agent 间隔: 10 分钟
|
||
|
||
✅ 创建 Code Agent 定时任务
|
||
• ID: job-abc123
|
||
• 间隔: */5 * * * *
|
||
• 下次执行: 2 分钟后
|
||
|
||
✅ 创建 PR Agent 定时任务
|
||
• ID: job-def456
|
||
• 间隔: */10 * * * *
|
||
• 下次执行: 7 分钟后
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
⏰ 定时任务已启动!
|
||
|
||
Agent 将自动:
|
||
• 扫描未处理的 Issues 并实现功能
|
||
• 审核提交的 Pull Requests
|
||
• 运行测试并确保代码质量
|
||
|
||
💡 提示:
|
||
• 使用 /gitea-status 查看进度
|
||
• 使用 /gitea-stop-scheduler 停止任务
|
||
• 定时任务仅在当前会话有效(最多 3 天)
|
||
|
||
✨ 准备就绪,Agent 开始工作!
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **会话限制**: 定时任务仅在当前会话有效,会话结束后需要重新启动
|
||
2. **自动过期**: 定时任务最多运行 3 天,之后会自动删除
|
||
3. **子Agent模式**: 每次定时触发时启动独立的子Agent,完成后自动退出
|
||
4. **并发控制**: 同一时间只运行一个子Agent,避免冲突
|
||
5. **依赖检查**: 会自动跳过依赖未满足的 Issues
|
||
6. **错误重试**: 如果子Agent执行失败,会在下次定时任务时重试
|
||
7. **资源管理**: 子Agent完成后自动释放资源,不影响主进程
|
||
8. **手动干预**: 可以随时使用 `/gitea-process-issue` 手动处理特定 Issue
|
||
|
||
## 工作流示例
|
||
|
||
```
|
||
时间轴:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
T=0 min 启动定时任务
|
||
T=2 min Code Agent 扫描 → 发现 Issue #2
|
||
开始实现 Issue #2...
|
||
|
||
T=5 min Code Agent 完成 Issue #2,创建 PR #1
|
||
下次扫描...
|
||
|
||
T=10 min PR Agent 审核通过 PR #1
|
||
AUTO_MERGE=false → 等待人工合并
|
||
|
||
T=15 min Code Agent 扫描 → 发现 Issue #3
|
||
开始实现 Issue #3...
|
||
|
||
...以此类推
|
||
```
|
||
|
||
## 下一步
|
||
|
||
启动定时任务后:
|
||
1. 使用 `/gitea-status` 查看实时状态
|
||
2. 查看 Issues 和 PRs 的进度
|
||
3. 手动审核和合并 PRs(如果 AUTO_MERGE=false)
|
||
4. 根据需要调整定时间隔
|