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

8.1 KiB
Raw Blame History

name description
gitea-start-scheduler 启动定时任务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

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

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 文件(如果不存在):

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