getitdone-api / docs /OPENCODE_COMPARISON.md
gimjungwook's picture
feat: Initial commit - OpenCode API (getitdone-api)
4dc70fb
# OpenCode vs opencode-api ๊ธฐ๋Šฅ ๋น„๊ต ๋ถ„์„
> ๋ถ„์„์ผ: 2026-01-28
>
> ์›๋ณธ TypeScript OpenCode์™€ Python opencode-api์˜ ๊ธฐ๋Šฅ ๋น„๊ต ๋ฐ ํด๋ก  ๊ณ„ํš
---
## ๊ฐœ์š”
| ํ•ญ๋ชฉ | ์›๋ณธ TypeScript OpenCode | Python opencode-api |
|-----|-------------------------|---------------------|
| ์šฉ๋„ | ๊ฐœ๋ฐœ์ž์šฉ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ CLI | ๊ต์œก ํ”Œ๋žซํผ์šฉ ์›น API |
| ๋Ÿฐํƒ€์ž„ | Bun | Python 3.11+ / FastAPI |
| ์•„ํ‚คํ…์ฒ˜ | Namespace ํŒจํ„ด, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ | ํด๋ž˜์Šค ๊ธฐ๋ฐ˜, ์ง์ ‘ ํ˜ธ์ถœ |
| ๊ฒฝ๋กœ | `/packages/opencode/src/` | `/opencode-api/src/opencode_api/` |
---
## ํ˜„์žฌ ๊ตฌํ˜„ ์ƒํƒœ (์•ฝ 20-25%)
| ์˜์—ญ | ์›๋ณธ ๊ธฐ๋Šฅ ์ˆ˜ | Python ๊ตฌํ˜„ | ๋น„์œจ |
|-----|-------------|------------|------|
| Session | 13 ๊ธฐ๋Šฅ | 4 ๊ธฐ๋Šฅ | **31%** |
| Provider | 21 ํ”„๋กœ๋ฐ”์ด๋” | 4 ํ”„๋กœ๋ฐ”์ด๋” | **19%** |
| Tool | 24 ๋„๊ตฌ | 5 ๋„๊ตฌ | **21%** |
| Server | 15 ๋ผ์šฐํŠธ ๊ทธ๋ฃน | 5 ๋ผ์šฐํŠธ ๋ชจ๋“ˆ | **33%** |
| ๊ธฐํƒ€ (MCP, LSP, Permission, Snapshot, Plugin) | 5 ์‹œ์Šคํ…œ | 0 ์‹œ์Šคํ…œ | **0%** |
---
## 1. Session ๊ด€๋ฆฌ
### ๊ตฌํ˜„ ์ƒํƒœ
| ๊ธฐ๋Šฅ | ์›๋ณธ ํŒŒ์ผ | Python ํŒŒ์ผ | ์ƒํƒœ |
|-----|----------|------------|------|
| ์„ธ์…˜ ์ƒ์„ฑ/์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œ | `session/index.ts` | `session/session.py` | โœ… ๊ตฌํ˜„๋จ |
| ๋ฉ”์‹œ์ง€ ํŒŒํŠธ ์‹œ์Šคํ…œ | `message-v2.ts` | `message.py` | โš ๏ธ ๊ฐ„์†Œํ™”๋จ |
| ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆฌ๋ฐ | `processor.ts` + `llm.ts` | `prompt.py` | โœ… ๊ตฌํ˜„๋จ |
| ์„ธ์…˜ ์••์ถ• (Compaction) | `compaction.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ์Šค๋ƒ…์ƒท/๋˜๋Œ๋ฆฌ๊ธฐ | `revert.ts` + `Snapshot` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ์„ธ์…˜ ์š”์•ฝ | `summary.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ์„ธ์…˜ ๊ณต์œ  | `share/share-next.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ์„ธ์…˜ ํฌํฌ | `Session.fork()` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ๋น„์šฉ ๊ณ„์‚ฐ | `Session.getUsage()` | ๊ธฐ๋ณธ ํ† ํฐ๋งŒ | โš ๏ธ ๊ฐ„์†Œํ™”๋จ |
| ์„ธ์…˜ ์ƒํƒœ | `status.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| ์žฌ์‹œ๋„ ๋กœ์ง | `retry.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
### ๋ฏธ๊ตฌํ˜„ ๊ธฐ๋Šฅ ์ƒ์„ธ
#### ์„ธ์…˜ ์••์ถ• (Compaction)
- **์›๋ณธ ์œ„์น˜**: `session/compaction.ts`
- **๊ธฐ๋Šฅ**: ๋Œ€ํ™”๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ์š”์•ฝํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ๊ด€๋ฆฌ
- **์ค‘์š”๋„**: ๐Ÿ”ด ๋†’์Œ (๊ธด ๋Œ€ํ™” ์‹œ ํ•„์ˆ˜)
#### ์„ธ์…˜ ์š”์•ฝ (Summary)
- **์›๋ณธ ์œ„์น˜**: `session/summary.ts`
- **๊ธฐ๋Šฅ**: ํŒŒ์ผ ๋ณ€๊ฒฝ ํ†ต๊ณ„ ๊ณ„์‚ฐ (additions, deletions, files)
- **์ค‘์š”๋„**: ๐ŸŸก ์ค‘๊ฐ„
#### ์Šค๋ƒ…์ƒท/๋˜๋Œ๋ฆฌ๊ธฐ
- **์›๋ณธ ์œ„์น˜**: `session/revert.ts`, `snapshot/index.ts`
- **๊ธฐ๋Šฅ**: Git ๊ธฐ๋ฐ˜ ์Šค๋ƒ…์ƒท์œผ๋กœ ์„ธ์…˜ ์ƒํƒœ ๋˜๋Œ๋ฆฌ๊ธฐ
- **์ค‘์š”๋„**: ๐ŸŸก ์ค‘๊ฐ„ (๊ต์œก ํ”Œ๋žซํผ์—์„œ๋Š” ๋‚ฎ์Œ)
---
## 2. Provider (LLM ํ†ตํ•ฉ)
### ๊ตฌํ˜„ ์ƒํƒœ
| ํ”„๋กœ๋ฐ”์ด๋” | ์›๋ณธ | Python | ์ƒํƒœ |
|-----------|------|--------|------|
| Anthropic Claude | โœ… | โœ… `anthropic.py` | โœ… ๊ตฌํ˜„๋จ |
| OpenAI | โœ… | โœ… `openai.py` | โœ… ๊ตฌํ˜„๋จ |
| Google Gemini | โœ… | โœ… `gemini.py` | โœ… ๊ตฌํ˜„๋จ |
| LiteLLM | โŒ | โœ… `litellm.py` | โœ… Python ์ „์šฉ |
| Amazon Bedrock | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Azure OpenAI | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Google Vertex | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| OpenRouter | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| GitHub Copilot | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| xAI/Grok | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Mistral | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Groq | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| DeepInfra | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Cerebras | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Cohere | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Together AI | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Perplexity | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| GitLab | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| Cloudflare | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
| SAP AI Core | โœ… | โŒ | โŒ ๋ฏธ๊ตฌํ˜„ |
### ์ถ”๊ฐ€ ํ”„๋กœ๋ฐ”์ด๋” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
- LiteLLM์„ ํ†ตํ•ด ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
- `provider/litellm.py` ํ™•์žฅ์œผ๋กœ OpenRouter, Groq, Mistral ๋“ฑ ์ง€์›
---
## 3. Tool System
### ๊ตฌํ˜„ ์ƒํƒœ
| ๋„๊ตฌ | ์›๋ณธ ํŒŒ์ผ | Python ํŒŒ์ผ | ์ƒํƒœ |
|-----|----------|------------|------|
| Tool ์ถ”์ƒํ™” | `tool/tool.ts` | `tool/tool.py` | โœ… ๊ตฌํ˜„๋จ |
| Tool ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ | `registry.ts` | `__init__.py` | โš ๏ธ ๊ฐ„์†Œํ™”๋จ |
| **Question** | `question.ts` | `question.py` | โœ… ๊ตฌํ˜„๋จ |
| **WebSearch** | `websearch.ts` (Exa) | `websearch.py` (DuckDuckGo) | โš ๏ธ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ |
| **WebFetch** | `webfetch.ts` | `webfetch.py` | โœ… ๊ตฌํ˜„๋จ |
| **Todo** | `todo.ts` | `todo.py` | โœ… ๊ตฌํ˜„๋จ |
| **Skill** | `skill.ts` | `skill.py` | โš ๏ธ ๊ธฐ๋ณธ ๊ตฌํ˜„ |
| **Bash** | `bash.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Edit** | `edit.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Write** | `write.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Read** | `read.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Glob** | `glob.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Grep** | `grep.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Ls** | `ls.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Task** | `task.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Batch** | `batch.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **CodeSearch** | `codesearch.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **LSP** | `lsp.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Plan** | `plan.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Apply Patch** | `apply_patch.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **MultiEdit** | `multiedit.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
### ๋ฏธ๊ตฌํ˜„ ํ•ต์‹ฌ ๋„๊ตฌ ์ƒ์„ธ
#### Bash ๋„๊ตฌ
- **๊ธฐ๋Šฅ**: ์…ธ ๋ช…๋ น ์‹คํ–‰, ํƒ€์ž„์•„์›ƒ, ๊ถŒํ•œ ๊ฒ€์‚ฌ
- **๋ณด์•ˆ ๊ณ ๋ ค**: ๊ต์œก ํ”Œ๋žซํผ์—์„œ๋Š” E2B ์ƒŒ๋“œ๋ฐ•์Šค ๋˜๋Š” ์ฝ”๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋Œ€์•ˆ ํ•„์š”
- **์ค‘์š”๋„**: ๐Ÿ”ด ๋†’์Œ (์ฝ”๋“œ ์‹คํ–‰ ํ•„์š” ์‹œ)
#### Edit/Write ๋„๊ตฌ
- **๊ธฐ๋Šฅ**: ํŒŒ์ผ ํŽธ์ง‘/์ƒ์„ฑ, ํผ์ง€ ๋งค์นญ, LSP ์ง„๋‹จ
- **๊ตฌํ˜„ ๋ฐฉ์•ˆ**: Supabase Storage ๋˜๋Š” E2B ์ƒŒ๋“œ๋ฐ•์Šค ํ™œ์šฉ
- **์ค‘์š”๋„**: ๐Ÿ”ด ๋†’์Œ (์ฝ”๋“œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ํ•„์š” ์‹œ)
#### Read/Glob/Grep ๋„๊ตฌ
- **๊ธฐ๋Šฅ**: ํŒŒ์ผ ์ฝ๊ธฐ, ํŒจํ„ด ๊ฒ€์ƒ‰, ๋‚ด์šฉ ๊ฒ€์ƒ‰
- **๊ตฌํ˜„ ๋ฐฉ์•ˆ**: ์ œํ•œ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋˜๋Š” ๊ฐ€์ƒ ํ™˜๊ฒฝ
- **์ค‘์š”๋„**: ๐ŸŸก ์ค‘๊ฐ„
#### Task ๋„๊ตฌ
- **๊ธฐ๋Šฅ**: ์„œ๋ธŒ์—์ด์ „ํŠธ ์œ„์ž„
- **์ค‘์š”๋„**: ๐ŸŸก ์ค‘๊ฐ„ (๋ณต์žกํ•œ ์ž‘์—… ๋ถ„ํ•  ์‹œ)
---
## 4. Server/API
### ๊ตฌํ˜„ ์ƒํƒœ
| ์—”๋“œํฌ์ธํŠธ | ์›๋ณธ | Python | ์ƒํƒœ |
|-----------|------|--------|------|
| `/session` | `routes/session.ts` | `routes/session.py` | โœ… ๊ตฌํ˜„๋จ |
| `/session/{id}/message` (SSE) | ํ†ตํ•ฉ | `routes/session.py` | โœ… ๊ตฌํ˜„๋จ |
| `/session/{id}/abort` | ํ†ตํ•ฉ | `routes/session.py` | โœ… ๊ตฌํ˜„๋จ |
| `/provider` | `routes/provider.ts` | `routes/provider.py` | โœ… ๊ตฌํ˜„๋จ |
| `/event` (SSE) | `server.ts` | `routes/event.py` | โš ๏ธ ๊ธฐ๋ณธ ๊ตฌํ˜„ |
| `/question` | `routes/question.ts` | `routes/question.py` | โœ… ๊ตฌํ˜„๋จ |
| `/agent` | - | `routes/agent.py` | โœ… Python ์ „์šฉ |
| `/project` | `routes/project.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/config` | `routes/config.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/mcp` | `routes/mcp.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/permission` | `routes/permission.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/file` | `routes/file.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/pty` | `routes/pty.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/tui` | `routes/tui.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/experimental` | `routes/experimental.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| `/global` | `routes/global.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
---
## 5. ๊ธฐํƒ€ ์ฃผ์š” ์‹œ์Šคํ…œ
| ์‹œ์Šคํ…œ | ์›๋ณธ ์œ„์น˜ | Python | ์ƒํƒœ |
|-------|----------|--------|------|
| **MCP** | `mcp/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **LSP** | `lsp/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Plugin** | `plugin/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Permission** | `permission/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Snapshot** | `snapshot/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **ACP** | `acp/` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Worktree** | `worktree/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
| **Scheduler** | `scheduler/index.ts` | - | โŒ ๋ฏธ๊ตฌํ˜„ |
---
## ๊ตฌํ˜„ ์šฐ์„ ์ˆœ์œ„
### ๐ŸŸข ๋ฐ”๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ (๋‚œ์ด๋„: ๋‚ฎ์Œ)
| ์ˆœ์œ„ | ๊ธฐ๋Šฅ | ์„ค๋ช… | ์˜ˆ์ƒ ์ž‘์—…๋Ÿ‰ |
|-----|------|------|-----------|
| 1 | ์ถ”๊ฐ€ LLM ํ”„๋กœ๋ฐ”์ด๋” | LiteLLM ํ™•์žฅ (OpenRouter, Groq ๋“ฑ) | 1-2์‹œ๊ฐ„ |
| 2 | ์„ธ์…˜ ์ œ๋ชฉ ์ž๋™ ์ƒ์„ฑ | ์ฒซ ๋ฉ”์‹œ์ง€๋กœ ์ œ๋ชฉ ์ƒ์„ฑ | 1์‹œ๊ฐ„ |
| 3 | ์›น ๊ฒ€์ƒ‰ ๊ฐœ์„  | Exa API๋กœ ์ „ํ™˜ | 2์‹œ๊ฐ„ |
| 4 | ๋น„์šฉ ๊ณ„์‚ฐ | models.dev ์—ฐ๋™ | 2-3์‹œ๊ฐ„ |
### ๐ŸŸก ์ค‘๊ฐ„ ๋‚œ์ด๋„
| ์ˆœ์œ„ | ๊ธฐ๋Šฅ | ์„ค๋ช… | ์˜ˆ์ƒ ์ž‘์—…๋Ÿ‰ |
|-----|------|------|-----------|
| 5 | ์„ธ์…˜ ์••์ถ• (Compaction) | ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ | 4-6์‹œ๊ฐ„ |
| 6 | ์„ธ์…˜ ํฌํฌ | ๋Œ€ํ™” ๋ถ„๊ธฐ | 2-3์‹œ๊ฐ„ |
| 7 | Read ๋„๊ตฌ | ํŒŒ์ผ ์ฝ๊ธฐ (Storage) | 3-4์‹œ๊ฐ„ |
| 8 | Glob/Grep ๋„๊ตฌ | ํŒŒ์ผ ๊ฒ€์ƒ‰ | 4-5์‹œ๊ฐ„ |
### ๐Ÿ”ด ๊ณ ๋‚œ์ด๋„ (์„ค๊ณ„ ๋ณ€๊ฒฝ ํ•„์š”)
| ์ˆœ์œ„ | ๊ธฐ๋Šฅ | ์„ค๋ช… | ์˜ˆ์ƒ ์ž‘์—…๋Ÿ‰ |
|-----|------|------|-----------|
| 9 | Edit/Write ๋„๊ตฌ | ํŒŒ์ผ ์ˆ˜์ • (์ƒŒ๋“œ๋ฐ•์Šค) | 1-2์ผ |
| 10 | Bash ๋„๊ตฌ | ์ฝ”๋“œ ์‹คํ–‰ (๋ณด์•ˆ) | 1-2์ผ |
| 11 | MCP ํ†ตํ•ฉ | ์™ธ๋ถ€ ์„œ๋ฒ„ ์—ฐ๊ฒฐ | 2-3์ผ |
| 12 | Snapshot/Revert | ๋˜๋Œ๋ฆฌ๊ธฐ | 1-2์ผ |
### โŒ ๊ต์œก ํ”Œ๋žซํผ์— ๋ถ€์ ํ•ฉ
- CLI/TUI ์ธํ„ฐํŽ˜์ด์Šค
- ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ง์ ‘ ์ ‘๊ทผ
- PTY (ํ„ฐ๋ฏธ๋„) ๊ธฐ๋Šฅ
- Git Worktree ๊ด€๋ฆฌ
---
## ๊ตฌํ˜„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
### Phase 1: ๊ธฐ๋ณธ ๊ฐœ์„ 
- [ ] ์ถ”๊ฐ€ LLM ํ”„๋กœ๋ฐ”์ด๋” (LiteLLM ํ™•์žฅ)
- [ ] ์„ธ์…˜ ์ œ๋ชฉ ์ž๋™ ์ƒ์„ฑ
- [ ] ์›น ๊ฒ€์ƒ‰ ๊ฐœ์„  (Exa API)
- [ ] ๋น„์šฉ ๊ณ„์‚ฐ (models.dev)
### Phase 2: ์„ธ์…˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ
- [ ] ์„ธ์…˜ ์••์ถ• (Compaction)
- [ ] ์„ธ์…˜ ํฌํฌ
- [ ] ์„ธ์…˜ ์ƒํƒœ ๊ด€๋ฆฌ
### Phase 3: ๋„๊ตฌ ํ™•์žฅ
- [ ] Read ๋„๊ตฌ
- [ ] Glob ๋„๊ตฌ
- [ ] Grep ๋„๊ตฌ
- [ ] Ls ๋„๊ตฌ
### Phase 4: ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ (์„ ํƒ์ )
- [ ] Edit/Write ๋„๊ตฌ (์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ)
- [ ] Bash ๋„๊ตฌ (์ฝ”๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ)
- [ ] MCP ๊ธฐ๋ณธ ์ง€์›
- [ ] Task ๋„๊ตฌ (์„œ๋ธŒ์—์ด์ „ํŠธ)
---
## ์ฐธ๊ณ  ์ž๋ฃŒ
### ์›๋ณธ OpenCode ์ฃผ์š” ํŒŒ์ผ
- Session: `/packages/opencode/src/session/`
- Provider: `/packages/opencode/src/provider/`
- Tool: `/packages/opencode/src/tool/`
- Server: `/packages/opencode/src/server/`
### Python API ์ฃผ์š” ํŒŒ์ผ
- Session: `/opencode-api/src/opencode_api/session/`
- Provider: `/opencode-api/src/opencode_api/provider/`
- Tool: `/opencode-api/src/opencode_api/tool/`
- Routes: `/opencode-api/src/opencode_api/routes/`