Skip to main content

SDK と CLI の互換性

          Copilotを使用して使用可能な Copilot SDK CLI 機能を比較し、CLI のみの機能を特定し、プログラムによる回避策を見つけます。

この機能を使用できるユーザーについて

GitHub Copilot SDK は、すべての Copilot プランで使用できます。

メモ

          Copilot SDK は現在 パブリック プレビューです。 機能と可用性は変更される場合があります。
          GitHub Copilot SDK は、JSON-RPC プロトコルを介して GitHub Copilot CLI(コマンドラインインターフェース) と通信します。 SDK で使用できるようにするには、このプロトコルを使用して機能を明示的に公開する必要があります。 多くの対話型 CLI 機能はターミナル固有であり、プログラムでは使用できません。

機能の比較

SDK で使用可能

特徴SDK メソッドメモ
セッション管理
セッションの作成createSession()完全な構成のサポート
セッションを再開するresumeSession()無限のセッション ワークスペース
セッションを切断するdisconnect()メモリ内リソースを解放する
セッションを破棄するdestroy()代わりに disconnect() を使用してください
セッションの削除deleteSession()ストレージから削除する
セッションの一覧listSessions()すべての保存済みセッション
最後のセッションを取得するgetLastSessionId()すばやく再開
フォアグラウンド セッションを取得するgetForegroundSessionId()複数セッションの調整
フォアグラウンド セッションを設定するsetForegroundSessionId()複数セッションの調整
メッセージング
メッセージの送信send()添付ファイルあり
送信して待機するsendAndWait()完了するまでブロックする
ステアリング (イミディエイト モード)send({ mode: "immediate" })中止せずに途中ターンを挿入する
キューイング (エンキュー モード)send({ mode: "enqueue" })順次処理用のバッファー (既定)
添付ファイルsend({ attachments: [{ type: "file", path }] })画像の自動エンコードとサイズ変更
ディレクトリの添付ファイルsend({ attachments: [{ type: "directory", path }] })ディレクトリ コンテキストをアタッチする
履歴を取得するgetMessages()すべてのセッションイベント
中止abort()進行中のリクエストをキャンセルする
ツール
カスタム ツールを登録するregisterTools()完全な JSON スキーマのサポート
ツールのアクセス許可の制御
          `onPreToolUse` フック | 許可/拒否/要求 |

| ツールの結果の変更 | onPostToolUse フック | 結果の変換 | | 使用可能なツールまたは除外されたツール | availableToolsexcludedTools 設定 | フィルター ツール | | モデル | | | | モデルを一覧表示する | listModels() | 機能、課金、ポリシー | | モデルの設定 (作成時) | model セッション構成 | セッションごと | | モデルの切り替え (セッション中) | session.setModel() | また、次を介して session.rpc.model.switchTo() | | 現在のモデルを取得する | session.rpc.model.getCurrent() | アクティブ なモデルのクエリを実行する | | 推論作業 | reasoningEffort 設定 | サポートされているモデルの場合 | | エージェント モード | | | | 現在のモードを取得する | session.rpc.mode.get() | 現在のモードを返します。 | | モードの設定 | session.rpc.mode.set() | モードを切り替える | | プラン管理 | | | | プランを読む | session.rpc.plan.read() | plan.mdのコンテンツとパスを取得する | | プランの更新 | session.rpc.plan.update() | plan.md コンテンツを書き込む | | 計画の削除 | session.rpc.plan.delete() | plan.md の削除 | | ワークスペース ファイル | | | | ワークスペース ファイルを一覧表示する | session.rpc.workspace.listFiles() | セッション ワークスペース内のファイル | | ワークスペース ファイルの読み取り | session.rpc.workspace.readFile() | ファイルの内容を読み取る | | ワークスペース ファイルを作成する | session.rpc.workspace.createFile() | ワークスペースにファイルを作成する | | 認証 | | | | 認証の状態を取得する | getAuthStatus() | ログイン状態を確認する | | トークンを使用する | githubToken オプション | プログラムによる認証 | | 接続 | | | | Ping | client.ping() | サーバー タイムスタンプを使用した正常性チェック | | サーバーの状態を取得する | client.getStatus() | プロトコルのバージョンとサーバー情報 | | MCP サーバー | | | | ローカル/stdio サーバー | mcpServers 設定 | プロセスを生成する | | リモート HTTP/SSE | mcpServers 設定 | サービスへの接続 | | フック | | | | ツール使用前 | onPreToolUse | 権限、引数を変更 | | ツールの使用後 | onPostToolUse | 結果を変更する | | ユーザー プロンプト | onUserPromptSubmitted | プロンプトを変更する | | セッションの開始/終了 | onSessionStartonSessionEnd | ソース/理由を含むライフサイクル | | エラー処理 | onErrorOccurred | カスタム処理 | | イベント | | | | すべてのセッションイベント | on()once() | 40 以上のイベントの種類 | | ストリーミング | streaming: true | デルタ イベント | | セッション構成 | | | | カスタム エージェント | customAgents 設定 | 特殊なエージェントを定義する | | システム メッセージ | systemMessage 設定 | 追加または置換 | | カスタム プロバイダー | provider 設定 | BYOK のサポート | | 無限セッション | infiniteSessions 設定 | 自動圧縮 | | 権限ハンドラー | onPermissionRequest | 要求の承認/拒否 | | ユーザー入力ハンドラー | onUserInputRequest | ask_userの処理 | | スキル | skillDirectories 設定 | カスタム スキル | | 無効なスキル | disabledSkills 設定 | 特定のスキルを無効にする | | 設定ディレクトリ | configDir 設定 | デフォルト設定の場所を上書きする | | クライアント名 | clientName 設定 | User-Agent でアプリを識別する | | 作業ディレクトリ | workingDirectory 設定 | セッション cwd を設定する | | 試験段階 | | | | エージェント管理 | session.rpc.agent.* | 現在のエージェントを一覧表示、選択、選択解除、取得する | | フリート モード | session.rpc.fleet.start() | 並列サブエージェントの実行 | | 手動圧縮 | session.rpc.compaction.compact() | オンデマンドで圧縮をトリガーする |

SDK では使用できません (CLI のみ)

特徴CLI コマンド/オプション理由
セッションのエクスポート
[ファイルへエクスポート]
          `--share`、`/share` | プロトコルに含まれていない |

| gist にエクスポートする | --share-gist/share gist | プロトコルに含まれていない | | 対話型 UI | | | | スラッシュ コマンド | /help/clear/exitなど。 | ターミナル UI (TUI) のみ | | エージェント選択ダイアログボックス | /agent | 対話型 UI | | [差分モード] ダイアログ | /diff | 対話型 UI | | フィードバック ダイアログ | /feedback | 対話型 UI | | テーマ セレクター | /theme | ターミナル UI | | モデル選択ツール | /model | 対話型 UI (代わりに SDK setModel() を使用) | | クリップボードにコピー | /copy | ターミナル固有 | | コンテキスト管理 | /context | 対話型 UI | | 研究と歴史 | | | | Deep Research | /research | Web 検索を使用した TUI ワークフロー | | セッション履歴ツール | /chronicle | 立ち会い、アドバイス、改善、インデックス再作成 | | ターミナル機能 | | | | カラー出力 | --no-color | ターミナル固有 | | スクリーン リーダー モード | --screen-reader | アクセシビリティ | | 豊富な差分レンダリング | --plain-diff | ターミナルレンダリング | | スタートアップ バナー | --banner | ビジュアル要素 | | 代替画面バッファー | --alt-screen--no-alt-screen | ターミナルレンダリング | | マウスのサポート | --mouse--no-mouse | ターミナル入力 | | パス/アクセス許可のショートカット | | | | すべてのパスを許可する | --allow-all-paths | アクセス許可ハンドラーを使用する | | すべての URL を許可する | --allow-all-urls | アクセス許可ハンドラーを使用する | | すべてのアクセス許可を許可する | --yolo--allow-all/allow-all | アクセス許可ハンドラーを使用する | | 詳細なツールのアクセス許可 | --allow-tool--deny-tool | onPreToolUseフックを使用する | | URL アクセス制御 | --allow-url--deny-url | アクセス許可ハンドラーを使用する | | 許可されているツールをリセットする | /reset-allowed-tools | TUI コマンド | | ディレクトリ管理 | | | | ディレクトリの追加 | /add-dir--add-dir | セッションで構成する | | ディレクトリを一覧表示する | /list-dirs | TUI コマンド | | ディレクトリの変更 | /cwd | TUI コマンド | | プラグイン/MCP 管理 | | | | プラグイン コマンド | /plugin | 対話型管理 | | MCP サーバー管理 | /mcp | 対話型 UI | | アカウント管理 | | | | ログイン フロー | /logincopilot auth login | OAuth デバイス フロー | | ログアウト | /logoutcopilot auth logout | ダイレクトCLI | | ユーザー情報 | /user | TUI コマンド | | セッション操作 | | | | 会話をクリアする | /clear | TUI のみ | | 平面図 | /plan | TUI のみ (代わりに SDK session.rpc.plan.* を使用) | | セッション管理 | /session/resume/rename | TUI ワークフロー | | フリート モード (対話型) | /fleet | TUI のみ (代わりに SDK session.rpc.fleet.start() を使用) | | スキル管理 | | | | スキルを管理する | /skills | 対話型 UI | | タスク管理 | | | | バックグラウンド タスクを表示する | /tasks | TUI コマンド | | 使用状況と統計 | | | | トークンの使用法 | /usage | 使用状況イベントを登録する | | コード レビュー | | | | 変更の確認 | /review | TUI コマンド | | 委任 | | | | PR に委任する | /delegate | TUI ワークフロー | | ターミナルのセットアップ | | | | シェル統合 | /terminal-setup | シェル固有 | | 発達 | | | | 試験段階の切り替え | /experimental--experimental | ランタイム フラグ | | カスタム命令コントロール | --no-custom-instructions | CLI フラグ | | セッションの診断 | /diagnose | TUI コマンド | | 手順の表示/管理 | /instructions | TUI コマンド | | デバッグ ログの収集 | /collect-debug-logs | 診断ツール | | ワークスペースのインデックスを再作成する | /reindex | TUI コマンド | | IDE 統合 | /ide | IDE 固有のワークフロー | | 非対話型モード | | | | プロンプト モード | -p--prompt | 単発実行 | | 対話型プロンプト | -i--interactive | 自動実行後に対話型 | | サイレント出力 | -s--silent | スクリプトに対応 | | セッションの続行 | --continue | 最新の状態に再開 | | エージェントの選択 | --agent <agent> | CLI フラグ |

対処方法

セッションのエクスポート

          `--share` オプションは SDK では使用できません。 これを解決するには、次のようにします。
  • イベントを手動で収集する: セッション イベントをサブスクライブし、独自のエクスポートを作成します。

    TypeScript
    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getMessages();
    // Format as markdown yourself
    
  • 1 回限りのエクスポートには CLI を直接使用します。

アクセス許可の制御

SDK では、既定で拒否アクセス許可モデルが使用されます。 アプリが onPermissionRequest ハンドラーを提供しない限り、すべてのアクセス許可要求 (ファイルの書き込み、シェル コマンド、URL フェッチなど) は拒否されます。

          `--allow-all-paths`または`--yolo`の代わりに、アクセス許可ハンドラーを使用します。
TypeScript
const session = await client.createSession({
  onPermissionRequest: approveAll,
});

トークンの使用状況の追跡

          `/usage`の代わりに、使用状況イベントをサブスクライブします。
TypeScript
session.on("assistant.usage", (event) => {
  console.log("Tokens used:", {
    input: event.data.inputTokens,
    output: event.data.outputTokens,
  });
});

コンテキスト圧縮

          `/compact`の代わりに、自動圧縮を構成するか、手動でトリガーします。
TypeScript
// Automatic compaction via config
const session = await client.createSession({
  infiniteSessions: {
    enabled: true,
    backgroundCompactionThreshold: 0.80,  // Start background compaction at 80% context utilization
    bufferExhaustionThreshold: 0.95,      // Block and compact at 95% context utilization
  },
});

// Manual compaction (experimental)
const result = await session.rpc.compaction.compact();
console.log(`Removed ${result.tokensRemoved} tokens, ${result.messagesRemoved} messages`);

メモ

しきい値は、絶対トークン数ではなく、コンテキスト使用率の比率 (0.0 から 1.0) です。

プランの管理

プログラムによるセッション 計画の読み取りと書き込み:

TypeScript
// Read the current plan
const plan = await session.rpc.plan.read();
if (plan.exists) {
  console.log(plan.content);
}

// Update the plan
await session.rpc.plan.update({ content: "# My Plan\n- Step 1\n- Step 2" });

// Delete the plan
await session.rpc.plan.delete();

メッセージ制御

中止せずに、現在の LLM ターンにメッセージを挿入します。

TypeScript
// Steer the agent mid-turn
await session.send({ prompt: "Focus on error handling first", mode: "immediate" });

// Default: enqueue for next turn
await session.send({ prompt: "Next, add tests" });

プロトコルの制限事項

SDK は、CLI の JSON-RPC プロトコルを介して公開されている機能にのみアクセスできます。 使用できない CLI 機能が必要な場合:

  • 代替手段を確認します。 多くの機能には、SDK に相当するものがあります (上記 の回避策を 参照)。
  • CLI を直接使用します。 1 回限りの操作の場合は、CLI を呼び出します。
  • 機能を要求します。 プロトコルのサポートを要求するには、 github/copilot-sdk リポジトリで問題を開きます。

バージョン互換性

SDK プロトコルの範囲CLI プロトコルのバージョン互換性
v2-v3v3完全なサポート
v2-v3v2自動 v2 アダプターでサポート

SDK は起動時に CLI とプロトコル バージョンをネゴシエートします。 SDK では、プロトコル バージョン 2 から 3 がサポートされています。 v2 CLI サーバーに接続すると、SDK は tool.callpermission.request メッセージを v3 イベント モデルに自動的に適合させます。コードの変更は必要ありません。

実行時にバージョンを確認できます。

TypeScript
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);