基于 OpenCode 源码分析,版本截止 2026-03-28
OpenCode 的定时任务系统包含两套独立的实现:
| 系统 | 文件位置 | 用途 | 调度方式 |
|---|---|---|---|
| Scheduler | packages/opencode/src/scheduler/ |
轻量级间隔调度 | setInterval 间隔执行 |
| TaskGenerate | packages/opencode/src/task/generate.ts |
Flash 任务自动化代码生成 | HTTP API 触发 + FIFO 队列 |
用于周期性后台任务,简单的 setInterval 实现,支持实例级和全局级两种作用域隔离。
用于对接 Flash 任务管理系统,自动执行 AI 代码生成。包含完整的任务队列、状态机、进度追踪和错误处理机制。
文件: packages/opencode/src/scheduler/index.ts
实例作用域:每个项目实例独立的调度器,任务只在该实例内生效。 全局作用域:跨所有实例共享,通常用于监控类任务。
1. 防止重复注册
2. 自动清理 (dispose)
3. 进程退出不阻塞 (unref)
文件: packages/opencode/src/task/generate.ts
关键特性:
每个项目实例有独立的 State 存储,调度器和任务互不影响。
通过 Bus.subscribe 监听工具执行事件,实时更新任务进度。
每个任务在独立的 git worktree 中执行,避免分支冲突。
本地日志:完整任务记录,用于调试和问题排查。 远程上报:关键指标上报,用于监控和告警。
| 组件 | 文件路径 | 职责 |
|---|---|---|
| Scheduler 核心 | packages/opencode/src/scheduler/index.ts |
轻量级间隔调度器 |
| TaskGenerate 核心 | packages/opencode/src/task/generate.ts |
任务生成主逻辑 |
| 任务日志 | packages/opencode/src/task/logger.ts |
本地 + Lighthouse 日志 |
| 代码上传 | packages/opencode/src/task/code-upload.ts |
生成结果上传 |
| Flash 集成 | packages/opencode/src/flash/story-task.ts |
Flash API 调用 |
| HTTP 路由 | packages/opencode/src/server/routes/task-generate.ts |
API 端点定义 |
| 实例管理 | packages/opencode/src/project/instance.ts |
实例隔离 |
| 状态管理 | packages/opencode/src/project/state.ts |
可销毁状态 |
| 事件总线 | packages/opencode/src/bus/index.ts |
发布订阅 |
| 会话管理 | packages/opencode/src/session/index.ts |
AI 会话 |
| 调度器测试 | packages/opencode/test/scheduler.test.ts |
单元测试 |
| 生成任务测试 | packages/opencode/test/server/task-generate.test.ts |
API 测试 |
| 特性 | Scheduler | TaskGenerate |
|---|---|---|
| 调度方式 | 间隔执行 (setInterval) |
HTTP API 触发 |
| 作用域 | instance / global | 全局队列 |
| 触发方式 | 启动时注册 | 外部 API 调用 |
| 并发控制 | 无限制(各实例独立) | FIFO 队列(按分支) |
| 错误恢复 | 无 | 可恢复错误重试 |
| 进度追踪 | 无 | 实时 Bus 事件 |
| 适用场景 | 健康检查、心跳 | 自动化代码生成 |
文档生成时间: 2026-03-28