Skip to content

OpenCode 仓库结构

Bun Monorepo

OpenCode 使用 Bun workspaces,是全栈 TypeScript monorepo。比 Pi 大得多,也更像产品级平台。

text
packages/
├── opencode/            # CLI + TUI + 桌面入口
│   └── src/
│       ├── index.ts           # 包入口
│       ├── cli/
│       │   ├── cmd/           # tui / run / serve / attach / acp / mcp
│       │   ├── effect-cmd.ts  # Effect Runtime glue
│       │   └── ...
│       ├── app/               # 桌面/web app
│       └── config.ts

├── core/                # 核心业务逻辑(最重要)
│   └── src/
│       ├── session.ts         # SessionV2(核心核心)
│       ├── session/
│       │   ├── runner/        # SessionRunner、llm runner
│       │   ├── execution/     # Local / Remote 执行
│       │   ├── prompt.ts      # System prompt
│       │   └── input.ts       # User input handling
│       ├── tool/
│       │   ├── registry.ts    # ToolRegistry 服务
│       │   └── ...
│       ├── plugin.ts          # Plugin 服务
│       ├── agent.ts           # Agent 服务
│       ├── event/             # EventV2 事件系统
│       ├── database/          # SQLite 数据库
│       ├── permission/
│       └── config/

├── llm/                 # LLM 抽象(Schema-driven)
│   └── src/
│       ├── llm.ts             # LLM request/stream/client
│       ├── route/             # Route 分解
│       │   ├── protocol.ts   # API 协议(OpenAI/Anthropic)
│       │   ├── endpoint.ts   # URL 构造
│       │   ├── auth.ts       # 认证
│       │   └── framing.ts    # 字节流解帧(SSE/AWS event stream)
│       └── providers/        # Provider 实现

├── tui/                 # 终端 UI(Solid + @opentui)
│   └── src/
│       ├── app.tsx            # TUI 入口
│       ├── views/             # Chat、Editor、FileTree 等
│       ├── components/
│       └── hooks/

├── server/              # HTTP Server
│   └── src/
│       ├── handler.ts
│       ├── middleware.ts
│       └── routes/

├── sdk/                 # OpenCode Client SDK
│   └── src/
│       ├── client.ts
│       ├── session.ts
│       └── types.ts

├── ui/                  # 共享 UI 组件
├── opentui/             # 终端 UI 框架(自研)
├── desktop/             # Electron 桌面应用
└── web/                 # Web 界面

核心分层

Layer 1: packages/llm         ← LLM 抽象(Route decomposition)
Layer 2: packages/core        ← SessionV2 + ToolRegistry + Plugin + Agent
Layer 3: packages/server      ← HTTP API
Layer 4: packages/sdk         ← Client SDK
Layer 5: packages/opencode    ← CLI/TUI/app glue
Layer 6: packages/tui         ← UI + components
Layer 7: packages/desktop/web ← Electron / Web app

重点packages/core 是心脏,包含 SessionV2、执行引擎、工具系统、插件、权限等所有核心逻辑。

与 Pi/Hermes 对比

维度PiOpenCodeHermes
Monorepo 管理npm workspacesBun workspacesPython project
包数量~6~20+monolith + TS apps
核心包coding-agentcoreagent/
LLM 包aillmagent/transports/
TUI 包tuitui + opentuiui-tui/
Serverservergateway/

Powered by VitePress