Thanks to visit codestin.com
Credit goes to docs.github.com

Skip to main content

Ereignisse einer Streaming-Sitzung

Jede Aktion, die der Copilot-Agent ausführt – etwa Denken, Schreiben von Code oder Ausführen von Tools – wird als Session-Ereignis ausgegeben, das Sie abonnieren können. Dieses Handbuch ist ein Verweis auf Feldebene für jeden Ereignistyp, sodass Sie genau wissen, welche Daten erwartet werden, ohne die SDK-Quelle zu lesen.

Übersicht

Wenn streaming: true für eine Sitzung festgelegt wird, sendet das SDK kurzlebige Ereignisse in Echtzeit (Deltas, Statusaktualisierungen) neben dauerhaften Ereignissen (vollständige Nachrichten, Toolergebnisse). Alle Ereignisse teilen einen gemeinsamen Umschlag und tragen eine data Nutzlast, deren Shape vom Ereignis typeabhängt.

Diagramm: Sequenzdiagramm mit dem beschriebenen Prozess.

KonzeptDescription
Ephemerales EreignisVorübergehende; in Echtzeit gestreamt, aber nicht im Sitzungsprotokoll gespeichert. Wird beim Fortsetzen der Sitzung nicht wiedergegeben.
Persistiertes EreignisIm Sitzungsereignisprotokoll auf dem Datenträger gespeichert. Wird wiedergegeben, wenn eine Sitzung fortgesetzt wird.
Delta-EreignisEin ephemerer Streamingabschnitt (Text oder Argumentation). Sammeln Sie Deltas, um den vollständigen Inhalt zu erstellen.
parentId KetteJedes Ereignis parentId verweist auf das vorherige Ereignis und bildet eine verknüpfte Liste, die Sie durchlaufen können.

Ereignishülle

Jedes Sitzungsereignis umfasst unabhängig vom Typ die folgenden Felder:

FeldTypDescription
id
string (UUID v4)Eindeutiger Ereignisbezeichner
timestamp
string (ISO 8601)Wann das Ereignis erstellt wurde
parentIdstring | nullID des vorherigen Ereignisses in der Kette; null für das erste Ereignis
ephemeralboolean?
true für vorübergehende Ereignisse; nicht vorhanden oder false für beibehaltene Ereignisse
typestringDiskriminator des Ereignistyps (siehe Tabellen unten)
dataobjectEreignisspezifische Nutzlast

Abonnieren von Ereignissen

TypeScript
// 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);
});
Python
from copilot import CopilotClient
from copilot.generated.session_events import SessionEventType

client = CopilotClient()

session = None  # assume session is created elsewhere

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

# session.on(handle)
from copilot.generated.session_events import SessionEventType

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

session.on(handle)
Go
package main

import (
    "context"
    "fmt"
    copilot "github.com/github/copilot-sdk/go"
    "github.com/github/copilot-sdk/go/rpc"
)

func main() {
    ctx := context.Background()
    client := copilot.NewClient(nil)

    session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
        Model:     "gpt-4.1",
        Streaming: copilot.Bool(true),
        OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
            return &rpc.PermissionDecisionApproveOnce{}, nil
        },
    })

    session.On(func(event copilot.SessionEvent) {
        if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
            fmt.Print(d.DeltaContent)
        }
    })
    _ = session
}
session.On(func(event copilot.SessionEvent) {
    if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
        fmt.Print(d.DeltaContent)
    }
})
.NET
using GitHub.Copilot;

public static class StreamingEventsExample
{
    public static async Task Example(CopilotSession session)
    {
        session.On<SessionEvent>(evt =>
        {
            if (evt is AssistantMessageDeltaEvent delta)
            {
                Console.Write(delta.Data.DeltaContent);
            }
        });
    }
}
session.On<SessionEvent>(evt =>
{
    if (evt is AssistantMessageDeltaEvent delta)
    {
        Console.Write(delta.Data.DeltaContent);
    }
});
Java
// All events
session.on(event -> System.out.println(event.getType()));

// Specific event type — data is narrowed to the matching class
session.on(AssistantMessageDeltaEvent.class, event ->
    System.out.print(event.getData().deltaContent())
);

Tipp

(Python / Go) Diese SDKs verwenden eine einzelne Data Klasse/Struktur mit allen möglichen Feldern als optional/nullable. Nur die felder, die in den folgenden Tabellen aufgeführt sind, werden für jeden Ereignistyp aufgefüllt – der Rest lautet None / nil.

(.NET) Das .NET SDK verwendet separate, stark typierte Datenklassen pro Ereignis (z. B. AssistantMessageDeltaData), sodass nur die relevanten Felder für jeden Typ vorhanden sind.

(TypeScript) Das TypeScript SDK verwendet ein discriminated union – wenn Sie auf event.type passen, wird der data Payload automatisch auf die richtige Form eingegrenzt.

Ereignisse des Assistenten

Diese Ereignisse verfolgen den Lebenszyklus der Antwort des Agents - vom Start der Abzweigung über die Streaming Chunks bis zur endgültigen Nachricht.

assistant.turn_start

Wird ausgelöst, wenn der Agent mit der Verarbeitung eines Ablaufschritts beginnt.

DatenfeldTypErforderlichDescription
turnIdstringTurn-Identifikator (typischerweise eine stringifizierte Turn-Nummer)
interactionIdstring
CAPI-Interaktions-ID für Telemetriekorrelation

assistant.intent

Flüchtig Kurze Beschreibung dessen, was der Agent gerade tut, aktualisiert während der Vorgang läuft.

DatenfeldTypErforderlichDescription
intentstringLesbare Absicht (z. B. "Erkunden der Codebasis")

assistant.reasoning

Schließen Sie die erweiterte Denkblockade des Modells ab. Wird nach Abschluss der Begründung ausgegeben.

DatenfeldTypErforderlichDescription
reasoningIdstringEindeutiger Bezeichner für diesen Logikblock
contentstringDer vollständige erweiterte Denktext

assistant.reasoning_delta

Flüchtig Inkrementeller Chunk des erweiterten Denkens des Modells, das in Echtzeit gestreamt wird.

DatenfeldTypErforderlichDescription
reasoningIdstringEntspricht dem entsprechenden assistant.reasoning Ereignis.
deltaContentstringTextabschnitt, der an den Inhalt von Gründen angefügt werden soll

assistant.message

Die vollständige Antwort des Assistenten für diesen LLM-Aufruf. Kann Toolaufrufanforderungen enthalten.

DatenfeldTypErforderlichDescription
messageIdstringEindeutiger Bezeichner für diese Nachricht
contentstringDie Textantwort des Assistenten
toolRequestsToolRequest[]
Toolaufrufe, die der Assistent tätigen möchte (siehe unten)
reasoningOpaquestring
Verschlüsseltes erweitertes Denken (Anthropische Modelle); sitzungsgebunden
reasoningTextstring
Lesbarer Reasoning-Text aus erweitertem Denken
encryptedContentstring
Verschlüsselte Begründungsinhalte (OpenAI-Modelle); sitzungsgebunden
phasestring
Generationsphase (z. B. "thinking" vs "response")
outputTokensnumber
Tatsächliche Ausgabetokenanzahl aus der API-Antwort
interactionIdstring
CAPI-Interaktions-ID für Telemetrie
parentToolCallIdstring
Festlegen, wann diese Nachricht von einem Unter-Agent stammt

** ToolRequest Felder:**

FeldTypErforderlichDescription
toolCallIdstringEindeutige ID für diesen Toolaufruf
namestringToolname (z. B., "bash", "edit", "grep")
argumentsobject
Analysierte Argumente für das Tool
type"function" | "custom"
Anruftyp; Standardwert: "function" wenn nicht vorhanden

assistant.message_delta

Flüchtig Inkrementeller Chunk der Text-Antwort des Assistenten, der in Echtzeit gestreamt wird.

DatenfeldTypErforderlichDescription
messageIdstringEntspricht dem entsprechenden assistant.message Ereignis.
deltaContentstringTextabschnitt, der an die Nachricht angefügt werden soll
parentToolCallIdstring
Festlegen, wenn sie von einem Unter-Agent stammen

assistant.turn_end

Wird ausgegeben, wenn der Agent eine Runde abschließt (alle Tool-Ausführungen abgeschlossen, endgültige Antwort geliefert).

DatenfeldTypErforderlichDescription
turnIdstringEntspricht dem entsprechenden assistant.turn_start Ereignis.

assistant.usage

Flüchtig Tokenverwendungs- und Kosteninformationen für einen einzelnen API-Aufruf.

DatenfeldTypErforderlichDescription
modelstringModellbezeichner (z. B. "gpt-4.1")
inputTokensnumber
Verbrauchte Eingabetoken
outputTokensnumber
Erzeugte Ausgabetoken
cacheReadTokensnumber
Token aus dem Prompt-Cache lesen
cacheWriteTokensnumber
Token werden in den Prompt-Cache geschrieben
costnumber
Kosten für den Modellmultiplikator bei der Abrechnung
durationnumber
API-Aufrufdauer in Millisekunden
initiatorstring
Was diesen Aufruf ausgelöst hat (z. B. "sub-agent"); fehlt für vom Benutzer initiierte
apiCallIdstring
Abschluss-ID vom Anbieter (z. B. chatcmpl-abc123)
providerCallIdstring
GitHub-Anforderungsablaufverfolgungs-ID (x-github-request-id)
parentToolCallIdstring
Festlegen, wann die Verwendung von einem Unter-Agent stammt
quotaSnapshotsRecord<string, QuotaSnapshot>
Ressourcennutzung pro Kontingent, schlüsseliert nach Kontingentbezeichner
copilotUsageCopilotUsage
Aufschlüsselung der Kosten für Tokens aus der API

assistant.streaming_delta

Flüchtig Niedrigrangige Fortschrittsanzeige – Gesamtanzahl der Bytes, die von der Streaming-API-Antwort empfangen wurden.

DatenfeldTypErforderlichDescription
totalResponseSizeBytesnumberBisher empfangene kumulative Bytes

Toolausführungsereignisse

Diese Ereignisse verfolgen den vollständigen Lebenszyklus jedes Toolaufrufs, von der Anforderung durch das Modell über die Ausführung bis zur Fertigstellung.

tool.execution_start

Wird ausgegeben, wenn ein Tool mit der Ausführung beginnt.

DatenfeldTypErforderlichDescription
toolCallIdstringEindeutiger Bezeichner für diesen Toolaufruf
toolNamestringName des Tools (z. B. , "bash", "edit") "grep"
argumentsobject
Analysierte Argumente, die an das Tool übergeben werden
mcpServerNamestring
MCP-Servername, wenn das Tool von einem MCP-Server bereitgestellt wird
mcpToolNamestring
Ursprünglicher Toolname auf dem MCP-Server
parentToolCallIdstring
Festlegen, wann von einem Unter-Agent aufgerufen wird

tool.execution_partial_result

Flüchtig Inkrementelle Ausgabe eines laufenden Tools (z. B. gestreamte bash-Ausgabe).

DatenfeldTypErforderlichDescription
toolCallIdstringEntspricht dem entsprechenden tool.execution_start
partialOutputstringInkrementeller Ausgabeabschnitt

tool.execution_progress

Flüchtig Menschenlesbarer Fortschrittsstatus von einem laufenden Tool (z. B. Fortschrittsbenachrichtigungen des MCP-Servers).

DatenfeldTypErforderlichDescription
toolCallIdstringEntspricht dem entsprechenden tool.execution_start
progressMessagestringFortschrittsstatusmeldung

tool.execution_complete

Wird ausgegeben, wenn die Ausführung eines Tools abgeschlossen ist – erfolgreich oder mit einem Fehler.

DatenfeldTypErforderlichDescription
toolCallIdstringEntspricht dem entsprechenden tool.execution_start
successbooleanOb die Ausführung erfolgreich war
modelstring
Modell, das diesen Toolaufruf generiert hat
interactionIdstring
CAPI-Interaktions-ID
isUserRequestedboolean
true wenn der Benutzer diesen Toolaufruf explizit angefordert hat
resultResult
Bei Erfolg anzeigen (siehe unten)
error{ message, code? }
Vorhanden bei Fehlschlag
toolTelemetryobject
Toolspezifische Telemetrie (z. B. Anzahl der CodeQL-Prüfungen)
parentToolCallIdstring
Festlegen, wann von einem Unter-Agent aufgerufen wird

** Result Felder:**

FeldTypErforderlichDescription
contentstringKurzes Ergebnis, das an das LLM gesendet wird (kann aus Gründen der Token-Effizienz verkürzt werden)
detailedContentstring
Vollständiges Ergebnis für die Anzeige, unter Beibehaltung des vollständigen Inhalts wie Diffs
contentsContentBlock[]
Strukturierte Inhaltsblöcke (Text, Terminal, Bild, Audio, Ressource)

tool.user_requested

Wird ausgegeben, wenn der Benutzende explizit einen Tool-Aufruf anfordert (und nicht das Modell selbst einen Aufruf vornimmt).

DatenfeldTypErforderlichDescription
toolCallIdstringEindeutiger Bezeichner für diesen Toolaufruf
toolNamestringName des Tools, das der Benutzer aufrufen möchte
argumentsobject
Argumente für den Aufruf

Sitzungslebenszyklusereignisse

session.idle

Flüchtig Der Agent hat die gesamte Verarbeitung abgeschlossen und ist bereit für die nächste Nachricht. Dies ist das Signal, dass eine Drehung vollständig abgeschlossen ist.

DatenfeldTypErforderlichDescription
backgroundTasksBackgroundTasks
Agents/Shells im Hintergrund, die noch ausgeführt wurden, als der Agent inaktiv wurde

session.error

Ein Fehler ist während der Sitzungsverarbeitung aufgetreten.

DatenfeldTypErforderlichDescription
errorTypestringFehlerkategorie (z. B. , "authentication", "quota") "rate_limit"
messagestringVom Menschen lesbare Fehlermeldung
stackstring
Fehler Stack-Trace
statusCodenumber
HTTP-Statuscode aus der upstream-Anforderung
providerCallIdstring
GitHub Anforderungsablaufverfolgungs-ID für die serverseitige Protokollkorrelation

session.compaction_start

Die Verdichtung des Kontextfensters hat begonnen. Die Datennutzlast ist leer ({}).

session.compaction_complete

Die Verdichtung des Kontextfensters wurde abgeschlossen.

DatenfeldTypErforderlichDescription
successbooleanGibt an, ob die Komprimierung erfolgreich war.
errorstring
Fehlermeldung, wenn die Komprimierung fehlgeschlagen ist
preCompactionTokensnumber
Token vor Komprimierung
postCompactionTokensnumber
Token nach Komprimierung
preCompactionMessagesLengthnumber
Nachrichtenanzahl vor Komprimierung
messagesRemovednumber
Entfernte Nachrichten
tokensRemovednumber
Token entfernt
summaryContentstring
LLM-generierte Zusammenfassung des komprimierten Verlaufs
checkpointNumbernumber
Nummer des für die Wiederherstellung erstellten Checkpoint-Snapshots
checkpointPathstring
Dateipfad, in dem der Prüfpunkt gespeichert wurde
compactionTokensUsed{ input, output, cachedInput }
Tokenverwendung für den Komprimierungsaufruf des LLM
requestIdstring
GitHub-Anforderungsablaufverfolgungs-ID für den Kompaktierungsaufruf

session.title_changed

Flüchtig Der automatisch generierte Titel der Sitzung wurde aktualisiert.

DatenfeldTypErforderlichDescription
titlestringNeuer Sitzungstitel

session.context_changed

Der Arbeitsverzeichnis- oder Repositorykontext der Sitzung wurde geändert.

DatenfeldTypErforderlichDescription
cwdstringAktuelles Arbeitsverzeichnis
gitRootstring
Git-Repository-Stammverzeichnis
repositorystring
Repository im "owner/name" Format
branchstring
Aktuelle Git-Verzweigung

session.usage_info

Flüchtig Momentaufnahme der Kontextfensterverwendung.

DatenfeldTypErforderlichDescription
tokenLimitnumberMaximale Token für das Kontextfenster des Modells
currentTokensnumberAktuelle Token im Kontextfenster
messagesLengthnumberAktuelle Anzahl der Nachrichten in der Konversation

session.task_complete

Der Agent hat seine zugewiesene Aufgabe abgeschlossen.

DatenfeldTypErforderlichDescription
summarystring
Zusammenfassung des abgeschlossenen Vorgangs

session.shutdown

Die Sitzung wurde beendet.

DatenfeldTypErforderlichDescription
shutdownType"routine" | "error"Normales Herunterfahren oder Absturz
errorReasonstring
Fehlerbeschreibung, wenn shutdownType gleich "error" ist
totalPremiumRequestsnumberGesamtanzahl der verwendeten Premium-API-Anforderungen
totalApiDurationMsnumberKumulierte API-Aufrufzeit in Millisekunden
sessionStartTimenumberUnix-Zeitstempel (ms) beim Starten der Sitzung
codeChanges{ linesAdded, linesRemoved, filesModified }Aggregierte Codeänderungsmetriken
modelMetricsRecord<string, ModelMetric>Aufschlüsselung der Modellnutzung
currentModelstring
Modell zum Zeitpunkt des Herunterfahrens ausgewählt

Berechtigungs- und Benutzereingabeereignisse

Diese Ereignisse werden ausgegeben, wenn der Agent eine Genehmigung oder Eingabe des Benutzers benötigt, bevor er fortfahren kann.

permission.requested

Flüchtig Der Agent benötigt die Berechtigung zum Ausführen einer Aktion (Ausführen eines Befehls, Schreiben einer Datei usw.).

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToPermission() zu antworten.
permissionRequestPermissionRequestDetails der angeforderten Berechtigung

Der permissionRequest ist ein discriminated union auf kind:

kindSchlüsselfelderDescription
"shell"
fullCommandText, intention, commands[], possiblePaths[]Ausführen eines Shellbefehls
"write"
fileName, diff, intention, newFileContents?Schreiben/Ändern einer Datei
"read"
path, intentionLesen einer Datei oder eines Verzeichnisses
"mcp"
serverName, toolName, toolTitle, args?, , readOnlyAufrufen eines MCP-Tools
"url"
url, intentionAbrufen einer URL
"memory"
subject, fact``citationsEin Gedächtnis speichern
"custom-tool"
toolName, toolDescription``args?Aufrufen eines benutzerdefinierten Tools

Alle kind Varianten enthalten auch eine optionale toolCallId Verknüpfung mit dem Toolaufruf, der die Anforderung ausgelöst hat.

permission.completed

Flüchtig Eine Berechtigungsanfrage wurde gelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden permission.requested
result.kindstringEiner von: "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

Flüchtig Der Agent stellt dem Benutzer eine Frage.

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToUserInput() zu antworten.
questionstringDie Frage, die dem Benutzer präsentiert werden soll
choicesstring[]
Vordefinierte Auswahlmöglichkeiten für den Benutzer
allowFreeformboolean
Gibt an, ob Freiformtexteingaben zulässig sind.

user_input.completed

Flüchtig Eine Benutzereingabeanforderung wurde aufgelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden user_input.requested

elicitation.requested

Flüchtig Der Agent benötigt strukturierte Formulareingaben vom Benutzer (MCP-Elicitationsprotokoll).

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToElicitation() zu antworten.
messagestringBeschreibung der benötigten Informationen
mode"form"
Elicitationsmodus (derzeit nur "form")
requestedSchema{ type: "object", properties, required? }JSON-Schema zur Beschreibung der Formularfelder

elicitation.completed

Flüchtig Eine Anfrage wurde behoben.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden elicitation.requested

Sub-Agenten und Skill-Ereignisse

subagent.started

Ein angepasster Agent wurde als Sub-Agent aufgerufen.

DatenfeldTypErforderlichDescription
toolCallIdstringÜbergeordneter Werkzeugaufruf, der diesen Unter-Agenten erzeugt hat
agentNamestringInterner Name des Unter-Agents
agentDisplayNamestringMenschenlesbarer Anzeigename
agentDescriptionstringBeschreibung der Funktionsweise des Unter-Agents

subagent.completed

Ein Sub-Agent wurde erfolgreich abgeschlossen.

DatenfeldTypErforderlichDescription
toolCallIdstringEntspricht dem entsprechenden subagent.started
agentNamestringInterner Name
agentDisplayNamestringAnzeigename

subagent.failed

Bei einem Unter-Agent ist ein Fehler aufgetreten.

DatenfeldTypErforderlichDescription
toolCallIdstringEntspricht dem entsprechenden subagent.started
agentNamestringInterner Name
agentDisplayNamestringAnzeigename
errorstringFehlermeldung

subagent.selected

Ein benutzerdefinierter Agent wurde ausgewählt (abgeleitet), um die aktuelle Anforderung zu verarbeiten.

DatenfeldTypErforderlichDescription
agentNamestringInterner Name des ausgewählten Agents
agentDisplayNamestringAnzeigename
toolsstring[] | nullFür diesen Agent verfügbare Toolnamen; null für alle Tools

subagent.deselected

Ein benutzerdefinierter Agent wurde deaktiviert und kehrt zum Standard-Agent zurück. Die Datennutzlast ist leer ({}).

skill.invoked

Für die aktuelle Unterhaltung wurde eine Fähigkeit aktiviert.

DatenfeldTypErforderlichDescription
namestringQualifikationsname
pathstringDateipfad zur SKILL.md Definition
contentstringVollständiger Skill-Inhalt, der in die Kommunikation eingespeist wird
allowedToolsstring[]
Werkzeuge werden automatisch genehmigt, solange diese Fähigkeit aktiv ist.
pluginNamestring
Plugin, aus dem die Fertigkeit stammt
pluginVersionstring
Plugin-Version

Andere Ereignisse

abort

Die aktuelle Drehung wurde abgebrochen.

DatenfeldTypErforderlichDescription
reasonstringWarum die Drehung abgebrochen wurde (z. B. "user initiated")

user.message

Der Benutzer hat eine Nachricht gesendet. Aufgezeichnet für den Sitzungsverlauf.

DatenfeldTypErforderlichDescription
contentstringDer Nachrichtentext des Benutzers
transformedContentstring
Transformierte Version nach der Vorverarbeitung
attachmentsAttachment[]
Datei-, Verzeichnis-, Auswahl-, Blob- oder GitHub-Referenzanhänge
sourcestring
Nachrichtenquellenkennung
agentModestring
Agentmodus: "interactive", , "plan", "autopilot"oder "shell"
interactionIdstring
CAPI-Interaktions-ID

system.message

Eine System- oder Entwickleraufforderung wurde in die Unterhaltung eingefügt.

DatenfeldTypErforderlichDescription
contentstringDer Aufforderungstext
role"system" | "developer"Nachrichtenfunktion
namestring
Quellenbezeichner
metadata{ promptVersion?, variables? }
Metadaten der Prompt-Vorlage

external_tool.requested

Flüchtig Der Agent möchte ein externes Tool aufrufen (eines, das vom SDK-Consumer bereitgestellt wird).

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToExternalTool() zu antworten.
sessionIdstringSitzung, zu der diese Anforderung gehört
toolCallIdstringToolaufruf-ID für diesen Aufruf
toolNamestringName des externen Tools
argumentsobject
Argumente für das Tool

external_tool.completed

Flüchtig Eine externe Toolanforderung wurde aufgelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden external_tool.requested

exit_plan_mode.requested

Flüchtig Der Agent hat einen Plan erstellt und möchte den Planmodus beenden.

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToExitPlanMode() zu antworten.
summarystringZusammenfassung des Plans
planContentstringVollständiger Inhalt der Plandatei
actionsstring[]Verfügbare Benutzeraktionen (z. B. Genehmigen, Bearbeiten, Ablehnen)
recommendedActionstringVorgeschlagene Maßnahme

exit_plan_mode.completed

Flüchtig Eine Anforderung für den Exit-Plan-Modus wurde aufgelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden exit_plan_mode.requested

command.queued

Flüchtig Ein Slash-Befehl wurde zur Ausführung in die Warteschlange gestellt.

DatenfeldTypErforderlichDescription
requestIdstringVerwenden Sie dies, um über session.respondToQueuedCommand() zu antworten.
commandstringDer Text des Slash-Befehls (z. B. /help, /clear)

command.completed

Flüchtig Ein Befehl in der Warteschlange wurde aufgelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden command.queued

Kurzübersicht: Agentischer Handlungsfluss

Ein typischer Agent gibt Ereignisse in dieser Reihenfolge aus:

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)

Alle Ereignistypen auf einen Blick

EreignistypKurzlebigKategorieSchlüsseldatenfelder
assistant.turn_start
Assistent
turnId, interactionId?
assistant.intentAssistentintent
assistant.reasoning
Assistent
reasoningId, content
assistant.reasoning_deltaAssistent
reasoningId, deltaContent
assistant.streaming_deltaAssistenttotalResponseSizeBytes
assistant.message
Assistent
messageId, content, toolRequests?, outputTokens?, , phase?
assistant.message_deltaAssistent
messageId, deltaContent``parentToolCallId?
assistant.turn_end
AssistentturnId
assistant.usageAssistent
model, inputTokens?, outputTokens?, cost?, , duration?
tool.user_requested
Werkzeug
toolCallId, toolName``arguments?
tool.execution_start
Werkzeug
toolCallId, toolName, arguments?, mcpServerName?
tool.execution_partial_resultWerkzeug
toolCallId, partialOutput
tool.execution_progressWerkzeug
toolCallId, progressMessage
tool.execution_complete
Werkzeug
toolCallId, success, result?, error?
session.idleSessionbackgroundTasks?
session.error
Session
errorType, message``statusCode?
session.compaction_start
Session
(leer)
session.compaction_complete
Session
success, preCompactionTokens?``summaryContent?
session.title_changedSessiontitle
session.context_changed
Session
cwd, gitRoot?, repository?, branch?
session.usage_infoSession
tokenLimit, currentTokens``messagesLength
session.task_complete
Sessionsummary?
session.shutdown
Session
shutdownType, codeChanges``modelMetrics
permission.requestedErlaubnis
requestId, permissionRequest
permission.completedErlaubnis
requestId, result.kind
user_input.requestedBenutzereingabe
requestId, question``choices?
user_input.completedBenutzereingaberequestId
elicitation.requestedBenutzereingabe
requestId, message``requestedSchema
elicitation.completedBenutzereingaberequestId
subagent.started
Unteragent
toolCallId, agentName``agentDisplayName
subagent.completed
Unteragent
toolCallId, agentName``agentDisplayName
subagent.failed
Unteragent
toolCallId, agentName``error
subagent.selected
Unteragent
agentName, agentDisplayName``tools
subagent.deselected
Unteragent
(leer)
skill.invoked
Skill
name, path, content, allowedTools?
abort
Steuerungreason
user.message
Benutzer
content, attachments?``agentMode?
system.message
System
content, role
external_tool.requestedExternes Werkzeug
requestId, toolName``arguments?
external_tool.completedExternes WerkzeugrequestId
command.queuedBefehl
requestId, command
command.completedBefehlrequestId
exit_plan_mode.requestedPlanmodus
requestId, summary, planContent, actions
exit_plan_mode.completedPlanmodusrequestId