zed.proto

   1syntax = "proto3";
   2package zed.messages;
   3
   4message PeerId {
   5    uint32 owner_id = 1;
   6    uint32 id = 2;
   7}
   8
   9message Envelope {
  10    uint32 id = 1;
  11    optional uint32 responding_to = 2;
  12    optional PeerId original_sender_id = 3;
  13    oneof payload {
  14        Hello hello = 4;
  15        Ack ack = 5;
  16        Error error = 6;
  17        Ping ping = 7;
  18        Test test = 8;
  19        
  20        CreateRoom create_room = 9;
  21        CreateRoomResponse create_room_response = 10;
  22        JoinRoom join_room = 11;
  23        JoinRoomResponse join_room_response = 12;
  24        RejoinRoom rejoin_room = 108;
  25        RejoinRoomResponse rejoin_room_response = 109;
  26        LeaveRoom leave_room = 13;
  27        Call call = 14;
  28        IncomingCall incoming_call = 15;
  29        CallCanceled call_canceled = 16;
  30        CancelCall cancel_call = 17;
  31        DeclineCall decline_call = 18;
  32        UpdateParticipantLocation update_participant_location = 19;
  33        RoomUpdated room_updated = 20;
  34
  35        ShareProject share_project = 21;
  36        ShareProjectResponse share_project_response = 22;
  37        UnshareProject unshare_project = 23;
  38        JoinProject join_project = 24;
  39        JoinProjectResponse join_project_response = 25;
  40        LeaveProject leave_project = 26;
  41        AddProjectCollaborator add_project_collaborator = 27;
  42        UpdateProjectCollaborator update_project_collaborator = 110;
  43        RemoveProjectCollaborator remove_project_collaborator = 28;
  44
  45        GetDefinition get_definition = 29;
  46        GetDefinitionResponse get_definition_response = 30;
  47        GetTypeDefinition get_type_definition = 31;
  48        GetTypeDefinitionResponse get_type_definition_response = 32;
  49        GetReferences get_references = 33;
  50        GetReferencesResponse get_references_response = 34;
  51        GetDocumentHighlights get_document_highlights = 35;
  52        GetDocumentHighlightsResponse get_document_highlights_response = 36;
  53        GetProjectSymbols get_project_symbols = 37;
  54        GetProjectSymbolsResponse get_project_symbols_response = 38;
  55        OpenBufferForSymbol open_buffer_for_symbol = 39;
  56        OpenBufferForSymbolResponse open_buffer_for_symbol_response = 40;
  57
  58        UpdateProject update_project = 41;
  59        UpdateWorktree update_worktree = 43;
  60
  61        CreateProjectEntry create_project_entry = 45;
  62        RenameProjectEntry rename_project_entry = 46;
  63        CopyProjectEntry copy_project_entry = 47;
  64        DeleteProjectEntry delete_project_entry = 48;
  65        ProjectEntryResponse project_entry_response = 49;
  66
  67        UpdateDiagnosticSummary update_diagnostic_summary = 50;
  68        StartLanguageServer start_language_server = 51;
  69        UpdateLanguageServer update_language_server = 52;
  70
  71        OpenBufferById open_buffer_by_id = 53;
  72        OpenBufferByPath open_buffer_by_path = 54;
  73        OpenBufferResponse open_buffer_response = 55;
  74        CreateBufferForPeer create_buffer_for_peer = 56;
  75        UpdateBuffer update_buffer = 57;
  76        UpdateBufferFile update_buffer_file = 58;
  77        SaveBuffer save_buffer = 59;
  78        BufferSaved buffer_saved = 60;
  79        BufferReloaded buffer_reloaded = 61;
  80        ReloadBuffers reload_buffers = 62;
  81        ReloadBuffersResponse reload_buffers_response = 63;
  82        SynchronizeBuffers synchronize_buffers = 200;
  83        SynchronizeBuffersResponse synchronize_buffers_response = 201;
  84        FormatBuffers format_buffers = 64;
  85        FormatBuffersResponse format_buffers_response = 65;
  86        GetCompletions get_completions = 66;
  87        GetCompletionsResponse get_completions_response = 67;
  88        ApplyCompletionAdditionalEdits apply_completion_additional_edits = 68;
  89        ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 69;
  90        GetCodeActions get_code_actions = 70;
  91        GetCodeActionsResponse get_code_actions_response = 71;
  92        GetHover get_hover = 72;
  93        GetHoverResponse get_hover_response = 73;
  94        ApplyCodeAction apply_code_action = 74;
  95        ApplyCodeActionResponse apply_code_action_response = 75;
  96        PrepareRename prepare_rename = 76;
  97        PrepareRenameResponse prepare_rename_response = 77;
  98        PerformRename perform_rename = 78;
  99        PerformRenameResponse perform_rename_response = 79;
 100        SearchProject search_project = 80;
 101        SearchProjectResponse search_project_response = 81;
 102
 103        GetChannels get_channels = 82;
 104        GetChannelsResponse get_channels_response = 83;
 105        JoinChannel join_channel = 84;
 106        JoinChannelResponse join_channel_response = 85;
 107        LeaveChannel leave_channel = 86;
 108        SendChannelMessage send_channel_message = 87;
 109        SendChannelMessageResponse send_channel_message_response = 88;
 110        ChannelMessageSent channel_message_sent = 89;
 111        GetChannelMessages get_channel_messages = 90;
 112        GetChannelMessagesResponse get_channel_messages_response = 91;
 113
 114        UpdateContacts update_contacts = 92;
 115        UpdateInviteInfo update_invite_info = 93;
 116        ShowContacts show_contacts = 94;
 117
 118        GetUsers get_users = 95;
 119        FuzzySearchUsers fuzzy_search_users = 96;
 120        UsersResponse users_response = 97;
 121        RequestContact request_contact = 98;
 122        RespondToContactRequest respond_to_contact_request = 99;
 123        RemoveContact remove_contact = 100;
 124
 125        Follow follow = 101;
 126        FollowResponse follow_response = 102;
 127        UpdateFollowers update_followers = 103;
 128        Unfollow unfollow = 104;
 129        GetPrivateUserInfo get_private_user_info = 105;
 130        GetPrivateUserInfoResponse get_private_user_info_response = 106;
 131        UpdateDiffBase update_diff_base = 107;
 132    }
 133}
 134
 135// Messages
 136
 137message Hello {
 138    PeerId peer_id = 1;
 139}
 140
 141message Ping {}
 142
 143message Ack {}
 144
 145message Error {
 146    string message = 1;
 147}
 148
 149message Test {
 150    uint64 id = 1;
 151}
 152
 153message CreateRoom {}
 154
 155message CreateRoomResponse {
 156    Room room = 1;
 157    optional LiveKitConnectionInfo live_kit_connection_info = 2;
 158}
 159
 160message JoinRoom {
 161    uint64 id = 1;
 162}
 163
 164message JoinRoomResponse {
 165    Room room = 1;
 166    optional LiveKitConnectionInfo live_kit_connection_info = 2;
 167}
 168
 169message RejoinRoom {
 170    uint64 id = 1;
 171    repeated UpdateProject reshared_projects = 2;
 172    repeated RejoinProject rejoined_projects = 3;
 173}
 174
 175message RejoinProject {
 176    uint64 id = 1;
 177    repeated RejoinWorktree worktrees = 2;
 178}
 179
 180message RejoinWorktree {
 181    uint64 id = 1;
 182    uint64 scan_id = 2;
 183}
 184
 185message RejoinRoomResponse {
 186    Room room = 1;
 187    repeated ResharedProject reshared_projects = 2;
 188    repeated RejoinedProject rejoined_projects = 3;
 189}
 190
 191message ResharedProject {
 192    uint64 id = 1;
 193    repeated Collaborator collaborators = 2;
 194}
 195
 196message RejoinedProject {
 197    uint64 id = 1;
 198    repeated WorktreeMetadata worktrees = 2;
 199    repeated Collaborator collaborators = 3;
 200    repeated LanguageServer language_servers = 4;
 201}
 202
 203message LeaveRoom {}
 204
 205message Room {
 206    uint64 id = 1;
 207    repeated Participant participants = 2;
 208    repeated PendingParticipant pending_participants = 3;
 209    string live_kit_room = 4;
 210}
 211
 212message Participant {
 213    uint64 user_id = 1;
 214    PeerId peer_id = 2;
 215    repeated ParticipantProject projects = 3;
 216    ParticipantLocation location = 4;
 217}
 218
 219message PendingParticipant {
 220    uint64 user_id = 1;
 221    uint64 calling_user_id = 2;
 222    optional uint64 initial_project_id = 3;
 223}
 224
 225message ParticipantProject {
 226    uint64 id = 1;
 227    repeated string worktree_root_names = 2;
 228}
 229
 230message ParticipantLocation {
 231    oneof variant {
 232        SharedProject shared_project = 1;
 233        UnsharedProject unshared_project = 2;
 234        External external = 3;
 235    }
 236    
 237    message SharedProject {
 238        uint64 id = 1;
 239    }
 240    
 241    message UnsharedProject {}
 242    
 243    message External {}
 244}
 245
 246message Call {
 247    uint64 room_id = 1;
 248    uint64 called_user_id = 2;
 249    optional uint64 initial_project_id = 3;
 250}
 251
 252message IncomingCall {
 253    uint64 room_id = 1;
 254    uint64 calling_user_id = 2;
 255    repeated uint64 participant_user_ids = 3;
 256    optional ParticipantProject initial_project = 4;
 257}
 258
 259message CallCanceled {
 260    uint64 room_id = 1;
 261}
 262
 263message CancelCall {
 264    uint64 room_id = 1;
 265    uint64 called_user_id = 2;
 266}
 267
 268message DeclineCall {
 269    uint64 room_id = 1;
 270}
 271
 272message UpdateParticipantLocation {
 273    uint64 room_id = 1;
 274    ParticipantLocation location = 2;
 275}
 276
 277message RoomUpdated {
 278    Room room = 1;
 279}
 280
 281message LiveKitConnectionInfo {
 282    string server_url = 1;
 283    string token = 2;
 284}
 285
 286message ShareProject {
 287    uint64 room_id = 1;
 288    repeated WorktreeMetadata worktrees = 2;
 289}
 290
 291message ShareProjectResponse {
 292    uint64 project_id = 1;
 293}
 294
 295message UnshareProject {
 296    uint64 project_id = 1;
 297}
 298
 299message UpdateProject {
 300    uint64 project_id = 1;
 301    repeated WorktreeMetadata worktrees = 2;
 302}
 303
 304message JoinProject {
 305    uint64 project_id = 1;
 306}
 307
 308message JoinProjectResponse {
 309    uint32 replica_id = 1;
 310    repeated WorktreeMetadata worktrees = 2;
 311    repeated Collaborator collaborators = 3;
 312    repeated LanguageServer language_servers = 4;
 313}
 314
 315message LeaveProject {
 316    uint64 project_id = 1;
 317}
 318
 319message UpdateWorktree {
 320    uint64 project_id = 1;
 321    uint64 worktree_id = 2;
 322    string root_name = 3;
 323    repeated Entry updated_entries = 4;
 324    repeated uint64 removed_entries = 5;
 325    uint64 scan_id = 6;
 326    bool is_last_update = 7;
 327    string abs_path = 8;
 328}
 329
 330message CreateProjectEntry {
 331    uint64 project_id = 1;
 332    uint64 worktree_id = 2;
 333    string path = 3;
 334    bool is_directory = 4;
 335}
 336
 337message RenameProjectEntry {
 338    uint64 project_id = 1;
 339    uint64 entry_id = 2;
 340    string new_path = 3;
 341}
 342
 343message CopyProjectEntry {
 344    uint64 project_id = 1;
 345    uint64 entry_id = 2;
 346    string new_path = 3;
 347}
 348
 349message DeleteProjectEntry {
 350    uint64 project_id = 1;
 351    uint64 entry_id = 2;
 352}
 353
 354message ProjectEntryResponse {
 355    Entry entry = 1;
 356    uint64 worktree_scan_id = 2;
 357}
 358
 359message AddProjectCollaborator {
 360    uint64 project_id = 1;
 361    Collaborator collaborator = 2;
 362}
 363
 364message UpdateProjectCollaborator {
 365    uint64 project_id = 1;
 366    PeerId old_peer_id = 2;
 367    PeerId new_peer_id = 3;
 368}
 369
 370message RemoveProjectCollaborator {
 371    uint64 project_id = 1;
 372    PeerId peer_id = 2;
 373}
 374
 375message GetDefinition {
 376     uint64 project_id = 1;
 377     uint64 buffer_id = 2;
 378     Anchor position = 3;
 379     repeated VectorClockEntry version = 4;
 380 }
 381
 382message GetDefinitionResponse {
 383    repeated LocationLink links = 1;
 384}
 385
 386message GetTypeDefinition {
 387     uint64 project_id = 1;
 388     uint64 buffer_id = 2;
 389     Anchor position = 3;
 390     repeated VectorClockEntry version = 4;
 391 }
 392
 393message GetTypeDefinitionResponse {
 394    repeated LocationLink links = 1;
 395}
 396
 397message GetReferences {
 398     uint64 project_id = 1;
 399     uint64 buffer_id = 2;
 400     Anchor position = 3;
 401     repeated VectorClockEntry version = 4;
 402 }
 403
 404message GetReferencesResponse {
 405    repeated Location locations = 1;
 406}
 407
 408message GetDocumentHighlights {
 409     uint64 project_id = 1;
 410     uint64 buffer_id = 2;
 411     Anchor position = 3;
 412     repeated VectorClockEntry version = 4;
 413 }
 414
 415message GetDocumentHighlightsResponse {
 416    repeated DocumentHighlight highlights = 1;
 417}
 418
 419message Location {
 420    uint64 buffer_id = 1;
 421    Anchor start = 2;
 422    Anchor end = 3;
 423}
 424
 425message LocationLink {
 426    optional Location origin = 1;
 427    Location target = 2;
 428}
 429
 430message DocumentHighlight {
 431    Kind kind = 1;
 432    Anchor start = 2;
 433    Anchor end = 3;
 434
 435    enum Kind {
 436        Text = 0;
 437        Read = 1;
 438        Write = 2;
 439    }
 440}
 441
 442message GetProjectSymbols {
 443    uint64 project_id = 1;
 444    string query = 2;
 445}
 446
 447message GetProjectSymbolsResponse {
 448    repeated Symbol symbols = 4;
 449}
 450
 451message Symbol {
 452    uint64 source_worktree_id = 1;
 453    uint64 worktree_id = 2;
 454    string language_server_name = 3;
 455    string name = 4;
 456    int32 kind = 5;
 457    string path = 6;
 458    // Cannot use generate anchors for unopend files,
 459    // so we are forced to use point coords instead
 460    PointUtf16 start = 7;
 461    PointUtf16 end = 8;
 462    bytes signature = 9;
 463}
 464
 465message OpenBufferForSymbol {
 466    uint64 project_id = 1;
 467    Symbol symbol = 2;
 468}
 469
 470message OpenBufferForSymbolResponse {
 471    uint64 buffer_id = 1;
 472}
 473
 474message OpenBufferByPath {
 475    uint64 project_id = 1;
 476    uint64 worktree_id = 2;
 477    string path = 3;
 478}
 479
 480message OpenBufferById {
 481    uint64 project_id = 1;
 482    uint64 id = 2;
 483}
 484
 485message OpenBufferResponse {
 486    uint64 buffer_id = 1;
 487}
 488
 489message CreateBufferForPeer {
 490    uint64 project_id = 1;
 491    PeerId peer_id = 2;
 492    oneof variant {
 493        BufferState state = 3;
 494        BufferChunk chunk = 4;
 495    }
 496}
 497
 498message UpdateBuffer {
 499    uint64 project_id = 1;
 500    uint64 buffer_id = 2;
 501    repeated Operation operations = 3;
 502}
 503
 504message UpdateBufferFile {
 505    uint64 project_id = 1;
 506    uint64 buffer_id = 2;
 507    File file = 3;
 508}
 509
 510message SaveBuffer {
 511    uint64 project_id = 1;
 512    uint64 buffer_id = 2;
 513    repeated VectorClockEntry version = 3;
 514}
 515
 516message BufferSaved {
 517    uint64 project_id = 1;
 518    uint64 buffer_id = 2;
 519    repeated VectorClockEntry version = 3;
 520    Timestamp mtime = 4;
 521    string fingerprint = 5;
 522}
 523
 524message BufferReloaded {
 525    uint64 project_id = 1;
 526    uint64 buffer_id = 2;
 527    repeated VectorClockEntry version = 3;
 528    Timestamp mtime = 4;
 529    string fingerprint = 5;
 530    LineEnding line_ending = 6;
 531}
 532
 533message ReloadBuffers {
 534    uint64 project_id = 1;
 535    repeated uint64 buffer_ids = 2;
 536}
 537
 538message ReloadBuffersResponse {
 539    ProjectTransaction transaction = 1;
 540}
 541
 542message SynchronizeBuffers {
 543    uint64 project_id = 1;
 544    repeated BufferVersion buffers = 2;
 545}
 546
 547message SynchronizeBuffersResponse {
 548    repeated BufferVersion buffers = 1;
 549}
 550
 551message BufferVersion {
 552    uint64 id = 1;
 553    repeated VectorClockEntry version = 2;
 554}
 555
 556enum FormatTrigger {
 557    Save = 0;
 558    Manual = 1;
 559}
 560
 561message FormatBuffers {
 562    uint64 project_id = 1;
 563    FormatTrigger trigger = 2;
 564    repeated uint64 buffer_ids = 3;
 565}
 566
 567message FormatBuffersResponse {
 568    ProjectTransaction transaction = 1;
 569}
 570
 571message GetCompletions {
 572    uint64 project_id = 1;
 573    uint64 buffer_id = 2;
 574    Anchor position = 3;
 575    repeated VectorClockEntry version = 4;
 576}
 577
 578message GetCompletionsResponse {
 579    repeated Completion completions = 1;
 580    repeated VectorClockEntry version = 2;
 581}
 582
 583message ApplyCompletionAdditionalEdits {
 584    uint64 project_id = 1;
 585    uint64 buffer_id = 2;
 586    Completion completion = 3;
 587}
 588
 589message ApplyCompletionAdditionalEditsResponse {
 590    Transaction transaction = 1;
 591}
 592
 593message Completion {
 594    Anchor old_start = 1;
 595    Anchor old_end = 2;
 596    string new_text = 3;
 597    bytes lsp_completion = 4;
 598}
 599
 600message GetCodeActions {
 601    uint64 project_id = 1;
 602    uint64 buffer_id = 2;
 603    Anchor start = 3;
 604    Anchor end = 4;
 605    repeated VectorClockEntry version = 5;
 606}
 607
 608message GetCodeActionsResponse {
 609    repeated CodeAction actions = 1;
 610    repeated VectorClockEntry version = 2;
 611}
 612
 613message GetHover {
 614    uint64 project_id = 1;
 615    uint64 buffer_id = 2;
 616    Anchor position = 3;
 617    repeated VectorClockEntry version = 5;
 618}
 619
 620message GetHoverResponse {
 621    optional Anchor start = 1;
 622    optional Anchor end = 2;
 623    repeated HoverBlock contents = 3;
 624}
 625
 626message HoverBlock {
 627    string text = 1;
 628    optional string language = 2;
 629}
 630
 631message ApplyCodeAction {
 632    uint64 project_id = 1;
 633    uint64 buffer_id = 2;
 634    CodeAction action = 3;
 635}
 636
 637message ApplyCodeActionResponse {
 638    ProjectTransaction transaction = 1;
 639}
 640
 641message PrepareRename {
 642    uint64 project_id = 1;
 643    uint64 buffer_id = 2;
 644    Anchor position = 3;
 645    repeated VectorClockEntry version = 4;
 646}
 647
 648message PrepareRenameResponse {
 649    bool can_rename = 1;
 650    Anchor start = 2;
 651    Anchor end = 3;
 652    repeated VectorClockEntry version = 4;
 653}
 654
 655message PerformRename {
 656    uint64 project_id = 1;
 657    uint64 buffer_id = 2;
 658    Anchor position = 3;
 659    string new_name = 4;
 660    repeated VectorClockEntry version = 5;
 661}
 662
 663message PerformRenameResponse {
 664    ProjectTransaction transaction = 2;
 665}
 666
 667message SearchProject {
 668    uint64 project_id = 1;
 669    string query = 2;
 670    bool regex = 3;
 671    bool whole_word = 4;
 672    bool case_sensitive = 5;
 673}
 674
 675message SearchProjectResponse {
 676    repeated Location locations = 1;
 677}
 678
 679message CodeAction {
 680    Anchor start = 1;
 681    Anchor end = 2;
 682    bytes lsp_action = 3;
 683}
 684
 685message ProjectTransaction {
 686    repeated uint64 buffer_ids = 1;
 687    repeated Transaction transactions = 2;
 688}
 689
 690message Transaction {
 691    LocalTimestamp id = 1;
 692    repeated LocalTimestamp edit_ids = 2;
 693    repeated VectorClockEntry start = 3;
 694}
 695
 696message LocalTimestamp {
 697    uint32 replica_id = 1;
 698    uint32 value = 2;
 699}
 700
 701message LanguageServer {
 702    uint64 id = 1;
 703    string name = 2;
 704}
 705
 706message StartLanguageServer {
 707    uint64 project_id = 1;
 708    LanguageServer server = 2;
 709}
 710
 711message UpdateDiagnosticSummary {
 712    uint64 project_id = 1;
 713    uint64 worktree_id = 2;
 714    DiagnosticSummary summary = 3;
 715}
 716
 717message DiagnosticSummary {
 718    string path = 1;
 719    uint64 language_server_id = 2;
 720    uint32 error_count = 3;
 721    uint32 warning_count = 4;
 722}
 723
 724message UpdateLanguageServer {
 725    uint64 project_id = 1;
 726    uint64 language_server_id = 2;
 727    oneof variant {
 728        LspWorkStart work_start = 3;
 729        LspWorkProgress work_progress = 4;
 730        LspWorkEnd work_end = 5;
 731        LspDiskBasedDiagnosticsUpdating disk_based_diagnostics_updating = 6;
 732        LspDiskBasedDiagnosticsUpdated disk_based_diagnostics_updated = 7;
 733    }
 734}
 735
 736message LspWorkStart {
 737    string token = 1;
 738    optional string message = 2;
 739    optional uint32 percentage = 3;
 740}
 741
 742message LspWorkProgress {
 743    string token = 1;
 744    optional string message = 2;
 745    optional uint32 percentage = 3;
 746}
 747
 748message LspWorkEnd {
 749    string token = 1;
 750}
 751
 752message LspDiskBasedDiagnosticsUpdating {}
 753
 754message LspDiskBasedDiagnosticsUpdated {}
 755
 756message GetChannels {}
 757
 758message GetChannelsResponse {
 759    repeated Channel channels = 1;
 760}
 761
 762message JoinChannel {
 763    uint64 channel_id = 1;
 764}
 765
 766message JoinChannelResponse {
 767    repeated ChannelMessage messages = 1;
 768    bool done = 2;
 769}
 770
 771message LeaveChannel {
 772    uint64 channel_id = 1;
 773}
 774
 775message GetUsers {
 776    repeated uint64 user_ids = 1;
 777}
 778
 779message FuzzySearchUsers {
 780    string query = 1;
 781}
 782
 783message UsersResponse {
 784    repeated User users = 1;
 785}
 786
 787message RequestContact {
 788    uint64 responder_id = 1;
 789}
 790
 791message RemoveContact {
 792    uint64 user_id = 1;
 793}
 794
 795message RespondToContactRequest {
 796    uint64 requester_id = 1;
 797    ContactRequestResponse response = 2;
 798}
 799
 800enum ContactRequestResponse {
 801    Accept = 0;
 802    Decline = 1;
 803    Block = 2;
 804    Dismiss = 3;
 805}
 806
 807message SendChannelMessage {
 808    uint64 channel_id = 1;
 809    string body = 2;
 810    Nonce nonce = 3;
 811}
 812
 813message SendChannelMessageResponse {
 814    ChannelMessage message = 1;
 815}
 816
 817message ChannelMessageSent {
 818    uint64 channel_id = 1;
 819    ChannelMessage message = 2;
 820}
 821
 822message GetChannelMessages {
 823    uint64 channel_id = 1;
 824    uint64 before_message_id = 2;
 825}
 826
 827message GetChannelMessagesResponse {
 828    repeated ChannelMessage messages = 1;
 829    bool done = 2;
 830}
 831
 832message UpdateContacts {
 833    repeated Contact contacts = 1;
 834    repeated uint64 remove_contacts = 2;
 835    repeated IncomingContactRequest incoming_requests = 3;
 836    repeated uint64 remove_incoming_requests = 4;
 837    repeated uint64 outgoing_requests = 5;
 838    repeated uint64 remove_outgoing_requests = 6;
 839}
 840
 841message UpdateInviteInfo {
 842    string url = 1;
 843    uint32 count = 2;
 844}
 845
 846message ShowContacts {}
 847
 848message IncomingContactRequest {
 849    uint64 requester_id = 1;
 850    bool should_notify = 2;
 851}
 852
 853message UpdateDiagnostics {
 854    uint32 replica_id = 1;
 855    uint32 lamport_timestamp = 2;
 856    repeated Diagnostic diagnostics = 3;
 857}
 858
 859message Follow {
 860    uint64 project_id = 1;
 861    PeerId leader_id = 2;
 862}
 863
 864message FollowResponse {
 865    optional ViewId active_view_id = 1;
 866    repeated View views = 2;
 867}
 868
 869message UpdateFollowers {
 870    uint64 project_id = 1;
 871    repeated PeerId follower_ids = 2;
 872    oneof variant {
 873        UpdateActiveView update_active_view = 3;
 874        View create_view = 4;
 875        UpdateView update_view = 5;
 876    }
 877}
 878
 879message Unfollow {
 880    uint64 project_id = 1;
 881    PeerId leader_id = 2;
 882}
 883
 884message GetPrivateUserInfo {}
 885
 886message GetPrivateUserInfoResponse {
 887    string metrics_id = 1;
 888    bool staff = 2;
 889}
 890
 891// Entities
 892
 893message ViewId {
 894    PeerId creator = 1;
 895    uint64 id = 2;
 896}
 897
 898message UpdateActiveView {
 899    optional ViewId id = 1;
 900    optional PeerId leader_id = 2;
 901}
 902
 903message UpdateView {
 904    ViewId id = 1;
 905    optional PeerId leader_id = 2;
 906
 907    oneof variant {
 908        Editor editor = 3;
 909    }
 910
 911    message Editor {
 912        repeated ExcerptInsertion inserted_excerpts = 1;
 913        repeated uint64 deleted_excerpts = 2;
 914        repeated Selection selections = 3;
 915        optional Selection pending_selection = 4;
 916        EditorAnchor scroll_top_anchor = 5;
 917        float scroll_x = 6;
 918        float scroll_y = 7;
 919    }
 920}
 921
 922message View {
 923    ViewId id = 1;
 924    optional PeerId leader_id = 2;
 925
 926    oneof variant {
 927        Editor editor = 3;
 928    }
 929
 930    message Editor {
 931        bool singleton = 1;
 932        optional string title = 2;
 933        repeated Excerpt excerpts = 3;
 934        repeated Selection selections = 4;
 935        optional Selection pending_selection = 5;
 936        EditorAnchor scroll_top_anchor = 6;
 937        float scroll_x = 7;
 938        float scroll_y = 8;
 939    }
 940}
 941
 942message Collaborator {
 943    PeerId peer_id = 1;
 944    uint32 replica_id = 2;
 945    uint64 user_id = 3;
 946}
 947
 948message User {
 949    uint64 id = 1;
 950    string github_login = 2;
 951    string avatar_url = 3;
 952}
 953
 954message File {
 955    uint64 worktree_id = 1;
 956    uint64 entry_id = 2;
 957    string path = 3;
 958    Timestamp mtime = 4;
 959    bool is_deleted = 5;
 960}
 961
 962message Entry {
 963    uint64 id = 1;
 964    bool is_dir = 2;
 965    string path = 3;
 966    uint64 inode = 4;
 967    Timestamp mtime = 5;
 968    bool is_symlink = 6;
 969    bool is_ignored = 7;
 970}
 971
 972message BufferState {
 973    uint64 id = 1;
 974    optional File file = 2;
 975    string base_text = 3;
 976    optional string diff_base = 4;
 977    LineEnding line_ending = 5;
 978    repeated VectorClockEntry saved_version = 6;
 979    string saved_version_fingerprint = 7;
 980    Timestamp saved_mtime = 8;
 981}
 982
 983message BufferChunk {
 984    uint64 buffer_id = 1;
 985    repeated Operation operations = 2;
 986    bool is_last = 3;
 987}
 988
 989enum LineEnding {
 990    Unix = 0;
 991    Windows = 1;
 992}
 993
 994message Selection {
 995    uint64 id = 1;
 996    EditorAnchor start = 2;
 997    EditorAnchor end = 3;
 998    bool reversed = 4;
 999}
1000
1001message EditorAnchor {
1002    uint64 excerpt_id = 1;
1003    Anchor anchor = 2;
1004}
1005
1006enum CursorShape {
1007    CursorBar = 0;
1008    CursorBlock = 1;
1009    CursorUnderscore = 2;
1010    CursorHollow = 3;
1011}
1012
1013message ExcerptInsertion {
1014    Excerpt excerpt = 1;
1015    optional uint64 previous_excerpt_id = 2;
1016}
1017
1018message Excerpt {
1019    uint64 id = 1;
1020    uint64 buffer_id = 2;
1021    Anchor context_start = 3;
1022    Anchor context_end = 4;
1023    Anchor primary_start = 5;
1024    Anchor primary_end = 6;
1025}
1026
1027message Anchor {
1028    uint32 replica_id = 1;
1029    uint32 local_timestamp = 2;
1030    uint64 offset = 3;
1031    Bias bias = 4;
1032    optional uint64 buffer_id = 5;
1033}
1034
1035enum Bias {
1036    Left = 0;
1037    Right = 1;
1038}
1039
1040message Diagnostic {
1041    Anchor start = 1;
1042    Anchor end = 2;
1043    Severity severity = 3;
1044    string message = 4;
1045    optional string code = 5;
1046    uint64 group_id = 6;
1047    bool is_primary = 7;
1048    bool is_valid = 8;
1049    bool is_disk_based = 9;
1050    bool is_unnecessary = 10;
1051
1052    enum Severity {
1053        None = 0;
1054        Error = 1;
1055        Warning = 2;
1056        Information = 3;
1057        Hint = 4;
1058    }
1059}
1060
1061message Operation {
1062    oneof variant {
1063        Edit edit = 1;
1064        Undo undo = 2;
1065        UpdateSelections update_selections = 3;
1066        UpdateDiagnostics update_diagnostics = 4;
1067        UpdateCompletionTriggers update_completion_triggers = 5;
1068    }
1069
1070    message Edit {
1071        uint32 replica_id = 1;
1072        uint32 local_timestamp = 2;
1073        uint32 lamport_timestamp = 3;
1074        repeated VectorClockEntry version = 4;
1075        repeated Range ranges = 5;
1076        repeated string new_text = 6;
1077    }
1078
1079    message Undo {
1080        uint32 replica_id = 1;
1081        uint32 local_timestamp = 2;
1082        uint32 lamport_timestamp = 3;
1083        repeated VectorClockEntry version = 4;
1084        repeated UndoCount counts = 5;
1085    }
1086
1087    message UpdateSelections {
1088        uint32 replica_id = 1;
1089        uint32 lamport_timestamp = 2;
1090        repeated Selection selections = 3;
1091        bool line_mode = 4;
1092        CursorShape cursor_shape = 5;
1093    }
1094
1095    message UpdateCompletionTriggers {
1096        uint32 replica_id = 1;
1097        uint32 lamport_timestamp = 2;
1098        repeated string triggers = 3;
1099    }
1100}
1101
1102message UndoMapEntry {
1103    uint32 replica_id = 1;
1104    uint32 local_timestamp = 2;
1105    repeated UndoCount counts = 3;
1106}
1107
1108message UndoCount {
1109    uint32 replica_id = 1;
1110    uint32 local_timestamp = 2;
1111    uint32 count = 3;
1112}
1113
1114message VectorClockEntry {
1115    uint32 replica_id = 1;
1116    uint32 timestamp = 2;
1117}
1118
1119message Timestamp {
1120    uint64 seconds = 1;
1121    uint32 nanos = 2;
1122}
1123
1124message Range {
1125    uint64 start = 1;
1126    uint64 end = 2;
1127}
1128
1129message PointUtf16 {
1130    uint32 row = 1;
1131    uint32 column = 2;
1132}
1133
1134message Nonce {
1135    uint64 upper_half = 1;
1136    uint64 lower_half = 2;
1137}
1138
1139message Channel {
1140    uint64 id = 1;
1141    string name = 2;
1142}
1143
1144message ChannelMessage {
1145    uint64 id = 1;
1146    string body = 2;
1147    uint64 timestamp = 3;
1148    uint64 sender_id = 4;
1149    Nonce nonce = 5;
1150}
1151
1152message Contact {
1153    uint64 user_id = 1;
1154    bool online = 2;
1155    bool busy = 3;
1156    bool should_notify = 4;
1157}
1158
1159message WorktreeMetadata {
1160    uint64 id = 1;
1161    string root_name = 2;
1162    bool visible = 3;
1163    string abs_path = 4;
1164}
1165
1166message UpdateDiffBase {
1167    uint64 project_id = 1;
1168    uint64 buffer_id = 2;
1169    optional string diff_base = 3;
1170}