3.9 KiB
3.9 KiB
子Agent模式定时任务
概述
定时任务系统已从主进程执行模式改为子Agent执行模式。每次定时任务触发时,会启动一个独立的子Agent来处理任务,完成后子Agent自动退出,主进程等待下一次触发。
架构
主进程职责
- 维护定时任务调度(使用 CronCreate)
- 在每次触发时扫描待处理的 Issues/PRs
- 使用 Agent 工具启动子Agent
- 等待子Agent完成
- 不执行具体的业务逻辑
子Agent职责
- 接收具体的任务(处理 Issue 或审核 PR)
- 拥有独立的上下文和执行环境
- 完成任务后报告结果
- 自动退出
工作流程
Code Agent 流程
graph TD
A[定时触发] --> B[扫描未处理的 Issues]
B --> C[过滤和排序]
C --> D{是否有未处理 Issue?}
D -->|是| E[启动子Agent]
D -->|否| F[等待下次触发]
E --> G[子Agent处理 Issue]
G --> H[创建分支和代码]
H --> I[运行测试]
I --> J[提交代码和创建 PR]
J --> K[报告结果并退出]
K --> F
PR Agent 流程
graph TD
A[定时触发] --> B[扫描未审核的 PRs]
B --> C{是否有未审核 PR?}
C -->|是| D[启动子Agent]
C -->|否| E[等待下次触发]
D --> F[子Agent审核 PR]
F --> G[代码质量检查]
G --> H[测试检查]
H --> I[安全检查]
I --> J{审核通过?}
J -->|是| K[批准 PR]
J -->|否| L[请求修改]
K --> M[报告结果并退出]
L --> M
M --> E
技术实现
使用 Agent 工具
// Code Agent
Agent({
subagent_type: "general-purpose",
description: `处理 Issue #{number}`,
prompt: `完整的工作流程说明...`,
run_in_background: false // 前台运行
})
// PR Agent
Agent({
subagent_type: "general-purpose",
description: `审核 PR #{number}`,
prompt: `完整的审核流程说明...`,
run_in_background: false // 前台运行
})
并发控制
- 定时任务检查是否有正在运行的子Agent
- 如果有,跳过本次触发
- 如果没有,启动新的子Agent
优势
1. 隔离性
- 每个子Agent有独立的上下文
- 子Agent的错误不影响主进程
- 任务之间相互独立
2. 稳定性
- 子Agent崩溃不影响定时任务继续运行
- 资源泄漏被限制在子Agent内
- 主进程保持轻量
3. 可观察性
- 每个子Agent的任务清晰可追踪
- 独立的日志和状态
- 更容易调试问题
4. 资源管理
- 子Agent完成后自动释放资源
- 避免长时间运行导致的内存问题
- 更好的系统资源利用率
配置
环境变量
# 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 # Code Agent 触发间隔
PR_AGENT_INTERVAL=10 # PR Agent 触发间隔
# 审核配置
AUTO_MERGE=false # 是否自动合并审核通过的 PR
定时间隔建议
根据项目规模调整:
- 小型项目 (< 10 个 Issues): 3-5 分钟
- 中型项目 (10-50 个 Issues): 5-10 分钟
- 大型项目 (> 50 个 Issues): 10-15 分钟
使用方式
启动定时任务
/gitea:start-scheduler
停止定时任务
/gitea:stop-scheduler
查看状态
/gitea:status
注意事项
- 会话限制: 定时任务仅在当前会话有效
- 自动过期: 定时任务最多运行 3 天
- 并发控制: 同一时间只运行一个子Agent
- 错误重试: 子Agent失败后会在下次触发时重试
- 资源管理: 子Agent完成后自动释放资源
相关文件
.claude/commands/gitea/start-scheduler.md- 启动定时任务.claude/commands/gitea/stop-scheduler.md- 停止定时任务docs/plan/2026-03-19_subagent-scheduler.md- 实施计划
更新历史
- 2026-03-19: 从主进程模式迁移到子Agent模式