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/