第 12 讲:Control Plane 与 Gateway——多工作区编排核心

OpenCode 源码解析 · 第 12 讲

OpenCode 源码解析 第 12 讲:Control Plane 与 Gateway——多工作区编排核心 基于 dev 分支源码 · 2026-07-19 一、Control Plane:OpenCode 的调度中心 前十一讲覆盖了 OpenCode 从 CLI 到配置系统的核心能力。这一讲进入 Control Plane(控制平面) ——OpenCode 实现多工作区编排、远程会话迁移和事件同步的核心基础设施。Control Plane 横跨 7 个文件、约 1,139 行代码 ,是整个系统的"调度中心"。 📦 本讲核心文件 packages/opencode/src/control-plane/workspace.ts (964 行)— 工作区服务与同步循环 packages/opencode/src/control-plane/types.ts (59 行)— 工作区类型定义 packages/opencode/src/control-plane/workspace-adapter-runtime.ts (51 行)— 适配器运行时 packages/opencode/src/control-plane/util.ts (39 行)— 事件等待工具 packages/opencode/src/control-plane/adapters/ (2 文件)— 工作区适配器注册 二、Workspace Service 架构 workspace.ts (964 行)是 Control Plane 的核心,实现了工作区的 CRUD、会话迁移、远程同步和 SSE 事件推送。 1. Workspace 服务接口 📄 control-plane/workspace.ts (第 131-147 行) export interface Interface { readonly create: (input: CreateInput) => Effect.Effect<Info, CreateError> readonly sessionWarp: (input: SessionWarpInput) => Effect.Effect<void, SessionWarpError> readonly list: (project: Project.Info) => Effect.Effect<Info[]> readonly syncList: (project: Project.Info) => Effect.Effect<void> readonly get: (id: WorkspaceV2.ID) => Effect.Effect<Info | undefined> readonly remove: (id: WorkspaceV2.ID) => Effect.Effect<Info | undefined> readonly status: () => Effect.Effect<ConnectionStatus[]> readonly isSyncing: (workspaceID: WorkspaceV2.ID) => Effect.Effect<boolean> readonly waitForSync: (workspaceID: WorkspaceV2.ID, state: Record<string, number>, signal?: AbortSignal, timeout?: number) => Effect.Effect<void, WaitForSyncError> readonly startWorkspaceSyncing: (projectID: ProjectV2.ID) => Effect.Effect<void> } 设计亮点: 11 个公开方法覆盖了工作区生命周期管理、会话迁移、远程同步和状态查询。所有方法返回 Effect.Effect ,支持异步组合和错误处理。 2. 工作区类型定义 📄 control-plane/types.ts (第 7-21 行) export const WorkspaceInfo = Schema.Struct({ id: WorkspaceV2.ID, type: S…

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