Skip to main content

SessionEvent

Alle Nachrichten von Copilot sind Instanzen der Klasse Revolution\Copilot\Types\SessionEvent. Da sie am häufigsten verwendet wird, wurden Laravel-typische Komfortfunktionen ergänzt.

content()

Ruft die wichtigste Antwortnachricht der KI ab.
Auch die implizite Typumwandlung via __toString() liefert den Nachrichteninhalt zurück.

Event-Typ prüfen

isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta() stehen zur Verfügung. Für häufig genutzte Event-Typen können weitere Helper hinzugefügt werden. Mit is() können Sie einen beliebigen EventType prüfen.
type() gibt den String-Wert des Enums SessionEventType zurück.

failed() / successful()

Wenn der Event-Typ SESSION_ERROR ist, wird failed() zu true. successful() ist die Negation. Zur Ausrichtung an Laravel-Konventionen wurde die Methode von isError() umbenannt.

throw()

Wie bei Laravels HTTP- und Process-API wird der Fehler beibehalten und kann via throw() als Exception geworfen werden. Da bei fehlerfreiem Zustand nichts passiert, lässt sich schreiben:
Bei Event-Typ SESSION_ERROR wird Revolution\Copilot\Exceptions\SessionErrorException geworfen. Bei Timeout wird Revolution\Copilot\Exceptions\SessionTimeoutException geworfen. Bei JSON-RPC-Fehlern wird Revolution\Copilot\Exceptions\JsonRpcException geworfen.

Conditionable

when() und unless() sind verfügbar.

Dumpable

dump() und dd() sind verfügbar.

Tappable

tap() ist verfügbar.

InteractsWithData

Diese Funktion bezieht sich ausschließlich auf die Eigenschaft $data von SessionEvent. Sie können vertraute Helper wie all(), has(), only(), collect() verwenden. Details siehe InteractsWithData. Da die Struktur von $data je nach EventType unterschiedlich ist, ist dies für den ereignisspezifischen Zugriff auf Werte hilfreich. Auch content() verwendet intern InteractsWithData.

toArray() / toJson()

Sie können den gesamten SessionEvent in ein Array oder JSON umwandeln.
Eine collect()-Methode für das gesamte Event existiert nicht. Grund: $data hat bereits collect() aus InteractsWithData. Wenn Sie das gesamte Event mit Collection-Operationen bearbeiten möchten, nutzen Sie den Laravel-Helper collect().

broadcast() / broadcastNow()

Sie können mit derselben Schnittstelle wie beim StreamEvent des Laravel AI SDK broadcasten. Beim AI SDK wird es beim Streaming verwendet, beim SessionEvent aber für beliebige EventTypes.
broadcastNow() broadcastet sofort, ohne den Weg über die Queue.
Anwendungsbeispiel beim Streaming:

Event-Metadaten

Ab Copilot CLI 1.0.99 enthalten einige Events zusätzliche Metadaten. Das SDK speichert diese Werte unverändert in $data, sodass Sie über $event->data oder die InteractsWithData-Helfer darauf zugreifen können.

Compaction-Events

data.compactionAttemptId in session.compaction_start und session.compaction_complete ist eine ID, die das Start-Event mit dem Abschluss-Event verknüpft. Wenn ein Modellwechsel beteiligt ist, ist zusätzlich switchTargetModel enthalten. Wenn das Zielmodell ein anderes Prompt-Token-Budget hat, ist zusätzlich targetPromptTokenLimit enthalten. Das Abschluss-Event kann unter anderem initialModel, model, outcome, outcomeReason, failureReason und tokenAccountingBasis enthalten. outcome und die Grund-Felder sind Strings, für die künftig neue Werte hinzukommen können. Behandeln Sie sie nicht als festes Enum und bewahren Sie unbekannte Werte unverändert auf. Ein fehlendes Feld bedeutet, dass kein Wert bereitgestellt wurde. Leiten Sie keinen Standardwert ab.

Nutzung bei der Tool-Ausführung

data.toolUsage in tool.execution_complete ist die vom Provider gemeldete Nutzung für Tool-Operationen, die der Runtime gehören. Sie ist getrennt von assistant.usage des Konversationsmodells. Auch wenn die Tool-Ausführung fehlschlägt, kann bereits gemeldete Nutzung enthalten sein. toolUsage.model ist das von der Tool-Operation angeforderte Modell, nicht das Konversationsmodell. Token-Anzahlen und Abrechnungsinformationen werden möglicherweise nur teilweise bereitgestellt. Ein fehlendes Feld bedeutet „nicht verfügbar“, nicht null Tokens.
Die Token-Anzahlen pro Modalität in inputTokensDetails und outputTokensDetails sind Aufschlüsselungen, die in den jeweiligen Gesamtwerten enthalten sind. Addieren Sie sie nicht zu den Gesamtwerten. toolUsage.requestId ist eine ID, mit der die Runtime doppelte Zustellungen und Wiederholungen ausschließt. Sie ist keine Upstream-Abrechnungskennung. Auch data.toolUsageRequestIds in session.usage_checkpoint und session.shutdown sind runtime-interne Deduplizierungs-Metadaten, die die im Abrechnungs-Snapshot enthaltenen Tool-Operationen identifizieren. Behandeln Sie sie nicht als Upstream-Abrechnungs-IDs.

Fusion-Resolved-Events

data.selectedRuleId in session.fusion_resolved identifiziert die Serverregel, wenn das serverseitige Routing einen anderen Workflow als die lokale Regel gewählt hat. Ohne Ersetzung wird das Feld weggelassen.

Events zum Laden der Tools eines MCP-Servers

SessionEventType::SESSION_MCP_SERVER_TOOLS_LOADED (session.mcp_server_tools_loaded) wird ausgelöst, wenn die Tool-Liste eines MCP-Servers verfügbar wird. Es ist ein ephemeres Event, das einmal pro Verbindung ausgelöst und nicht persistiert wird. Es enthält data.serverName und data.toolCount. Dass ein MCP-Server connected erreicht, bedeutet nicht, dass seine Tools fertig geladen sind. Nachdem der Server den verbundenen Zustand verlassen hat, behandeln Sie ihn als ladend, bis Sie dieses Event erneut empfangen. Bei Verwendung zwischengespeicherter Tools kann dieses Event vor connected eintreffen.
Aktuelle Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 19. Oktober 2026