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 の容量は、クランプされるのではなく、invalid-config エラーとして拒否されます。
  • 低速サブスクライバーは、スキップされたイベントの数を報告する 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")
outputTokensnumber
API 応答からの実際の出力トークン数
interactionIdstring
テレメトリ用の CAPI インタラクション ID
parentToolCallIdstring
Deprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する

** ToolRequest フィールド:**

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

assistant.message_delta

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

データ フィールドタイプ必須Description
messageIdstring✅対応する assistant.message イベントと一致します
deltaContentstring✅メッセージに追加するテキスト チャンク
parentToolCallIdstring
Deprecated. サブエージェントの属性にエンベロープ レベルの 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
請求のためのモデル乗算コスト
durationnumber
API 呼び出し時間 (ミリ秒単位)
timeToFirstTokenMsnumber
要求ディスパッチから最初に受信したトークンまでの時間 (ストリーミング待機時間)
interTokenLatencyMsnumber
連続するトークン間の平均待機時間 (ストリーミング スループット)
reasoningEffortstring
この呼び出しに使用される推論作業レベル (例: "low"、 "medium"、 "high")
initiatorstring
この呼び出しをトリガーした内容 (例: "sub-agent")、ユーザーが開始した場合は存在しない
apiCallIdstring
プロバイダーからの完了 ID (例: chatcmpl-abc123)
serviceRequestIdstring
CAPI ログの関連付け用の Copilot サービス リクエスト ID (x-copilot-service-request-id)
apiEndpoint"/chat/completions" | "/v1/messages" | "/responses" | "ws:/responses"
モデル呼び出しに使用される API エンドポイント。は、可観測性とコストの属性に役立ちます。
ws:/responses は、応答 API の Websocket バリアントです
providerCallIdstring
GitHub要求トレース ID (x-github-request-id)
parentToolCallIdstring
Deprecated. サブエージェントの属性にエンベロープ レベルの agentId を使用する
quotaSnapshotsRecord<string, QuotaSnapshot>
クォータ識別子でキー付けされたクォータごとのリソース使用量
copilotUsageCopilotUsage
API からの明細化されたトークン コストの内訳

assistant.streaming_delta

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

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

ツールの実行イベント

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

tool.execution_start

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

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

tool.execution_partial_result

儚い。 実行中のツールからの逐次出力(例: bash のストリーミング出力)。

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

tool.execution_progress

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

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

tool.execution_complete

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

データ フィールドタイプ必須Description
toolCallIdstring✅対応するtool.execution_startに一致します
successboolean✅実行が成功したかどうか
modelstring
このツール呼び出しを生成したモデル
interactionIdstring
CAPI インタラクション ID
isUserRequestedboolean
true ユーザーがこのツール呼び出しを明示的に要求したとき
resultResult
成功時に含まれる (下記参照)
error{ message, code? }
エラー発生時に含まれる
toolTelemetryobject
ツール固有のテレメトリ (CodeQL チェック数など)
parentToolCallIdstring
Deprecated. サブエージェントの属性にエンベロープ レベルの 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
トークンが削除されました
summaryContentstring
LLM によって生成されたコンパクトな履歴の概要
checkpointNumbernumber
復旧用に作成されたチェックポイント スナップショット番号
checkpointPathstring
チェックポイントが格納されたファイル パス
compactionTokensUsed{ input, output, cachedInput }
圧縮 LLM 呼び出しのトークンの使用
requestIdstring
GitHub のコンパクション呼び出し用リクエストトレーシング ID

session.title_changed

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

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

session.context_changed

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

データ フィールドタイプ必須Description
cwdstring✅現在の作業ディレクトリ
gitRootstring
Git リポジトリのルート
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?ファイルの書き込み/変更
"read"
path、intentionファイルまたはディレクトリの読み取り
"mcp"
serverName、toolName、toolTitle、args?、readOnlyMCP ツールを呼び出す
"url"
url、intentionURL を取得する
"memory"
subject、fact、citationsメモリを格納する
"custom-tool"
toolName、toolDescription、args?カスタム ツールを呼び出す

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

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[]
このスキルがアクティブな間に自動承認されたツール
pluginNamestring
スキルの元のプラグイン
pluginVersionstring
プラグインのバージョン

その他のイベント

abort

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

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

user.message

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

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

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

この表に、主要な 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.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_changed
SessionsessionLimits
session.usage_checkpoint
Session
totalNanoAiu、totalPremiumRequests?
session.task_complete
Sessionsummary?
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