第 16 讲:Effect 运行时系统——Fiber、Runner、Layer 与服务编排

OpenCode 源码解析 · 第 16 讲

OpenCode 源码解析 第 16 讲:Effect 运行时系统——Fiber、Runner、Layer 与服务编排 基于 dev 分支源码 · 2026-07-24 一、Effect 运行时:OpenCode 的并发引擎 前十五讲覆盖了 OpenCode 从 CLI 到数据库的核心能力。这一讲深入 Effect 运行时系统 ——OpenCode 基于 Effect TS 构建的并发引擎。它管理 Fiber 生命周期、服务依赖编排、实例状态隔离和 Promise 桥接。Effect 模块横跨 11 个文件、约 767 行代码 ,是整个系统的并发基础设施。 📦 本讲核心文件 effect/runner.ts (217 行)— Runner 并发控制器 effect/app-runtime.ts (135 行)— 42 个服务的 Layer 编排 effect/instance-state.ts (69 行)— ScopedCache 实例状态 effect/bridge.ts (84 行)— Effect/Promise 桥接 effect/run-service.ts (47 行)— makeRuntime 工具 effect/runtime-flags.ts (77 行)— 27 个运行时标志 二、AppRuntime:42 个服务的 Layer 编排 app-runtime.ts (135 行)是 OpenCode 的运行时入口,通过 LayerNode.group 编排了 42 个服务节点 ,形成完整的依赖图。 1. Layer 依赖图 📄 effect/app-runtime.ts (第 58-109 行) export const AppLayer = AppNodeBuilderV1.build( LayerNode.group([ Npm.node, // 包管理 FSUtil.node, // 文件系统 Database.node, // SQLite 数据库 Auth.node, // 认证 Account.node, // 账户 Config.node, // 配置系统 Git.node, // Git 集成 Storage.node, // 存储 Snapshot.node, // 快照 Plugin.node, // 插件 ModelsDev.node, // 模型开发 Provider.node, // AI Provider ProviderAuth.node, // Provider 认证 Agent.node, // Agent 核心 Skill.node, // 技能 Discovery.node, // 技能发现 Question.node, // 问答 Permission.node, // 权限 Todo.node, // 待办 Session.node, // 会话核心 SessionProjector.node, // 会话投影 SessionStatus.node, // 会话状态 BackgroundJob.node, // 后台任务 RuntimeFlags.node, // 运行时标志 EventV2Bridge.node, // 事件桥接 SessionRunState.node, // 运行状态 SessionProcessor.node,// 处理器 SessionCompaction.node,// 压缩 SessionRevert.node, // 回滚 SessionSummary.node, // 摘要 SessionPrompt.node, // Prompt Instruction.node, // 指令 LLM.node, // LLM 调用 LSP.node, // 语言服务器 MCP.node, // MCP 协议 McpAuth.node, // MCP 认证 Command.node, // 命令 Truncate.node, // 截断 ToolRegistry.node, // 工具注册 Format.node, // 格式化 InstanceStore.node, // 实例存储 Project.node, // 项目管理 Vcs.node, //…

阅读全文:OpenCode 源码解析 第 16 讲