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 オプションプログラムによる認証
接続
Pingclient.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要求の承認/拒否
ユーザー入力ハンドラーonUserInputRequestask_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/researchWeb 検索を使用した 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-toolsTUI コマンド
ディレクトリ管理
ディレクトリの追加
/add-dir--add-dirセッションで構成する
ディレクトリを一覧表示する/list-dirsTUI コマンド
ディレクトリの変更/cwdTUI コマンド
プラグイン/MCP 管理
プラグイン コマンド/plugin対話型管理
MCP サーバー管理/mcp対話型 UI
アカウント管理
ログイン フロー
/logincopilot auth loginOAuth デバイス フロー
ログアウト
/logoutcopilot auth logoutダイレクトCLI
ユーザー情報/userTUI コマンド
セッション操作
会話をクリアする/clearTUI のみ
平面図/planTUI のみ (代わりに SDK session.rpc.plan.* を使用)
セッション管理
/session/resume/renameTUI ワークフロー
フリート モード (対話型)/fleetTUI のみ (代わりに SDK session.rpc.fleet.start() を使用)
スキル管理
スキルを管理する/skills対話型 UI
タスク管理
バックグラウンド タスクを表示する/tasksTUI コマンド
使用状況と統計
トークンの使用法/usage使用状況イベントを登録する
コード レビュー
変更の確認/reviewTUI コマンド
委任
PR に委任する/delegateTUI ワークフロー
ターミナルのセットアップ
シェル統合/terminal-setupシェル固有
発達
試験段階の切り替え
/experimental--experimentalランタイム フラグ
カスタム命令コントロール--no-custom-instructionsCLI フラグ
セッションの診断/diagnoseTUI コマンド
手順の表示/管理/instructionsTUI コマンド
デバッグ ログの収集/collect-debug-logs診断ツール
ワークスペースのインデックスを再作成する/reindexTUI コマンド
IDE 統合/ideIDE 固有のワークフロー
非対話型モード
プロンプト モード
-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);