-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.graphql
More file actions
2374 lines (1768 loc) · 55.2 KB
/
Copy pathschema.graphql
File metadata and controls
2374 lines (1768 loc) · 55.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
"""Requires the current user to hold at least the selected role"""
directive @auth(
"""Minimum role required to access the field or object"""
requires: Role = READ_ONLY
) on FIELD_DEFINITION | OBJECT
directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA
directive @key(fields: _FieldSet!, resolvable: Boolean = true) repeatable on OBJECT | INTERFACE
directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
directive @external(reason: String) on OBJECT | FIELD_DEFINITION
directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
directive @extends on OBJECT | INTERFACE
"""
Non-negative safe integer timestamp in milliseconds since the Unix epoch
"""
scalar TimestampMilliseconds
"""
Non-negative safe integer timestamp in microseconds since the Unix epoch
"""
scalar TimestampMicroseconds
"""Root query type - extended by domain-specific schemas"""
type Query {
"""Basic health check query"""
hello: String
_entities(representations: [_Any!]!): [_Entity]!
_service: _Service!
"""Retrieve RSS feed items from a specific stream with optional filtering"""
getRssStreamContents(
"""Stream ID (defaults to reading list - all subscribed feeds)"""
streamId: String = "user/-/state/com.google/reading-list"
"""Filtering and pagination options"""
options: StreamContentsOptions
"""Number of similar items to find (defaults to 5)"""
similarCount: Int = 5
"""Minimum similarity score threshold for similar items (0.0 to 1.0)"""
minScore: Float
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): StreamContents!
"""Retrieve RSS feed items content by IDs for similarity search"""
getRssStreamItemsContent(
"""Item IDs to retrieve content for"""
ids: [String!]!
"""Number of similar items to find (defaults to 10)"""
similarCount: Int = 10
"""Minimum similarity score threshold for similar items (0.0 to 1.0)"""
minScore: Float
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): StreamContents!
"""Retrieve RSS feed item content by single ID for similarity search"""
getRssStreamItemContent(
"""Item ID to retrieve content for"""
id: String!
"""Number of similar items to find (defaults to 10)"""
similarCount: Int = 10
"""Minimum similarity score threshold for similar items (0.0 to 1.0)"""
minScore: Float
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): FeedItem!
"""Retrieve the complete list of RSS feed subscriptions"""
getRssSubscriptionList(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): FeedSubscriptionList!
"""
Retrieve the complete list of RSS tags/categories with associated subscriptions
"""
getRssTagList(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): TagList!
"""Retrieve a single RSS tag/category by ID"""
getRssTag(
"""Tag ID to retrieve"""
id: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): TagItem
"""Retrieve unread counts for all feeds, folders, and states"""
getRssUnreadCounts(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): UnreadCountList!
"""Retrieve all posts (both published and unpublished)"""
posts: [Post!]!
"""Retrieve a specific post by ID"""
post(
"""Unique identifier of the post to retrieve"""
id: String!
): Post
"""Retrieve all FreshRSS servers with optional filtering"""
getFreshRssServers(
"""Optional filter parameters"""
filter: GetFreshRssServersInput
): [FreshRssServer!]!
"""Retrieve all Ollama servers"""
getOllamaServers: [OllamaServer!]!
"""Retrieve a specific Ollama server by ID"""
getOllamaServer(
"""Unique identifier of the Ollama server to retrieve"""
id: ID!
): OllamaServer
"""Generate a test embedding using the specified Ollama server"""
testOllamaEmbedding(
"""Text to generate embeddings for"""
text: String!
"""Ollama server ID to use for the request"""
serverId: ID!
"""Model to use (defaults to the server's configured model)"""
model: String
): OllamaEmbeddingTestResult!
"""Retrieve all Qdrant servers"""
getQdrantServers: [QdrantServer!]!
"""Retrieve a specific Qdrant server by ID"""
getQdrantServer(
"""Unique identifier of the Qdrant server to retrieve"""
id: ID!
): QdrantServer
"""Generate vector embeddings for the provided text"""
getEmbeddings(
"""Text to generate embeddings for"""
text: String!
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): [Float!]!
"""Search for documents similar to the query text (general search)"""
searchSimilar(
"""Search query text to find similar content"""
query: String!
"""Maximum number of results to return"""
limit: Int
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): [SearchResult!]!
"""
Search for RSS feed items similar to the query text (feed-specific search)
"""
searchSimilarFeedItems(
"""Search query text to find similar feed items"""
query: String!
"""Maximum number of results to return"""
limit: Int
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): [FeedItemSearchResult!]!
"""
Search for RSS feed items similar to the item with the given ID (feed-specific search by ID)
"""
searchSimilarFeedItemsById(
"""Feed item ID to find similar items for"""
id: String!
"""Maximum number of results to return"""
limit: Int
"""
Minimum similarity score threshold (0.0-1.0, omit to return all results)
"""
minScore: Float
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): [FeedItemSearchResult!]!
"""Scroll through vector points in a collection with pagination"""
scrollPoints(
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
"""Maximum number of points to return per page"""
limit: Int = 20
"""Offset for pagination (from previous scroll result)"""
offset: String
): ScrollPointsResult!
"""Retrieve a specific vector point by ID"""
getPoint(
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
"""ID of the point to retrieve"""
pointId: String!
): QdrantPoint
"""Search vector points by ID or title"""
searchPoints(
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
"""Search term to match against point ID or title"""
searchTerm: String!
"""Maximum number of results to return"""
limit: Int = 20
): SearchPointsResult!
"""Get the current status of the RSS feed processor"""
getRssProcessorStatus(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): RssProcessorStatus!
"""Check if the system requires initial setup"""
getSetupStatus: SetupStatus!
"""Get grouping settings for a folder"""
getFolderGroupingSettings(
"""Unique identifier of the folder"""
folderId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): FolderGroupingSettings!
"""Get all article groups for a folder"""
getArticleGroups(
"""Unique identifier of the folder"""
folderId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
"""Maximum number of groups to return"""
limit: Int! = 50
"""Number of groups to skip for offset pagination"""
offset: Int! = 0
"""Sort option for the groups"""
sortBy: ArticleGroupSortBy! = DATE_DESC
): [ArticleGroup!]!
"""Get all article groups across all folders"""
getAllArticleGroups(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
"""Maximum number of groups to return"""
limit: Int! = 50
"""Number of groups to skip for offset pagination"""
offset: Int! = 0
"""Sort option for the groups"""
sortBy: ArticleGroupSortBy! = DATE_DESC
): [ArticleGroup!]!
"""Get the Atom feed URL for a folder's grouped articles"""
getGroupedFeedUrl(
"""Unique identifier of the folder"""
folderId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): String!
"""Get a specific article group by ID"""
getArticleGroup(
"""Unique identifier of the article group"""
groupId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): ArticleGroup
"""Get similar-article match statistics grouped by UTC publication day"""
getSimilarityStatistics(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
"""Optional folder ID; omit to aggregate all folders"""
folderId: String
"""Optional inclusive UTC start date in YYYY-MM-DD format"""
startDate: String
"""
Optional inclusive UTC end date in YYYY-MM-DD format; defaults to today
"""
endDate: String
): SimilarityStatistics!
"""Retrieve all users in the system (admin only)"""
users: [User!]!
"""Retrieve a specific user by ID (admin only)"""
user(
"""Unique identifier of the user to retrieve"""
id: String!
): User
"""
Access protected data to test authentication (requires regular user or above)
"""
protectedData: ProtectedDataResult!
"""Retrieve the current authenticated user's information"""
me: User
}
"""Root mutation type - extended by domain-specific schemas"""
type Mutation {
"""Empty field to ensure valid GraphQL schema"""
_empty: String
"""Apply one or more FreshRSS tags to an item"""
setRssItemTags(
"""FreshRSS item identifier"""
itemId: String!
"""Tag identifiers to apply"""
tags: [String!]!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): SetRssItemTagsResult!
"""Remove one or more FreshRSS tags from an item"""
removeRssItemTags(
"""FreshRSS item identifier"""
itemId: String!
"""Tag identifiers to remove"""
tags: [String!]!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): RemoveRssItemTagsResult!
"""
Set a subscription's longest-article priority (0-1000). Recomputes the main article for the subscription's existing groups.
"""
setSubscriptionPriority(
"""FreshRSS subscription id (feed id)"""
feedId: String!
"""Priority value, 0-1000 (higher wins; 0 is the default/lowest)"""
priority: Int!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): SetSubscriptionPriorityResult!
"""Create a new post"""
createPost(
"""Post creation input data"""
input: CreatePostInput!
): Post!
"""Update an existing post"""
updatePost(
"""Unique identifier of the post to update"""
id: String!
"""Post update input data"""
input: UpdatePostInput!
): Post!
"""Delete a post permanently"""
deletePost(
"""Unique identifier of the post to delete"""
id: String!
): Post!
"""Set processing setting for an RSS tag folder"""
setRssTagProcessing(
"""Unique identifier of the folder tag"""
id: String!
"""Processing setting to apply"""
processingSetting: ProcessingSetting!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): SetRssTagProcessingResult!
"""Create a new FreshRSS server"""
createFreshRssServer(
"""FreshRSS server creation input data"""
input: CreateFreshRssServerInput!
): FreshRssServer!
"""Update an existing FreshRSS server"""
updateFreshRssServer(
"""Unique identifier of the server to update"""
id: String!
"""FreshRSS server update input data"""
input: UpdateFreshRssServerInput!
): FreshRssServer!
"""Delete a FreshRSS server permanently"""
deleteFreshRssServer(
"""Unique identifier of the server to delete"""
id: String!
): FreshRssServer!
"""Create a new Ollama server"""
createOllamaServer(
"""Ollama server creation input data"""
input: CreateOllamaServerInput!
): OllamaServer!
"""Update an existing Ollama server"""
updateOllamaServer(
"""Unique identifier of the server to update"""
id: String!
"""Ollama server update input data"""
input: UpdateOllamaServerInput!
): OllamaServer!
"""Delete an Ollama server permanently"""
deleteOllamaServer(
"""Unique identifier of the server to delete"""
id: String!
): OllamaServer!
"""Create a new Qdrant server"""
createQdrantServer(
"""Qdrant server creation input data"""
input: CreateQdrantServerInput!
): QdrantServer!
"""Update an existing Qdrant server"""
updateQdrantServer(
"""Unique identifier of the server to update"""
id: String!
"""Qdrant server update input data"""
input: UpdateQdrantServerInput!
): QdrantServer!
"""Delete a Qdrant server permanently"""
deleteQdrantServer(
"""Unique identifier of the server to delete"""
id: String!
): QdrantServer!
"""Add a document to the vector database with optional metadata"""
addDocument(
"""Document content to be indexed"""
content: String!
"""JSON metadata associated with the document"""
metadata: String
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): Boolean!
"""Delete specific vector points by their IDs"""
deletePoints(
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
"""Array of point IDs to delete"""
pointIds: [String!]!
): Boolean!
"""Clear all vector points from a collection"""
clearCollection(
"""
Qdrant server ID to use for the request (defaults to environment server)
"""
serverId: String = "environment"
): Boolean!
"""Manually trigger RSS feed processing for all subscriptions"""
processRssFeeds(
"""
Whether to perform a full refresh, ignoring processed tags (defaults to false)
"""
fullRefresh: Boolean = false
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): ProcessRssFeedsResult!
"""Cancel currently running RSS feed processing"""
cancelRssProcessing(
"""Server ID to use for the request (defaults to environment server)"""
serverId: String = "environment"
): CancelRssProcessingResult!
"""Create the first administrator user (only allowed when no users exist)"""
createFirstAdminUser(
"""Administrator account details"""
input: CreateFirstAdminUserInput!
): CreateFirstAdminUserResult!
"""Update grouping settings for a folder"""
updateFolderGroupingSettings(
"""Unique identifier of the folder"""
folderId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
"""Minimum cosine similarity threshold (0.0-1.0)"""
similarityThreshold: Float
"""Time window in hours to look for similar articles"""
timeWindowHours: Int
"""Delay in minutes before publishing to allow grouping"""
publishDelayMinutes: Int
"""Maximum article age in days for reprocessing (1-3650; null = no limit)"""
lookbackDays: Int
): FolderGroupingSettings!
"""Manually trigger similarity grouping for one or all folders"""
triggerSimilarityGrouping(
"""
Optional: specific folder to process (all SIMILARITY_GROUPING folders if omitted)
"""
folderId: String
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): GroupingResult!
"""Clear all article groups for a folder and reprocess from scratch"""
clearAndReprocessFolder(
"""Unique identifier of the folder"""
folderId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): GroupingResult!
"""Remove an article from a group (makes it a standalone entry)"""
removeArticleFromGroup(
"""Unique identifier of the article group"""
groupId: String!
"""Qdrant document ID of the article to remove"""
itemId: String!
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): Boolean!
"""Clean up expired article groups (older than timeWindowHours * 2)"""
cleanupExpiredArticleGroups(
"""
Optional: specific folder to clean up (all SIMILARITY_GROUPING folders if omitted)
"""
folderId: String
"""Server ID to use for the request (defaults to environment server)"""
serverId: String! = "environment"
): CleanupResult!
"""Create a new user account (admin only)"""
createUser(
"""New user account details"""
input: CreateUserInput!
): CreateUserResult!
"""Update a user's role (admin only)"""
updateUserRole(
"""Target user and replacement role"""
input: UpdateUserRoleInput!
): UpdateUserRoleResult!
"""Delete a user account (admin only)"""
deleteUser(
"""Unique identifier of the user to delete"""
userId: String!
): DeleteUserResult!
"""Update the current authenticated user's profile"""
updateMe(
"""Profile fields to update"""
input: UpdateMeInput!
): User
}
"""
Feed enclosure representing attached media files (images, audio, video)
"""
type FeedEnclosure {
"""URL of the enclosure file"""
href: String!
"""MIME type of the enclosure (e.g., image/jpeg, audio/mp3)"""
type: String!
"""Size of the enclosure file in bytes (optional)"""
length: Int
}
"""Feed item summary/description content"""
type FeedSummary {
"""HTML or plain text content of the feed item summary"""
content: String!
}
"""Origin information about the RSS feed source"""
type FeedOrigin {
"""Stream ID identifying the feed in Fresh RSS"""
streamId: String!
"""HTML URL of the original website/blog"""
htmlUrl: String!
"""Display title of the RSS feed"""
title: String!
}
"""Canonical link information for feed items"""
type FeedCanonical {
"""Canonical URL of the feed item"""
href: String!
}
"""Individual RSS feed item with complete metadata"""
type FeedItem {
"""Unique identifier for the feed item"""
id: String!
"""Crawl timestamp in milliseconds from Fresh RSS"""
crawlTimeMsec: TimestampMilliseconds!
"""Timestamp in microseconds (Google Reader format)"""
timestampUsec: TimestampMicroseconds!
"""Publication timestamp (Unix timestamp)"""
published: Int!
"""Title of the feed item"""
title: String!
"""Canonical links for the feed item"""
canonical: [FeedCanonical!]
"""Alternative links for the feed item"""
alternate: [FeedCanonical!]
"""Categories/tags assigned to the feed item"""
categories: [String!]!
"""Information about the feed source"""
origin: FeedOrigin!
"""Summary/description of the feed item (optional)"""
summary: FeedSummary
"""Author of the feed item (optional)"""
author: String
"""Media enclosures attached to the feed item"""
enclosure: [FeedEnclosure!]
"""Similar content found for this feed item"""
similarContent: [FeedItemSearchResult!]
}
"""Container for a stream of feed items with pagination support"""
type StreamContents {
"""Stream identifier"""
id: String!
"""Last update timestamp (Unix timestamp)"""
updated: Int!
"""List of feed items in the stream"""
items: [FeedItem!]!
"""Continuation token for pagination (optional)"""
continuation: String
}
"""Options for filtering and paginating RSS stream contents"""
input StreamContentsOptions {
"""Maximum number of feed items to return (pagination)"""
count: Int
"""Continuation token for fetching next page of results"""
continuation: String
"""Return only items newer than this timestamp (Unix timestamp)"""
newerThan: Int
"""Return only items older than this timestamp (Unix timestamp)"""
olderThan: Int
"""Whether to exclude items that have been marked as read"""
excludeRead: Boolean
}
"""Result of applying tags to a FreshRSS item"""
type SetRssItemTagsResult {
"""Whether every requested tag was applied"""
success: Boolean!
"""Human-readable outcome"""
message: String!
"""Failure detail when the operation did not succeed"""
error: String
}
"""Result of removing tags from a FreshRSS item"""
type RemoveRssItemTagsResult {
"""Whether every requested tag was removed"""
success: Boolean!
"""Human-readable outcome"""
message: String!
"""Failure detail when the operation did not succeed"""
error: String
}
"""Result of changing a subscription's longest-article priority"""
type SetSubscriptionPriorityResult {
"""Whether the priority was saved and affected groups were updated"""
success: Boolean!
"""FreshRSS subscription identifier"""
feedId: String!
"""Saved priority value"""
priority: Int!
"""Human-readable outcome when available"""
message: String
"""Failure detail when the operation did not succeed"""
error: String
}
"""RSS feed subscription with metadata and categorization"""
type FeedSubscription {
"""Unique identifier for the subscription"""
id: String!
"""Display title of the RSS feed"""
title: String!
"""Categories assigned to this subscription"""
categories: [TagItem!]!
"""RSS feed URL"""
url: String!
"""HTML URL of the source website"""
htmlUrl: String!
"""URL of the feed's icon/favicon"""
iconUrl: String!
"""Number of unread items in this subscription"""
count: Int!
"""Timestamp of the newest item in microseconds"""
newestItemTimestampUsec: TimestampMicroseconds
"""
Priority used to bias longest-article selection in grouped feeds (0-1000, higher wins; default 0)
"""
priority: Int!
}
"""Container for all RSS feed subscriptions"""
type FeedSubscriptionList {
"""List of all RSS feed subscriptions"""
subscriptions: [FeedSubscription!]!
}
"""Folder/label unread count information"""
type FolderUnreadCount {
"""Unique identifier for the folder/label"""
id: String!
"""Number of unread items in this folder"""
count: Int!
"""Timestamp of the newest item in microseconds"""
newestItemTimestampUsec: TimestampMicroseconds
}
"""Special state unread count information (starred, reading-list, etc.)"""
type StateUnreadCount {
"""Unique identifier for the state"""
id: String!
"""Number of unread items in this state"""
count: Int!
"""Timestamp of the newest item in microseconds"""
newestItemTimestampUsec: TimestampMicroseconds
}
"""Union type for different unread count items"""
union UnreadCountItem = FeedSubscription | FolderUnreadCount | StateUnreadCount
"""Container for all unread count information"""
type UnreadCountList {
"""Maximum number of unread items across all feeds"""
max: Int!
"""List of unread count items (feeds, folders, states)"""
unreadcounts: [UnreadCountItem!]!
}
"""Type of RSS tag/category"""
enum TagType {
"""Folder type for organizing subscriptions"""
FOLDER
"""Tag type for labeling content"""
LABEL
"""Predefined tag type"""
PREDEFINED
}
"""Processing setting for RSS folders"""
enum ProcessingSetting {
"""Generate daily summary for each feed in the folder"""
FEED_DAILY_SUMMARY
"""Generate daily summary for the entire folder"""
FOLDER_DAILY_SUMMARY
"""Group similar articles together"""
SIMILARITY_GROUPING
"""No special processing (default)"""
IGNORED
}
"""RSS tag folder with associated subscriptions"""
type TagFolder {
"""Unique identifier for the tag"""
id: String!
"""Display label for the tag"""
label: String!
"""Type of the tag (always FOLDER)"""
type: TagType!
"""Subscriptions that belong to this folder"""
subscriptions: [FeedSubscription!]!
"""Processing setting for this folder (defaults to IGNORED)"""
processingSetting: ProcessingSetting!
}
"""RSS tag label with unread count"""
type TagLabel {
"""Unique identifier for the tag"""
id: String!
"""Display label for the tag"""
label: String!
"""Type of the tag (always LABEL)"""
type: TagType!
"""Number of unread items with this tag"""
unreadCount: Int
}
"""RSS predefined tag"""
type TagPredefined {
"""Unique identifier for the tag"""
id: String!
"""Display label for the tag"""
label: String!
"""Type of the tag (always PREDEFINED)"""
type: TagType!
}
"""Union of all tag types"""
union TagItem = TagFolder | TagLabel | TagPredefined
"""Container for all RSS tags/categories"""
type TagList {
"""List of all RSS tags/categories"""
tags: [TagItem!]!
}
"""Input for creating a new FreshRSS server"""
input CreateFreshRssServerInput {
"""Human-readable name for the server"""
name: String!
"""Base URL of the FreshRSS server"""
baseUrl: String!
"""Username for authentication"""
username: String!
"""FreshRSS API password for authentication"""
apiKey: String!
"""
Optional pre-generated authentication token (normally obtained automatically)
"""
authToken: String
"""Tag used to mark processed items"""
processedTag: String!
"""Whether RSS processing is enabled for this server"""
isProcessingEnabled: Boolean
"""ID of the Qdrant server to associate (optional)"""
qdrantServerId: String
"""ID of the Ollama server to associate (optional)"""
ollamaServerId: String
}
"""Input for updating an existing FreshRSS server"""
input UpdateFreshRssServerInput {
"""Updated name (optional)"""
name: String
"""Updated base URL (optional)"""
baseUrl: String
"""Updated username (optional)"""
username: String