Passer au contenu principal

Événements de streaming

Lorsque streaming: true est activé dans SessionConfig, les opérations de la session sont diffusées sous forme d’événements séquentiels. Cette page est une version française, rendue plus lisible pour Laravel, du streaming-events.md officiel.
La page SessionEvent décrit la classe SessionEvent étendue côté Laravel. Cette page est une référence de « quels types d’événements existent et quelles données ils transportent ».

Vue d’ensemble

Toutes les opérations de l’agent Copilot (raisonnement, génération de messages, exécution d’outils, demandes de permission, etc.) transitent sous forme d’événements de session.
  • Événement éphémère : diffusé en temps réel uniquement. Non persisté dans le journal de session (non rejoué à la reprise)
  • Événement persisté : sauvegardé dans le journal de session (rejoué à la reprise)
  • Événement delta : événement de différentiel arrivant par fragments (deltaContent, etc.). À concaténer pour reconstituer le texte complet
  • Chaîne parentId : chaque événement référence l’ID de l’événement précédent

Enveloppe d’événement (champs communs)

Chaque événement possède la structure commune suivante.
ChampTypeDescription
idstringID unique de l’événement (UUID v4)
timestampstringInstant de création (ISO 8601)
parentIdstring | nullID de l’événement précédent (null pour le premier)
ephemeralboolean?true pour un événement éphémère
typestringType d’événement
dataobjectPayload spécifique à l’événement

Exemple d’abonnement dans 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 {
    // Tous les événements
    $session->on(function (SessionEvent $event): void {
        info($event->type(), $event->toArray());
    });

    // Un événement spécifique
    $session->on(SessionEventType::ASSISTANT_MESSAGE_DELTA, function (SessionEvent $event): void {
        echo $event->deltaContent();
    });

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

Principales catégories d’événements

Assistant events

assistant.turn_start

Début de tour.
  • turnId (requis)
  • interactionId (optionnel)

assistant.intent (éphémère)

Intention d’exécution en cours (ex. Exploring codebase).
  • intent (requis)

assistant.reasoning

Version finalisée du bloc de raisonnement.
  • reasoningId (requis)
  • content (requis)

assistant.reasoning_delta (éphémère)

Delta du texte de raisonnement.
  • reasoningId (requis)
  • deltaContent (requis)

assistant.message

Message finalisé de l’assistant. Principaux champs :
  • messageId (requis)
  • content (requis)
  • toolRequests (optionnel)
  • reasoningOpaque / reasoningText / encryptedContent (optionnels)
  • phase / outputTokens / interactionId (optionnels)
  • parentToolCallId (optionnel, quand issu d’un sous-agent)

assistant.message_delta (éphémère)

Delta du corps de message.
  • messageId (requis)
  • deltaContent (requis)
  • parentToolCallId (optionnel)

assistant.turn_end

Fin de tour.
  • turnId (requis)

assistant.usage (éphémère)

Informations de consommation par appel d’API. Principaux champs :
  • model (requis)
  • inputTokens / outputTokens / cost / duration (optionnels)
  • apiCallId / providerCallId (optionnels)
  • quotaSnapshots / copilotUsage (optionnels)

assistant.streaming_delta (éphémère)

Progression bas niveau de réception.
  • totalResponseSizeBytes (requis)

Événements d’exécution d’outil

tool.execution_start

Début d’exécution d’un outil.
  • toolCallId (requis)
  • toolName (requis)
  • arguments / mcpServerName / mcpToolName / parentToolCallId (optionnels)

tool.execution_partial_result (éphémère)

Sortie partielle pendant l’exécution.
  • toolCallId (requis)
  • partialOutput (requis)

tool.execution_progress (éphémère)

Message de progression.
  • toolCallId (requis)
  • progressMessage (requis)

tool.execution_complete

Fin d’exécution (succès/échec).
  • toolCallId (requis)
  • success (requis)
  • result (en cas de succès)
  • error (en cas d’échec)
  • toolTelemetry / parentToolCallId (optionnels)

tool.user_requested

Appel d’outil demandé explicitement par l’utilisateur.
  • toolCallId (requis)
  • toolName (requis)
  • arguments (optionnel)

Cycle de vie de session

session.start

Début de session. En Cloud Sessions, il est plus sûr d’attendre un session.start dont le producer est copilot-agent avant d’envoyer le premier prompt.
  • producer (optionnel)

session.idle (éphémère)

Le traitement en cours est terminé, en attente du prochain input.
  • backgroundTasks (optionnel)

session.error

Erreur pendant le traitement.
  • errorType (requis)
  • message (requis)
  • stack / statusCode / providerCallId (optionnels)

session.compaction_start

Début de la compaction de contexte (data est un objet vide).

session.compaction_complete

Fin de la compaction de contexte. Principaux champs :
  • success (requis)
  • error (optionnel)
  • preCompactionTokens / postCompactionTokens (optionnels)
  • summaryContent / checkpointPath (optionnels)

session.title_changed (éphémère)

Mise à jour automatique du titre.
  • title (requis)

session.context_changed

Changement de contexte de travail.
  • cwd (requis)
  • gitRoot / repository / branch (optionnels)

session.info

Informations de session (URL distante, etc.).
  • infoType (requis)
  • url (optionnel, ex. si infoType vaut remote)

session.remote_steerable_changed

Indique un changement d’éligibilité au pilotage distant depuis Mission Control.
  • remoteSteerable (optionnel)

session.usage_info (éphémère)

État d’utilisation de la fenêtre de contexte.
  • tokenLimit (requis)
  • currentTokens (requis)
  • messagesLength (requis)

session.task_complete

Notification d’achèvement de tâche.
  • summary (optionnel)

session.shutdown

Fin de session. Principaux champs :
  • shutdownType (requis)
  • errorReason (optionnel)
  • totalPremiumRequests / totalApiDurationMs (requis)
  • codeChanges / modelMetrics (requis)

Événements permission / entrée utilisateur

permission.requested (éphémère)

Demande de confirmation de permission.
  • requestId (requis)
  • permissionRequest (requis)
permissionRequest.kind :
  • shell
  • write
  • read
  • mcp
  • url
  • memory
  • custom-tool

permission.completed (éphémère)

Résolution de la demande de permission.
  • requestId (requis)
  • result.kind (requis)

user_input.requested (éphémère)

Question posée à l’utilisateur.
  • requestId (requis)
  • question (requis)
  • choices / allowFreeform (optionnels)

user_input.completed (éphémère)

Fin de la saisie utilisateur.
  • requestId (requis)

elicitation.requested (éphémère)

Demande de saisie structurée (formulaire).
  • requestId (requis)
  • message (requis)
  • requestedSchema (requis)

elicitation.completed (éphémère)

Fin de la saisie structurée.
  • requestId (requis)

Sous-agents / skills

subagent.started

  • toolCallId (requis)
  • agentName / agentDisplayName / agentDescription (requis)

subagent.completed

  • toolCallId (requis)
  • agentName / agentDisplayName (requis)

subagent.failed

  • toolCallId (requis)
  • agentName / agentDisplayName (requis)
  • error (requis)

subagent.selected

  • agentName (requis)
  • agentDisplayName (requis)
  • tools (requis, null autorisé)

subagent.deselected

Retour à l’agent par défaut (data est un objet vide).

skill.invoked

  • name / path / content (requis)
  • allowedTools / pluginName / pluginVersion (optionnels)

Autres événements

abort

  • reason (requis)

user.message

  • content (requis)
  • transformedContent / attachments / source / agentMode / interactionId (optionnels)

system.message

  • content (requis)
  • role (requis)
  • name / metadata (optionnels)

external_tool.requested (éphémère)

  • requestId / sessionId / toolCallId / toolName (requis)
  • arguments (optionnel)

external_tool.completed (éphémère)

  • requestId (requis)

exit_plan_mode.requested (éphémère)

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

exit_plan_mode.completed (éphémère)

  • requestId (requis)

command.queued (éphémère)

  • requestId (requis)
  • command (requis)

command.completed (éphémère)

  • requestId (requis)

Ordre typique des événements

assistant.turn_start
├── assistant.intent (éphémère)
├── assistant.reasoning_delta (éphémère, plusieurs fois)
├── assistant.reasoning
├── assistant.message_delta (éphémère, plusieurs fois)
├── assistant.message
├── assistant.usage (éphémère)
├── [boucle permission / tool.* si nécessaire]
assistant.turn_end
session.idle (éphémère)

Liste complète (référence rapide)

Type d’événementÉphémèreCatégorie
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

Documents associés

Dernière modification le 13 juillet 2026