using System.Text.Json; using System.Text.Json.Serialization; namespace backend.DeviceHub; public record HubEnvelope([property: JsonPropertyName("type")] string Type); public record HelloEnvelope(string Type, [property: JsonPropertyName("device_id")] Guid DeviceId, [property: JsonPropertyName("client_version")] string ClientVersion) : HubEnvelope(Type); public record HelloAckEnvelope(string Type, [property: JsonPropertyName("config")] JsonElement Config) : HubEnvelope(Type); public record PongEnvelope(string Type) : HubEnvelope(Type); public record WakeEnvelope(string Type, [property: JsonPropertyName("at")] long? At) : HubEnvelope(Type); public record SessionStartedEnvelope(string Type, [property: JsonPropertyName("conversation_id")] Guid ConversationId) : HubEnvelope(Type); public record SessionEndedEnvelope(string Type, [property: JsonPropertyName("reason")] string Reason) : HubEnvelope(Type); public record AssistantDoneEnvelope(string Type) : HubEnvelope(Type); public record ToolCallEnvelope(string Type, [property: JsonPropertyName("call_id")] string CallId, [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("arguments")] JsonElement Arguments) : HubEnvelope(Type); public record ToolResultEnvelope(string Type, [property: JsonPropertyName("call_id")] string CallId, [property: JsonPropertyName("ok")] bool Ok, [property: JsonPropertyName("result")] JsonElement? Result, [property: JsonPropertyName("error")] string? Error) : HubEnvelope(Type); public record ErrorEnvelope(string Type, [property: JsonPropertyName("code")] string Code, [property: JsonPropertyName("message")] string Message, [property: JsonPropertyName("fatal")] bool? Fatal) : HubEnvelope(Type);