> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Eventos de streaming

> Recopila los tipos de Session Event y sus payloads que recibes al habilitar streaming en SessionConfig.

## Eventos de streaming

Si habilitas `streaming: true` en `SessionConfig`, todo lo que ocurre durante la sesión se transmite como eventos.
Esta página es una versión en español, más legible para Laravel, del `streaming-events.md` oficial.

> La página [SessionEvent](/es/packages/laravel-copilot-sdk/session-event) explica la propia clase `SessionEvent` extendida para Laravel.
> Esta página es la referencia de «qué tipo de evento entrega qué datos».

## Resumen

Todo el procesamiento del agente Copilot (inferencia, generación de mensajes, ejecución de herramientas, confirmaciones de permiso, etc.) se emite como eventos de sesión.

* **Evento ephemeral**: solo se entrega en tiempo real. No se persiste en el log de la sesión (no se reproduce al reanudar).
* **Evento persisted**: se guarda en el log de la sesión (se reproduce al reanudar).
* **Evento delta**: evento incremental que llega por fragmentos (`deltaContent`, etc.). Se concatena para obtener el texto completo.
* **Cadena `parentId`**: cada evento referencia al ID del evento inmediatamente anterior.

## Envoltura de evento (campos comunes)

Todos los eventos tienen la siguiente estructura común:

| Campo       | Tipo             | Descripción                                     |
| ----------- | ---------------- | ----------------------------------------------- |
| `id`        | `string`         | ID único del evento (UUID v4)                   |
| `timestamp` | `string`         | Hora de creación (ISO 8601)                     |
| `parentId`  | `string \| null` | ID del evento anterior (`null` para el primero) |
| `ephemeral` | `boolean?`       | `true` si es un evento temporal                 |
| `type`      | `string`         | Tipo de evento                                  |
| `data`      | `object`         | Payload específico del evento                   |

## Ejemplo de suscripción en Laravel

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session): void {
    // Todos los eventos
    $session->on(function (SessionEvent $event): void {
        info($event->type(), $event->toArray());
    });

    // Un evento concreto
    $session->on(SessionEventType::ASSISTANT_MESSAGE_DELTA, function (SessionEvent $event): void {
        echo $event->deltaContent();
    });

    $session->sendAndWait(prompt: 'Laravelの特徴を教えて');
}, config: new SessionConfig(streaming: true));
```

## Principales categorías de evento

## Assistant events

### `assistant.turn_start`

Inicio del turn.

* `turnId` (obligatorio)
* `interactionId` (opcional)

### `assistant.intent` (ephemeral)

Intención de ejecución actual (por ejemplo, `Exploring codebase`).

* `intent` (obligatorio)

### `assistant.reasoning`

Bloque de razonamiento completo.

* `reasoningId` (obligatorio)
* `content` (obligatorio)

### `assistant.reasoning_delta` (ephemeral)

Delta de texto de razonamiento.

* `reasoningId` (obligatorio)
* `deltaContent` (obligatorio)

### `assistant.message`

Mensaje del assistant ya completo.

Campos principales:

* `messageId` (obligatorio)
* `content` (obligatorio)
* `toolRequests` (opcional)
* `reasoningOpaque` / `reasoningText` / `encryptedContent` (opcional)
* `phase` / `outputTokens` / `interactionId` (opcional)
* `parentToolCallId` (opcional, cuando proviene de un subagente)

### `assistant.message_delta` (ephemeral)

Delta del cuerpo del mensaje.

* `messageId` (obligatorio)
* `deltaContent` (obligatorio)
* `parentToolCallId` (opcional)

### `assistant.turn_end`

Fin del turn.

* `turnId` (obligatorio)

### `assistant.usage` (ephemeral)

Información de uso por llamada a API.

Campos principales:

* `model` (obligatorio)
* `inputTokens` / `outputTokens` / `cost` / `duration` (opcional)
* `apiCallId` / `providerCallId` (opcional)
* `quotaSnapshots` / `copilotUsage` (opcional)

### `assistant.streaming_delta` (ephemeral)

Progreso de recepción a bajo nivel.

* `totalResponseSizeBytes` (obligatorio)

## Tool execution events

### `tool.execution_start`

Inicio de ejecución de herramienta.

* `toolCallId` (obligatorio)
* `toolName` (obligatorio)
* `arguments` / `mcpServerName` / `mcpToolName` / `parentToolCallId` (opcional)

### `tool.execution_partial_result` (ephemeral)

Salida parcial mientras se ejecuta la herramienta.

* `toolCallId` (obligatorio)
* `partialOutput` (obligatorio)

### `tool.execution_progress` (ephemeral)

Mensaje de progreso.

* `toolCallId` (obligatorio)
* `progressMessage` (obligatorio)

### `tool.execution_complete`

Ejecución de herramienta completada (éxito/fallo).

* `toolCallId` (obligatorio)
* `success` (obligatorio)
* `result` (en caso de éxito)
* `error` (en caso de fallo)
* `toolTelemetry` / `parentToolCallId` (opcional)

### `tool.user_requested`

Invocación de herramienta a petición explícita del usuario.

* `toolCallId` (obligatorio)
* `toolName` (obligatorio)
* `arguments` (opcional)

## Session lifecycle events

### `session.start`

Inicio de la sesión. En Cloud Sessions, es más seguro enviar el primer prompt después de que `producer` confirme el `session.start` del `copilot-agent`.

* `producer` (opcional)

### `session.idle` (ephemeral)

El procesamiento actual ha terminado y se espera la siguiente entrada.

* `backgroundTasks` (opcional)

### `session.error`

Error durante el procesamiento de la sesión.

* `errorType` (obligatorio)
* `message` (obligatorio)
* `stack` / `statusCode` / `providerCallId` (opcional)

### `session.compaction_start`

Inicio de la compactación de contexto (`data` es un objeto vacío).

### `session.compaction_complete`

Fin de la compactación de contexto.

Campos principales:

* `success` (obligatorio)
* `error` (opcional)
* `preCompactionTokens` / `postCompactionTokens` (opcional)
* `summaryContent` / `checkpointPath` (opcional)

### `session.title_changed` (ephemeral)

Actualización automática del título.

* `title` (obligatorio)

### `session.context_changed`

Cambio del contexto de trabajo.

* `cwd` (obligatorio)
* `gitRoot` / `repository` / `branch` (opcional)

### `session.info`

Información de la sesión como URL remota.

* `infoType` (obligatorio)
* `url` (opcional, por ejemplo cuando `infoType` es `remote`)

### `session.remote_steerable_changed`

Evento que indica cambios en la disponibilidad de operación remota desde Mission Control.

* `remoteSteerable` (opcional)

### `session.usage_info` (ephemeral)

Estado de uso de la ventana de contexto.

* `tokenLimit` (obligatorio)
* `currentTokens` (obligatorio)
* `messagesLength` (obligatorio)

### `session.task_complete`

Notificación de tarea completada.

* `summary` (opcional)

### `session.shutdown`

Cierre de la sesión.

Campos principales:

* `shutdownType` (obligatorio)
* `errorReason` (opcional)
* `totalPremiumRequests` / `totalApiDurationMs` (obligatorios)
* `codeChanges` / `modelMetrics` (obligatorios)

## Permission / user input events

### `permission.requested` (ephemeral)

Solicitud de confirmación de permiso.

* `requestId` (obligatorio)
* `permissionRequest` (obligatorio)

`permissionRequest.kind`:

* `shell`
* `write`
* `read`
* `mcp`
* `url`
* `memory`
* `custom-tool`

### `permission.completed` (ephemeral)

Resolución de la confirmación de permiso.

* `requestId` (obligatorio)
* `result.kind` (obligatorio)

### `user_input.requested` (ephemeral)

Pregunta al usuario.

* `requestId` (obligatorio)
* `question` (obligatorio)
* `choices` / `allowFreeform` (opcional)

### `user_input.completed` (ephemeral)

Entrada del usuario completada.

* `requestId` (obligatorio)

### `elicitation.requested` (ephemeral)

Solicitud de entrada estructurada (formulario).

* `requestId` (obligatorio)
* `message` (obligatorio)
* `requestedSchema` (obligatorio)

### `elicitation.completed` (ephemeral)

Entrada estructurada completada.

* `requestId` (obligatorio)

## Sub-agent / skill events

### `subagent.started`

* `toolCallId` (obligatorio)
* `agentName` / `agentDisplayName` / `agentDescription` (obligatorios)

### `subagent.completed`

* `toolCallId` (obligatorio)
* `agentName` / `agentDisplayName` (obligatorios)

### `subagent.failed`

* `toolCallId` (obligatorio)
* `agentName` / `agentDisplayName` (obligatorios)
* `error` (obligatorio)

### `subagent.selected`

* `agentName` (obligatorio)
* `agentDisplayName` (obligatorio)
* `tools` (obligatorio, admite `null`)

### `subagent.deselected`

Vuelta al agente por defecto (`data` es un objeto vacío).

### `skill.invoked`

* `name` / `path` / `content` (obligatorios)
* `allowedTools` / `pluginName` / `pluginVersion` (opcional)

## Otros eventos

### `abort`

* `reason` (obligatorio)

### `user.message`

* `content` (obligatorio)
* `transformedContent` / `attachments` / `source` / `agentMode` / `interactionId` (opcional)

### `system.message`

* `content` (obligatorio)
* `role` (obligatorio)
* `name` / `metadata` (opcional)

### `external_tool.requested` (ephemeral)

* `requestId` / `sessionId` / `toolCallId` / `toolName` (obligatorios)
* `arguments` (opcional)

### `external_tool.completed` (ephemeral)

* `requestId` (obligatorio)

### `exit_plan_mode.requested` (ephemeral)

* `requestId` / `summary` / `planContent` / `actions` / `recommendedAction` (obligatorios)

### `exit_plan_mode.completed` (ephemeral)

* `requestId` (obligatorio)

### `command.queued` (ephemeral)

* `requestId` (obligatorio)
* `command` (obligatorio)

### `command.completed` (ephemeral)

* `requestId` (obligatorio)

## Orden de eventos habitual

```text theme={null}
assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, varias veces)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, varias veces)
├── assistant.message
├── assistant.usage (ephemeral)
├── [bucle de permission / tool.* si es necesario]
assistant.turn_end
session.idle (ephemeral)
```

## Lista completa de eventos (referencia rápida)

| Tipo de evento                     | Ephemeral | Categoría     |
| ---------------------------------- | --------- | ------------- |
| `session.start`                    |           | Session       |
| `assistant.turn_start`             |           | Assistant     |
| `assistant.intent`                 | ✅         | Assistant     |
| `assistant.reasoning`              |           | Assistant     |
| `assistant.reasoning_delta`        | ✅         | Assistant     |
| `assistant.streaming_delta`        | ✅         | Assistant     |
| `assistant.message`                |           | Assistant     |
| `assistant.message_delta`          | ✅         | Assistant     |
| `assistant.turn_end`               |           | Assistant     |
| `assistant.usage`                  | ✅         | Assistant     |
| `tool.user_requested`              |           | Tool          |
| `tool.execution_start`             |           | Tool          |
| `tool.execution_partial_result`    | ✅         | Tool          |
| `tool.execution_progress`          | ✅         | Tool          |
| `tool.execution_complete`          |           | Tool          |
| `session.idle`                     | ✅         | Session       |
| `session.error`                    |           | Session       |
| `session.compaction_start`         |           | Session       |
| `session.compaction_complete`      |           | Session       |
| `session.title_changed`            | ✅         | Session       |
| `session.context_changed`          |           | Session       |
| `session.info`                     |           | Session       |
| `session.remote_steerable_changed` |           | Session       |
| `session.usage_info`               | ✅         | Session       |
| `session.task_complete`            |           | Session       |
| `session.shutdown`                 |           | Session       |
| `permission.requested`             | ✅         | Permission    |
| `permission.completed`             | ✅         | Permission    |
| `user_input.requested`             | ✅         | User Input    |
| `user_input.completed`             | ✅         | User Input    |
| `elicitation.requested`            | ✅         | User Input    |
| `elicitation.completed`            | ✅         | User Input    |
| `subagent.started`                 |           | Sub-Agent     |
| `subagent.completed`               |           | Sub-Agent     |
| `subagent.failed`                  |           | Sub-Agent     |
| `subagent.selected`                |           | Sub-Agent     |
| `subagent.deselected`              |           | Sub-Agent     |
| `skill.invoked`                    |           | Skill         |
| `abort`                            |           | Control       |
| `user.message`                     |           | User          |
| `system.message`                   |           | System        |
| `external_tool.requested`          | ✅         | External Tool |
| `external_tool.completed`          | ✅         | External Tool |
| `command.queued`                   | ✅         | Command       |
| `command.completed`                | ✅         | Command       |
| `exit_plan_mode.requested`         | ✅         | Plan Mode     |
| `exit_plan_mode.completed`         | ✅         | Plan Mode     |

## Documentación relacionada

* [Referencia oficial de Streaming Events](https://github.com/github/copilot-sdk/blob/main/docs/features/streaming-events.md)
* Explicación de la clase de evento en la versión Laravel: [SessionEvent](/es/packages/laravel-copilot-sdk/session-event)
* Patrones de implementación de streaming: [Streaming](/es/packages/laravel-copilot-sdk/streaming)


## Related topics

- [Eventos del ciclo de vida de sesión](/es/packages/laravel-copilot-sdk/session-lifecycle-event.md)
- [Observers de Eloquent y eventos del modelo](/es/advanced/eloquent-observers.md)
- [Técnicas prácticas de Laravel Telescope](/es/blog/telescope-introduction.md)
- [Guía de actualización de Laravel 12 a 13](/es/blog/upgrade-12-to-13.md)
- [Migraciones de base de datos](/es/migrations.md)
