Files
clawdbot/apps/macos/Sources/ClawdisProtocol/GatewayModels.swift
2025-12-12 16:22:30 +00:00

594 lines
15 KiB
Swift

// Generated by scripts/protocol-gen-swift.ts do not edit by hand
import Foundation
public let GATEWAY_PROTOCOL_VERSION = 1
public enum ErrorCode: String, Codable {
case notLinked = "NOT_LINKED"
case agentTimeout = "AGENT_TIMEOUT"
case invalidRequest = "INVALID_REQUEST"
case unavailable = "UNAVAILABLE"
}
public struct Hello: Codable {
public let type: String
public let minprotocol: Int
public let maxprotocol: Int
public let client: [String: AnyCodable]
public let caps: [String]?
public let auth: [String: AnyCodable]?
public let locale: String?
public let useragent: String?
public init(
type: String,
minprotocol: Int,
maxprotocol: Int,
client: [String: AnyCodable],
caps: [String]?,
auth: [String: AnyCodable]?,
locale: String?,
useragent: String?
) {
self.type = type
self.minprotocol = minprotocol
self.maxprotocol = maxprotocol
self.client = client
self.caps = caps
self.auth = auth
self.locale = locale
self.useragent = useragent
}
private enum CodingKeys: String, CodingKey {
case type
case minprotocol = "minProtocol"
case maxprotocol = "maxProtocol"
case client
case caps
case auth
case locale
case useragent = "userAgent"
}
}
public struct HelloOk: Codable {
public let type: String
public let _protocol: Int
public let server: [String: AnyCodable]
public let features: [String: AnyCodable]
public let snapshot: Snapshot
public let policy: [String: AnyCodable]
public init(
type: String,
_protocol: Int,
server: [String: AnyCodable],
features: [String: AnyCodable],
snapshot: Snapshot,
policy: [String: AnyCodable]
) {
self.type = type
self._protocol = _protocol
self.server = server
self.features = features
self.snapshot = snapshot
self.policy = policy
}
private enum CodingKeys: String, CodingKey {
case type
case _protocol = "protocol"
case server
case features
case snapshot
case policy
}
}
public struct HelloError: Codable {
public let type: String
public let reason: String
public let expectedprotocol: Int?
public let minclient: String?
public init(
type: String,
reason: String,
expectedprotocol: Int?,
minclient: String?
) {
self.type = type
self.reason = reason
self.expectedprotocol = expectedprotocol
self.minclient = minclient
}
private enum CodingKeys: String, CodingKey {
case type
case reason
case expectedprotocol = "expectedProtocol"
case minclient = "minClient"
}
}
public struct RequestFrame: Codable {
public let type: String
public let id: String
public let method: String
public let params: AnyCodable?
public init(
type: String,
id: String,
method: String,
params: AnyCodable?
) {
self.type = type
self.id = id
self.method = method
self.params = params
}
private enum CodingKeys: String, CodingKey {
case type
case id
case method
case params
}
}
public struct ResponseFrame: Codable {
public let type: String
public let id: String
public let ok: Bool
public let payload: AnyCodable?
public let error: [String: AnyCodable]?
public init(
type: String,
id: String,
ok: Bool,
payload: AnyCodable?,
error: [String: AnyCodable]?
) {
self.type = type
self.id = id
self.ok = ok
self.payload = payload
self.error = error
}
private enum CodingKeys: String, CodingKey {
case type
case id
case ok
case payload
case error
}
}
public struct EventFrame: Codable {
public let type: String
public let event: String
public let payload: AnyCodable?
public let seq: Int?
public let stateversion: [String: AnyCodable]?
public init(
type: String,
event: String,
payload: AnyCodable?,
seq: Int?,
stateversion: [String: AnyCodable]?
) {
self.type = type
self.event = event
self.payload = payload
self.seq = seq
self.stateversion = stateversion
}
private enum CodingKeys: String, CodingKey {
case type
case event
case payload
case seq
case stateversion = "stateVersion"
}
}
public struct PresenceEntry: Codable {
public let host: String?
public let ip: String?
public let version: String?
public let mode: String?
public let lastinputseconds: Int?
public let reason: String?
public let tags: [String]?
public let text: String?
public let ts: Int
public let instanceid: String?
public init(
host: String?,
ip: String?,
version: String?,
mode: String?,
lastinputseconds: Int?,
reason: String?,
tags: [String]?,
text: String?,
ts: Int,
instanceid: String?
) {
self.host = host
self.ip = ip
self.version = version
self.mode = mode
self.lastinputseconds = lastinputseconds
self.reason = reason
self.tags = tags
self.text = text
self.ts = ts
self.instanceid = instanceid
}
private enum CodingKeys: String, CodingKey {
case host
case ip
case version
case mode
case lastinputseconds = "lastInputSeconds"
case reason
case tags
case text
case ts
case instanceid = "instanceId"
}
}
public struct StateVersion: Codable {
public let presence: Int
public let health: Int
public init(
presence: Int,
health: Int
) {
self.presence = presence
self.health = health
}
private enum CodingKeys: String, CodingKey {
case presence
case health
}
}
public struct Snapshot: Codable {
public let presence: [PresenceEntry]
public let health: AnyCodable
public let stateversion: StateVersion
public let uptimems: Int
public init(
presence: [PresenceEntry],
health: AnyCodable,
stateversion: StateVersion,
uptimems: Int
) {
self.presence = presence
self.health = health
self.stateversion = stateversion
self.uptimems = uptimems
}
private enum CodingKeys: String, CodingKey {
case presence
case health
case stateversion = "stateVersion"
case uptimems = "uptimeMs"
}
}
public struct ErrorShape: Codable {
public let code: String
public let message: String
public let details: AnyCodable?
public let retryable: Bool?
public let retryafterms: Int?
public init(
code: String,
message: String,
details: AnyCodable?,
retryable: Bool?,
retryafterms: Int?
) {
self.code = code
self.message = message
self.details = details
self.retryable = retryable
self.retryafterms = retryafterms
}
private enum CodingKeys: String, CodingKey {
case code
case message
case details
case retryable
case retryafterms = "retryAfterMs"
}
}
public struct AgentEvent: Codable {
public let runid: String
public let seq: Int
public let stream: String
public let ts: Int
public let data: [String: AnyCodable]
public init(
runid: String,
seq: Int,
stream: String,
ts: Int,
data: [String: AnyCodable]
) {
self.runid = runid
self.seq = seq
self.stream = stream
self.ts = ts
self.data = data
}
private enum CodingKeys: String, CodingKey {
case runid = "runId"
case seq
case stream
case ts
case data
}
}
public struct SendParams: Codable {
public let to: String
public let message: String
public let mediaurl: String?
public let provider: String?
public let idempotencykey: String
public init(
to: String,
message: String,
mediaurl: String?,
provider: String?,
idempotencykey: String
) {
self.to = to
self.message = message
self.mediaurl = mediaurl
self.provider = provider
self.idempotencykey = idempotencykey
}
private enum CodingKeys: String, CodingKey {
case to
case message
case mediaurl = "mediaUrl"
case provider
case idempotencykey = "idempotencyKey"
}
}
public struct AgentParams: Codable {
public let message: String
public let to: String?
public let sessionid: String?
public let sessionkey: String?
public let thinking: String?
public let deliver: Bool?
public let channel: String?
public let timeout: Int?
public let idempotencykey: String
public init(
message: String,
to: String?,
sessionid: String?,
sessionkey: String?,
thinking: String?,
deliver: Bool?,
channel: String?,
timeout: Int?,
idempotencykey: String
) {
self.message = message
self.to = to
self.sessionid = sessionid
self.sessionkey = sessionkey
self.thinking = thinking
self.deliver = deliver
self.channel = channel
self.timeout = timeout
self.idempotencykey = idempotencykey
}
private enum CodingKeys: String, CodingKey {
case message
case to
case sessionid = "sessionId"
case sessionkey = "sessionKey"
case thinking
case deliver
case channel
case timeout
case idempotencykey = "idempotencyKey"
}
}
public struct ChatHistoryParams: Codable {
public let sessionkey: String
public init(
sessionkey: String
) {
self.sessionkey = sessionkey
}
private enum CodingKeys: String, CodingKey {
case sessionkey = "sessionKey"
}
}
public struct ChatSendParams: Codable {
public let sessionkey: String
public let message: String
public let thinking: String?
public let deliver: Bool?
public let attachments: [AnyCodable]?
public let timeoutms: Int?
public let idempotencykey: String
public init(
sessionkey: String,
message: String,
thinking: String?,
deliver: Bool?,
attachments: [AnyCodable]?,
timeoutms: Int?,
idempotencykey: String
) {
self.sessionkey = sessionkey
self.message = message
self.thinking = thinking
self.deliver = deliver
self.attachments = attachments
self.timeoutms = timeoutms
self.idempotencykey = idempotencykey
}
private enum CodingKeys: String, CodingKey {
case sessionkey = "sessionKey"
case message
case thinking
case deliver
case attachments
case timeoutms = "timeoutMs"
case idempotencykey = "idempotencyKey"
}
}
public struct ChatEvent: Codable {
public let runid: String
public let sessionkey: String
public let seq: Int
public let state: AnyCodable
public let message: AnyCodable?
public let errormessage: String?
public let usage: AnyCodable?
public let stopreason: String?
public init(
runid: String,
sessionkey: String,
seq: Int,
state: AnyCodable,
message: AnyCodable?,
errormessage: String?,
usage: AnyCodable?,
stopreason: String?
) {
self.runid = runid
self.sessionkey = sessionkey
self.seq = seq
self.state = state
self.message = message
self.errormessage = errormessage
self.usage = usage
self.stopreason = stopreason
}
private enum CodingKeys: String, CodingKey {
case runid = "runId"
case sessionkey = "sessionKey"
case seq
case state
case message
case errormessage = "errorMessage"
case usage
case stopreason = "stopReason"
}
}
public struct TickEvent: Codable {
public let ts: Int
public init(
ts: Int
) {
self.ts = ts
}
private enum CodingKeys: String, CodingKey {
case ts
}
}
public struct ShutdownEvent: Codable {
public let reason: String
public let restartexpectedms: Int?
public init(
reason: String,
restartexpectedms: Int?
) {
self.reason = reason
self.restartexpectedms = restartexpectedms
}
private enum CodingKeys: String, CodingKey {
case reason
case restartexpectedms = "restartExpectedMs"
}
}
public enum GatewayFrame: Codable {
case hello(Hello)
case helloOk(HelloOk)
case helloError(HelloError)
case req(RequestFrame)
case res(ResponseFrame)
case event(EventFrame)
case unknown(type: String, raw: [String: AnyCodable])
public init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let raw = try container.decode([String: AnyCodable].self)
guard let type = raw["type"]?.value as? String else {
throw DecodingError.dataCorruptedError(in: container, debugDescription: "missing type")
}
switch type {
case "hello":
self = .hello(try Self.decodePayload(Hello.self, from: raw))
case "hello-ok":
self = .helloOk(try Self.decodePayload(HelloOk.self, from: raw))
case "hello-error":
self = .helloError(try Self.decodePayload(HelloError.self, from: raw))
case "req":
self = .req(try Self.decodePayload(RequestFrame.self, from: raw))
case "res":
self = .res(try Self.decodePayload(ResponseFrame.self, from: raw))
case "event":
self = .event(try Self.decodePayload(EventFrame.self, from: raw))
default:
self = .unknown(type: type, raw: raw)
}
}
public func encode(to encoder: Encoder) throws {
switch self {
case .hello(let v): try v.encode(to: encoder)
case .helloOk(let v): try v.encode(to: encoder)
case .helloError(let v): try v.encode(to: encoder)
case .req(let v): try v.encode(to: encoder)
case .res(let v): try v.encode(to: encoder)
case .event(let v): try v.encode(to: encoder)
case .unknown(_, let raw):
var container = encoder.singleValueContainer()
try container.encode(raw)
}
}
private static func decodePayload<T: Decodable>(_ type: T.Type, from raw: [String: AnyCodable]) throws -> T {
let data = try JSONSerialization.data(withJSONObject: raw)
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
}
}