xyz.quasigod.lab.letta.message

quasigod.spaces-alpha.bsky.network

Schema Diff

+93 -34

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

Compare Other Versions

Lexicon Garden

@