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 eine diskriminierte Union – wenn Sie eine Fallunterscheidung über event.type treffen, wird die data-Nutzlast automatisch auf die korrekte Form eingegrenzt.

Ereignisse des Assistenten

Diese Ereignisse verfolgen den Lebenszyklus der Antwort des Agents – vom Beginn über Streamingabschnitte bis zur endgültigen Nachricht.

assistant.turn_start

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

DatenfeldTypErforderlichDescription
turnIdstringTurn identifier (in der Regel eine Zeichenfolgennummer)
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

Vollständiger erweiterter Denkenblock aus dem Modell. 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 Teil des erweiterten Denkens des Modells, gestreamt in Echtzeit.

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 Grundgedankentext 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 Teil der Textantwort des Assistenten, gestreamt in Echtzeit.

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 einen Schritt beendet hat (alle Toolausführungen abgeschlossen sind, die endgültige Antwort übermittelt wurde).

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, die aus dem Eingabeaufforderungscache gelesen werden
cacheWriteTokensnumber
Token, die in den Aufforderungscache geschrieben wurden
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? }
Bei Fehler präsent
toolTelemetryobject
Toolspezifische Telemetrie (z. B. Anzahl der CodeQL-Prüfungen)
parentToolCallIdstring
Festlegen, wann von einem Unter-Agent aufgerufen wird

** Result Felder:**

FeldTypErforderlichDescription
contentstringKonsistentes Ergebnis, das an das LLM gesendet wird (kann zur Tokeneffizienz gekürzt werden)
detailedContentstring
Vollständiges Ergebnis zur Anzeige, bei dem der vollständige Inhalt wie Diffs erhalten bleibt.
contentsContentBlock[]
Strukturierte Inhaltsblöcke (Text, Terminal, Bild, Audio, Ressource)

tool.user_requested

Wird ausgegeben, wenn der Benutzer explizit einen Toolaufruf anfordert (anstatt vom Modell aufgerufen zu werden).

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
Hintergrundagenten/-Shells, die noch ausgeführt werden, wenn der Agent in den Leerlauf übergegangen ist

session.error

Ein Fehler ist während der Sitzungsverarbeitung aufgetreten.

DatenfeldTypErforderlichDescription
errorTypestringFehlerkategorie (z. B. , "authentication", "quota") "rate_limit"
messagestringVom Menschen lesbare Fehlermeldung
stackstring
Fehlerstapelablaufverfolgung
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
Eine Schnappschussnummer des Prüfpunkts wurde für die Wiederherstellung erstellt.
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 Komprimierungsaufruf

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
Aktueller Git-Branch

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``"error"
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

Dies permissionRequest ist eine diskriminierte Vereinigung 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 Elikitationsanforderung wurde aufgelöst.

DatenfeldTypErforderlichDescription
requestIdstringEntspricht dem entsprechenden elicitation.requested

Sub-Agent- und Qualifikationsereignisse

subagent.started

Ein benutzerdefinierter Agent wurde als Unteragent 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 Unter-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 definition SKILL.md
contentstringGesamter Fähigkeitsinhalt in die Unterhaltung eingefügt
allowedToolsstring[]
Werkzeuge werden automatisch genehmigt, solange diese Fähigkeit aktiv ist.
pluginNamestring
Plugin der Fähigkeit, die ursprünglich von
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 zu Eingabeaufforderungsvorlagen

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

Eine typische agentische Aktion emittiert Ereignisse in dieser Reihenfolge:

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