Skip to main content
Skip to content

ストリーミング セッション イベント

Copilot エージェントが実行するすべてのアクション (思考、コードの記述、ツールの実行) は、サブスクライブできるセッション イベントとして出力されます。 このガイドは、SDK ソースを読み取らずに予想されるデータを正確に把握できるように、各イベントの種類のフィールド レベルのリファレンスです。

Overview

セッションでstreaming: trueが設定されると、SDK は、一時的なイベント (デルタ、進行状況の更新) をリアルタイムで、永続的なイベント (完全なメッセージ、ツールの結果) と共に出力します。 すべてのイベントは共通のエンベロープを共有し、その形状がイベント dataに依存するtypeペイロードを運びます。

図: 説明されたプロセスを示すシーケンス図。

概念Description
エフェメラル イベント過渡;はリアルタイムでストリーミングされますが、セッション ログには保持 されません 。 セッションの再開時に再生されません。
永続化されたイベントディスク上のセッション イベント ログに保存されます。 セッションの再開時に再生されます。
Delta イベント一時的なストリーミングデータチャンク(テキストまたは推論) 差分を蓄積して完全なコンテンツを構築します。
parentId チェーン各イベントの parentId は前のイベントを指し示し、ウォーク可能なリンクリストを形成します。

イベント エンベロープ

種類に関係なく、すべてのセッション イベントには次のフィールドが含まれます。

フィールドタイプDescription
id
string (UUID v4)一意のイベント識別子
timestamp
string (ISO 8601)イベントが作成されたとき
parentIdstring | nullチェーン内の前のイベントの ID。最初のイベントのnull
agentIdstring?サブエージェントから発生したイベントのサブエージェント インスタンス ID。ルート/メイン エージェントとセッション レベルのイベントには存在しません
ephemeralboolean?一時的なイベントの場合true。永続化されたイベントの場合は不在またはfalse
typestringイベント型識別子 (以下の表を参照)
dataobjectイベント固有のペイロード

イベントに登録する

コード言語 navigation

TypeScript
// All events
session.on((event) => {
    console.log(event.type, event.data);
});

// Specific event type — data is narrowed automatically
session.on("assistant.message_delta", (event) => {
    process.stdout.write(event.data.deltaContent);
});

ヒント

(Python/Go) これらの SDK では、個別のイベントごとのデータ型 (たとえば、AssistantMessageDeltaData) が使用されるため、各種類に関連するフィールドのみが存在します。

(.NET) .NET SDK では、イベントごとに個別の厳密に型指定されたデータ クラス (AssistantMessageDeltaData など) が使用されるため、各型に関連するフィールドのみが存在します。

(TypeScript) TypeScript SDK では判別共用体が使用されます。 event.typeで一致すると、 data ペイロードは自動的に正しい図形に絞り込まれます。

セッション開始前の購読

セッションは、作成または再開の呼び出しが返される前にイベントを生成できます。 エージェントは既に動作している可能性があります (特に、 continuePendingWorkを使用した再開時)、 session.idle などの一時的なイベントはセッション ログに書き込まれないため、 getMessages 後で復旧することはできません。 セッション ハンドルが存在した後にインストールされたサブスクリプションは、そのスタートアップ ウィンドウを見落とします。

ヒント

(Rust)Client::prepare_session``Client::prepare_resume_sessionは、プロトコル アクティビティが発生する前にセッションのイベント チャネルを所有するPreparedSessionを返します。 最初にサブスクライブしてから、 start()を呼び出します。

use github_copilot_sdk::{Client, SessionConfig};

async fn create_without_missing_startup_events(
    client: &Client,
) -> Result<(), github_copilot_sdk::Error> {
    let prepared = client.prepare_session(
        SessionConfig::default().with_event_buffer_capacity(2048),
    )?;

    // Installed before any wire activity: nothing is dropped for lack of a receiver.
    let mut events = prepared.subscribe();
    tokio::spawn(async move {
        while let Ok(event) = events.recv().await {
            println!("{}", event.event_type);
        }
    });

    let session = prepared.start().await?;
    let _ = session;
    Ok(())
}

prepare_* は同期的で不活性です。バッファー容量を検証し、ローカル チャネルを割り当て、それ以外は何もしません。 セッションは登録されておらず、 start() が最初にポーリングされるまで CLI には何も到達しません。 一度も開始されなかった準備済みセッションを破棄しても、状態を一切残さず、そのサブスクリプションは閉じられます。start() フューチャーを破棄すると、進行中の起動処理が取り消され、セッションの登録が解除されるため、同じセッション ID を使用した再試行は成功します。 クリーンアップの対象は、中断された起動処理が所有していた当該登録に厳密に限定されているため、すでに同じセッション ID を引き継いでいる再試行を排除することはできません。

スタートアップ バッファリングは、次の場合に計画する価値があります。

  • イベント バッファーは有限であり、 event_buffer_capacity がオーバーライドしない限り 512 イベントです。 0 の容量は、クリップされるのではなく、無効な設定エラーとして拒否されます。
  • 低速サブスクライバーは、スキップされたイベントの数を報告する Lagged エラーを確認します。 セッションのイベント ループにバックプレッシャを適用することはありません。
  • 大規模なスタートアップ バーストの無損失ビューを必要とするコンシューマーは、それをカバーする容量を構成するか、 start()と同時にサブスクリプションをドレインする必要があります。

メモ

サーバーがセッション ID を割り当てるクラウド セッションの場合、SDK は作成応答が到着し、ID がわかるまで通知をルーティングできません。 そのポイントの前に生成されたイベントは、どのセッションにもルーティングできません。 保証の範囲はより限定的です。ルーティングされたイベントは、インストール済みのレシーバーが存在しないことを理由に破棄されることはありません。 構成に session_id をピン留めして、最初のバイトからルーティングと完全な応答前カバレッジを取得します。

親エージェントの応答のみをレンダリングする

サブエージェント イベントは親セッション ストリームを共有し、エンベロープ レベルの agentIdを含めます。 ルート/メイン エージェント イベントとセッション レベルのイベントでは agentIdが省略されるため、メイン チャット レンダラーは、 agentId が設定されているアシスタント イベントを無視し、代わりにそれらのイベントをトレースまたは進行状況 UI にルーティングできます。

コード言語 navigation

TypeScript
import type { CopilotSession } from "@github/copilot-sdk";

export function subscribeParentResponse(session: CopilotSession): void {
    session.on("assistant.message_delta", (event) => {
        if (!event.agentId) {
            process.stdout.write(event.data.deltaContent);
        }
    });
}

アシスタント イベント

これらのイベントは、ターン スタートからストリーミング チャンク、最後のメッセージまで、エージェントの応答ライフサイクルを追跡します。

assistant.turn_start

エージェントがターンの処理を開始したときに出力されます。

データ フィールドタイプ必須Description
turnIdstring✅ターン識別子 (通常は、文字列化されたターン番号)
interactionIdstringテレメトリ相関用の CAPI インタラクション ID

assistant.intent

儚い。 エージェントが現在行っていることの簡単な説明。動作に応じて更新されます。

データ フィールドタイプ必須Description
intentstring✅人間が判読できる意図 (例: "コードベースの探索")

assistant.reasoning

モデルから拡張思考ブロックを完成させます。 推論が完了した後に出力されます。

データ フィールドタイプ必須Description
reasoningIdstring✅この推論ブロックの一意識別子
contentstring✅完全な拡張思考テキスト

assistant.reasoning_delta

儚い。 リアルタイムでストリーミングされる、モデルの拡張思考の増分チャンク。

データ フィールドタイプ必須Description
reasoningIdstring✅対応する assistant.reasoning イベントと一致します
deltaContentstring✅推論コンテンツに追加するテキストの一部

assistant.message

この LLM 呼び出しに対するアシスタントの完全な応答。 ツール呼び出し要求を含めることができます。

データ フィールドタイプ必須Description
messageIdstring✅このメッセージのユニーク識別子
contentstring✅アシスタントのテキスト応答
toolRequestsToolRequest[]アシスタントが行いたいと思うツール呼び出し (下記参照)
reasoningOpaquestring暗号化された拡張思考(アントロピックモデル)、セッションにバインドされた
reasoningTextstring拡張思考から読み取り可能な推論テキスト
encryptedContentstring暗号化された推論コンテンツ (OpenAI モデル);session-bound
phasestring生成フェーズ (例: "thinking" と "response")
outputTokensnumberAPI 応答からの実際の出力トークン数
interactionIdstringテレメトリ用の CAPI インタラクション ID
parentToolCallIdstringDeprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する

** ToolRequest フィールド:**

フィールドタイプ必須Description
toolCallIdstring✅このツール呼び出しの一意の ID
namestring✅ツール名 (例: "bash"、 "edit"、 "grep")
argumentsobjectツールの解析された引数
type"function" | "custom"呼び出しの種類。存在しない場合は"function"が既定値となります。

assistant.message_delta

儚い。 リアルタイムでストリーミングされる、アシスタントのテキスト応答の増分チャンク。

データ フィールドタイプ必須Description
messageIdstring✅対応する assistant.message イベントと一致します
deltaContentstring✅メッセージに追加するテキスト チャンク
parentToolCallIdstringDeprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する

assistant.turn_end

エージェントがターンを完了したときに生成されます (すべてのツールの実行が完了し、最終的な応答が配信されます)。

データ フィールドタイプ必須Description
turnIdstring✅対応する assistant.turn_start イベントと一致します

assistant.usage

儚い。 個々の API 呼び出しのトークンの使用状況とコストに関する情報。

データ フィールドタイプ必須Description
modelstring✅モデル識別子 (例: "gpt-5.4")
inputTokensnumber使用された入力トークン
outputTokensnumber生成された出力トークン
reasoningTokensnumber推論/考え方のチェーンに使用される出力トークン ( outputTokensのサブセット)
cacheReadTokensnumberプロンプト キャッシュから読み取られたトークン
cacheWriteTokensnumberプロンプト キャッシュに書き込まれたトークン
cacheExpiresAtstringこのモデル呼び出しのプロンプトキャッシュが期限切れとなる日時の ISO 8601 タイムスタンプ
contentFilterTriggeredboolean応答がブロックされたか、コンテンツ フィルターによって切り捨てられたか (finish_reason === 'content_filter')
finishReasonstringモデルの終了理由 (例: "stop"、 "length"、 "tool_calls"、 "content_filter")
costnumber請求のためのモデル乗算コスト
durationnumberAPI 呼び出し時間 (ミリ秒単位)
timeToFirstTokenMsnumber要求ディスパッチから最初に受信したトークンまでの時間 (ストリーミング待機時間)
interTokenLatencyMsnumber連続するトークン間の平均待機時間 (ストリーミング スループット)
reasoningEffortstringこの呼び出しに使用される推論作業レベル (例: "low"、 "medium"、 "high")
initiatorstringこの呼び出しをトリガーした内容 (例: "sub-agent")、ユーザーが開始した場合は存在しない
apiCallIdstringプロバイダーからの完了 ID (例: chatcmpl-abc123)
serviceRequestIdstringCAPI ログの関連付け用の Copilot サービス リクエスト ID (x-copilot-service-request-id)
apiEndpoint"/chat/completions" | "/v1/messages" | "/responses" | "ws:/responses"
モデル呼び出しに使用される API エンドポイント。は、可観測性とコストの属性に役立ちます。
ws:/responses は、応答 API の Websocket バリアントです
providerCallIdstringGitHub要求トレース ID (x-github-request-id)
parentToolCallIdstringDeprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する
quotaSnapshotsRecord<string, QuotaSnapshot>クォータ識別子でキー付けされたクォータごとのリソース使用量
copilotUsageCopilotUsageAPI からの明細化されたトークン コストの内訳

assistant.streaming_delta

儚い。 低レベルのネットワーク進行状況インジケーター - ストリーミング API 応答から受信した合計バイト数。

データ フィールドタイプ必須Description
totalResponseSizeBytesnumber✅これまでに受信した累積バイト数

ツールの実行イベント

これらのイベントは、ツール呼び出しを要求するモデルから実行から完了までの、各ツール呼び出しの完全なライフサイクルを追跡します。

tool.execution_start

ツールの実行が開始されたときに出力されます。

データ フィールドタイプ必須Description
toolCallIdstring✅この呼び出しツールの一意の識別子
toolNamestring✅ツールの名前 (例: "bash"、 "edit"、 "grep")
argumentsobjectツールに渡される解析された引数
mcpServerNamestringMCP サーバー名 (ツールが MCP サーバーによって提供される場合)
mcpToolNamestringMCP サーバー上の元のツール名
parentToolCallIdstringDeprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する

tool.execution_partial_result

Deprecated. ライブターミナル出力には tool.shell_output を使用します。 このエフェメラル イベントは、移行中は置換先と並行して引き続き発行されます。同じ出力を 2 回表示しないように、1 つの表現のみをサブスクライブします。

データ フィールドタイプ必須Description
toolCallIdstring✅対応するtool.execution_startに一致します
partialOutputstring✅stdout と stderr がマージされた有界累積置換スナップショット。追加専用チャンクではない

tool.shell_output

儚い。 接続されたターミナル コマンドまたはユーザーが要求したターミナル コマンドからの追記専用の出力。 各イベントには、モデルの最終的なツール結果の書式設定に使用される区切り記号やマーカーを使用せずに、新しく観察されたシークレット フィルター処理されたテキストが含まれます。

データ フィールドタイプ必須Description
toolCallIdstring✅元のツール呼び出しを識別します。
textstring✅置換スナップショットではなく、追加する新しいテキスト
stream"stdout" | "stderr" | "terminal"
出力ソース。省略とは "stdout" を意味します。
"terminal" は、本質的にマージされた PTY 出力を識別します。その stdout/stderr の出力元は特定できません
sequencenumber✅0 から始まり、このツール呼び出しのすべてのストリームで、実際に観測された公開順に従って増加します

streamとtextごとにtoolCallIdを個別に蓄積するか、統合表示用にチャンクを順番どおりに結合します。 シーケンス番号は、重複と欠落したチャンクを識別します。独立したオペレーティング システムの書き込み間の正確な順序は示しません。 後から購読したサブスクライバーは、0 より大きい最初のシーケンスを受信できます。

これらのイベントはライブ専用です。再開しても永続化または再生されません。 最終的な tool.execution_complete 結果、モデルに対する書式設定、分離されたコマンドのキャプチャは変更されません。 テキストにはターミナル コントロール シーケンスを含めることができます。レンダラーは、通常のターミナル テキスト処理を適用する必要があります。

接続されたターミナル コマンドは、非同期で実行される場合や initial_wait を過ぎても続行する場合、tool.execution_complete の後も実行を続けることができます。 続行中に受信した出力は、元の toolCallId を使用し、ゼロから再開するのではなく、同じ sequence を続行します。 アクティブな呼び出しのみを表示するコンシューマーは、完了した呼び出し状態を再作成するのではなく、完了後に受信したチャンクを無視する必要があります。

シークレットのフィルタリングは、デコードされた各チャンクに対して適用されます。 ランタイムは人為的に行を分割しませんが、オペレーティング システムの読み取りにより、行またはシークレットが複数のチャンクにまたがって分割されることがあります。クロスチャンク シークレット再構築は提供されていません。

tool.execution_progress

儚い。 実行中のツール (MCP サーバーの進行状況通知など) から人間が判読できる進行状況の状態。

データ フィールドタイプ必須Description
toolCallIdstring✅対応するtool.execution_startに一致します
progressMessagestring✅進捗状況メッセージ

tool.execution_complete

ツールの実行が正常に終了したとき、またはエラーが発生したときに生成されます。

データ フィールドタイプ必須Description
toolCallIdstring✅対応するtool.execution_startに一致します
successboolean✅実行が成功したかどうか
modelstringこのツール呼び出しを生成したモデル
interactionIdstringCAPI インタラクション ID
isUserRequestedboolean
true ユーザーがこのツール呼び出しを明示的に要求したとき
resultResult成功時と、失敗時にツールがエラーとともにコンテンツを返した場合に表示されます (以下を参照)
error{ message, code? }エラー発生時に含まれる
toolTelemetryobjectツール固有のテレメトリ (CodeQL チェック数など)
parentToolCallIdstringDeprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する

** Result フィールド:**

フィールドタイプ必須Description
contentstring✅LLM に送信される簡潔な結果 (トークン効率のために切り捨てられる可能性があります)
detailedContentstring表示用の完全な結果。差分などの完全なコンテンツを保持する
contentsContentBlock[]構造化コンテンツ ブロック (テキスト、ターミナル、イメージ、オーディオ、リソース)

tool.user_requested

ユーザーが明示的にツールの呼び出しを要求したときに生成されます (呼び出しを選択したモデルではなく)。

データ フィールドタイプ必須Description
toolCallIdstring✅この呼び出しツールの一意の識別子
toolNamestring✅ユーザーが呼び出すツールの名前
argumentsobject呼び出しの引数

セッション ライフサイクル イベント

session.idle

儚い。 エージェントはすべての処理を完了し、次のメッセージの準備が整いました。 これはターンが完全に完了したことを示すシグナルです。

データ フィールドタイプ必須Description
abortedboolean前のターンが中止シグナルによって取り消された場合は True

session.error

セッション処理中にエラーが発生しました。

データ フィールドタイプ必須Description
errorTypestring✅エラー カテゴリ (例: "authentication"、 "quota"、 "rate_limit")
messagestring✅人間が読みやすいエラーメッセージ
stackstringエラースタックトレース
statusCodenumberアップストリーム要求からの HTTP 状態コード
providerCallIdstringサーバー側ログの関連付け用 GitHub リクエスト追跡 ID

session.compaction_start

コンテキスト ウィンドウの圧縮が開始されました。 データ ペイロードが空 ({}) です。

session.compaction_complete

コンテキスト ウィンドウの圧縮が完了しました。

データ フィールドタイプ必須Description
successboolean✅圧縮に成功したかどうか
errorstring圧縮に失敗した場合のエラー メッセージ
preCompactionTokensnumber圧縮前のトークン
postCompactionTokensnumber圧縮後のトークン
preCompactionMessagesLengthnumber圧縮前のメッセージ数
messagesRemovednumber削除されたメッセージ
tokensRemovednumberトークンが削除されました
summaryContentstringLLM によって生成されたコンパクトな履歴の概要
checkpointNumbernumber復旧用に作成されたチェックポイント スナップショット番号
checkpointPathstringチェックポイントが格納されたファイル パス
compactionTokensUsed{ input, output, cachedInput }圧縮 LLM 呼び出しのトークンの使用
requestIdstringGitHub のコンパクション呼び出し用リクエストトレーシング ID

session.title_changed

儚い。 セッションの自動生成されたタイトルが更新されました。

データ フィールドタイプ必須Description
titlestring✅新しいセッション タイトル

session.context_changed

セッションの作業ディレクトリまたはリポジトリ コンテキストが変更されました。

データ フィールドタイプ必須Description
cwdstring✅現在の作業ディレクトリ
gitRootstringGit リポジトリのルート
repositorystring
"owner/name"形式のリポジトリ
branchstring現在の Git ブランチ

session.usage_info

儚い。 コンテキスト ウィンドウ使用率スナップショット。

データ フィールドタイプ必須Description
tokenLimitnumber✅モデルのコンテキスト ウィンドウの最大トークン数
currentTokensnumber✅コンテキスト ウィンドウ内の現在のトークン
messagesLengthnumber✅会話の現在のメッセージ数

session.session_limits_changed

現在の会計期間のセッション制限が変更されました。 null sessionLimits値は、制限がアクティブでないことを意味します。

データ フィールドタイプ必須Description
sessionLimitsSessionLimitsConfig | null✅現在のセッションの制限、または制限が有効でない場合は null
sessionLimits.maxAiCreditsnumberセッションの現在の会計期間で許可される AI クレジットの最大数

session.usage_checkpoint

セッションの再開時にアカウンティングを再構築するために使用される永続集計使用チェックポイント。

データ フィールドタイプ必須Description
totalNanoAiunumber✅チェックポイント時点におけるセッション全体の nano-AI ユニットの累積コスト
totalPremiumRequestsnumberチェックポイント時に使用された Premium API 要求の合計数

session.task_complete

エージェントは、割り当てられたタスクを完了しました。

データ フィールドタイプ必須Description
summarystring完了したタスクの概要

session.shutdown

セッションが終了しました。

データ フィールドタイプ必須Description
shutdownType"routine" | "error"✅通常のシャットダウンまたはクラッシュ
errorReasonstring
shutdownType が "error" である場合のエラー説明
totalPremiumRequestsnumber✅使用された Premium API 要求の合計数
totalApiDurationMsnumber✅API 呼び出しの累積時間 (ミリ秒単位)
sessionStartTimenumber✅セッションの開始時の Unix タイムスタンプ (ミリ秒)
codeChanges{ linesAdded, linesRemoved, filesModified }✅コード変更メトリックの集計
modelMetricsRecord<string, ModelMetric>✅モデルごとの使用状況の内訳
currentModelstringシャットダウン時に選択されたモデル

アクセス許可とユーザー入力イベント

これらのイベントは、エージェントが続行する前にユーザーからの承認または入力を必要とする場合に生成されます。

permission.requested

エージェントには、アクション (コマンドの実行、ファイルの書き込みなど) を実行するためのアクセス許可が必要です。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToPermission()
permissionRequestPermissionRequest✅要求されているアクセス許可の詳細

permissionRequestは、kindの判別共用体です。

kindキー フィールドDescription
"shell"
fullCommandText、intention、commands[]、possiblePaths[]シェル コマンドを実行する
"write"
fileName、diff、intention、newFileContents?、fileEdits?ファイルの書き込み/変更
"read"
path、intentionファイルまたはディレクトリの読み取り
"mcp"
serverName、toolName、toolTitle、args?、readOnlyMCP ツールを呼び出す
"url"
url、intentionURL を取得する
"memory"
subject、fact、citationsメモリを格納する
"custom-tool"
toolName、toolDescription、args?カスタム ツールを呼び出す

すべての kind バリアントには、要求をトリガーしたツール呼び出しにリンクバックするオプションの toolCallId も含まれています。

書き込み要求は、promptRequest と fileEdits の両方に permissionRequest を含めることもできます。 各エントリにはオプションの before と after スナップショットが含まれており、それぞれにセッション ファイルシステム名前空間内の絶対pathと完全なUTF-8 contentがあります。 before がないことは作成を意味し、after がないことは削除を意味します。 空の content 文字列は、使用できないプレビューではなく、空のファイルを表します。 移動は、その両側に異なるパスを持つことができます。 移動によって既存の宛先が上書きされると、別のエントリでソースの削除と宛先の置換が記述されます。

これらのスナップショットは、後でライブ ファイルシステムを読み取るのではなく、計画された操作を記述します。 サンドボックスで保護されたファイルを読み取る前に行われた要求、UTF-8 以外のコンテンツ、名前付きパイプなどの読み取り不可能または通常ファイルではない移動先など、完全なテキスト プレビューを提供できない場合、ランタイムは fileEdits を省略します。 空の legacy newFileContents 値を削除と見なさないでください。 プレビューを使用しないコンシューマーは、既存のフィールドと承認の選択肢を引き続き使用できます。

permission.completed

アクセス許可要求が解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するpermission.requestedに一致します
result.kindstring✅次のいずれか: "approved"、 "denied-by-rules"、 "denied-interactively-by-user"、 "denied-no-approval-rule-and-could-not-request-from-user"、 "denied-by-content-exclusion-policy"

user_input.requested

儚い。 エージェントがユーザーに質問しています。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToUserInput()
questionstring✅ユーザーに提示する質問
choicesstring[]ユーザーの定義済みの選択肢
allowFreeformboolean自由形式のテキスト入力が許可されるかどうか

user_input.completed

儚い。 ユーザー入力要求が解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するuser_input.requestedに一致します

elicitation.requested

儚い。 エージェントには、ユーザーからの構造化されたフォーム入力 (MCP 引き出しプロトコル) が必要です。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToElicitation()
messagestring✅必要な情報の説明
mode"form"現在、引き出しモードは"form"のみです。
requestedSchema{ type: "object", properties, required? }✅フォーム フィールドを記述する JSON スキーマ

elicitation.completed

儚い。 引き出し要請が解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するelicitation.requestedに一致します

サブエージェントとスキル イベント

subagent.started

カスタム エージェントがサブエージェントとして呼び出されました。

データ フィールドタイプ必須Description
toolCallIdstring✅このサブエージェントを生成した親ツール呼び出し
agentNamestring✅サブエージェントの内部名
agentDisplayNamestring✅人間が判読できる表示名
agentDescriptionstring✅サブエージェントの機能の説明
modelstring開始時に判明している場合に、サブエージェントが使用するモデル

subagent.completed

サブエージェントが正常に完了しました。

データ フィールドタイプ必須Description
toolCallIdstring✅対応するsubagent.startedに一致します
agentNamestring✅内部名
agentDisplayNamestring✅表示名
modelstringサブエージェントで使用されるモデル
durationMsnumberウォール クロックの実行時間 (ミリ秒)
totalTokensnumber使用された入力トークンと出力トークンの合計
totalToolCallsnumber作成されたツール呼び出しの合計数

subagent.failed

サブエージェントでエラーが発生しました。

データ フィールドタイプ必須Description
toolCallIdstring✅対応するsubagent.startedに一致します
agentNamestring✅内部名
agentDisplayNamestring✅表示名
errorstring✅エラー メッセージ
modelstringサブエージェントに対して選択されたモデル (既知の場合)
durationMsnumberウォール クロックの実行時間 (ミリ秒)
totalTokensnumber失敗前に使用された入力トークンと出力トークンの合計
totalToolCallsnumber失敗前に行われたツール呼び出しの合計数

subagent.selected

現在の要求を処理するために、カスタム エージェントが選択 (推論) されました。

データ フィールドタイプ必須Description
agentNamestring✅選択したエージェントの内部名
agentDisplayNamestring✅表示名
toolsstring[] | null✅このエージェントで使用可能なツール名。すべてのツールにはnull

subagent.deselected

カスタム エージェントの選択が解除され、既定のエージェントに戻りました。 データ ペイロードが空 ({}) です。

skill.invoked

現在の会話に対してスキルがアクティブ化されました。

データ フィールドタイプ必須Description
namestring✅スキル名
pathstring✅SKILL.md 定義へのファイル パス
contentstring✅会話にすべてのスキルコンテンツが挿入されました。
allowedToolsstring[]スキルの allowed-tools frontmatter にリストされているツール。 SDK によって自動的に承認されることはありません。アクセス許可ハンドラーが引き続き決定します。 Copilot CLI は、スキルがアクティブな間、それらを自動的に承認します。
pluginNamestringスキルの元のプラグイン
pluginVersionstringプラグインのバージョン

その他のイベント

abort

現在のターンは中止されました。

データ フィールドタイプ必須Description
reasonstring✅ターンが中止された理由 (例: "user initiated")

user.message

ユーザーがメッセージを送信しました。 セッション タイムライン用に記録されます。

データ フィールドタイプ必須Description
contentstring✅ユーザーのメッセージ テキスト
transformedContentstring前処理後に変換されたバージョン
attachmentsAttachment[]ファイル、ディレクトリ、選択項目、blob、または GitHub 参照の添付ファイル
sourcestringメッセージ ソース識別子
agentModestringエージェント モード: "interactive"、 "plan"、 "autopilot"、または "shell"
interactionIdstringCAPI インタラクション ID

system.message

システムまたは開発者のプロンプトが会話に挿入されました。

データ フィールドタイプ必須Description
contentstring✅プロンプトの内容
role"system" | "developer"✅メッセージ 役割
namestringソース識別子
metadata{ promptVersion?, variables? }プロンプト テンプレートのメタデータ

external_tool.requested

エージェントは、外部ツール (SDK コンシューマーによって提供されるツール) を呼び出したいと考えています。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToExternalTool()
sessionIdstring✅この要求が属するセッション
toolCallIdstring✅この呼び出しのツール呼び出し ID
toolNamestring✅外部ツールの名前
argumentsobjectツールの引数

external_tool.completed

外部ツール要求が解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するexternal_tool.requestedに一致します

exit_plan_mode.requested

儚い。 エージェントによってプランが作成され、プラン モードを終了する必要があります。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToExitPlanMode()
summarystring✅プランの概要
planContentstring✅プランファイルの全内容
actionsstring[]✅使用可能なユーザー アクション (承認、編集、拒否など)
recommendedActionstring✅推奨されるアクション

exit_plan_mode.completed

儚い。 終了プラン モード要求が解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するexit_plan_mode.requestedに一致します

command.queued

儚い。 スラッシュ コマンドがキューに登録され、実行されました。

データ フィールドタイプ必須Description
requestIdstring✅これを使用して、次の方法で応答します。 session.respondToQueuedCommand()
commandstring✅スラッシュ コマンド テキスト (例: /help、 /clear)

command.completed

儚い。 キューに登録されたコマンドが解決されました。

データ フィールドタイプ必須Description
requestIdstring✅対応するcommand.queuedに一致します

session_limits_exhausted.requested

儚い。 現在のセッション予算が使い果たされ、ランタイムは続行する前にユーザーの決定を必要とします。

データ フィールドタイプ必須Description
requestIdstring✅保留中の上限を超える要求に応答するときにこの ID を使用します
maxAiCreditsnumber✅現在のアカウンティング ウィンドウ用に構成された最大 AI クレジット数
usedAiCreditsnumber✅現在の会計ウィンドウで既に使用されている AI クレジット

session_limits_exhausted.completed

儚い。 保留中の上限超過リクエストが解消されました。

データ フィールドタイプ必須Description
requestIdstring✅対応する session_limits_exhausted.requested イベントと一致します
response.action"add" | "set" | "unset" | "cancel"✅上限到達時のリクエストに対して選択されたアクション
response.additionalAiCreditsnumber
response.action が "add" の場合に現在の最大値に加算するAIクレジット
response.maxAiCreditsnumber
response.action が "set" の場合の AI クレジットの新しい絶対最大値

クイックリファレンス: エージェンティックターンフロー

一般的なエージェント ターンでは、次の順序でイベントが出力されます。

assistant.turn_start          → Turn begins
├── assistant.intent          → What the agent plans to do (ephemeral)
├── assistant.reasoning_delta → Streaming thinking chunks (ephemeral, repeated)
├── assistant.reasoning       → Complete thinking block
├── assistant.message_delta   → Streaming response chunks (ephemeral, repeated)
├── assistant.message         → Complete response (may include toolRequests)
├── assistant.usage           → Token usage for this API call (ephemeral)
│
├── [If tools were requested:]
│   ├── permission.requested  → Needs user approval
│   ├── permission.completed  → Approval result
│   ├── tool.execution_start  → Tool begins
│   ├── tool.shell_output              → Stream-tagged terminal output (ephemeral, repeated)
│   ├── tool.execution_progress        → Progress updates (ephemeral, repeated)
│   ├── tool.execution_complete        → Tool finished
│   │
│   └── [Agent loops: more reasoning → message → tool calls...]
│
assistant.turn_end            → Turn complete
session.idle                  → Ready for next message (ephemeral)

すべてのイベントの種類の概要

この表に、主要な data ペイロード フィールドを示します。 共通のエンベロープ フィールドについては、上記で説明しています。

イベントの種類エフェメラルCategoryキー データ フィールド
assistant.turn_start
助手
turnId、interactionId?
assistant.intent✅助手intent
assistant.reasoning
助手
reasoningId、content
assistant.reasoning_delta✅助手
reasoningId、deltaContent
assistant.streaming_delta✅助手totalResponseSizeBytes
assistant.message
助手
messageId、content、toolRequests?、outputTokens?、phase?
assistant.message_delta✅助手
messageId、deltaContent
assistant.turn_end助手turnId
assistant.usage✅助手
model、 apiEndpoint?、 inputTokens?、 outputTokens?、 cost?、 duration?
tool.user_requested
ツール
toolCallId、toolName、arguments?
tool.execution_start
ツール
toolCallId、toolName、arguments?、mcpServerName?
tool.execution_partial_result✅ツール
toolCallId、partialOutput
tool.shell_output✅ツール
toolCallId、text、stream?、sequence
tool.execution_progress✅ツール
toolCallId、progressMessage
tool.execution_complete
ツール
toolCallId、success、result?、error?
session.idle✅Sessionaborted?
session.error
Session
errorType、message、statusCode?
session.compaction_start
Session
(空)
session.compaction_complete
Session
success、preCompactionTokens?、summaryContent?
session.title_changed✅Sessiontitle
session.context_changed
Session
cwd、gitRoot?、repository?、branch?
session.usage_info✅Session
tokenLimit、currentTokens、messagesLength
session.session_limits_changedSessionsessionLimits
session.usage_checkpoint
Session
totalNanoAiu、totalPremiumRequests?
session.task_completeSessionsummary?
session.shutdown
Session
shutdownType、codeChanges、modelMetrics
permission.requested
許可
requestId、permissionRequest
permission.completed
許可
requestId、result.kind
user_input.requested✅ユーザー入力
requestId、question、choices?
user_input.completed✅ユーザー入力requestId
elicitation.requested✅ユーザー入力
requestId、message、requestedSchema
elicitation.completed✅ユーザー入力requestId
subagent.started
サブエージェント
toolCallId、agentName、agentDisplayName、model?
subagent.completed
サブエージェント
toolCallId、agentName、agentDisplayName、model?、durationMs?、totalTokens?、totalToolCalls?
subagent.failed
サブエージェント
toolCallId、agentName、error、model?、durationMs?、totalTokens?、totalToolCalls?
subagent.selected
サブエージェント
agentName、agentDisplayName、tools
subagent.deselected
サブエージェント
(空)
skill.invoked
Skill
name、path、content、allowedTools?
abortコントロールreason
user.message
ユーザー
content、attachments?、agentMode?
system.message
System
content、role
external_tool.requested
外部ツール
requestId、toolName、arguments?
external_tool.completed外部ツールrequestId
command.queued✅命令
requestId、command
command.completed✅命令requestId
session_limits_exhausted.requested✅Session
requestId、maxAiCredits、usedAiCredits
session_limits_exhausted.completed✅Session
requestId、response.action
exit_plan_mode.requested✅プラン モード
requestId、summary、planContent、actions
exit_plan_mode.completed✅プラン モードrequestId