# Événements de session de streaming

Chaque action qu’effectue l’agent Copilot — réflexion, écriture de code, exécution d’outils — est émise sous la forme d’un événement de session auquel vous pouvez vous abonner. Ce guide est une référence au niveau du champ pour chaque type d’événement afin de savoir exactement quelles données s’attendent sans lire la source du Kit de développement logiciel (SDK).

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

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

## Overview

Lorsqu’il `streaming: true` est défini sur une session, le SDK émet des événements **éphémères** en temps réel (deltas, mises à jour de progression) ainsi que des événements **persistants** (messages complets, résultats de l’outil). Tous les événements partagent une enveloppe commune et portent une `data` charge utile dont la forme dépend de l’événement `type`.

![Diagramme : diagramme de séquence montrant le processus décrit.](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)

| Concept                  | Description                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| **Événement éphémère**   | Transitoire; diffusé en temps réel, mais **pas** conservé dans le journal de session. Pas rejoué lors de la reprise de session. |
| **Événement persistant** | Enregistré dans le journal des événements de session sur le disque. Rejoué lors de la reprise d’une session.                    |
| **Événement Delta**      | Segment de streaming éphémère (texte ou raisonnement). Accumulez des deltas pour générer le contenu complet.                    |
| **`parentId` Chaîne**    | Chaque événement pointe vers l’événement `parentId` précédent, formant une liste liée que vous pouvez parcourir.                |

## Enveloppe d’événement

Chaque événement de session, quel que soit le type, inclut les champs suivants :

| Champ                                                                                       | Catégorie                          | Description                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                                                                                        |                                    |                                                                                                                                                                                   |
| `string` (UUID v4)                                                                          | Identificateur d’événement unique  |                                                                                                                                                                                   |
| `timestamp`                                                                                 |                                    |                                                                                                                                                                                   |
| `string` (ISO 8601)                                                                         | Lors de la création de l’événement |                                                                                                                                                                                   |
| `parentId`                                                                                  | `string \| null`                   | ID de l’événement précédent dans la chaîne ; `null` pour le premier événement                                                                                                     |
| `agentId`                                                                                   | `string?`                          | ID d’instance de sous-agent pour les événements provenant d’un sous-agent ; absent pour les événements de l’agent racine/principal et pour les événements au niveau de la session |
| `ephemeral`                                                                                 | `boolean?`                         |                                                                                                                                                                                   |
| `true` pour les événements temporaires ; absents ou `false` pour les événements persistants |                                    |                                                                                                                                                                                   |
| `type`                                                                                      | `string`                           | Discriminateur de type d’événement (voir les tableaux ci-dessous)                                                                                                                 |
| `data`                                                                                      | `object`                           | Charge utile spécifique à l’événement                                                                                                                                             |

## Abonnement aux événements

<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.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.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-5.4",
        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)** Ces kits SDK utilisent des types de données distincts par événement (par exemple), `AssistantMessageDeltaData`de sorte que seuls les champs pertinents existent sur chaque type.
>
> \[!TIP]
> **(.NET)** Le sdk .NET utilise des classes de données distinctes et fortement typées par événement (par exemple, `AssistantMessageDeltaData`), de sorte que seuls les champs pertinents existent sur chaque type.
>
> \[!TIP]
> **(TypeScript)** Le Kit de développement logiciel (SDK) TypeScript utilise une union discriminée : lorsque vous faites correspondre `event.type`, la charge utile `data` est automatiquement réduite à la forme correcte.

## Afficher uniquement la réponse de l’agent parent

Les événements des sous-agents partagent le flux de la session parente et incluent la balise `agentId` au niveau de l’enveloppe. Les événements de l’agent racine/principal et les événements au niveau de la session omettent `agentId`, de sorte que les renderers main-chat peuvent ignorer les événements d’assistant où `agentId` est défini et acheminer ces événements vers des traces ou une interface utilisateur de progression à la place.

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

</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 CopilotSession, SessionEvent, SessionEventType
from copilot.session_events import AssistantMessageDeltaData

def subscribe_parent_response(session: CopilotSession) -> None:
    def handle(event: SessionEvent) -> None:
        if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA and event.agent_id is None:
            data = event.data
            if isinstance(data, AssistantMessageDeltaData):
                print(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 example

import (
    "fmt"

    copilot "github.com/github/copilot-sdk/go"
)

func subscribeParentResponse(session *copilot.Session) {
    session.On(func(event copilot.SessionEvent) {
        if event.AgentID != nil {
            return
        }

        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 System;
using GitHub.Copilot;

static class ParentAgentResponseExample
{
    public static void SubscribeParentResponse(CopilotSession session)
    {
        session.On<AssistantMessageDeltaEvent>(evt =>
        {
            if (evt.AgentId is null)
            {
                Console.Write(evt.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>

```java
import com.github.copilot.CopilotSession;
import com.github.copilot.generated.AssistantMessageDeltaEvent;

final class ParentAgentResponseExample {
    static void subscribeParentResponse(CopilotSession session) {
        session.on(AssistantMessageDeltaEvent.class, event -> {
            if (event.getAgentId() == null) {
                System.out.print(event.getData().deltaContent());
            }
        });
    }
}
```

</div>

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

```rust
use github_copilot_sdk::session::Session;

async fn subscribe_parent_response(session: &Session) {
    let mut events = session.subscribe();

    while let Ok(event) = events.recv().await {
        if event.event_type == "assistant.message_delta" && event.agent_id.is_none() {
            if let Some(delta) = event.data.get("deltaContent").and_then(|v| v.as_str()) {
                print!("{delta}");
            }
        }
    }
}
```

</div>

</div>

## Événements de l'Assistant

Ces événements effectuent le suivi du cycle de vie de réponse de l’agent, du début en passant par les flux en continu jusqu’au message final.

### `assistant.turn_start`

Émis lorsque l'agent commence à traiter une itération.

| Champ de données                                        | Catégorie | Obligatoire | Description                                                                           |
| ------------------------------------------------------- | --------- | ----------- | ------------------------------------------------------------------------------------- |
| `turnId`                                                | `string`  | ✅           | Identifiant de tour (généralement un numéro de tour converti en chaîne de caractères) |
| `interactionId`                                         | `string`  |             |                                                                                       |
| ID d’interaction CAPI pour la corrélation de télémétrie |           |             |                                                                                       |

### `assistant.intent`

Éphémère. Brève description de ce que fait actuellement l’agent, et mise à jour à mesure qu’il travaille.

| Champ de données | Catégorie | Obligatoire | Description                                                              |
| ---------------- | --------- | ----------- | ------------------------------------------------------------------------ |
| `intent`         | `string`  | ✅           | Intention lisible par l’homme (par exemple, « Exploration de codebase ») |

### `assistant.reasoning`

Bloc de pensée étendu complet du modèle. Émis après la fin du raisonnement.

| Champ de données | Catégorie | Obligatoire | Description                                        |
| ---------------- | --------- | ----------- | -------------------------------------------------- |
| `reasoningId`    | `string`  | ✅           | Identificateur unique pour ce bloc de raisonnement |
| `content`        | `string`  | ✅           | Texte complet de réflexion approfondie             |

### `assistant.reasoning_delta`

Éphémère. Partie incrémentielle de la pensée étendue du modèle, diffusée en temps réel.

| Champ de données | Catégorie | Obligatoire | Description                                                  |
| ---------------- | --------- | ----------- | ------------------------------------------------------------ |
| `reasoningId`    | `string`  | ✅           | Correspond à l’événement correspondant `assistant.reasoning` |
| `deltaContent`   | `string`  | ✅           | Bloc de texte à ajouter au contenu de raisonnement           |

### `assistant.message`

Réponse complète de l’Assistant pour cet appel LLM. Peut inclure des demandes d’appel d’outil.

| Champ de données                                                                         | Catégorie       | Obligatoire | Description                           |
| ---------------------------------------------------------------------------------------- | --------------- | ----------- | ------------------------------------- |
| `messageId`                                                                              | `string`        | ✅           | Identificateur unique pour ce message |
| `content`                                                                                | `string`        | ✅           | Réponse textuelle de l’Assistant      |
| `toolRequests`                                                                           | `ToolRequest[]` |             |                                       |
| Les appels que l'assistant souhaite faire avec l'outil (voir ci-dessous)                 |                 |             |                                       |
| `reasoningOpaque`                                                                        | `string`        |             |                                       |
| Pensée étendue chiffrée (modèles anthropiques) ; liée à la session                       |                 |             |                                       |
| `reasoningText`                                                                          | `string`        |             |                                       |
| Texte de raisonnement lisible résultant d'une réflexion approfondie                      |                 |             |                                       |
| `encryptedContent`                                                                       | `string`        |             |                                       |
| Contenu de raisonnement chiffré (modèles OpenAI) ; liées à la session                    |                 |             |                                       |
| `phase`                                                                                  | `string`        |             |                                       |
| Phase de génération (par exemple, `"thinking"` vs `"response"`)                          |                 |             |                                       |
| `outputTokens`                                                                           | `number`        |             |                                       |
| Nombre exact de jetons de sortie dans la réponse de l’API                                |                 |             |                                       |
| `interactionId`                                                                          | `string`        |             |                                       |
| ID d’interaction CAPI pour la télémétrie                                                 |                 |             |                                       |
| `parentToolCallId`                                                                       | `string`        |             |                                       |
| Deprecated. Utiliser `agentId` au niveau de l’enveloppe pour l’attribution du sous-agent |                 |             |                                       |

\*\*
`ToolRequest` Champs:\*\*

| Champ                                                                       | Catégorie                | Obligatoire | Description                                                |
| --------------------------------------------------------------------------- | ------------------------ | ----------- | ---------------------------------------------------------- |
| `toolCallId`                                                                | `string`                 | ✅           | ID unique pour cet appel d’outil                           |
| `name`                                                                      | `string`                 | ✅           | Nom de l’outil (par exemple, `"bash"`, `"edit"`, `"grep"`) |
| `arguments`                                                                 | `object`                 |             |                                                            |
| Arguments analysés pour l’outil                                             |                          |             |                                                            |
| `type`                                                                      | `"function" \| "custom"` |             |                                                            |
| Type d’appel ; prend la valeur par défaut `"function"` lorsqu’il est absent |                          |             |                                                            |

### `assistant.message_delta`

Éphémère. Segment incrémentiel de la réponse de texte de l’assistant, diffusé en temps réel.

| Champ de données                                                                         | Catégorie | Obligatoire | Description                                                |
| ---------------------------------------------------------------------------------------- | --------- | ----------- | ---------------------------------------------------------- |
| `messageId`                                                                              | `string`  | ✅           | Correspond à l’événement correspondant `assistant.message` |
| `deltaContent`                                                                           | `string`  | ✅           | Bloc de texte à ajouter au message                         |
| `parentToolCallId`                                                                       | `string`  |             |                                                            |
| Deprecated. Utiliser `agentId` au niveau de l’enveloppe pour l’attribution du sous-agent |           |             |                                                            |

### `assistant.turn_end`

Émis lorsque l’agent termine un tour (toutes les exécutions d’outils sont terminées, réponse finale remise).

| Champ de données | Catégorie | Obligatoire | Description                                                   |
| ---------------- | --------- | ----------- | ------------------------------------------------------------- |
| `turnId`         | `string`  | ✅           | Correspond à l’événement correspondant `assistant.turn_start` |

### `assistant.usage`

Éphémère. Informations d’utilisation et de coût des jetons pour un appel d’API individuel.

| Champ de données                                                                                                   | Catégorie                                                                  | Obligatoire | Description                                         |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | ----------- | --------------------------------------------------- |
| `model`                                                                                                            | `string`                                                                   | ✅           | Identificateur de modèle (par exemple, `"gpt-5.4"`) |
| `inputTokens`                                                                                                      | `number`                                                                   |             |                                                     |
| Jetons d’entrée consommés                                                                                          |                                                                            |             |                                                     |
| `outputTokens`                                                                                                     | `number`                                                                   |             |                                                     |
| Jetons de sortie produits                                                                                          |                                                                            |             |                                                     |
| `reasoningTokens`                                                                                                  | `number`                                                                   |             |                                                     |
| Jetons de sortie utilisés pour le raisonnement/la chaîne de pensée (sous-ensemble de `outputTokens`)               |                                                                            |             |                                                     |
| `cacheReadTokens`                                                                                                  | `number`                                                                   |             |                                                     |
| Jetons lus à partir du cache d’invite                                                                              |                                                                            |             |                                                     |
| `cacheWriteTokens`                                                                                                 | `number`                                                                   |             |                                                     |
| Jetons écrits dans le cache d’invite                                                                               |                                                                            |             |                                                     |
| `cacheExpiresAt`                                                                                                   | `string`                                                                   |             |                                                     |
| Horodatage ISO 8601 lorsque le cache d’invite de cet appel de modèle expire                                        |                                                                            |             |                                                     |
| `contentFilterTriggered`                                                                                           | `boolean`                                                                  |             |                                                     |
| Indique si la réponse a été bloquée ou tronquée par le filtrage de contenu (`finish_reason === 'content_filter'`)  |                                                                            |             |                                                     |
| `finishReason`                                                                                                     | `string`                                                                   |             |                                                     |
| Motif de fin du modèle (par exemple, `"stop"`, `"tool_calls"`, `"length"`, `"content_filter"`)                     |                                                                            |             |                                                     |
| `cost`                                                                                                             | `number`                                                                   |             |                                                     |
| Coût du multiplicateur de modèle pour la facturation                                                               |                                                                            |             |                                                     |
| `duration`                                                                                                         | `number`                                                                   |             |                                                     |
| Durée des appels d’API en millisecondes                                                                            |                                                                            |             |                                                     |
| `timeToFirstTokenMs`                                                                                               | `number`                                                                   |             |                                                     |
| Temps écoulé entre l’envoi de la requête et la réception du premier token (latence de streaming)                   |                                                                            |             |                                                     |
| `interTokenLatencyMs`                                                                                              | `number`                                                                   |             |                                                     |
| Latence moyenne entre les jetons consécutifs (débit de streaming)                                                  |                                                                            |             |                                                     |
| `reasoningEffort`                                                                                                  | `string`                                                                   |             |                                                     |
| Niveau d’effort de raisonnement utilisé pour cet appel (par exemple, `"low"`, `"medium"`, `"high"`)                |                                                                            |             |                                                     |
| `initiator`                                                                                                        | `string`                                                                   |             |                                                     |
| Ce qui a déclenché cet appel (par exemple, `"sub-agent"`) ; absent si l’appel est initié par l’utilisateur         |                                                                            |             |                                                     |
| `apiCallId`                                                                                                        | `string`                                                                   |             |                                                     |
| ID d’achèvement du fournisseur (par exemple, `chatcmpl-abc123`)                                                    |                                                                            |             |                                                     |
| `serviceRequestId`                                                                                                 | `string`                                                                   |             |                                                     |
| ID de requête de service Copilot (`x-copilot-service-request-id`) pour la corrélation des journaux CAPI            |                                                                            |             |                                                     |
| `apiEndpoint`                                                                                                      | `"/chat/completions" \| "/v1/messages" \| "/responses" \| "ws:/responses"` |             |                                                     |
| Point de terminaison d’API utilisé pour l’appel de modèle ; utile pour l’observabilité et l’attribution des coûts. |                                                                            |             |                                                     |
| `ws:/responses` est la variante websocket de l’API réponses                                                        |                                                                            |             |                                                     |
| `providerCallId`                                                                                                   | `string`                                                                   |             |                                                     |
| ID de suivi de requête GitHub (`x-github-request-id`)                                                              |                                                                            |             |                                                     |
| `parentToolCallId`                                                                                                 | `string`                                                                   |             |                                                     |
| Deprecated. Utiliser `agentId` au niveau de l’enveloppe pour l’attribution du sous-agent                           |                                                                            |             |                                                     |
| `quotaSnapshots`                                                                                                   | `Record<string, QuotaSnapshot>`                                            |             |                                                     |
| Utilisation des ressources par quota, indexé par identificateur de quota                                           |                                                                            |             |                                                     |
| `copilotUsage`                                                                                                     | `CopilotUsage`                                                             |             |                                                     |
| Répartition des coûts des jetons itemisés à partir de l’API                                                        |                                                                            |             |                                                     |

### `assistant.streaming_delta`

Éphémère. Indicateur de progression réseau de bas niveau : nombre total d’octets reçus de la réponse de l’API de diffusion en continu.

| Champ de données         | Catégorie | Obligatoire | Description                          |
| ------------------------ | --------- | ----------- | ------------------------------------ |
| `totalResponseSizeBytes` | `number`  | ✅           | Octets cumulés reçus jusqu’à présent |

## Événements d’exécution d’outils

Ces événements suivent le cycle de vie complet de chaque appel d'outil, depuis la demande d'appel d'outil par le modèle, à travers l'exécution, jusqu'à son achèvement.

### `tool.execution_start`

Émis lorsqu’un outil commence à s’exécuter.

| Champ de données                                                                         | Catégorie | Obligatoire | Description                                                |
| ---------------------------------------------------------------------------------------- | --------- | ----------- | ---------------------------------------------------------- |
| `toolCallId`                                                                             | `string`  | ✅           | Identificateur unique pour cet appel d’outil               |
| `toolName`                                                                               | `string`  | ✅           | Nom de l’outil (par exemple, `"bash"`, `"edit"`, `"grep"`) |
| `arguments`                                                                              | `object`  |             |                                                            |
| Arguments analysés passés à l’outil                                                      |           |             |                                                            |
| `mcpServerName`                                                                          | `string`  |             |                                                            |
| Nom du serveur MCP, lorsque l’outil est fourni par un serveur MCP                        |           |             |                                                            |
| `mcpToolName`                                                                            | `string`  |             |                                                            |
| Nom de l’outil d’origine sur le serveur MCP                                              |           |             |                                                            |
| `parentToolCallId`                                                                       | `string`  |             |                                                            |
| Deprecated. Utiliser `agentId` au niveau de l’enveloppe pour l’attribution du sous-agent |           |             |                                                            |

### `tool.execution_partial_result`

Éphémère. Sortie incrémentielle d’un outil en cours d’exécution (par exemple, sortie bash en streaming).

| Champ de données | Catégorie | Obligatoire | Description                                        |
| ---------------- | --------- | ----------- | -------------------------------------------------- |
| `toolCallId`     | `string`  | ✅           | Correspond au `tool.execution_start` correspondant |
| `partialOutput`  | `string`  | ✅           | Segment de sortie incrémentiel                     |

### `tool.execution_progress`

Éphémère. État de progression lisible par l’homme à partir d’un outil en cours d’exécution (par exemple, notifications de progression du serveur MCP).

| Champ de données  | Catégorie | Obligatoire | Description                                        |
| ----------------- | --------- | ----------- | -------------------------------------------------- |
| `toolCallId`      | `string`  | ✅           | Correspond au `tool.execution_start` correspondant |
| `progressMessage` | `string`  | ✅           | Message d’état de progression                      |

### `tool.execution_complete`

Émis lorsqu'un outil termine son exécution, avec succès ou avec une erreur.

| Champ de données                                                                         | Catégorie            | Obligatoire | Description                                        |
| ---------------------------------------------------------------------------------------- | -------------------- | ----------- | -------------------------------------------------- |
| `toolCallId`                                                                             | `string`             | ✅           | Correspond au `tool.execution_start` correspondant |
| `success`                                                                                | `boolean`            | ✅           | Indique si l’exécution a réussi                    |
| `model`                                                                                  | `string`             |             |                                                    |
| Modèle qui a généré cet appel d’outil                                                    |                      |             |                                                    |
| `interactionId`                                                                          | `string`             |             |                                                    |
| ID d’interaction CAPI                                                                    |                      |             |                                                    |
| `isUserRequested`                                                                        | `boolean`            |             |                                                    |
|                                                                                          |                      |             |                                                    |
| `true` lorsque l’utilisateur a explicitement demandé cet appel d’outil                   |                      |             |                                                    |
| `result`                                                                                 | `Result`             |             |                                                    |
| Présentation sur la réussite (voir ci-dessous)                                           |                      |             |                                                    |
| `error`                                                                                  | `{ message, code? }` |             |                                                    |
| Présent en cas d’échec                                                                   |                      |             |                                                    |
| `toolTelemetry`                                                                          | `object`             |             |                                                    |
| Télémétrie spécifique à l’outil (par exemple, nombre de vérifications CodeQL)            |                      |             |                                                    |
| `parentToolCallId`                                                                       | `string`             |             |                                                    |
| Deprecated. Utiliser `agentId` au niveau de l’enveloppe pour l’attribution du sous-agent |                      |             |                                                    |

\*\*
`Result` Champs:\*\*

| Champ                                                                                       | Catégorie        | Obligatoire | Description                                                                         |
| ------------------------------------------------------------------------------------------- | ---------------- | ----------- | ----------------------------------------------------------------------------------- |
| `content`                                                                                   | `string`         | ✅           | Résultat concis envoyé au LLM (pouvant être tronqué pour l'optimisation des tokens) |
| `detailedContent`                                                                           | `string`         |             |                                                                                     |
| Résultat complet pour l'affichage, préservant le contenu complet, y compris les différences |                  |             |                                                                                     |
| `contents`                                                                                  | `ContentBlock[]` |             |                                                                                     |
| Blocs de contenu structurés (texte, terminal, image, audio, ressource)                      |                  |             |                                                                                     |

### `tool.user_requested`

Émis lorsque l’utilisateur demande explicitement un appel d’outil (plutôt que le modèle choisissant d’en appeler un).

| Champ de données       | Catégorie | Obligatoire | Description                                       |
| ---------------------- | --------- | ----------- | ------------------------------------------------- |
| `toolCallId`           | `string`  | ✅           | Identificateur unique pour cet appel d’outil      |
| `toolName`             | `string`  | ✅           | Nom de l’outil que l’utilisateur souhaite appeler |
| `arguments`            | `object`  |             |                                                   |
| Arguments pour l’appel |           |             |                                                   |

## Événements de cycle de vie de session

### `session.idle`

Éphémère. L’agent a terminé tout le traitement et est prêt pour le message suivant. Il s’agit du signal qu’un tour est entièrement terminé.

| Champ de données                                                                        | Catégorie         | Obligatoire | Description |
| --------------------------------------------------------------------------------------- | ----------------- | ----------- | ----------- |
| `backgroundTasks`                                                                       | `BackgroundTasks` |             |             |
| Agents/shells en arrière-plan continuent de s'exécuter lorsque l'agent devenait inactif |                   |             |             |

### `session.error`

Une erreur s’est produite pendant le traitement de la session.

| Champ de données                                                                         | Catégorie | Obligatoire | Description                                                                     |
| ---------------------------------------------------------------------------------------- | --------- | ----------- | ------------------------------------------------------------------------------- |
| `errorType`                                                                              | `string`  | ✅           | Catégorie d’erreur (par exemple, `"authentication"`, `"quota"`, `"rate_limit"`) |
| `message`                                                                                | `string`  | ✅           | Message d’erreur lisible par l’humain                                           |
| `stack`                                                                                  | `string`  |             |                                                                                 |
| Trace de l'erreur                                                                        |           |             |                                                                                 |
| `statusCode`                                                                             | `number`  |             |                                                                                 |
| Code d’état HTTP à partir de la requête en amont                                         |           |             |                                                                                 |
| `providerCallId`                                                                         | `string`  |             |                                                                                 |
| Identifiant GitHub de traçage des requêtes pour la corrélation des journaux côté serveur |           |             |                                                                                 |

### `session.compaction_start`

La compaction de la fenêtre de contexte a commencé.
**La charge utile des données est vide (`{}`)**.

### `session.compaction_complete`

Compactage de fenêtre de contexte terminé.

| Champ de données                                                   | Catégorie                        | Obligatoire | Description                       |
| ------------------------------------------------------------------ | -------------------------------- | ----------- | --------------------------------- |
| `success`                                                          | `boolean`                        | ✅           | Indique si la compaction a réussi |
| `error`                                                            | `string`                         |             |                                   |
| Message d’erreur en cas d’échec de compactage                      |                                  |             |                                   |
| `preCompactionTokens`                                              | `number`                         |             |                                   |
| Jetons avant compactage                                            |                                  |             |                                   |
| `postCompactionTokens`                                             | `number`                         |             |                                   |
| Jetons après compactage                                            |                                  |             |                                   |
| `preCompactionMessagesLength`                                      | `number`                         |             |                                   |
| Nombre de messages avant compactage                                |                                  |             |                                   |
| `messagesRemoved`                                                  | `number`                         |             |                                   |
| Messages supprimés                                                 |                                  |             |                                   |
| `tokensRemoved`                                                    | `number`                         |             |                                   |
| Jetons supprimés                                                   |                                  |             |                                   |
| `summaryContent`                                                   | `string`                         |             |                                   |
| Résumé de l'historique compacté généré par le LLM                  |                                  |             |                                   |
| `checkpointNumber`                                                 | `number`                         |             |                                   |
| Numéro d’instantané de point de contrôle créé pour la récupération |                                  |             |                                   |
| `checkpointPath`                                                   | `string`                         |             |                                   |
| Chemin d’accès au fichier où le point de contrôle a été stocké     |                                  |             |                                   |
| `compactionTokensUsed`                                             | `{ input, output, cachedInput }` |             |                                   |
| Utilisation des jetons pour l'appel de la compaction avec LLM      |                                  |             |                                   |
| `requestId`                                                        | `string`                         |             |                                   |
| GitHub ID de suivi de requête pour l’appel de compactage           |                                  |             |                                   |

### `session.title_changed`

Éphémère. Le titre généré automatiquement de la session a été mis à jour.

| Champ de données | Catégorie | Obligatoire | Description              |
| ---------------- | --------- | ----------- | ------------------------ |
| `title`          | `string`  | ✅           | Nouveau titre de session |

### `session.context_changed`

Le répertoire de travail ou le contexte du référentiel de la session a changé.

| Champ de données                     | Catégorie | Obligatoire | Description                  |
| ------------------------------------ | --------- | ----------- | ---------------------------- |
| `cwd`                                | `string`  | ✅           | Répertoire de travail actuel |
| `gitRoot`                            | `string`  |             |                              |
| Racine du référentiel Git            |           |             |                              |
| `repository`                         | `string`  |             |                              |
| Référentiel au format `"owner/name"` |           |             |                              |
| `branch`                             | `string`  |             |                              |
| Branche git actuelle                 |           |             |                              |

### `session.usage_info`

Éphémère. Instantané d’utilisation de la fenêtre de contexte.

| Champ de données | Catégorie | Obligatoire | Description                                                    |
| ---------------- | --------- | ----------- | -------------------------------------------------------------- |
| `tokenLimit`     | `number`  | ✅           | Nombre maximal de jetons pour la fenêtre de contexte du modèle |
| `currentTokens`  | `number`  | ✅           | Jetons actuels dans la fenêtre de contexte                     |
| `messagesLength` | `number`  | ✅           | Nombre de messages actuels dans la conversation                |

### `session.session_limits_changed`

Les limites de session ont changé pour la fenêtre de comptabilité actuelle. Une `null``sessionLimits` valeur signifie qu’aucune limite n’est active.

| Champ de données                                                                              | Catégorie                     | Obligatoire | Description                                                             |
| --------------------------------------------------------------------------------------------- | ----------------------------- | ----------- | ----------------------------------------------------------------------- |
| `sessionLimits`                                                                               | `SessionLimitsConfig \| null` | ✅           | Limites de session actuelles ou `null` quand aucune limite n’est active |
| `sessionLimits.maxAiCredits`                                                                  | `number`                      |             |                                                                         |
| Nombre maximal de crédits IA autorisés dans la fenêtre de comptabilité actuelle de la session |                               |             |                                                                         |

### `session.usage_checkpoint`

Point de contrôle de l’utilisation agrégée durable utilisé pour reconstituer la comptabilité lors de la reprise d’une session.

| Champ de données                                                                | Catégorie | Obligatoire | Description                                                                                 |
| ------------------------------------------------------------------------------- | --------- | ----------- | ------------------------------------------------------------------------------------------- |
| `totalNanoAiu`                                                                  | `number`  | ✅           | Coût des unités nano-IA accumulées à l’échelle de la session au moment du point de contrôle |
| `totalPremiumRequests`                                                          | `number`  |             |                                                                                             |
| Nombre total de demandes d’API Premium utilisées au moment du point de contrôle |           |             |                                                                                             |

### `session.task_complete`

L’agent a terminé sa tâche affectée.

| Champ de données            | Catégorie | Obligatoire | Description |
| --------------------------- | --------- | ----------- | ----------- |
| `summary`                   | `string`  |             |             |
| Résumé de la tâche terminée |           |             |             |

### `session.shutdown`

La session s’est terminée.

| Champ de données                                           | Catégorie                                     | Obligatoire | Description                                      |
| ---------------------------------------------------------- | --------------------------------------------- | ----------- | ------------------------------------------------ |
| `shutdownType`                                             | `"routine" \| "error"`                        | ✅           | Arrêt normal ou panne                            |
| `errorReason`                                              | `string`                                      |             |                                                  |
| Description de l’erreur quand `shutdownType` est `"error"` |                                               |             |                                                  |
| `totalPremiumRequests`                                     | `number`                                      | ✅           | Nombre total de demandes d’API Premium utilisées |
| `totalApiDurationMs`                                       | `number`                                      | ✅           | Temps d’appel d’API cumulé en millisecondes      |
| `sessionStartTime`                                         | `number`                                      | ✅           | Horodatage Unix (ms) au démarrage de la session  |
| `codeChanges`                                              | `{ linesAdded, linesRemoved, filesModified }` | ✅           | Métriques globales de modification de code       |
| `modelMetrics`                                             | `Record<string, ModelMetric>`                 | ✅           | Répartition de l’utilisation par modèle          |
| `currentModel`                                             | `string`                                      |             |                                                  |
| Modèle sélectionné au moment de l’arrêt                    |                                               |             |                                                  |

## Événements d’autorisation et d’entrée utilisateur

Ces événements sont émis lorsque l’agent a besoin d’approbation ou d’entrée de l’utilisateur avant de continuer.

### `permission.requested`

L’agent a besoin d’une autorisation pour effectuer une action (exécuter une commande, écrire un fichier, etc.).

| Champ de données    | Catégorie           | Obligatoire | Description                                                   |
| ------------------- | ------------------- | ----------- | ------------------------------------------------------------- |
| `requestId`         | `string`            | ✅           | Utilisez-le pour répondre via `session.respondToPermission()` |
| `permissionRequest` | `PermissionRequest` | ✅           | Détails de l’autorisation demandée                            |

Il `permissionRequest` s’agit d’une union discriminatoire sur `kind`:

| `kind`                                                          | Champs clés                      | Description |
| --------------------------------------------------------------- | -------------------------------- | ----------- |
| `"shell"`                                                       |                                  |             |
| `fullCommandText`, `intention`, `commands[]`, `possiblePaths[]` | Exécuter une commande shell      |             |
| `"write"`                                                       |                                  |             |
| `fileName`, `diff`, `intention`, `newFileContents?`             | Écrire/modifier un fichier       |             |
| `"read"`                                                        |                                  |             |
| `path`, `intention`                                             | Lire un fichier ou un répertoire |             |
| `"mcp"`                                                         |                                  |             |
| `serverName`, , `toolName``toolTitle`, , `args?``readOnly`      | Appeler un outil MCP             |             |
| `"url"`                                                         |                                  |             |
| `url`, `intention`                                              | Récupérer une URL                |             |
| `"memory"`                                                      |                                  |             |
| `subject`, `fact`, `citations`                                  | Stocker une mémoire              |             |
| `"custom-tool"`                                                 |                                  |             |
| `toolName`, `toolDescription`, `args?`                          | Appeler un outil personnalisé    |             |

Toutes les `kind` variantes incluent également une liaison facultative `toolCallId` vers l’appel d’outil qui a déclenché la demande.

### `permission.completed`

Une demande d’autorisation a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                                                                                                                                                      |
| ---------------- | --------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Correspond au `permission.requested` correspondant                                                                                                                               |
| `result.kind`    | `string`  | ✅           | Un des : `"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`

Éphémère. L’agent pose une question à l’utilisateur.

| Champ de données                                          | Catégorie  | Obligatoire | Description                                                  |
| --------------------------------------------------------- | ---------- | ----------- | ------------------------------------------------------------ |
| `requestId`                                               | `string`   | ✅           | Utilisez-le pour répondre via `session.respondToUserInput()` |
| `question`                                                | `string`   | ✅           | Question à présenter à l’utilisateur                         |
| `choices`                                                 | `string[]` |             |                                                              |
| Choix prédéfinis pour l’utilisateur                       |            |             |                                                              |
| `allowFreeform`                                           | `boolean`  |             |                                                              |
| Indique si l’entrée de texte de forme libre est autorisée |            |             |                                                              |

### `user_input.completed`

Éphémère. Une demande d’entrée utilisateur a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                        |
| ---------------- | --------- | ----------- | -------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Correspond au `user_input.requested` correspondant |

### `elicitation.requested`

Éphémère. L'agent a besoin d'une entrée de formulaire structurée de l'utilisateur (protocole MCP d'élucidation).

| Champ de données                                      | Catégorie                                   | Obligatoire | Description                                                    |
| ----------------------------------------------------- | ------------------------------------------- | ----------- | -------------------------------------------------------------- |
| `requestId`                                           | `string`                                    | ✅           | Utilisez-le pour répondre via `session.respondToElicitation()` |
| `message`                                             | `string`                                    | ✅           | Description des informations nécessaires                       |
| `mode`                                                | `"form"`                                    |             |                                                                |
| Mode d’élicitation (actuellement uniquement `"form"`) |                                             |             |                                                                |
| `requestedSchema`                                     | `{ type: "object", properties, required? }` | ✅           | Schéma JSON décrivant les champs de formulaire                 |

### `elicitation.completed`

Éphémère. Une demande d’éciation a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                         |
| ---------------- | --------- | ----------- | --------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Correspond au `elicitation.requested` correspondant |

## Événements de sous-agent et de compétence

### `subagent.started`

Un agent personnalisé a été appelé en tant que sous-agent.

| Champ de données                                               | Catégorie | Obligatoire | Description                                        |
| -------------------------------------------------------------- | --------- | ----------- | -------------------------------------------------- |
| `toolCallId`                                                   | `string`  | ✅           | Appel de l’outil parent qui a généré ce sous-agent |
| `agentName`                                                    | `string`  | ✅           | Nom interne du sous-agent                          |
| `agentDisplayName`                                             | `string`  | ✅           | Nom d’affichage lisible par l’homme                |
| `agentDescription`                                             | `string`  | ✅           | Description de ce que fait le sous-agent           |
| `model`                                                        | `string`  |             |                                                    |
| Modèle utilisé par le sous-agent, s’il est connu dès le départ |           |             |                                                    |

### `subagent.completed`

Un sous-agent a terminé avec succès.

| Champ de données                                       | Catégorie | Obligatoire | Description                                    |
| ------------------------------------------------------ | --------- | ----------- | ---------------------------------------------- |
| `toolCallId`                                           | `string`  | ✅           | Correspond au `subagent.started` correspondant |
| `agentName`                                            | `string`  | ✅           | Nom interne                                    |
| `agentDisplayName`                                     | `string`  | ✅           | Nom d'affichage                                |
| `model`                                                | `string`  |             |                                                |
| Modèle utilisé par le sous-agent                       |           |             |                                                |
| `durationMs`                                           | `number`  |             |                                                |
| Durée d’exécution de l’horloge murale en millisecondes |           |             |                                                |
| `totalTokens`                                          | `number`  |             |                                                |
| Nombre total de jetons d’entrée et de sortie consommés |           |             |                                                |
| `totalToolCalls`                                       | `number`  |             |                                                |
| Nombre total d’appels d’outil effectués                |           |             |                                                |

### `subagent.failed`

Un sous-agent a rencontré une erreur.

| Champ de données                                                     | Catégorie | Obligatoire | Description                                    |
| -------------------------------------------------------------------- | --------- | ----------- | ---------------------------------------------- |
| `toolCallId`                                                         | `string`  | ✅           | Correspond au `subagent.started` correspondant |
| `agentName`                                                          | `string`  | ✅           | Nom interne                                    |
| `agentDisplayName`                                                   | `string`  | ✅           | Nom d'affichage                                |
| `error`                                                              | `string`  | ✅           | Message d’erreur                               |
| `model`                                                              | `string`  |             |                                                |
| Modèle sélectionné pour le sous-agent, lorsqu’il est connu           |           |             |                                                |
| `durationMs`                                                         | `number`  |             |                                                |
| Durée d’exécution de l’horloge murale en millisecondes               |           |             |                                                |
| `totalTokens`                                                        | `number`  |             |                                                |
| Nombre total de jetons d’entrée et de sortie consommés avant l’échec |           |             |                                                |
| `totalToolCalls`                                                     | `number`  |             |                                                |
| Nombre total d’appels d’outils effectués avant l’échec               |           |             |                                                |

### `subagent.selected`

Un agent personnalisé a été sélectionné (déduit) pour gérer la requête actuelle.

| Champ de données   | Catégorie          | Obligatoire | Description                                                            |
| ------------------ | ------------------ | ----------- | ---------------------------------------------------------------------- |
| `agentName`        | `string`           | ✅           | Nom interne de l’agent sélectionné                                     |
| `agentDisplayName` | `string`           | ✅           | Nom d'affichage                                                        |
| `tools`            | `string[] \| null` | ✅           | Noms d’outils disponibles pour cet agent ; `null` pour tous les outils |

### `subagent.deselected`

Un agent personnalisé a été désélectionné, retournant à l’agent par défaut.
**La charge utile des données est vide (`{}`)**.

### `skill.invoked`

Une compétence a été activée pour la conversation actuelle.

| Champ de données                                                         | Catégorie  | Obligatoire | Description                                                  |
| ------------------------------------------------------------------------ | ---------- | ----------- | ------------------------------------------------------------ |
| `name`                                                                   | `string`   | ✅           | Nom de la compétence                                         |
| `path`                                                                   | `string`   | ✅           | Chemin d’accès au fichier de la définition SKILL.md          |
| `content`                                                                | `string`   | ✅           | Contenu de compétences intégral intégré dans la conversation |
| `allowedTools`                                                           | `string[]` |             |                                                              |
| Outils approuvés automatiquement pendant que cette compétence est active |            |             |                                                              |
| `pluginName`                                                             | `string`   |             |                                                              |
| Le plug-in d'origine de la compétence                                    |            |             |                                                              |
| `pluginVersion`                                                          | `string`   |             |                                                              |
| Version du plug-in                                                       |            |             |                                                              |

## Autres événements

### `abort`

Le tour actuel a été abandonné.

| Champ de données | Catégorie | Obligatoire | Description                                                        |
| ---------------- | --------- | ----------- | ------------------------------------------------------------------ |
| `reason`         | `string`  | ✅           | Pourquoi le tour a été abandonné (par exemple, `"user initiated"`) |

### `user.message`

L’utilisateur a envoyé un message. Enregistré pour la chronologie de la session.

| Champ de données                                                                | Catégorie      | Obligatoire | Description                       |
| ------------------------------------------------------------------------------- | -------------- | ----------- | --------------------------------- |
| `content`                                                                       | `string`       | ✅           | Texte du message de l’utilisateur |
| `transformedContent`                                                            | `string`       |             |                                   |
| Version transformée après prétraitement                                         |                |             |                                   |
| `attachments`                                                                   | `Attachment[]` |             |                                   |
| Pièces jointes de type fichier, répertoire, sélection, blob ou référence GitHub |                |             |                                   |
| `source`                                                                        | `string`       |             |                                   |
| Identificateur de source de message                                             |                |             |                                   |
| `agentMode`                                                                     | `string`       |             |                                   |
| Mode agent : `"interactive"`, , `"plan"``"autopilot"`ou`"shell"`                |                |             |                                   |
| `interactionId`                                                                 | `string`       |             |                                   |
| ID d’interaction CAPI                                                           |                |             |                                   |

### `system.message`

Une invite de système ou de développeur a été injectée dans la conversation.

| Champ de données               | Catégorie                        | Obligatoire | Description       |
| ------------------------------ | -------------------------------- | ----------- | ----------------- |
| `content`                      | `string`                         | ✅           | Texte de l’invite |
| `role`                         | `"system" \| "developer"`        | ✅           | Rôle du message   |
| `name`                         | `string`                         |             |                   |
| Identificateur de la source    |                                  |             |                   |
| `metadata`                     | `{ promptVersion?, variables? }` |             |                   |
| Métadonnées du modèle d'invite |                                  |             |                   |

### `external_tool.requested`

L’agent souhaite appeler un outil externe (fourni par le consommateur du SDK).

| Champ de données               | Catégorie | Obligatoire | Description                                                     |
| ------------------------------ | --------- | ----------- | --------------------------------------------------------------- |
| `requestId`                    | `string`  | ✅           | Utilisez-le pour répondre via `session.respondToExternalTool()` |
| `sessionId`                    | `string`  | ✅           | Session à laquelle cette demande appartient                     |
| `toolCallId`                   | `string`  | ✅           | Identifiant d'outil appelé pour cet appel                       |
| `toolName`                     | `string`  | ✅           | Nom de l’outil externe                                          |
| `arguments`                    | `object`  |             |                                                                 |
| Arguments en faveur de l'outil |           |             |                                                                 |

### `external_tool.completed`

Une demande d’outil externe a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                           |
| ---------------- | --------- | ----------- | ----------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Correspond au `external_tool.requested` correspondant |

### `exit_plan_mode.requested`

Éphémère. L’agent a créé un plan et souhaite quitter le mode plan.

| Champ de données    | Catégorie  | Obligatoire | Description                                                                 |
| ------------------- | ---------- | ----------- | --------------------------------------------------------------------------- |
| `requestId`         | `string`   | ✅           | Utilisez-le pour répondre via `session.respondToExitPlanMode()`             |
| `summary`           | `string`   | ✅           | Résumé du plan                                                              |
| `planContent`       | `string`   | ✅           | Contenu complet du fichier de plan                                          |
| `actions`           | `string[]` | ✅           | Actions utilisateur disponibles (par exemple, approuver, modifier, rejeter) |
| `recommendedAction` | `string`   | ✅           | Action suggérée                                                             |

### `exit_plan_mode.completed`

Éphémère. Une demande de mode de plan de sortie a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                            |
| ---------------- | --------- | ----------- | ------------------------------------------------------ |
| `requestId`      | `string`  | ✅           | Correspond au `exit_plan_mode.requested` correspondant |

### `command.queued`

Éphémère. Une commande slash a été mise en file d’attente pour exécution.

| Champ de données | Catégorie | Obligatoire | Description                                                      |
| ---------------- | --------- | ----------- | ---------------------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Utilisez-le pour répondre via `session.respondToQueuedCommand()` |
| `command`        | `string`  | ✅           | Texte de la commande slash (par exemple, `/help`, `/clear`)      |

### `command.completed`

Éphémère. Une commande mise en file d’attente a été résolue.

| Champ de données | Catégorie | Obligatoire | Description                                  |
| ---------------- | --------- | ----------- | -------------------------------------------- |
| `requestId`      | `string`  | ✅           | Correspond au `command.queued` correspondant |

### `session_limits_exhausted.requested`

Éphémère. Le budget de session actuel a été épuisé et le runtime a besoin d’une décision de l’utilisateur avant de continuer.

| Champ de données | Catégorie | Obligatoire | Description                                                                      |
| ---------------- | --------- | ----------- | -------------------------------------------------------------------------------- |
| `requestId`      | `string`  | ✅           | Utilisez cet ID lors de la réponse à la demande de limite épuisée en attente     |
| `maxAiCredits`   | `number`  | ✅           | Nombre maximal de crédits IA configurés pour la fenêtre de comptabilité actuelle |
| `usedAiCredits`  | `number`  | ✅           | Crédits IA déjà consommés dans la fenêtre de comptabilité actuelle               |

### `session_limits_exhausted.completed`

Éphémère. Une demande de limite épuisée en attente a été résolue.

| Champ de données                                                                | Catégorie                               | Obligatoire | Description                                                                 |
| ------------------------------------------------------------------------------- | --------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| `requestId`                                                                     | `string`                                | ✅           | Correspond à l’événement correspondant `session_limits_exhausted.requested` |
| `response.action`                                                               | `"add" \| "set" \| "unset" \| "cancel"` | ✅           | Action sélectionnée pour la requête de limite atteinte                      |
| `response.additionalAiCredits`                                                  | `number`                                |             |                                                                             |
| Crédits IA à ajouter au maximum actuel quand `response.action` est `"add"`      |                                         |             |                                                                             |
| `response.maxAiCredits`                                                         | `number`                                |             |                                                                             |
| Nouveau nombre maximal absolu de crédits IA quand `response.action` est `"set"` |                                         |             |                                                                             |

## Référence rapide : flux de transformation agentique

Un tour agentique classique émet des événements dans cet ordre :

```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
│   ├── 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)
```

## Tous les types d’événements en un clin d’œil

Ce tableau répertorie les principaux champs de la charge utile `data`. Les champs d’enveloppe courants sont documentés ci-dessus.

| Type d’événement                                                                                          | Éphémère        | Catégorie          | Champs de données clés   |
| --------------------------------------------------------------------------------------------------------- | --------------- | ------------------ | ------------------------ |
| `assistant.turn_start`                                                                                    |                 |                    |                          |
| Assistant                                                                                                 |                 |                    |                          |
| `turnId`, `interactionId?`                                                                                |                 |                    |                          |
| `assistant.intent`                                                                                        | ✅               | Assistant          | `intent`                 |
| `assistant.reasoning`                                                                                     |                 |                    |                          |
| Assistant                                                                                                 |                 |                    |                          |
| `reasoningId`, `content`                                                                                  |                 |                    |                          |
| `assistant.reasoning_delta`                                                                               | ✅               | Assistant          |                          |
| `reasoningId`, `deltaContent`                                                                             |                 |                    |                          |
| `assistant.streaming_delta`                                                                               | ✅               | Assistant          | `totalResponseSizeBytes` |
| `assistant.message`                                                                                       |                 |                    |                          |
| Assistant                                                                                                 |                 |                    |                          |
| `messageId`, , `content``toolRequests?`, , `outputTokens?``phase?`                                        |                 |                    |                          |
| `assistant.message_delta`                                                                                 | ✅               | Assistant          |                          |
| `messageId`, `deltaContent`                                                                               |                 |                    |                          |
| `assistant.turn_end`                                                                                      |                 |                    |                          |
| Assistant                                                                                                 | `turnId`        |                    |                          |
| `assistant.usage`                                                                                         | ✅               | Assistant          |                          |
| `model`, , `apiEndpoint?`, `inputTokens?``outputTokens?`, , `cost?``duration?`                            |                 |                    |                          |
| `tool.user_requested`                                                                                     |                 |                    |                          |
| Tool                                                                                                      |                 |                    |                          |
| `toolCallId`, `toolName`, `arguments?`                                                                    |                 |                    |                          |
| `tool.execution_start`                                                                                    |                 |                    |                          |
| Tool                                                                                                      |                 |                    |                          |
| `toolCallId`, `toolName`, `arguments?`, `mcpServerName?`                                                  |                 |                    |                          |
| `tool.execution_partial_result`                                                                           | ✅               | Tool               |                          |
| `toolCallId`, `partialOutput`                                                                             |                 |                    |                          |
| `tool.execution_progress`                                                                                 | ✅               | Tool               |                          |
| `toolCallId`, `progressMessage`                                                                           |                 |                    |                          |
| `tool.execution_complete`                                                                                 |                 |                    |                          |
| Tool                                                                                                      |                 |                    |                          |
| `toolCallId`, `success`, `result?`, `error?`                                                              |                 |                    |                          |
| `session.idle`                                                                                            | ✅               | Session            | `backgroundTasks?`       |
| `session.error`                                                                                           |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| `errorType`, `message`, `statusCode?`                                                                     |                 |                    |                          |
| `session.compaction_start`                                                                                |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| *(vide)*                                                                                                  |                 |                    |                          |
| `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.session_limits_changed`                                                                          |                 |                    |                          |
| Session                                                                                                   | `sessionLimits` |                    |                          |
| `session.usage_checkpoint`                                                                                |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| `totalNanoAiu`, `totalPremiumRequests?`                                                                   |                 |                    |                          |
| `session.task_complete`                                                                                   |                 |                    |                          |
| Session                                                                                                   | `summary?`      |                    |                          |
| `session.shutdown`                                                                                        |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| `shutdownType`, `codeChanges`, `modelMetrics`                                                             |                 |                    |                          |
| `permission.requested`                                                                                    |                 |                    |                          |
| Autorisation                                                                                              |                 |                    |                          |
| `requestId`, `permissionRequest`                                                                          |                 |                    |                          |
| `permission.completed`                                                                                    |                 |                    |                          |
| Autorisation                                                                                              |                 |                    |                          |
| `requestId`, `result.kind`                                                                                |                 |                    |                          |
| `user_input.requested`                                                                                    | ✅               | Entrée utilisateur |                          |
| `requestId`, `question`, `choices?`                                                                       |                 |                    |                          |
| `user_input.completed`                                                                                    | ✅               | Entrée utilisateur | `requestId`              |
| `elicitation.requested`                                                                                   | ✅               | Entrée utilisateur |                          |
| `requestId`, `message`, `requestedSchema`                                                                 |                 |                    |                          |
| `elicitation.completed`                                                                                   | ✅               | Entrée utilisateur | `requestId`              |
| `subagent.started`                                                                                        |                 |                    |                          |
| Sous-agent                                                                                                |                 |                    |                          |
| `toolCallId`, `agentName`, `agentDisplayName`, `model?`                                                   |                 |                    |                          |
| `subagent.completed`                                                                                      |                 |                    |                          |
| Sous-agent                                                                                                |                 |                    |                          |
| `toolCallId`, `agentName`, `model?`, `agentDisplayName`, `durationMs?`, `totalTokens?`, `totalToolCalls?` |                 |                    |                          |
| `subagent.failed`                                                                                         |                 |                    |                          |
| Sous-agent                                                                                                |                 |                    |                          |
| `toolCallId`, `agentName`, `model?`, `error`, `durationMs?`, `totalTokens?`, `totalToolCalls?`            |                 |                    |                          |
| `subagent.selected`                                                                                       |                 |                    |                          |
| Sous-agent                                                                                                |                 |                    |                          |
| `agentName`, `agentDisplayName`, `tools`                                                                  |                 |                    |                          |
| `subagent.deselected`                                                                                     |                 |                    |                          |
| Sous-agent                                                                                                |                 |                    |                          |
| *(vide)*                                                                                                  |                 |                    |                          |
| `skill.invoked`                                                                                           |                 |                    |                          |
| Compétence                                                                                                |                 |                    |                          |
| `name`, `path`, `content`, `allowedTools?`                                                                |                 |                    |                          |
| `abort`                                                                                                   |                 |                    |                          |
| Contrôle                                                                                                  | `reason`        |                    |                          |
| `user.message`                                                                                            |                 |                    |                          |
| Utilisateur                                                                                               |                 |                    |                          |
| `content`, `attachments?`, `agentMode?`                                                                   |                 |                    |                          |
| `system.message`                                                                                          |                 |                    |                          |
| System                                                                                                    |                 |                    |                          |
| `content`, `role`                                                                                         |                 |                    |                          |
| `external_tool.requested`                                                                                 |                 |                    |                          |
| Outil externe                                                                                             |                 |                    |                          |
| `requestId`, `toolName`, `arguments?`                                                                     |                 |                    |                          |
| `external_tool.completed`                                                                                 |                 |                    |                          |
| Outil externe                                                                                             | `requestId`     |                    |                          |
| `command.queued`                                                                                          | ✅               | Command            |                          |
| `requestId`, `command`                                                                                    |                 |                    |                          |
| `command.completed`                                                                                       | ✅               | Command            | `requestId`              |
| `session_limits_exhausted.requested`                                                                      | ✅               | Session            |                          |
| `requestId`, `maxAiCredits`, `usedAiCredits`                                                              |                 |                    |                          |
| `session_limits_exhausted.completed`                                                                      | ✅               | Session            |                          |
| `requestId`, `response.action`                                                                            |                 |                    |                          |
| `exit_plan_mode.requested`                                                                                | ✅               | Mode de plan       |                          |
| `requestId`, `summary`, `planContent`, `actions`                                                          |                 |                    |                          |
| `exit_plan_mode.completed`                                                                                | ✅               | Mode de plan       | `requestId`              |