zed.proto

   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}