171 lines
3.9 KiB
Markdown
171 lines
3.9 KiB
Markdown
# 子Agent模式定时任务
|
||
|
||
## 概述
|
||
|
||
定时任务系统已从主进程执行模式改为子Agent执行模式。每次定时任务触发时,会启动一个独立的子Agent来处理任务,完成后子Agent自动退出,主进程等待下一次触发。
|
||
|
||
## 架构
|
||
|
||
### 主进程职责
|
||
- 维护定时任务调度(使用 CronCreate)
|
||
- 在每次触发时扫描待处理的 Issues/PRs
|
||
- 使用 Agent 工具启动子Agent
|
||
- 等待子Agent完成
|
||
- 不执行具体的业务逻辑
|
||
|
||
### 子Agent职责
|
||
- 接收具体的任务(处理 Issue 或审核 PR)
|
||
- 拥有独立的上下文和执行环境
|
||
- 完成任务后报告结果
|
||
- 自动退出
|
||
|
||
## 工作流程
|
||
|
||
### Code Agent 流程
|
||
|
||
```mermaid
|
||
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 流程
|
||
|
||
```mermaid
|
||
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 工具
|
||
|
||
```javascript
|
||
// 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完成后自动释放资源
|
||
- 避免长时间运行导致的内存问题
|
||
- 更好的系统资源利用率
|
||
|
||
## 配置
|
||
|
||
### 环境变量
|
||
|
||
```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 # 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 分钟
|
||
|
||
## 使用方式
|
||
|
||
### 启动定时任务
|
||
```bash
|
||
/gitea:start-scheduler
|
||
```
|
||
|
||
### 停止定时任务
|
||
```bash
|
||
/gitea:stop-scheduler
|
||
```
|
||
|
||
### 查看状态
|
||
```bash
|
||
/gitea:status
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **会话限制**: 定时任务仅在当前会话有效
|
||
2. **自动过期**: 定时任务最多运行 3 天
|
||
3. **并发控制**: 同一时间只运行一个子Agent
|
||
4. **错误重试**: 子Agent失败后会在下次触发时重试
|
||
5. **资源管理**: 子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模式
|