# Eventos de la sesión de transmisión

Cada acción que realiza el agente de Copilot —pensar, escribir código o ejecutar herramientas— se emite como un evento de sesión al que puedes suscribirte. Esta guía es una referencia de nivel de campo para cada tipo de evento para saber exactamente qué datos esperar sin leer el origen del SDK.

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

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

## Visión general

Cuando `streaming: true` se establece en una sesión, el SDK emite eventos **efímeros** en tiempo real (deltas, actualizaciones de progreso) junto con eventos **persistentes** (mensajes completos, resultados de la herramienta). Todos los eventos comparten un sobre común y llevan una `data` carga cuya forma depende del evento `type`.

![Diagrama: diagrama de secuencia que muestra el proceso descrito.](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)

| Concepto               | Description                                                                                                                        |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Evento efímero**     | Transitorio; se transmite en tiempo real, pero **no** se conserva en el registro de sesión. No se reproduce al reanudar la sesión. |
| **Evento persistente** | Guardado en el registro de eventos de sesión en el disco. Se reproduce al reanudar una sesión.                                     |
| **Evento Delta**       | Un fragmento de streaming efímero (texto o razonamiento). Acumule las diferencias para crear el contenido completo.                |
| **`parentId` cadena**  | Cada evento `parentId` apunta al evento anterior, formando una lista enlazada que se puede recorrer.                               |

## Contenedor de eventos

Cada evento de sesión, independientemente del tipo, incluye estos campos:

| Campo                                                                         | Tipo                          | Description                                                                                                                        |
| ----------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `id`                                                                          |                               |                                                                                                                                    |
| `string` (UUID v4)                                                            | Identificador de evento único |                                                                                                                                    |
| `timestamp`                                                                   |                               |                                                                                                                                    |
| `string` (ISO 8601)                                                           | Cuándo se creó el evento      |                                                                                                                                    |
| `parentId`                                                                    | `string \| null`              | Id. del evento anterior de la cadena; `null` para el primer evento                                                                 |
| `agentId`                                                                     | `string?`                     | Id. de instancia del subagente para eventos originados por subagente; ausente para los eventos raíz/principal y de nivel de sesión |
| `ephemeral`                                                                   | `boolean?`                    |                                                                                                                                    |
| `true` para eventos transitorios; ausente o `false` para eventos persistentes |                               |                                                                                                                                    |
| `type`                                                                        | `string`                      | Discriminador de tipo de evento (consulte las tablas siguientes)                                                                   |
| `data`                                                                        | `object`                      | Carga específica del evento                                                                                                        |

## Suscribirse a eventos

<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.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
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
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)** Estos SDK usan tipos de datos independientes por evento (por ejemplo, `AssistantMessageDeltaData`), por lo que solo existen los campos pertinentes en cada tipo.
>
> \[!TIP]
> **(.NET)** El SDK de .NET usa clases de datos independientes y fuertemente tipadas por evento (por ejemplo, `AssistantMessageDeltaData`), por lo que solo existen los campos pertinentes en cada tipo.
>
> \[!TIP]
> **(TypeScript)** El SDK de TypeScript utiliza una unión discriminada: cuando se realiza una coincidencia con `event.type`, la carga `data` se restringe automáticamente a la forma correcta.

## Representar solo la respuesta del agente primario

Los eventos de los subagentes comparten el flujo de la sesión principal e incluyen `agentId` en el nivel de sobre. Los eventos del agente raíz/principal y los eventos en el nivel de sesión omiten `agentId`, por lo que los renderizadores del chat principal pueden ignorar los eventos del asistente en los que se ha establecido `agentId` y, en su lugar, redirigir dichos eventos a trazas o a la interfaz de usuario de progreso.

<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>

## Eventos del asistente

Estos eventos realizan un seguimiento del ciclo de vida de respuesta del agente, desde el inicio del turno mediante fragmentos transmitidos en streaming hasta el mensaje final.

### `assistant.turn_start`

Se genera cuando el agente inicia a procesar un turno.

| Campo de datos                                               | Tipo     | Obligatorio | Description                                                        |
| ------------------------------------------------------------ | -------- | ----------- | ------------------------------------------------------------------ |
| `turnId`                                                     | `string` | ✅           | Identificador de turno (normalmente un número de turno con cadena) |
| `interactionId`                                              | `string` |             |                                                                    |
| Id. de interacción de CAPI para la correlación de telemetría |          |             |                                                                    |

### `assistant.intent`

Efímero. Descripción breve de lo que el agente está haciendo actualmente, actualizado a medida que funciona.

| Campo de datos | Tipo     | Obligatorio | Description                                                                  |
| -------------- | -------- | ----------- | ---------------------------------------------------------------------------- |
| `intent`       | `string` | ✅           | Intención comprensible para humanos (p. ej., "Explorando la base de código") |

### `assistant.reasoning`

Bloque completo de razonamiento ampliado del modelo. Emitido después de finalizar el razonamiento.

| Campo de datos | Tipo     | Obligatorio | Description                                        |
| -------------- | -------- | ----------- | -------------------------------------------------- |
| `reasoningId`  | `string` | ✅           | Identificador único de este bloque de razonamiento |
| `content`      | `string` | ✅           | Texto completo de pensamiento avanzado             |

### `assistant.reasoning_delta`

Efímero. Fragmento incremental del razonamiento ampliado del modelo, transmitido en tiempo real.

| Campo de datos | Tipo     | Obligatorio | Description                                                        |
| -------------- | -------- | ----------- | ------------------------------------------------------------------ |
| `reasoningId`  | `string` | ✅           | Coincide con el evento correspondiente `assistant.reasoning` .     |
| `deltaContent` | `string` | ✅           | Fragmento de texto que se va a anexar al contenido de razonamiento |

### `assistant.message`

Respuesta completa del asistente para esta llamada al LLM. Puede incluir solicitudes de invocación de herramientas.

| Campo de datos                                                                       | Tipo            | Obligatorio | Description                         |
| ------------------------------------------------------------------------------------ | --------------- | ----------- | ----------------------------------- |
| `messageId`                                                                          | `string`        | ✅           | Identificador único de este mensaje |
| `content`                                                                            | `string`        | ✅           | Respuesta de texto del asistente    |
| `toolRequests`                                                                       | `ToolRequest[]` |             |                                     |
| Llamadas a herramientas que el asistente desea realizar (ver abajo)                  |                 |             |                                     |
| `reasoningOpaque`                                                                    | `string`        |             |                                     |
| Pensamiento extendido cifrado (modelos antrópicos); vinculado a sesión               |                 |             |                                     |
| `reasoningText`                                                                      | `string`        |             |                                     |
| Texto de razonamiento legible a partir del pensamiento ampliado                      |                 |             |                                     |
| `encryptedContent`                                                                   | `string`        |             |                                     |
| Contenido de razonamiento cifrado (modelos de OpenAI); vinculado a la sesión         |                 |             |                                     |
| `phase`                                                                              | `string`        |             |                                     |
| Fase de generación (por ejemplo, `"thinking"` frente a `"response"`)                 |                 |             |                                     |
| `outputTokens`                                                                       | `number`        |             |                                     |
| Recuento real de tokens de salida de la respuesta de la API                          |                 |             |                                     |
| `interactionId`                                                                      | `string`        |             |                                     |
| ID de interacción de CAPI para telemetría                                            |                 |             |                                     |
| `parentToolCallId`                                                                   | `string`        |             |                                     |
| Deprecated. Utilizar `agentId` en el nivel de sobre para la atribución de subagentes |                 |             |                                     |

\*\*
`ToolRequest` campos:\*\*

| Campo                                                                         | Tipo                     | Obligatorio | Description                                                          |
| ----------------------------------------------------------------------------- | ------------------------ | ----------- | -------------------------------------------------------------------- |
| `toolCallId`                                                                  | `string`                 | ✅           | Identificador único para esta llamada de herramienta                 |
| `name`                                                                        | `string`                 | ✅           | Nombre de la herramienta (por ejemplo, `"bash"`, `"edit"`, `"grep"`) |
| `arguments`                                                                   | `object`                 |             |                                                                      |
| Argumentos analizados para la herramienta                                     |                          |             |                                                                      |
| `type`                                                                        | `"function" \| "custom"` |             |                                                                      |
| Tipo de llamada; el valor predeterminado es `"function"` cuando está ausente. |                          |             |                                                                      |

### `assistant.message_delta`

Efímero. Fragmento incremental de la respuesta de texto del asistente, transmitido en tiempo real.

| Campo de datos                                                                       | Tipo     | Obligatorio | Description                                                  |
| ------------------------------------------------------------------------------------ | -------- | ----------- | ------------------------------------------------------------ |
| `messageId`                                                                          | `string` | ✅           | Coincide con el evento correspondiente `assistant.message` . |
| `deltaContent`                                                                       | `string` | ✅           | Fragmento de texto que se va a anexar al mensaje             |
| `parentToolCallId`                                                                   | `string` |             |                                                              |
| Deprecated. Utilizar `agentId` en el nivel de sobre para la atribución de subagentes |          |             |                                                              |

### `assistant.turn_end`

Se genera cuando el agente finaliza un turno (todas las ejecuciones de herramientas se completan y se entrega la respuesta final).

| Campo de datos | Tipo     | Obligatorio | Description                                                     |
| -------------- | -------- | ----------- | --------------------------------------------------------------- |
| `turnId`       | `string` | ✅           | Coincide con el evento correspondiente `assistant.turn_start` . |

### `assistant.usage`

Efímero. Información de costos y uso de tokens para una llamada API individual.

| Campo de datos                                                                                                              | Tipo                                                                       | Obligatorio | Description                                         |
| --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------- | --------------------------------------------------- |
| `model`                                                                                                                     | `string`                                                                   | ✅           | Identificador del modelo (por ejemplo, `"gpt-5.4"`) |
| `inputTokens`                                                                                                               | `number`                                                                   |             |                                                     |
| Tokens de entrada consumidos                                                                                                |                                                                            |             |                                                     |
| `outputTokens`                                                                                                              | `number`                                                                   |             |                                                     |
| Tokens de salida generados                                                                                                  |                                                                            |             |                                                     |
| `reasoningTokens`                                                                                                           | `number`                                                                   |             |                                                     |
| Tokens de salida usados para el razonamiento o la cadena de pensamiento (subconjunto de `outputTokens`)                     |                                                                            |             |                                                     |
| `cacheReadTokens`                                                                                                           | `number`                                                                   |             |                                                     |
| Tokens leídos de la caché de solicitud                                                                                      |                                                                            |             |                                                     |
| `cacheWriteTokens`                                                                                                          | `number`                                                                   |             |                                                     |
| Tokens escritos para solicitar caché                                                                                        |                                                                            |             |                                                     |
| `cacheExpiresAt`                                                                                                            | `string`                                                                   |             |                                                     |
| Marca de tiempo ISO 8601 cuando caduca la caché de indicaciones para esta llamada al modelo                                 |                                                                            |             |                                                     |
| `contentFilterTriggered`                                                                                                    | `boolean`                                                                  |             |                                                     |
| Indica si la respuesta se ha bloqueado o truncado mediante el filtrado de contenido (`finish_reason === 'content_filter'`)  |                                                                            |             |                                                     |
| `finishReason`                                                                                                              | `string`                                                                   |             |                                                     |
| Motivo de finalización del modelo (por ejemplo, `"stop"`, `"length"`, `"tool_calls"`, `"content_filter"`)                   |                                                                            |             |                                                     |
| `cost`                                                                                                                      | `number`                                                                   |             |                                                     |
| Coste del multiplicador de modelos para la facturación                                                                      |                                                                            |             |                                                     |
| `duration`                                                                                                                  | `number`                                                                   |             |                                                     |
| Duración de la llamada API en milisegundos                                                                                  |                                                                            |             |                                                     |
| `timeToFirstTokenMs`                                                                                                        | `number`                                                                   |             |                                                     |
| Tiempo desde el envío de solicitudes hasta el primer token recibido (latencia de streaming)                                 |                                                                            |             |                                                     |
| `interTokenLatencyMs`                                                                                                       | `number`                                                                   |             |                                                     |
| Latencia media entre tokens consecutivos (rendimiento de streaming)                                                         |                                                                            |             |                                                     |
| `reasoningEffort`                                                                                                           | `string`                                                                   |             |                                                     |
| Nivel de esfuerzo de razonamiento usado para esta llamada (por ejemplo, `"low"`, `"medium"`, `"high"`)                      |                                                                            |             |                                                     |
| `initiator`                                                                                                                 | `string`                                                                   |             |                                                     |
| Lo que desencadenó esta llamada (por ejemplo, `"sub-agent"`); ausente para el iniciado por el usuario                       |                                                                            |             |                                                     |
| `apiCallId`                                                                                                                 | `string`                                                                   |             |                                                     |
| Identificador de finalización del proveedor (por ejemplo, `chatcmpl-abc123`)                                                |                                                                            |             |                                                     |
| `serviceRequestId`                                                                                                          | `string`                                                                   |             |                                                     |
| Identificador de solicitud de servicio de Copilot (`x-copilot-service-request-id`) para la correlación del registro de CAPI |                                                                            |             |                                                     |
| `apiEndpoint`                                                                                                               | `"/chat/completions" \| "/v1/messages" \| "/responses" \| "ws:/responses"` |             |                                                     |
| Punto de conexión de API usado para la llamada de modelo; útil para la observabilidad y la atribución de costos.            |                                                                            |             |                                                     |
| `ws:/responses` es la variante websocket de la API de respuestas.                                                           |                                                                            |             |                                                     |
| `providerCallId`                                                                                                            | `string`                                                                   |             |                                                     |
| ID de trazado de solicitudes de GitHub (`x-github-request-id`)                                                              |                                                                            |             |                                                     |
| `parentToolCallId`                                                                                                          | `string`                                                                   |             |                                                     |
| Deprecated. Utilizar `agentId` en el nivel de sobre para la atribución de subagentes                                        |                                                                            |             |                                                     |
| `quotaSnapshots`                                                                                                            | `Record<string, QuotaSnapshot>`                                            |             |                                                     |
| Uso de recursos por cuota, con clave según el identificador de cuota                                                        |                                                                            |             |                                                     |
| `copilotUsage`                                                                                                              | `CopilotUsage`                                                             |             |                                                     |
| Desglose de costos de tokens detallados de la API                                                                           |                                                                            |             |                                                     |

### `assistant.streaming_delta`

Efímero. Indicador de progreso de red de bajo nivel: bytes totales recibidos de la respuesta de la API de streaming.

| Campo de datos           | Tipo     | Obligatorio | Description                            |
| ------------------------ | -------- | ----------- | -------------------------------------- |
| `totalResponseSizeBytes` | `number` | ✅           | Bytes acumulados recibidos hasta ahora |

## Eventos de ejecución de herramientas

Estos eventos realizan un seguimiento del ciclo de vida completo de cada invocación de herramienta, desde el modelo que solicita una llamada de herramienta a través de la ejecución hasta la finalización.

### `tool.execution_start`

Se genera cuando una herramienta comienza a ejecutarse.

| Campo de datos                                                                       | Tipo     | Obligatorio | Description                                                          |
| ------------------------------------------------------------------------------------ | -------- | ----------- | -------------------------------------------------------------------- |
| `toolCallId`                                                                         | `string` | ✅           | Identificador único de esta llamada de herramienta                   |
| `toolName`                                                                           | `string` | ✅           | Nombre de la herramienta (por ejemplo, `"bash"`, `"edit"`, `"grep"`) |
| `arguments`                                                                          | `object` |             |                                                                      |
| Argumentos analizados pasados a la herramienta                                       |          |             |                                                                      |
| `mcpServerName`                                                                      | `string` |             |                                                                      |
| Nombre del servidor MCP, cuando un servidor MCP proporciona la herramienta           |          |             |                                                                      |
| `mcpToolName`                                                                        | `string` |             |                                                                      |
| Nombre de la herramienta original en el servidor MCP                                 |          |             |                                                                      |
| `parentToolCallId`                                                                   | `string` |             |                                                                      |
| Deprecated. Utilizar `agentId` en el nivel de sobre para la atribución de subagentes |          |             |                                                                      |

### `tool.execution_partial_result`

Efímero. Salida incremental de una herramienta en ejecución (p. ej., salida de bash en streaming).

| Campo de datos  | Tipo     | Obligatorio | Description                                            |
| --------------- | -------- | ----------- | ------------------------------------------------------ |
| `toolCallId`    | `string` | ✅           | Coincide con el correspondiente `tool.execution_start` |
| `partialOutput` | `string` | ✅           | Fragmento de salida incremental                        |

### `tool.execution_progress`

Efímero. Estado de progreso legible de una herramienta en ejecución (por ejemplo, notificaciones de progreso del servidor MCP).

| Campo de datos    | Tipo     | Obligatorio | Description                                            |
| ----------------- | -------- | ----------- | ------------------------------------------------------ |
| `toolCallId`      | `string` | ✅           | Coincide con el correspondiente `tool.execution_start` |
| `progressMessage` | `string` | ✅           | Mensaje de estado de progreso                          |

### `tool.execution_complete`

Se genera cuando una herramienta termina de ejecutarse correctamente o con un error.

| Campo de datos                                                                             | Tipo                 | Obligatorio | Description                                            |
| ------------------------------------------------------------------------------------------ | -------------------- | ----------- | ------------------------------------------------------ |
| `toolCallId`                                                                               | `string`             | ✅           | Coincide con el correspondiente `tool.execution_start` |
| `success`                                                                                  | `boolean`            | ✅           | Si la ejecución se realizó correctamente               |
| `model`                                                                                    | `string`             |             |                                                        |
| Modelo que generó esta invocación de herramienta                                           |                      |             |                                                        |
| `interactionId`                                                                            | `string`             |             |                                                        |
| ID de interacción de CAPI                                                                  |                      |             |                                                        |
| `isUserRequested`                                                                          | `boolean`            |             |                                                        |
|                                                                                            |                      |             |                                                        |
| `true` cuando el usuario solicitó explícitamente el uso de esta herramienta                |                      |             |                                                        |
| `result`                                                                                   | `Result`             |             |                                                        |
| Presente en caso de éxito (véase más abajo)                                                |                      |             |                                                        |
| `error`                                                                                    | `{ message, code? }` |             |                                                        |
| Presente en caso de fallo                                                                  |                      |             |                                                        |
| `toolTelemetry`                                                                            | `object`             |             |                                                        |
| Telemetría específica de la herramienta (por ejemplo, recuentos de comprobación de CodeQL) |                      |             |                                                        |
| `parentToolCallId`                                                                         | `string`             |             |                                                        |
| Deprecated. Utilizar `agentId` en el nivel de sobre para la atribución de subagentes       |                      |             |                                                        |

\*\*
`Result` campos:\*\*

| Campo                                                                                             | Tipo             | Obligatorio | Description                                                                            |
| ------------------------------------------------------------------------------------------------- | ---------------- | ----------- | -------------------------------------------------------------------------------------- |
| `content`                                                                                         | `string`         | ✅           | Resultado conciso enviado al LLM (podría truncarse para la eficacia del uso de tokens) |
| `detailedContent`                                                                                 | `string`         |             |                                                                                        |
| Resultado completo para su visualización, conservando el contenido completo, como las diferencias |                  |             |                                                                                        |
| `contents`                                                                                        | `ContentBlock[]` |             |                                                                                        |
| Bloques de contenido estructurados (texto, terminal, imagen, audio, recurso)                      |                  |             |                                                                                        |

### `tool.user_requested`

Se activa cuando el usuario solicita explícitamente una invocación de herramienta, en lugar de que el modelo decida llamarla.

| Campo de datos                | Tipo     | Obligatorio | Description                                            |
| ----------------------------- | -------- | ----------- | ------------------------------------------------------ |
| `toolCallId`                  | `string` | ✅           | Identificador único de esta llamada de herramienta     |
| `toolName`                    | `string` | ✅           | Nombre de la herramienta que el usuario quiere invocar |
| `arguments`                   | `object` |             |                                                        |
| Argumentos para la invocación |          |             |                                                        |

## Eventos del ciclo de vida de la sesión

### `session.idle`

Efímero. El agente ha terminado todo el procesamiento y está listo para el siguiente mensaje. Esta es la señal de que un turno ha finalizado por completo.

| Campo de datos                                                             | Tipo      | Obligatorio | Description |
| -------------------------------------------------------------------------- | --------- | ----------- | ----------- |
| `aborted`                                                                  | `boolean` |             |             |
| Verdadero cuando el turno anterior se canceló mediante una señal de aborto |           |             |             |

### `session.error`

Error durante el procesamiento de la sesión.

| Campo de datos                                                                                      | Tipo     | Obligatorio | Description                                                                     |
| --------------------------------------------------------------------------------------------------- | -------- | ----------- | ------------------------------------------------------------------------------- |
| `errorType`                                                                                         | `string` | ✅           | Categoría de error (por ejemplo, `"authentication"`, `"quota"`, `"rate_limit"`) |
| `message`                                                                                           | `string` | ✅           | Mensaje de error legible por humanos                                            |
| `stack`                                                                                             | `string` |             |                                                                                 |
| Traza de pila de errores                                                                            |          |             |                                                                                 |
| `statusCode`                                                                                        | `number` |             |                                                                                 |
| Código de estado HTTP de la solicitud ascendente                                                    |          |             |                                                                                 |
| `providerCallId`                                                                                    | `string` |             |                                                                                 |
| Identificador de seguimiento de solicitudes de GitHub para la correlación de registros del servidor |          |             |                                                                                 |

### `session.compaction_start`

Se ha iniciado la compactación de ventanas de contexto.
**La carga de datos está vacía (`{}`)**.

### `session.compaction_complete`

La compactación de la ventana de contexto finalizó.

| Campo de datos                                                        | Tipo                             | Obligatorio | Description                                 |
| --------------------------------------------------------------------- | -------------------------------- | ----------- | ------------------------------------------- |
| `success`                                                             | `boolean`                        | ✅           | Si la compactación se realizó correctamente |
| `error`                                                               | `string`                         |             |                                             |
| Mensaje de error si se produjo un error en la compactación            |                                  |             |                                             |
| `preCompactionTokens`                                                 | `number`                         |             |                                             |
| Tokens antes de la compactación                                       |                                  |             |                                             |
| `postCompactionTokens`                                                | `number`                         |             |                                             |
| Tokens después de la compactación                                     |                                  |             |                                             |
| `preCompactionMessagesLength`                                         | `number`                         |             |                                             |
| Recuento de mensajes antes de la compactación                         |                                  |             |                                             |
| `messagesRemoved`                                                     | `number`                         |             |                                             |
| Mensajes quitados                                                     |                                  |             |                                             |
| `tokensRemoved`                                                       | `number`                         |             |                                             |
| Tokens eliminados                                                     |                                  |             |                                             |
| `summaryContent`                                                      | `string`                         |             |                                             |
| Resumen generado por LLM del historial compacto                       |                                  |             |                                             |
| `checkpointNumber`                                                    | `number`                         |             |                                             |
| Número de instantánea de punto de control creado para la recuperación |                                  |             |                                             |
| `checkpointPath`                                                      | `string`                         |             |                                             |
| Ruta del archivo donde se almacenó el punto de control                |                                  |             |                                             |
| `compactionTokensUsed`                                                | `{ input, output, cachedInput }` |             |                                             |
| Uso de tokens para la llamada LLM de compactación                     |                                  |             |                                             |
| `requestId`                                                           | `string`                         |             |                                             |
| ID de rastreo de solicitud de GitHub para la llamada de compactación  |                                  |             |                                             |

### `session.title_changed`

Efímero. Se actualizó el título generado automáticamente de la sesión.

| Campo de datos | Tipo     | Obligatorio | Description            |
| -------------- | -------- | ----------- | ---------------------- |
| `title`        | `string` | ✅           | Nuevo título de sesión |

### `session.context_changed`

Se ha cambiado el directorio de trabajo o el contexto del repositorio de la sesión.

| Campo de datos                        | Tipo     | Obligatorio | Description                  |
| ------------------------------------- | -------- | ----------- | ---------------------------- |
| `cwd`                                 | `string` | ✅           | Directorio de trabajo actual |
| `gitRoot`                             | `string` |             |                              |
| Raíz del repositorio de Git           |          |             |                              |
| `repository`                          | `string` |             |                              |
| Repositorio en `"owner/name"` formato |          |             |                              |
| `branch`                              | `string` |             |                              |
| Rama actual de Git                    |          |             |                              |

### `session.usage_info`

Efímero. Instantánea de uso de la ventana de contexto.

| Campo de datos   | Tipo     | Obligatorio | Description                                                    |
| ---------------- | -------- | ----------- | -------------------------------------------------------------- |
| `tokenLimit`     | `number` | ✅           | Número máximo de tokens para la ventana de contexto del modelo |
| `currentTokens`  | `number` | ✅           | Tokens actuales en la ventana de contexto                      |
| `messagesLength` | `number` | ✅           | Recuento de mensajes actual en la conversación                 |

### `session.session_limits_changed`

Se han cambiado los límites de sesión para la ventana de contabilidad actual. Un `null``sessionLimits` valor significa que no hay límites activos.

| Campo de datos                                                                      | Tipo                          | Obligatorio | Description                                                       |
| ----------------------------------------------------------------------------------- | ----------------------------- | ----------- | ----------------------------------------------------------------- |
| `sessionLimits`                                                                     | `SessionLimitsConfig \| null` | ✅           | Límites de sesión actuales o `null` cuando no hay límites activos |
| `sessionLimits.maxAiCredits`                                                        | `number`                      |             |                                                                   |
| Créditos de IA máximos permitidos en la ventana de contabilidad actual de la sesión |                               |             |                                                                   |

### `session.usage_checkpoint`

Punto de control de uso agregado duradero que se usa para reconstruir la contabilidad cuando se reanuda una sesión.

| Campo de datos                                                                            | Tipo     | Obligatorio | Description                                                                                 |
| ----------------------------------------------------------------------------------------- | -------- | ----------- | ------------------------------------------------------------------------------------------- |
| `totalNanoAiu`                                                                            | `number` | ✅           | Coste acumulado de unidades de nano-IA en toda la sesión en el momento del punto de control |
| `totalPremiumRequests`                                                                    | `number` |             |                                                                                             |
| Número total de solicitudes de API Premium usadas en el momento del punto de comprobación |          |             |                                                                                             |

### `session.task_complete`

El agente ha completado su tarea asignada.

| Campo de datos                 | Tipo     | Obligatorio | Description |
| ------------------------------ | -------- | ----------- | ----------- |
| `summary`                      | `string` |             |             |
| Resumen de la tarea completada |          |             |             |

### `session.shutdown`

La sesión finalizó.

| Campo de datos                                             | Tipo                                          | Obligatorio | Description                                             |
| ---------------------------------------------------------- | --------------------------------------------- | ----------- | ------------------------------------------------------- |
| `shutdownType`                                             | `"routine" \| "error"`                        | ✅           | Apagado normal o fallo                                  |
| `errorReason`                                              | `string`                                      |             |                                                         |
| Descripción del error cuando `shutdownType` está `"error"` |                                               |             |                                                         |
| `totalPremiumRequests`                                     | `number`                                      | ✅           | Total de solicitudes de API Premium usadas              |
| `totalApiDurationMs`                                       | `number`                                      | ✅           | Tiempo de llamada API acumulado en milisegundos         |
| `sessionStartTime`                                         | `number`                                      | ✅           | Marca de tiempo de Unix (ms) cuando se inició la sesión |
| `codeChanges`                                              | `{ linesAdded, linesRemoved, filesModified }` | ✅           | Métricas agregadas de cambio de código                  |
| `modelMetrics`                                             | `Record<string, ModelMetric>`                 | ✅           | Desglose del uso por modelo                             |
| `currentModel`                                             | `string`                                      |             |                                                         |
| Modelo seleccionado en el momento de apagado               |                                               |             |                                                         |

## Permisos y eventos de entrada de usuario

Estos eventos se emiten cuando el agente necesita aprobación o entrada del usuario antes de continuar.

### `permission.requested`

El agente necesita permiso para realizar una acción (ejecutar un comando, escribir un archivo, etc.).

| Campo de datos      | Tipo                | Obligatorio | Description                                                         |
| ------------------- | ------------------- | ----------- | ------------------------------------------------------------------- |
| `requestId`         | `string`            | ✅           | Usa esto para responder a través de `session.respondToPermission()` |
| `permissionRequest` | `PermissionRequest` | ✅           | Detalles del permiso que se solicita                                |

El `permissionRequest` es una unión discriminada en `kind`:

| `kind`                                                            | Campos de clave                       | Description |
| ----------------------------------------------------------------- | ------------------------------------- | ----------- |
| `"shell"`                                                         |                                       |             |
| `fullCommandText`, `intention`, , `commands[]`, `possiblePaths[]` | Ejecutar un comando de shell          |             |
| `"write"`                                                         |                                       |             |
| `fileName`, `diff`, , `intention`, `newFileContents?`             | Escribir o modificar un archivo       |             |
| `"read"`                                                          |                                       |             |
| `path`, `intention`                                               | Leer un archivo o directorio          |             |
| `"mcp"`                                                           |                                       |             |
| `serverName`, `toolName`, `toolTitle`, , `args?`, `readOnly`      | Invocar una herramienta MCP           |             |
| `"url"`                                                           |                                       |             |
| `url`, `intention`                                                | Capturar una dirección URL            |             |
| `"memory"`                                                        |                                       |             |
| `subject`, , `fact`, `citations`                                  | Almacenar una memoria                 |             |
| `"custom-tool"`                                                   |                                       |             |
| `toolName`, , `toolDescription`, `args?`                          | Llame a una herramienta personalizada |             |

Todas las variantes `kind` también incluyen un enlace opcional `toolCallId` que retorna a la llamada de herramienta que desencadenó la solicitud.

### `permission.completed`

Se resolvió una solicitud de permiso.

| Campo de datos | Tipo     | Obligatorio | Description                                                                                                                                                                       |
| -------------- | -------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `permission.requested`                                                                                                                            |
| `result.kind`  | `string` | ✅           | Uno de: `"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`

Efímero. El agente está haciendo una pregunta al usuario.

| Campo de datos                                          | Tipo       | Obligatorio | Description                                                        |
| ------------------------------------------------------- | ---------- | ----------- | ------------------------------------------------------------------ |
| `requestId`                                             | `string`   | ✅           | Usa esto para responder a través de `session.respondToUserInput()` |
| `question`                                              | `string`   | ✅           | Pregunta que se va a presentar al usuario                          |
| `choices`                                               | `string[]` |             |                                                                    |
| Opciones predefinidas para el usuario                   |            |             |                                                                    |
| `allowFreeform`                                         | `boolean`  |             |                                                                    |
| Indica si se permite la entrada de texto de forma libre |            |             |                                                                    |

### `user_input.completed`

Efímero. Se resolvió una solicitud de entrada de usuario.

| Campo de datos | Tipo     | Obligatorio | Description                                            |
| -------------- | -------- | ----------- | ------------------------------------------------------ |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `user_input.requested` |

### `elicitation.requested`

Efímero. El agente necesita una entrada de formulario estructurada del usuario (protocolo de elicitación MCP).

| Campo de datos                                  | Tipo                                        | Obligatorio | Description                                                          |
| ----------------------------------------------- | ------------------------------------------- | ----------- | -------------------------------------------------------------------- |
| `requestId`                                     | `string`                                    | ✅           | Usa esto para responder a través de `session.respondToElicitation()` |
| `message`                                       | `string`                                    | ✅           | Descripción de la información necesaria                              |
| `mode`                                          | `"form"`                                    |             |                                                                      |
| Modo de elicitación (actualmente solo `"form"`) |                                             |             |                                                                      |
| `requestedSchema`                               | `{ type: "object", properties, required? }` | ✅           | Esquema JSON que describe los campos de formulario                   |

### `elicitation.completed`

Efímero. Se resolvió una solicitud de elicitación.

| Campo de datos | Tipo     | Obligatorio | Description                                             |
| -------------- | -------- | ----------- | ------------------------------------------------------- |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `elicitation.requested` |

## Eventos de subagentes y aptitudes

### `subagent.started`

Se invocó un agente personalizado como subagente.

| Campo de datos                                                               | Tipo     | Obligatorio | Description                                                 |
| ---------------------------------------------------------------------------- | -------- | ----------- | ----------------------------------------------------------- |
| `toolCallId`                                                                 | `string` | ✅           | Llamada a la herramienta primaria que generó este subagente |
| `agentName`                                                                  | `string` | ✅           | Nombre interno del subagente                                |
| `agentDisplayName`                                                           | `string` | ✅           | Nombre de visualización legible por humanos                 |
| `agentDescription`                                                           | `string` | ✅           | Descripción de lo que hace el subagente                     |
| `model`                                                                      | `string` |             |                                                             |
| Modelo con el que se ejecutará el subagente, si se conoce desde el principio |          |             |                                                             |

### `subagent.completed`

Un subagente finalizó correctamente.

| Campo de datos                                           | Tipo     | Obligatorio | Description                                        |
| -------------------------------------------------------- | -------- | ----------- | -------------------------------------------------- |
| `toolCallId`                                             | `string` | ✅           | Coincide con el correspondiente `subagent.started` |
| `agentName`                                              | `string` | ✅           | Nombre interno                                     |
| `agentDisplayName`                                       | `string` | ✅           | Nombre para mostrar                                |
| `model`                                                  | `string` |             |                                                    |
| Modelo usado por el subagente                            |          |             |                                                    |
| `durationMs`                                             | `number` |             |                                                    |
| Duración de la ejecución en tiempo real, en milisegundos |          |             |                                                    |
| `totalTokens`                                            | `number` |             |                                                    |
| Número total de tokens de entrada y salida consumidos    |          |             |                                                    |
| `totalToolCalls`                                         | `number` |             |                                                    |
| Total de llamadas a herramientas realizadas              |          |             |                                                    |

### `subagent.failed`

Un subagente encontró un error.

| Campo de datos                                                 | Tipo     | Obligatorio | Description                                        |
| -------------------------------------------------------------- | -------- | ----------- | -------------------------------------------------- |
| `toolCallId`                                                   | `string` | ✅           | Coincide con el correspondiente `subagent.started` |
| `agentName`                                                    | `string` | ✅           | Nombre interno                                     |
| `agentDisplayName`                                             | `string` | ✅           | Nombre para mostrar                                |
| `error`                                                        | `string` | ✅           | Mensaje de error                                   |
| `model`                                                        | `string` |             |                                                    |
| Modelo seleccionado para el subagente, cuando se conoce        |          |             |                                                    |
| `durationMs`                                                   | `number` |             |                                                    |
| Duración de la ejecución en tiempo real, en milisegundos       |          |             |                                                    |
| `totalTokens`                                                  | `number` |             |                                                    |
| Total de tokens de entrada y salida consumidos antes del error |          |             |                                                    |
| `totalToolCalls`                                               | `number` |             |                                                    |
| Total de llamadas a herramientas realizadas antes del error    |          |             |                                                    |

### `subagent.selected`

Se ha seleccionado (deducido) un agente personalizado para administrar la solicitud actual.

| Campo de datos     | Tipo               | Obligatorio | Description                                                                              |
| ------------------ | ------------------ | ----------- | ---------------------------------------------------------------------------------------- |
| `agentName`        | `string`           | ✅           | Nombre interno del agente seleccionado                                                   |
| `agentDisplayName` | `string`           | ✅           | Nombre para mostrar                                                                      |
| `tools`            | `string[] \| null` | ✅           | Nombres de herramientas disponibles para este agente; `null` para todas las herramientas |

### `subagent.deselected`

Se deseleccionó un agente personalizado y se devolvió al agente predeterminado.
**La carga de datos está vacía (`{}`)**.

### `skill.invoked`

Se activó una habilidad en la conversación actual.

| Campo de datos                                                             | Tipo       | Obligatorio | Description                                                    |
| -------------------------------------------------------------------------- | ---------- | ----------- | -------------------------------------------------------------- |
| `name`                                                                     | `string`   | ✅           | Nombre de la habilidad                                         |
| `path`                                                                     | `string`   | ✅           | Ruta de archivo a la definición SKILL.md                       |
| `content`                                                                  | `string`   | ✅           | Contenido completo de habilidades inyectado en la conversación |
| `allowedTools`                                                             | `string[]` |             |                                                                |
| Herramientas aprobadas automáticamente mientras esta habilidad está activa |            |             |                                                                |
| `pluginName`                                                               | `string`   |             |                                                                |
| Complemento del que proviene la aptitud                                    |            |             |                                                                |
| `pluginVersion`                                                            | `string`   |             |                                                                |
| Versión del complemento                                                    |            |             |                                                                |

## Otros eventos

### `abort`

Se anuló el turno actual.

| Campo de datos | Tipo     | Obligatorio | Description                                                  |
| -------------- | -------- | ----------- | ------------------------------------------------------------ |
| `reason`       | `string` | ✅           | ¿Por qué se anuló el turno (por ejemplo, `"user initiated"`) |

### `user.message`

El usuario envió un mensaje. Registrado para la línea de tiempo de la sesión.

| Campo de datos                                                                    | Tipo           | Obligatorio | Description                   |
| --------------------------------------------------------------------------------- | -------------- | ----------- | ----------------------------- |
| `content`                                                                         | `string`       | ✅           | Texto del mensaje del usuario |
| `transformedContent`                                                              | `string`       |             |                               |
| Versión transformada después del preprocesamiento                                 |                |             |                               |
| `attachments`                                                                     | `Attachment[]` |             |                               |
| Archivo, directorio, selección, blob o archivos adjuntos de referencia de GitHub. |                |             |                               |
| `source`                                                                          | `string`       |             |                               |
| Identificador de origen del mensaje                                               |                |             |                               |
| `agentMode`                                                                       | `string`       |             |                               |
| Modo de agente: `"interactive"`, `"plan"`, `"autopilot"`o `"shell"`               |                |             |                               |
| `interactionId`                                                                   | `string`       |             |                               |
| ID de interacción de CAPI                                                         |                |             |                               |

### `system.message`

Se insertó un mensaje del sistema o del desarrollador en la conversación.

| Campo de datos                         | Tipo                             | Obligatorio | Description       |
| -------------------------------------- | -------------------------------- | ----------- | ----------------- |
| `content`                              | `string`                         | ✅           | Texto del mensaje |
| `role`                                 | `"system" \| "developer"`        | ✅           | Rol de mensaje    |
| `name`                                 | `string`                         |             |                   |
| Identificador de origen                |                                  |             |                   |
| `metadata`                             | `{ promptVersion?, variables? }` |             |                   |
| Metadatos de la plantilla de solicitud |                                  |             |                   |

### `external_tool.requested`

El agente quiere invocar una herramienta externa (una proporcionada por el consumidor del SDK).

| Campo de datos               | Tipo     | Obligatorio | Description                                                           |
| ---------------------------- | -------- | ----------- | --------------------------------------------------------------------- |
| `requestId`                  | `string` | ✅           | Usa esto para responder a través de `session.respondToExternalTool()` |
| `sessionId`                  | `string` | ✅           | Sesión a la que pertenece esta solicitud                              |
| `toolCallId`                 | `string` | ✅           | ID de llamada de herramienta para esta invocación                     |
| `toolName`                   | `string` | ✅           | Nombre de la herramienta externa                                      |
| `arguments`                  | `object` |             |                                                                       |
| Argumentos de la herramienta |          |             |                                                                       |

### `external_tool.completed`

Se resolvió una solicitud de herramienta externa.

| Campo de datos | Tipo     | Obligatorio | Description                                               |
| -------------- | -------- | ----------- | --------------------------------------------------------- |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `external_tool.requested` |

### `exit_plan_mode.requested`

Efímero. El agente ha creado un plan y quiere salir del modo de plan.

| Campo de datos      | Tipo       | Obligatorio | Description                                                              |
| ------------------- | ---------- | ----------- | ------------------------------------------------------------------------ |
| `requestId`         | `string`   | ✅           | Usa esto para responder a través de `session.respondToExitPlanMode()`    |
| `summary`           | `string`   | ✅           | Resumen del plan                                                         |
| `planContent`       | `string`   | ✅           | Contenido completo del archivo de plan                                   |
| `actions`           | `string[]` | ✅           | Acciones de usuario disponibles (por ejemplo, aprobar, editar, rechazar) |
| `recommendedAction` | `string`   | ✅           | Acción sugerida                                                          |

### `exit_plan_mode.completed`

Efímero. Se resolvió una solicitud de modo de plan de salida.

| Campo de datos | Tipo     | Obligatorio | Description                                                |
| -------------- | -------- | ----------- | ---------------------------------------------------------- |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `exit_plan_mode.requested` |

### `command.queued`

Efímero. Se ha puesto en cola un comando de barra para su ejecución.

| Campo de datos | Tipo     | Obligatorio | Description                                                            |
| -------------- | -------- | ----------- | ---------------------------------------------------------------------- |
| `requestId`    | `string` | ✅           | Usa esto para responder a través de `session.respondToQueuedCommand()` |
| `command`      | `string` | ✅           | El texto del comando con barra (p. ej., `/help`, `/clear`)             |

### `command.completed`

Efímero. Se ha resuelto un comando en cola.

| Campo de datos | Tipo     | Obligatorio | Description                                      |
| -------------- | -------- | ----------- | ------------------------------------------------ |
| `requestId`    | `string` | ✅           | Coincide con el correspondiente `command.queued` |

### `session_limits_exhausted.requested`

Efímero. El presupuesto de sesión actual se agotó y el tiempo de ejecución necesita una decisión de usuario antes de continuar.

| Campo de datos  | Tipo     | Obligatorio | Description                                                                     |
| --------------- | -------- | ----------- | ------------------------------------------------------------------------------- |
| `requestId`     | `string` | ✅           | Use este identificador al responder a la solicitud de límite agotado pendiente. |
| `maxAiCredits`  | `number` | ✅           | Créditos máximos de IA configurados para la ventana de contabilidad actual      |
| `usedAiCredits` | `number` | ✅           | Créditos de IA ya consumidos en la ventana de contabilidad actual               |

### `session_limits_exhausted.completed`

Efímero. Se resolvió una solicitud de límite agotado pendiente.

| Campo de datos                                                                           | Tipo                                    | Obligatorio | Description                                                                   |
| ---------------------------------------------------------------------------------------- | --------------------------------------- | ----------- | ----------------------------------------------------------------------------- |
| `requestId`                                                                              | `string`                                | ✅           | Coincide con el evento correspondiente `session_limits_exhausted.requested` . |
| `response.action`                                                                        | `"add" \| "set" \| "unset" \| "cancel"` | ✅           | Acción seleccionada para la solicitud de límite agotado                       |
| `response.additionalAiCredits`                                                           | `number`                                |             |                                                                               |
| Créditos de IA que se van a agregar al máximo actual cuando `response.action` es `"add"` |                                         |             |                                                                               |
| `response.maxAiCredits`                                                                  | `number`                                |             |                                                                               |
| Nuevos créditos máximos absolutos de IA cuando `response.action` es `"set"`              |                                         |             |                                                                               |

## Referencia rápida: flujo de turnos de agentes

Un turno agente típico emite eventos en este orden:

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

## Todos los tipos de eventos de un vistazo

En esta tabla se enumeran los campos de carga clave `data` . Los campos comunes de la envolvente se describen más arriba.

| Tipo de evento                                                                                            | Efímero         | Category           | Campos de datos clave    |
| --------------------------------------------------------------------------------------------------------- | --------------- | ------------------ | ------------------------ |
| `assistant.turn_start`                                                                                    |                 |                    |                          |
| Asistente                                                                                                 |                 |                    |                          |
| `turnId`, `interactionId?`                                                                                |                 |                    |                          |
| `assistant.intent`                                                                                        | ✅               | Asistente          | `intent`                 |
| `assistant.reasoning`                                                                                     |                 |                    |                          |
| Asistente                                                                                                 |                 |                    |                          |
| `reasoningId`, `content`                                                                                  |                 |                    |                          |
| `assistant.reasoning_delta`                                                                               | ✅               | Asistente          |                          |
| `reasoningId`, `deltaContent`                                                                             |                 |                    |                          |
| `assistant.streaming_delta`                                                                               | ✅               | Asistente          | `totalResponseSizeBytes` |
| `assistant.message`                                                                                       |                 |                    |                          |
| Asistente                                                                                                 |                 |                    |                          |
| `messageId`, `content`, `toolRequests?`, , `outputTokens?`, `phase?`                                      |                 |                    |                          |
| `assistant.message_delta`                                                                                 | ✅               | Asistente          |                          |
| `messageId`, `deltaContent`                                                                               |                 |                    |                          |
| `assistant.turn_end`                                                                                      |                 |                    |                          |
| Asistente                                                                                                 | `turnId`        |                    |                          |
| `assistant.usage`                                                                                         | ✅               | Asistente          |                          |
| `model`, `apiEndpoint?`, `inputTokens?`, `outputTokens?`, , `cost?`, `duration?`                          |                 |                    |                          |
| `tool.user_requested`                                                                                     |                 |                    |                          |
| Herramienta                                                                                               |                 |                    |                          |
| `toolCallId`, , `toolName`, `arguments?`                                                                  |                 |                    |                          |
| `tool.execution_start`                                                                                    |                 |                    |                          |
| Herramienta                                                                                               |                 |                    |                          |
| `toolCallId`, `toolName`, , `arguments?`, `mcpServerName?`                                                |                 |                    |                          |
| `tool.execution_partial_result`                                                                           | ✅               | Herramienta        |                          |
| `toolCallId`, `partialOutput`                                                                             |                 |                    |                          |
| `tool.execution_progress`                                                                                 | ✅               | Herramienta        |                          |
| `toolCallId`, `progressMessage`                                                                           |                 |                    |                          |
| `tool.execution_complete`                                                                                 |                 |                    |                          |
| Herramienta                                                                                               |                 |                    |                          |
| `toolCallId`, `success`, , `result?`, `error?`                                                            |                 |                    |                          |
| `session.idle`                                                                                            | ✅               | Session            | `aborted?`               |
| `session.error`                                                                                           |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| `errorType`, , `message`, `statusCode?`                                                                   |                 |                    |                          |
| `session.compaction_start`                                                                                |                 |                    |                          |
| Session                                                                                                   |                 |                    |                          |
| *(vacío)*                                                                                                 |                 |                    |                          |
| `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`                                                                                    |                 |                    |                          |
| Permiso                                                                                                   |                 |                    |                          |
| `requestId`, `permissionRequest`                                                                          |                 |                    |                          |
| `permission.completed`                                                                                    |                 |                    |                          |
| Permiso                                                                                                   |                 |                    |                          |
| `requestId`, `result.kind`                                                                                |                 |                    |                          |
| `user_input.requested`                                                                                    | ✅               | Entrada de usuario |                          |
| `requestId`, , `question`, `choices?`                                                                     |                 |                    |                          |
| `user_input.completed`                                                                                    | ✅               | Entrada de usuario | `requestId`              |
| `elicitation.requested`                                                                                   | ✅               | Entrada de usuario |                          |
| `requestId`, , `message`, `requestedSchema`                                                               |                 |                    |                          |
| `elicitation.completed`                                                                                   | ✅               | Entrada de usuario | `requestId`              |
| `subagent.started`                                                                                        |                 |                    |                          |
| Subagente                                                                                                 |                 |                    |                          |
| `toolCallId`, `agentName`, , `agentDisplayName`, `model?`                                                 |                 |                    |                          |
| `subagent.completed`                                                                                      |                 |                    |                          |
| Subagente                                                                                                 |                 |                    |                          |
| `toolCallId`, `agentName`, `agentDisplayName`, `model?`, `durationMs?`, , `totalTokens?``totalToolCalls?` |                 |                    |                          |
| `subagent.failed`                                                                                         |                 |                    |                          |
| Subagente                                                                                                 |                 |                    |                          |
| `toolCallId`, `agentName`, `error`, `model?`, `durationMs?`, , `totalTokens?``totalToolCalls?`            |                 |                    |                          |
| `subagent.selected`                                                                                       |                 |                    |                          |
| Subagente                                                                                                 |                 |                    |                          |
| `agentName`, , `agentDisplayName`, `tools`                                                                |                 |                    |                          |
| `subagent.deselected`                                                                                     |                 |                    |                          |
| Subagente                                                                                                 |                 |                    |                          |
| *(vacío)*                                                                                                 |                 |                    |                          |
| `skill.invoked`                                                                                           |                 |                    |                          |
| Habilidad                                                                                                 |                 |                    |                          |
| `name`, `path`, , `content`, `allowedTools?`                                                              |                 |                    |                          |
| `abort`                                                                                                   |                 |                    |                          |
| Supervisión                                                                                               | `reason`        |                    |                          |
| `user.message`                                                                                            |                 |                    |                          |
| Usuario                                                                                                   |                 |                    |                          |
| `content`, , `attachments?`, `agentMode?`                                                                 |                 |                    |                          |
| `system.message`                                                                                          |                 |                    |                          |
| System                                                                                                    |                 |                    |                          |
| `content`, `role`                                                                                         |                 |                    |                          |
| `external_tool.requested`                                                                                 |                 |                    |                          |
| Herramienta externa                                                                                       |                 |                    |                          |
| `requestId`, , `toolName`, `arguments?`                                                                   |                 |                    |                          |
| `external_tool.completed`                                                                                 |                 |                    |                          |
| Herramienta externa                                                                                       | `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`                                                                                | ✅               | Modo de plan       |                          |
| `requestId`, `summary`, , `planContent`, `actions`                                                        |                 |                    |                          |
| `exit_plan_mode.completed`                                                                                | ✅               | Modo de plan       | `requestId`              |