OpenCode 架构总览
一句话
OpenCode 是一个产品级 coding agent 平台。 不只是 CLI agent,还包含 server、SDK、web/desktop、plugin system。
本地源码
text
路径: /home/ubuntu/work/opencode
HEAD: 379adee35 revert: back out experimental codemode
语言: TypeScript/Bun
管理: Bun monorepo核心包结构
| 包 | 路径 | 作用 |
|---|---|---|
| cli/app | packages/opencode | 命令入口、TUI、run、serve、session glue |
| core | packages/core | V2 session、tool registry、plugin、agent、permission、database、event |
| llm | packages/llm | Schema-first LLM route/runtime 抽象 |
| tui | packages/tui | 基于 @opentui + Solid 的终端 UI |
| server | packages/server | server handler/middleware |
| sdk | packages/sdk | OpenCode API client |
核心设计:Route Decomposition
OpenCode LLM 层的核心创新:
| 层 | 作用 |
|---|---|
| Protocol | provider API 语义协议(OpenAI Chat、Anthropic Messages 等) |
| Endpoint | URL 构造 |
| Auth | per-request auth |
| Framing | bytes → frames(SSE / AWS event stream) |
DeepSeek/TogetherAI/Cerebras 复用同一个 OpenAIChat.protocol,只需 5-15 行 Route.make() 调用。
调用链
opencode CLI
↓
packages/opencode/src/index.ts
↓
TuiThreadCommand / RunCommand / ServeCommand
↓
Effect AppRuntime + InstanceStore
↓
local server or remote server
↓
SDK client / HTTP API / event stream
↓
SessionV2.prompt()
↓
durable session_input
↓
SessionExecution.wake/resume()
↓
SessionRunCoordinator
↓
SessionRunner.run()
↓
LLM.request() → LLMClient.stream()
↓
ToolRegistry.materialize / settle
↓
EventV2 durable events → projector / TUI架构亮点
- Event-sourced session:SQLite + 投影,durable execution
- Server-first:server/API 是一等公民
- Route decomposition:Protocol + Endpoint + Auth + Framing
- Effect-TS:全栈 Effect/Schema-driven
- SDK-driven TUI:TUI 通过 SDK/event source 访问 server