Remarque
Kit de développement logiciel (SDK) Copilot est actuellement en préversion technique. Les fonctionnalités et la disponibilité sont susceptibles de changer.
Chaque action que l’agent Copilot prend, en pensant, en écrivant du code, en exécutant des outils, est émise en tant qu’événement de session auquel vous pouvez vous abonner. Cet article est une référence au niveau du champ pour chaque type d’événement afin de connaître exactement les données à attendre.
Lorsqu’il streaming: true est défini sur une session, le SDK émet des événements éphémères en temps réel (deltas, mises à jour de progression) ainsi que des événements persistants (messages complets, résultats de l’outil). Tous les événements partagent une enveloppe commune et portent une data charge utile dont la forme dépend de l’événement type. Pour obtenir un diagramme de séquence du flux d’événements complet, consultez le github/copilot-sdk référentiel.
| Concept | Description |
|---|
**Événement éphémère** | Transitoire; diffusé en temps réel, mais **pas** conservé dans le journal de session. Pas rejoué lors de la reprise de session. |
|
Événement persistant | Enregistré dans le journal des événements de session sur le disque. Rejoué lors de la reprise d’une session. |
|
Événement Delta | Segment de streaming éphémère (texte ou raisonnement). Accumulez des deltas pour générer le contenu complet. |
|
**
parentId Chaîne** | Chaque événement pointe vers l’événement parentId précédent, formant une liste liée que vous pouvez parcourir. |
Enveloppe d’événement
Chaque événement de session, quel que soit le type, inclut les champs suivants :
| Champ | Type | Description |
|---|---|---|
id |
`string` (UUID v4) | Identificateur d’événement unique |
| timestamp |
string (ISO 8601) | Lors de la création de l’événement |
| parentId | string \| null | ID de l’événement précédent dans la chaîne ; null pour le premier événement |
| ephemeral | boolean? |
true pour les événements temporaires ; absents ou false pour les événements persistants |
| type | string | Discriminateur de type d’événement (voir les tableaux ci-dessous) |
| data | object | Charge utile spécifique à l’événement |
Abonnement aux événements
// All events
session.on((event) => {
console.log(event.type, event.data);
});
// Specific event type — data is narrowed automatically
session.on("assistant.message_delta", (event) => {
process.stdout.write(event.data.deltaContent);
});
Pour obtenir des exemples dans Python, Go et .NET, consultez le github/copilot-sdk référentiel.
Conseil
**Python / Go :** Ces kits SDK utilisent une `Data` seule classe/struct avec tous les champs possibles comme facultatifs/nullables. Seuls les champs répertoriés dans les tableaux ci-dessous sont renseignés pour chaque type d’événement , le reste sera `None` / `nil`.
**.NET:** Le Kit de développement logiciel (SDK) .NET utilise des classes de données distinctes et fortement typées par événement (par exemple), `AssistantMessageDeltaData`de sorte que seuls les champs pertinents existent sur chaque type.
**TypeScript :** Le Kit de développement logiciel (SDK) TypeScript utilise une union discriminée : lorsque vous effectuez une correspondance sur `event.type`, la charge utile `data` est automatiquement réduite à la forme correcte.
Événements de l'Assistant
Ces événements effectuent le suivi du cycle de vie de réponse de l’agent, du début en passant par les flux en continu jusqu’au message final.
assistant.turn_start
Émis lorsque l'agent commence à traiter une itération.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
turnId | string | ✅ | Identifiant de tour (généralement un numéro de tour converti en chaîne de caractères) |
interactionId | string | ||
| Identificateur d’interaction pour la corrélation de télémétrie |
assistant.intent
Éphémère. Brève description de ce que fait actuellement l’agent, et mise à jour à mesure qu’il travaille.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
intent | string | ✅ | Intention lisible par l’homme (par exemple, « Exploration du codebase ») |
assistant.reasoning
Bloc de pensée étendu complet du modèle. Émis après la fin du raisonnement.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
reasoningId | string | ✅ | Identificateur unique pour ce bloc de raisonnement |
content | string | ✅ | Texte complet de réflexion approfondie |
assistant.reasoning_delta
Éphémère. Partie incrémentielle de la pensée étendue du modèle, diffusée en temps réel.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
reasoningId | string | ✅ | Correspond à l’événement correspondant assistant.reasoning |
deltaContent | string | ✅ | Bloc de texte à ajouter au contenu de raisonnement |
assistant.message
Réponse complète de l’Assistant pour cet appel LLM. Peut inclure des demandes d’appel d’outil.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
messageId | string | ✅ | Identificateur unique pour ce message |
content | string | ✅ | Réponse textuelle de l’Assistant |
toolRequests | ToolRequest[] | ||
| Les appels que l'assistant souhaite faire avec l'outil (voir ci-dessous) | |||
reasoningOpaque | string | ||
| Pensée étendue chiffrée (modèles anthropiques) ; liée à la session | |||
reasoningText | string | ||
| Texte de raisonnement lisible résultant d'une réflexion approfondie | |||
encryptedContent | string | ||
| Contenu de raisonnement chiffré (modèles OpenAI) ; liées à la session | |||
phase | string | ||
Phase de génération (par exemple, "thinking" vs "response") | |||
outputTokens | number | ||
| Nombre exact de jetons de sortie dans la réponse de l’API | |||
interactionId | string | ||
| Identificateur d’interaction pour la télémétrie | |||
parentToolCallId | string | ||
| Définir quand ce message provient d’un sous-agent |
**
`ToolRequest` Champs:**
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | ID unique pour cet appel d’outil |
name | string | ✅ | Nom de l’outil (par exemple, , "bash"``"edit", "grep") |
arguments | object | ||
| Arguments analysés pour l’outil | |||
type | "function" | "custom" | ||
Type d’appel ; prend la valeur par défaut "function" lorsqu’il est absent |
assistant.message_delta
Éphémère. Segment incrémentiel de la réponse de texte de l’assistant, diffusé en temps réel.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
messageId | string | ✅ | Correspond à l’événement correspondant assistant.message |
deltaContent | string | ✅ | Bloc de texte à ajouter au message |
parentToolCallId | string | ||
| Définir lorsqu’il provient d’un sous-agent |
assistant.turn_end
Émis lorsque l’agent termine un tour (toutes les exécutions d’outils sont terminées, réponse finale remise).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
turnId | string | ✅ | Correspond à l’événement correspondant assistant.turn_start |
assistant.usage
Éphémère. Informations d’utilisation et de coût des jetons pour un appel d’API individuel.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
model | string | ✅ | Identificateur de modèle (par exemple, "gpt-4.1") |
inputTokens | number | ||
| Jetons d’entrée consommés | |||
outputTokens | number | ||
| Jetons de sortie produits | |||
cacheReadTokens | number | ||
| Jetons lus à partir du cache d’invite | |||
cacheWriteTokens | number | ||
| Jetons écrits dans le cache d’invite | |||
cost | number | ||
| Coût du multiplicateur de modèle pour la facturation | |||
duration | number | ||
| Durée des appels d’API en millisecondes | |||
initiator | string | ||
Ce qui a déclenché cet appel (par exemple, "sub-agent") ; absent si initié par l'utilisateur | |||
apiCallId | string | ||
ID d’achèvement du fournisseur (par exemple, chatcmpl-abc123) | |||
providerCallId | string |
GitHub ID de suivi de requête (`x-github-request-id`) |
| parentToolCallId | string |
| Définir lorsque l’utilisation provient d’un sous-agent |
| quotaSnapshots | Record<string, QuotaSnapshot> |
| Utilisation des ressources par quota, indexé par identificateur de quota |
| copilotUsage | CopilotUsage |
| Répartition des coûts des jetons itemisés à partir de l’API |
assistant.streaming_delta
Éphémère. Indicateur de progression réseau de bas niveau : nombre total d’octets reçus de la réponse de l’API de diffusion en continu.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
totalResponseSizeBytes | number | ✅ | Octets cumulés reçus jusqu’à présent |
Événements d’exécution d’outils
Ces événements suivent le cycle de vie complet de chaque appel d'outil, depuis la demande d'appel d'outil par le modèle, à travers l'exécution, jusqu'à son achèvement.
tool.execution_start
Émis lorsqu’un outil commence à s’exécuter.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Identificateur unique pour cet appel d’outil |
toolName | string | ✅ | Nom de l’outil (par exemple, "bash", "edit", "grep") |
arguments | object | ||
| Arguments analysés passés à l’outil | |||
mcpServerName | string | ||
| Nom du serveur MCP, lorsque l’outil est fourni par un serveur MCP | |||
mcpToolName | string | ||
| Nom de l’outil d’origine sur le serveur MCP | |||
parentToolCallId | string | ||
| Définir lorsqu’il est appelé par un sous-agent |
tool.execution_partial_result
Éphémère. Sortie incrémentielle d’un outil en cours d’exécution (par exemple, diffusion en continu de la sortie bash).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Correspond au tool.execution_start correspondant |
partialOutput | string | ✅ | Segment de sortie incrémentiel |
tool.execution_progress
Éphémère. État de progression lisible par l’homme à partir d’un outil en cours d’exécution (par exemple, notifications de progression du serveur MCP).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Correspond au tool.execution_start correspondant |
progressMessage | string | ✅ | Message d’état de progression |
tool.execution_complete
Émis lorsqu'un outil termine son exécution, avec succès ou avec une erreur.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Correspond au tool.execution_start correspondant |
success | boolean | ✅ | Indique si l’exécution a réussi |
model | string | ||
| Modèle qui a généré cet appel d’outil | |||
interactionId | string | ||
| Identificateur d’interaction | |||
isUserRequested | boolean |
`true` lorsque l’utilisateur a explicitement demandé cet appel d’outil |
| result | Result |
| Présentation sur la réussite (voir ci-dessous) |
| error | { message, code? } |
| Présent en cas d’échec |
| toolTelemetry | object |
| Télémétrie spécifique à l’outil |
| parentToolCallId | string |
| Définir lorsqu’il est appelé par un sous-agent |
**
`Result` Champs:**
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
content | string | ✅ | Résultat concis envoyé au LLM (pouvant être tronqué pour l'optimisation des tokens) |
detailedContent | string | ||
| Résultat complet pour l'affichage, préservant le contenu complet, y compris les différences | |||
contents | ContentBlock[] | ||
| Blocs de contenu structurés (texte, terminal, image, audio, ressource) |
tool.user_requested
Émis lorsque l’utilisateur demande explicitement un appel d’outil (plutôt que le modèle choisissant d’en appeler un).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Identificateur unique pour cet appel d’outil |
toolName | string | ✅ | Nom de l’outil que l’utilisateur souhaite appeler |
arguments | object | ||
| Arguments pour l’appel |
Événements de cycle de vie de session
session.idle
Éphémère. L’agent a terminé tout le traitement et est prêt pour le message suivant. Il s’agit du signal qu’un tour est entièrement terminé.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
backgroundTasks | BackgroundTasks | ||
| Agents/shells en arrière-plan continuent de s'exécuter lorsque l'agent devenait inactif |
session.error
Une erreur s’est produite pendant le traitement de la session.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
errorType | string | ✅ | Catégorie d’erreur (par exemple, , "authentication"``"quota", "rate_limit") |
message | string | ✅ | Message d’erreur lisible par l’humain |
stack | string | ||
| Trace de pile d’erreurs | |||
statusCode | number | ||
| Code d’état HTTP à partir de la requête en amont | |||
providerCallId | string |
GitHub ID de suivi de requête pour la corrélation des journaux côté serveur |
session.compaction_start
La compaction de la fenêtre de contexte a commencé. La charge utile des données est vide ({}).
session.compaction_complete
Compactage de fenêtre de contexte terminé.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
success | boolean | ✅ | Indique si la compaction a réussi |
error | string | ||
| Message d’erreur en cas d’échec de compactage | |||
preCompactionTokens | number | ||
| Jetons avant compactage | |||
postCompactionTokens | number | ||
| Jetons après compactage | |||
preCompactionMessagesLength | number | ||
| Nombre de messages avant compactage | |||
messagesRemoved | number | ||
| Messages supprimés | |||
tokensRemoved | number | ||
| Jetons supprimés | |||
summaryContent | string | ||
| Résumé de l'historique compacté généré par le LLM | |||
checkpointNumber | number | ||
| Numéro d’instantané de point de contrôle créé pour la récupération | |||
checkpointPath | string | ||
| Chemin d’accès au fichier où le point de contrôle a été stocké | |||
compactionTokensUsed | { input, output, cachedInput } | ||
| Utilisation des jetons pour l'appel de la compaction avec LLM | |||
requestId | string |
GitHub ID de suivi de requête pour l’appel de compactage |
session.title_changed
Éphémère. Le titre généré automatiquement de la session a été mis à jour.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
title | string | ✅ | Nouveau titre de session |
session.context_changed
Le répertoire de travail ou le contexte du référentiel de la session a changé.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
cwd | string | ✅ | Répertoire de travail actuel |
gitRoot | string | ||
| Racine du référentiel Git | |||
repository | string | ||
Référentiel au format "owner/name" | |||
branch | string | ||
| Branche Git actuelle |
session.usage_info
Éphémère. Instantané d’utilisation de la fenêtre de contexte.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
tokenLimit | number | ✅ | Nombre maximal de jetons pour la fenêtre de contexte du modèle |
currentTokens | number | ✅ | Jetons actuels dans la fenêtre de contexte |
messagesLength | number | ✅ | Nombre de messages actuels dans la conversation |
session.task_complete
L’agent a terminé sa tâche affectée.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
summary | string | ||
| Résumé de la tâche terminée |
session.shutdown
La session s’est terminée.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
shutdownType | "routine" | "error" | ✅ | Arrêt normal ou panne |
errorReason | string | ||
Description de l’erreur quand shutdownType est "error" | |||
totalPremiumRequests | number | ✅ | Nombre total de demandes d’API Premium utilisées |
totalApiDurationMs | number | ✅ | Temps d’appel d’API cumulé en millisecondes |
sessionStartTime | number | ✅ | Horodatage Unix (ms) au démarrage de la session |
codeChanges | { linesAdded, linesRemoved, filesModified } | ✅ | Métriques globales de modification de code |
modelMetrics | Record<string, ModelMetric> | ✅ | Répartition de l’utilisation par modèle |
currentModel | string | ||
| Modèle sélectionné au moment de l’arrêt |
Événements d’autorisation et d’entrée utilisateur
Ces événements sont émis lorsque l’agent a besoin d’approbation ou d’entrée de l’utilisateur avant de continuer.
permission.requested
Éphémère. L’agent a besoin d’une autorisation pour effectuer une action (exécuter une commande, écrire un fichier, etc.).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToPermission() |
permissionRequest | PermissionRequest | ✅ | Détails de l’autorisation demandée |
Il permissionRequest s’agit d’une union discriminatoire sur kind:
kind | Champs clés | Description |
|---|---|---|
"shell" |
`fullCommandText`, `intention`, `commands[]`, `possiblePaths[]` | Exécuter une commande shell |
| "write" |
fileName, diff, intention, newFileContents? | Écrire/modifier un fichier |
| "read" |
path, intention | Lire un fichier ou un répertoire |
| "mcp" |
serverName, toolName, , toolTitle, args?, readOnly | Appeler un outil MCP |
| "url" |
url, intention | Récupérer une URL |
| "memory" |
subject, fact, citations | Stocker une mémoire |
| "custom-tool" |
toolName, toolDescription, args? | Appeler un outil personnalisé |
Toutes les kind variantes incluent également une liaison facultative toolCallId vers l’appel d’outil qui a déclenché la demande.
permission.completed
Éphémère. Une demande d’autorisation a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au permission.requested correspondant |
result.kind | string | ✅ | Un des : "approved", , "denied-by-rules"``"denied-interactively-by-user", "denied-no-approval-rule-and-could-not-request-from-user","denied-by-content-exclusion-policy" |
user_input.requested
Éphémère. L’agent pose une question à l’utilisateur.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToUserInput() |
question | string | ✅ | Question à présenter à l’utilisateur |
choices | string[] | ||
| Choix prédéfinis pour l’utilisateur | |||
allowFreeform | boolean | ||
| Indique si l’entrée de texte de forme libre est autorisée |
user_input.completed
Éphémère. Une demande d’entrée utilisateur a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au user_input.requested correspondant |
elicitation.requested
Éphémère. L'agent a besoin d'une entrée de formulaire structurée de l'utilisateur (protocole MCP d'élucidation).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToElicitation() |
message | string | ✅ | Description des informations nécessaires |
mode | "form" | ||
Mode d’élicitation (actuellement uniquement "form") | |||
requestedSchema | { type: "object", properties, required? } | ✅ | Schéma JSON décrivant les champs de formulaire |
elicitation.completed
Éphémère. Une demande d’éciation a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au elicitation.requested correspondant |
Événements de sous-agent et de compétence
subagent.started
Un agent personnalisé a été appelé en tant que sous-agent.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Appel de l’outil parent qui a généré ce sous-agent |
agentName | string | ✅ | Nom interne du sous-agent |
agentDisplayName | string | ✅ | Nom d’affichage lisible par l’homme |
agentDescription | string | ✅ | Description de ce que fait le sous-agent |
subagent.completed
Un sous-agent a terminé avec succès.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Correspond au subagent.started correspondant |
agentName | string | ✅ | Nom interne |
agentDisplayName | string | ✅ | Nom d'affichage |
subagent.failed
Un sous-agent a rencontré une erreur.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
toolCallId | string | ✅ | Correspond au subagent.started correspondant |
agentName | string | ✅ | Nom interne |
agentDisplayName | string | ✅ | Nom d'affichage |
error | string | ✅ | Message d'erreur |
subagent.selected
Un agent personnalisé a été sélectionné (déduit) pour gérer la requête actuelle.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
agentName | string | ✅ | Nom interne de l’agent sélectionné |
agentDisplayName | string | ✅ | Nom d'affichage |
tools | string[] | null | ✅ | Noms d’outils disponibles pour cet agent ; null pour tous les outils |
subagent.deselected
Un agent personnalisé a été désélectionné, retournant à l’agent par défaut. La charge utile de réponse est vide ({}).
skill.invoked
Une compétence a été activée pour la conversation actuelle.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
name | string | ✅ | Nom de la compétence |
path | string | ✅ | Chemin d’accès au fichier de la définition SKILL.md |
content | string | ✅ | Contenu de compétences intégral intégré dans la conversation |
allowedTools | string[] | ||
| Outils approuvés automatiquement pendant que cette compétence est active | |||
pluginName | string | ||
| Le plug-in d'origine de la compétence | |||
pluginVersion | string | ||
| Version du plug-in |
Autres événements
abort
Le tour actuel a été abandonné.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
reason | string | ✅ | Pourquoi le tour a été abandonné (par exemple, "user initiated") |
user.message
L’utilisateur a envoyé un message. Enregistré pour la chronologie de la session.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
content | string | ✅ | Texte du message de l’utilisateur |
transformedContent | string | ||
| Version transformée après prétraitement | |||
attachments | Attachment[] | ||
| Fichier, répertoire, élément sélectionné, objet blob ou pièce jointe de référence GitHub | |||
source | string | ||
| Identificateur de source de message | |||
agentMode | string | ||
Mode agent : "interactive", , "plan"``"autopilot"ou"shell" | |||
interactionId | string | ||
| Identificateur d’interaction |
system.message
Une invite de système ou de développeur a été injectée dans la conversation.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
content | string | ✅ | Texte de l’invite |
role | "system" | "developer" | ✅ | Rôle du message |
name | string | ||
| Identificateur de la source | |||
metadata | { promptVersion?, variables? } | ||
| Métadonnées du modèle d'invite |
external_tool.requested
Éphémère. L’agent souhaite appeler un outil externe (fourni par le consommateur du SDK).
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToExternalTool() |
sessionId | string | ✅ | Session à laquelle cette demande appartient |
toolCallId | string | ✅ | Identifiant d'outil appelé pour cet appel |
toolName | string | ✅ | Nom de l’outil externe |
arguments | object | ||
| Arguments en faveur de l'outil |
external_tool.completed
Éphémère. Une demande d’outil externe a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au external_tool.requested correspondant |
exit_plan_mode.requested
Éphémère. L’agent a créé un plan et souhaite quitter le mode plan.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToExitPlanMode() |
summary | string | ✅ | Résumé du plan |
planContent | string | ✅ | Contenu complet du fichier de plan |
actions | string[] | ✅ | Actions utilisateur disponibles (par exemple, approuver, modifier, rejeter) |
recommendedAction | string | ✅ | Action suggérée |
exit_plan_mode.completed
Éphémère. Une demande de mode de plan de sortie a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au exit_plan_mode.requested correspondant |
command.queued
Éphémère. Une commande slash a été mise en file d’attente pour exécution.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Utilisez-le pour répondre via session.respondToQueuedCommand() |
command | string | ✅ | Texte de la commande slash (par exemple, /help, /clear) |
command.completed
Éphémère. Une commande mise en file d’attente a été résolue.
| Champ de données | Type | Obligatoire | Description |
|---|---|---|---|
requestId | string | ✅ | Correspond au command.queued correspondant |
Référence rapide : flux de transformation agentique
Un tour agentique classique émet des événements dans cet ordre :
assistant.turn_start → Turn begins
├── assistant.intent → What the agent plans to do (ephemeral)
├── assistant.reasoning_delta → Streaming thinking chunks (ephemeral, repeated)
├── assistant.reasoning → Complete thinking block
├── assistant.message_delta → Streaming response chunks (ephemeral, repeated)
├── assistant.message → Complete response (may include toolRequests)
├── assistant.usage → Token usage for this API call (ephemeral)
│
├── [If tools were requested:]
│ ├── permission.requested → Needs user approval (ephemeral)
│ ├── permission.completed → Approval result (ephemeral)
│ ├── tool.execution_start → Tool begins
│ ├── tool.execution_partial_result → Streaming tool output (ephemeral, repeated)
│ ├── tool.execution_progress → Progress updates (ephemeral, repeated)
│ ├── tool.execution_complete → Tool finished
│ │
│ └── [Agent loops: more reasoning → message → tool calls...]
│
assistant.turn_end → Turn complete
session.idle → Ready for next message (ephemeral)
Tous les types d’événements en un clin d’œil
| Type d’événement | Éphémère | Catégorie | Champs de données clés |
|---|---|---|---|
assistant.turn_start | |||
| Assistant |
`turnId`, `interactionId?` |
| assistant.intent | ✅ | Assistant | intent |
| assistant.reasoning |
| Assistant |
reasoningId, content |
| assistant.reasoning_delta | ✅ | Assistant |
reasoningId, deltaContent |
| assistant.streaming_delta | ✅ | Assistant | totalResponseSizeBytes |
| assistant.message |
| Assistant |
messageId, content, , toolRequests?, outputTokens?, phase? |
| assistant.message_delta | ✅ | Assistant |
messageId, deltaContent, parentToolCallId? |
| assistant.turn_end |
| Assistant | turnId |
| assistant.usage | ✅ | Assistant |
model, inputTokens?, , outputTokens?, cost?, duration? |
| tool.user_requested |
| Outil |
toolCallId, toolName, arguments? |
| tool.execution_start |
| Outil |
toolCallId, toolName, arguments?, mcpServerName? |
| tool.execution_partial_result | ✅ | Outil |
toolCallId, partialOutput |
| tool.execution_progress | ✅ | Outil |
toolCallId, progressMessage |
| tool.execution_complete |
| Outil |
toolCallId, success, result?, error? |
| session.idle | ✅ | Session | backgroundTasks? |
| session.error |
| Session |
errorType, message, statusCode? |
| session.compaction_start |
| Session |
(vide) |
| session.compaction_complete |
| Session |
success, preCompactionTokens?, summaryContent? |
| session.title_changed | ✅ | Session | title |
| session.context_changed |
| Session |
cwd, gitRoot?, repository?, branch? |
| session.usage_info | ✅ | Session |
tokenLimit, currentTokens, messagesLength |
| session.task_complete |
| Session | summary? |
| session.shutdown |
| Session |
shutdownType, codeChanges, modelMetrics |
| permission.requested | ✅ | Autorisation |
requestId, permissionRequest |
| permission.completed | ✅ | Autorisation |
requestId, result.kind |
| user_input.requested | ✅ | Entrée utilisateur |
requestId, question, choices? |
| user_input.completed | ✅ | Entrée utilisateur | requestId |
| elicitation.requested | ✅ | Entrée utilisateur |
requestId, message, requestedSchema |
| elicitation.completed | ✅ | Entrée utilisateur | requestId |
| subagent.started |
| Sous-agent |
toolCallId, agentName, agentDisplayName |
| subagent.completed |
| sous-agent |
toolCallId, agentName, agentDisplayName |
| subagent.failed |
| Sous-agent |
toolCallId, agentName, error |
| subagent.selected |
| Sous-Agent |
agentName, agentDisplayName, tools |
| subagent.deselected |
| Sous-agent |
(vide) |
| skill.invoked |
| Compétence |
name, path, content, allowedTools? |
| abort |
| Contrôle | reason |
| user.message |
| Utilisateur |
content, attachments?, agentMode? |
| system.message |
| Système |
content, role |
| external_tool.requested | ✅ | Outil externe |
requestId, toolName, arguments? |
| external_tool.completed | ✅ | Outil externe | requestId |
| command.queued | ✅ | Command |
requestId, command |
| command.completed | ✅ | Command | requestId |
| exit_plan_mode.requested | ✅ | Plan Mode |
requestId, summary, planContent, actions |
| exit_plan_mode.completed | ✅ | Plan Mode | requestId |