/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ // AUTO-GENERATED FILE - DO NOT EDIT // // Generated from: @github/copilot/session-events.schema.json // Generated by: scripts/generate-session-types.ts // Generated at: 2026-01-13T00:08:21.149Z // // To update these types: // 1. Update the schema in copilot-agent-runtime // 2. Run: npm run generate:session-types // #nullable enable #pragma warning disable CS8618 namespace GitHub.Copilot.SDK { using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; /// /// Custom JSON converter for SessionEvent that handles discriminator appearing anywhere in JSON. /// internal class SessionEventConverter : JsonConverter { private static readonly Dictionary TypeMap = new() { ["session.start"] = typeof(SessionStartEvent), ["session.resume"] = typeof(SessionResumeEvent), ["session.error"] = typeof(SessionErrorEvent), ["session.idle"] = typeof(SessionIdleEvent), ["session.info"] = typeof(SessionInfoEvent), ["session.model_change"] = typeof(SessionModelChangeEvent), ["session.handoff"] = typeof(SessionHandoffEvent), ["session.truncation"] = typeof(SessionTruncationEvent), ["user.message"] = typeof(UserMessageEvent), ["pending_messages.modified"] = typeof(PendingMessagesModifiedEvent), ["assistant.turn_start"] = typeof(AssistantTurnStartEvent), ["assistant.intent"] = typeof(AssistantIntentEvent), ["assistant.reasoning"] = typeof(AssistantReasoningEvent), ["assistant.reasoning_delta"] = typeof(AssistantReasoningDeltaEvent), ["assistant.message"] = typeof(AssistantMessageEvent), ["assistant.message_delta"] = typeof(AssistantMessageDeltaEvent), ["assistant.turn_end"] = typeof(AssistantTurnEndEvent), ["assistant.usage"] = typeof(AssistantUsageEvent), ["abort"] = typeof(AbortEvent), ["tool.user_requested"] = typeof(ToolUserRequestedEvent), ["tool.execution_start"] = typeof(ToolExecutionStartEvent), ["tool.execution_partial_result"] = typeof(ToolExecutionPartialResultEvent), ["tool.execution_complete"] = typeof(ToolExecutionCompleteEvent), ["custom_agent.started"] = typeof(CustomAgentStartedEvent), ["custom_agent.completed"] = typeof(CustomAgentCompletedEvent), ["custom_agent.failed"] = typeof(CustomAgentFailedEvent), ["custom_agent.selected"] = typeof(CustomAgentSelectedEvent), ["hook.start"] = typeof(HookStartEvent), ["hook.end"] = typeof(HookEndEvent), ["system.message"] = typeof(SystemMessageEvent), }; public override SessionEvent? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // Parse as JsonNode to find the discriminator regardless of property order var node = JsonNode.Parse(ref reader); if (node is not JsonObject obj) throw new JsonException("Expected JSON object"); var typeProp = obj["type"]?.GetValue(); if (string.IsNullOrEmpty(typeProp)) throw new JsonException("Missing 'type' discriminator property"); if (!TypeMap.TryGetValue(typeProp, out var targetType)) throw new JsonException($"Unknown event type: {typeProp}"); // Deserialize to the concrete type without using this converter (to avoid recursion) return (SessionEvent?)obj.Deserialize(targetType, SerializerOptions.WithoutConverter); } public override void Write(Utf8JsonWriter writer, SessionEvent value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, value.GetType(), SerializerOptions.WithoutConverter); } } /// /// Base class for all session events with polymorphic JSON serialization. /// [JsonConverter(typeof(SessionEventConverter))] public abstract partial class SessionEvent { [JsonPropertyName("id")] public Guid Id { get; set; } [JsonPropertyName("timestamp")] public DateTimeOffset Timestamp { get; set; } [JsonPropertyName("parentId")] public Guid? ParentId { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("ephemeral")] public bool? Ephemeral { get; set; } /// /// The event type discriminator. /// [JsonPropertyName("type")] public abstract string Type { get; } public static SessionEvent FromJson(string json) => JsonSerializer.Deserialize(json, SerializerOptions.Default)!; public string ToJson() => JsonSerializer.Serialize(this, GetType(), SerializerOptions.Default); } /// /// Event: session.start /// public partial class SessionStartEvent : SessionEvent { public override string Type => "session.start"; [JsonPropertyName("data")] public SessionStartData Data { get; set; } } /// /// Event: session.resume /// public partial class SessionResumeEvent : SessionEvent { public override string Type => "session.resume"; [JsonPropertyName("data")] public SessionResumeData Data { get; set; } } /// /// Event: session.error /// public partial class SessionErrorEvent : SessionEvent { public override string Type => "session.error"; [JsonPropertyName("data")] public SessionErrorData Data { get; set; } } /// /// Event: session.idle /// public partial class SessionIdleEvent : SessionEvent { public override string Type => "session.idle"; [JsonPropertyName("data")] public SessionIdleData Data { get; set; } } /// /// Event: session.info /// public partial class SessionInfoEvent : SessionEvent { public override string Type => "session.info"; [JsonPropertyName("data")] public SessionInfoData Data { get; set; } } /// /// Event: session.model_change /// public partial class SessionModelChangeEvent : SessionEvent { public override string Type => "session.model_change"; [JsonPropertyName("data")] public SessionModelChangeData Data { get; set; } } /// /// Event: session.handoff /// public partial class SessionHandoffEvent : SessionEvent { public override string Type => "session.handoff"; [JsonPropertyName("data")] public SessionHandoffData Data { get; set; } } /// /// Event: session.truncation /// public partial class SessionTruncationEvent : SessionEvent { public override string Type => "session.truncation"; [JsonPropertyName("data")] public SessionTruncationData Data { get; set; } } /// /// Event: user.message /// public partial class UserMessageEvent : SessionEvent { public override string Type => "user.message"; [JsonPropertyName("data")] public UserMessageData Data { get; set; } } /// /// Event: pending_messages.modified /// public partial class PendingMessagesModifiedEvent : SessionEvent { public override string Type => "pending_messages.modified"; [JsonPropertyName("data")] public PendingMessagesModifiedData Data { get; set; } } /// /// Event: assistant.turn_start /// public partial class AssistantTurnStartEvent : SessionEvent { public override string Type => "assistant.turn_start"; [JsonPropertyName("data")] public AssistantTurnStartData Data { get; set; } } /// /// Event: assistant.intent /// public partial class AssistantIntentEvent : SessionEvent { public override string Type => "assistant.intent"; [JsonPropertyName("data")] public AssistantIntentData Data { get; set; } } /// /// Event: assistant.reasoning /// public partial class AssistantReasoningEvent : SessionEvent { public override string Type => "assistant.reasoning"; [JsonPropertyName("data")] public AssistantReasoningData Data { get; set; } } /// /// Event: assistant.reasoning_delta /// public partial class AssistantReasoningDeltaEvent : SessionEvent { public override string Type => "assistant.reasoning_delta"; [JsonPropertyName("data")] public AssistantReasoningDeltaData Data { get; set; } } /// /// Event: assistant.message /// public partial class AssistantMessageEvent : SessionEvent { public override string Type => "assistant.message"; [JsonPropertyName("data")] public AssistantMessageData Data { get; set; } } /// /// Event: assistant.message_delta /// public partial class AssistantMessageDeltaEvent : SessionEvent { public override string Type => "assistant.message_delta"; [JsonPropertyName("data")] public AssistantMessageDeltaData Data { get; set; } } /// /// Event: assistant.turn_end /// public partial class AssistantTurnEndEvent : SessionEvent { public override string Type => "assistant.turn_end"; [JsonPropertyName("data")] public AssistantTurnEndData Data { get; set; } } /// /// Event: assistant.usage /// public partial class AssistantUsageEvent : SessionEvent { public override string Type => "assistant.usage"; [JsonPropertyName("data")] public AssistantUsageData Data { get; set; } } /// /// Event: abort /// public partial class AbortEvent : SessionEvent { public override string Type => "abort"; [JsonPropertyName("data")] public AbortData Data { get; set; } } /// /// Event: tool.user_requested /// public partial class ToolUserRequestedEvent : SessionEvent { public override string Type => "tool.user_requested"; [JsonPropertyName("data")] public ToolUserRequestedData Data { get; set; } } /// /// Event: tool.execution_start /// public partial class ToolExecutionStartEvent : SessionEvent { public override string Type => "tool.execution_start"; [JsonPropertyName("data")] public ToolExecutionStartData Data { get; set; } } /// /// Event: tool.execution_partial_result /// public partial class ToolExecutionPartialResultEvent : SessionEvent { public override string Type => "tool.execution_partial_result"; [JsonPropertyName("data")] public ToolExecutionPartialResultData Data { get; set; } } /// /// Event: tool.execution_complete /// public partial class ToolExecutionCompleteEvent : SessionEvent { public override string Type => "tool.execution_complete"; [JsonPropertyName("data")] public ToolExecutionCompleteData Data { get; set; } } /// /// Event: custom_agent.started /// public partial class CustomAgentStartedEvent : SessionEvent { public override string Type => "custom_agent.started"; [JsonPropertyName("data")] public CustomAgentStartedData Data { get; set; } } /// /// Event: custom_agent.completed /// public partial class CustomAgentCompletedEvent : SessionEvent { public override string Type => "custom_agent.completed"; [JsonPropertyName("data")] public CustomAgentCompletedData Data { get; set; } } /// /// Event: custom_agent.failed /// public partial class CustomAgentFailedEvent : SessionEvent { public override string Type => "custom_agent.failed"; [JsonPropertyName("data")] public CustomAgentFailedData Data { get; set; } } /// /// Event: custom_agent.selected /// public partial class CustomAgentSelectedEvent : SessionEvent { public override string Type => "custom_agent.selected"; [JsonPropertyName("data")] public CustomAgentSelectedData Data { get; set; } } /// /// Event: hook.start /// public partial class HookStartEvent : SessionEvent { public override string Type => "hook.start"; [JsonPropertyName("data")] public HookStartData Data { get; set; } } /// /// Event: hook.end /// public partial class HookEndEvent : SessionEvent { public override string Type => "hook.end"; [JsonPropertyName("data")] public HookEndData Data { get; set; } } /// /// Event: system.message /// public partial class SystemMessageEvent : SessionEvent { public override string Type => "system.message"; [JsonPropertyName("data")] public SystemMessageData Data { get; set; } } public partial class SessionStartData { [JsonPropertyName("sessionId")] public string SessionId { get; set; } [JsonPropertyName("version")] public double Version { get; set; } [JsonPropertyName("producer")] public string Producer { get; set; } [JsonPropertyName("copilotVersion")] public string CopilotVersion { get; set; } [JsonPropertyName("startTime")] public DateTimeOffset StartTime { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("selectedModel")] public string SelectedModel { get; set; } } public partial class SessionResumeData { [JsonPropertyName("resumeTime")] public DateTimeOffset ResumeTime { get; set; } [JsonPropertyName("eventCount")] public double EventCount { get; set; } } public partial class SessionErrorData { [JsonPropertyName("errorType")] public string ErrorType { get; set; } [JsonPropertyName("message")] public string Message { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("stack")] public string Stack { get; set; } } public partial class SessionIdleData { } public partial class SessionInfoData { [JsonPropertyName("infoType")] public string InfoType { get; set; } [JsonPropertyName("message")] public string Message { get; set; } } public partial class SessionModelChangeData { [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("previousModel")] public string PreviousModel { get; set; } [JsonPropertyName("newModel")] public string NewModel { get; set; } } public partial class SessionHandoffData { [JsonPropertyName("handoffTime")] public DateTimeOffset HandoffTime { get; set; } [JsonPropertyName("sourceType")] public SessionHandoffDataSourceType SourceType { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("repository")] public SessionHandoffDataRepository? Repository { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("context")] public string Context { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("summary")] public string Summary { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("remoteSessionId")] public string RemoteSessionId { get; set; } } public partial class SessionTruncationData { [JsonPropertyName("tokenLimit")] public double TokenLimit { get; set; } [JsonPropertyName("preTruncationTokensInMessages")] public double PreTruncationTokensInMessages { get; set; } [JsonPropertyName("preTruncationMessagesLength")] public double PreTruncationMessagesLength { get; set; } [JsonPropertyName("postTruncationTokensInMessages")] public double PostTruncationTokensInMessages { get; set; } [JsonPropertyName("postTruncationMessagesLength")] public double PostTruncationMessagesLength { get; set; } [JsonPropertyName("tokensRemovedDuringTruncation")] public double TokensRemovedDuringTruncation { get; set; } [JsonPropertyName("messagesRemovedDuringTruncation")] public double MessagesRemovedDuringTruncation { get; set; } [JsonPropertyName("performedBy")] public string PerformedBy { get; set; } } public partial class UserMessageData { [JsonPropertyName("content")] public string Content { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("transformedContent")] public string TransformedContent { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("attachments")] public UserMessageDataAttachmentsItem[] Attachments { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("source")] public string Source { get; set; } } public partial class PendingMessagesModifiedData { } public partial class AssistantTurnStartData { [JsonPropertyName("turnId")] public string TurnId { get; set; } } public partial class AssistantIntentData { [JsonPropertyName("intent")] public string Intent { get; set; } } public partial class AssistantReasoningData { [JsonPropertyName("reasoningId")] public string ReasoningId { get; set; } [JsonPropertyName("content")] public string Content { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("chunkContent")] public string ChunkContent { get; set; } } public partial class AssistantReasoningDeltaData { [JsonPropertyName("reasoningId")] public string ReasoningId { get; set; } [JsonPropertyName("deltaContent")] public string DeltaContent { get; set; } } public partial class AssistantMessageData { [JsonPropertyName("messageId")] public string MessageId { get; set; } [JsonPropertyName("content")] public string Content { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("chunkContent")] public string ChunkContent { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("totalResponseSizeBytes")] public double? TotalResponseSizeBytes { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("toolRequests")] public AssistantMessageDataToolRequestsItem[] ToolRequests { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("parentToolCallId")] public string ParentToolCallId { get; set; } } public partial class AssistantMessageDeltaData { [JsonPropertyName("messageId")] public string MessageId { get; set; } [JsonPropertyName("deltaContent")] public string DeltaContent { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("totalResponseSizeBytes")] public double? TotalResponseSizeBytes { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("parentToolCallId")] public string ParentToolCallId { get; set; } } public partial class AssistantTurnEndData { [JsonPropertyName("turnId")] public string TurnId { get; set; } } public partial class AssistantUsageData { [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("model")] public string Model { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("inputTokens")] public double? InputTokens { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("outputTokens")] public double? OutputTokens { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("cacheReadTokens")] public double? CacheReadTokens { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("cacheWriteTokens")] public double? CacheWriteTokens { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("cost")] public double? Cost { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("duration")] public double? Duration { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("initiator")] public string Initiator { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("apiCallId")] public string ApiCallId { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("providerCallId")] public string ProviderCallId { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("quotaSnapshots")] public Dictionary QuotaSnapshots { get; set; } } public partial class AbortData { [JsonPropertyName("reason")] public string Reason { get; set; } } public partial class ToolUserRequestedData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("toolName")] public string ToolName { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("arguments")] public object Arguments { get; set; } } public partial class ToolExecutionStartData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("toolName")] public string ToolName { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("arguments")] public object Arguments { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("parentToolCallId")] public string ParentToolCallId { get; set; } } public partial class ToolExecutionPartialResultData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("partialOutput")] public string PartialOutput { get; set; } } public partial class ToolExecutionCompleteData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("success")] public bool Success { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("isUserRequested")] public bool? IsUserRequested { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("result")] public ToolExecutionCompleteDataResult? Result { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("error")] public ToolExecutionCompleteDataError? Error { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("toolTelemetry")] public Dictionary ToolTelemetry { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("parentToolCallId")] public string ParentToolCallId { get; set; } } public partial class CustomAgentStartedData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("agentName")] public string AgentName { get; set; } [JsonPropertyName("agentDisplayName")] public string AgentDisplayName { get; set; } [JsonPropertyName("agentDescription")] public string AgentDescription { get; set; } } public partial class CustomAgentCompletedData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("agentName")] public string AgentName { get; set; } } public partial class CustomAgentFailedData { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("agentName")] public string AgentName { get; set; } [JsonPropertyName("error")] public string Error { get; set; } } public partial class CustomAgentSelectedData { [JsonPropertyName("agentName")] public string AgentName { get; set; } [JsonPropertyName("agentDisplayName")] public string AgentDisplayName { get; set; } [JsonPropertyName("tools")] public string[] Tools { get; set; } } public partial class HookStartData { [JsonPropertyName("hookInvocationId")] public string HookInvocationId { get; set; } [JsonPropertyName("hookType")] public string HookType { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("input")] public object Input { get; set; } } public partial class HookEndData { [JsonPropertyName("hookInvocationId")] public string HookInvocationId { get; set; } [JsonPropertyName("hookType")] public string HookType { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("output")] public object Output { get; set; } [JsonPropertyName("success")] public bool Success { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("error")] public HookEndDataError? Error { get; set; } } public partial class SystemMessageData { [JsonPropertyName("content")] public string Content { get; set; } [JsonPropertyName("role")] public SystemMessageDataRole Role { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("name")] public string Name { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("metadata")] public SystemMessageDataMetadata? Metadata { get; set; } } public partial class SessionHandoffDataRepository { [JsonPropertyName("owner")] public string Owner { get; set; } [JsonPropertyName("name")] public string Name { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("branch")] public string Branch { get; set; } } public partial class UserMessageDataAttachmentsItem { [JsonPropertyName("type")] public UserMessageDataAttachmentsItemType Type { get; set; } [JsonPropertyName("path")] public string Path { get; set; } [JsonPropertyName("displayName")] public string DisplayName { get; set; } } public partial class AssistantMessageDataToolRequestsItem { [JsonPropertyName("toolCallId")] public string ToolCallId { get; set; } [JsonPropertyName("name")] public string Name { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("arguments")] public object Arguments { get; set; } } public partial class ToolExecutionCompleteDataResult { [JsonPropertyName("content")] public string Content { get; set; } } public partial class ToolExecutionCompleteDataError { [JsonPropertyName("message")] public string Message { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("code")] public string Code { get; set; } } public partial class HookEndDataError { [JsonPropertyName("message")] public string Message { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("stack")] public string Stack { get; set; } } public partial class SystemMessageDataMetadata { [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("promptVersion")] public string PromptVersion { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("variables")] public Dictionary Variables { get; set; } } public enum SessionHandoffDataSourceType { Remote, Local, } public enum UserMessageDataAttachmentsItemType { File, Directory, } public enum SystemMessageDataRole { System, Developer, } internal static class SerializerOptions { /// /// Default options with SessionEventConverter for polymorphic deserialization. /// public static readonly JsonSerializerOptions Default = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; /// /// Options without SessionEventConverter, used internally by the converter to avoid recursion. /// internal static readonly JsonSerializerOptions WithoutConverter = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; } } #pragma warning restore CS8618