xyz.quasigod.lab.letta.message
Schema Diff
+93 -34
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
}