Streaming-Ereignisse
Wenn Sie inSessionConfig streaming: true setzen, wird der Verlauf einer Session als Ereignisstrom ausgeliefert.
Diese Seite ist eine für Laravel aufbereitete deutsche Fassung der offiziellen streaming-events.md.
Die Seite SessionEvent beschreibt die für Laravel erweiterte SessionEvent-Klasse selbst.
Diese Seite ist eine Referenz, „welche Daten bei welchem Ereignistyp ankommen”.
Überblick
Alle Verarbeitungsschritte des Copilot-Agenten (Reasoning, Nachrichtengenerierung, Tool-Ausführung, Berechtigungsprüfungen usw.) werden als Session-Events übertragen.- Ephemeral event: Nur Echtzeit-Auslieferung. Wird nicht im Session-Log persistiert (beim Fortsetzen nicht erneut abgespielt)
- Persisted event: Wird im Session-Log gespeichert (beim Fortsetzen erneut abgespielt)
- Delta event: Ereignisse, die in Teilstücken ankommen (z. B.
deltaContent). Werden zum Gesamtinhalt zusammengefügt parentIdchain: Verkettung, in der jedes Event die ID des vorangegangenen Events referenziert
Event-Envelope (gemeinsame Felder)
Alle Ereignisse haben die folgende gemeinsame Struktur.| Field | Type | Beschreibung |
|---|---|---|
id | string | Eindeutige Event-ID (UUID v4) |
timestamp | string | Erstellungszeitpunkt (ISO 8601) |
parentId | string | null | ID des vorherigen Events (beim ersten Event null) |
ephemeral | boolean? | Bei temporären Events true |
type | string | Ereignistyp |
data | object | Ereignisspezifischer Payload |
Abonnement-Beispiel in Laravel
Hauptkategorien
Assistant events
assistant.turn_start
Turn-Start.
turnId(erforderlich)interactionId(optional)
assistant.intent (ephemeral)
Aktuelle Ausführungsabsicht (z. B. Exploring codebase).
intent(erforderlich)
assistant.reasoning
Vollständiger Reasoning-Block.
reasoningId(erforderlich)content(erforderlich)
assistant.reasoning_delta (ephemeral)
Delta des Reasoning-Textes.
reasoningId(erforderlich)deltaContent(erforderlich)
assistant.message
Vollständige Nachricht des Assistenten.
Wichtige Felder:
messageId(erforderlich)content(erforderlich)toolRequests(optional)reasoningOpaque/reasoningText/encryptedContent(optional)phase/outputTokens/interactionId(optional)parentToolCallId(optional, wenn aus einem Sub-Agenten stammend)
assistant.message_delta (ephemeral)
Delta des Nachrichteninhalts.
messageId(erforderlich)deltaContent(erforderlich)parentToolCallId(optional)
assistant.turn_end
Turn-Ende.
turnId(erforderlich)
assistant.usage (ephemeral)
Verbrauchsinformationen pro API-Aufruf.
Wichtige Felder:
model(erforderlich)inputTokens/outputTokens/cost/duration(optional)apiCallId/providerCallId(optional)quotaSnapshots/copilotUsage(optional)
assistant.streaming_delta (ephemeral)
Low-Level-Empfangsfortschritt.
totalResponseSizeBytes(erforderlich)
Tool execution events
tool.execution_start
Beginn der Tool-Ausführung.
toolCallId(erforderlich)toolName(erforderlich)arguments/mcpServerName/mcpToolName/parentToolCallId(optional)
tool.execution_partial_result (ephemeral)
Teilweise Ausgabe während der Tool-Ausführung.
toolCallId(erforderlich)partialOutput(erforderlich)
tool.execution_progress (ephemeral)
Fortschrittsnachricht.
toolCallId(erforderlich)progressMessage(erforderlich)
tool.execution_complete
Abschluss der Tool-Ausführung (Erfolg/Misserfolg).
toolCallId(erforderlich)success(erforderlich)result(bei Erfolg)error(bei Fehlschlag)toolTelemetry/parentToolCallId(optional)
tool.user_requested
Tool-Aufruf auf explizite Nutzeranforderung.
toolCallId(erforderlich)toolName(erforderlich)arguments(optional)
Session lifecycle events
session.start
Session-Start. Bei Cloud Sessions ist es sicher, den ersten Prompt erst zu senden, nachdem producer das session.start des copilot-agent bestätigt hat.
producer(optional)
session.idle (ephemeral)
Aktuelle Verarbeitung abgeschlossen, System wartet auf nächste Eingabe.
backgroundTasks(optional)
session.error
Fehler während der Session-Verarbeitung.
errorType(erforderlich)message(erforderlich)stack/statusCode/providerCallId(optional)
session.compaction_start
Beginn der Kontextkompaktierung (data ist ein leeres Objekt).
session.compaction_complete
Kontextkompaktierung abgeschlossen.
Wichtige Felder:
success(erforderlich)error(optional)preCompactionTokens/postCompactionTokens(optional)summaryContent/checkpointPath(optional)
session.title_changed (ephemeral)
Automatische Titelaktualisierung.
title(erforderlich)
session.context_changed
Wechsel des Arbeitskontexts.
cwd(erforderlich)gitRoot/repository/branch(optional)
session.info
Session-Informationen, z. B. eine Remote-URL.
infoType(erforderlich)url(optional, z. B. wenninfoTyperemoteist)
session.remote_steerable_changed
Ereignis, das eine Änderung der Fernsteuerbarkeit aus Mission Control anzeigt.
remoteSteerable(optional)
session.usage_info (ephemeral)
Nutzung des Context-Windows.
tokenLimit(erforderlich)currentTokens(erforderlich)messagesLength(erforderlich)
session.task_complete
Benachrichtigung über Aufgabenabschluss.
summary(optional)
session.shutdown
Session-Ende.
Wichtige Felder:
shutdownType(erforderlich)errorReason(optional)totalPremiumRequests/totalApiDurationMs(erforderlich)codeChanges/modelMetrics(erforderlich)
Permission / user input events
permission.requested (ephemeral)
Berechtigungsabfrage.
requestId(erforderlich)permissionRequest(erforderlich)
permissionRequest.kind:
shellwritereadmcpurlmemorycustom-tool
permission.completed (ephemeral)
Ergebnis der Berechtigungsanfrage.
requestId(erforderlich)result.kind(erforderlich)
user_input.requested (ephemeral)
Frage an den Nutzer.
requestId(erforderlich)question(erforderlich)choices/allowFreeform(optional)
user_input.completed (ephemeral)
Abschluss der Benutzereingabe.
requestId(erforderlich)
elicitation.requested (ephemeral)
Anfrage nach strukturierter Eingabe (Formular).
requestId(erforderlich)message(erforderlich)requestedSchema(erforderlich)
elicitation.completed (ephemeral)
Abschluss der strukturierten Eingabe.
requestId(erforderlich)
Sub-agent / skill events
subagent.started
toolCallId(erforderlich)agentName/agentDisplayName/agentDescription(erforderlich)
subagent.completed
toolCallId(erforderlich)agentName/agentDisplayName(erforderlich)
subagent.failed
toolCallId(erforderlich)agentName/agentDisplayName(erforderlich)error(erforderlich)
subagent.selected
agentName(erforderlich)agentDisplayName(erforderlich)tools(erforderlich,nullzulässig)
subagent.deselected
Rückkehr zum Standard-Agenten (data ist ein leeres Objekt).
skill.invoked
name/path/content(erforderlich)allowedTools/pluginName/pluginVersion(optional)
Other events
abort
reason(erforderlich)
user.message
content(erforderlich)transformedContent/attachments/source/agentMode/interactionId(optional)
system.message
content(erforderlich)role(erforderlich)name/metadata(optional)
external_tool.requested (ephemeral)
requestId/sessionId/toolCallId/toolName(erforderlich)arguments(optional)
external_tool.completed (ephemeral)
requestId(erforderlich)
exit_plan_mode.requested (ephemeral)
requestId/summary/planContent/actions/recommendedAction(erforderlich)
exit_plan_mode.completed (ephemeral)
requestId(erforderlich)
command.queued (ephemeral)
requestId(erforderlich)command(erforderlich)
command.completed (ephemeral)
requestId(erforderlich)
Typische Reihenfolge der Events
Übersicht aller Events (Quickreferenz)
| Event Type | Ephemeral | Category |
|---|---|---|
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 |
Verwandte Dokumentation
- Offizielle Streaming Events-Referenz
- Erläuterung der Event-Klasse in der Laravel-Version: SessionEvent
- Implementierungsmuster für Streaming: Streaming