com.suibari.nagi.getPreferences

suibari.com

Schema Diff

+59 -1

From

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

Compare Other Versions

Lexicon Garden

@