{
"id": "xyz.quasigod.lab.letta.message",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"conversation",
"agent",
"role",
"seq",
"message",
"createdAt"
],
"properties": {
"seq": {
"type": "integer",
"minimum": 1,
"description": "Monotonic per-conversation ordering. Unique within the conversation; minted from the conversation's seq counter (one more than the highest seq of any retained message). Never reused for a message that exists; retained (compacted) messages keep their seq."
},
"role": {
"type": "string",
"description": "Message role: the sender class. toolResult = an assistant tool call's result, returned as a message.",
"knownValues": [
"user",
"assistant",
"toolResult"
]
},
"agent": {
"type": "string",
"format": "at-uri",
"description": "The agent this message was produced by or addressed to."
},
"status": {
"type": "string",
"description": "active: part of the conversation's current context window. compacted: summarized out of the window — retained in the transcript but separated from the active conversation. Absent means active. The window is derived: active messages, in seq order, form the conversation's context; compaction re-marks messages compacted instead of deleting them.",
"knownValues": [
"active",
"compacted"
]
},
"message": {
"type": "object",
"required": [
"format",
"version",
"data"
],
"properties": {
"data": {
"type": "unknown",
"description": "The payload in the declared format. Kept unvalidated by the lexicon deliberately: it is the harness's internal, evolving wire format, and declaring it in the lexicon would freeze it under atproto's evolution rules."
},
"format": {
"type": "string",
"maxLength": 128,
"description": "Payload format namespace. letta.localMessage: letta's LocalMessage — a role-discriminated union (user/assistant/toolResult) of content parts (text, thinking, image, tool call), provider metadata, and usage. Specified by letta's TypeScript types (src/backend/local/local-message.ts), which letta's compiler enforces on every read and write.",
"knownValues": [
"letta.localMessage"
]
},
"version": {
"type": "integer",
"minimum": 1,
"description": "Payload format version the data conforms to. Bumped when the payload format changes incompatibly; readers branch on format + version."
}
},
"description": "The full message state, enveloped. format + version identify the payload spec; data is the payload in that format. The typed core plus this envelope is the complete interop contract; the data payload is harness-specific."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "Set when the message is rewritten in place (interrupted tool calls settled, or re-marked compacted by a compaction)."
},
"conversation": {
"type": "string",
"format": "at-uri",
"description": "The conversation this message belongs to."
},
"compactedMessageIds": {
"type": "array",
"items": {
"type": "string",
"format": "tid",
"maxLength": 13
},
"description": "Only on a compaction summary message: the TIDs of the messages summarized into this summary, in seq order. Following these (and any older summary among them) reconstructs the full pre-compaction transcript. Compaction never deletes; it re-marks messages compacted and records them here."
}
}
},
"description": "A letta message persisted in a permissioned space."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A letta message within a conversation. Core fields are navigable atproto data; `message` carries the full letta message state."
}