Vai al contenuto principale

Eventi di streaming

Abilitando streaming: true in SessionConfig, le attività durante la sessione vengono consegnate come eventi in sequenza. Questa pagina è la versione italiana, resa più leggibile per Laravel, del streaming-events.md ufficiale.
La pagina SessionEvent descrive la classe SessionEvent estesa per Laravel. Questa pagina è la reference su “quale tipo di evento e quali dati arrivano”.

Panoramica

Le attività dell’agente Copilot (reasoning, generazione di messaggi, esecuzione di strumenti, controllo permessi, ecc.) fluiscono come eventi di sessione.
  • Ephemeral event: solo consegna in tempo reale. Non viene persistito nel log della sessione (non viene riprodotto alla ripresa)
  • Persisted event: salvato nel log della sessione (riprodotto alla ripresa)
  • Delta event: evento incrementale (deltaContent ecc.). Concatenandoli si ricostruisce il testo intero
  • parentId chain: ciascun evento fa riferimento all’ID dell’evento precedente in una catena

Envelope dell’evento (campi comuni)

Tutti gli eventi hanno la seguente struttura comune.
CampoTipoDescrizione
idstringID univoco dell’evento (UUID v4)
timestampstringOra di creazione (ISO 8601)
parentIdstring | nullID dell’evento precedente (null per il primo)
ephemeralboolean?true se effimero
typestringTipo di evento
dataobjectPayload specifico dell’evento

Esempio di sottoscrizione in 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 {
    // Tutti gli eventi
    $session->on(function (SessionEvent $event): void {
        info($event->type(), $event->toArray());
    });

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

    $session->sendAndWait(prompt: 'Illustra le caratteristiche di Laravel');
}, config: new SessionConfig(streaming: true));

Categorie di eventi principali

Assistant events

assistant.turn_start

Inizio del turn.
  • turnId (obbligatorio)
  • interactionId (opzionale)

assistant.intent (ephemeral)

Intenzione di esecuzione corrente (es. Exploring codebase).
  • intent (obbligatorio)

assistant.reasoning

Blocco di reasoning completo.
  • reasoningId (obbligatorio)
  • content (obbligatorio)

assistant.reasoning_delta (ephemeral)

Delta del testo di reasoning.
  • reasoningId (obbligatorio)
  • deltaContent (obbligatorio)

assistant.message

Messaggio finale dell’assistente. Campi principali:
  • messageId (obbligatorio)
  • content (obbligatorio)
  • toolRequests (opzionale)
  • reasoningOpaque / reasoningText / encryptedContent (opzionali)
  • phase / outputTokens / interactionId (opzionali)
  • parentToolCallId (opzionale, quando proviene da un sotto-agente)

assistant.message_delta (ephemeral)

Delta del corpo del messaggio.
  • messageId (obbligatorio)
  • deltaContent (obbligatorio)
  • parentToolCallId (opzionale)

assistant.turn_end

Fine del turn.
  • turnId (obbligatorio)

assistant.usage (ephemeral)

Informazioni di uso per chiamata API. Campi principali:
  • model (obbligatorio)
  • inputTokens / outputTokens / cost / duration (opzionali)
  • apiCallId / providerCallId (opzionali)
  • quotaSnapshots / copilotUsage (opzionali)

assistant.streaming_delta (ephemeral)

Progresso di ricezione a basso livello.
  • totalResponseSizeBytes (obbligatorio)

Tool execution events

tool.execution_start

Inizio esecuzione strumento.
  • toolCallId (obbligatorio)
  • toolName (obbligatorio)
  • arguments / mcpServerName / mcpToolName / parentToolCallId (opzionali)

tool.execution_partial_result (ephemeral)

Output parziale durante l’esecuzione.
  • toolCallId (obbligatorio)
  • partialOutput (obbligatorio)

tool.execution_progress (ephemeral)

Messaggio di progresso.
  • toolCallId (obbligatorio)
  • progressMessage (obbligatorio)

tool.execution_complete

Esecuzione strumento completata (successo/fallimento).
  • toolCallId (obbligatorio)
  • success (obbligatorio)
  • result (in caso di successo)
  • error (in caso di fallimento)
  • toolTelemetry / parentToolCallId (opzionali)

tool.user_requested

Chiamata a strumento su richiesta esplicita dell’utente.
  • toolCallId (obbligatorio)
  • toolName (obbligatorio)
  • arguments (opzionale)

Session lifecycle events

session.start

Inizio sessione. Nelle Cloud Sessions è più sicuro inviare il primo prompt dopo aver verificato che producer sia copilot-agent in session.start.
  • producer (opzionale)

session.idle (ephemeral)

Elaborazione corrente completata, in attesa del prossimo input.
  • backgroundTasks (opzionale)

session.error

Errore durante l’elaborazione della sessione.
  • errorType (obbligatorio)
  • message (obbligatorio)
  • stack / statusCode / providerCallId (opzionali)

session.compaction_start

Inizio compattazione del contesto (data è un oggetto vuoto).

session.compaction_complete

Compattazione del contesto completata. Campi principali:
  • success (obbligatorio)
  • error (opzionale)
  • preCompactionTokens / postCompactionTokens (opzionali)
  • summaryContent / checkpointPath (opzionali)

session.title_changed (ephemeral)

Aggiornamento automatico del titolo.
  • title (obbligatorio)

session.context_changed

Cambio del contesto di lavoro.
  • cwd (obbligatorio)
  • gitRoot / repository / branch (opzionali)

session.info

Informazioni della sessione come URL remoto.
  • infoType (obbligatorio)
  • url (opzionale, ad es. quando infoType è remote)

session.remote_steerable_changed

Evento che indica il cambio della possibilità di operare a distanza da Mission Control.
  • remoteSteerable (opzionale)

session.usage_info (ephemeral)

Stato di uso della context window.
  • tokenLimit (obbligatorio)
  • currentTokens (obbligatorio)
  • messagesLength (obbligatorio)

session.task_complete

Notifica di completamento task.
  • summary (opzionale)

session.shutdown

Chiusura della sessione. Campi principali:
  • shutdownType (obbligatorio)
  • errorReason (opzionale)
  • totalPremiumRequests / totalApiDurationMs (obbligatori)
  • codeChanges / modelMetrics (obbligatori)

Permission / user input events

permission.requested (ephemeral)

Richiesta di conferma di permesso.
  • requestId (obbligatorio)
  • permissionRequest (obbligatorio)
permissionRequest.kind:
  • shell
  • write
  • read
  • mcp
  • url
  • memory
  • custom-tool

permission.completed (ephemeral)

Esito della verifica del permesso.
  • requestId (obbligatorio)
  • result.kind (obbligatorio)

user_input.requested (ephemeral)

Domanda all’utente.
  • requestId (obbligatorio)
  • question (obbligatorio)
  • choices / allowFreeform (opzionali)

user_input.completed (ephemeral)

Input utente completato.
  • requestId (obbligatorio)

elicitation.requested (ephemeral)

Richiesta di input strutturato (form).
  • requestId (obbligatorio)
  • message (obbligatorio)
  • requestedSchema (obbligatorio)

elicitation.completed (ephemeral)

Completamento dell’input strutturato.
  • requestId (obbligatorio)

Sub-agent / skill events

subagent.started

  • toolCallId (obbligatorio)
  • agentName / agentDisplayName / agentDescription (obbligatori)

subagent.completed

  • toolCallId (obbligatorio)
  • agentName / agentDisplayName (obbligatori)

subagent.failed

  • toolCallId (obbligatorio)
  • agentName / agentDisplayName (obbligatori)
  • error (obbligatorio)

subagent.selected

  • agentName (obbligatorio)
  • agentDisplayName (obbligatorio)
  • tools (obbligatorio, ammette null)

subagent.deselected

Ritorno all’agente predefinito (data è un oggetto vuoto).

skill.invoked

  • name / path / content (obbligatori)
  • allowedTools / pluginName / pluginVersion (opzionali)

Other events

abort

  • reason (obbligatorio)

user.message

  • content (obbligatorio)
  • transformedContent / attachments / source / agentMode / interactionId (opzionali)

system.message

  • content (obbligatorio)
  • role (obbligatorio)
  • name / metadata (opzionali)

external_tool.requested (ephemeral)

  • requestId / sessionId / toolCallId / toolName (obbligatori)
  • arguments (opzionale)

external_tool.completed (ephemeral)

  • requestId (obbligatorio)

exit_plan_mode.requested (ephemeral)

  • requestId / summary / planContent / actions / recommendedAction (obbligatori)

exit_plan_mode.completed (ephemeral)

  • requestId (obbligatorio)

command.queued (ephemeral)

  • requestId (obbligatorio)
  • command (obbligatorio)

command.completed (ephemeral)

  • requestId (obbligatorio)

Ordine tipico degli eventi

assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, più volte)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, più volte)
├── assistant.message
├── assistant.usage (ephemeral)
├── [se necessario permission / tool.* in loop]
assistant.turn_end
session.idle (ephemeral)

Elenco completo degli eventi (riferimento rapido)

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

Documenti correlati

Ultima modifica il 13 luglio 2026