com.suibari.nagi.getPreferences

suibari.com

Schema Diff

+131 -1

From

CID
bafyreiabr6sllqx...
Indexed At
2026-08-05 09:00 UTC
View this version

To

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

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
}

Compare Other Versions

Lexicon Garden

@