Description
OpenCodeGUI を、同じ VS Code 拡張の上で OpenCode と GitHub Copilot CLI を切り替えて使える構成にする。
目的は、両者のセッション互換や完全な機能互換ではなく、同じ UI 基盤の上で、共通に使える機能は共通化し、各バックエンド固有の機能は出し分けること。
この Issue では、機能を以下の 3 区分で整理して実装する。
- 共通機能: OpenCode / Copilot の両方で使う
- OpenCode 専用機能: OpenCode 選択時のみ使う
- Copilot 専用機能: Copilot 選択時のみ使う
Motivation
- OpenCodeGUI を OpenCode 専用 UI から、複数 CLI バックエンドを切り替え可能な UI に広げたい
- GitHub Copilot CLI は最初の追加対象として有力
- すべてを共通化しようとすると設計が複雑になるため、共通化は必要最小限に留めたい
- 差分は無理に吸収せず、バックエンドごとに出し分けた方が実装も保守も素直
Functional Split
共通機能
以下は、IAgent 経由で OpenCode / Copilot の両方に提供する。
- バックエンド切り替え
- セッション作成
- セッション一覧 / 選択
- メッセージ送信 / 受信
- モデル選択
- ターミナル起動
- 設定導線
- Markdown 表示
- ストリーミング表示(実現方法は backend ごとに異なってよい)
- shell 実行
OpenCode 専用機能
以下は OpenCode 選択時のみ表示・有効化する。
- session fork
- undo / redo
- message editing / checkpoint restore
- session diff
- file changes diff view
- difit 連携
- todo
- permission queue / approval UI
- child session / subtask navigation
- agent mention / primary agent selector / skills
- OpenCode 固有の patch / snapshot / compaction 体験
Copilot 専用機能
以下は Copilot 選択時のみ表示・有効化してよい。
- Copilot CLI / ACP ベースの接続
--resume / --continue ベースの継続
--share / --share-gist ベースの共有
- Copilot 独自の permission / tool allow / URL allow 設定
- Copilot 側 MCP / GitHub MCP 設定導線
- 将来的に必要なら Copilot 独自の agent / fleet / skills 導線
Proposed Solution
1. UI とホスト層は「共通機能 + 出し分け」で整理する
- 共通 UI はそのまま使う
- 使えない機能は
capabilities と agent identity で隠す
- OpenCode 専用 UI は OpenCode 選択時だけ出す
- Copilot 専用 UI は必要になった時点で Copilot 側に追加する
2. IAgent は共通機能の境界として使う
- 共通機能は
IAgent で隠蔽する
- 対応できないメソッドは capability=false 前提で扱う
- OpenCode と Copilot の内部 session / event / state は別物でよい
- セッション互換は目指さない
3. Copilot 実装は「使えるところだけ実装する」
Copilot 側では、まず以下を成立させる。
- 実レスポンスを返す
sendMessage()
- Copilot 用の session 管理
getConfiguredModel() / setModel() の整理
getTerminalCommand()
- 必要なら
shareSession() の Copilot 実装
- 必要なら resume / continue 相当の session 継続導線
4. Copilot の接続方式は実装しやすいものを優先する
第一候補は copilot --acp。
理由:
- IDE / custom frontend 向けの公開インターフェースである
- session と message chunk を扱える
- UI 側の会話ループに繋ぎやすい
ただし、実機での利用可能性と安定性を見て、必要なら copilot -p を補助経路として使ってよい。
Implementation Checklist
共通機能
OpenCode 専用機能
Copilot 専用機能
Acceptance Criteria
pnpm build が通る
- OpenCode backend が壊れない
opencode.agentBackend = copilot-cli で拡張が起動する
- OpenCode / Copilot を切り替えて、同じ拡張上で利用できる
- 共通機能は両方で利用できる
- OpenCode 専用機能は OpenCode 選択時のみ表示される
- Copilot 専用機能は Copilot 選択時のみ表示される
- Copilot 選択時、少なくとも「セッション作成 -> 送信 -> 応答受信」の 1 往復が成立する
- セッション互換を前提にしない実装方針がコードと UI に反映される
- README / docs / metadata の説明が、少なくとも現実の構成と矛盾しない
Out of scope
- OpenCode と Copilot の session 互換
- OpenCode と Copilot の完全な機能パリティ
- OpenCode 専用機能を Copilot に無理に移植すること
- Copilot 専用機能を無理に OpenCode のデータモデルへ合わせること
Notes for Implementation
- 共通化は「共通機能」に限定する
- 差分は無理に抽象化しすぎず、backend ごとに分けてよい
- capability=false の機能は UI から呼び出し自体を抑止する
agent.id ベースの分岐を許容する
- OpenCode 固有命名や文言は、必要に応じて backend-neutral に整理する
Description
OpenCodeGUI を、同じ VS Code 拡張の上で
OpenCodeとGitHub Copilot CLIを切り替えて使える構成にする。目的は、両者のセッション互換や完全な機能互換ではなく、同じ UI 基盤の上で、共通に使える機能は共通化し、各バックエンド固有の機能は出し分けること。
この Issue では、機能を以下の 3 区分で整理して実装する。
Motivation
Functional Split
共通機能
以下は、
IAgent経由で OpenCode / Copilot の両方に提供する。OpenCode 専用機能
以下は OpenCode 選択時のみ表示・有効化する。
Copilot 専用機能
以下は Copilot 選択時のみ表示・有効化してよい。
--resume/--continueベースの継続--share/--share-gistベースの共有Proposed Solution
1. UI とホスト層は「共通機能 + 出し分け」で整理する
capabilitiesとagent identityで隠す2.
IAgentは共通機能の境界として使うIAgentで隠蔽する3. Copilot 実装は「使えるところだけ実装する」
Copilot 側では、まず以下を成立させる。
sendMessage()getConfiguredModel()/setModel()の整理getTerminalCommand()shareSession()の Copilot 実装4. Copilot の接続方式は実装しやすいものを優先する
第一候補は
copilot --acp。理由:
ただし、実機での利用可能性と安定性を見て、必要なら
copilot -pを補助経路として使ってよい。Implementation Checklist
共通機能
agent.id/capabilitiesを参照できるようにするgetTerminalCommand()経由に統一するOpenCode 専用機能
Copilot 専用機能
--acp優先でスパイク・確定するcopilot -pを補助経路として整理するsendMessage()をプレースホルダから実レスポンスへ置き換える--resume/--continueを使った継続導線を検討・実装するgetConfiguredModel()/setModel()の実装方針を固める--share/--share-gistを使う共有導線を検討・実装するAcceptance Criteria
pnpm buildが通るopencode.agentBackend = copilot-cliで拡張が起動するOut of scope
Notes for Implementation
agent.idベースの分岐を許容する