Hinweis
Copilot SDK ist zurzeit in Technische Preview. Funktionalität und Verfügbarkeit können geändert werden.
Jede Aktion, die der Copilot Agent ausführt – Denken, Schreiben von Code, Ausführen von Tools – wird als Sitzungsereignis ausgegeben, das Sie abonnieren können. Dieser Artikel ist ein Referenz auf Feldebene für jeden Ereignistyp, sodass Sie genau wissen, welche Daten sie erwarten müssen.
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. Ein Sequenzdiagramm des vollständigen Ereignisflusses finden Sie im github/copilot-sdk Repository.
| Konzept | Beschreibung |
|---|
**Ephemerales Ereignis** | Vorübergehende; in Echtzeit gestreamt, aber **nicht** im Sitzungsprotokoll gespeichert. Wird beim Fortsetzen der Sitzung nicht wiedergegeben. |
|
Persistiertes Ereignis | Im Sitzungsereignisprotokoll auf dem Datenträger gespeichert. Wird wiedergegeben, wenn eine Sitzung fortgesetzt wird. |
|
Delta-Ereignis | Ein ephemerer Streamingabschnitt (Text oder Argumentation). Sammeln Sie Deltas, um den vollständigen Inhalt zu erstellen. |
|
**
parentId Kette** | Jedes 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:
| Feld | Typ | Beschreibung |
|---|---|---|
id |
`string` (UUID v4) | Eindeutiger Ereignisbezeichner |
| timestamp |
string (ISO 8601) | Wann das Ereignis erstellt wurde |
| parentId | string \| null | ID des vorherigen Ereignisses in der Kette; null für das erste Ereignis |
| ephemeral | boolean? |
true für vorübergehende Ereignisse; nicht vorhanden oder false für beibehaltene Ereignisse |
| type | string | Diskriminator des Ereignistyps (siehe Tabellen unten) |
| data | object | Ereignisspezifische Nutzlast |
Abonnieren von Ereignissen
// 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);
});
Beispiele in Python, Go und .NET finden Sie im github/copilot-sdk Repository.
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 typisierte Datenklassen pro Ereignis (z. B. `AssistantMessageDeltaData`), sodass nur die relevanten Felder für jeden Datentyp vorhanden sind.
**TypeScript:** Das TypeScript SDK verwendet eine diskriminierte Union – wenn Sie auf `event.type` prüfen, wird die `data` Nutzlast automatisch auf die richtige Typstruktur beschränkt.
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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
turnId | string | ✅ | Turn identifier (in der Regel eine Zeichenfolgennummer) |
interactionId | string | ||
| Interaktionsidentifikator für Telemetriekorrelation |
assistant.intent
Flüchtig Kurze Beschreibung dessen, was der Agent gerade tut, aktualisiert während der Vorgang läuft.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
intent | string | ✅ | Lesbare Absicht (z. B. "Erkunden der Codebasis") |
assistant.reasoning
Vollständiger erweiterter Denkenblock aus dem Modell. Wird nach Abschluss der Begründung ausgegeben.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
reasoningId | string | ✅ | Eindeutiger Bezeichner für diesen Logikblock |
content | string | ✅ | Der vollständige erweiterte Denktext |
assistant.reasoning_delta
Ephemere. Inkrementeller Teil des erweiterten Denkens des Modells, gestreamt in Echtzeit.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
reasoningId | string | ✅ | Entspricht dem entsprechenden assistant.reasoning Ereignis. |
deltaContent | string | ✅ | Textabschnitt, 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
messageId | string | ✅ | Eindeutiger Bezeichner für diese Nachricht |
content | string | ✅ | Die Textantwort des Assistenten |
toolRequests | ToolRequest[] | ||
| Toolaufrufe, die der Assistent tätigen möchte (siehe unten) | |||
reasoningOpaque | string | ||
| Verschlüsseltes erweitertes Denken (Anthropische Modelle); sitzungsgebunden | |||
reasoningText | string | ||
| Lesbarer Grundgedankentext aus erweitertem Denken | |||
encryptedContent | string | ||
| Verschlüsselte Begründungsinhalte (OpenAI-Modelle); sitzungsgebunden | |||
phase | string | ||
Generationsphase (z. B "thinking" . vs "response") | |||
outputTokens | number | ||
| Tatsächliche Ausgabetokenanzahl aus der API-Antwort | |||
interactionId | string | ||
| Interaktionsbezeichner für Telemetrie | |||
parentToolCallId | string | ||
| Festlegen, wann diese Nachricht von einem Unter-Agent stammt |
**
`ToolRequest` Felder:**
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Eindeutige ID für diesen Toolaufruf |
name | string | ✅ | Toolname (z. B. "bash", "edit", "grep") |
arguments | object | ||
| 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
messageId | string | ✅ | Entspricht dem entsprechenden assistant.message Ereignis. |
deltaContent | string | ✅ | Textabschnitt, der an die Nachricht angefügt werden soll |
parentToolCallId | string | ||
| 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).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
turnId | string | ✅ | Entspricht dem entsprechenden assistant.turn_start Ereignis. |
assistant.usage
Flüchtig Tokenverwendungs- und Kosteninformationen für einen einzelnen API-Aufruf.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
model | string | ✅ | Modellbezeichner (z. B "gpt-4.1". ) |
inputTokens | number | ||
| Verbrauchte Eingabetoken | |||
outputTokens | number | ||
| Erzeugte Ausgabetoken | |||
cacheReadTokens | number | ||
| Token, die aus dem Eingabeaufforderungscache gelesen werden | |||
cacheWriteTokens | number | ||
| Token, die in den Aufforderungscache geschrieben wurden | |||
cost | number | ||
| Kosten für den Modellmultiplikator bei der Abrechnung | |||
duration | number | ||
| API-Aufrufdauer in Millisekunden | |||
initiator | string | ||
Was diesen Aufruf ausgelöst hat (z. B "sub-agent". ); fehlt für vom Benutzer initiierte | |||
apiCallId | string | ||
Vervollständigungs-ID vom Anbieter (z. B. chatcmpl-abc123) | |||
providerCallId | string |
GitHub Anforderungsablaufverfolgungs-ID (`x-github-request-id`) |
| parentToolCallId | string |
| Festlegen, wann die Verwendung von einem Unter-Agent stammt |
| quotaSnapshots | Record<string, QuotaSnapshot> |
| Ressourcennutzung pro Kontingent, schlüsseliert nach Kontingentbezeichner |
| copilotUsage | CopilotUsage |
| 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
totalResponseSizeBytes | number | ✅ | Bisher 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Eindeutiger Bezeichner für diesen Toolaufruf |
toolName | string | ✅ | Name des Tools (z. B "bash". , "edit", "grep") |
arguments | object | ||
| Analysierte Argumente, die an das Tool übergeben werden | |||
mcpServerName | string | ||
| MCP-Servername, wenn das Tool von einem MCP-Server bereitgestellt wird | |||
mcpToolName | string | ||
| Ursprünglicher Toolname auf dem MCP-Server | |||
parentToolCallId | string | ||
| Festlegen, wann von einem Unter-Agent aufgerufen wird |
tool.execution_partial_result
Ephemere. Inkrementelle Ausgabe eines laufenden Tools (z. B. Streaming von Bash-Ausgaben).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Entspricht dem entsprechenden tool.execution_start |
partialOutput | string | ✅ | Inkrementeller Ausgabeabschnitt |
tool.execution_progress
Ephemere. Lesbarer Fortschrittsstatus von einem laufenden Programm (z. B. MCP-Serverfortschrittsbenachrichtigungen).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Entspricht dem entsprechenden tool.execution_start |
progressMessage | string | ✅ | Fortschrittsstatusmeldung |
tool.execution_complete
Wird ausgegeben, wenn die Ausführung eines Tools abgeschlossen ist – erfolgreich oder mit einem Fehler.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Entspricht dem entsprechenden tool.execution_start |
success | boolean | ✅ | Ob die Ausführung erfolgreich war |
model | string | ||
| Modell, das diesen Toolaufruf generiert hat | |||
interactionId | string | ||
| Interaktionskennung | |||
isUserRequested | boolean |
`true` wenn der Benutzer diesen Toolaufruf explizit angefordert hat |
| result | Result |
| Bei Erfolg anzeigen (siehe unten) |
| error | { message, code? } |
| Bei Fehler präsent |
| toolTelemetry | object |
| Toolspezifische Telemetrie |
| parentToolCallId | string |
| Festgelegt, wenn ein Unteragent es aufruft |
**
`Result` Felder:**
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
content | string | ✅ | Konsistentes Ergebnis, das an das LLM gesendet wird (kann zur Tokeneffizienz gekürzt werden) |
detailedContent | string | ||
| Vollständiges Ergebnis zur Anzeige, bei dem der vollständige Inhalt wie Diffs erhalten bleibt. | |||
contents | ContentBlock[] | ||
| 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).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Eindeutiger Bezeichner für diesen Toolaufruf |
toolName | string | ✅ | Name des Tools, das der Benutzer aufrufen möchte |
arguments | object | ||
| Argumente für den Aufruf |
Sitzungslebenszyklusereignisse
session.idle
Ephemere. 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
backgroundTasks | BackgroundTasks | ||
| 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
errorType | string | ✅ | Fehlerkategorie (z. B. "authentication", "quota", "rate_limit") |
message | string | ✅ | Vom Menschen lesbare Fehlermeldung |
stack | string | ||
| Fehlerstapelablaufverfolgung | |||
statusCode | number | ||
| HTTP-Statuscode aus der upstream-Anforderung | |||
providerCallId | string |
GitHub Anforderungsablaufverfolgungs-ID für serverseitige Protokollkorrelation |
session.compaction_start
Die Verdichtung des Kontextfensters hat begonnen. Die Datennutzlast ist leer ({}).
session.compaction_complete
Die Verdichtung des Kontextfensters wurde abgeschlossen.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
success | boolean | ✅ | Gibt an, ob die Komprimierung erfolgreich war. |
error | string | ||
| Fehlermeldung, wenn die Komprimierung fehlgeschlagen ist | |||
preCompactionTokens | number | ||
| Token vor Komprimierung | |||
postCompactionTokens | number | ||
| Token nach Komprimierung | |||
preCompactionMessagesLength | number | ||
| Nachrichtenanzahl vor Komprimierung | |||
messagesRemoved | number | ||
| Entfernte Nachrichten | |||
tokensRemoved | number | ||
| Token entfernt | |||
summaryContent | string | ||
| LLM-generierte Zusammenfassung des komprimierten Verlaufs | |||
checkpointNumber | number | ||
| Eine Schnappschussnummer des Prüfpunkts wurde für die Wiederherstellung erstellt. | |||
checkpointPath | string | ||
| Dateipfad, in dem der Prüfpunkt gespeichert wurde | |||
compactionTokensUsed | { input, output, cachedInput } | ||
| Tokenverwendung für den Komprimierungsaufruf des LLM | |||
requestId | string |
GitHub Anforderungsablaufverfolgungs-ID für den Komprimierungsaufruf |
session.title_changed
Ephemere. Der automatisch generierte Titel der Sitzung wurde aktualisiert.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
title | string | ✅ | Neuer Sitzungstitel |
session.context_changed
Der Arbeitsverzeichnis- oder Repositorykontext der Sitzung wurde geändert.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
cwd | string | ✅ | Aktuelles Arbeitsverzeichnis |
gitRoot | string | ||
| Git-Repository-Stammverzeichnis | |||
repository | string | ||
Repository im "owner/name" Format | |||
branch | string | ||
| Aktueller Git-Branch |
session.usage_info
Ephemere. Momentaufnahme der Kontextfensterverwendung.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
tokenLimit | number | ✅ | Maximale Token für das Kontextfenster des Modells |
currentTokens | number | ✅ | Aktuelle Token im Kontextfenster |
messagesLength | number | ✅ | Aktuelle Anzahl der Nachrichten in der Konversation |
session.task_complete
Der Agent hat seine zugewiesene Aufgabe abgeschlossen.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
summary | string | ||
| Zusammenfassung des abgeschlossenen Vorgangs |
session.shutdown
Die Sitzung wurde beendet.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
shutdownType | "routine" | "error" | ✅ | Normales Herunterfahren oder Absturz |
errorReason | string | ||
Fehlerbeschreibung, wenn shutdownType``"error" | |||
totalPremiumRequests | number | ✅ | Gesamtanzahl der verwendeten Premium-API-Anforderungen |
totalApiDurationMs | number | ✅ | Kumulierte API-Aufrufzeit in Millisekunden |
sessionStartTime | number | ✅ | Unix-Zeitstempel (ms) beim Starten der Sitzung |
codeChanges | { linesAdded, linesRemoved, filesModified } | ✅ | Aggregierte Codeänderungsmetriken |
modelMetrics | Record<string, ModelMetric> | ✅ | Aufschlüsselung der Modellnutzung |
currentModel | string | ||
| 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
Ephemere. Der Agent benötigt die Berechtigung zum Ausführen einer Aktion (Ausführen eines Befehls, Schreiben einer Datei usw.).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToPermission() zu antworten. |
permissionRequest | PermissionRequest | ✅ | Details der angeforderten Berechtigung |
Dies permissionRequest ist eine diskriminierte Vereinigung auf kind:
kind | Schlüsselfelder | Beschreibung |
|---|---|---|
"shell" |
`fullCommandText`
`intention`
`commands[]`
`possiblePaths[]`
| Ausführen eines Shellbefehls |
| "write" |
fileName
diff
intention
newFileContents?
| Schreiben/Ändern einer Datei |
| "read" |
path, intention | Lesen einer Datei oder eines Verzeichnisses |
| "mcp" |
serverName, , toolName``toolTitle, , args?``readOnly | Aufrufen eines MCP-Tools |
| "url" |
url, intention | Abrufen einer URL |
| "memory" |
subject, fact``citations | Ein 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
Ephemere. Eine Berechtigungsanfrage wurde gelöst.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht dem entsprechenden permission.requested |
result.kind | string | ✅ | Einer 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
Ephemere. Der Agent stellt dem Benutzer eine Frage.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToUserInput() zu antworten. |
question | string | ✅ | Die Frage, die dem Benutzer präsentiert werden soll |
choices | string[] | ||
| Vordefinierte Auswahlmöglichkeiten für den Benutzer | |||
allowFreeform | boolean | ||
| Gibt an, ob Freiformtexteingaben zulässig sind. |
user_input.completed
Flüchtig Eine Benutzereingabeanforderung wurde aufgelöst.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht dem entsprechenden user_input.requested |
elicitation.requested
Ephemere. Der Agent benötigt strukturierte Formulareingaben vom Benutzer (MCP-Elicitationsprotokoll).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToElicitation() zu antworten. |
message | string | ✅ | Beschreibung 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.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht dem entsprechenden elicitation.requested |
Sub-Agent- und Qualifikationsereignisse
subagent.started
Ein benutzerdefinierter Agent wurde als Unteragent aufgerufen.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Übergeordneter Werkzeugaufruf, der diesen Unter-Agenten erzeugt hat |
agentName | string | ✅ | Interner Name des Unter-Agents |
agentDisplayName | string | ✅ | Menschenlesbarer Anzeigename |
agentDescription | string | ✅ | Beschreibung der Funktionsweise des Unter-Agents |
subagent.completed
Ein Unter-Agent wurde erfolgreich abgeschlossen.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Entspricht dem entsprechenden subagent.started |
agentName | string | ✅ | Interner Name |
agentDisplayName | string | ✅ | Anzeigename |
subagent.failed
Bei einem Unter-Agent ist ein Fehler aufgetreten.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
toolCallId | string | ✅ | Entspricht dem entsprechenden subagent.started |
agentName | string | ✅ | Interner Name |
agentDisplayName | string | ✅ | Anzeigename |
error | string | ✅ | Fehlermeldung |
subagent.selected
Ein benutzerdefinierter Agent wurde ausgewählt (abgeleitet), um die aktuelle Anforderung zu verarbeiten.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
agentName | string | ✅ | Interner Name des ausgewählten Agents |
agentDisplayName | string | ✅ | Anzeigename |
tools | string[] | null | ✅ | Fü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 Antwortnutzlast ist leer ({}).
skill.invoked
Für die aktuelle Unterhaltung wurde eine Fähigkeit aktiviert.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | ✅ | Qualifikationsname |
path | string | ✅ | Dateipfad zur definition SKILL.md |
content | string | ✅ | Gesamter Fähigkeitsinhalt in die Unterhaltung eingefügt |
allowedTools | string[] | ||
| Werkzeuge werden automatisch genehmigt, solange diese Fähigkeit aktiv ist. | |||
pluginName | string | ||
| Plugin der Fähigkeit, die ursprünglich von | |||
pluginVersion | string | ||
| Plugin-Version |
Andere Ereignisse
abort
Die aktuelle Drehung wurde abgebrochen.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
reason | string | ✅ | Warum die Drehung abgebrochen wurde (z. B. "user initiated") |
user.message
Der Benutzer hat eine Nachricht gesendet. Aufgezeichnet für den Sitzungsverlauf.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
content | string | ✅ | Der Nachrichtentext des Benutzers |
transformedContent | string | ||
| Transformierte Version nach der Vorverarbeitung | |||
attachments | Attachment[] | ||
| Datei, Verzeichnis, Auswahl, Blob oder GitHub Referenzverweise | |||
source | string | ||
| Nachrichtenquellenkennung | |||
agentMode | string | ||
Agentmodus: "interactive", , "plan", "autopilot"oder "shell" | |||
interactionId | string | ||
| Interaktionskennung |
system.message
Eine System- oder Entwickleraufforderung wurde in die Unterhaltung eingefügt.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
content | string | ✅ | Der Aufforderungstext |
role | "system" | "developer" | ✅ | Nachrichtenfunktion |
name | string | ||
| 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).
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToExternalTool() zu antworten |
sessionId | string | ✅ | Sitzung, zu der diese Anforderung gehört |
toolCallId | string | ✅ | Toolaufruf-ID für diesen Aufruf |
toolName | string | ✅ | Name des externen Tools |
arguments | object | ||
| Argumente für das Tool |
external_tool.completed
Ephemere. Eine externe Toolanforderung wurde aufgelöst.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht dem entsprechenden external_tool.requested |
exit_plan_mode.requested
Ephemere. Der Agent hat einen Plan erstellt und möchte den Planmodus beenden.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToExitPlanMode() zu antworten. |
summary | string | ✅ | Zusammenfassung des Plans |
planContent | string | ✅ | Vollständiger Inhalt der Plandatei |
actions | string[] | ✅ | Verfügbare Benutzeraktionen (z. B. genehmigen, bearbeiten, ablehnen) |
recommendedAction | string | ✅ | Vorgeschlagene Maßnahme |
exit_plan_mode.completed
Vergänglich Eine Anforderung für den Exit-Plan-Modus wurde aufgelöst.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht dem entsprechenden exit_plan_mode.requested |
command.queued
Ephemere. Ein Slash-Befehl wurde zur Ausführung in die Warteschlange gestellt.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Verwenden Sie dies, um über session.respondToQueuedCommand() zu antworten. |
command | string | ✅ | Der Schrägstrich-Befehlstext (z. B. /help, /clear) |
command.completed
Ephemere. Ein Befehl in der Warteschlange wurde aufgelöst.
| Datenfeld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
requestId | string | ✅ | Entspricht 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
| Ereignistyp | Kurzlebig | Kategorie | Schlüsseldatenfelder |
|---|---|---|---|
assistant.turn_start | |||
| Assistent |
`turnId`, `interactionId?` |
| assistant.intent | ✅ | Assistent | intent |
| assistant.reasoning |
| Assistent |
reasoningId, content |
| assistant.reasoning_delta | ✅ | Assistent |
reasoningId, deltaContent |
| assistant.streaming_delta | ✅ | Assistent | totalResponseSizeBytes |
| assistant.message |
| Assistent |
messageId, , content``toolRequests?, , outputTokens?``phase? |
| assistant.message_delta | ✅ | Assistent |
messageId, deltaContent``parentToolCallId? |
| assistant.turn_end |
| Assistent | turnId |
| assistant.usage | ✅ | Assistent |
model, , inputTokens?``outputTokens?, , cost?``duration? |
| tool.user_requested |
| Werkzeug |
toolCallId, toolName``arguments? |
| tool.execution_start |
| Werkzeug |
toolCallId
toolName
arguments?
mcpServerName?
|
| tool.execution_partial_result | ✅ | Werkzeug |
toolCallId, partialOutput |
| tool.execution_progress | ✅ | Werkzeug |
toolCallId, progressMessage |
| tool.execution_complete |
| Werkzeug |
toolCallId
success
result?
error?
|
| session.idle | ✅ | Sitzung | backgroundTasks? |
| session.error |
| Sitzung |
errorType, message``statusCode? |
| session.compaction_start |
| Sitzung |
(leer) |
| session.compaction_complete |
| Sitzung |
success, preCompactionTokens?``summaryContent? |
| session.title_changed | ✅ | Sitzung | title |
| session.context_changed |
| Sitzung |
cwd
gitRoot?
repository?
branch?
|
| session.usage_info | ✅ | Sitzung |
tokenLimit, currentTokens``messagesLength |
| session.task_complete |
| Sitzung | summary? |
| session.shutdown |
| Sitzung |
shutdownType, codeChanges``modelMetrics |
| permission.requested | ✅ | Erlaubnis |
requestId, permissionRequest |
| permission.completed | ✅ | Erlaubnis |
requestId, result.kind |
| user_input.requested | ✅ | Benutzereingabe |
requestId, question``choices? |
| user_input.completed | ✅ | Benutzereingabe | requestId |
| elicitation.requested | ✅ | Benutzereingabe |
requestId, message``requestedSchema |
| elicitation.completed | ✅ | Benutzereingabe | requestId |
| subagent.started |
| Unteragent |
toolCallId, agentName``agentDisplayName |
| subagent.completed |
| Untervertreter |
toolCallId, agentName``agentDisplayName |
| subagent.failed |
| Sub-Agent |
toolCallId, agentName``error |
| subagent.selected |
| Unter-Agent |
agentName, agentDisplayName``tools |
| subagent.deselected |
| Unteragent |
(leer) |
| skill.invoked |
| Fertigkeit |
name
path
content
allowedTools?
|
| abort |
| Steuerung | reason |
| user.message |
| Benutzer |
content, attachments?``agentMode? |
| system.message |
| System |
content, role |
| external_tool.requested | ✅ | Externes Werkzeug |
requestId, toolName``arguments? |
| external_tool.completed | ✅ | Externes Werkzeug | requestId |
| command.queued | ✅ | Befehl |
requestId, command |
| command.completed | ✅ | Befehl | requestId |
| exit_plan_mode.requested | ✅ | Planmodus |
requestId
summary
planContent
actions
|
| exit_plan_mode.completed | ✅ | Planmodus | requestId |