第 1 讲:整体架构与 Monorepo 设计

OpenCode 源码解析 · 第 1 讲

OpenCode 源码解析 第 1 讲:整体架构与 Monorepo 设计 基于 dev 分支源码 · 2026-07-07 一、OpenCode 是什么 OpenCode 是一个 AI 驱动的编程助手 ,核心特点: 🔹 TypeScript monorepo,Bun 运行时 🔹 基于 Effect.js 函数式编程模型 🔹 多界面支持:CLI、TUI、Desktop、Web Dashboard 🔹 插件化扩展,30+ 子包 📦 源码仓库 https://github.com/opencode-ai/opencode 本地路径: ~/Applications/opencode/ · 约 5 万行 TypeScript 二、Monorepo 包结构 OpenCode 采用 monorepo 架构, packages/ 目录包含 30+ 个子包: 包名 职责 类型 packages/opencode 主应用:CLI、Session、Server、Tool 应用层 packages/core 核心库:Effect、Database、Session 核心层 packages/tui 终端界面(@opentui) 界面层 packages/desktop Electron 桌面应用 界面层 packages/app Web Dashboard(SolidJS) 界面层 packages/sdk 客户端 SDK(自动生成) 接口层 三、核心依赖关系 packages/opencode(应用层) ⬇️ 依赖 packages/core(核心层) ⬇️ 依赖 Effect 函数式运行时 依赖规则 🔹 opencode → core → effect 单向依赖 🔹 SDK 可依赖 Schema/Protocol,不可依赖 Core/Server 四、源码目录结构 packages/opencode/src/ 包含 37 个子目录,约 48K 行 TypeScript 代码: 模块 文件数 代码行数 说明 cli/ 79 21,832 CLI 命令与 TUI server/ 71 7,673 HTTP 服务器 session/ 24 8,034 会话核心 plugin/ 18 6,105 插件系统 tool/ 26 4,825 工具注册与执行 provider/ 5 3,967 模型抽象层 acp/ 12 3,446 子代理协议 lsp/ 6 3,311 LSP 集成 五、核心入口代码 📄 packages/opencode/src/index.ts import yargs from "yargs" import { hideBin } from "yargs/helpers" import { RunCommand } from "./cli/cmd/run" import { ServeCommand } from "./cli/cmd/serve" import { AcpCommand } from "./cli/cmd/acp" // ... 共 20+ 个命令模块 const cli = yargs(args) .scriptName("opencode") .version("version", "show version", InstallationVersion) .command(RunCommand) .command(ServeCommand) .command(AcpCommand) // ... 更多命令 📄 packages/opencode/src/effect/app-node-builder-v1.ts import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { InstanceBootstrap } from "@/project/bootstrap" import { InstanceStore } from "@/project/instance-store" export fu…

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