com.suibari.nagi.getPreferences

suibari.com

Schema Diff

+47 -1

From

CID
bafyreia4u6fnnvd...
Indexed At
2026-08-15 17:15 UTC
View this version

To

CID
bafyreig6i7ujb7i...
Indexed At
2026-08-27 00:10 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 14 non-breaking changes.

Breaking Changes (4)
  • 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 (14)
  • 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.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" }
  • 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.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }

Migration Guidance

Added Elements

  • 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.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" }

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

Compare Other Versions

Lexicon Garden

@