1syntax = "proto3";
2package zed.messages;
3
4// Looking for a number? Search "// Current max"
5
6message PeerId {
7 uint32 owner_id = 1;
8 uint32 id = 2;
9}
10
11message Envelope {
12 uint32 id = 1;
13 optional uint32 responding_to = 2;
14 optional PeerId original_sender_id = 3;
15
16 /*
17 When you are adding a new message type, instead of adding it in semantic order
18 and bumping the message ID's of everything that follows, add it at the end of the
19 file and bump the max number. See this
20 https://github.com/zed-industries/zed/pull/7890#discussion_r1496621823
21
22 */
23 oneof payload {
24 Hello hello = 4;
25 Ack ack = 5;
26 Error error = 6;
27 Ping ping = 7;
28 Test test = 8;
29
30 CreateRoom create_room = 9;
31 CreateRoomResponse create_room_response = 10;
32 JoinRoom join_room = 11;
33 JoinRoomResponse join_room_response = 12;
34 RejoinRoom rejoin_room = 13;
35 RejoinRoomResponse rejoin_room_response = 14;
36 LeaveRoom leave_room = 15;
37 Call call = 16;
38 IncomingCall incoming_call = 17;
39 CallCanceled call_canceled = 18;
40 CancelCall cancel_call = 19;
41 DeclineCall decline_call = 20;
42 UpdateParticipantLocation update_participant_location = 21;
43 RoomUpdated room_updated = 22;
44
45 ShareProject share_project = 23;
46 ShareProjectResponse share_project_response = 24;
47 UnshareProject unshare_project = 25;
48 JoinProject join_project = 26;
49 JoinProjectResponse join_project_response = 27;
50 LeaveProject leave_project = 28;
51 AddProjectCollaborator add_project_collaborator = 29;
52 UpdateProjectCollaborator update_project_collaborator = 30;
53 RemoveProjectCollaborator remove_project_collaborator = 31;
54
55 GetDefinition get_definition = 32;
56 GetDefinitionResponse get_definition_response = 33;
57 GetTypeDefinition get_type_definition = 34;
58 GetTypeDefinitionResponse get_type_definition_response = 35;
59
60 GetReferences get_references = 36;
61 GetReferencesResponse get_references_response = 37;
62 GetDocumentHighlights get_document_highlights = 38;
63 GetDocumentHighlightsResponse get_document_highlights_response = 39;
64 GetProjectSymbols get_project_symbols = 40;
65 GetProjectSymbolsResponse get_project_symbols_response = 41;
66 OpenBufferForSymbol open_buffer_for_symbol = 42;
67 OpenBufferForSymbolResponse open_buffer_for_symbol_response = 43;
68
69 UpdateProject update_project = 44;
70 UpdateWorktree update_worktree = 45;
71
72 CreateProjectEntry create_project_entry = 46;
73 RenameProjectEntry rename_project_entry = 47;
74 CopyProjectEntry copy_project_entry = 48;
75 DeleteProjectEntry delete_project_entry = 49;
76 ProjectEntryResponse project_entry_response = 50;
77 ExpandProjectEntry expand_project_entry = 51;
78 ExpandProjectEntryResponse expand_project_entry_response = 52;
79
80 UpdateDiagnosticSummary update_diagnostic_summary = 53;
81 StartLanguageServer start_language_server = 54;
82 UpdateLanguageServer update_language_server = 55;
83
84 OpenBufferById open_buffer_by_id = 56;
85 OpenBufferByPath open_buffer_by_path = 57;
86 OpenBufferResponse open_buffer_response = 58;
87 CreateBufferForPeer create_buffer_for_peer = 59;
88 UpdateBuffer update_buffer = 60;
89 UpdateBufferFile update_buffer_file = 61;
90 SaveBuffer save_buffer = 62;
91 BufferSaved buffer_saved = 63;
92 BufferReloaded buffer_reloaded = 64;
93 ReloadBuffers reload_buffers = 65;
94 ReloadBuffersResponse reload_buffers_response = 66;
95 SynchronizeBuffers synchronize_buffers = 67;
96 SynchronizeBuffersResponse synchronize_buffers_response = 68;
97 FormatBuffers format_buffers = 69;
98 FormatBuffersResponse format_buffers_response = 70;
99 GetCompletions get_completions = 71;
100 GetCompletionsResponse get_completions_response = 72;
101 ResolveCompletionDocumentation resolve_completion_documentation = 73;
102 ResolveCompletionDocumentationResponse resolve_completion_documentation_response = 74;
103 ApplyCompletionAdditionalEdits apply_completion_additional_edits = 75;
104 ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 76;
105 GetCodeActions get_code_actions = 77;
106 GetCodeActionsResponse get_code_actions_response = 78;
107 GetHover get_hover = 79;
108 GetHoverResponse get_hover_response = 80;
109 ApplyCodeAction apply_code_action = 81;
110 ApplyCodeActionResponse apply_code_action_response = 82;
111 PrepareRename prepare_rename = 83;
112 PrepareRenameResponse prepare_rename_response = 84;
113 PerformRename perform_rename = 85;
114 PerformRenameResponse perform_rename_response = 86;
115 SearchProject search_project = 87;
116 SearchProjectResponse search_project_response = 88;
117
118 UpdateContacts update_contacts = 89;
119 UpdateInviteInfo update_invite_info = 90;
120 ShowContacts show_contacts = 91;
121
122 GetUsers get_users = 92;
123 FuzzySearchUsers fuzzy_search_users = 93;
124 UsersResponse users_response = 94;
125 RequestContact request_contact = 95;
126 RespondToContactRequest respond_to_contact_request = 96;
127 RemoveContact remove_contact = 97;
128
129 Follow follow = 98;
130 FollowResponse follow_response = 99;
131 UpdateFollowers update_followers = 100;
132 Unfollow unfollow = 101;
133 GetPrivateUserInfo get_private_user_info = 102;
134 GetPrivateUserInfoResponse get_private_user_info_response = 103;
135 UpdateDiffBase update_diff_base = 104;
136
137 OnTypeFormatting on_type_formatting = 105;
138 OnTypeFormattingResponse on_type_formatting_response = 106;
139
140 UpdateWorktreeSettings update_worktree_settings = 107;
141
142 InlayHints inlay_hints = 108;
143 InlayHintsResponse inlay_hints_response = 109;
144 ResolveInlayHint resolve_inlay_hint = 110;
145 ResolveInlayHintResponse resolve_inlay_hint_response = 111;
146 RefreshInlayHints refresh_inlay_hints = 112;
147
148 CreateChannel create_channel = 113;
149 CreateChannelResponse create_channel_response = 114;
150 InviteChannelMember invite_channel_member = 115;
151 RemoveChannelMember remove_channel_member = 116;
152 RespondToChannelInvite respond_to_channel_invite = 117;
153 UpdateChannels update_channels = 118;
154 JoinChannel join_channel = 119;
155 DeleteChannel delete_channel = 120;
156 GetChannelMembers get_channel_members = 121;
157 GetChannelMembersResponse get_channel_members_response = 122;
158 SetChannelMemberRole set_channel_member_role = 123;
159 RenameChannel rename_channel = 124;
160 RenameChannelResponse rename_channel_response = 125;
161
162 JoinChannelBuffer join_channel_buffer = 126;
163 JoinChannelBufferResponse join_channel_buffer_response = 127;
164 UpdateChannelBuffer update_channel_buffer = 128;
165 LeaveChannelBuffer leave_channel_buffer = 129;
166 UpdateChannelBufferCollaborators update_channel_buffer_collaborators = 130;
167 RejoinChannelBuffers rejoin_channel_buffers = 131;
168 RejoinChannelBuffersResponse rejoin_channel_buffers_response = 132;
169 AckBufferOperation ack_buffer_operation = 133;
170
171 JoinChannelChat join_channel_chat = 134;
172 JoinChannelChatResponse join_channel_chat_response = 135;
173 LeaveChannelChat leave_channel_chat = 136;
174 SendChannelMessage send_channel_message = 137;
175 SendChannelMessageResponse send_channel_message_response = 138;
176 ChannelMessageSent channel_message_sent = 139;
177 GetChannelMessages get_channel_messages = 140;
178 GetChannelMessagesResponse get_channel_messages_response = 141;
179 RemoveChannelMessage remove_channel_message = 142;
180 AckChannelMessage ack_channel_message = 143;
181 GetChannelMessagesById get_channel_messages_by_id = 144;
182
183 MoveChannel move_channel = 147;
184 SetChannelVisibility set_channel_visibility = 148;
185
186 AddNotification add_notification = 149;
187 GetNotifications get_notifications = 150;
188 GetNotificationsResponse get_notifications_response = 151;
189 DeleteNotification delete_notification = 152;
190 MarkNotificationRead mark_notification_read = 153;
191 LspExtExpandMacro lsp_ext_expand_macro = 154;
192 LspExtExpandMacroResponse lsp_ext_expand_macro_response = 155;
193 SetRoomParticipantRole set_room_participant_role = 156;
194
195 UpdateUserChannels update_user_channels = 157;
196
197 GetImplementation get_implementation = 162;
198 GetImplementationResponse get_implementation_response = 163;
199 }
200
201 reserved 158 to 161;
202}
203
204// Messages
205
206message Hello {
207 PeerId peer_id = 1;
208}
209
210message Ping {}
211
212message Ack {}
213
214message Error {
215 string message = 1;
216 ErrorCode code = 2;
217 repeated string tags = 3;
218}
219
220enum ErrorCode {
221 Internal = 0;
222 NoSuchChannel = 1;
223 Disconnected = 2;
224 SignedOut = 3;
225 UpgradeRequired = 4;
226 Forbidden = 5;
227 NeedsCla = 7;
228 NotARootChannel = 8;
229 BadPublicNesting = 9;
230 CircularNesting = 10;
231 WrongMoveTarget = 11;
232 UnsharedItem = 12;
233 reserved 6;
234}
235
236message Test {
237 uint64 id = 1;
238}
239
240message CreateRoom {}
241
242message CreateRoomResponse {
243 Room room = 1;
244 optional LiveKitConnectionInfo live_kit_connection_info = 2;
245}
246
247message JoinRoom {
248 uint64 id = 1;
249}
250
251message JoinRoomResponse {
252 Room room = 1;
253 optional uint64 channel_id = 2;
254 optional LiveKitConnectionInfo live_kit_connection_info = 3;
255}
256
257message RejoinRoom {
258 uint64 id = 1;
259 repeated UpdateProject reshared_projects = 2;
260 repeated RejoinProject rejoined_projects = 3;
261}
262
263message RejoinProject {
264 uint64 id = 1;
265 repeated RejoinWorktree worktrees = 2;
266}
267
268message RejoinWorktree {
269 uint64 id = 1;
270 uint64 scan_id = 2;
271}
272
273message RejoinRoomResponse {
274 Room room = 1;
275 repeated ResharedProject reshared_projects = 2;
276 repeated RejoinedProject rejoined_projects = 3;
277}
278
279message ResharedProject {
280 uint64 id = 1;
281 repeated Collaborator collaborators = 2;
282}
283
284message RejoinedProject {
285 uint64 id = 1;
286 repeated WorktreeMetadata worktrees = 2;
287 repeated Collaborator collaborators = 3;
288 repeated LanguageServer language_servers = 4;
289}
290
291message LeaveRoom {}
292
293message Room {
294 uint64 id = 1;
295 repeated Participant participants = 2;
296 repeated PendingParticipant pending_participants = 3;
297 repeated Follower followers = 4;
298 string live_kit_room = 5;
299}
300
301message Participant {
302 uint64 user_id = 1;
303 PeerId peer_id = 2;
304 repeated ParticipantProject projects = 3;
305 ParticipantLocation location = 4;
306 uint32 participant_index = 5;
307 ChannelRole role = 6;
308 reserved 7;
309}
310
311message PendingParticipant {
312 uint64 user_id = 1;
313 uint64 calling_user_id = 2;
314 optional uint64 initial_project_id = 3;
315}
316
317message ParticipantProject {
318 uint64 id = 1;
319 repeated string worktree_root_names = 2;
320}
321
322message Follower {
323 PeerId leader_id = 1;
324 PeerId follower_id = 2;
325 uint64 project_id = 3;
326}
327
328message ParticipantLocation {
329 oneof variant {
330 SharedProject shared_project = 1;
331 UnsharedProject unshared_project = 2;
332 External external = 3;
333 }
334
335 message SharedProject {
336 uint64 id = 1;
337 }
338
339 message UnsharedProject {}
340
341 message External {}
342}
343
344message Call {
345 uint64 room_id = 1;
346 uint64 called_user_id = 2;
347 optional uint64 initial_project_id = 3;
348}
349
350message IncomingCall {
351 uint64 room_id = 1;
352 uint64 calling_user_id = 2;
353 repeated uint64 participant_user_ids = 3;
354 optional ParticipantProject initial_project = 4;
355}
356
357message CallCanceled {
358 uint64 room_id = 1;
359}
360
361message CancelCall {
362 uint64 room_id = 1;
363 uint64 called_user_id = 2;
364}
365
366message DeclineCall {
367 uint64 room_id = 1;
368}
369
370message UpdateParticipantLocation {
371 uint64 room_id = 1;
372 ParticipantLocation location = 2;
373}
374
375message RoomUpdated {
376 Room room = 1;
377}
378
379message LiveKitConnectionInfo {
380 string server_url = 1;
381 string token = 2;
382 bool can_publish = 3;
383}
384
385message ShareProject {
386 uint64 room_id = 1;
387 repeated WorktreeMetadata worktrees = 2;
388}
389
390message ShareProjectResponse {
391 uint64 project_id = 1;
392}
393
394message UnshareProject {
395 uint64 project_id = 1;
396}
397
398message UpdateProject {
399 uint64 project_id = 1;
400 repeated WorktreeMetadata worktrees = 2;
401}
402
403message JoinProject {
404 uint64 project_id = 1;
405}
406
407message JoinProjectResponse {
408 uint32 replica_id = 1;
409 repeated WorktreeMetadata worktrees = 2;
410 repeated Collaborator collaborators = 3;
411 repeated LanguageServer language_servers = 4;
412}
413
414message LeaveProject {
415 uint64 project_id = 1;
416}
417
418message UpdateWorktree {
419 uint64 project_id = 1;
420 uint64 worktree_id = 2;
421 string root_name = 3;
422 repeated Entry updated_entries = 4;
423 repeated uint64 removed_entries = 5;
424 repeated RepositoryEntry updated_repositories = 6;
425 repeated uint64 removed_repositories = 7;
426 uint64 scan_id = 8;
427 bool is_last_update = 9;
428 string abs_path = 10;
429}
430
431message UpdateWorktreeSettings {
432 uint64 project_id = 1;
433 uint64 worktree_id = 2;
434 string path = 3;
435 optional string content = 4;
436}
437
438message CreateProjectEntry {
439 uint64 project_id = 1;
440 uint64 worktree_id = 2;
441 string path = 3;
442 bool is_directory = 4;
443}
444
445message RenameProjectEntry {
446 uint64 project_id = 1;
447 uint64 entry_id = 2;
448 string new_path = 3;
449}
450
451message CopyProjectEntry {
452 uint64 project_id = 1;
453 uint64 entry_id = 2;
454 string new_path = 3;
455}
456
457message DeleteProjectEntry {
458 uint64 project_id = 1;
459 uint64 entry_id = 2;
460}
461
462message ExpandProjectEntry {
463 uint64 project_id = 1;
464 uint64 entry_id = 2;
465}
466
467message ExpandProjectEntryResponse {
468 uint64 worktree_scan_id = 1;
469}
470
471message ProjectEntryResponse {
472 optional Entry entry = 1;
473 uint64 worktree_scan_id = 2;
474}
475
476message AddProjectCollaborator {
477 uint64 project_id = 1;
478 Collaborator collaborator = 2;
479}
480
481message UpdateProjectCollaborator {
482 uint64 project_id = 1;
483 PeerId old_peer_id = 2;
484 PeerId new_peer_id = 3;
485}
486
487message RemoveProjectCollaborator {
488 uint64 project_id = 1;
489 PeerId peer_id = 2;
490}
491
492message UpdateChannelBufferCollaborators {
493 uint64 channel_id = 1;
494 repeated Collaborator collaborators = 2;
495}
496
497message GetDefinition {
498 uint64 project_id = 1;
499 uint64 buffer_id = 2;
500 Anchor position = 3;
501 repeated VectorClockEntry version = 4;
502 }
503
504message GetDefinitionResponse {
505 repeated LocationLink links = 1;
506}
507
508message GetTypeDefinition {
509 uint64 project_id = 1;
510 uint64 buffer_id = 2;
511 Anchor position = 3;
512 repeated VectorClockEntry version = 4;
513 }
514
515message GetTypeDefinitionResponse {
516 repeated LocationLink links = 1;
517}
518message GetImplementation {
519 uint64 project_id = 1;
520 uint64 buffer_id = 2;
521 Anchor position = 3;
522 repeated VectorClockEntry version = 4;
523 }
524
525message GetImplementationResponse {
526 repeated LocationLink links = 1;
527}
528
529message GetReferences {
530 uint64 project_id = 1;
531 uint64 buffer_id = 2;
532 Anchor position = 3;
533 repeated VectorClockEntry version = 4;
534 }
535
536message GetReferencesResponse {
537 repeated Location locations = 1;
538}
539
540message GetDocumentHighlights {
541 uint64 project_id = 1;
542 uint64 buffer_id = 2;
543 Anchor position = 3;
544 repeated VectorClockEntry version = 4;
545 }
546
547message GetDocumentHighlightsResponse {
548 repeated DocumentHighlight highlights = 1;
549}
550
551message Location {
552 uint64 buffer_id = 1;
553 Anchor start = 2;
554 Anchor end = 3;
555}
556
557message LocationLink {
558 optional Location origin = 1;
559 Location target = 2;
560}
561
562message DocumentHighlight {
563 Kind kind = 1;
564 Anchor start = 2;
565 Anchor end = 3;
566
567 enum Kind {
568 Text = 0;
569 Read = 1;
570 Write = 2;
571 }
572}
573
574message GetProjectSymbols {
575 uint64 project_id = 1;
576 string query = 2;
577}
578
579message GetProjectSymbolsResponse {
580 repeated Symbol symbols = 4;
581}
582
583message Symbol {
584 uint64 source_worktree_id = 1;
585 uint64 worktree_id = 2;
586 string language_server_name = 3;
587 string name = 4;
588 int32 kind = 5;
589 string path = 6;
590 // Cannot use generate anchors for unopened files,
591 // so we are forced to use point coords instead
592 PointUtf16 start = 7;
593 PointUtf16 end = 8;
594 bytes signature = 9;
595}
596
597message OpenBufferForSymbol {
598 uint64 project_id = 1;
599 Symbol symbol = 2;
600}
601
602message OpenBufferForSymbolResponse {
603 uint64 buffer_id = 1;
604}
605
606message OpenBufferByPath {
607 uint64 project_id = 1;
608 uint64 worktree_id = 2;
609 string path = 3;
610}
611
612message OpenBufferById {
613 uint64 project_id = 1;
614 uint64 id = 2;
615}
616
617message OpenBufferResponse {
618 uint64 buffer_id = 1;
619}
620
621message CreateBufferForPeer {
622 uint64 project_id = 1;
623 PeerId peer_id = 2;
624 oneof variant {
625 BufferState state = 3;
626 BufferChunk chunk = 4;
627 }
628}
629
630message UpdateBuffer {
631 uint64 project_id = 1;
632 uint64 buffer_id = 2;
633 repeated Operation operations = 3;
634}
635
636message UpdateChannelBuffer {
637 uint64 channel_id = 1;
638 repeated Operation operations = 2;
639}
640
641message UpdateBufferFile {
642 uint64 project_id = 1;
643 uint64 buffer_id = 2;
644 File file = 3;
645}
646
647message SaveBuffer {
648 uint64 project_id = 1;
649 uint64 buffer_id = 2;
650 repeated VectorClockEntry version = 3;
651}
652
653message BufferSaved {
654 uint64 project_id = 1;
655 uint64 buffer_id = 2;
656 repeated VectorClockEntry version = 3;
657 Timestamp mtime = 4;
658 string fingerprint = 5;
659}
660
661message BufferReloaded {
662 uint64 project_id = 1;
663 uint64 buffer_id = 2;
664 repeated VectorClockEntry version = 3;
665 Timestamp mtime = 4;
666 string fingerprint = 5;
667 LineEnding line_ending = 6;
668}
669
670message ReloadBuffers {
671 uint64 project_id = 1;
672 repeated uint64 buffer_ids = 2;
673}
674
675message ReloadBuffersResponse {
676 ProjectTransaction transaction = 1;
677}
678
679message SynchronizeBuffers {
680 uint64 project_id = 1;
681 repeated BufferVersion buffers = 2;
682}
683
684message SynchronizeBuffersResponse {
685 repeated BufferVersion buffers = 1;
686}
687
688message BufferVersion {
689 uint64 id = 1;
690 repeated VectorClockEntry version = 2;
691}
692
693message ChannelBufferVersion {
694 uint64 channel_id = 1;
695 repeated VectorClockEntry version = 2;
696 uint64 epoch = 3;
697}
698
699enum FormatTrigger {
700 Save = 0;
701 Manual = 1;
702}
703
704message FormatBuffers {
705 uint64 project_id = 1;
706 FormatTrigger trigger = 2;
707 repeated uint64 buffer_ids = 3;
708}
709
710message FormatBuffersResponse {
711 ProjectTransaction transaction = 1;
712}
713
714message GetCompletions {
715 uint64 project_id = 1;
716 uint64 buffer_id = 2;
717 Anchor position = 3;
718 repeated VectorClockEntry version = 4;
719}
720
721message GetCompletionsResponse {
722 repeated Completion completions = 1;
723 repeated VectorClockEntry version = 2;
724}
725
726message ApplyCompletionAdditionalEdits {
727 uint64 project_id = 1;
728 uint64 buffer_id = 2;
729 Completion completion = 3;
730}
731
732message ApplyCompletionAdditionalEditsResponse {
733 Transaction transaction = 1;
734}
735
736message Completion {
737 Anchor old_start = 1;
738 Anchor old_end = 2;
739 string new_text = 3;
740 uint64 server_id = 4;
741 bytes lsp_completion = 5;
742}
743
744message GetCodeActions {
745 uint64 project_id = 1;
746 uint64 buffer_id = 2;
747 Anchor start = 3;
748 Anchor end = 4;
749 repeated VectorClockEntry version = 5;
750}
751
752message GetCodeActionsResponse {
753 repeated CodeAction actions = 1;
754 repeated VectorClockEntry version = 2;
755}
756
757message GetHover {
758 uint64 project_id = 1;
759 uint64 buffer_id = 2;
760 Anchor position = 3;
761 repeated VectorClockEntry version = 5;
762}
763
764message GetHoverResponse {
765 optional Anchor start = 1;
766 optional Anchor end = 2;
767 repeated HoverBlock contents = 3;
768}
769
770message HoverBlock {
771 string text = 1;
772 optional string language = 2;
773 bool is_markdown = 3;
774}
775
776message ApplyCodeAction {
777 uint64 project_id = 1;
778 uint64 buffer_id = 2;
779 CodeAction action = 3;
780}
781
782message ApplyCodeActionResponse {
783 ProjectTransaction transaction = 1;
784}
785
786message PrepareRename {
787 uint64 project_id = 1;
788 uint64 buffer_id = 2;
789 Anchor position = 3;
790 repeated VectorClockEntry version = 4;
791}
792
793message PrepareRenameResponse {
794 bool can_rename = 1;
795 Anchor start = 2;
796 Anchor end = 3;
797 repeated VectorClockEntry version = 4;
798}
799
800message PerformRename {
801 uint64 project_id = 1;
802 uint64 buffer_id = 2;
803 Anchor position = 3;
804 string new_name = 4;
805 repeated VectorClockEntry version = 5;
806}
807
808message OnTypeFormatting {
809 uint64 project_id = 1;
810 uint64 buffer_id = 2;
811 Anchor position = 3;
812 string trigger = 4;
813 repeated VectorClockEntry version = 5;
814}
815
816message OnTypeFormattingResponse {
817 Transaction transaction = 1;
818}
819
820message InlayHints {
821 uint64 project_id = 1;
822 uint64 buffer_id = 2;
823 Anchor start = 3;
824 Anchor end = 4;
825 repeated VectorClockEntry version = 5;
826}
827
828message InlayHintsResponse {
829 repeated InlayHint hints = 1;
830 repeated VectorClockEntry version = 2;
831}
832
833message InlayHint {
834 Anchor position = 1;
835 InlayHintLabel label = 2;
836 optional string kind = 3;
837 bool padding_left = 4;
838 bool padding_right = 5;
839 InlayHintTooltip tooltip = 6;
840 ResolveState resolve_state = 7;
841}
842
843message InlayHintLabel {
844 oneof label {
845 string value = 1;
846 InlayHintLabelParts label_parts = 2;
847 }
848}
849
850message InlayHintLabelParts {
851 repeated InlayHintLabelPart parts = 1;
852}
853
854message InlayHintLabelPart {
855 string value = 1;
856 InlayHintLabelPartTooltip tooltip = 2;
857 optional string location_url = 3;
858 PointUtf16 location_range_start = 4;
859 PointUtf16 location_range_end = 5;
860 optional uint64 language_server_id = 6;
861}
862
863message InlayHintTooltip {
864 oneof content {
865 string value = 1;
866 MarkupContent markup_content = 2;
867 }
868}
869
870message InlayHintLabelPartTooltip {
871 oneof content {
872 string value = 1;
873 MarkupContent markup_content = 2;
874 }
875}
876
877message ResolveState {
878 State state = 1;
879 LspResolveState lsp_resolve_state = 2;
880
881 enum State {
882 Resolved = 0;
883 CanResolve = 1;
884 Resolving = 2;
885 }
886
887 message LspResolveState {
888 string value = 1;
889 uint64 server_id = 2;
890 }
891}
892
893message ResolveCompletionDocumentation {
894 uint64 project_id = 1;
895 uint64 language_server_id = 2;
896 bytes lsp_completion = 3;
897}
898
899message ResolveCompletionDocumentationResponse {
900 string text = 1;
901 bool is_markdown = 2;
902}
903
904message ResolveInlayHint {
905 uint64 project_id = 1;
906 uint64 buffer_id = 2;
907 uint64 language_server_id = 3;
908 InlayHint hint = 4;
909}
910
911message ResolveInlayHintResponse {
912 InlayHint hint = 1;
913}
914
915message RefreshInlayHints {
916 uint64 project_id = 1;
917}
918
919message MarkupContent {
920 bool is_markdown = 1;
921 string value = 2;
922}
923
924message PerformRenameResponse {
925 ProjectTransaction transaction = 2;
926}
927
928message SearchProject {
929 uint64 project_id = 1;
930 string query = 2;
931 bool regex = 3;
932 bool whole_word = 4;
933 bool case_sensitive = 5;
934 string files_to_include = 6;
935 string files_to_exclude = 7;
936 bool include_ignored = 8;
937}
938
939message SearchProjectResponse {
940 repeated Location locations = 1;
941}
942
943message CodeAction {
944 uint64 server_id = 1;
945 Anchor start = 2;
946 Anchor end = 3;
947 bytes lsp_action = 4;
948}
949
950message ProjectTransaction {
951 repeated uint64 buffer_ids = 1;
952 repeated Transaction transactions = 2;
953}
954
955message Transaction {
956 LamportTimestamp id = 1;
957 repeated LamportTimestamp edit_ids = 2;
958 repeated VectorClockEntry start = 3;
959}
960
961message LamportTimestamp {
962 uint32 replica_id = 1;
963 uint32 value = 2;
964}
965
966message LanguageServer {
967 uint64 id = 1;
968 string name = 2;
969}
970
971message StartLanguageServer {
972 uint64 project_id = 1;
973 LanguageServer server = 2;
974}
975
976message UpdateDiagnosticSummary {
977 uint64 project_id = 1;
978 uint64 worktree_id = 2;
979 DiagnosticSummary summary = 3;
980}
981
982message DiagnosticSummary {
983 string path = 1;
984 uint64 language_server_id = 2;
985 uint32 error_count = 3;
986 uint32 warning_count = 4;
987}
988
989message UpdateLanguageServer {
990 uint64 project_id = 1;
991 uint64 language_server_id = 2;
992 oneof variant {
993 LspWorkStart work_start = 3;
994 LspWorkProgress work_progress = 4;
995 LspWorkEnd work_end = 5;
996 LspDiskBasedDiagnosticsUpdating disk_based_diagnostics_updating = 6;
997 LspDiskBasedDiagnosticsUpdated disk_based_diagnostics_updated = 7;
998 }
999}
1000
1001message LspWorkStart {
1002 string token = 1;
1003 optional string message = 2;
1004 optional uint32 percentage = 3;
1005}
1006
1007message LspWorkProgress {
1008 string token = 1;
1009 optional string message = 2;
1010 optional uint32 percentage = 3;
1011}
1012
1013message LspWorkEnd {
1014 string token = 1;
1015}
1016
1017message LspDiskBasedDiagnosticsUpdating {}
1018
1019message LspDiskBasedDiagnosticsUpdated {}
1020
1021message UpdateChannels {
1022 repeated Channel channels = 1;
1023 repeated uint64 delete_channels = 4;
1024 repeated Channel channel_invitations = 5;
1025 repeated uint64 remove_channel_invitations = 6;
1026 repeated ChannelParticipants channel_participants = 7;
1027 repeated ChannelMessageId latest_channel_message_ids = 8;
1028 repeated ChannelBufferVersion latest_channel_buffer_versions = 9;
1029
1030 repeated HostedProject hosted_projects = 10;
1031 repeated uint64 deleted_hosted_projects = 11;
1032}
1033
1034message UpdateUserChannels {
1035 repeated ChannelMessageId observed_channel_message_id = 1;
1036 repeated ChannelBufferVersion observed_channel_buffer_version = 2;
1037 repeated ChannelMembership channel_memberships = 3;
1038}
1039
1040message ChannelMembership {
1041 uint64 channel_id = 1;
1042 ChannelRole role = 2;
1043}
1044
1045message ChannelMessageId {
1046 uint64 channel_id = 1;
1047 uint64 message_id = 2;
1048}
1049
1050message ChannelPermission {
1051 uint64 channel_id = 1;
1052 ChannelRole role = 3;
1053}
1054
1055message ChannelParticipants {
1056 uint64 channel_id = 1;
1057 repeated uint64 participant_user_ids = 2;
1058}
1059
1060message HostedProject {
1061 uint64 id = 1;
1062 uint64 channel_id = 2;
1063 string name = 3;
1064 ChannelVisibility visibility = 4;
1065}
1066
1067message JoinChannel {
1068 uint64 channel_id = 1;
1069}
1070
1071message DeleteChannel {
1072 uint64 channel_id = 1;
1073}
1074
1075message GetChannelMembers {
1076 uint64 channel_id = 1;
1077}
1078
1079message GetChannelMembersResponse {
1080 repeated ChannelMember members = 1;
1081}
1082
1083message ChannelMember {
1084 uint64 user_id = 1;
1085 Kind kind = 3;
1086 ChannelRole role = 4;
1087
1088 enum Kind {
1089 Member = 0;
1090 Invitee = 1;
1091 }
1092}
1093
1094message CreateChannel {
1095 string name = 1;
1096 optional uint64 parent_id = 2;
1097}
1098
1099message CreateChannelResponse {
1100 Channel channel = 1;
1101 optional uint64 parent_id = 2;
1102}
1103
1104message InviteChannelMember {
1105 uint64 channel_id = 1;
1106 uint64 user_id = 2;
1107 ChannelRole role = 4;
1108}
1109
1110message RemoveChannelMember {
1111 uint64 channel_id = 1;
1112 uint64 user_id = 2;
1113}
1114
1115enum ChannelRole {
1116 Admin = 0;
1117 Member = 1;
1118 Guest = 2;
1119 Banned = 3;
1120 Talker = 4;
1121}
1122
1123message SetChannelMemberRole {
1124 uint64 channel_id = 1;
1125 uint64 user_id = 2;
1126 ChannelRole role = 3;
1127}
1128
1129message SetChannelVisibility {
1130 uint64 channel_id = 1;
1131 ChannelVisibility visibility = 2;
1132}
1133
1134message RenameChannel {
1135 uint64 channel_id = 1;
1136 string name = 2;
1137}
1138
1139message RenameChannelResponse {
1140 Channel channel = 1;
1141}
1142
1143message JoinChannelChat {
1144 uint64 channel_id = 1;
1145}
1146
1147message JoinChannelChatResponse {
1148 repeated ChannelMessage messages = 1;
1149 bool done = 2;
1150}
1151
1152message LeaveChannelChat {
1153 uint64 channel_id = 1;
1154}
1155
1156message SendChannelMessage {
1157 uint64 channel_id = 1;
1158 string body = 2;
1159 Nonce nonce = 3;
1160 repeated ChatMention mentions = 4;
1161 optional uint64 reply_to_message_id = 5;
1162}
1163
1164message RemoveChannelMessage {
1165 uint64 channel_id = 1;
1166 uint64 message_id = 2;
1167}
1168
1169message AckChannelMessage {
1170 uint64 channel_id = 1;
1171 uint64 message_id = 2;
1172}
1173
1174message SendChannelMessageResponse {
1175 ChannelMessage message = 1;
1176}
1177
1178message ChannelMessageSent {
1179 uint64 channel_id = 1;
1180 ChannelMessage message = 2;
1181}
1182
1183message GetChannelMessages {
1184 uint64 channel_id = 1;
1185 uint64 before_message_id = 2;
1186}
1187
1188message GetChannelMessagesResponse {
1189 repeated ChannelMessage messages = 1;
1190 bool done = 2;
1191}
1192
1193message GetChannelMessagesById {
1194 repeated uint64 message_ids = 1;
1195}
1196
1197message MoveChannel {
1198 uint64 channel_id = 1;
1199 uint64 to = 2;
1200}
1201
1202message JoinChannelBuffer {
1203 uint64 channel_id = 1;
1204}
1205
1206message ChannelMessage {
1207 uint64 id = 1;
1208 string body = 2;
1209 uint64 timestamp = 3;
1210 uint64 sender_id = 4;
1211 Nonce nonce = 5;
1212 repeated ChatMention mentions = 6;
1213 optional uint64 reply_to_message_id = 7;
1214}
1215
1216message ChatMention {
1217 Range range = 1;
1218 uint64 user_id = 2;
1219}
1220
1221message RejoinChannelBuffers {
1222 repeated ChannelBufferVersion buffers = 1;
1223}
1224
1225message RejoinChannelBuffersResponse {
1226 repeated RejoinedChannelBuffer buffers = 1;
1227}
1228
1229message AckBufferOperation {
1230 uint64 buffer_id = 1;
1231 uint64 epoch = 2;
1232 repeated VectorClockEntry version = 3;
1233}
1234
1235message JoinChannelBufferResponse {
1236 uint64 buffer_id = 1;
1237 uint32 replica_id = 2;
1238 string base_text = 3;
1239 repeated Operation operations = 4;
1240 repeated Collaborator collaborators = 5;
1241 uint64 epoch = 6;
1242}
1243
1244message RejoinedChannelBuffer {
1245 uint64 channel_id = 1;
1246 repeated VectorClockEntry version = 2;
1247 repeated Operation operations = 3;
1248 repeated Collaborator collaborators = 4;
1249}
1250
1251message LeaveChannelBuffer {
1252 uint64 channel_id = 1;
1253}
1254
1255message RespondToChannelInvite {
1256 uint64 channel_id = 1;
1257 bool accept = 2;
1258}
1259
1260message GetUsers {
1261 repeated uint64 user_ids = 1;
1262}
1263
1264message FuzzySearchUsers {
1265 string query = 1;
1266}
1267
1268message UsersResponse {
1269 repeated User users = 1;
1270}
1271
1272message RequestContact {
1273 uint64 responder_id = 1;
1274}
1275
1276message RemoveContact {
1277 uint64 user_id = 1;
1278}
1279
1280message RespondToContactRequest {
1281 uint64 requester_id = 1;
1282 ContactRequestResponse response = 2;
1283}
1284
1285enum ContactRequestResponse {
1286 Accept = 0;
1287 Decline = 1;
1288 Block = 2;
1289 Dismiss = 3;
1290}
1291
1292message UpdateContacts {
1293 repeated Contact contacts = 1;
1294 repeated uint64 remove_contacts = 2;
1295 repeated IncomingContactRequest incoming_requests = 3;
1296 repeated uint64 remove_incoming_requests = 4;
1297 repeated uint64 outgoing_requests = 5;
1298 repeated uint64 remove_outgoing_requests = 6;
1299}
1300
1301message UpdateInviteInfo {
1302 string url = 1;
1303 uint32 count = 2;
1304}
1305
1306message ShowContacts {}
1307
1308message IncomingContactRequest {
1309 uint64 requester_id = 1;
1310}
1311
1312message UpdateDiagnostics {
1313 uint32 replica_id = 1;
1314 uint32 lamport_timestamp = 2;
1315 uint64 server_id = 3;
1316 repeated Diagnostic diagnostics = 4;
1317}
1318
1319message Follow {
1320 uint64 room_id = 1;
1321 optional uint64 project_id = 2;
1322 PeerId leader_id = 3;
1323}
1324
1325message FollowResponse {
1326 View active_view = 3;
1327 // TODO: after 0.124.0 is retired, remove these.
1328 optional ViewId active_view_id = 1;
1329 repeated View views = 2;
1330}
1331
1332message UpdateFollowers {
1333 uint64 room_id = 1;
1334 optional uint64 project_id = 2;
1335 reserved 3;
1336 oneof variant {
1337 View create_view = 5;
1338 // TODO: after 0.124.0 is retired, remove these.
1339 UpdateActiveView update_active_view = 4;
1340 UpdateView update_view = 6;
1341 }
1342}
1343
1344message Unfollow {
1345 uint64 room_id = 1;
1346 optional uint64 project_id = 2;
1347 PeerId leader_id = 3;
1348}
1349
1350message GetPrivateUserInfo {}
1351
1352message GetPrivateUserInfoResponse {
1353 string metrics_id = 1;
1354 bool staff = 2;
1355 repeated string flags = 3;
1356}
1357
1358// Entities
1359
1360message ViewId {
1361 PeerId creator = 1;
1362 uint64 id = 2;
1363}
1364
1365message UpdateActiveView {
1366 optional ViewId id = 1;
1367 optional PeerId leader_id = 2;
1368 View view = 3;
1369}
1370
1371message UpdateView {
1372 ViewId id = 1;
1373 optional PeerId leader_id = 2;
1374
1375 oneof variant {
1376 Editor editor = 3;
1377 }
1378
1379 message Editor {
1380 repeated ExcerptInsertion inserted_excerpts = 1;
1381 repeated uint64 deleted_excerpts = 2;
1382 repeated Selection selections = 3;
1383 optional Selection pending_selection = 4;
1384 EditorAnchor scroll_top_anchor = 5;
1385 float scroll_x = 6;
1386 float scroll_y = 7;
1387 }
1388}
1389
1390message View {
1391 ViewId id = 1;
1392 optional PeerId leader_id = 2;
1393
1394 oneof variant {
1395 Editor editor = 3;
1396 ChannelView channel_view = 4;
1397 }
1398
1399 message Editor {
1400 bool singleton = 1;
1401 optional string title = 2;
1402 repeated Excerpt excerpts = 3;
1403 repeated Selection selections = 4;
1404 optional Selection pending_selection = 5;
1405 EditorAnchor scroll_top_anchor = 6;
1406 float scroll_x = 7;
1407 float scroll_y = 8;
1408 }
1409
1410 message ChannelView {
1411 uint64 channel_id = 1;
1412 Editor editor = 2;
1413 }
1414}
1415
1416message Collaborator {
1417 PeerId peer_id = 1;
1418 uint32 replica_id = 2;
1419 uint64 user_id = 3;
1420}
1421
1422message User {
1423 uint64 id = 1;
1424 string github_login = 2;
1425 string avatar_url = 3;
1426}
1427
1428message File {
1429 uint64 worktree_id = 1;
1430 optional uint64 entry_id = 2;
1431 string path = 3;
1432 Timestamp mtime = 4;
1433 bool is_deleted = 5;
1434}
1435
1436message Entry {
1437 uint64 id = 1;
1438 bool is_dir = 2;
1439 string path = 3;
1440 uint64 inode = 4;
1441 Timestamp mtime = 5;
1442 bool is_symlink = 6;
1443 bool is_ignored = 7;
1444 bool is_external = 8;
1445 optional GitStatus git_status = 9;
1446}
1447
1448message RepositoryEntry {
1449 uint64 work_directory_id = 1;
1450 optional string branch = 2;
1451}
1452
1453message StatusEntry {
1454 string repo_path = 1;
1455 GitStatus status = 2;
1456}
1457
1458enum GitStatus {
1459 Added = 0;
1460 Modified = 1;
1461 Conflict = 2;
1462}
1463
1464message BufferState {
1465 uint64 id = 1;
1466 optional File file = 2;
1467 string base_text = 3;
1468 optional string diff_base = 4;
1469 LineEnding line_ending = 5;
1470 repeated VectorClockEntry saved_version = 6;
1471 string saved_version_fingerprint = 7;
1472 Timestamp saved_mtime = 8;
1473}
1474
1475message BufferChunk {
1476 uint64 buffer_id = 1;
1477 repeated Operation operations = 2;
1478 bool is_last = 3;
1479}
1480
1481enum LineEnding {
1482 Unix = 0;
1483 Windows = 1;
1484}
1485
1486message Selection {
1487 uint64 id = 1;
1488 EditorAnchor start = 2;
1489 EditorAnchor end = 3;
1490 bool reversed = 4;
1491}
1492
1493message EditorAnchor {
1494 uint64 excerpt_id = 1;
1495 Anchor anchor = 2;
1496}
1497
1498enum CursorShape {
1499 CursorBar = 0;
1500 CursorBlock = 1;
1501 CursorUnderscore = 2;
1502 CursorHollow = 3;
1503}
1504
1505message ExcerptInsertion {
1506 Excerpt excerpt = 1;
1507 optional uint64 previous_excerpt_id = 2;
1508}
1509
1510message Excerpt {
1511 uint64 id = 1;
1512 uint64 buffer_id = 2;
1513 Anchor context_start = 3;
1514 Anchor context_end = 4;
1515 Anchor primary_start = 5;
1516 Anchor primary_end = 6;
1517}
1518
1519message Anchor {
1520 uint32 replica_id = 1;
1521 uint32 timestamp = 2;
1522 uint64 offset = 3;
1523 Bias bias = 4;
1524 optional uint64 buffer_id = 5;
1525}
1526
1527enum Bias {
1528 Left = 0;
1529 Right = 1;
1530}
1531
1532message Diagnostic {
1533 Anchor start = 1;
1534 Anchor end = 2;
1535 optional string source = 3;
1536 Severity severity = 4;
1537 string message = 5;
1538 optional string code = 6;
1539 uint64 group_id = 7;
1540 bool is_primary = 8;
1541
1542 // TODO: remove this field
1543 bool is_valid = 9;
1544
1545 bool is_disk_based = 10;
1546 bool is_unnecessary = 11;
1547
1548 enum Severity {
1549 None = 0;
1550 Error = 1;
1551 Warning = 2;
1552 Information = 3;
1553 Hint = 4;
1554 }
1555}
1556
1557message Operation {
1558 oneof variant {
1559 Edit edit = 1;
1560 Undo undo = 2;
1561 UpdateSelections update_selections = 3;
1562 UpdateDiagnostics update_diagnostics = 4;
1563 UpdateCompletionTriggers update_completion_triggers = 5;
1564 }
1565
1566 message Edit {
1567 uint32 replica_id = 1;
1568 uint32 lamport_timestamp = 2;
1569 repeated VectorClockEntry version = 3;
1570 repeated Range ranges = 4;
1571 repeated string new_text = 5;
1572 }
1573
1574 message Undo {
1575 uint32 replica_id = 1;
1576 uint32 lamport_timestamp = 2;
1577 repeated VectorClockEntry version = 3;
1578 repeated UndoCount counts = 4;
1579 }
1580
1581 message UpdateSelections {
1582 uint32 replica_id = 1;
1583 uint32 lamport_timestamp = 2;
1584 repeated Selection selections = 3;
1585 bool line_mode = 4;
1586 CursorShape cursor_shape = 5;
1587 }
1588
1589 message UpdateCompletionTriggers {
1590 uint32 replica_id = 1;
1591 uint32 lamport_timestamp = 2;
1592 repeated string triggers = 3;
1593 }
1594}
1595
1596message UndoMapEntry {
1597 uint32 replica_id = 1;
1598 uint32 local_timestamp = 2;
1599 repeated UndoCount counts = 3;
1600}
1601
1602message UndoCount {
1603 uint32 replica_id = 1;
1604 uint32 lamport_timestamp = 2;
1605 uint32 count = 3;
1606}
1607
1608message VectorClockEntry {
1609 uint32 replica_id = 1;
1610 uint32 timestamp = 2;
1611}
1612
1613message Timestamp {
1614 uint64 seconds = 1;
1615 uint32 nanos = 2;
1616}
1617
1618message Range {
1619 uint64 start = 1;
1620 uint64 end = 2;
1621}
1622
1623message PointUtf16 {
1624 uint32 row = 1;
1625 uint32 column = 2;
1626}
1627
1628message Nonce {
1629 uint64 upper_half = 1;
1630 uint64 lower_half = 2;
1631}
1632
1633enum ChannelVisibility {
1634 Public = 0;
1635 Members = 1;
1636}
1637
1638message Channel {
1639 uint64 id = 1;
1640 string name = 2;
1641 ChannelVisibility visibility = 3;
1642 repeated uint64 parent_path = 5;
1643}
1644
1645message Contact {
1646 uint64 user_id = 1;
1647 bool online = 2;
1648 bool busy = 3;
1649}
1650
1651message WorktreeMetadata {
1652 uint64 id = 1;
1653 string root_name = 2;
1654 bool visible = 3;
1655 string abs_path = 4;
1656}
1657
1658message UpdateDiffBase {
1659 uint64 project_id = 1;
1660 uint64 buffer_id = 2;
1661 optional string diff_base = 3;
1662}
1663
1664message GetNotifications {
1665 optional uint64 before_id = 1;
1666}
1667
1668message AddNotification {
1669 Notification notification = 1;
1670}
1671
1672message GetNotificationsResponse {
1673 repeated Notification notifications = 1;
1674 bool done = 2;
1675}
1676
1677message DeleteNotification {
1678 uint64 notification_id = 1;
1679}
1680
1681message MarkNotificationRead {
1682 uint64 notification_id = 1;
1683}
1684
1685message Notification {
1686 uint64 id = 1;
1687 uint64 timestamp = 2;
1688 string kind = 3;
1689 optional uint64 entity_id = 4;
1690 string content = 5;
1691 bool is_read = 6;
1692 optional bool response = 7;
1693}
1694
1695message LspExtExpandMacro {
1696 uint64 project_id = 1;
1697 uint64 buffer_id = 2;
1698 Anchor position = 3;
1699}
1700
1701message LspExtExpandMacroResponse {
1702 string name = 1;
1703 string expansion = 2;
1704}
1705
1706message SetRoomParticipantRole {
1707 uint64 room_id = 1;
1708 uint64 user_id = 2;
1709 ChannelRole role = 3;
1710}