Skip to main content

Copilot SDK のストリーミング イベント

          Copilot SDKによって生成される参照セッション イベントと、各イベントに含まれるデータ フィールド。

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

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

メモ

          Copilot SDK は現在 テクニカル プレビューです。 機能と可用性は変更される場合があります。
          Copilot エージェントが実行するすべてのアクション (思考、コードの記述、ツールの実行) は、サブスクライブできる**セッション イベント**として生成されます。 この記事は、各イベントの種類に対するフィールド レベルの参照であるため、予想されるデータを正確に把握できます。

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

概念説明
          **エフェメラル イベント** | 過渡;はリアルタイムでストリーミングされますが、セッション ログには保持 **されません** 。 セッションの再開時に再生されません。 |

| 永続化されたイベント | ディスク上のセッション イベント ログに保存されます。 セッションの再開時に再生されます。 | | Delta イベント | 一時的なストリーミングデータチャンク(テキストまたは推論) 差分を蓄積して完全なコンテンツを構築します。 | | ** parentId チェーン** | 各イベントの parentId は前のイベントを指し示し、ウォーク可能なリンクリストを形成します。 |

イベント エンベロープ

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

フィールドタイプ説明
id
          `string` (UUID v4) | 一意のイベント識別子 |

| timestamp | string (ISO 8601) | イベントが作成されたとき | | parentId | string \| null | チェーン内の前のイベントの ID。最初のイベントのnull | | ephemeral | boolean? | 一時的なイベントの場合true。永続化されたイベントの場合は不在またはfalse | | type | string | イベント型識別子 (以下の表を参照) | | data | object | イベント固有のペイロード |

イベントに登録する

// 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、.NET の例については、 github/copilot-sdk リポジトリを参照してください。

ヒント

          **Python/Go:** これらの SDK では、1 つの `Data` クラス/構造体が使用され、使用可能なすべてのフィールドが省略可能または null 許容として使用されます。 次の表に示すフィールドのみがイベントの種類ごとに設定されます。残りは `None` / `nil`されます。
          **。ネット:** .NET SDK では、イベントごとに個別の厳密に型指定されたデータ クラス (たとえば、 `AssistantMessageDeltaData`) が使用されるため、各型に関連するフィールドのみが存在します。
          **Typescript:** TypeScript SDK では判別共用体が使用されます。 `event.type`で一致すると、 `data` ペイロードは自動的に正しい図形に絞り込まれます。

アシスタント イベント

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

assistant.turn_start

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

データ フィールドタイプ必須説明
turnIdstringターン識別子 (通常は、文字列化されたターン番号)
interactionIdstring
テレメトリの相関関係の相互作用識別子

assistant.intent

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

データ フィールドタイプ必須説明
intentstring人間が判読できる意図 ("コードベースの探索" など)

assistant.reasoning

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

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

assistant.reasoning_delta

儚い。 モデルの拡張思考がリアルタイムで段階的に配信されます。

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

assistant.message

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

データ フィールドタイプ必須説明
messageIdstringこのメッセージのユニーク識別子
contentstringアシスタントのテキスト応答
toolRequestsToolRequest[]
アシスタントが行いたいと思うツール呼び出し (下記参照)
reasoningOpaquestring
暗号化された拡張思考(アントロピックモデル)、セッションにバインドされた
reasoningTextstring
拡張思考から読み取り可能な推論テキスト
encryptedContentstring
暗号化された推論コンテンツ (OpenAI モデル);session-bound
phasestring
生成フェーズ (たとえば、 "thinking""response")
outputTokensnumber
API 応答からの実際の出力トークン数
interactionIdstring
テレメトリの相互作用識別子
parentToolCallIdstring
このメッセージがサブエージェントから送信されたときに設定する
          **
          `ToolRequest` フィールド:**
フィールドタイプ必須説明
toolCallIdstringこのツール呼び出しの一意の ID
namestringツール名 ( "bash""edit""grep"など)
argumentsobject
ツールの解析された引数
type"function" | "custom"
呼び出しの種類。存在しない場合は"function"が既定値となります。

assistant.message_delta

儚い。 アシスタントのテキスト応答の逐次的に送信される部分。リアルタイムでストリーミング。

データ フィールドタイプ必須説明
messageIdstring対応する assistant.message イベントと一致します
deltaContentstringメッセージに追加するテキスト チャンク
parentToolCallIdstring
サブエージェントからの発信時に設定する

assistant.turn_end

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

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

assistant.usage

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

データ フィールドタイプ必須説明
modelstringモデル識別子 (たとえば、 "gpt-4.1")
inputTokensnumber
使用された入力トークン
outputTokensnumber
生成された出力トークン
cacheReadTokensnumber
プロンプト キャッシュから読み取られたトークン
cacheWriteTokensnumber
プロンプト キャッシュに書き込まれたトークン
costnumber
請求のためのモデル乗算コスト
durationnumber
API 呼び出し時間 (ミリ秒単位)
initiatorstring
この呼び出しをトリガーした内容 (たとえば、 "sub-agent")、ユーザーが開始した場合は存在しません
apiCallIdstring
プロバイダーからの完了 ID (たとえば、 chatcmpl-abc123)
providerCallIdstring
          GitHub 要求トレース ID (`x-github-request-id`) |

| parentToolCallId | string | | サブエージェントから使用を開始するタイミングを設定する | | quotaSnapshots | Record<string, QuotaSnapshot> | | クォータ識別子でキー付けされたクォータごとのリソース使用量 | | copilotUsage | CopilotUsage | | API からの明細化されたトークン コストの内訳 |

assistant.streaming_delta

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

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

ツールの実行イベント

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

tool.execution_start

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

データ フィールドタイプ必須説明
toolCallIdstringこの呼び出しツールの一意の識別子
toolNamestringツールの名前 ( "bash""edit""grep"など)
argumentsobject
ツールに渡される解析された引数
mcpServerNamestring
MCP サーバー名 (ツールが MCP サーバーによって提供される場合)
mcpToolNamestring
MCP サーバー上の元のツール名
parentToolCallIdstring
サブエージェントによって呼び出されたときに設定する

tool.execution_partial_result

儚い。 実行中のツールからの増分出力 (たとえば、bash 出力のストリーミング)。

データ フィールドタイプ必須説明
toolCallIdstring対応するtool.execution_startに一致します
partialOutputstring増分出力チャンク

tool.execution_progress

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

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

tool.execution_complete

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

データ フィールドタイプ必須説明
toolCallIdstring対応するtool.execution_startに一致します
successboolean実行が成功したかどうか
modelstring
このツール呼び出しを生成したモデル
interactionIdstring
相互作用識別子
isUserRequestedboolean
          `true` ユーザーがこのツール呼び出しを明示的に要求したとき |

| result | Result | | 成功した場合の発表 (下記参照) | | error | { message, code? } | | 障害発生時に存在する | | toolTelemetry | object | | ツール固有のテレメトリ | | parentToolCallId | string | | サブエージェントによって呼び出されたときに設定する |

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

tool.user_requested

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

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

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

session.idle

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

データ フィールドタイプ必須説明
backgroundTasksBackgroundTasks
エージェントがアイドル状態になると、バックグラウンドのエージェントやシェルが引き続き動作します。

session.error

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

データ フィールドタイプ必須説明
errorTypestringエラー カテゴリ ( "authentication""quota""rate_limit"など)
messagestring人間が読みやすいエラーメッセージ
stackstring
エラースタックトレース
statusCodenumber
アップストリーム要求からの HTTP 状態コード
providerCallIdstring
          GitHub サーバー側ログ連携のリクエストトレース ID |

session.compaction_start

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

session.compaction_complete

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

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

session.title_changed

一時的な セッションの自動生成されたタイトルが更新されました。

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

session.context_changed

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

データ フィールドタイプ必須説明
cwdstring現在の作業ディレクトリ
gitRootstring
Git リポジトリのルート
repositorystring
          `"owner/name"`形式のリポジトリ |

| branch | string | | 現在の Git ブランチ |

session.usage_info

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

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

session.task_complete

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

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

session.shutdown

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

データ フィールドタイプ必須説明
shutdownType"routine" | "error"通常のシャットダウンまたはクラッシュ
errorReasonstring
          `shutdownType` が `"error"` である場合のエラー説明 |

| totalPremiumRequests | number | ✅ | 使用された Premium API 要求の合計数 | | totalApiDurationMs | number | ✅ | API 呼び出しの累積時間 (ミリ秒単位) | | sessionStartTime | number | ✅ | セッションの開始時の Unix タイムスタンプ (ミリ秒) | | codeChanges | { linesAdded, linesRemoved, filesModified } | ✅ | コード変更メトリックの集計 | | modelMetrics | Record<string, ModelMetric> | ✅ | モデルごとの使用状況の内訳 | | currentModel | string | | シャットダウン時に選択されたモデル |

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

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

permission.requested

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

データ フィールドタイプ必須説明
requestIdstringこれを使用して、次の方法で応答します。 session.respondToPermission()
permissionRequestPermissionRequest要求されているアクセス許可の詳細
          `permissionRequest`は、`kind`の判別共用体です。
kind主要なフィールド説明
"shell"
          `fullCommandText`、 `intention`、 `commands[]`、 `possiblePaths[]` | シェル コマンドを実行する |

| "write" | fileNamediffintentionnewFileContents? | ファイルの書き込み/変更 | | "read" | pathintention | ファイルまたはディレクトリの読み取り | | "mcp" | serverNametoolNametoolTitleargs?readOnly | MCP ツールを呼び出す | | "url" | urlintention | URL を取得する | | "memory" | subjectfactcitations | メモリを格納する | | "custom-tool" | toolNametoolDescriptionargs? | カスタム ツールを呼び出す |

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

permission.completed

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

データ フィールドタイプ必須説明
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

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

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

user_input.completed

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

データ フィールドタイプ必須説明
requestIdstring対応するuser_input.requestedと一致します

elicitation.requested

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

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

elicitation.completed

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

データ フィールドタイプ必須説明
requestIdstring対応する elicitation.requested

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

subagent.started

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

データ フィールドタイプ必須説明
toolCallIdstringこのサブエージェントを生成した親ツール呼び出し
agentNamestringサブエージェントの内部名
agentDisplayNamestring人間が判読できる表示名
agentDescriptionstringサブエージェントの機能の説明

subagent.completed

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

データ フィールドタイプ必須説明
toolCallIdstring対応する subagent.started に一致しています
agentNamestring内部名
agentDisplayNamestring表示名

subagent.failed

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

データ フィールドタイプ必須説明
toolCallIdstring対応する subagent.started
agentNamestring内部名
agentDisplayNamestring表示名
errorstringエラー メッセージ

subagent.selected

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

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

subagent.deselected

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

skill.invoked

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

データ フィールドタイプ必須説明
namestringスキル名
pathstringSKILL.md 定義へのファイル パス
contentstring会話にすべてのスキルコンテンツが挿入されました。
allowedToolsstring[]
このスキルがアクティブな間に自動承認されたツール
pluginNamestring
スキルの元のプラグイン
pluginVersionstring
プラグインのバージョン

その他のイベント

abort

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

データ フィールドタイプ必須説明
reasonstringターンが中止された理由 (たとえば、 "user initiated")

user.message

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

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

system.message

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

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

external_tool.requested

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

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

external_tool.completed

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

データ フィールドタイプ必須説明
requestIdstring対応するexternal_tool.requestedと一致します。

exit_plan_mode.requested

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

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

exit_plan_mode.completed

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

データ フィールドタイプ必須説明
requestIdstring対応するexit_plan_mode.requestedと一致する

command.queued

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

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

command.completed

一時的 キューに登録されたコマンドが解決されました。

データ フィールドタイプ必須説明
requestIdstring対応する command.queued に一致する

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

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

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 (ephemeral)
│   ├── permission.completed  → Approval result (ephemeral)
│   ├── tool.execution_start  → Tool begins
│   ├── tool.execution_partial_result  → Streaming tool 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)

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

イベントの種類エフェメラルカテゴリキー データ フィールド
assistant.turn_start
助手
          `turnId`、`interactionId?` |

| assistant.intent | ✅ | 助手 | intent | | assistant.reasoning | | 助手 | reasoningIdcontent | | assistant.reasoning_delta | ✅ | 助手 | reasoningIddeltaContent | | assistant.streaming_delta | ✅ | 助手 | totalResponseSizeBytes | | assistant.message | | 助手 | messageIdcontenttoolRequests?outputTokens?phase? | | assistant.message_delta | ✅ | 助手 | messageIddeltaContentparentToolCallId? | | assistant.turn_end | | 助手 | turnId | | assistant.usage | ✅ | 助手 | modelinputTokens?outputTokens?cost?duration? | | tool.user_requested | | ツール | toolCallIdtoolNamearguments? | | tool.execution_start | | ツール | toolCallIdtoolNamearguments?mcpServerName? | | tool.execution_partial_result | ✅ | ツール | toolCallIdpartialOutput | | tool.execution_progress | ✅ | ツール | toolCallIdprogressMessage | | tool.execution_complete | | ツール | toolCallIdsuccessresult?error? | | session.idle | ✅ | セッション | backgroundTasks? | | session.error | | セッション | errorTypemessagestatusCode? | | session.compaction_start | | セッション | (空) | | session.compaction_complete | | セッション | successpreCompactionTokens?summaryContent? | | session.title_changed | ✅ | セッション | title | | session.context_changed | | セッション | cwdgitRoot?repository?branch? | | session.usage_info | ✅ | セッション | tokenLimitcurrentTokensmessagesLength | | session.task_complete | | セッション | summary? | | session.shutdown | | セッション | shutdownTypecodeChangesmodelMetrics | | permission.requested | ✅ | 許可 | requestIdpermissionRequest | | permission.completed | ✅ | 許可 | requestIdresult.kind | | user_input.requested | ✅ | ユーザー入力 | requestIdquestionchoices? | | user_input.completed | ✅ | ユーザー入力 | requestId | | elicitation.requested | ✅ | ユーザー入力 | requestIdmessagerequestedSchema | | elicitation.completed | ✅ | ユーザー入力 | requestId | | subagent.started | | サブエージェント | toolCallIdagentNameagentDisplayName | | subagent.completed | | サブエージェント | toolCallIdagentNameagentDisplayName | | subagent.failed | | サブエージェント | toolCallIdagentNameerror | | subagent.selected | | 副代理 | agentNameagentDisplayNametools | | subagent.deselected | | サブエージェント | (空) | | skill.invoked | | Skill | namepathcontentallowedTools? | | abort | | 制御 | reason | | user.message | | User | contentattachments?agentMode? | | system.message | | システム | contentrole | | external_tool.requested | ✅ | 外部ツール | requestIdtoolNamearguments? | | external_tool.completed | ✅ | 外部ツール | requestId | | command.queued | ✅ | 命令 | requestIdcommand | | command.completed | ✅ | 命令 | requestId | | exit_plan_mode.requested | ✅ | プラン モード | requestIdsummaryplanContentactions | | exit_plan_mode.completed | ✅ | プラン モード | requestId |