xyz.quasigod.lab.letta.message

quasigod.spaces-alpha.bsky.network

Schema Diff

+95 -36

From

CID
bafyreidgfkw4d7g...
Indexed At
2026-08-24 16:12 UTC
View this version

To

CID
bafyreicly7ua7oe...
Indexed At
2026-08-25 19:16 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

22 breaking changes, 19 non-breaking changes.

Breaking Changes (22)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.seq", kind: "prop", name: Some("seq") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.agent", kind: "prop", name: Some("agent") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.message", kind: "prop", name: Some("message") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.role", kind: "prop", name: Some("role") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.conversation", kind: "prop", name: Some("conversation") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.createdAt", kind: "prop", name: Some("createdAt") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.format", kind: "prop", name: Some("format") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.version", kind: "prop", name: Some("version") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.data", kind: "prop", name: Some("data") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.seq", kind: "prop", name: Some("seq") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.agentId", kind: "prop", name: Some("agentId") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.id", kind: "prop", name: Some("id") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.localMessage", kind: "prop", name: Some("localMessage") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.conversationId", kind: "prop", name: Some("conversationId") }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.agentId" }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.conversationId" }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.deleted" }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.id" }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.localMessage" }
  • RemovedVertex RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.seq" }
  • RemovedEdge RemovedEdge { src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.deleted", kind: "prop", name: Some("deleted") }
  • KindChanged KindChanged { vertex_id: "xyz.quasigod.lab.letta.message", old_kind: "object", new_kind: "record" }
Non-Breaking Changes (19)
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.agent" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.compactedMessageIds" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.compactedMessageIds:items" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.conversation" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.createdAt" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.data" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.format" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.version" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.role" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.seq" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.status" }
  • AddedVertex AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.updatedAt" }
  • AddedEdge AddedEdge { src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message:body", kind: "record-schema", name: None }
  • AddedEdge AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.compactedMessageIds", kind: "prop", name: Some("compactedMessageIds") }
  • AddedEdge AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.status", kind: "prop", name: Some("status") }
  • AddedEdge AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • AddedEdge AddedEdge { src: "xyz.quasigod.lab.letta.message:body.compactedMessageIds", tgt: "xyz.quasigod.lab.letta.message:body.compactedMessageIds:items", kind: "items", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.agentId" }
  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.conversationId" }
  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.deleted" }
  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.id" }
  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.localMessage" }
  • RemovedVertex { vertex_id: "xyz.quasigod.lab.letta.message.seq" }

Added Elements

  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.agent" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.compactedMessageIds" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.compactedMessageIds:items" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.conversation" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.createdAt" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.data" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.format" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.message.version" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.role" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.seq" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.status" }
  • AddedVertex { vertex_id: "xyz.quasigod.lab.letta.message:body.updatedAt" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.seq", kind: "prop", name: Some("seq") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.agent", kind: "prop", name: Some("agent") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.message", kind: "prop", name: Some("message") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.role", kind: "prop", name: Some("role") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.conversation", kind: "prop", name: Some("conversation") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body", src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.createdAt", kind: "prop", name: Some("createdAt") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.format", kind: "prop", name: Some("format") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.version", kind: "prop", name: Some("version") }
  • Breaking: RequiredEdgeAdded { vertex_id: "xyz.quasigod.lab.letta.message:body.message", src: "xyz.quasigod.lab.letta.message:body.message", tgt: "xyz.quasigod.lab.letta.message:body.message.data", kind: "prop", name: Some("data") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.seq", kind: "prop", name: Some("seq") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.agentId", kind: "prop", name: Some("agentId") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.id", kind: "prop", name: Some("id") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.localMessage", kind: "prop", name: Some("localMessage") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "xyz.quasigod.lab.letta.message", src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.conversationId", kind: "prop", name: Some("conversationId") }
  • Breaking: RemovedEdge { src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message.deleted", kind: "prop", name: Some("deleted") }
  • Breaking: KindChanged { vertex_id: "xyz.quasigod.lab.letta.message", old_kind: "object", new_kind: "record" }
  • Non-breaking: AddedEdge { src: "xyz.quasigod.lab.letta.message", tgt: "xyz.quasigod.lab.letta.message:body", kind: "record-schema", name: None }
  • Non-breaking: AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.compactedMessageIds", kind: "prop", name: Some("compactedMessageIds") }
  • Non-breaking: AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.status", kind: "prop", name: Some("status") }
  • Non-breaking: AddedEdge { src: "xyz.quasigod.lab.letta.message:body", tgt: "xyz.quasigod.lab.letta.message:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • Non-breaking: AddedEdge { src: "xyz.quasigod.lab.letta.message:body.compactedMessageIds", tgt: "xyz.quasigod.lab.letta.message:body.compactedMessageIds:items", kind: "items", name: None }
1 1
{
2 2
  "id": "xyz.quasigod.lab.letta.message",
3 3
  "defs": {
4 4
    "main": {
5 -
      "type": "object",
6 -
      "required": [
7 -
        "id",
8 -
        "conversationId",
9 -
        "agentId",
10 -
        "seq",
11 -
        "localMessage"
12 -
      ],
13 -
      "properties": {
14 -
        "id": {
15 -
          "type": "string",
16 -
          "maxLength": 256,
17 -
          "description": "LocalMessage source id, before any :variant: suffix."
18 -
        },
19 -
        "seq": {
20 -
          "type": "integer",
21 -
          "minimum": 1,
22 -
          "description": "Per-conversation monotonic sequence, assigned at write time."
23 -
        },
24 -
        "agentId": {
25 -
          "type": "string",
26 -
          "maxLength": 128
27 -
        },
28 -
        "deleted": {
29 -
          "type": "boolean",
30 -
          "description": "Compaction deletes records outright; this flag is unused in v1."
31 -
        },
32 -
        "localMessage": {
33 -
          "type": "unknown",
34 -
          "description": "Serialized LocalMessage (role, content, metadata)."
35 -
        },
36 -
        "conversationId": {
37 -
          "type": "string",
38 -
          "maxLength": 128
5 +
      "key": "tid",
6 +
      "type": "record",
7 +
      "record": {
8 +
        "type": "object",
9 +
        "required": [
10 +
          "conversation",
11 +
          "agent",
12 +
          "role",
13 +
          "seq",
14 +
          "message",
15 +
          "createdAt"
16 +
        ],
17 +
        "properties": {
18 +
          "seq": {
19 +
            "type": "integer",
20 +
            "minimum": 1,
21 +
            "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."
22 +
          },
23 +
          "role": {
24 +
            "type": "string",
25 +
            "description": "Message role: the sender class. toolResult = an assistant tool call's result, returned as a message.",
26 +
            "knownValues": [
27 +
              "user",
28 +
              "assistant",
29 +
              "toolResult"
30 +
            ]
31 +
          },
32 +
          "agent": {
33 +
            "type": "string",
34 +
            "format": "at-uri",
35 +
            "description": "The agent this message was produced by or addressed to."
36 +
          },
37 +
          "status": {
38 +
            "type": "string",
39 +
            "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.",
40 +
            "knownValues": [
41 +
              "active",
42 +
              "compacted"
43 +
            ]
44 +
          },
45 +
          "message": {
46 +
            "type": "object",
47 +
            "required": [
48 +
              "format",
49 +
              "version",
50 +
              "data"
51 +
            ],
52 +
            "properties": {
53 +
              "data": {
54 +
                "type": "unknown",
55 +
                "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."
56 +
              },
57 +
              "format": {
58 +
                "type": "string",
59 +
                "maxLength": 128,
60 +
                "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.",
61 +
                "knownValues": [
62 +
                  "letta.localMessage"
63 +
                ]
64 +
              },
65 +
              "version": {
66 +
                "type": "integer",
67 +
                "minimum": 1,
68 +
                "description": "Payload format version the data conforms to. Bumped when the payload format changes incompatibly; readers branch on format + version."
69 +
              }
70 +
            },
71 +
            "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."
72 +
          },
73 +
          "createdAt": {
74 +
            "type": "string",
75 +
            "format": "datetime"
76 +
          },
77 +
          "updatedAt": {
78 +
            "type": "string",
79 +
            "format": "datetime",
80 +
            "description": "Set when the message is rewritten in place (interrupted tool calls settled, or re-marked compacted by a compaction)."
81 +
          },
82 +
          "conversation": {
83 +
            "type": "string",
84 +
            "format": "at-uri",
85 +
            "description": "The conversation this message belongs to."
86 +
          },
87 +
          "compactedMessageIds": {
88 +
            "type": "array",
89 +
            "items": {
90 +
              "type": "string",
91 +
              "format": "tid",
92 +
              "maxLength": 13
93 +
            },
94 +
            "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."
95 +
          }
39 96
        }
40 -
      }
97 +
      },
98 +
      "description": "A letta message persisted in a permissioned space."
41 99
    }
42 100
  },
43 101
  "$type": "com.atproto.lexicon.schema",
44 -
  "lexicon": 1
102 +
  "lexicon": 1,
103 +
  "description": "A letta message within a conversation. Core fields are navigable atproto data; `message` carries the full letta message state."
45 104
}

Compare Other Versions

Lexicon Garden

@