birdclaw 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +92 -1
  2. package/README.md +75 -5
  3. package/package.json +8 -2
  4. package/scripts/browser-perf.mjs +1 -0
  5. package/scripts/start-test-server.mjs +16 -3
  6. package/src/cli.ts +812 -37
  7. package/src/components/AccountSwitcher.tsx +186 -0
  8. package/src/components/AppNav.tsx +37 -7
  9. package/src/components/AvatarChip.tsx +9 -3
  10. package/src/components/DmWorkspace.tsx +18 -8
  11. package/src/components/LinkPreviewCard.tsx +40 -18
  12. package/src/components/MarkdownViewer.tsx +818 -0
  13. package/src/components/ProfileAnalysisStream.tsx +428 -0
  14. package/src/components/ProfilePreview.tsx +120 -9
  15. package/src/components/SavedTimelineView.tsx +30 -8
  16. package/src/components/SyncNowButton.tsx +60 -25
  17. package/src/components/ThemeSlider.tsx +55 -50
  18. package/src/components/TimelineCard.tsx +240 -92
  19. package/src/components/TimelineRouteFrame.tsx +38 -8
  20. package/src/components/TweetMediaGrid.tsx +87 -38
  21. package/src/components/TweetRichText.tsx +45 -17
  22. package/src/components/account-selection.ts +64 -0
  23. package/src/components/useTimelineRouteData.ts +97 -13
  24. package/src/lib/account-sync-job.ts +666 -0
  25. package/src/lib/actions-transport.ts +216 -146
  26. package/src/lib/api-client.ts +128 -53
  27. package/src/lib/archive-finder.ts +78 -63
  28. package/src/lib/archive-import.ts +1593 -1291
  29. package/src/lib/authored-live.ts +262 -204
  30. package/src/lib/avatar-cache.ts +208 -43
  31. package/src/lib/backup.ts +1536 -954
  32. package/src/lib/bird-actions.ts +139 -57
  33. package/src/lib/bird-command.ts +101 -28
  34. package/src/lib/bird.ts +582 -194
  35. package/src/lib/blocklist.ts +40 -23
  36. package/src/lib/blocks-write.ts +129 -80
  37. package/src/lib/blocks.ts +165 -97
  38. package/src/lib/bookmark-sync-job.ts +250 -160
  39. package/src/lib/config.ts +35 -2
  40. package/src/lib/conversation-surface.ts +79 -48
  41. package/src/lib/data-sources.ts +219 -0
  42. package/src/lib/db.ts +95 -4
  43. package/src/lib/dms-live.ts +720 -66
  44. package/src/lib/effect-runtime.ts +45 -0
  45. package/src/lib/follow-graph.ts +224 -180
  46. package/src/lib/geocoding.ts +296 -0
  47. package/src/lib/http-effect.ts +222 -0
  48. package/src/lib/inbox.ts +74 -43
  49. package/src/lib/link-index.ts +88 -76
  50. package/src/lib/link-insights.ts +24 -0
  51. package/src/lib/link-preview-metadata.ts +472 -52
  52. package/src/lib/location.ts +137 -0
  53. package/src/lib/media-fetch.ts +286 -213
  54. package/src/lib/mention-threads-live.ts +445 -288
  55. package/src/lib/mentions-live.ts +549 -354
  56. package/src/lib/moderation-target.ts +102 -65
  57. package/src/lib/moderation-write.ts +77 -18
  58. package/src/lib/mutes-write.ts +129 -80
  59. package/src/lib/mutes.ts +8 -1
  60. package/src/lib/network-map.ts +382 -0
  61. package/src/lib/openai.ts +84 -53
  62. package/src/lib/period-digest.ts +1317 -0
  63. package/src/lib/profile-affiliation-hydration.ts +93 -54
  64. package/src/lib/profile-analysis.ts +1272 -0
  65. package/src/lib/profile-bio-entities.ts +1 -1
  66. package/src/lib/profile-hydration.ts +124 -72
  67. package/src/lib/profile-replies.ts +60 -43
  68. package/src/lib/profile-resolver.ts +402 -294
  69. package/src/lib/queries.ts +983 -203
  70. package/src/lib/research.ts +165 -120
  71. package/src/lib/search-discussion.ts +1016 -0
  72. package/src/lib/sqlite.ts +1 -0
  73. package/src/lib/timeline-collections-live.ts +204 -167
  74. package/src/lib/timeline-live.ts +325 -51
  75. package/src/lib/tweet-account-edges.ts +2 -0
  76. package/src/lib/tweet-lookup.ts +30 -19
  77. package/src/lib/tweet-render.ts +141 -1
  78. package/src/lib/tweet-search-live.ts +565 -0
  79. package/src/lib/types.ts +75 -3
  80. package/src/lib/ui.ts +31 -8
  81. package/src/lib/url-expansion.ts +226 -55
  82. package/src/lib/url-safety.ts +220 -0
  83. package/src/lib/web-sync.ts +222 -149
  84. package/src/lib/whois.ts +166 -147
  85. package/src/lib/x-web.ts +102 -71
  86. package/src/lib/xurl-rate-limits.ts +267 -0
  87. package/src/lib/xurl.ts +1185 -405
  88. package/src/routeTree.gen.ts +273 -0
  89. package/src/routes/__root.tsx +24 -5
  90. package/src/routes/api/action.tsx +127 -78
  91. package/src/routes/api/avatar.tsx +39 -30
  92. package/src/routes/api/blocks.tsx +26 -23
  93. package/src/routes/api/conversation.tsx +25 -14
  94. package/src/routes/api/data-sources.tsx +24 -0
  95. package/src/routes/api/inbox.tsx +27 -21
  96. package/src/routes/api/link-insights.tsx +31 -25
  97. package/src/routes/api/link-preview.tsx +25 -21
  98. package/src/routes/api/network-map.tsx +55 -0
  99. package/src/routes/api/period-digest.tsx +133 -0
  100. package/src/routes/api/profile-analysis.tsx +152 -0
  101. package/src/routes/api/profile-hydrate.tsx +31 -28
  102. package/src/routes/api/query.tsx +80 -55
  103. package/src/routes/api/search-discussion.tsx +169 -0
  104. package/src/routes/api/status.tsx +18 -10
  105. package/src/routes/api/sync.tsx +75 -29
  106. package/src/routes/api/xurl-rate-limits.tsx +24 -0
  107. package/src/routes/data-sources.tsx +255 -0
  108. package/src/routes/discuss.tsx +419 -0
  109. package/src/routes/dms.tsx +95 -28
  110. package/src/routes/inbox.tsx +32 -19
  111. package/src/routes/network-map.tsx +1035 -0
  112. package/src/routes/profile-analyze.tsx +112 -0
  113. package/src/routes/profiles.$handle.tsx +228 -0
  114. package/src/routes/rate-limits.tsx +309 -0
  115. package/src/routes/today.tsx +455 -0
  116. package/src/styles.css +22 -0
@@ -9,26 +9,59 @@
9
9
  // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
10
 
11
11
  import { Route as rootRouteImport } from './routes/__root'
12
+ import { Route as TodayRouteImport } from './routes/today'
13
+ import { Route as RateLimitsRouteImport } from './routes/rate-limits'
14
+ import { Route as ProfileAnalyzeRouteImport } from './routes/profile-analyze'
15
+ import { Route as NetworkMapRouteImport } from './routes/network-map'
12
16
  import { Route as MentionsRouteImport } from './routes/mentions'
13
17
  import { Route as LinksRouteImport } from './routes/links'
14
18
  import { Route as LikesRouteImport } from './routes/likes'
15
19
  import { Route as InboxRouteImport } from './routes/inbox'
16
20
  import { Route as DmsRouteImport } from './routes/dms'
21
+ import { Route as DiscussRouteImport } from './routes/discuss'
22
+ import { Route as DataSourcesRouteImport } from './routes/data-sources'
17
23
  import { Route as BookmarksRouteImport } from './routes/bookmarks'
18
24
  import { Route as BlocksRouteImport } from './routes/blocks'
19
25
  import { Route as IndexRouteImport } from './routes/index'
26
+ import { Route as ProfilesHandleRouteImport } from './routes/profiles.$handle'
27
+ import { Route as ApiXurlRateLimitsRouteImport } from './routes/api/xurl-rate-limits'
20
28
  import { Route as ApiSyncRouteImport } from './routes/api/sync'
21
29
  import { Route as ApiStatusRouteImport } from './routes/api/status'
30
+ import { Route as ApiSearchDiscussionRouteImport } from './routes/api/search-discussion'
22
31
  import { Route as ApiQueryRouteImport } from './routes/api/query'
23
32
  import { Route as ApiProfileHydrateRouteImport } from './routes/api/profile-hydrate'
33
+ import { Route as ApiProfileAnalysisRouteImport } from './routes/api/profile-analysis'
34
+ import { Route as ApiPeriodDigestRouteImport } from './routes/api/period-digest'
35
+ import { Route as ApiNetworkMapRouteImport } from './routes/api/network-map'
24
36
  import { Route as ApiLinkPreviewRouteImport } from './routes/api/link-preview'
25
37
  import { Route as ApiLinkInsightsRouteImport } from './routes/api/link-insights'
26
38
  import { Route as ApiInboxRouteImport } from './routes/api/inbox'
39
+ import { Route as ApiDataSourcesRouteImport } from './routes/api/data-sources'
27
40
  import { Route as ApiConversationRouteImport } from './routes/api/conversation'
28
41
  import { Route as ApiBlocksRouteImport } from './routes/api/blocks'
29
42
  import { Route as ApiAvatarRouteImport } from './routes/api/avatar'
30
43
  import { Route as ApiActionRouteImport } from './routes/api/action'
31
44
 
45
+ const TodayRoute = TodayRouteImport.update({
46
+ id: '/today',
47
+ path: '/today',
48
+ getParentRoute: () => rootRouteImport,
49
+ } as any)
50
+ const RateLimitsRoute = RateLimitsRouteImport.update({
51
+ id: '/rate-limits',
52
+ path: '/rate-limits',
53
+ getParentRoute: () => rootRouteImport,
54
+ } as any)
55
+ const ProfileAnalyzeRoute = ProfileAnalyzeRouteImport.update({
56
+ id: '/profile-analyze',
57
+ path: '/profile-analyze',
58
+ getParentRoute: () => rootRouteImport,
59
+ } as any)
60
+ const NetworkMapRoute = NetworkMapRouteImport.update({
61
+ id: '/network-map',
62
+ path: '/network-map',
63
+ getParentRoute: () => rootRouteImport,
64
+ } as any)
32
65
  const MentionsRoute = MentionsRouteImport.update({
33
66
  id: '/mentions',
34
67
  path: '/mentions',
@@ -54,6 +87,16 @@ const DmsRoute = DmsRouteImport.update({
54
87
  path: '/dms',
55
88
  getParentRoute: () => rootRouteImport,
56
89
  } as any)
90
+ const DiscussRoute = DiscussRouteImport.update({
91
+ id: '/discuss',
92
+ path: '/discuss',
93
+ getParentRoute: () => rootRouteImport,
94
+ } as any)
95
+ const DataSourcesRoute = DataSourcesRouteImport.update({
96
+ id: '/data-sources',
97
+ path: '/data-sources',
98
+ getParentRoute: () => rootRouteImport,
99
+ } as any)
57
100
  const BookmarksRoute = BookmarksRouteImport.update({
58
101
  id: '/bookmarks',
59
102
  path: '/bookmarks',
@@ -69,6 +112,16 @@ const IndexRoute = IndexRouteImport.update({
69
112
  path: '/',
70
113
  getParentRoute: () => rootRouteImport,
71
114
  } as any)
115
+ const ProfilesHandleRoute = ProfilesHandleRouteImport.update({
116
+ id: '/profiles/$handle',
117
+ path: '/profiles/$handle',
118
+ getParentRoute: () => rootRouteImport,
119
+ } as any)
120
+ const ApiXurlRateLimitsRoute = ApiXurlRateLimitsRouteImport.update({
121
+ id: '/api/xurl-rate-limits',
122
+ path: '/api/xurl-rate-limits',
123
+ getParentRoute: () => rootRouteImport,
124
+ } as any)
72
125
  const ApiSyncRoute = ApiSyncRouteImport.update({
73
126
  id: '/api/sync',
74
127
  path: '/api/sync',
@@ -79,6 +132,11 @@ const ApiStatusRoute = ApiStatusRouteImport.update({
79
132
  path: '/api/status',
80
133
  getParentRoute: () => rootRouteImport,
81
134
  } as any)
135
+ const ApiSearchDiscussionRoute = ApiSearchDiscussionRouteImport.update({
136
+ id: '/api/search-discussion',
137
+ path: '/api/search-discussion',
138
+ getParentRoute: () => rootRouteImport,
139
+ } as any)
82
140
  const ApiQueryRoute = ApiQueryRouteImport.update({
83
141
  id: '/api/query',
84
142
  path: '/api/query',
@@ -89,6 +147,21 @@ const ApiProfileHydrateRoute = ApiProfileHydrateRouteImport.update({
89
147
  path: '/api/profile-hydrate',
90
148
  getParentRoute: () => rootRouteImport,
91
149
  } as any)
150
+ const ApiProfileAnalysisRoute = ApiProfileAnalysisRouteImport.update({
151
+ id: '/api/profile-analysis',
152
+ path: '/api/profile-analysis',
153
+ getParentRoute: () => rootRouteImport,
154
+ } as any)
155
+ const ApiPeriodDigestRoute = ApiPeriodDigestRouteImport.update({
156
+ id: '/api/period-digest',
157
+ path: '/api/period-digest',
158
+ getParentRoute: () => rootRouteImport,
159
+ } as any)
160
+ const ApiNetworkMapRoute = ApiNetworkMapRouteImport.update({
161
+ id: '/api/network-map',
162
+ path: '/api/network-map',
163
+ getParentRoute: () => rootRouteImport,
164
+ } as any)
92
165
  const ApiLinkPreviewRoute = ApiLinkPreviewRouteImport.update({
93
166
  id: '/api/link-preview',
94
167
  path: '/api/link-preview',
@@ -104,6 +177,11 @@ const ApiInboxRoute = ApiInboxRouteImport.update({
104
177
  path: '/api/inbox',
105
178
  getParentRoute: () => rootRouteImport,
106
179
  } as any)
180
+ const ApiDataSourcesRoute = ApiDataSourcesRouteImport.update({
181
+ id: '/api/data-sources',
182
+ path: '/api/data-sources',
183
+ getParentRoute: () => rootRouteImport,
184
+ } as any)
107
185
  const ApiConversationRoute = ApiConversationRouteImport.update({
108
186
  id: '/api/conversation',
109
187
  path: '/api/conversation',
@@ -129,65 +207,104 @@ export interface FileRoutesByFullPath {
129
207
  '/': typeof IndexRoute
130
208
  '/blocks': typeof BlocksRoute
131
209
  '/bookmarks': typeof BookmarksRoute
210
+ '/data-sources': typeof DataSourcesRoute
211
+ '/discuss': typeof DiscussRoute
132
212
  '/dms': typeof DmsRoute
133
213
  '/inbox': typeof InboxRoute
134
214
  '/likes': typeof LikesRoute
135
215
  '/links': typeof LinksRoute
136
216
  '/mentions': typeof MentionsRoute
217
+ '/network-map': typeof NetworkMapRoute
218
+ '/profile-analyze': typeof ProfileAnalyzeRoute
219
+ '/rate-limits': typeof RateLimitsRoute
220
+ '/today': typeof TodayRoute
137
221
  '/api/action': typeof ApiActionRoute
138
222
  '/api/avatar': typeof ApiAvatarRoute
139
223
  '/api/blocks': typeof ApiBlocksRoute
140
224
  '/api/conversation': typeof ApiConversationRoute
225
+ '/api/data-sources': typeof ApiDataSourcesRoute
141
226
  '/api/inbox': typeof ApiInboxRoute
142
227
  '/api/link-insights': typeof ApiLinkInsightsRoute
143
228
  '/api/link-preview': typeof ApiLinkPreviewRoute
229
+ '/api/network-map': typeof ApiNetworkMapRoute
230
+ '/api/period-digest': typeof ApiPeriodDigestRoute
231
+ '/api/profile-analysis': typeof ApiProfileAnalysisRoute
144
232
  '/api/profile-hydrate': typeof ApiProfileHydrateRoute
145
233
  '/api/query': typeof ApiQueryRoute
234
+ '/api/search-discussion': typeof ApiSearchDiscussionRoute
146
235
  '/api/status': typeof ApiStatusRoute
147
236
  '/api/sync': typeof ApiSyncRoute
237
+ '/api/xurl-rate-limits': typeof ApiXurlRateLimitsRoute
238
+ '/profiles/$handle': typeof ProfilesHandleRoute
148
239
  }
149
240
  export interface FileRoutesByTo {
150
241
  '/': typeof IndexRoute
151
242
  '/blocks': typeof BlocksRoute
152
243
  '/bookmarks': typeof BookmarksRoute
244
+ '/data-sources': typeof DataSourcesRoute
245
+ '/discuss': typeof DiscussRoute
153
246
  '/dms': typeof DmsRoute
154
247
  '/inbox': typeof InboxRoute
155
248
  '/likes': typeof LikesRoute
156
249
  '/links': typeof LinksRoute
157
250
  '/mentions': typeof MentionsRoute
251
+ '/network-map': typeof NetworkMapRoute
252
+ '/profile-analyze': typeof ProfileAnalyzeRoute
253
+ '/rate-limits': typeof RateLimitsRoute
254
+ '/today': typeof TodayRoute
158
255
  '/api/action': typeof ApiActionRoute
159
256
  '/api/avatar': typeof ApiAvatarRoute
160
257
  '/api/blocks': typeof ApiBlocksRoute
161
258
  '/api/conversation': typeof ApiConversationRoute
259
+ '/api/data-sources': typeof ApiDataSourcesRoute
162
260
  '/api/inbox': typeof ApiInboxRoute
163
261
  '/api/link-insights': typeof ApiLinkInsightsRoute
164
262
  '/api/link-preview': typeof ApiLinkPreviewRoute
263
+ '/api/network-map': typeof ApiNetworkMapRoute
264
+ '/api/period-digest': typeof ApiPeriodDigestRoute
265
+ '/api/profile-analysis': typeof ApiProfileAnalysisRoute
165
266
  '/api/profile-hydrate': typeof ApiProfileHydrateRoute
166
267
  '/api/query': typeof ApiQueryRoute
268
+ '/api/search-discussion': typeof ApiSearchDiscussionRoute
167
269
  '/api/status': typeof ApiStatusRoute
168
270
  '/api/sync': typeof ApiSyncRoute
271
+ '/api/xurl-rate-limits': typeof ApiXurlRateLimitsRoute
272
+ '/profiles/$handle': typeof ProfilesHandleRoute
169
273
  }
170
274
  export interface FileRoutesById {
171
275
  __root__: typeof rootRouteImport
172
276
  '/': typeof IndexRoute
173
277
  '/blocks': typeof BlocksRoute
174
278
  '/bookmarks': typeof BookmarksRoute
279
+ '/data-sources': typeof DataSourcesRoute
280
+ '/discuss': typeof DiscussRoute
175
281
  '/dms': typeof DmsRoute
176
282
  '/inbox': typeof InboxRoute
177
283
  '/likes': typeof LikesRoute
178
284
  '/links': typeof LinksRoute
179
285
  '/mentions': typeof MentionsRoute
286
+ '/network-map': typeof NetworkMapRoute
287
+ '/profile-analyze': typeof ProfileAnalyzeRoute
288
+ '/rate-limits': typeof RateLimitsRoute
289
+ '/today': typeof TodayRoute
180
290
  '/api/action': typeof ApiActionRoute
181
291
  '/api/avatar': typeof ApiAvatarRoute
182
292
  '/api/blocks': typeof ApiBlocksRoute
183
293
  '/api/conversation': typeof ApiConversationRoute
294
+ '/api/data-sources': typeof ApiDataSourcesRoute
184
295
  '/api/inbox': typeof ApiInboxRoute
185
296
  '/api/link-insights': typeof ApiLinkInsightsRoute
186
297
  '/api/link-preview': typeof ApiLinkPreviewRoute
298
+ '/api/network-map': typeof ApiNetworkMapRoute
299
+ '/api/period-digest': typeof ApiPeriodDigestRoute
300
+ '/api/profile-analysis': typeof ApiProfileAnalysisRoute
187
301
  '/api/profile-hydrate': typeof ApiProfileHydrateRoute
188
302
  '/api/query': typeof ApiQueryRoute
303
+ '/api/search-discussion': typeof ApiSearchDiscussionRoute
189
304
  '/api/status': typeof ApiStatusRoute
190
305
  '/api/sync': typeof ApiSyncRoute
306
+ '/api/xurl-rate-limits': typeof ApiXurlRateLimitsRoute
307
+ '/profiles/$handle': typeof ProfilesHandleRoute
191
308
  }
192
309
  export interface FileRouteTypes {
193
310
  fileRoutesByFullPath: FileRoutesByFullPath
@@ -195,90 +312,170 @@ export interface FileRouteTypes {
195
312
  | '/'
196
313
  | '/blocks'
197
314
  | '/bookmarks'
315
+ | '/data-sources'
316
+ | '/discuss'
198
317
  | '/dms'
199
318
  | '/inbox'
200
319
  | '/likes'
201
320
  | '/links'
202
321
  | '/mentions'
322
+ | '/network-map'
323
+ | '/profile-analyze'
324
+ | '/rate-limits'
325
+ | '/today'
203
326
  | '/api/action'
204
327
  | '/api/avatar'
205
328
  | '/api/blocks'
206
329
  | '/api/conversation'
330
+ | '/api/data-sources'
207
331
  | '/api/inbox'
208
332
  | '/api/link-insights'
209
333
  | '/api/link-preview'
334
+ | '/api/network-map'
335
+ | '/api/period-digest'
336
+ | '/api/profile-analysis'
210
337
  | '/api/profile-hydrate'
211
338
  | '/api/query'
339
+ | '/api/search-discussion'
212
340
  | '/api/status'
213
341
  | '/api/sync'
342
+ | '/api/xurl-rate-limits'
343
+ | '/profiles/$handle'
214
344
  fileRoutesByTo: FileRoutesByTo
215
345
  to:
216
346
  | '/'
217
347
  | '/blocks'
218
348
  | '/bookmarks'
349
+ | '/data-sources'
350
+ | '/discuss'
219
351
  | '/dms'
220
352
  | '/inbox'
221
353
  | '/likes'
222
354
  | '/links'
223
355
  | '/mentions'
356
+ | '/network-map'
357
+ | '/profile-analyze'
358
+ | '/rate-limits'
359
+ | '/today'
224
360
  | '/api/action'
225
361
  | '/api/avatar'
226
362
  | '/api/blocks'
227
363
  | '/api/conversation'
364
+ | '/api/data-sources'
228
365
  | '/api/inbox'
229
366
  | '/api/link-insights'
230
367
  | '/api/link-preview'
368
+ | '/api/network-map'
369
+ | '/api/period-digest'
370
+ | '/api/profile-analysis'
231
371
  | '/api/profile-hydrate'
232
372
  | '/api/query'
373
+ | '/api/search-discussion'
233
374
  | '/api/status'
234
375
  | '/api/sync'
376
+ | '/api/xurl-rate-limits'
377
+ | '/profiles/$handle'
235
378
  id:
236
379
  | '__root__'
237
380
  | '/'
238
381
  | '/blocks'
239
382
  | '/bookmarks'
383
+ | '/data-sources'
384
+ | '/discuss'
240
385
  | '/dms'
241
386
  | '/inbox'
242
387
  | '/likes'
243
388
  | '/links'
244
389
  | '/mentions'
390
+ | '/network-map'
391
+ | '/profile-analyze'
392
+ | '/rate-limits'
393
+ | '/today'
245
394
  | '/api/action'
246
395
  | '/api/avatar'
247
396
  | '/api/blocks'
248
397
  | '/api/conversation'
398
+ | '/api/data-sources'
249
399
  | '/api/inbox'
250
400
  | '/api/link-insights'
251
401
  | '/api/link-preview'
402
+ | '/api/network-map'
403
+ | '/api/period-digest'
404
+ | '/api/profile-analysis'
252
405
  | '/api/profile-hydrate'
253
406
  | '/api/query'
407
+ | '/api/search-discussion'
254
408
  | '/api/status'
255
409
  | '/api/sync'
410
+ | '/api/xurl-rate-limits'
411
+ | '/profiles/$handle'
256
412
  fileRoutesById: FileRoutesById
257
413
  }
258
414
  export interface RootRouteChildren {
259
415
  IndexRoute: typeof IndexRoute
260
416
  BlocksRoute: typeof BlocksRoute
261
417
  BookmarksRoute: typeof BookmarksRoute
418
+ DataSourcesRoute: typeof DataSourcesRoute
419
+ DiscussRoute: typeof DiscussRoute
262
420
  DmsRoute: typeof DmsRoute
263
421
  InboxRoute: typeof InboxRoute
264
422
  LikesRoute: typeof LikesRoute
265
423
  LinksRoute: typeof LinksRoute
266
424
  MentionsRoute: typeof MentionsRoute
425
+ NetworkMapRoute: typeof NetworkMapRoute
426
+ ProfileAnalyzeRoute: typeof ProfileAnalyzeRoute
427
+ RateLimitsRoute: typeof RateLimitsRoute
428
+ TodayRoute: typeof TodayRoute
267
429
  ApiActionRoute: typeof ApiActionRoute
268
430
  ApiAvatarRoute: typeof ApiAvatarRoute
269
431
  ApiBlocksRoute: typeof ApiBlocksRoute
270
432
  ApiConversationRoute: typeof ApiConversationRoute
433
+ ApiDataSourcesRoute: typeof ApiDataSourcesRoute
271
434
  ApiInboxRoute: typeof ApiInboxRoute
272
435
  ApiLinkInsightsRoute: typeof ApiLinkInsightsRoute
273
436
  ApiLinkPreviewRoute: typeof ApiLinkPreviewRoute
437
+ ApiNetworkMapRoute: typeof ApiNetworkMapRoute
438
+ ApiPeriodDigestRoute: typeof ApiPeriodDigestRoute
439
+ ApiProfileAnalysisRoute: typeof ApiProfileAnalysisRoute
274
440
  ApiProfileHydrateRoute: typeof ApiProfileHydrateRoute
275
441
  ApiQueryRoute: typeof ApiQueryRoute
442
+ ApiSearchDiscussionRoute: typeof ApiSearchDiscussionRoute
276
443
  ApiStatusRoute: typeof ApiStatusRoute
277
444
  ApiSyncRoute: typeof ApiSyncRoute
445
+ ApiXurlRateLimitsRoute: typeof ApiXurlRateLimitsRoute
446
+ ProfilesHandleRoute: typeof ProfilesHandleRoute
278
447
  }
279
448
 
280
449
  declare module '@tanstack/react-router' {
281
450
  interface FileRoutesByPath {
451
+ '/today': {
452
+ id: '/today'
453
+ path: '/today'
454
+ fullPath: '/today'
455
+ preLoaderRoute: typeof TodayRouteImport
456
+ parentRoute: typeof rootRouteImport
457
+ }
458
+ '/rate-limits': {
459
+ id: '/rate-limits'
460
+ path: '/rate-limits'
461
+ fullPath: '/rate-limits'
462
+ preLoaderRoute: typeof RateLimitsRouteImport
463
+ parentRoute: typeof rootRouteImport
464
+ }
465
+ '/profile-analyze': {
466
+ id: '/profile-analyze'
467
+ path: '/profile-analyze'
468
+ fullPath: '/profile-analyze'
469
+ preLoaderRoute: typeof ProfileAnalyzeRouteImport
470
+ parentRoute: typeof rootRouteImport
471
+ }
472
+ '/network-map': {
473
+ id: '/network-map'
474
+ path: '/network-map'
475
+ fullPath: '/network-map'
476
+ preLoaderRoute: typeof NetworkMapRouteImport
477
+ parentRoute: typeof rootRouteImport
478
+ }
282
479
  '/mentions': {
283
480
  id: '/mentions'
284
481
  path: '/mentions'
@@ -314,6 +511,20 @@ declare module '@tanstack/react-router' {
314
511
  preLoaderRoute: typeof DmsRouteImport
315
512
  parentRoute: typeof rootRouteImport
316
513
  }
514
+ '/discuss': {
515
+ id: '/discuss'
516
+ path: '/discuss'
517
+ fullPath: '/discuss'
518
+ preLoaderRoute: typeof DiscussRouteImport
519
+ parentRoute: typeof rootRouteImport
520
+ }
521
+ '/data-sources': {
522
+ id: '/data-sources'
523
+ path: '/data-sources'
524
+ fullPath: '/data-sources'
525
+ preLoaderRoute: typeof DataSourcesRouteImport
526
+ parentRoute: typeof rootRouteImport
527
+ }
317
528
  '/bookmarks': {
318
529
  id: '/bookmarks'
319
530
  path: '/bookmarks'
@@ -335,6 +546,20 @@ declare module '@tanstack/react-router' {
335
546
  preLoaderRoute: typeof IndexRouteImport
336
547
  parentRoute: typeof rootRouteImport
337
548
  }
549
+ '/profiles/$handle': {
550
+ id: '/profiles/$handle'
551
+ path: '/profiles/$handle'
552
+ fullPath: '/profiles/$handle'
553
+ preLoaderRoute: typeof ProfilesHandleRouteImport
554
+ parentRoute: typeof rootRouteImport
555
+ }
556
+ '/api/xurl-rate-limits': {
557
+ id: '/api/xurl-rate-limits'
558
+ path: '/api/xurl-rate-limits'
559
+ fullPath: '/api/xurl-rate-limits'
560
+ preLoaderRoute: typeof ApiXurlRateLimitsRouteImport
561
+ parentRoute: typeof rootRouteImport
562
+ }
338
563
  '/api/sync': {
339
564
  id: '/api/sync'
340
565
  path: '/api/sync'
@@ -349,6 +574,13 @@ declare module '@tanstack/react-router' {
349
574
  preLoaderRoute: typeof ApiStatusRouteImport
350
575
  parentRoute: typeof rootRouteImport
351
576
  }
577
+ '/api/search-discussion': {
578
+ id: '/api/search-discussion'
579
+ path: '/api/search-discussion'
580
+ fullPath: '/api/search-discussion'
581
+ preLoaderRoute: typeof ApiSearchDiscussionRouteImport
582
+ parentRoute: typeof rootRouteImport
583
+ }
352
584
  '/api/query': {
353
585
  id: '/api/query'
354
586
  path: '/api/query'
@@ -363,6 +595,27 @@ declare module '@tanstack/react-router' {
363
595
  preLoaderRoute: typeof ApiProfileHydrateRouteImport
364
596
  parentRoute: typeof rootRouteImport
365
597
  }
598
+ '/api/profile-analysis': {
599
+ id: '/api/profile-analysis'
600
+ path: '/api/profile-analysis'
601
+ fullPath: '/api/profile-analysis'
602
+ preLoaderRoute: typeof ApiProfileAnalysisRouteImport
603
+ parentRoute: typeof rootRouteImport
604
+ }
605
+ '/api/period-digest': {
606
+ id: '/api/period-digest'
607
+ path: '/api/period-digest'
608
+ fullPath: '/api/period-digest'
609
+ preLoaderRoute: typeof ApiPeriodDigestRouteImport
610
+ parentRoute: typeof rootRouteImport
611
+ }
612
+ '/api/network-map': {
613
+ id: '/api/network-map'
614
+ path: '/api/network-map'
615
+ fullPath: '/api/network-map'
616
+ preLoaderRoute: typeof ApiNetworkMapRouteImport
617
+ parentRoute: typeof rootRouteImport
618
+ }
366
619
  '/api/link-preview': {
367
620
  id: '/api/link-preview'
368
621
  path: '/api/link-preview'
@@ -384,6 +637,13 @@ declare module '@tanstack/react-router' {
384
637
  preLoaderRoute: typeof ApiInboxRouteImport
385
638
  parentRoute: typeof rootRouteImport
386
639
  }
640
+ '/api/data-sources': {
641
+ id: '/api/data-sources'
642
+ path: '/api/data-sources'
643
+ fullPath: '/api/data-sources'
644
+ preLoaderRoute: typeof ApiDataSourcesRouteImport
645
+ parentRoute: typeof rootRouteImport
646
+ }
387
647
  '/api/conversation': {
388
648
  id: '/api/conversation'
389
649
  path: '/api/conversation'
@@ -419,22 +679,35 @@ const rootRouteChildren: RootRouteChildren = {
419
679
  IndexRoute: IndexRoute,
420
680
  BlocksRoute: BlocksRoute,
421
681
  BookmarksRoute: BookmarksRoute,
682
+ DataSourcesRoute: DataSourcesRoute,
683
+ DiscussRoute: DiscussRoute,
422
684
  DmsRoute: DmsRoute,
423
685
  InboxRoute: InboxRoute,
424
686
  LikesRoute: LikesRoute,
425
687
  LinksRoute: LinksRoute,
426
688
  MentionsRoute: MentionsRoute,
689
+ NetworkMapRoute: NetworkMapRoute,
690
+ ProfileAnalyzeRoute: ProfileAnalyzeRoute,
691
+ RateLimitsRoute: RateLimitsRoute,
692
+ TodayRoute: TodayRoute,
427
693
  ApiActionRoute: ApiActionRoute,
428
694
  ApiAvatarRoute: ApiAvatarRoute,
429
695
  ApiBlocksRoute: ApiBlocksRoute,
430
696
  ApiConversationRoute: ApiConversationRoute,
697
+ ApiDataSourcesRoute: ApiDataSourcesRoute,
431
698
  ApiInboxRoute: ApiInboxRoute,
432
699
  ApiLinkInsightsRoute: ApiLinkInsightsRoute,
433
700
  ApiLinkPreviewRoute: ApiLinkPreviewRoute,
701
+ ApiNetworkMapRoute: ApiNetworkMapRoute,
702
+ ApiPeriodDigestRoute: ApiPeriodDigestRoute,
703
+ ApiProfileAnalysisRoute: ApiProfileAnalysisRoute,
434
704
  ApiProfileHydrateRoute: ApiProfileHydrateRoute,
435
705
  ApiQueryRoute: ApiQueryRoute,
706
+ ApiSearchDiscussionRoute: ApiSearchDiscussionRoute,
436
707
  ApiStatusRoute: ApiStatusRoute,
437
708
  ApiSyncRoute: ApiSyncRoute,
709
+ ApiXurlRateLimitsRoute: ApiXurlRateLimitsRoute,
710
+ ProfilesHandleRoute: ProfilesHandleRoute,
438
711
  }
439
712
  export const routeTree = rootRouteImport
440
713
  ._addFileChildren(rootRouteChildren)
@@ -1,10 +1,21 @@
1
1
  import { TanStackDevtools } from "@tanstack/react-devtools";
2
- import { createRootRoute, HeadContent, Scripts } from "@tanstack/react-router";
2
+ import {
3
+ createRootRoute,
4
+ HeadContent,
5
+ Scripts,
6
+ useRouterState,
7
+ } from "@tanstack/react-router";
3
8
  import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools";
4
9
  import type { ReactNode } from "react";
5
10
  import { AppNav } from "#/components/AppNav";
6
11
  import { ThemeProvider, themeScript } from "#/lib/theme";
7
- import { bodyClass, mainColumnClass, siteShellClass } from "#/lib/ui";
12
+ import {
13
+ bodyClass,
14
+ mainColumnClass,
15
+ mainColumnDmClass,
16
+ siteShellClass,
17
+ siteShellDmClass,
18
+ } from "#/lib/ui";
8
19
 
9
20
  import appCss from "../styles.css?url";
10
21
 
@@ -42,6 +53,12 @@ function NotFoundView() {
42
53
  }
43
54
 
44
55
  function RootDocument({ children }: { children: ReactNode }) {
56
+ const pathname = useRouterState({
57
+ select: (state) => state.location.pathname,
58
+ });
59
+ const wideMode =
60
+ pathname.startsWith("/dms") || pathname.startsWith("/network-map");
61
+
45
62
  return (
46
63
  <html lang="en" suppressHydrationWarning>
47
64
  <head>
@@ -50,9 +67,11 @@ function RootDocument({ children }: { children: ReactNode }) {
50
67
  </head>
51
68
  <body className={bodyClass}>
52
69
  <ThemeProvider>
53
- <div className={siteShellClass}>
54
- <AppNav />
55
- <main className={mainColumnClass}>{children}</main>
70
+ <div className={wideMode ? siteShellDmClass : siteShellClass}>
71
+ <AppNav compact={wideMode} />
72
+ <main className={wideMode ? mainColumnDmClass : mainColumnClass}>
73
+ {children}
74
+ </main>
56
75
  </div>
57
76
  </ThemeProvider>
58
77
  <TanStackDevtools