見出し画像

OpenCode調査まとめ

OpenCodeの概要を調べてみたりエージェントのプロンプトを読んでみたりしてきましたが、Cursor Agentを使ってさらに調査を進め、まとめを作りました。知りたいと思っていたことを概ねまとめる事ができたので公開します。
私としてはドメインモデルの図が一番参考になりました。

概要

OpenCodeは、AIエージェントを活用したコーディング支援システムです。このドキュメントでは、OpenCodeパッケージのドメインモデル、アーキテクチャ、実装詳細、および運用に関する包括的な情報を提供します。

システム概要

OpenCodeは、AIエージェントを活用したコーディング支援システムで、以下の主要機能を提供します。

  • AIエージェント: 複数の専門エージェントによるタスク実行

  • ツールシステム: ファイル操作、シェル実行、Web検索等の機能

  • 多プロバイダー対応: Anthropic、OpenAI、Google等のAIモデル

  • セッション管理: 対話履歴とタスク管理

  • 設定の柔軟性: プロジェクト単位でのカスタマイズ

リポジトリ構造

packages/opencode/
├── src/
│   ├── agent/           # エージェント定義と管理
│   ├── session/         # セッションとメッセージ管理
│   ├── tool/            # ツールシステム
│   ├── provider/        # AIモデルプロバイダー
│   ├── config/          # 設定管理
│   ├── project/         # プロジェクト管理
│   ├── cli/             # コマンドラインインターフェース
│   ├── lsp/             # Language Server Protocol
│   ├── storage/         # データ永続化
│   └── util/            # ユーティリティ
├── sdks/                # 各種SDK
└── docs/                # ドキュメント

主要ディレクトリの役割

  • agent/: エージェントの定義、初期化、実行管理

  • session/: 対話セッション、メッセージ、Todo管理

  • tool/: 標準ツールの実装とレジストリ

  • provider/: AIモデルプロバイダーの統合

  • config/: 設定ファイルの読み込みと管理

  • project/: プロジェクトの検出と管理

ドメインモデル図


Tool System, Core Domain, Configuration 部分のドメインモデル
小さいので拡大してみてください。
Provider System, Project Management部分のドメインモデル

アーキテクチャ詳細

クライアント/サーバーアーキテクチャ

OpenCodeは、以下のコンポーネントで構成される分散アーキテクチャを採用しています。

  • CLI/UI: ユーザーインターフェース(SolidJS + Vite + TailwindCSS)

  • Core Logic: エージェント、セッション、ツール管理(TypeScript + Bun)

  • TUI: ターミナルユーザーインターフェース(Go)

  • API Server: RESTful API(Hono)

  • Database: ローカルストレージ(SQLite + Drizzle ORM)

技術スタック

  • Runtime: Bun(JavaScript/TypeScript)

  • Frontend: SolidJS, Vite, TailwindCSS

  • Backend: Hono(Web Framework)

  • Database: SQLite, Drizzle ORM

  • Validation: Zod(スキーマバリデーション)

  • AI Integration: AI SDK

  • TUI: Go

  • Parsing: Tree-sitter(Bash解析)

エージェントシステム

エージェントの種類

OpenCodeには以下の標準エージェントが組み込まれています。

1. Build Agent(ビルドエージェント)

  • 役割: コードの作成、編集、実行

  • モード: primary

  • 特徴: ファイル操作、シェル実行、コード生成

2. Plan Agent(プランエージェント)

  • 役割: タスクの計画と設計

  • モード: primary

  • 特徴: 編集権限制限、Web検索可能

3. General Agent(汎用エージェント)

  • 役割: 複雑な質問の調査、コード検索

  • モード: subagent

  • 特徴: 検索特化、Todo管理なし

動的エージェント生成機能

カスタムエージェントを生成するためのプロンプトが内蔵されており、動的にエージェントを生成可能。

ツールシステム

標準ツール一覧

OpenCodeには以下の標準ツールが組み込まれています。
エージェントはこれらのツールをtool callingを通じて呼び出し、ユーザーからの依頼に答えます。

ファイル操作ツール

  • read: ファイル内容の読み取り

  • write: ファイルの作成・上書き

  • edit: ファイル内容の編集(文字列置換)

  • patch: パッチ形式での複数ファイル変更

  • multiedit: 単一ファイルへの複数編集操作

検索・探索ツール

  • glob: ファイルパターンマッチング

  • grep: ファイル内容の正規表現検索

  • list: ディレクトリ内容の表示

実行ツール

  • bash: シェルコマンド実行

  • webfetch: Webコンテンツ取得

管理ツール

  • todowrite: タスクリスト更新

  • todoread: タスクリスト読み取り

  • task: サブエージェントへの作業委譲

権限管理

ツールの実行は権限システムで制御されます。

interface Permission {
  edit: "ask" | "allow" | "deny"
  bash: Record<string, "ask" | "allow" | "deny">
  webfetch?: "ask" | "allow" | "deny"
}

プロバイダーシステム

対応プロバイダー

OpenCodeは以下のAIモデルプロバイダーに対応しています。

1. Anthropic

  • モデル: Claude Sonnet, Haiku, Opus

  • 認証: `ANTHROPIC_API_KEY`

  • 特徴: 推論機能、画像入力対応

2. OpenAI

  • モデル: GPT-4, GPT-3.5

  • 認証: `OPENAI_API_KEY`

  • 特徴: 高品質なテキスト生成

3. Google Vertex AI

  • モデル: Gemini Pro, Gemini Flash

  • 認証: `GOOGLE_CLOUD_PROJECT`

  • 特徴: マルチモーダル対応

4. Amazon Bedrock

  • モデル: Claude, Llama, Titan

  • 認証: AWS認証情報

  • 特徴: エンタープライズ対応

5. OpenCode(独自)

  • 無料モデル: Big Pickle, Grok Code, Code Supernova

  • 有料モデル: Claude, GPT, Qwen等

  • 特徴: 統合された料金体系


いいなと思ったら応援しよう!