Saltar al contenido principal

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 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:
CampoTipoDescripción
idstringID único del evento (UUID v4)
timestampstringHora de creación (ISO 8601)
parentIdstring | nullID del evento anterior (null para el primero)
ephemeralboolean?true si es un evento temporal
typestringTipo de evento
dataobjectPayload específico del evento

Ejemplo de suscripción en Laravel

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

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 eventoEphemeralCategoría
session.startSession
assistant.turn_startAssistant
assistant.intentAssistant
assistant.reasoningAssistant
assistant.reasoning_deltaAssistant
assistant.streaming_deltaAssistant
assistant.messageAssistant
assistant.message_deltaAssistant
assistant.turn_endAssistant
assistant.usageAssistant
tool.user_requestedTool
tool.execution_startTool
tool.execution_partial_resultTool
tool.execution_progressTool
tool.execution_completeTool
session.idleSession
session.errorSession
session.compaction_startSession
session.compaction_completeSession
session.title_changedSession
session.context_changedSession
session.infoSession
session.remote_steerable_changedSession
session.usage_infoSession
session.task_completeSession
session.shutdownSession
permission.requestedPermission
permission.completedPermission
user_input.requestedUser Input
user_input.completedUser Input
elicitation.requestedUser Input
elicitation.completedUser Input
subagent.startedSub-Agent
subagent.completedSub-Agent
subagent.failedSub-Agent
subagent.selectedSub-Agent
subagent.deselectedSub-Agent
skill.invokedSkill
abortControl
user.messageUser
system.messageSystem
external_tool.requestedExternal Tool
external_tool.completedExternal Tool
command.queuedCommand
command.completedCommand
exit_plan_mode.requestedPlan Mode
exit_plan_mode.completedPlan Mode

Documentación relacionada

Última modificación el 13 de julio de 2026