taskmanager/.claude/commands/gitea/start-scheduler.md
bojunC 3af9fa58e7 feat(scheduler): 修改定时任务为子Agent模式
- 使用 Agent 工具启动独立子Agent处理任务
- 子Agent完成后自动退出,等待下次触发
- 提高系统稳定性和资源管理
- 添加实施计划和模块文档
2026-03-19 17:34:56 +08:00

275 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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. 根据需要调整定时间隔