Skip to content

[Feature] GitHub Copilot CLI バックエンド対応の追加 #101

@ktmage

Description

@ktmage

Description

OpenCodeGUI を、同じ VS Code 拡張の上で OpenCodeGitHub 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 はそのまま使う
  • 使えない機能は capabilitiesagent 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

共通機能

  • backend 切り替え設定と agent 初期化を安定化する
  • 共通 UI で agent.id / capabilities を参照できるようにする
  • セッション作成・一覧・選択の共通導線を維持する
  • メッセージ送受信の共通ループを backend 非依存に保つ
  • model selector を共通導線として維持する
  • terminal 起動を getTerminalCommand() 経由に統一する
  • settings/config 導線を backend ごとに出し分け可能にする
  • shell 実行導線を共通 UI として維持する
  • ストリーミング表示を backend 非依存の描画に寄せる
  • backend-neutral でない文言や命名を整理する

OpenCode 専用機能

  • fork / undo / redo UI を OpenCode 選択時のみ有効化する
  • message editing / checkpoint restore を OpenCode 専用導線にする
  • session diff / file changes / difit を OpenCode 専用にする
  • todo UI を OpenCode 専用にする
  • permission queue / approval UI を OpenCode 専用にする
  • child session / subtask navigation を OpenCode 専用にする
  • agent mention / primary agent selector / skills を OpenCode 専用にする
  • OpenCode 固有イベントや part 表現を Copilot 側へ漏らさないようにする

Copilot 専用機能

  • Copilot 接続方式を --acp 優先でスパイク・確定する
  • 必要なら copilot -p を補助経路として整理する
  • sendMessage() をプレースホルダから実レスポンスへ置き換える
  • Copilot 用 session 管理方針を実装する
  • --resume / --continue を使った継続導線を検討・実装する
  • getConfiguredModel() / setModel() の実装方針を固める
  • --share / --share-gist を使う共有導線を検討・実装する
  • Copilot 独自の permission / tool allow / URL allow 設定の露出方法を決める
  • Copilot MCP / GitHub MCP の設定導線を検討する
  • Copilot 側で未対応の機能を capability=false で明示する

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 に整理する

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions