syntax = "proto3"; package zed.messages; message Envelope { uint32 id = 1; optional uint32 responding_to = 2; optional uint32 original_sender_id = 3; oneof payload { Auth auth = 4; AuthResponse auth_response = 5; ShareWorktree share_worktree = 6; ShareWorktreeResponse share_worktree_response = 7; OpenWorktree open_worktree = 8; OpenWorktreeResponse open_worktree_response = 9; OpenBuffer open_buffer = 10; OpenBufferResponse open_buffer_response = 11; CloseBuffer close_buffer = 12; UpdateBuffer update_buffer = 13; RemoveGuest remove_guest = 14; } } message Auth { int32 user_id = 1; string access_token = 2; } message AuthResponse { bool credentials_valid = 1; } message ShareWorktree { Worktree worktree = 1; } message ShareWorktreeResponse { uint64 worktree_id = 1; string access_token = 2; } message OpenWorktree { uint64 worktree_id = 1; string access_token = 2; } message OpenWorktreeResponse { Worktree worktree = 1; optional uint32 replica_id = 2; } message AddGuest { uint64 worktree_id = 1; uint32 replica_id = 2; User user = 3; } message RemoveGuest { uint64 worktree_id = 1; uint32 peer_id = 2; uint32 replica_id = 3; } message OpenBuffer { uint64 worktree_id = 1; string path = 2; } message OpenBufferResponse { Buffer buffer = 1; } message CloseBuffer { uint64 worktree_id = 1; uint64 buffer_id = 2; } message UpdateBuffer { uint64 worktree_id = 1; uint64 buffer_id = 2; repeated Operation operations = 3; } message User { uint64 id = 1; string github_login = 2; string avatar_url = 3; } message Worktree { string root_name = 1; repeated Entry entries = 2; } message Entry { bool is_dir = 1; string path = 2; uint64 inode = 3; Timestamp mtime = 4; bool is_symlink = 5; bool is_ignored = 6; } message Buffer { uint64 id = 1; string content = 2; repeated Operation.Edit history = 3; } message Selection { uint64 id = 1; Anchor start = 2; Anchor end = 3; bool reversed = 4; } message Anchor { repeated VectorClockEntry version = 1; uint64 offset = 2; Bias bias = 3; enum Bias { LEFT = 0; Right = 1; } } message Operation { oneof variant { Edit edit = 1; Undo undo = 2; UpdateSelections update_selections = 3; SetActiveSelections set_active_selections = 4; } message Edit { uint32 replica_id = 1; uint32 local_timestamp = 2; uint32 lamport_timestamp = 3; repeated VectorClockEntry version = 4; repeated Range ranges = 5; optional string new_text = 6; } message Undo { uint32 replica_id = 1; uint32 local_timestamp = 2; uint32 lamport_timestamp = 3; uint32 edit_replica_id = 4; uint32 edit_local_timestamp = 5; uint32 count = 6; } message UpdateSelections { uint32 replica_id = 1; uint32 local_timestamp = 2; uint32 lamport_timestamp = 3; repeated Selection selections = 4; } message SetActiveSelections { uint32 replica_id = 1; optional uint32 local_timestamp = 2; uint32 lamport_timestamp = 3; } } message VectorClockEntry { uint32 replica_id = 1; uint32 timestamp = 2; } message Timestamp { uint64 seconds = 1; uint32 nanos = 2; } message Range { uint64 start = 1; uint64 end = 2; }