com.suibari.nagi.getPreferences
Schema Diff
+84 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 24 non-breaking changes.
Breaking Changes (2)
- 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") }
Non-Breaking Changes (24)
- 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: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.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.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 }
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: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.preferredName" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.replyFreq" }
Additional Notes
- 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.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 }
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
+
},
34
60
"emojiFavoritesUpdatedAt": {
35
61
"type": "string",
36
62
"format": "datetime",
37
63
"description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。"
38
64
}
39
65
}
40
66
},
41
67
"encoding": "application/json"
42
68
},
43
69
"description": "端末をまたいで同期する本人の設定(my Nagi の既読位置とお気に入り絵文字)を返す。他ユーザーからは参照できない。"
44
70
},
71
+
"feedTab": {
72
+
"type": "object",
73
+
"required": [
74
+
"id",
75
+
"kind"
76
+
],
77
+
"properties": {
78
+
"id": {
79
+
"type": "string",
80
+
"maxLength": 64
81
+
},
82
+
"uri": {
83
+
"type": "string",
84
+
"format": "at-uri",
85
+
"maxLength": 2048,
86
+
"description": "kind が channel のときのチャンネル。"
87
+
},
88
+
"kind": {
89
+
"type": "string",
90
+
"maxLength": 32,
91
+
"knownValues": [
92
+
"list",
93
+
"global",
94
+
"custom",
95
+
"channel",
96
+
"search"
97
+
]
98
+
},
99
+
"label": {
100
+
"type": "string",
101
+
"maxLength": 64,
102
+
"description": "表示名のスナップショット。権威は uri / query 側。"
103
+
},
104
+
"query": {
105
+
"type": "string",
106
+
"maxLength": 128,
107
+
"description": "kind が search のときの保存クエリ。"
108
+
},
109
+
"source": {
110
+
"type": "string",
111
+
"maxLength": 32,
112
+
"description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
113
+
"knownValues": [
114
+
"home",
115
+
"affirmation"
116
+
]
117
+
},
118
+
"queryKind": {
119
+
"type": "string",
120
+
"maxLength": 32,
121
+
"knownValues": [
122
+
"keyword",
123
+
"tag"
124
+
]
125
+
}
126
+
},
127
+
"description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。"
128
+
},
45
129
"readPosition": {
46
130
"type": "object",
47
131
"required": [
48
132
"section",
49
133
"indexedAt",
50
134
"uri"
51
135
],
52
136
"properties": {
53
137
"uri": {
54
138
"type": "string",
55
139
"format": "at-uri",
56
140
"maxLength": 2048
57
141
},
58
142
"section": {
59
143
"type": "string",
60
144
"maxLength": 32,
61
145
"knownValues": [
62
146
"bot",
63
147
"community",
64
148
"list",
65
149
"channels",
66
150
"news"
67
151
]
68
152
},
69
153
"indexedAt": {
70
154
"type": "string",
71
155
"format": "datetime"
72
156
}
73
157
},
74
158
"description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。"
75
159
},
76
160
"customFavorite": {
77
161
"type": "object",
78
162
"required": [
79
163
"kind",
80
164
"emoji"
81
165
],
82
166
"properties": {
83
167
"kind": {
84
168
"type": "string",
85
169
"const": "custom"
86
170
},
87
171
"emoji": {
88
172
"type": "unknown"
89
173
}
90
174
},
91
175
"description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。"
92
176
},
93
177
"unicodeFavorite": {
94
178
"type": "object",
95
179
"required": [
96
180
"kind",
97
181
"emoji"
98
182
],
99
183
"properties": {
100
184
"kind": {
101
185
"type": "string",
102
186
"const": "unicode"
103
187
},
104
188
"emoji": {
105
189
"type": "string",
106
190
"maxLength": 64
107
191
}
108
192
}
109
193
}
110
194
},
111
195
"$type": "com.atproto.lexicon.schema",
112
196
"lexicon": 1
113
197
}