feat(agent): add opt-in push notifications

This commit is contained in:
2026-10-14 22:03:21 -07:00
parent 80748f764f
commit a1c0264d36
51 changed files with 4815 additions and 121 deletions
@@ -73,6 +73,7 @@ struct AgentPage: Codable, Sendable {
struct AgentReadState: Codable, Sendable {
var cursor: String
var updatedAt: String?
var sourceId: String? = nil
}
struct AgentReceipt: Codable, Sendable {
var id: Int64
@@ -95,6 +96,7 @@ enum AgentEvent: Sendable {
case ready(String?)
case messages(AgentPage)
case activity(String, AgentActivity)
case readState(AgentReadState)
case heartbeat
case error(String)
@@ -118,6 +120,13 @@ enum AgentEvent: Sendable {
}
return .activity(id, activity)
case "pong", "heartbeat": return .heartbeat
case "read_state":
// Additive optional frame: malformed new metadata must not tear down
// an otherwise compatible Agent connection.
guard let read = try? AgentCoding.decoder().decode(AgentReadState.self, from: data),
AgentPushPayload.validCursor(read.cursor) != nil,
read.sourceId.map(AgentPushPayload.validSource) ?? true else { return nil }
return .readState(read)
case "error": return .error(envelope.error ?? "Agent connection error.")
default: return nil
}