Événements de streaming
Lorsquestreaming: 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.| Champ | Type | Description |
|---|---|---|
id | string | ID unique de l’événement (UUID v4) |
timestamp | string | Instant de création (ISO 8601) |
parentId | string | null | ID de l’événement précédent (null pour le premier) |
ephemeral | boolean? | true pour un événement éphémère |
type | string | Type d’événement |
data | object | Payload spécifique à l’événement |
Exemple d’abonnement dans Laravel
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. siinfoTypevautremote)
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 :
shellwritereadmcpurlmemorycustom-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,nullautorisé)
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
Liste complète (référence rapide)
| Type d’événement | Éphémère | Catégorie |
|---|---|---|
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 |
Documents associés
- Référence officielle des Streaming Events
- Description côté Laravel de la classe d’événement : SessionEvent
- Motifs d’implémentation du streaming : Streaming