Zum Hauptinhalt springen

Streaming-Ereignisse

Wenn Sie in SessionConfig 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
  • parentId chain: Verkettung, in der jedes Event die ID des vorangegangenen Events referenziert

Event-Envelope (gemeinsame Felder)

Alle Ereignisse haben die folgende gemeinsame Struktur.
FieldTypeBeschreibung
idstringEindeutige Event-ID (UUID v4)
timestampstringErstellungszeitpunkt (ISO 8601)
parentIdstring | nullID des vorherigen Events (beim ersten Event null)
ephemeralboolean?Bei temporären Events true
typestringEreignistyp
dataobjectEreignisspezifischer Payload

Abonnement-Beispiel 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 {
    // Alle Events
    $session->on(function (SessionEvent $event): void {
        info($event->type(), $event->toArray());
    });

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

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

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. wenn infoType remote ist)

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:
  • shell
  • write
  • read
  • mcp
  • url
  • memory
  • custom-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, null zulä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

assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, mehrfach)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, mehrfach)
├── assistant.message
├── assistant.usage (ephemeral)
├── [bei Bedarf permission / tool.* in Schleife]
assistant.turn_end
session.idle (ephemeral)

Übersicht aller Events (Quickreferenz)

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

Verwandte Dokumentation

Zuletzt geändert am 13. Juli 2026