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

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

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

## Overview

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

![図: 説明されたプロセスを示すシーケンス図。](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)

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

## イベント エンベロープ

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

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

## イベントに登録する

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```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);
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient
from copilot.generated.session_events import SessionEventType

client = CopilotClient()

session = None  # assume session is created elsewhere

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

# session.on(handle)
```

```python
from copilot.generated.session_events import SessionEventType

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

session.on(handle)
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
package main

import (
    "context"
    "fmt"
    copilot "github.com/github/copilot-sdk/go"
    "github.com/github/copilot-sdk/go/rpc"
)

func main() {
    ctx := context.Background()
    client := copilot.NewClient(nil)

    session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
        Model:     "gpt-4.1",
        Streaming: copilot.Bool(true),
        OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
            return &rpc.PermissionDecisionApproveOnce{}, nil
        },
    })

    session.On(func(event copilot.SessionEvent) {
        if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
            fmt.Print(d.DeltaContent)
        }
    })
    _ = session
}
```

```golang
session.On(func(event copilot.SessionEvent) {
    if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
        fmt.Print(d.DeltaContent)
    }
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

public static class StreamingEventsExample
{
    public static async Task Example(CopilotSession session)
    {
        session.On<SessionEvent>(evt =>
        {
            if (evt is AssistantMessageDeltaEvent delta)
            {
                Console.Write(delta.Data.DeltaContent);
            }
        });
    }
}
```

```csharp
session.On<SessionEvent>(evt =>
{
    if (evt is AssistantMessageDeltaEvent delta)
    {
        Console.Write(delta.Data.DeltaContent);
    }
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
// All events
session.on(event -> System.out.println(event.getType()));

// Specific event type — data is narrowed to the matching class
session.on(AssistantMessageDeltaEvent.class, event ->
    System.out.print(event.getData().deltaContent())
);
```

</div>

</div>

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

## アシスタント イベント

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

### `assistant.turn_start`

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

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

### `assistant.intent`

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

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

### `assistant.reasoning`

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

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

### `assistant.reasoning_delta`

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

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

### `assistant.message`

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

| データ フィールド                                | タイプ             | 必須 | Description     |
| ---------------------------------------- | --------------- | -- | --------------- |
| `messageId`                              | `string`        | ✅  | このメッセージのユニーク識別子 |
| `content`                                | `string`        | ✅  | アシスタントのテキスト応答   |
| `toolRequests`                           | `ToolRequest[]` |    |                 |
| アシスタントが行いたいと思うツール呼び出し (下記参照)             |                 |    |                 |
| `reasoningOpaque`                        | `string`        |    |                 |
| 暗号化された拡張思考（アントロピックモデル）、セッションにバインドされた     |                 |    |                 |
| `reasoningText`                          | `string`        |    |                 |
| 拡張思考から読み取り可能な推論テキスト                      |                 |    |                 |
| `encryptedContent`                       | `string`        |    |                 |
| 暗号化された推論コンテンツ (OpenAI モデル);session-bound |                 |    |                 |
| `phase`                                  | `string`        |    |                 |
| 生成フェーズ (例: `"thinking"` と `"response"`)  |                 |    |                 |
| `outputTokens`                           | `number`        |    |                 |
| API 応答からの実際の出力トークン数                      |                 |    |                 |
| `interactionId`                          | `string`        |    |                 |
| テレメトリ用の CAPI インタラクション ID                 |                 |    |                 |
| `parentToolCallId`                       | `string`        |    |                 |
| このメッセージがサブエージェントから送信されたときに設定する           |                 |    |                 |

\*\*
`ToolRequest` フィールド：\*\*

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

### `assistant.message_delta`

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

| データ フィールド           | タイプ      | 必須 | Description                         |
| ------------------- | -------- | -- | ----------------------------------- |
| `messageId`         | `string` | ✅  | 対応する `assistant.message` イベントと一致します |
| `deltaContent`      | `string` | ✅  | メッセージに追加するテキスト チャンク                 |
| `parentToolCallId`  | `string` |    |                                     |
| サブエージェントからの発信時に設定する |          |    |                                     |

### `assistant.turn_end`

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

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

### `assistant.usage`

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

| データ フィールド                                            | タイプ                                                                        | 必須 | Description             |
| ---------------------------------------------------- | -------------------------------------------------------------------------- | -- | ----------------------- |
| `model`                                              | `string`                                                                   | ✅  | モデル識別子 (例: `"gpt-4.1"`) |
| `inputTokens`                                        | `number`                                                                   |    |                         |
| 使用された入力トークン                                          |                                                                            |    |                         |
| `outputTokens`                                       | `number`                                                                   |    |                         |
| 生成された出力トークン                                          |                                                                            |    |                         |
| `cacheReadTokens`                                    | `number`                                                                   |    |                         |
| プロンプト キャッシュから読み取られたトークン                              |                                                                            |    |                         |
| `cacheWriteTokens`                                   | `number`                                                                   |    |                         |
| プロンプト キャッシュに書き込まれたトークン                               |                                                                            |    |                         |
| `cost`                                               | `number`                                                                   |    |                         |
| 請求のためのモデル乗算コスト                                       |                                                                            |    |                         |
| `duration`                                           | `number`                                                                   |    |                         |
| API 呼び出し時間 (ミリ秒単位)                                   |                                                                            |    |                         |
| `initiator`                                          | `string`                                                                   |    |                         |
| この呼び出しをトリガーした内容 (例: `"sub-agent"`)、ユーザーが開始した場合は存在しない |                                                                            |    |                         |
| `apiCallId`                                          | `string`                                                                   |    |                         |
| プロバイダーからの完了 ID (例: `chatcmpl-abc123`)                |                                                                            |    |                         |
| `apiEndpoint`                                        | `"/chat/completions" \| "/v1/messages" \| "/responses" \| "ws:/responses"` |    |                         |
| モデル呼び出しに使用される API エンドポイント。は、可観測性とコストの属性に役立ちます。       |                                                                            |    |                         |
| `ws:/responses` は、応答 API の Websocket バリアントです         |                                                                            |    |                         |
| `providerCallId`                                     | `string`                                                                   |    |                         |
| GitHub要求トレース ID (`x-github-request-id`)              |                                                                            |    |                         |
| `parentToolCallId`                                   | `string`                                                                   |    |                         |
| サブエージェントから使用を開始するタイミングを設定する                          |                                                                            |    |                         |
| `quotaSnapshots`                                     | `Record<string, QuotaSnapshot>`                                            |    |                         |
| クォータ識別子でキー付けされたクォータごとのリソース使用量                        |                                                                            |    |                         |
| `copilotUsage`                                       | `CopilotUsage`                                                             |    |                         |
| API からの明細化されたトークン コストの内訳                             |                                                                            |    |                         |

### `assistant.streaming_delta`

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

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

## ツールの実行イベント

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

### `tool.execution_start`

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

| データ フィールド                            | タイプ      | 必須 | Description                              |
| ------------------------------------ | -------- | -- | ---------------------------------------- |
| `toolCallId`                         | `string` | ✅  | この呼び出しツールの一意の識別子                         |
| `toolName`                           | `string` | ✅  | ツールの名前 (例: `"bash"`、 `"edit"`、 `"grep"`) |
| `arguments`                          | `object` |    |                                          |
| ツールに渡される解析された引数                      |          |    |                                          |
| `mcpServerName`                      | `string` |    |                                          |
| MCP サーバー名 (ツールが MCP サーバーによって提供される場合) |          |    |                                          |
| `mcpToolName`                        | `string` |    |                                          |
| MCP サーバー上の元のツール名                     |          |    |                                          |
| `parentToolCallId`                   | `string` |    |                                          |
| サブエージェントによって呼び出されたときに設定する            |          |    |                                          |

### `tool.execution_partial_result`

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

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

### `tool.execution_progress`

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

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

### `tool.execution_complete`

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

| データ フィールド                        | タイプ                  | 必須 | Description                      |
| -------------------------------- | -------------------- | -- | -------------------------------- |
| `toolCallId`                     | `string`             | ✅  | 対応する`tool.execution_start`に一致します |
| `success`                        | `boolean`            | ✅  | 実行が成功したかどうか                      |
| `model`                          | `string`             |    |                                  |
| このツール呼び出しを生成したモデル                |                      |    |                                  |
| `interactionId`                  | `string`             |    |                                  |
| CAPI インタラクション ID                 |                      |    |                                  |
| `isUserRequested`                | `boolean`            |    |                                  |
|                                  |                      |    |                                  |
| `true` ユーザーがこのツール呼び出しを明示的に要求したとき |                      |    |                                  |
| `result`                         | `Result`             |    |                                  |
| 成功時に含まれる (下記参照)                  |                      |    |                                  |
| `error`                          | `{ message, code? }` |    |                                  |
| エラー発生時に含まれる                      |                      |    |                                  |
| `toolTelemetry`                  | `object`             |    |                                  |
| ツール固有のテレメトリ (CodeQL チェック数など)     |                      |    |                                  |
| `parentToolCallId`               | `string`             |    |                                  |
| サブエージェントによって呼び出されたときに設定する        |                      |    |                                  |

\*\*
`Result` フィールド：\*\*

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

### `tool.user_requested`

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

| データ フィールド    | タイプ      | 必須 | Description      |
| ------------ | -------- | -- | ---------------- |
| `toolCallId` | `string` | ✅  | この呼び出しツールの一意の識別子 |
| `toolName`   | `string` | ✅  | ユーザーが呼び出すツールの名前  |
| `arguments`  | `object` |    |                  |
| 呼び出しの引数      |          |    |                  |

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

### `session.idle`

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

| データ フィールド                                            | タイプ               | 必須 | Description |
| ---------------------------------------------------- | ----------------- | -- | ----------- |
| `backgroundTasks`                                    | `BackgroundTasks` |    |             |
| エージェントがアイドル状態になった場合でも、引き続き実行されているバックグラウンドのエージェントやシェル |                   |    |             |

### `session.error`

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

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

### `session.compaction_start`

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

### `session.compaction_complete`

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

| データ フィールド                          | タイプ                              | 必須 | Description |
| ---------------------------------- | -------------------------------- | -- | ----------- |
| `success`                          | `boolean`                        | ✅  | 圧縮に成功したかどうか |
| `error`                            | `string`                         |    |             |
| 圧縮に失敗した場合のエラー メッセージ                |                                  |    |             |
| `preCompactionTokens`              | `number`                         |    |             |
| 圧縮前のトークン                           |                                  |    |             |
| `postCompactionTokens`             | `number`                         |    |             |
| 圧縮後のトークン                           |                                  |    |             |
| `preCompactionMessagesLength`      | `number`                         |    |             |
| 圧縮前のメッセージ数                         |                                  |    |             |
| `messagesRemoved`                  | `number`                         |    |             |
| 削除されたメッセージ                         |                                  |    |             |
| `tokensRemoved`                    | `number`                         |    |             |
| トークンが削除されました                       |                                  |    |             |
| `summaryContent`                   | `string`                         |    |             |
| LLM によって生成されたコンパクトな履歴の概要           |                                  |    |             |
| `checkpointNumber`                 | `number`                         |    |             |
| 復旧用に作成されたチェックポイント スナップショット番号       |                                  |    |             |
| `checkpointPath`                   | `string`                         |    |             |
| チェックポイントが格納されたファイル パス              |                                  |    |             |
| `compactionTokensUsed`             | `{ input, output, cachedInput }` |    |             |
| 圧縮 LLM 呼び出しのトークンの使用                |                                  |    |             |
| `requestId`                        | `string`                         |    |             |
| GitHub のコンパクション呼び出し用リクエストトレーシング ID |                                  |    |             |

### `session.title_changed`

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

| データ フィールド | タイプ      | 必須 | Description   |
| --------- | -------- | -- | ------------- |
| `title`   | `string` | ✅  | 新しいセッション タイトル |

### `session.context_changed`

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

| データ フィールド              | タイプ      | 必須 | Description |
| ---------------------- | -------- | -- | ----------- |
| `cwd`                  | `string` | ✅  | 現在の作業ディレクトリ |
| `gitRoot`              | `string` |    |             |
| Git リポジトリのルート          |          |    |             |
| `repository`           | `string` |    |             |
|                        |          |    |             |
| `"owner/name"`形式のリポジトリ |          |    |             |
| `branch`               | `string` |    |             |
| 現在の Git ブランチ           |          |    |             |

### `session.usage_info`

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

| データ フィールド        | タイプ      | 必須 | Description              |
| ---------------- | -------- | -- | ------------------------ |
| `tokenLimit`     | `number` | ✅  | モデルのコンテキスト ウィンドウの最大トークン数 |
| `currentTokens`  | `number` | ✅  | コンテキスト ウィンドウ内の現在のトークン    |
| `messagesLength` | `number` | ✅  | 会話の現在のメッセージ数             |

### `session.task_complete`

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

| データ フィールド  | タイプ      | 必須 | Description |
| ---------- | -------- | -- | ----------- |
| `summary`  | `string` |    |             |
| 完了したタスクの概要 |          |    |             |

### `session.shutdown`

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

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

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

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

### `permission.requested`

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

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

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

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

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

### `permission.completed`

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

| データ フィールド     | タイプ      | 必須 | Description                                                                                                                                                                      |
| ------------- | -------- | -- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `requestId`   | `string` | ✅  | 対応する`permission.requested`に一致します                                                                                                                                                 |
| `result.kind` | `string` | ✅  | 次のいずれか: `"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                                        |
| --------------------- | ---------- | -- | -------------------------------------------------- |
| `requestId`           | `string`   | ✅  | これを使用して、次の方法で応答します。 `session.respondToUserInput()` |
| `question`            | `string`   | ✅  | ユーザーに提示する質問                                        |
| `choices`             | `string[]` |    |                                                    |
| ユーザーの定義済みの選択肢         |            |    |                                                    |
| `allowFreeform`       | `boolean`  |    |                                                    |
| 自由形式のテキスト入力が許可されるかどうか |            |    |                                                    |

### `user_input.completed`

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

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

### `elicitation.requested`

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

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

### `elicitation.completed`

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

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

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

### `subagent.started`

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

| データ フィールド          | タイプ      | 必須 | Description             |
| ------------------ | -------- | -- | ----------------------- |
| `toolCallId`       | `string` | ✅  | このサブエージェントを生成した親ツール呼び出し |
| `agentName`        | `string` | ✅  | サブエージェントの内部名            |
| `agentDisplayName` | `string` | ✅  | 人間が判読できる表示名             |
| `agentDescription` | `string` | ✅  | サブエージェントの機能の説明          |

### `subagent.completed`

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

| データ フィールド          | タイプ      | 必須 | Description                  |
| ------------------ | -------- | -- | ---------------------------- |
| `toolCallId`       | `string` | ✅  | 対応する`subagent.started`に一致します |
| `agentName`        | `string` | ✅  | 内部名                          |
| `agentDisplayName` | `string` | ✅  | 表示名                          |

### `subagent.failed`

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

| データ フィールド          | タイプ      | 必須 | Description                  |
| ------------------ | -------- | -- | ---------------------------- |
| `toolCallId`       | `string` | ✅  | 対応する`subagent.started`に一致します |
| `agentName`        | `string` | ✅  | 内部名                          |
| `agentDisplayName` | `string` | ✅  | 表示名                          |
| `error`            | `string` | ✅  | エラー メッセージ                    |

### `subagent.selected`

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

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

### `subagent.deselected`

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

### `skill.invoked`

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

| データ フィールド                | タイプ        | 必須 | Description              |
| ------------------------ | ---------- | -- | ------------------------ |
| `name`                   | `string`   | ✅  | スキル名                     |
| `path`                   | `string`   | ✅  | SKILL.md 定義へのファイル パス     |
| `content`                | `string`   | ✅  | 会話にすべてのスキルコンテンツが挿入されました。 |
| `allowedTools`           | `string[]` |    |                          |
| このスキルがアクティブな間に自動承認されたツール |            |    |                          |
| `pluginName`             | `string`   |    |                          |
| スキルの元のプラグイン              |            |    |                          |
| `pluginVersion`          | `string`   |    |                          |
| プラグインのバージョン              |            |    |                          |

## その他のイベント

### `abort`

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

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

### `user.message`

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

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

### `system.message`

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

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

### `external_tool.requested`

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

| データ フィールド    | タイプ      | 必須 | Description                                           |
| ------------ | -------- | -- | ----------------------------------------------------- |
| `requestId`  | `string` | ✅  | これを使用して、次の方法で応答します。 `session.respondToExternalTool()` |
| `sessionId`  | `string` | ✅  | この要求が属するセッション                                         |
| `toolCallId` | `string` | ✅  | この呼び出しのツール呼び出し ID                                     |
| `toolName`   | `string` | ✅  | 外部ツールの名前                                              |
| `arguments`  | `object` |    |                                                       |
| ツールの引数       |          |    |                                                       |

### `external_tool.completed`

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

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

### `exit_plan_mode.requested`

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

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

### `exit_plan_mode.completed`

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

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

### `command.queued`

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

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

### `command.completed`

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

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

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

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

```text
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)
```

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

| イベントの種類                                                                        | エフェメラル     | 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`、`parentToolCallId?`                                 |            |          |                          |
| `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`                                                                 | ✅          | Session  | `backgroundTasks?`       |
| `session.error`                                                                |            |          |                          |
| Session                                                                        |            |          |                          |
| `errorType`、`message`、`statusCode?`                                            |            |          |                          |
| `session.compaction_start`                                                     |            |          |                          |
| Session                                                                        |            |          |                          |
| *(空)*                                                                          |            |          |                          |
| `session.compaction_complete`                                                  |            |          |                          |
| Session                                                                        |            |          |                          |
| `success`、`preCompactionTokens?`、`summaryContent?`                             |            |          |                          |
| `session.title_changed`                                                        | ✅          | Session  | `title`                  |
| `session.context_changed`                                                      |            |          |                          |
| Session                                                                        |            |          |                          |
| `cwd`、`gitRoot?`、`repository?`、`branch?`                                       |            |          |                          |
| `session.usage_info`                                                           | ✅          | Session  |                          |
| `tokenLimit`、`currentTokens`、`messagesLength`                                  |            |          |                          |
| `session.task_complete`                                                        |            |          |                          |
| Session                                                                        | `summary?` |          |                          |
| `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`                                    |            |          |                          |
| `subagent.completed`                                                           |            |          |                          |
| サブエージェント                                                                       |            |          |                          |
| `toolCallId`、`agentName`、`agentDisplayName`                                    |            |          |                          |
| `subagent.failed`                                                              |            |          |                          |
| サブエージェント                                                                       |            |          |                          |
| `toolCallId`、`agentName`、`error`                                               |            |          |                          |
| `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`              |
| `exit_plan_mode.requested`                                                     | ✅          | プラン モード  |                          |
| `requestId`、`summary`、`planContent`、`actions`                                  |            |          |                          |
| `exit_plan_mode.completed`                                                     | ✅          | プラン モード  | `requestId`              |