/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ package com.github.copilot.sdk.events; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import java.time.OffsetDateTime; import java.util.UUID; /** * Base class for all session events in the Copilot SDK. *

* Session events represent all activities that occur during a Copilot * conversation, including messages from the user and assistant, tool * executions, and session state changes. Events are delivered to handlers * registered via * {@link com.github.copilot.sdk.CopilotSession#on(java.util.function.Consumer)}. * *

Event Categories

* * *

Example Usage

* *
{@code
 * session.on(event -> {
 * 	if (event instanceof AssistantMessageEvent msg) {
 * 		System.out.println("Assistant: " + msg.getData().content());
 * 	} else if (event instanceof SessionIdleEvent) {
 * 		System.out.println("Session is idle");
 * 	}
 * });
 * }
* * @see com.github.copilot.sdk.CopilotSession#on(java.util.function.Consumer) * @see SessionEventParser * @since 1.0.0 */ @JsonIgnoreProperties(ignoreUnknown = true) public abstract sealed class AbstractSessionEvent permits // Session events SessionStartEvent, SessionResumeEvent, SessionErrorEvent, SessionIdleEvent, SessionInfoEvent, SessionModelChangeEvent, SessionHandoffEvent, SessionTruncationEvent, SessionSnapshotRewindEvent, SessionUsageInfoEvent, SessionCompactionStartEvent, SessionCompactionCompleteEvent, SessionShutdownEvent, SessionContextChangedEvent, // Assistant events AssistantTurnStartEvent, AssistantIntentEvent, AssistantReasoningEvent, AssistantReasoningDeltaEvent, AssistantMessageEvent, AssistantMessageDeltaEvent, AssistantTurnEndEvent, AssistantUsageEvent, AbortEvent, // Tool events ToolUserRequestedEvent, ToolExecutionStartEvent, ToolExecutionPartialResultEvent, ToolExecutionProgressEvent, ToolExecutionCompleteEvent, // User events UserMessageEvent, PendingMessagesModifiedEvent, // Skill events SkillInvokedEvent, // Other events SubagentStartedEvent, SubagentCompletedEvent, SubagentFailedEvent, SubagentSelectedEvent, HookStartEvent, HookEndEvent, SystemMessageEvent { @JsonProperty("id") private UUID id; @JsonProperty("timestamp") private OffsetDateTime timestamp; @JsonProperty("parentId") private UUID parentId; @JsonProperty("ephemeral") private Boolean ephemeral; /** * Gets the event type discriminator string. *

* This corresponds to the event type in the JSON protocol (e.g., * "assistant.message", "session.idle"). * * @return the event type string */ public abstract String getType(); /** * Gets the unique identifier for this event. * * @return the event UUID */ public UUID getId() { return id; } /** * Sets the event identifier. * * @param id * the event UUID */ public void setId(UUID id) { this.id = id; } /** * Gets the timestamp when this event occurred. * * @return the event timestamp */ public OffsetDateTime getTimestamp() { return timestamp; } /** * Sets the event timestamp. * * @param timestamp * the event timestamp */ public void setTimestamp(OffsetDateTime timestamp) { this.timestamp = timestamp; } /** * Gets the parent event ID, if this event is a child of another. * * @return the parent event UUID, or {@code null} */ public UUID getParentId() { return parentId; } /** * Sets the parent event ID. * * @param parentId * the parent event UUID */ public void setParentId(UUID parentId) { this.parentId = parentId; } /** * Returns whether this is an ephemeral event. *

* Ephemeral events are not persisted in session history. * * @return {@code true} if ephemeral, {@code false} otherwise */ public Boolean getEphemeral() { return ephemeral; } /** * Sets whether this is an ephemeral event. * * @param ephemeral * {@code true} if ephemeral */ public void setEphemeral(Boolean ephemeral) { this.ephemeral = ephemeral; } }