Skip to main content

RPC(Remote Procedure Call)

公式SDKでは最近の新機能はapi.schema.jsonを元にした自動コード生成で対応しています。Laravel版では生成後の他言語版を参考に同じように実装しています。

ServerRpc

Clientに紐づくRPCクラス。

接続・モデル・ツール・アカウント

ping()とconnect()で接続を確認・開始し、registerExtensionLaunchProvider()で拡張機能の起動プロバイダーを登録します。モデル一覧・価格単位・組み込みカタログはmodels()、利用可能なツール一覧はtools()から取得できます。account()ではクォータ、認証状態、ログインユーザーの一覧、ログイン・ログアウトを扱い、accounts()ではMicrosoft Entra IDのトークン取得を行います。

MCP・コネクター

mcp()はMCP設定の一覧・追加・更新・削除、有効化、検出、レジストリ検索、インストール計画と適用を提供します。connectors()ではコネクター機能とアカウント、カタログを確認できます。サーバー側でのコネクター操作はアカウント単位の一覧取得・更新が中心です。

Skills・Plugins・Agents・Instructions・Extensions

各グループから探索や利用可能なパスの取得、設定変更、再読み込みを行えます。commands()は組み込みコマンド一覧、hooks()はセッション開始前のフック探索を提供します。SkillsとPluginsは有効化・無効化やインストール管理に対応し、Agentsは組み込みエージェント情報も取得できます。Extensionsは永続化された拡張機能を探索・有効化・無効化します。

カタログとインストール

catalog()で候補検索・選択・フィード取得を行い、Skills・Plugins・MCPの各APIでインストール計画の確認、適用、状態照会やキャンセルを行います。計画と適用は別操作です。実際のインストール例は後半の各項目を参照してください。

セッション・ホスト・実行環境

sessions()は永続化済みセッションの検索、イベント読み取り、サイズ確認、削除・整理、forkを扱います。Workspaceの作成・読み込みやリモート制御も利用できます。host()はホストの起動、セッション公開・一覧・公開解除、破棄を行い、runtime()はランタイムのライフサイクルを扱います。

Git・環境・サンドボックス・ポリシー

git()からブランチや作業ディレクトリ、Git remoteの情報を取得し、gitHubRepository()とgitHubOwners()からGitHubリポジトリや所有者を探索できます。environments()はMission Control環境、sandbox()とsandboxProxyCa()はサンドボックス対応状況やProxy CA、contentExclusion()は除外ポリシーの検証、managedSettings()とuserSettings()は設定を扱います。

ローカルモデル・HTTP推論・ファイルシステム

azureMl()はローカルモデルのカタログ・解決・ダウンロードと、その状態確認・キャンセル・削除を提供します。llmInference()はモデル層のHTTPリクエストをクライアント側へ中継する実験的APIです。sessionFs()はセッションのファイルシステム/SQLiteコールバックプロバイダーを登録します。

基本的な呼び出し例

元からSDKに含まれてた機能も自動コード生成版で再度追加されています。

機能別の使用例

以下に、上記の機能の代表的な呼び出し例をまとめています。

Agent Plugin catalog候補

catalog.search で agent-plugin-discovery を要求し、検索対象の kinds に plugin を指定すると Agent Plugin 候補を取得できます。標準形式 application/vnd.github.copilot-plugin 以外の application/vnd.anthropic.claude-plugin+json と application/agent-plugin+json を受け取るには、agent-plugin-discovery に加えて agent-plugin-formats を要求してください。 agent-plugin-confirmed-installation はインストールの可否とレビュー用プランを返す capability で、これも agent-plugin-discovery と併せて要求します。許可すると候補に installability が含まれ、値は installable、install-data-unavailable、feature-disabled、not-installable-kind のいずれかです。installPlan は installability が installable の場合にだけ含まれます。プランは確認用のデータであり、この catalog RPC がインストールを実行することはありません。 プランの sources は優先順に materialization、marketplace、repository の候補を含みます。Marketplace には名前とリポジトリ、直接の Repository にはリポジトリと任意のパスが記録されます。materializationだけのプランでは pluginName が省略され、components は空です。名前や実際に導入される内容は plugins.planInstall() が返すレビューで確認してください。 選択済み候補は plugins.planInstall() で副作用のない検証付きプランを作成できます。plugins.applyInstall() は利用者に明示的な確認を求め、許可された場合にプランを適用します。適用後のプラグインは無効状態で登録されます。 レビューの mcpServers は検証済みファイルが宣言するサーバー名、transport、リモートの場合のhostを示します。これは安全性の保証ではないため、利用者が内容を確認してから明示的な確認を行ってください。インストール済みプラグインの description はmanifest由来です。verifiedSource はGitHubリポジトリと固定commitを示し、commitに固定された直接インストールでのみ存在します。iconUrl は外部の未信頼コンテンツなので、取得時に認証情報やGitHub資格情報を送らないでください。資格情報そのものは拒否理由として返されません。 インストール結果の network-failure では、CatalogNetworkFailureReason、HTTP statusCode、任意の retryAfterSeconds と安全に表示できる message を確認できます。
Agent Finder の materialisation reference から計画する場合は catalog.planInstallFromReference() を使います。結果の outcome->kind は plugin-install-planned、skill-install-planned、refused のいずれかです。プラグインの計画は plugins.applyInstall() に渡し、スキルの計画は skills.applyInstall() に渡してください。

contentExclusion

セッション作成前に、コンテンツ除外ポリシーのJSONを検証できます。
policiesJson は未解析のJSON文字列のままCLIに渡されます。JSONの解析またはスキーマ検証に失敗した場合は、CLIからのRPCエラー(JsonRpcException)が発生します。 これはポリシー自体を検証するサーバースコープのRPCです。セッションの作業ディレクトリ内のパスを実際の除外ポリシーに照らして確認するには、セッションスコープの contentExclusion()->checkPaths() を使います。

managedSettings (experimental: 管理設定)

管理設定の読み取り、ポリシー解決、スキーマ取得、検証、合成プレビュー、キャッシュ破棄を行います。

Runtime・Host のライフサイクル(experimental)

host.unpublishSession() は、所有する稼働中のホストから application publication を撤回します。公開を撤回しても、元のセッション履歴、worktree、実行中の作業は削除・停止されません。すでに公開されていない場合は unpublished が false になり、application 以外の publication はエラーになります。
host.dispose() は hostId を指定してホストリスナーを破棄します。
SDKが起動したstdioランタイムでは、Client::stop() がセッションを切断した後、JSON-RPC接続とプロセスを閉じる前に runtime.shutdown を呼び出します。ランタイムのクリーンアップ完了を最大10秒待ち、失敗時はエラーを戻り値に含めたうえで残りの停止処理を続けます。cli_url など外部ランタイムへの接続では、共有ランタイムを終了しないようこのRPCを呼び出しません。

SessionRpc

Sessionに紐づくRPCクラス。 以前のSDKではできなかったプランモードの利用なども可能です。

モデル・モード・名前・プラン

model()で現在のモデル確認や切り替え、reasoning effort・Auto tier・許可モデルの設定を行えます。mode()はモード、name()はセッション名、plan()はプラン本文とSQLite todoの読み書きを扱います。

ワークスペース・インストラクション・LSP

workspaces()はファイルの一覧・読み取り・書き込み・移動・削除やディレクトリ操作を提供します。instructions()でインストラクションの取得・再読み込み・探索、lsp()で言語サーバー設定の初期化を行えます。

エージェント・Fleet・バックグラウンドタスク

agent()でエージェントの一覧・選択・再読み込み、fleet()でFleetを開始します。tasks()ではバックグラウンドエージェントやクライアント所有タスクの登録、進捗取得・更新、移行、メッセージ送信、キャンセル、削除を扱います。

MCP・Plugins・Extensions・Workflow

mcp()はサーバーの一覧・起動・停止・再読み込み、ツール・プロンプト・リソース、OAuth、sampling、動的ヘッダーの更新を扱います。plugins()とextensions()はセッション内の状態を管理し、customizations()はカスタマイズの再読み込みを行います。workflow()でワークフローを実行・照会し、diagnostics()とconnectors()で診断情報やコネクターを取得できます。

Tools・Permissions・Commands・UI

tools()とpermissions()はイベントで届いた保留中リクエストへの応答や設定を扱います。commands()はコマンド一覧・実行・イベント応答、ui()はユーザー入力・elicitation・プラン承認などの要求への応答を提供します。completions()は入力候補を取得します。

Accounts・認証・Providers

accounts()はenumerate()によるアカウント/プロバイダー/ログインアカウントの列挙、get()・set()、begin()・advance()・cancel()による対話型ログインを扱います。gitHubAuth()はセッションの認証状態と資格情報、provider()とproviders()はモデル接続先やプロバイダーアダプター、connectors()はセッションのコネクター接続を扱います。

履歴・キュー・ログ・使用量

history()は会話の圧縮・中断・引き継ぎ要約・切り詰め、queue()は保留項目の挿入・移動・編集・削除・即時送信を提供します。log()、eventLog()、usage()、quota()、limitPrediction()でログやイベント、使用量と上限情報を扱います。schedule()ではスケジュール済みプロンプトを確認・停止できます。

ライフサイクル・リモート・ホスト連携

sendMessages()は複数メッセージを1ターンで実行し、suspend()・shutdown()でセッションを停止します。interruptMainTurn()はメインターン、cancelAllBackgroundAgents()はバックグラウンドエージェントを個別に制御します。remote()とvisibility()はリモート公開・共有状態、sandbox()はセッションのサンドボックス、managedSettings()はセッションスコープの管理設定、contentExclusion()はパス判定、metadata()はクライアント所有メタデータ、canvas()はCanvas連携を扱います。

debug (experimental)

debug()->collectLogs()でセッションのイベントログ、プロセスログ、シェルログを .tgz アーカイブまたはディレクトリに収集できます。ログは既定で秘匿情報がリダクションされます。additionalEntriesでファイルやディレクトリを追加でき、redactionにはplain-text、events-jsonl、noneを指定できます。noneを指定するとリダクションされないため、追加する内容に注意してください。
DebugCollectLogsDestination::directory('/tmp/copilot-debug')を指定するとステージングディレクトリに出力できます。includeでは収集するログや参照パスを個別に指定でき、結果のentriesとskippedEntriesから収集内容を確認できます。宛先・追加エントリのパスはCLIサーバー側のパスです。stdioでCLIを起動する標準構成ではアプリと同じホストですが、TCPで別ホストのCLIサーバーに接続している場合、呼び出し側マシンではなくサーバー側のパスを指定してください。

contentExclusion (experimental)

セッションの作業ディレクトリ内にあるローカル絶対パスが、コンテンツ除外ポリシーの対象か確認できます。ファイルの内容を読み込んだり添付したりする前に呼び出してください。
checkPaths() は絶対パスのみを受け付け、パスはセッションの作業ディレクトリ内にある必要があります。checks は入力と同じ順序で返り、重複したパスもそのまま保持されます。サポートされないパス、ファイルシステム、またはポリシー評価が利用できない場合は available: false と空の checks が返ります。この場合、isExcluded() は常に true を返すため、すべてのパスを除外対象として扱ってください。available: true でも結果にないパスは安全側に倒して除外対象と判定します。

MCP Apps (experimental)

$session->rpc()->mcp()->apps()からMCP Apps用のRPCを呼び出せます。listTools()とcallTool()では、呼び出し元のMCPサーバー名originServerNameが必須です。callTool()の結果は自由形式のMCP結果として返されます。
readResource()はHTMLなどのリソースデータを返します。SDKはブラウザー描画やiframe操作を行わないため、取得した内容の描画は呼び出し側アプリケーションの責務です。

機能別の使用例

以下に、上記の機能の代表的な呼び出し例をまとめています。

remote (experimental: リモートセッションサポート)

詳細は Remote Sessions を参照してください。

sandbox (experimental: サンドボックス制御)

権限ハンドラでは、$request['sandboxPathGrant']がある場合に対象の保留中リクエストのrequestIdで呼び出します。このRPC自身が許可リクエストに応答するため、成功した場合は通常の応答を送らないようPermissionDecision::noResult()を返します。

metadata (experimental: クライアント所有メタデータ)

Session canvas

Canvas RPC は $session->rpc()->canvas() から呼び出します。list() は CanvasList の canvases、listOpen() は CanvasListOpenResult の openCanvases に一覧を返します。open() は OpenCanvasInstance、 action 呼び出しは CanvasActionInvokeResult を返します。close() の 戻り値はありません。
Canvas provider の reverse-RPC (canvas.open / canvas.close / canvas.action.invoke) は SessionConfig / ResumeSessionConfig の canvasHandler で処理します。Canvas の描画はホスト UI の責務です。

workflow

Copilot CLI 1.0.89 系で追加されたワークフロー、コネクター、診断などの実験的RPC APIも、SessionRpcから利用できます。これらの可変プロトコルpayloadはJSON互換の配列で渡し、レスポンスも配列として返します。各呼び出しには現在のsessionIdが自動で追加されます。
workflow()はCLIが提供する低レベルRPCを呼び出します。Node.js SDKのようにPHPクロージャーをワークフローとして登録・実行する高レベルAPIは、この同期では追加していません。これらの新しいRPCグループはCLIのバージョンに依存し、実験的であるため、対応するCLIでのみ利用してください。

SessionFS コールバック型

セッションスコープのファイルシステム操作のためのコールバック型(Request/Result)が定義されています。これらはCopilot CLIがクライアントにコールバックする際のリクエスト/レスポンスの型です。 SessionFsStatResult / SessionFsReaddirResult / SessionFsReaddirWithTypesResult は失敗時に使う任意の error(SessionFsError)を持ちます。

SessionFsハンドラー

ClientはsessionFs.readFile / readFileBytes / writeFile / writeFileBytes に加えて、appendFile、exists、stat、mkdir、readdir、readdirWithTypes、rm、rename、sqliteQuery、sqliteTransaction、sqliteExists の各リクエストをSessionのプロバイダーへ振り分けます。ファイル操作の失敗は ENOENT(ENOENTまたは errno 2)/ UNKNOWN のerrorとして返します。existsは例外時にfalse、statは失敗時にゼロ値+errorを返します。プロバイダーが対応していない操作はUNKNOWNエラー(SQLite系はJSON-RPCエラー)になります。sqliteQuery/sqliteExistsの例外はJSON-RPCエラー、sqliteTransactionの失敗は結果のerror(errorClass付き)として返します。 プロバイダー側のインターフェース(SessionFsFilesystemProvider、SessionFsSqliteCapableProvider、SessionFsSqliteProvider、SessionFsSqliteTransactionProvider)は、従来のSessionFsProvider(2メソッド)を壊さないよう別インターフェースとして追加されています。

SQLite コールバック型

SQLiteサポートを有効にするには、SessionFsSetProviderRequest の capabilities に SessionFsSetProviderCapabilities(sqlite: true) を渡します。
通常はこのRPCを直接呼ばず、ClientオプションsessionFs(またはconfig/copilot.phpのsession_fs)を指定するとClient::start()がsessionFs.setProviderを1回だけ送信します。セッションにはcreateSessionFsProviderが必要です(SessionConfigを参照)。 SessionFsSqliteQueryType enum(src/Enums/)はクエリ種別を表します:
  • Exec: DDL/複数ステートメント(結果なし)
  • Query: SELECT(行を返す)
  • Run: INSERT/UPDATE/DELETE(rowsAffected を返す)
これらの型クラスはsrc/Types/Rpc/に配置されています。

配列での引数指定

引数も返り値も専用のクラスを使っていますが引数は配列で指定することも可能です。

テスト

Copilot::fake()でのモックは使えないのでCopilot::expects('client')やCopilot::expects('start')でモックしてください。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年10月19日