com.suibari.nagi.getPreferences
Schema Diff
+131 -1
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 38 non-breaking changes.
Breaking Changes (6)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.provider", kind: "prop", name: Some("provider") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.post", kind: "prop", name: Some("post") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.translation", kind: "prop", name: Some("translation") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate", kind: "prop", name: Some("autoTranslate") }
Non-Breaking Changes (38)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.post" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.provider" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.translation" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.preferredName" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.replyFreq" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.post" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.provider" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.translation" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.preferredName" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.replyFreq" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.provider", kind: "prop", name: Some("provider") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.post", kind: "prop", name: Some("post") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.translation", kind: "prop", name: Some("translation") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate", kind: "prop", name: Some("autoTranslate") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
1
1
{
2
2
"id": "com.suibari.nagi.getPreferences",
3
3
"defs": {
4
4
"main": {
5
5
"type": "query",
6
6
"errors": [
7
7
{
8
8
"name": "AuthRequired"
9
9
}
10
10
],
11
11
"output": {
12
12
"schema": {
13
13
"type": "object",
14
14
"required": [
15
15
"readPositions",
16
16
"emojiFavorites"
17
17
],
18
18
"properties": {
19
+
"feedTabs": {
20
+
"type": "array",
21
+
"items": {
22
+
"ref": "#feedTab",
23
+
"type": "ref"
24
+
},
25
+
"maxLength": 16,
26
+
"description": "フィードのタブ。表示順そのまま。"
27
+
},
28
+
"replyFreq": {
29
+
"type": "integer",
30
+
"maximum": 100,
31
+
"minimum": 0,
32
+
"description": "botたんからの返信確率(0〜100%)。Bluesky側のfreq設定と共用。"
33
+
},
34
+
"preferredName": {
35
+
"type": "string",
36
+
"maxLength": 120,
37
+
"description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
38
+
"maxGraphemes": 40
39
+
},
19
40
"readPositions": {
20
41
"type": "array",
21
42
"items": {
22
43
"ref": "#readPosition",
23
44
"type": "ref"
24
45
}
25
46
},
26
47
"emojiFavorites": {
27
48
"type": "array",
28
49
"items": {
29
50
"type": "unknown"
30
51
},
31
52
"maxLength": 32,
32
53
"description": "お気に入り絵文字パレット。表示順そのまま。要素は #unicodeFavorite または #customFavorite。"
33
54
},
55
+
"feedTabsUpdatedAt": {
56
+
"type": "string",
57
+
"format": "datetime",
58
+
"description": "省略時は、この利用者がまだ一度もタブをカスタムしていないことを表す(クライアントは既定タブを使う)。"
59
+
},
60
+
"languagePreferences": {
61
+
"ref": "#languagePreferences",
62
+
"type": "ref"
63
+
},
64
+
"lastBookmarkFolderId": {
65
+
"type": "string",
66
+
"maxLength": 64
67
+
},
34
68
"emojiFavoritesUpdatedAt": {
35
69
"type": "string",
36
70
"format": "datetime",
37
71
"description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。"
72
+
},
73
+
"lastBookmarkFolderUpdatedAt": {
74
+
"type": "string",
75
+
"format": "datetime"
76
+
},
77
+
"languagePreferencesUpdatedAt": {
78
+
"type": "string",
79
+
"format": "datetime"
38
80
}
39
81
}
40
82
},
41
83
"encoding": "application/json"
42
84
},
43
-
"description": "端末をまたいで同期する本人の設定(my Nagi の既読位置とお気に入り絵文字)を返す。他ユーザーからは参照できない。"
85
+
"description": "端末をまたいで同期する本人の設定(既読位置、お気に入り絵文字、フィードタブ、投稿・翻訳言語、最後のブックマークフォルダ)を返す。他ユーザーからは参照できない。"
86
+
},
87
+
"feedTab": {
88
+
"type": "object",
89
+
"required": [
90
+
"id",
91
+
"kind"
92
+
],
93
+
"properties": {
94
+
"id": {
95
+
"type": "string",
96
+
"maxLength": 64
97
+
},
98
+
"uri": {
99
+
"type": "string",
100
+
"format": "at-uri",
101
+
"maxLength": 2048,
102
+
"description": "kind が channel のときのチャンネル。"
103
+
},
104
+
"kind": {
105
+
"type": "string",
106
+
"maxLength": 32,
107
+
"knownValues": [
108
+
"list",
109
+
"global",
110
+
"custom",
111
+
"channel",
112
+
"search"
113
+
]
114
+
},
115
+
"label": {
116
+
"type": "string",
117
+
"maxLength": 64,
118
+
"description": "表示名のスナップショット。権威は uri / query 側。"
119
+
},
120
+
"query": {
121
+
"type": "string",
122
+
"maxLength": 128,
123
+
"description": "kind が search のときの保存クエリ。"
124
+
},
125
+
"source": {
126
+
"type": "string",
127
+
"maxLength": 32,
128
+
"description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
129
+
"knownValues": [
130
+
"home",
131
+
"affirmation"
132
+
]
133
+
},
134
+
"queryKind": {
135
+
"type": "string",
136
+
"maxLength": 32,
137
+
"knownValues": [
138
+
"keyword",
139
+
"tag"
140
+
]
141
+
}
142
+
},
143
+
"description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。"
44
144
},
45
145
"readPosition": {
46
146
"type": "object",
47
147
"required": [
48
148
"section",
49
149
"indexedAt",
50
150
"uri"
51
151
],
52
152
"properties": {
53
153
"uri": {
54
154
"type": "string",
55
155
"format": "at-uri",
56
156
"maxLength": 2048
57
157
},
58
158
"section": {
59
159
"type": "string",
60
160
"maxLength": 32,
61
161
"knownValues": [
62
162
"bot",
63
163
"community",
64
164
"list",
65
165
"channels",
66
166
"news"
67
167
]
68
168
},
69
169
"indexedAt": {
70
170
"type": "string",
71
171
"format": "datetime"
72
172
}
73
173
},
74
174
"description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。"
75
175
},
76
176
"customFavorite": {
77
177
"type": "object",
78
178
"required": [
79
179
"kind",
80
180
"emoji"
81
181
],
82
182
"properties": {
83
183
"kind": {
84
184
"type": "string",
85
185
"const": "custom"
86
186
},
87
187
"emoji": {
88
188
"type": "unknown"
89
189
}
90
190
},
91
191
"description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。"
92
192
},
93
193
"unicodeFavorite": {
94
194
"type": "object",
95
195
"required": [
96
196
"kind",
97
197
"emoji"
98
198
],
99
199
"properties": {
100
200
"kind": {
101
201
"type": "string",
102
202
"const": "unicode"
103
203
},
104
204
"emoji": {
105
205
"type": "string",
106
206
"maxLength": 64
107
207
}
108
208
}
209
+
},
210
+
"languagePreferences": {
211
+
"type": "object",
212
+
"required": [
213
+
"post",
214
+
"translation",
215
+
"provider",
216
+
"autoTranslate"
217
+
],
218
+
"properties": {
219
+
"post": {
220
+
"type": "string",
221
+
"maxLength": 16
222
+
},
223
+
"provider": {
224
+
"type": "string",
225
+
"knownValues": [
226
+
"kagi",
227
+
"deepl",
228
+
"google"
229
+
]
230
+
},
231
+
"translation": {
232
+
"type": "string",
233
+
"maxLength": 16
234
+
},
235
+
"autoTranslate": {
236
+
"type": "boolean"
237
+
}
238
+
}
109
239
}
110
240
},
111
241
"$type": "com.atproto.lexicon.schema",
112
242
"lexicon": 1
113
243
}