# 修改定时任务为子Agent模式 ## 目标 将定时任务从主进程执行改为子Agent执行模式,实现: 1. 启动定时任务时,启动一个子Agent 2. 子Agent完成任务后自动退出 3. 主进程等待下一个定时任务触发 ## 背景 当前实现: - 使用 CronCreate 创建定时任务 - 定时任务在主进程中直接执行Agent逻辑 - 可能存在长时间运行导致的问题 目标实现: - 定时任务触发时,使用Agent工具启动子Agent - 子Agent独立运行,有自己的上下文 - 子Agent完成后自动退出,不影响主进程 ## 实施步骤 ### 1. 修改 start-scheduler.md **当前逻辑**: ``` 每 N 分钟执行一次: 1. 获取所有打开的 Issues 2. 过滤出未处理的 3. 选择优先级最高的Issue 4. 在主进程中处理该Issue ``` **修改后逻辑**: ``` 每 N 分钟执行一次: 1. 获取所有打开的 Issues 2. 过滤出未处理的 3. 选择优先级最高的Issue 4. 使用 Agent 工具启动子Agent处理该Issue 5. 子Agent完成后自动退出 6. 等待下次定时任务 ``` ### 2. 使用 Agent 工具 使用 Agent 工具启动子Agent: ```typescript Agent({ subagent_type: "general-purpose", description: "处理 Issue #{number}", prompt: "处理 Gitea Issue #{number} 的完整流程...", run_in_background: false // 前台运行,完成后继续 }) ``` ### 3. 修改内容 #### start-scheduler.md 的修改点 1. **Code Agent 定时任务逻辑**(第24-33行) - 将"启动 Agent 处理该 Issue"改为使用 Agent 工具 2. **Agent 工作流程**(第35-62行) - 将详细工作流程移到子Agent的prompt中 3. **PR Agent 定时任务逻辑**(第68-74行) - 将"启动 Agent 审核"改为使用 Agent 工具 4. **Agent 审核流程**(第76-111行) - 将详细工作流程移到子Agent的prompt中 ### 4. 优势 1. **隔离性**:子Agent有独立的上下文,不会干扰主进程 2. **稳定性**:子Agent崩溃不影响定时任务继续运行 3. **可观察性**:每个子Agent的任务清晰可追踪 4. **资源管理**:子Agent完成后自动释放资源 ### 5. 实施细节 #### Code Agent Prompt 模板 ``` 你是一个 Code Agent,负责处理 Gitea Issue #{number}。 工作流程: 1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 获取 Issue 详情 2. 解析需求,检查依赖 3. 创建分支 feature/issue-{number} 4. 实现功能,编写测试 5. 运行测试,确保通过 6. 提交代码,创建 PR 7. 在 Issue 中添加评论说明 完成后报告结果并退出。 ``` #### PR Agent Prompt 模板 ``` 你是一个 PR Agent,负责审核 Gitea PR #{number}。 工作流程: 1. 依据 .claude/commands/gitea/API-QUICK-REFERENCE.md 获取 PR 详情 2. 代码质量检查 3. 测试检查 4. 安全检查 5. 创建审核评论,决定是否批准 6. 如需修改,启动修复Agent 完成后报告结果并退出。 ``` ## 风险与缓解 1. **风险**:子Agent启动开销 - **缓解**:定时任务间隔已考虑此开销 2. **风险**:子Agent失败无法重试 - **缓解**:下次定时任务会再次尝试 3. **风险**:并发控制需要确保 - **缓解**:在启动子Agent前检查是否有正在运行的任务 ## 测试计划 1. 启动定时任务 2. 创建测试Issue 3. 观察子Agent启动和处理 4. 验证子Agent自动退出 5. 确认定时任务继续运行 ## 预期结果 - 定时任务启动后,主进程保持轻量 - 子Agent按需启动,完成任务后自动退出 - 系统资源得到更好的管理 - 错误隔离,提高系统稳定性