diff --git a/crates/proto/proto/ai.proto b/crates/proto/proto/ai.proto new file mode 100644 index 0000000000..6b6b33df59 --- /dev/null +++ b/crates/proto/proto/ai.proto @@ -0,0 +1,213 @@ +syntax = "proto3"; +package zed.messages; + +import "buffer.proto"; + +message Context { + repeated ContextOperation operations = 1; +} + +message ContextMetadata { + string context_id = 1; + optional string summary = 2; +} + +message ContextMessageStatus { + oneof variant { + Done done = 1; + Pending pending = 2; + Error error = 3; + Canceled canceled = 4; + } + + message Done {} + + message Pending {} + + message Error { + string message = 1; + } + + message Canceled {} +} + +message ContextMessage { + LamportTimestamp id = 1; + Anchor start = 2; + LanguageModelRole role = 3; + ContextMessageStatus status = 4; +} + +message SlashCommandOutputSection { + AnchorRange range = 1; + string icon_name = 2; + string label = 3; + optional string metadata = 4; +} + +message ThoughtProcessOutputSection { + AnchorRange range = 1; +} + +message ContextOperation { + oneof variant { + InsertMessage insert_message = 1; + UpdateMessage update_message = 2; + UpdateSummary update_summary = 3; + BufferOperation buffer_operation = 5; + SlashCommandStarted slash_command_started = 6; + SlashCommandOutputSectionAdded slash_command_output_section_added = 7; + SlashCommandCompleted slash_command_completed = 8; + ThoughtProcessOutputSectionAdded thought_process_output_section_added = 9; + } + + reserved 4; + + message InsertMessage { + ContextMessage message = 1; + repeated VectorClockEntry version = 2; + } + + message UpdateMessage { + LamportTimestamp message_id = 1; + LanguageModelRole role = 2; + ContextMessageStatus status = 3; + LamportTimestamp timestamp = 4; + repeated VectorClockEntry version = 5; + } + + message UpdateSummary { + string summary = 1; + bool done = 2; + LamportTimestamp timestamp = 3; + repeated VectorClockEntry version = 4; + } + + message SlashCommandStarted { + LamportTimestamp id = 1; + AnchorRange output_range = 2; + string name = 3; + repeated VectorClockEntry version = 4; + } + + message SlashCommandOutputSectionAdded { + LamportTimestamp timestamp = 1; + SlashCommandOutputSection section = 2; + repeated VectorClockEntry version = 3; + } + + message SlashCommandCompleted { + LamportTimestamp id = 1; + LamportTimestamp timestamp = 3; + optional string error_message = 4; + repeated VectorClockEntry version = 5; + } + + message ThoughtProcessOutputSectionAdded { + LamportTimestamp timestamp = 1; + ThoughtProcessOutputSection section = 2; + repeated VectorClockEntry version = 3; + } + + message BufferOperation { + Operation operation = 1; + } +} + +message AdvertiseContexts { + uint64 project_id = 1; + repeated ContextMetadata contexts = 2; +} + +message OpenContext { + uint64 project_id = 1; + string context_id = 2; +} + +message OpenContextResponse { + Context context = 1; +} + +message CreateContext { + uint64 project_id = 1; +} + +message CreateContextResponse { + string context_id = 1; + Context context = 2; +} + +message UpdateContext { + uint64 project_id = 1; + string context_id = 2; + ContextOperation operation = 3; +} + +message ContextVersion { + string context_id = 1; + repeated VectorClockEntry context_version = 2; + repeated VectorClockEntry buffer_version = 3; +} + +message SynchronizeContexts { + uint64 project_id = 1; + repeated ContextVersion contexts = 2; +} + +message SynchronizeContextsResponse { + repeated ContextVersion contexts = 1; +} + +message GetLlmToken {} + +message GetLlmTokenResponse { + string token = 1; +} + +message RefreshLlmToken {} + +enum LanguageModelRole { + LanguageModelUser = 0; + LanguageModelAssistant = 1; + LanguageModelSystem = 2; + reserved 3; +} + +message CountLanguageModelTokens { + LanguageModelProvider provider = 1; + string request = 2; +} + +message CountLanguageModelTokensResponse { + uint32 token_count = 1; +} + +enum LanguageModelProvider { + Anthropic = 0; + OpenAI = 1; + Google = 2; + Zed = 3; +} + +message GetCachedEmbeddings { + string model = 1; + repeated bytes digests = 2; +} + +message GetCachedEmbeddingsResponse { + repeated Embedding embeddings = 1; +} + +message ComputeEmbeddings { + string model = 1; + repeated string texts = 2; +} + +message ComputeEmbeddingsResponse { + repeated Embedding embeddings = 1; +} + +message Embedding { + bytes digest = 1; + repeated float dimensions = 2; +} diff --git a/crates/proto/proto/app.proto b/crates/proto/proto/app.proto new file mode 100644 index 0000000000..8fee405070 --- /dev/null +++ b/crates/proto/proto/app.proto @@ -0,0 +1,93 @@ +syntax = "proto3"; +package zed.messages; + +message UpdateInviteInfo { + string url = 1; + uint32 count = 2; +} + +message GetPrivateUserInfo {} + +message GetPrivateUserInfoResponse { + string metrics_id = 1; + bool staff = 2; + repeated string flags = 3; + optional uint64 accepted_tos_at = 4; +} + +enum Plan { + Free = 0; + ZedPro = 1; +} + +message UpdateUserPlan { + Plan plan = 1; +} + +message AcceptTermsOfService {} + +message AcceptTermsOfServiceResponse { + uint64 accepted_tos_at = 1; +} + +message ShutdownRemoteServer {} + +message Toast { + uint64 project_id = 1; + string notification_id = 2; + string message = 3; +} + +message HideToast { + uint64 project_id = 1; + string notification_id = 2; +} + +message OpenServerSettings { + uint64 project_id = 1; +} + +message GetPanicFiles { +} + +message GetPanicFilesResponse { + repeated string file_contents = 2; +} + +message Extension { + string id = 1; + string version = 2; + bool dev = 3; +} + +message SyncExtensions { + repeated Extension extensions = 1; +} + +message SyncExtensionsResponse { + string tmp_dir = 1; + repeated Extension missing_extensions = 2; +} + +message InstallExtension { + Extension extension = 1; + string tmp_dir = 2; +} + +message AskPassRequest { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + uint64 askpass_id = 4; + string prompt = 5; +} + +message AskPassResponse { + string response = 1; +} + +message GetSupermavenApiKey {} + +message GetSupermavenApiKeyResponse { + string api_key = 1; +} diff --git a/crates/proto/proto/buffer.proto b/crates/proto/proto/buffer.proto new file mode 100644 index 0000000000..0495355e50 --- /dev/null +++ b/crates/proto/proto/buffer.proto @@ -0,0 +1,293 @@ +syntax = "proto3"; +package zed.messages; + +import "core.proto"; +import "worktree.proto"; + +message OpenNewBuffer { + uint64 project_id = 1; +} + +message OpenBufferResponse { + uint64 buffer_id = 1; +} + +message CreateBufferForPeer { + uint64 project_id = 1; + PeerId peer_id = 2; + oneof variant { + BufferState state = 3; + BufferChunk chunk = 4; + } +} + +message UpdateBuffer { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated Operation operations = 3; +} + +message OpenBufferByPath { + uint64 project_id = 1; + uint64 worktree_id = 2; + string path = 3; +} + +message OpenBufferById { + uint64 project_id = 1; + uint64 id = 2; +} + +message UpdateBufferFile { + uint64 project_id = 1; + uint64 buffer_id = 2; + File file = 3; +} + +message SaveBuffer { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; + optional ProjectPath new_path = 4; +} + +message CloseBuffer { + uint64 project_id = 1; + uint64 buffer_id = 2; +} + +message BufferSaved { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; + Timestamp mtime = 4; + reserved 5; +} + +message BufferReloaded { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; + Timestamp mtime = 4; + reserved 5; + LineEnding line_ending = 6; +} + +message ReloadBuffers { + uint64 project_id = 1; + repeated uint64 buffer_ids = 2; +} + +message ReloadBuffersResponse { + ProjectTransaction transaction = 1; +} + +message SynchronizeBuffers { + uint64 project_id = 1; + repeated BufferVersion buffers = 2; +} + +message SynchronizeBuffersResponse { + repeated BufferVersion buffers = 1; +} + +message BufferVersion { + uint64 id = 1; + repeated VectorClockEntry version = 2; +} + +message BufferState { + uint64 id = 1; + optional File file = 2; + string base_text = 3; + LineEnding line_ending = 5; + repeated VectorClockEntry saved_version = 6; + Timestamp saved_mtime = 8; + + reserved 7; + reserved 4; +} + +message BufferChunk { + uint64 buffer_id = 1; + repeated Operation operations = 2; + bool is_last = 3; +} + +enum LineEnding { + Unix = 0; + Windows = 1; +} + +message VectorClockEntry { + uint32 replica_id = 1; + uint32 timestamp = 2; +} + +message UndoMapEntry { + uint32 replica_id = 1; + uint32 local_timestamp = 2; + repeated UndoCount counts = 3; +} + +message UndoCount { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + uint32 count = 3; +} + +message Operation { + oneof variant { + Edit edit = 1; + Undo undo = 2; + UpdateSelections update_selections = 3; + UpdateDiagnostics update_diagnostics = 4; + UpdateCompletionTriggers update_completion_triggers = 5; + } + + message Edit { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + repeated VectorClockEntry version = 3; + repeated Range ranges = 4; + repeated string new_text = 5; + } + + message Undo { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + repeated VectorClockEntry version = 3; + repeated UndoCount counts = 4; + } + + message UpdateSelections { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + repeated Selection selections = 3; + bool line_mode = 4; + CursorShape cursor_shape = 5; + } + + message UpdateCompletionTriggers { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + repeated string triggers = 3; + uint64 language_server_id = 4; + } +} + +message ProjectTransaction { + repeated uint64 buffer_ids = 1; + repeated Transaction transactions = 2; +} + +message Transaction { + LamportTimestamp id = 1; + repeated LamportTimestamp edit_ids = 2; + repeated VectorClockEntry start = 3; +} + +message LamportTimestamp { + uint32 replica_id = 1; + uint32 value = 2; +} + +message Range { + uint64 start = 1; + uint64 end = 2; +} + +message Selection { + uint64 id = 1; + EditorAnchor start = 2; + EditorAnchor end = 3; + bool reversed = 4; +} + +message EditorAnchor { + uint64 excerpt_id = 1; + Anchor anchor = 2; +} + +enum CursorShape { + CursorBar = 0; + CursorBlock = 1; + CursorUnderscore = 2; + CursorHollow = 3; +} + +message UpdateDiagnostics { + uint32 replica_id = 1; + uint32 lamport_timestamp = 2; + uint64 server_id = 3; + repeated Diagnostic diagnostics = 4; +} + +message Anchor { + uint32 replica_id = 1; + uint32 timestamp = 2; + uint64 offset = 3; + Bias bias = 4; + optional uint64 buffer_id = 5; +} + +message AnchorRange { + Anchor start = 1; + Anchor end = 2; +} + +message Location { + uint64 buffer_id = 1; + Anchor start = 2; + Anchor end = 3; +} + +enum Bias { + Left = 0; + Right = 1; +} + +message Diagnostic { + Anchor start = 1; + Anchor end = 2; + optional string source = 3; + Severity severity = 4; + string message = 5; + optional string code = 6; + uint64 group_id = 7; + bool is_primary = 8; + + reserved 9; + + bool is_disk_based = 10; + bool is_unnecessary = 11; + + enum Severity { + None = 0; + Error = 1; + Warning = 2; + Information = 3; + Hint = 4; + } + optional string data = 12; +} + +message SearchQuery { + string query = 2; + bool regex = 3; + bool whole_word = 4; + bool case_sensitive = 5; + string files_to_include = 6; + string files_to_exclude = 7; + bool include_ignored = 8; +} + +message FindSearchCandidates { + uint64 project_id = 1; + SearchQuery query = 2; + uint64 limit = 3; +} + +message FindSearchCandidatesResponse { + repeated uint64 buffer_ids = 1; +} diff --git a/crates/proto/proto/call.proto b/crates/proto/proto/call.proto new file mode 100644 index 0000000000..a223f79949 --- /dev/null +++ b/crates/proto/proto/call.proto @@ -0,0 +1,417 @@ +syntax = "proto3"; +package zed.messages; + +import "core.proto"; +import "worktree.proto"; +import "buffer.proto"; +import "lsp.proto"; +import "channel.proto"; +import "git.proto"; + +message CreateRoom {} + +message CreateRoomResponse { + Room room = 1; + optional LiveKitConnectionInfo live_kit_connection_info = 2; +} + +message JoinRoom { + uint64 id = 1; +} + +message JoinRoomResponse { + Room room = 1; + optional uint64 channel_id = 2; + optional LiveKitConnectionInfo live_kit_connection_info = 3; +} + +message RejoinRoom { + uint64 id = 1; + repeated UpdateProject reshared_projects = 2; + repeated RejoinProject rejoined_projects = 3; +} + +message RejoinRemoteProjects { + repeated RejoinProject rejoined_projects = 1; +} + +message RejoinRemoteProjectsResponse { + repeated RejoinedProject rejoined_projects = 1; +} + +message RejoinProject { + uint64 id = 1; + repeated RejoinWorktree worktrees = 2; + repeated RejoinRepository repositories = 3; +} + +message RejoinWorktree { + uint64 id = 1; + uint64 scan_id = 2; +} + +message RejoinRepository { + uint64 id = 1; + uint64 scan_id = 2; +} + +message RejoinRoomResponse { + Room room = 1; + repeated ResharedProject reshared_projects = 2; + repeated RejoinedProject rejoined_projects = 3; +} + +message ResharedProject { + uint64 id = 1; + repeated Collaborator collaborators = 2; +} + +message RejoinedProject { + uint64 id = 1; + repeated WorktreeMetadata worktrees = 2; + repeated Collaborator collaborators = 3; + repeated LanguageServer language_servers = 4; +} + +message LeaveRoom {} + +message Room { + uint64 id = 1; + repeated Participant participants = 2; + repeated PendingParticipant pending_participants = 3; + repeated Follower followers = 4; + string livekit_room = 5; +} + +message Participant { + uint64 user_id = 1; + PeerId peer_id = 2; + repeated ParticipantProject projects = 3; + ParticipantLocation location = 4; + uint32 participant_index = 5; + ChannelRole role = 6; + reserved 7; +} + +message PendingParticipant { + uint64 user_id = 1; + uint64 calling_user_id = 2; + optional uint64 initial_project_id = 3; +} + +message ParticipantProject { + uint64 id = 1; + repeated string worktree_root_names = 2; +} + +message Follower { + PeerId leader_id = 1; + PeerId follower_id = 2; + uint64 project_id = 3; +} + +message ParticipantLocation { + oneof variant { + SharedProject shared_project = 1; + UnsharedProject unshared_project = 2; + External external = 3; + } + + message SharedProject { + uint64 id = 1; + } + + message UnsharedProject {} + + message External {} +} + +message Call { + uint64 room_id = 1; + uint64 called_user_id = 2; + optional uint64 initial_project_id = 3; +} + +message IncomingCall { + uint64 room_id = 1; + uint64 calling_user_id = 2; + repeated uint64 participant_user_ids = 3; + optional ParticipantProject initial_project = 4; +} + +message CallCanceled { + uint64 room_id = 1; +} + +message CancelCall { + uint64 room_id = 1; + uint64 called_user_id = 2; +} + +message DeclineCall { + uint64 room_id = 1; +} + +message UpdateParticipantLocation { + uint64 room_id = 1; + ParticipantLocation location = 2; +} + +message RoomUpdated { + Room room = 1; +} + +message LiveKitConnectionInfo { + string server_url = 1; + string token = 2; + bool can_publish = 3; +} + +message ShareProject { + uint64 room_id = 1; + repeated WorktreeMetadata worktrees = 2; + reserved 3; + bool is_ssh_project = 4; +} + +message ShareProjectResponse { + uint64 project_id = 1; +} + +message UnshareProject { + uint64 project_id = 1; +} + +message UpdateProject { + uint64 project_id = 1; + repeated WorktreeMetadata worktrees = 2; +} + +message JoinProject { + uint64 project_id = 1; +} + +message JoinProjectResponse { + uint64 project_id = 5; + uint32 replica_id = 1; + repeated WorktreeMetadata worktrees = 2; + repeated Collaborator collaborators = 3; + repeated LanguageServer language_servers = 4; + ChannelRole role = 6; + reserved 7; +} + +message LeaveProject { + uint64 project_id = 1; +} + +message UpdateWorktree { + uint64 project_id = 1; + uint64 worktree_id = 2; + string root_name = 3; + repeated Entry updated_entries = 4; + repeated uint64 removed_entries = 5; + repeated RepositoryEntry updated_repositories = 6; // deprecated + repeated uint64 removed_repositories = 7; // deprecated + uint64 scan_id = 8; + bool is_last_update = 9; + string abs_path = 10; +} + +// deprecated +message RepositoryEntry { + uint64 repository_id = 1; + reserved 2; + repeated StatusEntry updated_statuses = 3; + repeated string removed_statuses = 4; + repeated string current_merge_conflicts = 5; + optional Branch branch_summary = 6; +} + +message AddProjectCollaborator { + uint64 project_id = 1; + Collaborator collaborator = 2; +} + +message UpdateProjectCollaborator { + uint64 project_id = 1; + PeerId old_peer_id = 2; + PeerId new_peer_id = 3; +} + +message RemoveProjectCollaborator { + uint64 project_id = 1; + PeerId peer_id = 2; +} + +message GetUsers { + repeated uint64 user_ids = 1; +} + +message FuzzySearchUsers { + string query = 1; +} + +message UsersResponse { + repeated User users = 1; +} + +message RequestContact { + uint64 responder_id = 1; +} + +message RemoveContact { + uint64 user_id = 1; +} + +message RespondToContactRequest { + uint64 requester_id = 1; + ContactRequestResponse response = 2; +} + +enum ContactRequestResponse { + Accept = 0; + Decline = 1; + Block = 2; + Dismiss = 3; +} + +message UpdateContacts { + repeated Contact contacts = 1; + repeated uint64 remove_contacts = 2; + repeated IncomingContactRequest incoming_requests = 3; + repeated uint64 remove_incoming_requests = 4; + repeated uint64 outgoing_requests = 5; + repeated uint64 remove_outgoing_requests = 6; +} + +message ShowContacts {} + +message IncomingContactRequest { + uint64 requester_id = 1; +} + +message Follow { + uint64 room_id = 1; + optional uint64 project_id = 2; + PeerId leader_id = 3; +} + +message FollowResponse { + View active_view = 3; + // TODO: Remove after version 0.145.x stabilizes. + optional ViewId active_view_id = 1; + repeated View views = 2; +} + +message UpdateFollowers { + uint64 room_id = 1; + optional uint64 project_id = 2; + reserved 3; + oneof variant { + View create_view = 5; + // TODO: Remove after version 0.145.x stabilizes. + UpdateActiveView update_active_view = 4; + UpdateView update_view = 6; + } +} + +message Unfollow { + uint64 room_id = 1; + optional uint64 project_id = 2; + PeerId leader_id = 3; +} + +message ViewId { + PeerId creator = 1; + uint64 id = 2; +} + +message UpdateActiveView { + optional ViewId id = 1; + optional PeerId leader_id = 2; + View view = 3; +} + +enum PanelId { + AssistantPanel = 0; + DebugPanel = 1; +} + +message UpdateView { + ViewId id = 1; + optional PeerId leader_id = 2; + + oneof variant { + Editor editor = 3; + } + + message Editor { + repeated ExcerptInsertion inserted_excerpts = 1; + repeated uint64 deleted_excerpts = 2; + repeated Selection selections = 3; + optional Selection pending_selection = 4; + EditorAnchor scroll_top_anchor = 5; + float scroll_x = 6; + float scroll_y = 7; + } +} + +message View { + ViewId id = 1; + optional PeerId leader_id = 2; + optional PanelId panel_id = 6; + + oneof variant { + Editor editor = 3; + ChannelView channel_view = 4; + ContextEditor context_editor = 5; + } + + message Editor { + bool singleton = 1; + optional string title = 2; + repeated Excerpt excerpts = 3; + repeated Selection selections = 4; + optional Selection pending_selection = 5; + EditorAnchor scroll_top_anchor = 6; + float scroll_x = 7; + float scroll_y = 8; + } + + message ChannelView { + uint64 channel_id = 1; + Editor editor = 2; + } + + message ContextEditor { + string context_id = 1; + Editor editor = 2; + } +} + +message ExcerptInsertion { + Excerpt excerpt = 1; + optional uint64 previous_excerpt_id = 2; +} + +message Excerpt { + uint64 id = 1; + uint64 buffer_id = 2; + Anchor context_start = 3; + Anchor context_end = 4; + Anchor primary_start = 5; + Anchor primary_end = 6; +} + +message Contact { + uint64 user_id = 1; + bool online = 2; + bool busy = 3; +} + +message SetRoomParticipantRole { + uint64 room_id = 1; + uint64 user_id = 2; + ChannelRole role = 3; +} diff --git a/crates/proto/proto/channel.proto b/crates/proto/proto/channel.proto new file mode 100644 index 0000000000..cf960c3f34 --- /dev/null +++ b/crates/proto/proto/channel.proto @@ -0,0 +1,283 @@ +syntax = "proto3"; +package zed.messages; + +import "core.proto"; +import "buffer.proto"; + +message Channel { + uint64 id = 1; + string name = 2; + ChannelVisibility visibility = 3; + repeated uint64 parent_path = 5; +} + +enum ChannelVisibility { + Public = 0; + Members = 1; +} + +message UpdateChannels { + repeated Channel channels = 1; + repeated uint64 delete_channels = 4; + repeated Channel channel_invitations = 5; + repeated uint64 remove_channel_invitations = 6; + repeated ChannelParticipants channel_participants = 7; + repeated ChannelMessageId latest_channel_message_ids = 8; + repeated ChannelBufferVersion latest_channel_buffer_versions = 9; + + reserved 10 to 15; +} + +message UpdateUserChannels { + repeated ChannelMessageId observed_channel_message_id = 1; + repeated ChannelBufferVersion observed_channel_buffer_version = 2; + repeated ChannelMembership channel_memberships = 3; +} + +message ChannelMembership { + uint64 channel_id = 1; + ChannelRole role = 2; +} + +message ChannelMessageId { + uint64 channel_id = 1; + uint64 message_id = 2; +} + +message ChannelPermission { + uint64 channel_id = 1; + ChannelRole role = 3; +} + +message ChannelParticipants { + uint64 channel_id = 1; + repeated uint64 participant_user_ids = 2; +} + +message JoinChannel { + uint64 channel_id = 1; +} + +message DeleteChannel { + uint64 channel_id = 1; +} + +message GetChannelMembers { + uint64 channel_id = 1; + string query = 2; + uint64 limit = 3; +} + +message GetChannelMembersResponse { + repeated ChannelMember members = 1; + repeated User users = 2; +} + +message ChannelMember { + uint64 user_id = 1; + Kind kind = 3; + ChannelRole role = 4; + + enum Kind { + Member = 0; + Invitee = 1; + } +} + +message SubscribeToChannels {} + +message CreateChannel { + string name = 1; + optional uint64 parent_id = 2; +} + +message CreateChannelResponse { + Channel channel = 1; + optional uint64 parent_id = 2; +} + +message InviteChannelMember { + uint64 channel_id = 1; + uint64 user_id = 2; + ChannelRole role = 4; +} + +message RemoveChannelMember { + uint64 channel_id = 1; + uint64 user_id = 2; +} + +enum ChannelRole { + Admin = 0; + Member = 1; + Guest = 2; + Banned = 3; + Talker = 4; +} + +message SetChannelMemberRole { + uint64 channel_id = 1; + uint64 user_id = 2; + ChannelRole role = 3; +} + +message SetChannelVisibility { + uint64 channel_id = 1; + ChannelVisibility visibility = 2; +} + +message RenameChannel { + uint64 channel_id = 1; + string name = 2; +} + +message RenameChannelResponse { + Channel channel = 1; +} + +message JoinChannelChat { + uint64 channel_id = 1; +} + +message JoinChannelChatResponse { + repeated ChannelMessage messages = 1; + bool done = 2; +} + +message LeaveChannelChat { + uint64 channel_id = 1; +} + +message SendChannelMessage { + uint64 channel_id = 1; + string body = 2; + Nonce nonce = 3; + repeated ChatMention mentions = 4; + optional uint64 reply_to_message_id = 5; +} + +message RemoveChannelMessage { + uint64 channel_id = 1; + uint64 message_id = 2; +} + +message UpdateChannelMessage { + uint64 channel_id = 1; + uint64 message_id = 2; + Nonce nonce = 4; + string body = 5; + repeated ChatMention mentions = 6; +} + +message AckChannelMessage { + uint64 channel_id = 1; + uint64 message_id = 2; +} + +message SendChannelMessageResponse { + ChannelMessage message = 1; +} + +message ChannelMessageSent { + uint64 channel_id = 1; + ChannelMessage message = 2; +} + +message ChannelMessageUpdate { + uint64 channel_id = 1; + ChannelMessage message = 2; +} + +message GetChannelMessages { + uint64 channel_id = 1; + uint64 before_message_id = 2; +} + +message GetChannelMessagesResponse { + repeated ChannelMessage messages = 1; + bool done = 2; +} + +message GetChannelMessagesById { + repeated uint64 message_ids = 1; +} + +message MoveChannel { + uint64 channel_id = 1; + uint64 to = 2; +} + +message JoinChannelBuffer { + uint64 channel_id = 1; +} + +message ChannelBufferVersion { + uint64 channel_id = 1; + repeated VectorClockEntry version = 2; + uint64 epoch = 3; +} + +message UpdateChannelBufferCollaborators { + uint64 channel_id = 1; + repeated Collaborator collaborators = 2; +} + +message UpdateChannelBuffer { + uint64 channel_id = 1; + repeated Operation operations = 2; +} + +message ChannelMessage { + uint64 id = 1; + string body = 2; + uint64 timestamp = 3; + uint64 sender_id = 4; + Nonce nonce = 5; + repeated ChatMention mentions = 6; + optional uint64 reply_to_message_id = 7; + optional uint64 edited_at = 8; +} + +message ChatMention { + Range range = 1; + uint64 user_id = 2; +} + +message RejoinChannelBuffers { + repeated ChannelBufferVersion buffers = 1; +} + +message RejoinChannelBuffersResponse { + repeated RejoinedChannelBuffer buffers = 1; +} + +message AckBufferOperation { + uint64 buffer_id = 1; + uint64 epoch = 2; + repeated VectorClockEntry version = 3; +} + +message JoinChannelBufferResponse { + uint64 buffer_id = 1; + uint32 replica_id = 2; + string base_text = 3; + repeated Operation operations = 4; + repeated Collaborator collaborators = 5; + uint64 epoch = 6; +} + +message RejoinedChannelBuffer { + uint64 channel_id = 1; + repeated VectorClockEntry version = 2; + repeated Operation operations = 3; + repeated Collaborator collaborators = 4; +} + +message LeaveChannelBuffer { + uint64 channel_id = 1; +} + +message RespondToChannelInvite { + uint64 channel_id = 1; + bool accept = 2; +} diff --git a/crates/proto/proto/core.proto b/crates/proto/proto/core.proto new file mode 100644 index 0000000000..d44d457d09 --- /dev/null +++ b/crates/proto/proto/core.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package zed.messages; + +message PeerId { + uint32 owner_id = 1; + uint32 id = 2; +} + +message User { + uint64 id = 1; + string github_login = 2; + string avatar_url = 3; + optional string email = 4; + optional string name = 5; +} + +message Nonce { + uint64 upper_half = 1; + uint64 lower_half = 2; +} + +message Collaborator { + PeerId peer_id = 1; + uint32 replica_id = 2; + uint64 user_id = 3; + bool is_host = 4; +} diff --git a/crates/proto/proto/debugger.proto b/crates/proto/proto/debugger.proto new file mode 100644 index 0000000000..7618c80d23 --- /dev/null +++ b/crates/proto/proto/debugger.proto @@ -0,0 +1,530 @@ +syntax = "proto3"; +package zed.messages; + +import "core.proto"; +import "buffer.proto"; + +enum BreakpointState { + Enabled = 0; + Disabled = 1; +} + +message Breakpoint { + Anchor position = 1; + BreakpointState state = 2; + reserved 3; + optional string message = 4; + optional string condition = 5; + optional string hit_condition = 6; +} + +message BreakpointsForFile { + uint64 project_id = 1; + string path = 2; + repeated Breakpoint breakpoints = 3; +} + +message ToggleBreakpoint { + uint64 project_id = 1; + string path = 2; + Breakpoint breakpoint = 3; +} + +enum DebuggerThreadItem { + Console = 0; + LoadedSource = 1; + Modules = 2; + Variables = 3; +} + +message DebuggerSetVariableState { + string name = 1; + DapScope scope = 2; + string value = 3; + uint64 stack_frame_id = 4; + optional string evaluate_name = 5; + uint64 parent_variables_reference = 6; +} + +message VariableListOpenEntry { + oneof entry { + DebuggerOpenEntryScope scope = 1; + DebuggerOpenEntryVariable variable = 2; + } +} + +message DebuggerOpenEntryScope { + string name = 1; +} + +message DebuggerOpenEntryVariable { + string scope_name = 1; + string name = 2; + uint64 depth = 3; +} + +message VariableListEntrySetState { + uint64 depth = 1; + DebuggerSetVariableState state = 2; +} + +message VariableListEntryVariable { + uint64 depth = 1; + DapScope scope = 2; + DapVariable variable = 3; + bool has_children = 4; + uint64 container_reference = 5; +} + +message DebuggerScopeVariableIndex { + repeated uint64 fetched_ids = 1; + repeated DebuggerVariableContainer variables = 2; +} + +message DebuggerVariableContainer { + uint64 container_reference = 1; + DapVariable variable = 2; + uint64 depth = 3; +} + +enum DapThreadStatus { + Running = 0; + Stopped = 1; + Exited = 2; + Ended = 3; +} + +message VariableListScopes { + uint64 stack_frame_id = 1; + repeated DapScope scopes = 2; +} + +message VariableListVariables { + uint64 stack_frame_id = 1; + uint64 scope_id = 2; + DebuggerScopeVariableIndex variables = 3; +} + + +enum VariablesArgumentsFilter { + Indexed = 0; + Named = 1; +} + +message ValueFormat { + optional bool hex = 1; +} + +message VariablesRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 variables_reference = 3; + optional VariablesArgumentsFilter filter = 4; + optional uint64 start = 5; + optional uint64 count = 6; + optional ValueFormat format = 7; +} + +enum SteppingGranularity { + Statement = 0; + Line = 1; + Instruction = 2; +} + +message DapLocationsRequest { + uint64 project_id = 1; + uint64 session_id = 2; + uint64 location_reference = 3; +} + +message DapLocationsResponse { + DapSource source = 1; + uint64 line = 2; + optional uint64 column = 3; + optional uint64 end_line = 4; + optional uint64 end_column = 5; +} + +enum DapEvaluateContext { + Repl = 0; + Watch = 1; + Hover = 2; + Clipboard = 3; + EvaluateVariables = 4; + EvaluateUnknown = 5; +} + +message DapEvaluateRequest { + uint64 project_id = 1; + uint64 client_id = 2; + string expression = 3; + optional uint64 frame_id = 4; + optional DapEvaluateContext context = 5; +} + +message DapEvaluateResponse { + string result = 1; + optional string evaluate_type = 2; + uint64 variable_reference = 3; + optional uint64 named_variables = 4; + optional uint64 indexed_variables = 5; + optional string memory_reference = 6; +} + + +message DapCompletionRequest { + uint64 project_id = 1; + uint64 client_id = 2; + string query = 3; + optional uint64 frame_id = 4; + optional uint64 line = 5; + uint64 column = 6; +} + +enum DapCompletionItemType { + Method = 0; + Function = 1; + Constructor = 2; + Field = 3; + Variable = 4; + Class = 5; + Interface = 6; + Module = 7; + Property = 8; + Unit = 9; + Value = 10; + Enum = 11; + Keyword = 12; + Snippet = 13; + Text = 14; + Color = 15; + CompletionItemFile = 16; + Reference = 17; + Customcolor = 19; +} + +message DapCompletionItem { + string label = 1; + optional string text = 2; + optional string sort_text = 3; + optional string detail = 4; + optional DapCompletionItemType typ = 5; + optional uint64 start = 6; + optional uint64 length = 7; + optional uint64 selection_start = 8; + optional uint64 selection_length = 9; +} + +message DapCompletionResponse { + uint64 client_id = 1; + repeated DapCompletionItem completions = 2; +} + +message DapScopesRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 stack_frame_id = 3; +} + +message DapScopesResponse { + repeated DapScope scopes = 1; +} + +message DapSetVariableValueRequest { + uint64 project_id = 1; + uint64 client_id = 2; + string name = 3; + string value = 4; + uint64 variables_reference = 5; +} + +message DapSetVariableValueResponse { + uint64 client_id = 1; + string value = 2; + optional string variable_type = 3; + optional uint64 variables_reference = 4; + optional uint64 named_variables = 5; + optional uint64 indexed_variables = 6; + optional string memory_reference = 7; +} + +message DapPauseRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; +} + +message DapDisconnectRequest { + uint64 project_id = 1; + uint64 client_id = 2; + optional bool restart = 3; + optional bool terminate_debuggee = 4; + optional bool suspend_debuggee = 5; +} + +message DapTerminateThreadsRequest { + uint64 project_id = 1; + uint64 client_id = 2; + repeated uint64 thread_ids = 3; +} + +message DapThreadsRequest { + uint64 project_id = 1; + uint64 client_id = 2; +} + +message DapThreadsResponse { + repeated DapThread threads = 1; +} + +message DapTerminateRequest { + uint64 project_id = 1; + uint64 client_id = 2; + optional bool restart = 3; +} + +message DapRestartRequest { + uint64 project_id = 1; + uint64 client_id = 2; + bytes raw_args = 3; +} + +message DapRestartStackFrameRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 stack_frame_id = 3; +} + +message ToggleIgnoreBreakpoints { + uint64 project_id = 1; + uint32 session_id = 2; +} + +message IgnoreBreakpointState { + uint64 project_id = 1; + uint64 session_id = 2; + bool ignore = 3; +} + +message DapNextRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional bool single_thread = 4; + optional SteppingGranularity granularity = 5; +} + +message DapStepInRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional uint64 target_id = 4; + optional bool single_thread = 5; + optional SteppingGranularity granularity = 6; +} + +message DapStepOutRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional bool single_thread = 4; + optional SteppingGranularity granularity = 5; +} + +message DapStepBackRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional bool single_thread = 4; + optional SteppingGranularity granularity = 5; +} + +message DapContinueRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional bool single_thread = 4; +} + +message DapContinueResponse { + uint64 client_id = 1; + optional bool all_threads_continued = 2; +} + +message DapModulesRequest { + uint64 project_id = 1; + uint64 client_id = 2; +} + +message DapModulesResponse { + uint64 client_id = 1; + repeated DapModule modules = 2; +} + +message DapLoadedSourcesRequest { + uint64 project_id = 1; + uint64 client_id = 2; +} + +message DapLoadedSourcesResponse { + uint64 client_id = 1; + repeated DapSource sources = 2; +} + +message DapStackTraceRequest { + uint64 project_id = 1; + uint64 client_id = 2; + uint64 thread_id = 3; + optional uint64 start_frame = 4; + optional uint64 stack_trace_levels = 5; +} + +message DapStackTraceResponse { + repeated DapStackFrame frames = 1; +} + +message DapStackFrame { + uint64 id = 1; + string name = 2; + optional DapSource source = 3; + uint64 line = 4; + uint64 column = 5; + optional uint64 end_line = 6; + optional uint64 end_column = 7; + optional bool can_restart = 8; + optional string instruction_pointer_reference = 9; + optional DapModuleId module_id = 10; + optional DapStackPresentationHint presentation_hint = 11; +} + +message DebuggerLoadedSourceList { + uint64 client_id = 1; + repeated DapSource sources = 2; +} + +message DapVariables { + uint64 client_id = 1; + repeated DapVariable variables = 2; +} + +// Remote Debugging: Dap Types +message DapVariable { + string name = 1; + string value = 2; + optional string type = 3; + // optional DapVariablePresentationHint presentation_hint = 4; + optional string evaluate_name = 5; + uint64 variables_reference = 6; + optional uint64 named_variables = 7; + optional uint64 indexed_variables = 8; + optional string memory_reference = 9; +} + +message DapThread { + uint64 id = 1; + string name = 2; +} + +message DapScope { + string name = 1; + optional DapScopePresentationHint presentation_hint = 2; + uint64 variables_reference = 3; + optional uint64 named_variables = 4; + optional uint64 indexed_variables = 5; + bool expensive = 6; + optional DapSource source = 7; + optional uint64 line = 8; + optional uint64 column = 9; + optional uint64 end_line = 10; + optional uint64 end_column = 11; +} + +message DapSource { + optional string name = 1; + optional string path = 2; + optional uint64 source_reference = 3; + optional DapSourcePresentationHint presentation_hint = 4; + optional string origin = 5; + repeated DapSource sources = 6; + optional bytes adapter_data = 7; + repeated DapChecksum checksums = 8; +} + +enum DapOutputCategory { + ConsoleOutput = 0; + Important = 1; + Stdout = 2; + Stderr = 3; + Unknown = 4; +} + +enum DapOutputEventGroup { + Start = 0; + StartCollapsed = 1; + End = 2; +} + +message DapOutputEvent { + string output = 1; + optional DapOutputCategory category = 2; + optional uint64 variables_reference = 3; + optional DapOutputEventGroup group = 4; + optional DapSource source = 5; + optional uint32 line = 6; + optional uint32 column = 7; +} + +enum DapChecksumAlgorithm { + CHECKSUM_ALGORITHM_UNSPECIFIED = 0; + MD5 = 1; + SHA1 = 2; + SHA256 = 3; + TIMESTAMP = 4; +} + +message DapChecksum { + DapChecksumAlgorithm algorithm = 1; + string checksum = 2; +} + +enum DapScopePresentationHint { + Arguments = 0; + Locals = 1; + Registers = 2; + ReturnValue = 3; + ScopeUnknown = 4; +} + +enum DapSourcePresentationHint { + SourceNormal = 0; + Emphasize = 1; + Deemphasize = 2; + SourceUnknown = 3; +} + +enum DapStackPresentationHint { + StackNormal = 0; + Label = 1; + Subtle = 2; + StackUnknown = 3; +} + +message DapModule { + DapModuleId id = 1; + string name = 2; + optional string path = 3; + optional bool is_optimized = 4; + optional bool is_user_code = 5; + optional string version = 6; + optional string symbol_status = 7; + optional string symbol_file_path = 8; + optional string date_time_stamp = 9; + optional string address_range = 10; +} + +message DapModuleId { + oneof id { + uint32 number = 1; + string string = 2; + } +} diff --git a/crates/proto/proto/git.proto b/crates/proto/proto/git.proto new file mode 100644 index 0000000000..7774a5293b --- /dev/null +++ b/crates/proto/proto/git.proto @@ -0,0 +1,404 @@ +syntax = "proto3"; +package zed.messages; + +import "worktree.proto"; +import "buffer.proto"; + +message GitBranchesResponse { + repeated Branch branches = 1; +} + +message UpdateDiffBases { + uint64 project_id = 1; + uint64 buffer_id = 2; + + enum Mode { + // No collaborator is using the unstaged diff. + HEAD_ONLY = 0; + // No collaborator is using the diff from HEAD. + INDEX_ONLY = 1; + // Both the unstaged and uncommitted diffs are demanded, + // and the contents of the index and HEAD are the same for this path. + INDEX_MATCHES_HEAD = 2; + // Both the unstaged and uncommitted diffs are demanded, + // and the contents of the index and HEAD differ for this path, + // where None means the path doesn't exist in that state of the repo. + INDEX_AND_HEAD = 3; + } + + optional string staged_text = 3; + optional string committed_text = 4; + Mode mode = 5; +} + +message OpenUnstagedDiff { + uint64 project_id = 1; + uint64 buffer_id = 2; +} + +message OpenUnstagedDiffResponse { + optional string staged_text = 1; +} + +message OpenUncommittedDiff { + uint64 project_id = 1; + uint64 buffer_id = 2; +} + +message OpenUncommittedDiffResponse { + enum Mode { + INDEX_MATCHES_HEAD = 0; + INDEX_AND_HEAD = 1; + } + optional string staged_text = 1; + optional string committed_text = 2; + Mode mode = 3; +} + +message SetIndexText { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string path = 4; + optional string text = 5; +} + +message GetPermalinkToLine { + uint64 project_id = 1; + uint64 buffer_id = 2; + Range selection = 3; +} + +message GetPermalinkToLineResponse { + string permalink = 1; +} + +message Branch { + bool is_head = 1; + string name = 2; + optional uint64 unix_timestamp = 3; + optional GitUpstream upstream = 4; + optional CommitSummary most_recent_commit = 5; +} + +message GitUpstream { + string ref_name = 1; + optional UpstreamTracking tracking = 2; +} + +message UpstreamTracking { + uint64 ahead = 1; + uint64 behind = 2; +} + +message CommitSummary { + string sha = 1; + string subject = 2; + int64 commit_timestamp = 3; +} + +message GitBranches { + uint64 project_id = 1; + ProjectPath repository = 2; +} + + +message UpdateGitBranch { + uint64 project_id = 1; + string branch_name = 2; + ProjectPath repository = 3; +} + +message UpdateRepository { + uint64 project_id = 1; + uint64 id = 2; + string abs_path = 3; + repeated uint64 entry_ids = 4; + optional Branch branch_summary = 5; + repeated StatusEntry updated_statuses = 6; + repeated string removed_statuses = 7; + repeated string current_merge_conflicts = 8; + uint64 scan_id = 9; + bool is_last_update = 10; +} + +message RemoveRepository { + uint64 project_id = 1; + uint64 id = 2; +} + +enum GitStatus { + Added = 0; + Modified = 1; + Conflict = 2; + Deleted = 3; + Updated = 4; + TypeChanged = 5; + Renamed = 6; + Copied = 7; + Unmodified = 8; +} + +message GitFileStatus { + oneof variant { + Untracked untracked = 1; + Ignored ignored = 2; + Unmerged unmerged = 3; + Tracked tracked = 4; + } + + message Untracked {} + message Ignored {} + message Unmerged { + GitStatus first_head = 1; + GitStatus second_head = 2; + } + message Tracked { + GitStatus index_status = 1; + GitStatus worktree_status = 2; + } +} + +message GitGetBranches { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; +} + +message GitCreateBranch { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string branch_name = 4; +} + +message GitChangeBranch { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string branch_name = 4; +} + +message GitDiff { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + DiffType diff_type = 4; + + enum DiffType { + HEAD_TO_WORKTREE = 0; + HEAD_TO_INDEX = 1; + } +} + +message GitDiffResponse { + string diff = 1; +} + +message GitInit { + uint64 project_id = 1; + string abs_path = 2; + string fallback_branch_name = 3; +} + +message CheckForPushedCommits { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; +} + +message CheckForPushedCommitsResponse { + repeated string pushed_to = 1; +} + +message GitShow { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string commit = 4; +} + +message GitCommitDetails { + string sha = 1; + string message = 2; + int64 commit_timestamp = 3; + string author_email = 4; + string author_name = 5; +} + +message LoadCommitDiff { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string commit = 4; +} + +message LoadCommitDiffResponse { + repeated CommitFile files = 1; +} + +message CommitFile { + string path = 1; + optional string old_text = 2; + optional string new_text = 3; +} + +message GitReset { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string commit = 4; + ResetMode mode = 5; + enum ResetMode { + SOFT = 0; + MIXED = 1; + } +} + +message GitCheckoutFiles { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string commit = 4; + repeated string paths = 5; +} + +// Move to `git.proto` once collab's min version is >=0.171.0. +message StatusEntry { + string repo_path = 1; + // Can be removed once collab's min version is >=0.171.0. + GitStatus simple_status = 2; + GitFileStatus status = 3; +} + +message Stage { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + repeated string paths = 4; +} + +message Unstage { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + repeated string paths = 4; +} + +message Commit { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + optional string name = 4; + optional string email = 5; + string message = 6; +} + +message OpenCommitMessageBuffer { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; +} + +message Push { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string remote_name = 4; + string branch_name = 5; + optional PushOptions options = 6; + uint64 askpass_id = 7; + + enum PushOptions { + SET_UPSTREAM = 0; + FORCE = 1; + } +} + +message Fetch { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + uint64 askpass_id = 4; +} + +message GetRemotes { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + optional string branch_name = 4; +} + +message GetRemotesResponse { + repeated Remote remotes = 1; + + message Remote { + string name = 1; + } +} + +message Pull { + uint64 project_id = 1; + reserved 2; + uint64 repository_id = 3; + string remote_name = 4; + string branch_name = 5; + uint64 askpass_id = 6; +} + +message RemoteMessageResponse { + string stdout = 1; + string stderr = 2; +} + +message BlameBuffer { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; +} + +message BlameEntry { + bytes sha = 1; + + uint32 start_line = 2; + uint32 end_line = 3; + uint32 original_line_number = 4; + + optional string author = 5; + optional string author_mail = 6; + optional int64 author_time = 7; + optional string author_tz = 8; + + optional string committer = 9; + optional string committer_mail = 10; + optional int64 committer_time = 11; + optional string committer_tz = 12; + + optional string summary = 13; + optional string previous = 14; + + string filename = 15; +} + +message CommitMessage { + bytes oid = 1; + string message = 2; +} + +message CommitPermalink { + bytes oid = 1; + string permalink = 2; +} + +message BlameBufferResponse { + message BlameResponse { + repeated BlameEntry entries = 1; + repeated CommitMessage messages = 2; + optional string remote_url = 4; + reserved 3; + } + + optional BlameResponse blame_response = 5; + + reserved 1 to 4; +} diff --git a/crates/proto/proto/lsp.proto b/crates/proto/proto/lsp.proto new file mode 100644 index 0000000000..b22d0829a0 --- /dev/null +++ b/crates/proto/proto/lsp.proto @@ -0,0 +1,701 @@ +syntax = "proto3"; +package zed.messages; + +import "core.proto"; +import "worktree.proto"; +import "buffer.proto"; + +message GetDefinition { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message GetDefinitionResponse { + repeated LocationLink links = 1; +} + +message GetDeclaration { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message GetDeclarationResponse { + repeated LocationLink links = 1; +} + +message GetTypeDefinition { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; + } + +message GetTypeDefinitionResponse { + repeated LocationLink links = 1; +} +message GetImplementation { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; + } + +message GetImplementationResponse { + repeated LocationLink links = 1; +} + +message GetReferences { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; + } + +message GetReferencesResponse { + repeated Location locations = 1; +} + +message GetDocumentHighlights { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; + } + +message GetDocumentHighlightsResponse { + repeated DocumentHighlight highlights = 1; +} + +message LocationLink { + optional Location origin = 1; + Location target = 2; +} + +message DocumentHighlight { + Kind kind = 1; + Anchor start = 2; + Anchor end = 3; + + enum Kind { + Text = 0; + Read = 1; + Write = 2; + } +} + +message GetProjectSymbols { + uint64 project_id = 1; + string query = 2; +} + +message GetProjectSymbolsResponse { + repeated Symbol symbols = 4; +} + +message Symbol { + uint64 source_worktree_id = 1; + uint64 worktree_id = 2; + string language_server_name = 3; + string name = 4; + int32 kind = 5; + string path = 6; + // Cannot use generate anchors for unopened files, + // so we are forced to use point coords instead + PointUtf16 start = 7; + PointUtf16 end = 8; + bytes signature = 9; + uint64 language_server_id = 10; +} + +message GetDocumentSymbols { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; +} + +message GetDocumentSymbolsResponse { + repeated DocumentSymbol symbols = 1; +} + +message DocumentSymbol { + string name = 1; + int32 kind = 2; + // Cannot use generate anchors for unopened files, + // so we are forced to use point coords instead + PointUtf16 start = 3; + PointUtf16 end = 4; + PointUtf16 selection_start = 5; + PointUtf16 selection_end = 6; + repeated DocumentSymbol children = 7; +} + +message InlayHints { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor start = 3; + Anchor end = 4; + repeated VectorClockEntry version = 5; +} + +message InlayHintsResponse { + repeated InlayHint hints = 1; + repeated VectorClockEntry version = 2; +} + +message PointUtf16 { + uint32 row = 1; + uint32 column = 2; +} + +message LspExtExpandMacro { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; +} + +message LspExtExpandMacroResponse { + string name = 1; + string expansion = 2; +} + +message LspExtOpenDocs { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; +} + +message LspExtOpenDocsResponse { + optional string web = 1; + optional string local = 2; +} + +message LspExtSwitchSourceHeader { + uint64 project_id = 1; + uint64 buffer_id = 2; +} + +message LspExtSwitchSourceHeaderResponse { + string target_file = 1; +} + +message GetCompletionsResponse { + repeated Completion completions = 1; + repeated VectorClockEntry version = 2; +} + +message ApplyCompletionAdditionalEdits { + uint64 project_id = 1; + uint64 buffer_id = 2; + Completion completion = 3; +} + +message ApplyCompletionAdditionalEditsResponse { + Transaction transaction = 1; +} + +message Completion { + Anchor old_start = 1; + Anchor old_end = 2; + string new_text = 3; + uint64 server_id = 4; + bytes lsp_completion = 5; + bool resolved = 6; + Source source = 7; + optional bytes lsp_defaults = 8; + optional Anchor buffer_word_start = 9; + optional Anchor buffer_word_end = 10; + + enum Source { + Lsp = 0; + Custom = 1; + BufferWord = 2; + } +} + +message GetCodeActions { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor start = 3; + Anchor end = 4; + repeated VectorClockEntry version = 5; +} + +message GetCodeActionsResponse { + repeated CodeAction actions = 1; + repeated VectorClockEntry version = 2; +} + +message GetSignatureHelp { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message GetSignatureHelpResponse { + optional SignatureHelp signature_help = 1; +} + +message SignatureHelp { + repeated SignatureInformation signatures = 1; + optional uint32 active_signature = 2; + optional uint32 active_parameter = 3; +} + +message SignatureInformation { + string label = 1; + optional Documentation documentation = 2; + repeated ParameterInformation parameters = 3; + optional uint32 active_parameter = 4; +} + +message Documentation { + oneof content { + string value = 1; + MarkupContent markup_content = 2; + } +} + +enum MarkupKind { + PlainText = 0; + Markdown = 1; +} + +message ParameterInformation { + oneof label { + string simple = 1; + LabelOffsets label_offsets = 2; + } + optional Documentation documentation = 3; +} + +message LabelOffsets { + uint32 start = 1; + uint32 end = 2; +} + +message GetHover { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 5; +} + +message GetHoverResponse { + optional Anchor start = 1; + optional Anchor end = 2; + repeated HoverBlock contents = 3; +} + +message HoverBlock { + string text = 1; + optional string language = 2; + bool is_markdown = 3; +} + +message ApplyCodeAction { + uint64 project_id = 1; + uint64 buffer_id = 2; + CodeAction action = 3; +} + +message ApplyCodeActionResponse { + ProjectTransaction transaction = 1; +} + +message PrepareRename { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message PrepareRenameResponse { + bool can_rename = 1; + Anchor start = 2; + Anchor end = 3; + repeated VectorClockEntry version = 4; + bool only_unprepared_rename_supported = 5; +} + +message PerformRename { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + string new_name = 4; + repeated VectorClockEntry version = 5; +} + +message OnTypeFormatting { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + string trigger = 4; + repeated VectorClockEntry version = 5; +} + +message OnTypeFormattingResponse { + Transaction transaction = 1; +} + + +message LinkedEditingRange { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message LinkedEditingRangeResponse { + repeated AnchorRange items = 1; + repeated VectorClockEntry version = 4; +} + +message InlayHint { + Anchor position = 1; + InlayHintLabel label = 2; + optional string kind = 3; + bool padding_left = 4; + bool padding_right = 5; + InlayHintTooltip tooltip = 6; + ResolveState resolve_state = 7; +} + +message InlayHintLabel { + oneof label { + string value = 1; + InlayHintLabelParts label_parts = 2; + } +} + +message InlayHintLabelParts { + repeated InlayHintLabelPart parts = 1; +} + +message InlayHintLabelPart { + string value = 1; + InlayHintLabelPartTooltip tooltip = 2; + optional string location_url = 3; + PointUtf16 location_range_start = 4; + PointUtf16 location_range_end = 5; + optional uint64 language_server_id = 6; +} + +message InlayHintTooltip { + oneof content { + string value = 1; + MarkupContent markup_content = 2; + } +} + +message InlayHintLabelPartTooltip { + oneof content { + string value = 1; + MarkupContent markup_content = 2; + } +} + +message ResolveState { + State state = 1; + LspResolveState lsp_resolve_state = 2; + + enum State { + Resolved = 0; + CanResolve = 1; + Resolving = 2; + } + + message LspResolveState { + optional string value = 1; + uint64 server_id = 2; + } +} + +// This type is used to resolve more than just +// the documentation, but for backwards-compatibility +// reasons we can't rename the type. +message ResolveCompletionDocumentation { + uint64 project_id = 1; + uint64 language_server_id = 2; + bytes lsp_completion = 3; + uint64 buffer_id = 4; +} + +message ResolveCompletionDocumentationResponse { + string documentation = 1; + bool documentation_is_markdown = 2; + Anchor old_start = 3; + Anchor old_end = 4; + string new_text = 5; + bytes lsp_completion = 6; +} + +message ResolveInlayHint { + uint64 project_id = 1; + uint64 buffer_id = 2; + uint64 language_server_id = 3; + InlayHint hint = 4; +} + +message ResolveInlayHintResponse { + InlayHint hint = 1; +} + +message RefreshInlayHints { + uint64 project_id = 1; +} + +message CodeLens { + bytes lsp_lens = 1; +} + +message GetCodeLens { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; +} + +message GetCodeLensResponse { + repeated CodeAction lens_actions = 1; + repeated VectorClockEntry version = 2; +} + +message RefreshCodeLens { + uint64 project_id = 1; +} + +message MarkupContent { + bool is_markdown = 1; + string value = 2; +} + +message PerformRenameResponse { + ProjectTransaction transaction = 2; +} + +message CodeAction { + uint64 server_id = 1; + Anchor start = 2; + Anchor end = 3; + bytes lsp_action = 4; + Kind kind = 5; + bool resolved = 6; + enum Kind { + Action = 0; + Command = 1; + CodeLens = 2; + } +} + +message LanguageServer { + uint64 id = 1; + string name = 2; + optional uint64 worktree_id = 3; +} + +message StartLanguageServer { + uint64 project_id = 1; + LanguageServer server = 2; +} + +message UpdateDiagnosticSummary { + uint64 project_id = 1; + uint64 worktree_id = 2; + DiagnosticSummary summary = 3; +} + +message DiagnosticSummary { + string path = 1; + uint64 language_server_id = 2; + uint32 error_count = 3; + uint32 warning_count = 4; +} + +message UpdateLanguageServer { + uint64 project_id = 1; + uint64 language_server_id = 2; + oneof variant { + LspWorkStart work_start = 3; + LspWorkProgress work_progress = 4; + LspWorkEnd work_end = 5; + LspDiskBasedDiagnosticsUpdating disk_based_diagnostics_updating = 6; + LspDiskBasedDiagnosticsUpdated disk_based_diagnostics_updated = 7; + } +} + +message LspWorkStart { + string token = 1; + optional string title = 4; + optional string message = 2; + optional uint32 percentage = 3; + optional bool is_cancellable = 5; +} + +message LspWorkProgress { + string token = 1; + optional string message = 2; + optional uint32 percentage = 3; + optional bool is_cancellable = 4; +} + +message LspWorkEnd { + string token = 1; +} + +message LspDiskBasedDiagnosticsUpdating {} + +message LspDiskBasedDiagnosticsUpdated {} + +message LanguageServerLog { + uint64 project_id = 1; + uint64 language_server_id = 2; + oneof log_type { + uint32 log_message_type = 3; + LspLogTrace log_trace = 4; + } + string message = 5; +} + +message LspLogTrace { + optional string message = 1; +} + +message ApplyCodeActionKind { + uint64 project_id = 1; + string kind = 2; + repeated uint64 buffer_ids = 3; +} + +message ApplyCodeActionKindResponse { + ProjectTransaction transaction = 1; +} + +message RegisterBufferWithLanguageServers { + uint64 project_id = 1; + uint64 buffer_id = 2; +} + +enum FormatTrigger { + Save = 0; + Manual = 1; +} + +message OpenBufferForSymbol { + uint64 project_id = 1; + Symbol symbol = 2; +} + +message OpenBufferForSymbolResponse { + uint64 buffer_id = 1; +} + +message FormatBuffers { + uint64 project_id = 1; + FormatTrigger trigger = 2; + repeated uint64 buffer_ids = 3; +} + +message FormatBuffersResponse { + ProjectTransaction transaction = 1; +} + +message GetCompletions { + uint64 project_id = 1; + uint64 buffer_id = 2; + Anchor position = 3; + repeated VectorClockEntry version = 4; +} + +message CancelLanguageServerWork { + uint64 project_id = 1; + + oneof work { + Buffers buffers = 2; + LanguageServerWork language_server_work = 3; + } + + message Buffers { + repeated uint64 buffer_ids = 2; + } + + message LanguageServerWork { + uint64 language_server_id = 1; + optional string token = 2; + } +} + +message LanguageServerPromptRequest { + uint64 project_id = 1; + + oneof level { + Info info = 2; + Warning warning = 3; + Critical critical = 4; + } + + message Info {} + message Warning {} + message Critical {} + + string message = 5; + repeated string actions = 6; + string lsp_name = 7; +} + +message LanguageServerPromptResponse { + optional uint64 action_response = 1; +} + +message MultiLspQuery { + uint64 project_id = 1; + uint64 buffer_id = 2; + repeated VectorClockEntry version = 3; + oneof strategy { + AllLanguageServers all = 4; + } + oneof request { + GetHover get_hover = 5; + GetCodeActions get_code_actions = 6; + GetSignatureHelp get_signature_help = 7; + GetCodeLens get_code_lens = 8; + } +} + +message AllLanguageServers {} + +message RestartLanguageServers { + uint64 project_id = 1; + repeated uint64 buffer_ids = 2; +} + +message StopLanguageServers { + uint64 project_id = 1; + repeated uint64 buffer_ids = 2; +} + +message MultiLspQueryResponse { + repeated LspResponse responses = 1; +} + +message LspResponse { + oneof response { + GetHoverResponse get_hover_response = 1; + GetCodeActionsResponse get_code_actions_response = 2; + GetSignatureHelpResponse get_signature_help_response = 3; + GetCodeLensResponse get_code_lens_response = 4; + } +} + +message LanguageServerIdForName { + uint64 project_id = 1; + uint64 buffer_id = 2; + string name = 3; +} + +message LanguageServerIdForNameResponse { + optional uint64 server_id = 1; +} diff --git a/crates/proto/proto/notification.proto b/crates/proto/proto/notification.proto new file mode 100644 index 0000000000..ebd3d7fe44 --- /dev/null +++ b/crates/proto/proto/notification.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package zed.messages; + +message GetNotifications { + optional uint64 before_id = 1; +} + +message AddNotification { + Notification notification = 1; +} + +message GetNotificationsResponse { + repeated Notification notifications = 1; + bool done = 2; +} + +message DeleteNotification { + uint64 notification_id = 1; +} + +message UpdateNotification { + Notification notification = 1; +} + +message MarkNotificationRead { + uint64 notification_id = 1; +} + +message Notification { + uint64 id = 1; + uint64 timestamp = 2; + string kind = 3; + optional uint64 entity_id = 4; + string content = 5; + bool is_read = 6; + optional bool response = 7; +} diff --git a/crates/proto/proto/task.proto b/crates/proto/proto/task.proto new file mode 100644 index 0000000000..e6fa192ab5 --- /dev/null +++ b/crates/proto/proto/task.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package zed.messages; + +import "buffer.proto"; + +message TaskContextForLocation { + uint64 project_id = 1; + Location location = 2; + map task_variables = 3; +} + +message TaskContext { + optional string cwd = 1; + map task_variables = 2; + map project_env = 3; +} + +message Shell { + message WithArguments { + string program = 1; + repeated string args = 2; + } + + oneof shell_type { + System system = 1; + string program = 2; + WithArguments with_arguments = 3; + } +} + +message System {} + +enum RevealStrategy { + RevealAlways = 0; + RevealNever = 1; +} + +enum HideStrategy { + HideAlways = 0; + HideNever = 1; + HideOnSuccess = 2; +} diff --git a/crates/proto/proto/toolchain.proto b/crates/proto/proto/toolchain.proto new file mode 100644 index 0000000000..9c24fb40f0 --- /dev/null +++ b/crates/proto/proto/toolchain.proto @@ -0,0 +1,45 @@ +syntax = "proto3"; +package zed.messages; + +message ListToolchains { + uint64 project_id = 1; + uint64 worktree_id = 2; + string language_name = 3; + optional string path = 4; +} + +message Toolchain { + string name = 1; + string path = 2; + string raw_json = 3; +} + +message ToolchainGroup { + uint64 start_index = 1; + string name = 2; +} + +message ListToolchainsResponse { + repeated Toolchain toolchains = 1; + bool has_values = 2; + repeated ToolchainGroup groups = 3; +} + +message ActivateToolchain { + uint64 project_id = 1; + uint64 worktree_id = 2; + Toolchain toolchain = 3; + string language_name = 4; + optional string path = 5; +} + +message ActiveToolchain { + uint64 project_id = 1; + uint64 worktree_id = 2; + string language_name = 3; + optional string path = 4; +} + +message ActiveToolchainResponse { + optional Toolchain toolchain = 1; +} diff --git a/crates/proto/proto/worktree.proto b/crates/proto/proto/worktree.proto new file mode 100644 index 0000000000..418f908d7a --- /dev/null +++ b/crates/proto/proto/worktree.proto @@ -0,0 +1,150 @@ +syntax = "proto3"; +package zed.messages; + +message Timestamp { + uint64 seconds = 1; + uint32 nanos = 2; +} + +message File { + uint64 worktree_id = 1; + optional uint64 entry_id = 2; + string path = 3; + Timestamp mtime = 4; + bool is_deleted = 5; +} + +message Entry { + uint64 id = 1; + bool is_dir = 2; + string path = 3; + uint64 inode = 4; + Timestamp mtime = 5; + bool is_ignored = 7; + bool is_external = 8; + reserved 6; + reserved 9; + bool is_fifo = 10; + optional uint64 size = 11; + optional string canonical_path = 12; +} + +message AddWorktree { + string path = 1; + uint64 project_id = 2; + bool visible = 3; +} + +message AddWorktreeResponse { + uint64 worktree_id = 1; + string canonicalized_path = 2; +} + +message RemoveWorktree { + uint64 worktree_id = 1; +} + +message GetPathMetadata { + uint64 project_id = 1; + string path = 2; +} + +message GetPathMetadataResponse { + bool exists = 1; + string path = 2; + bool is_dir = 3; +} + +message WorktreeMetadata { + uint64 id = 1; + string root_name = 2; + bool visible = 3; + string abs_path = 4; +} + +message ProjectPath { + uint64 worktree_id = 1; + string path = 2; +} + +message ListRemoteDirectoryConfig { + bool is_dir = 1; +} + +message ListRemoteDirectory { + uint64 dev_server_id = 1; + string path = 2; + ListRemoteDirectoryConfig config = 3; +} + +message EntryInfo { + bool is_dir = 1; +} + +message ListRemoteDirectoryResponse { + repeated string entries = 1; + repeated EntryInfo entry_info = 2; +} + +message CreateProjectEntry { + uint64 project_id = 1; + uint64 worktree_id = 2; + string path = 3; + bool is_directory = 4; +} + +message RenameProjectEntry { + uint64 project_id = 1; + uint64 entry_id = 2; + string new_path = 3; +} + +message CopyProjectEntry { + uint64 project_id = 1; + uint64 entry_id = 2; + string new_path = 3; + optional string relative_worktree_source_path = 4; +} + +message DeleteProjectEntry { + uint64 project_id = 1; + uint64 entry_id = 2; + bool use_trash = 3; +} + +message ExpandProjectEntry { + uint64 project_id = 1; + uint64 entry_id = 2; +} + +message ExpandProjectEntryResponse { + uint64 worktree_scan_id = 1; +} + +message ExpandAllForProjectEntry { + uint64 project_id = 1; + uint64 entry_id = 2; +} + +message ExpandAllForProjectEntryResponse { + uint64 worktree_scan_id = 1; +} + +message ProjectEntryResponse { + optional Entry entry = 1; + uint64 worktree_scan_id = 2; +} + +message UpdateWorktreeSettings { + uint64 project_id = 1; + uint64 worktree_id = 2; + string path = 3; + optional string content = 4; + optional LocalSettingsKind kind = 5; +} + +enum LocalSettingsKind { + Settings = 0; + Tasks = 1; + Editorconfig = 2; +} diff --git a/crates/proto/proto/zed.proto b/crates/proto/proto/zed.proto index 528834608f..ad8a4746e0 100644 --- a/crates/proto/proto/zed.proto +++ b/crates/proto/proto/zed.proto @@ -1,12 +1,21 @@ syntax = "proto3"; package zed.messages; -// Looking for a number? Search "// current max" +import "ai.proto"; +import "app.proto"; +import "buffer.proto"; +import "call.proto"; +import "channel.proto"; +import "core.proto"; +import "debugger.proto"; +import "git.proto"; +import "lsp.proto"; +import "notification.proto"; +import "task.proto"; +import "toolchain.proto"; +import "worktree.proto"; -message PeerId { - uint32 owner_id = 1; - uint32 id = 2; -} +// Looking for a number? Search "// current max" message Envelope { uint32 id = 1; @@ -323,7 +332,6 @@ message Envelope { GitCommitDetails git_commit_details = 302; GitCheckoutFiles git_checkout_files = 303; - Push push = 304; Fetch fetch = 305; GetRemotes get_remotes = 306; @@ -390,8 +398,6 @@ message Envelope { reserved 255 to 256; } -// Messages - message Hello { PeerId peer_id = 1; } @@ -434,3182 +440,6 @@ message Test { uint64 id = 1; } -message CreateRoom {} - -message CreateRoomResponse { - Room room = 1; - optional LiveKitConnectionInfo live_kit_connection_info = 2; -} - -message JoinRoom { - uint64 id = 1; -} - -message JoinRoomResponse { - Room room = 1; - optional uint64 channel_id = 2; - optional LiveKitConnectionInfo live_kit_connection_info = 3; -} - -message RejoinRoom { - uint64 id = 1; - repeated UpdateProject reshared_projects = 2; - repeated RejoinProject rejoined_projects = 3; -} -message RejoinRemoteProjects { - repeated RejoinProject rejoined_projects = 1; -} - -message RejoinRemoteProjectsResponse { - repeated RejoinedProject rejoined_projects = 1; -} - -message RejoinProject { - uint64 id = 1; - repeated RejoinWorktree worktrees = 2; - repeated RejoinRepository repositories = 3; -} - -message RejoinWorktree { - uint64 id = 1; - uint64 scan_id = 2; -} - -message RejoinRepository { - uint64 id = 1; - uint64 scan_id = 2; -} - -message RejoinRoomResponse { - Room room = 1; - repeated ResharedProject reshared_projects = 2; - repeated RejoinedProject rejoined_projects = 3; -} - -message ResharedProject { - uint64 id = 1; - repeated Collaborator collaborators = 2; -} - -message RejoinedProject { - uint64 id = 1; - repeated WorktreeMetadata worktrees = 2; - repeated Collaborator collaborators = 3; - repeated LanguageServer language_servers = 4; -} - -message LeaveRoom {} - -message Room { - uint64 id = 1; - repeated Participant participants = 2; - repeated PendingParticipant pending_participants = 3; - repeated Follower followers = 4; - string livekit_room = 5; -} - -message Participant { - uint64 user_id = 1; - PeerId peer_id = 2; - repeated ParticipantProject projects = 3; - ParticipantLocation location = 4; - uint32 participant_index = 5; - ChannelRole role = 6; - reserved 7; -} - -message PendingParticipant { - uint64 user_id = 1; - uint64 calling_user_id = 2; - optional uint64 initial_project_id = 3; -} - -message ParticipantProject { - uint64 id = 1; - repeated string worktree_root_names = 2; -} - -message Follower { - PeerId leader_id = 1; - PeerId follower_id = 2; - uint64 project_id = 3; -} - -message ParticipantLocation { - oneof variant { - SharedProject shared_project = 1; - UnsharedProject unshared_project = 2; - External external = 3; - } - - message SharedProject { - uint64 id = 1; - } - - message UnsharedProject {} - - message External {} -} - -message Call { - uint64 room_id = 1; - uint64 called_user_id = 2; - optional uint64 initial_project_id = 3; -} - -message IncomingCall { - uint64 room_id = 1; - uint64 calling_user_id = 2; - repeated uint64 participant_user_ids = 3; - optional ParticipantProject initial_project = 4; -} - -message CallCanceled { - uint64 room_id = 1; -} - -message CancelCall { - uint64 room_id = 1; - uint64 called_user_id = 2; -} - -message DeclineCall { - uint64 room_id = 1; -} - -message UpdateParticipantLocation { - uint64 room_id = 1; - ParticipantLocation location = 2; -} - -message RoomUpdated { - Room room = 1; -} - -message LiveKitConnectionInfo { - string server_url = 1; - string token = 2; - bool can_publish = 3; -} - -message ShareProject { - uint64 room_id = 1; - repeated WorktreeMetadata worktrees = 2; - reserved 3; - bool is_ssh_project = 4; -} - -message ShareProjectResponse { - uint64 project_id = 1; -} - -message UnshareProject { - uint64 project_id = 1; -} - -message UpdateProject { - uint64 project_id = 1; - repeated WorktreeMetadata worktrees = 2; -} - -message JoinProject { - uint64 project_id = 1; -} - -message ListRemoteDirectoryConfig { - bool is_dir = 1; -} - -message ListRemoteDirectory { - uint64 dev_server_id = 1; - string path = 2; - ListRemoteDirectoryConfig config = 3; -} - -message EntryInfo { - bool is_dir = 1; -} - -message ListRemoteDirectoryResponse { - repeated string entries = 1; - repeated EntryInfo entry_info = 2; -} - -message JoinProjectResponse { - uint64 project_id = 5; - uint32 replica_id = 1; - repeated WorktreeMetadata worktrees = 2; - repeated Collaborator collaborators = 3; - repeated LanguageServer language_servers = 4; - ChannelRole role = 6; - reserved 7; -} - -message LeaveProject { - uint64 project_id = 1; -} - -message UpdateWorktree { - uint64 project_id = 1; - uint64 worktree_id = 2; - string root_name = 3; - repeated Entry updated_entries = 4; - repeated uint64 removed_entries = 5; - repeated RepositoryEntry updated_repositories = 6; // deprecated - repeated uint64 removed_repositories = 7; // deprecated - uint64 scan_id = 8; - bool is_last_update = 9; - string abs_path = 10; -} - -message UpdateWorktreeSettings { - uint64 project_id = 1; - uint64 worktree_id = 2; - string path = 3; - optional string content = 4; - optional LocalSettingsKind kind = 5; -} - -enum LocalSettingsKind { - Settings = 0; - Tasks = 1; - Editorconfig = 2; -} - -message CreateProjectEntry { - uint64 project_id = 1; - uint64 worktree_id = 2; - string path = 3; - bool is_directory = 4; -} - -message RenameProjectEntry { - uint64 project_id = 1; - uint64 entry_id = 2; - string new_path = 3; -} - -message CopyProjectEntry { - uint64 project_id = 1; - uint64 entry_id = 2; - string new_path = 3; - optional string relative_worktree_source_path = 4; -} - -message DeleteProjectEntry { - uint64 project_id = 1; - uint64 entry_id = 2; - bool use_trash = 3; -} - -message ExpandProjectEntry { - uint64 project_id = 1; - uint64 entry_id = 2; -} - -message ExpandProjectEntryResponse { - uint64 worktree_scan_id = 1; -} - -message ExpandAllForProjectEntry { - uint64 project_id = 1; - uint64 entry_id = 2; -} - -message ExpandAllForProjectEntryResponse { - uint64 worktree_scan_id = 1; -} - -message ProjectEntryResponse { - optional Entry entry = 1; - uint64 worktree_scan_id = 2; -} - -message AddProjectCollaborator { - uint64 project_id = 1; - Collaborator collaborator = 2; -} - -message UpdateProjectCollaborator { - uint64 project_id = 1; - PeerId old_peer_id = 2; - PeerId new_peer_id = 3; -} - -message RemoveProjectCollaborator { - uint64 project_id = 1; - PeerId peer_id = 2; -} - -message UpdateChannelBufferCollaborators { - uint64 channel_id = 1; - repeated Collaborator collaborators = 2; -} - -message GetDefinition { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message GetDefinitionResponse { - repeated LocationLink links = 1; -} - -message GetDeclaration { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message GetDeclarationResponse { - repeated LocationLink links = 1; -} - -message GetTypeDefinition { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; - } - -message GetTypeDefinitionResponse { - repeated LocationLink links = 1; -} -message GetImplementation { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; - } - -message GetImplementationResponse { - repeated LocationLink links = 1; -} - -message GetReferences { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; - } - -message GetReferencesResponse { - repeated Location locations = 1; -} - -message GetDocumentHighlights { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; - } - -message GetDocumentHighlightsResponse { - repeated DocumentHighlight highlights = 1; -} - -message Location { - uint64 buffer_id = 1; - Anchor start = 2; - Anchor end = 3; -} - -message LocationLink { - optional Location origin = 1; - Location target = 2; -} - -message DocumentHighlight { - Kind kind = 1; - Anchor start = 2; - Anchor end = 3; - - enum Kind { - Text = 0; - Read = 1; - Write = 2; - } -} - -message GetProjectSymbols { - uint64 project_id = 1; - string query = 2; -} - -message GetProjectSymbolsResponse { - repeated Symbol symbols = 4; -} - -message Symbol { - uint64 source_worktree_id = 1; - uint64 worktree_id = 2; - string language_server_name = 3; - string name = 4; - int32 kind = 5; - string path = 6; - // Cannot use generate anchors for unopened files, - // so we are forced to use point coords instead - PointUtf16 start = 7; - PointUtf16 end = 8; - bytes signature = 9; - uint64 language_server_id = 10; -} - -message GetDocumentSymbols { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; -} - -message GetDocumentSymbolsResponse { - repeated DocumentSymbol symbols = 1; -} - -message DocumentSymbol { - string name = 1; - int32 kind = 2; - // Cannot use generate anchors for unopened files, - // so we are forced to use point coords instead - PointUtf16 start = 3; - PointUtf16 end = 4; - PointUtf16 selection_start = 5; - PointUtf16 selection_end = 6; - repeated DocumentSymbol children = 7; -} - -message OpenBufferForSymbol { - uint64 project_id = 1; - Symbol symbol = 2; -} - -message OpenBufferForSymbolResponse { - uint64 buffer_id = 1; -} - -message OpenBufferByPath { - uint64 project_id = 1; - uint64 worktree_id = 2; - string path = 3; -} - -message OpenBufferById { - uint64 project_id = 1; - uint64 id = 2; -} - -message OpenNewBuffer { - uint64 project_id = 1; -} - -message OpenBufferResponse { - uint64 buffer_id = 1; -} - -message CreateBufferForPeer { - uint64 project_id = 1; - PeerId peer_id = 2; - oneof variant { - BufferState state = 3; - BufferChunk chunk = 4; - } -} - -message UpdateBuffer { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated Operation operations = 3; -} - -message UpdateChannelBuffer { - uint64 channel_id = 1; - repeated Operation operations = 2; -} - -message UpdateBufferFile { - uint64 project_id = 1; - uint64 buffer_id = 2; - File file = 3; -} - -message SaveBuffer { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; - optional ProjectPath new_path = 4; -} - -message CloseBuffer { - uint64 project_id = 1; - uint64 buffer_id = 2; -} - -message ProjectPath { - uint64 worktree_id = 1; - string path = 2; -} - -message BufferSaved { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; - Timestamp mtime = 4; - reserved 5; -} - -message BufferReloaded { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; - Timestamp mtime = 4; - reserved 5; - LineEnding line_ending = 6; -} - -message ReloadBuffers { - uint64 project_id = 1; - repeated uint64 buffer_ids = 2; -} - -message ReloadBuffersResponse { - ProjectTransaction transaction = 1; -} - -message SynchronizeBuffers { - uint64 project_id = 1; - repeated BufferVersion buffers = 2; -} - -message SynchronizeBuffersResponse { - repeated BufferVersion buffers = 1; -} - -message BufferVersion { - uint64 id = 1; - repeated VectorClockEntry version = 2; -} - -message ChannelBufferVersion { - uint64 channel_id = 1; - repeated VectorClockEntry version = 2; - uint64 epoch = 3; -} - -message ApplyCodeActionKind { - uint64 project_id = 1; - string kind = 2; - repeated uint64 buffer_ids = 3; -} - -message ApplyCodeActionKindResponse { - ProjectTransaction transaction = 1; -} - -enum FormatTrigger { - Save = 0; - Manual = 1; -} - -message FormatBuffers { - uint64 project_id = 1; - FormatTrigger trigger = 2; - repeated uint64 buffer_ids = 3; -} - -message FormatBuffersResponse { - ProjectTransaction transaction = 1; -} - -message GetCompletions { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message GetCompletionsResponse { - repeated Completion completions = 1; - repeated VectorClockEntry version = 2; -} - -message ApplyCompletionAdditionalEdits { - uint64 project_id = 1; - uint64 buffer_id = 2; - Completion completion = 3; -} - -message ApplyCompletionAdditionalEditsResponse { - Transaction transaction = 1; -} - -message Completion { - Anchor old_start = 1; - Anchor old_end = 2; - string new_text = 3; - uint64 server_id = 4; - bytes lsp_completion = 5; - bool resolved = 6; - Source source = 7; - optional bytes lsp_defaults = 8; - optional Anchor buffer_word_start = 9; - optional Anchor buffer_word_end = 10; - - enum Source { - Lsp = 0; - Custom = 1; - BufferWord = 2; - } -} - -message GetCodeActions { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor start = 3; - Anchor end = 4; - repeated VectorClockEntry version = 5; -} - -message GetCodeActionsResponse { - repeated CodeAction actions = 1; - repeated VectorClockEntry version = 2; -} - -message GetSignatureHelp { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message GetSignatureHelpResponse { - optional SignatureHelp signature_help = 1; -} - -message SignatureHelp { - repeated SignatureInformation signatures = 1; - optional uint32 active_signature = 2; - optional uint32 active_parameter = 3; -} - -message SignatureInformation { - string label = 1; - optional Documentation documentation = 2; - repeated ParameterInformation parameters = 3; - optional uint32 active_parameter = 4; -} - -message Documentation { - oneof content { - string value = 1; - MarkupContent markup_content = 2; - } -} - -enum MarkupKind { - PlainText = 0; - Markdown = 1; -} - -message ParameterInformation { - oneof label { - string simple = 1; - LabelOffsets label_offsets = 2; - } - optional Documentation documentation = 3; -} - -message LabelOffsets { - uint32 start = 1; - uint32 end = 2; -} - -message GetHover { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 5; -} - -message GetHoverResponse { - optional Anchor start = 1; - optional Anchor end = 2; - repeated HoverBlock contents = 3; -} - -message HoverBlock { - string text = 1; - optional string language = 2; - bool is_markdown = 3; -} - -message ApplyCodeAction { - uint64 project_id = 1; - uint64 buffer_id = 2; - CodeAction action = 3; -} - -message ApplyCodeActionResponse { - ProjectTransaction transaction = 1; -} - -message PrepareRename { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message PrepareRenameResponse { - bool can_rename = 1; - Anchor start = 2; - Anchor end = 3; - repeated VectorClockEntry version = 4; - bool only_unprepared_rename_supported = 5; -} - -message PerformRename { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - string new_name = 4; - repeated VectorClockEntry version = 5; -} - -message OnTypeFormatting { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - string trigger = 4; - repeated VectorClockEntry version = 5; -} - -message OnTypeFormattingResponse { - Transaction transaction = 1; -} - - -message LinkedEditingRange { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; - repeated VectorClockEntry version = 4; -} - -message AnchorRange { - Anchor start = 1; - Anchor end = 2; -} - -message LinkedEditingRangeResponse { - repeated AnchorRange items = 1; - repeated VectorClockEntry version = 4; -} - -message InlayHints { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor start = 3; - Anchor end = 4; - repeated VectorClockEntry version = 5; -} - -message InlayHintsResponse { - repeated InlayHint hints = 1; - repeated VectorClockEntry version = 2; -} - -message InlayHint { - Anchor position = 1; - InlayHintLabel label = 2; - optional string kind = 3; - bool padding_left = 4; - bool padding_right = 5; - InlayHintTooltip tooltip = 6; - ResolveState resolve_state = 7; -} - -message InlayHintLabel { - oneof label { - string value = 1; - InlayHintLabelParts label_parts = 2; - } -} - -message InlayHintLabelParts { - repeated InlayHintLabelPart parts = 1; -} - -message InlayHintLabelPart { - string value = 1; - InlayHintLabelPartTooltip tooltip = 2; - optional string location_url = 3; - PointUtf16 location_range_start = 4; - PointUtf16 location_range_end = 5; - optional uint64 language_server_id = 6; -} - -message InlayHintTooltip { - oneof content { - string value = 1; - MarkupContent markup_content = 2; - } -} - -message InlayHintLabelPartTooltip { - oneof content { - string value = 1; - MarkupContent markup_content = 2; - } -} - -message ResolveState { - State state = 1; - LspResolveState lsp_resolve_state = 2; - - enum State { - Resolved = 0; - CanResolve = 1; - Resolving = 2; - } - - message LspResolveState { - optional string value = 1; - uint64 server_id = 2; - } -} - -// This type is used to resolve more than just -// the documentation, but for backwards-compatibility -// reasons we can't rename the type. -message ResolveCompletionDocumentation { - uint64 project_id = 1; - uint64 language_server_id = 2; - bytes lsp_completion = 3; - uint64 buffer_id = 4; -} - -message ResolveCompletionDocumentationResponse { - string documentation = 1; - bool documentation_is_markdown = 2; - Anchor old_start = 3; - Anchor old_end = 4; - string new_text = 5; - bytes lsp_completion = 6; -} - -message ResolveInlayHint { - uint64 project_id = 1; - uint64 buffer_id = 2; - uint64 language_server_id = 3; - InlayHint hint = 4; -} - -message ResolveInlayHintResponse { - InlayHint hint = 1; -} - -message RefreshInlayHints { - uint64 project_id = 1; -} - -message CodeLens { - bytes lsp_lens = 1; -} - -message GetCodeLens { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; -} - -message GetCodeLensResponse { - repeated CodeAction lens_actions = 1; - repeated VectorClockEntry version = 2; -} - -message RefreshCodeLens { - uint64 project_id = 1; -} - -message MarkupContent { - bool is_markdown = 1; - string value = 2; -} - -message PerformRenameResponse { - ProjectTransaction transaction = 2; -} - -message SearchQuery { - string query = 2; - bool regex = 3; - bool whole_word = 4; - bool case_sensitive = 5; - string files_to_include = 6; - string files_to_exclude = 7; - bool include_ignored = 8; -} - -message FindSearchCandidates { - uint64 project_id = 1; - SearchQuery query = 2; - uint64 limit = 3; -} - -message FindSearchCandidatesResponse { - repeated uint64 buffer_ids = 1; -} - -message CodeAction { - uint64 server_id = 1; - Anchor start = 2; - Anchor end = 3; - bytes lsp_action = 4; - Kind kind = 5; - bool resolved = 6; - enum Kind { - Action = 0; - Command = 1; - CodeLens = 2; - } -} - -message ProjectTransaction { - repeated uint64 buffer_ids = 1; - repeated Transaction transactions = 2; -} - -message Transaction { - LamportTimestamp id = 1; - repeated LamportTimestamp edit_ids = 2; - repeated VectorClockEntry start = 3; -} - -message LamportTimestamp { - uint32 replica_id = 1; - uint32 value = 2; -} - -message LanguageServer { - uint64 id = 1; - string name = 2; - optional uint64 worktree_id = 3; -} - -message StartLanguageServer { - uint64 project_id = 1; - LanguageServer server = 2; -} - -message UpdateDiagnosticSummary { - uint64 project_id = 1; - uint64 worktree_id = 2; - DiagnosticSummary summary = 3; -} - -message DiagnosticSummary { - string path = 1; - uint64 language_server_id = 2; - uint32 error_count = 3; - uint32 warning_count = 4; -} - -message UpdateLanguageServer { - uint64 project_id = 1; - uint64 language_server_id = 2; - oneof variant { - LspWorkStart work_start = 3; - LspWorkProgress work_progress = 4; - LspWorkEnd work_end = 5; - LspDiskBasedDiagnosticsUpdating disk_based_diagnostics_updating = 6; - LspDiskBasedDiagnosticsUpdated disk_based_diagnostics_updated = 7; - } -} - -message LspWorkStart { - string token = 1; - optional string title = 4; - optional string message = 2; - optional uint32 percentage = 3; - optional bool is_cancellable = 5; -} - -message LspWorkProgress { - string token = 1; - optional string message = 2; - optional uint32 percentage = 3; - optional bool is_cancellable = 4; -} - -message LspWorkEnd { - string token = 1; -} - -message LspDiskBasedDiagnosticsUpdating {} - -message LspDiskBasedDiagnosticsUpdated {} - -message LanguageServerLog { - uint64 project_id = 1; - uint64 language_server_id = 2; - oneof log_type { - uint32 log_message_type = 3; - LspLogTrace log_trace = 4; - } - string message = 5; -} - -message LspLogTrace { - optional string message = 1; -} - -message UpdateChannels { - repeated Channel channels = 1; - repeated uint64 delete_channels = 4; - repeated Channel channel_invitations = 5; - repeated uint64 remove_channel_invitations = 6; - repeated ChannelParticipants channel_participants = 7; - repeated ChannelMessageId latest_channel_message_ids = 8; - repeated ChannelBufferVersion latest_channel_buffer_versions = 9; - - reserved 10 to 15; -} - -message UpdateUserChannels { - repeated ChannelMessageId observed_channel_message_id = 1; - repeated ChannelBufferVersion observed_channel_buffer_version = 2; - repeated ChannelMembership channel_memberships = 3; -} - -message ChannelMembership { - uint64 channel_id = 1; - ChannelRole role = 2; -} - -message ChannelMessageId { - uint64 channel_id = 1; - uint64 message_id = 2; -} - -message ChannelPermission { - uint64 channel_id = 1; - ChannelRole role = 3; -} - -message ChannelParticipants { - uint64 channel_id = 1; - repeated uint64 participant_user_ids = 2; -} - -message JoinChannel { - uint64 channel_id = 1; -} - -message DeleteChannel { - uint64 channel_id = 1; -} - -message GetChannelMembers { - uint64 channel_id = 1; - string query = 2; - uint64 limit = 3; -} - -message GetChannelMembersResponse { - repeated ChannelMember members = 1; - repeated User users = 2; -} - -message ChannelMember { - uint64 user_id = 1; - Kind kind = 3; - ChannelRole role = 4; - - enum Kind { - Member = 0; - Invitee = 1; - } -} - -message SubscribeToChannels {} - -message CreateChannel { - string name = 1; - optional uint64 parent_id = 2; -} - -message CreateChannelResponse { - Channel channel = 1; - optional uint64 parent_id = 2; -} - -message InviteChannelMember { - uint64 channel_id = 1; - uint64 user_id = 2; - ChannelRole role = 4; -} - -message RemoveChannelMember { - uint64 channel_id = 1; - uint64 user_id = 2; -} - -enum ChannelRole { - Admin = 0; - Member = 1; - Guest = 2; - Banned = 3; - Talker = 4; -} - -message SetChannelMemberRole { - uint64 channel_id = 1; - uint64 user_id = 2; - ChannelRole role = 3; -} - -message SetChannelVisibility { - uint64 channel_id = 1; - ChannelVisibility visibility = 2; -} - -message RenameChannel { - uint64 channel_id = 1; - string name = 2; -} - -message RenameChannelResponse { - Channel channel = 1; -} - -message JoinChannelChat { - uint64 channel_id = 1; -} - -message JoinChannelChatResponse { - repeated ChannelMessage messages = 1; - bool done = 2; -} - -message LeaveChannelChat { - uint64 channel_id = 1; -} - -message SendChannelMessage { - uint64 channel_id = 1; - string body = 2; - Nonce nonce = 3; - repeated ChatMention mentions = 4; - optional uint64 reply_to_message_id = 5; -} - -message RemoveChannelMessage { - uint64 channel_id = 1; - uint64 message_id = 2; -} - -message UpdateChannelMessage { - uint64 channel_id = 1; - uint64 message_id = 2; - Nonce nonce = 4; - string body = 5; - repeated ChatMention mentions = 6; -} - -message AckChannelMessage { - uint64 channel_id = 1; - uint64 message_id = 2; -} - -message SendChannelMessageResponse { - ChannelMessage message = 1; -} - -message ChannelMessageSent { - uint64 channel_id = 1; - ChannelMessage message = 2; -} - -message ChannelMessageUpdate { - uint64 channel_id = 1; - ChannelMessage message = 2; -} - -message GetChannelMessages { - uint64 channel_id = 1; - uint64 before_message_id = 2; -} - -message GetChannelMessagesResponse { - repeated ChannelMessage messages = 1; - bool done = 2; -} - -message GetChannelMessagesById { - repeated uint64 message_ids = 1; -} - -message MoveChannel { - uint64 channel_id = 1; - uint64 to = 2; -} - -message JoinChannelBuffer { - uint64 channel_id = 1; -} - -message ChannelMessage { - uint64 id = 1; - string body = 2; - uint64 timestamp = 3; - uint64 sender_id = 4; - Nonce nonce = 5; - repeated ChatMention mentions = 6; - optional uint64 reply_to_message_id = 7; - optional uint64 edited_at = 8; -} - -message ChatMention { - Range range = 1; - uint64 user_id = 2; -} - -message RejoinChannelBuffers { - repeated ChannelBufferVersion buffers = 1; -} - -message RejoinChannelBuffersResponse { - repeated RejoinedChannelBuffer buffers = 1; -} - -message AckBufferOperation { - uint64 buffer_id = 1; - uint64 epoch = 2; - repeated VectorClockEntry version = 3; -} - -message JoinChannelBufferResponse { - uint64 buffer_id = 1; - uint32 replica_id = 2; - string base_text = 3; - repeated Operation operations = 4; - repeated Collaborator collaborators = 5; - uint64 epoch = 6; -} - -message RejoinedChannelBuffer { - uint64 channel_id = 1; - repeated VectorClockEntry version = 2; - repeated Operation operations = 3; - repeated Collaborator collaborators = 4; -} - -message LeaveChannelBuffer { - uint64 channel_id = 1; -} - -message RespondToChannelInvite { - uint64 channel_id = 1; - bool accept = 2; -} - -message GetUsers { - repeated uint64 user_ids = 1; -} - -message FuzzySearchUsers { - string query = 1; -} - -message UsersResponse { - repeated User users = 1; -} - -message RequestContact { - uint64 responder_id = 1; -} - -message RemoveContact { - uint64 user_id = 1; -} - -message RespondToContactRequest { - uint64 requester_id = 1; - ContactRequestResponse response = 2; -} - -enum ContactRequestResponse { - Accept = 0; - Decline = 1; - Block = 2; - Dismiss = 3; -} - -message UpdateContacts { - repeated Contact contacts = 1; - repeated uint64 remove_contacts = 2; - repeated IncomingContactRequest incoming_requests = 3; - repeated uint64 remove_incoming_requests = 4; - repeated uint64 outgoing_requests = 5; - repeated uint64 remove_outgoing_requests = 6; -} - -message UpdateInviteInfo { - string url = 1; - uint32 count = 2; -} - -message ShowContacts {} - -message IncomingContactRequest { - uint64 requester_id = 1; -} - -message UpdateDiagnostics { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - uint64 server_id = 3; - repeated Diagnostic diagnostics = 4; -} - -message Follow { - uint64 room_id = 1; - optional uint64 project_id = 2; - PeerId leader_id = 3; -} - -message FollowResponse { - View active_view = 3; - // TODO: Remove after version 0.145.x stabilizes. - optional ViewId active_view_id = 1; - repeated View views = 2; -} - -message UpdateFollowers { - uint64 room_id = 1; - optional uint64 project_id = 2; - reserved 3; - oneof variant { - View create_view = 5; - // TODO: Remove after version 0.145.x stabilizes. - UpdateActiveView update_active_view = 4; - UpdateView update_view = 6; - } -} - -message Unfollow { - uint64 room_id = 1; - optional uint64 project_id = 2; - PeerId leader_id = 3; -} - -message GetPrivateUserInfo {} - -message GetPrivateUserInfoResponse { - string metrics_id = 1; - bool staff = 2; - repeated string flags = 3; - optional uint64 accepted_tos_at = 4; -} - -enum Plan { - Free = 0; - ZedPro = 1; -} - -message UpdateUserPlan { - Plan plan = 1; -} - -message AcceptTermsOfService {} - -message AcceptTermsOfServiceResponse { - uint64 accepted_tos_at = 1; -} - -// Entities - -message ViewId { - PeerId creator = 1; - uint64 id = 2; -} - -message UpdateActiveView { - optional ViewId id = 1; - optional PeerId leader_id = 2; - View view = 3; -} - -enum PanelId { - AssistantPanel = 0; - DebugPanel = 1; -} - -message UpdateView { - ViewId id = 1; - optional PeerId leader_id = 2; - - oneof variant { - Editor editor = 3; - } - - message Editor { - repeated ExcerptInsertion inserted_excerpts = 1; - repeated uint64 deleted_excerpts = 2; - repeated Selection selections = 3; - optional Selection pending_selection = 4; - EditorAnchor scroll_top_anchor = 5; - float scroll_x = 6; - float scroll_y = 7; - } -} - -message View { - ViewId id = 1; - optional PeerId leader_id = 2; - optional PanelId panel_id = 6; - - oneof variant { - Editor editor = 3; - ChannelView channel_view = 4; - ContextEditor context_editor = 5; - } - - message Editor { - bool singleton = 1; - optional string title = 2; - repeated Excerpt excerpts = 3; - repeated Selection selections = 4; - optional Selection pending_selection = 5; - EditorAnchor scroll_top_anchor = 6; - float scroll_x = 7; - float scroll_y = 8; - } - - message ChannelView { - uint64 channel_id = 1; - Editor editor = 2; - } - - message ContextEditor { - string context_id = 1; - Editor editor = 2; - } -} - - -message Collaborator { - PeerId peer_id = 1; - uint32 replica_id = 2; - uint64 user_id = 3; - bool is_host = 4; -} - -message User { - uint64 id = 1; - string github_login = 2; - string avatar_url = 3; - optional string email = 4; - optional string name = 5; -} - -message File { - uint64 worktree_id = 1; - optional uint64 entry_id = 2; - string path = 3; - Timestamp mtime = 4; - bool is_deleted = 5; -} - -message Entry { - uint64 id = 1; - bool is_dir = 2; - string path = 3; - uint64 inode = 4; - Timestamp mtime = 5; - bool is_ignored = 7; - bool is_external = 8; - reserved 6; - reserved 9; - bool is_fifo = 10; - optional uint64 size = 11; - optional string canonical_path = 12; -} - -message RepositoryEntry { - uint64 repository_id = 1; - reserved 2; - repeated StatusEntry updated_statuses = 3; - repeated string removed_statuses = 4; - repeated string current_merge_conflicts = 5; - optional Branch branch_summary = 6; -} - -message UpdateRepository { - uint64 project_id = 1; - uint64 id = 2; - string abs_path = 3; - repeated uint64 entry_ids = 4; - optional Branch branch_summary = 5; - repeated StatusEntry updated_statuses = 6; - repeated string removed_statuses = 7; - repeated string current_merge_conflicts = 8; - uint64 scan_id = 9; - bool is_last_update = 10; -} - -message RemoveRepository { - uint64 project_id = 1; - uint64 id = 2; -} - -message StatusEntry { - string repo_path = 1; - // Can be removed once collab's min version is >=0.171.0. - GitStatus simple_status = 2; - GitFileStatus status = 3; -} - -enum GitStatus { - Added = 0; - Modified = 1; - Conflict = 2; - Deleted = 3; - Updated = 4; - TypeChanged = 5; - Renamed = 6; - Copied = 7; - Unmodified = 8; -} - -message GitFileStatus { - oneof variant { - Untracked untracked = 1; - Ignored ignored = 2; - Unmerged unmerged = 3; - Tracked tracked = 4; - } - - message Untracked {} - message Ignored {} - message Unmerged { - GitStatus first_head = 1; - GitStatus second_head = 2; - } - message Tracked { - GitStatus index_status = 1; - GitStatus worktree_status = 2; - } -} - -message BufferState { - uint64 id = 1; - optional File file = 2; - string base_text = 3; - LineEnding line_ending = 5; - repeated VectorClockEntry saved_version = 6; - Timestamp saved_mtime = 8; - - reserved 7; - reserved 4; -} - -message BufferChunk { - uint64 buffer_id = 1; - repeated Operation operations = 2; - bool is_last = 3; -} - -enum LineEnding { - Unix = 0; - Windows = 1; -} - -message Selection { - uint64 id = 1; - EditorAnchor start = 2; - EditorAnchor end = 3; - bool reversed = 4; -} - -message EditorAnchor { - uint64 excerpt_id = 1; - Anchor anchor = 2; -} - -enum CursorShape { - CursorBar = 0; - CursorBlock = 1; - CursorUnderscore = 2; - CursorHollow = 3; -} - -message ExcerptInsertion { - Excerpt excerpt = 1; - optional uint64 previous_excerpt_id = 2; -} - -message Excerpt { - uint64 id = 1; - uint64 buffer_id = 2; - Anchor context_start = 3; - Anchor context_end = 4; - Anchor primary_start = 5; - Anchor primary_end = 6; -} - -message Anchor { - uint32 replica_id = 1; - uint32 timestamp = 2; - uint64 offset = 3; - Bias bias = 4; - optional uint64 buffer_id = 5; -} - -enum Bias { - Left = 0; - Right = 1; -} - -message Diagnostic { - Anchor start = 1; - Anchor end = 2; - optional string source = 3; - Severity severity = 4; - string message = 5; - optional string code = 6; - uint64 group_id = 7; - bool is_primary = 8; - - reserved 9; - - bool is_disk_based = 10; - bool is_unnecessary = 11; - - enum Severity { - None = 0; - Error = 1; - Warning = 2; - Information = 3; - Hint = 4; - } - optional string data = 12; -} - -message Operation { - oneof variant { - Edit edit = 1; - Undo undo = 2; - UpdateSelections update_selections = 3; - UpdateDiagnostics update_diagnostics = 4; - UpdateCompletionTriggers update_completion_triggers = 5; - } - - message Edit { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - repeated VectorClockEntry version = 3; - repeated Range ranges = 4; - repeated string new_text = 5; - } - - message Undo { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - repeated VectorClockEntry version = 3; - repeated UndoCount counts = 4; - } - - message UpdateSelections { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - repeated Selection selections = 3; - bool line_mode = 4; - CursorShape cursor_shape = 5; - } - - message UpdateCompletionTriggers { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - repeated string triggers = 3; - uint64 language_server_id = 4; - } -} - -message UndoMapEntry { - uint32 replica_id = 1; - uint32 local_timestamp = 2; - repeated UndoCount counts = 3; -} - -message UndoCount { - uint32 replica_id = 1; - uint32 lamport_timestamp = 2; - uint32 count = 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; -} - -message PointUtf16 { - uint32 row = 1; - uint32 column = 2; -} - -message Nonce { - uint64 upper_half = 1; - uint64 lower_half = 2; -} - -enum ChannelVisibility { - Public = 0; - Members = 1; -} - -message Channel { - uint64 id = 1; - string name = 2; - ChannelVisibility visibility = 3; - repeated uint64 parent_path = 5; -} - -message Contact { - uint64 user_id = 1; - bool online = 2; - bool busy = 3; -} - -message WorktreeMetadata { - uint64 id = 1; - string root_name = 2; - bool visible = 3; - string abs_path = 4; -} - -message UpdateDiffBases { - uint64 project_id = 1; - uint64 buffer_id = 2; - - enum Mode { - // No collaborator is using the unstaged diff. - HEAD_ONLY = 0; - // No collaborator is using the diff from HEAD. - INDEX_ONLY = 1; - // Both the unstaged and uncommitted diffs are demanded, - // and the contents of the index and HEAD are the same for this path. - INDEX_MATCHES_HEAD = 2; - // Both the unstaged and uncommitted diffs are demanded, - // and the contents of the index and HEAD differ for this path, - // where None means the path doesn't exist in that state of the repo. - INDEX_AND_HEAD = 3; - } - - optional string staged_text = 3; - optional string committed_text = 4; - Mode mode = 5; -} - -message OpenUnstagedDiff { - uint64 project_id = 1; - uint64 buffer_id = 2; -} - -message OpenUnstagedDiffResponse { - optional string staged_text = 1; -} - -message OpenUncommittedDiff { - uint64 project_id = 1; - uint64 buffer_id = 2; -} - -message OpenUncommittedDiffResponse { - enum Mode { - INDEX_MATCHES_HEAD = 0; - INDEX_AND_HEAD = 1; - } - optional string staged_text = 1; - optional string committed_text = 2; - Mode mode = 3; -} - -message SetIndexText { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string path = 4; - optional string text = 5; -} - -message GetNotifications { - optional uint64 before_id = 1; -} - -message AddNotification { - Notification notification = 1; -} - -message GetNotificationsResponse { - repeated Notification notifications = 1; - bool done = 2; -} - -message DeleteNotification { - uint64 notification_id = 1; -} - -message UpdateNotification { - Notification notification = 1; -} - -message MarkNotificationRead { - uint64 notification_id = 1; -} - -message Notification { - uint64 id = 1; - uint64 timestamp = 2; - string kind = 3; - optional uint64 entity_id = 4; - string content = 5; - bool is_read = 6; - optional bool response = 7; -} - -message LspExtExpandMacro { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; -} - -message LspExtExpandMacroResponse { - string name = 1; - string expansion = 2; -} - -message LspExtOpenDocs { - uint64 project_id = 1; - uint64 buffer_id = 2; - Anchor position = 3; -} - -message LspExtOpenDocsResponse { - optional string web = 1; - optional string local = 2; -} - -message LspExtSwitchSourceHeader { - uint64 project_id = 1; - uint64 buffer_id = 2; -} - -message LspExtSwitchSourceHeaderResponse { - string target_file = 1; -} - -message SetRoomParticipantRole { - uint64 room_id = 1; - uint64 user_id = 2; - ChannelRole role = 3; -} - -enum LanguageModelRole { - LanguageModelUser = 0; - LanguageModelAssistant = 1; - LanguageModelSystem = 2; - reserved 3; -} - -message CountLanguageModelTokens { - LanguageModelProvider provider = 1; - string request = 2; -} - -message CountLanguageModelTokensResponse { - uint32 token_count = 1; -} - -enum LanguageModelProvider { - Anthropic = 0; - OpenAI = 1; - Google = 2; - Zed = 3; -} - -message GetCachedEmbeddings { - string model = 1; - repeated bytes digests = 2; -} - -message GetCachedEmbeddingsResponse { - repeated Embedding embeddings = 1; -} - -message ComputeEmbeddings { - string model = 1; - repeated string texts = 2; -} - -message ComputeEmbeddingsResponse { - repeated Embedding embeddings = 1; -} - -message Embedding { - bytes digest = 1; - repeated float dimensions = 2; -} - -message BlameBuffer { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; -} - -message BlameEntry { - bytes sha = 1; - - uint32 start_line = 2; - uint32 end_line = 3; - uint32 original_line_number = 4; - - optional string author = 5; - optional string author_mail = 6; - optional int64 author_time = 7; - optional string author_tz = 8; - - optional string committer = 9; - optional string committer_mail = 10; - optional int64 committer_time = 11; - optional string committer_tz = 12; - - optional string summary = 13; - optional string previous = 14; - - string filename = 15; -} - -message CommitMessage { - bytes oid = 1; - string message = 2; -} - -message CommitPermalink { - bytes oid = 1; - string permalink = 2; -} - -message BlameBufferResponse { - message BlameResponse { - repeated BlameEntry entries = 1; - repeated CommitMessage messages = 2; - optional string remote_url = 4; - reserved 3; - } - - optional BlameResponse blame_response = 5; - - reserved 1 to 4; -} - -message MultiLspQuery { - uint64 project_id = 1; - uint64 buffer_id = 2; - repeated VectorClockEntry version = 3; - oneof strategy { - AllLanguageServers all = 4; - } - oneof request { - GetHover get_hover = 5; - GetCodeActions get_code_actions = 6; - GetSignatureHelp get_signature_help = 7; - GetCodeLens get_code_lens = 8; - } -} - -message AllLanguageServers {} - -message RestartLanguageServers { - uint64 project_id = 1; - repeated uint64 buffer_ids = 2; -} - -message StopLanguageServers { - uint64 project_id = 1; - repeated uint64 buffer_ids = 2; -} - -message MultiLspQueryResponse { - repeated LspResponse responses = 1; -} - -message LspResponse { - oneof response { - GetHoverResponse get_hover_response = 1; - GetCodeActionsResponse get_code_actions_response = 2; - GetSignatureHelpResponse get_signature_help_response = 3; - GetCodeLensResponse get_code_lens_response = 4; - } -} - -message GetSupermavenApiKey {} - -message GetSupermavenApiKeyResponse { - string api_key = 1; -} - -message TaskContextForLocation { - uint64 project_id = 1; - Location location = 2; - map task_variables = 3; -} - -message TaskContext { - optional string cwd = 1; - map task_variables = 2; - map project_env = 3; -} - -message Shell { - message WithArguments { - string program = 1; - repeated string args = 2; - } - - oneof shell_type { - System system = 1; - string program = 2; - WithArguments with_arguments = 3; - } -} - -message System {} - -enum RevealStrategy { - RevealAlways = 0; - RevealNever = 1; -} - -enum HideStrategy { - HideAlways = 0; - HideNever = 1; - HideOnSuccess = 2; -} - -message ContextMessageStatus { - oneof variant { - Done done = 1; - Pending pending = 2; - Error error = 3; - Canceled canceled = 4; - } - - message Done {} - - message Pending {} - - message Error { - string message = 1; - } - - message Canceled {} -} - -message ContextMessage { - LamportTimestamp id = 1; - Anchor start = 2; - LanguageModelRole role = 3; - ContextMessageStatus status = 4; -} - -message SlashCommandOutputSection { - AnchorRange range = 1; - string icon_name = 2; - string label = 3; - optional string metadata = 4; -} - -message ThoughtProcessOutputSection { - AnchorRange range = 1; -} - -message ContextOperation { - oneof variant { - InsertMessage insert_message = 1; - UpdateMessage update_message = 2; - UpdateSummary update_summary = 3; - BufferOperation buffer_operation = 5; - SlashCommandStarted slash_command_started = 6; - SlashCommandOutputSectionAdded slash_command_output_section_added = 7; - SlashCommandCompleted slash_command_completed = 8; - ThoughtProcessOutputSectionAdded thought_process_output_section_added = 9; - } - - reserved 4; - - message InsertMessage { - ContextMessage message = 1; - repeated VectorClockEntry version = 2; - } - - message UpdateMessage { - LamportTimestamp message_id = 1; - LanguageModelRole role = 2; - ContextMessageStatus status = 3; - LamportTimestamp timestamp = 4; - repeated VectorClockEntry version = 5; - } - - message UpdateSummary { - string summary = 1; - bool done = 2; - LamportTimestamp timestamp = 3; - repeated VectorClockEntry version = 4; - } - - message SlashCommandStarted { - LamportTimestamp id = 1; - AnchorRange output_range = 2; - string name = 3; - repeated VectorClockEntry version = 4; - } - - message SlashCommandOutputSectionAdded { - LamportTimestamp timestamp = 1; - SlashCommandOutputSection section = 2; - repeated VectorClockEntry version = 3; - } - - message SlashCommandCompleted { - LamportTimestamp id = 1; - LamportTimestamp timestamp = 3; - optional string error_message = 4; - repeated VectorClockEntry version = 5; - } - - message ThoughtProcessOutputSectionAdded { - LamportTimestamp timestamp = 1; - ThoughtProcessOutputSection section = 2; - repeated VectorClockEntry version = 3; - } - - message BufferOperation { - Operation operation = 1; - } -} - -message Context { - repeated ContextOperation operations = 1; -} - -message ContextMetadata { - string context_id = 1; - optional string summary = 2; -} - -message AdvertiseContexts { - uint64 project_id = 1; - repeated ContextMetadata contexts = 2; -} - -message OpenContext { - uint64 project_id = 1; - string context_id = 2; -} - -message OpenContextResponse { - Context context = 1; -} - -message CreateContext { - uint64 project_id = 1; -} - -message CreateContextResponse { - string context_id = 1; - Context context = 2; -} - -message UpdateContext { - uint64 project_id = 1; - string context_id = 2; - ContextOperation operation = 3; -} - -message ContextVersion { - string context_id = 1; - repeated VectorClockEntry context_version = 2; - repeated VectorClockEntry buffer_version = 3; -} - -message SynchronizeContexts { - uint64 project_id = 1; - repeated ContextVersion contexts = 2; -} - -message SynchronizeContextsResponse { - repeated ContextVersion contexts = 1; -} - -message GetLlmToken {} - -message GetLlmTokenResponse { - string token = 1; -} - -message RefreshLlmToken {} - -// Remote debugging - -enum BreakpointState { - Enabled = 0; - Disabled = 1; -} - -message Breakpoint { - Anchor position = 1; - BreakpointState state = 2; - reserved 3; - optional string message = 4; - optional string condition = 5; - optional string hit_condition = 6; -} - -message BreakpointsForFile { - uint64 project_id = 1; - string path = 2; - repeated Breakpoint breakpoints = 3; -} - -message ToggleBreakpoint { - uint64 project_id = 1; - string path = 2; - Breakpoint breakpoint = 3; -} - -enum DebuggerThreadItem { - Console = 0; - LoadedSource = 1; - Modules = 2; - Variables = 3; -} - -message DebuggerSetVariableState { - string name = 1; - DapScope scope = 2; - string value = 3; - uint64 stack_frame_id = 4; - optional string evaluate_name = 5; - uint64 parent_variables_reference = 6; -} - -message VariableListOpenEntry { - oneof entry { - DebuggerOpenEntryScope scope = 1; - DebuggerOpenEntryVariable variable = 2; - } -} - -message DebuggerOpenEntryScope { - string name = 1; -} - -message DebuggerOpenEntryVariable { - string scope_name = 1; - string name = 2; - uint64 depth = 3; -} - -message VariableListEntrySetState { - uint64 depth = 1; - DebuggerSetVariableState state = 2; -} - -message VariableListEntryVariable { - uint64 depth = 1; - DapScope scope = 2; - DapVariable variable = 3; - bool has_children = 4; - uint64 container_reference = 5; -} - -message DebuggerScopeVariableIndex { - repeated uint64 fetched_ids = 1; - repeated DebuggerVariableContainer variables = 2; -} - -message DebuggerVariableContainer { - uint64 container_reference = 1; - DapVariable variable = 2; - uint64 depth = 3; -} - -enum DapThreadStatus { - Running = 0; - Stopped = 1; - Exited = 2; - Ended = 3; -} - -message VariableListScopes { - uint64 stack_frame_id = 1; - repeated DapScope scopes = 2; -} - -message VariableListVariables { - uint64 stack_frame_id = 1; - uint64 scope_id = 2; - DebuggerScopeVariableIndex variables = 3; -} - - -enum VariablesArgumentsFilter { - Indexed = 0; - Named = 1; -} - -message ValueFormat { - optional bool hex = 1; -} - -message VariablesRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 variables_reference = 3; - optional VariablesArgumentsFilter filter = 4; - optional uint64 start = 5; - optional uint64 count = 6; - optional ValueFormat format = 7; -} - -enum SteppingGranularity { - Statement = 0; - Line = 1; - Instruction = 2; -} - -message DapLocationsRequest { - uint64 project_id = 1; - uint64 session_id = 2; - uint64 location_reference = 3; -} - -message DapLocationsResponse { - DapSource source = 1; - uint64 line = 2; - optional uint64 column = 3; - optional uint64 end_line = 4; - optional uint64 end_column = 5; -} - -enum DapEvaluateContext { - Repl = 0; - Watch = 1; - Hover = 2; - Clipboard = 3; - EvaluateVariables = 4; - EvaluateUnknown = 5; -} - -message DapEvaluateRequest { - uint64 project_id = 1; - uint64 client_id = 2; - string expression = 3; - optional uint64 frame_id = 4; - optional DapEvaluateContext context = 5; -} - -message DapEvaluateResponse { - string result = 1; - optional string evaluate_type = 2; - uint64 variable_reference = 3; - optional uint64 named_variables = 4; - optional uint64 indexed_variables = 5; - optional string memory_reference = 6; -} - - -message DapCompletionRequest { - uint64 project_id = 1; - uint64 client_id = 2; - string query = 3; - optional uint64 frame_id = 4; - optional uint64 line = 5; - uint64 column = 6; -} - -enum DapCompletionItemType { - Method = 0; - Function = 1; - Constructor = 2; - Field = 3; - Variable = 4; - Class = 5; - Interface = 6; - Module = 7; - Property = 8; - Unit = 9; - Value = 10; - Enum = 11; - Keyword = 12; - Snippet = 13; - Text = 14; - Color = 15; - CompletionItemFile = 16; - Reference = 17; - Customcolor = 19; -} - -message DapCompletionItem { - string label = 1; - optional string text = 2; - optional string sort_text = 3; - optional string detail = 4; - optional DapCompletionItemType typ = 5; - optional uint64 start = 6; - optional uint64 length = 7; - optional uint64 selection_start = 8; - optional uint64 selection_length = 9; -} - -message DapCompletionResponse { - uint64 client_id = 1; - repeated DapCompletionItem completions = 2; -} - -message DapScopesRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 stack_frame_id = 3; -} - -message DapScopesResponse { - repeated DapScope scopes = 1; -} - -message DapSetVariableValueRequest { - uint64 project_id = 1; - uint64 client_id = 2; - string name = 3; - string value = 4; - uint64 variables_reference = 5; -} - -message DapSetVariableValueResponse { - uint64 client_id = 1; - string value = 2; - optional string variable_type = 3; - optional uint64 variables_reference = 4; - optional uint64 named_variables = 5; - optional uint64 indexed_variables = 6; - optional string memory_reference = 7; -} - -message DapPauseRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; -} - -message DapDisconnectRequest { - uint64 project_id = 1; - uint64 client_id = 2; - optional bool restart = 3; - optional bool terminate_debuggee = 4; - optional bool suspend_debuggee = 5; -} - -message DapTerminateThreadsRequest { - uint64 project_id = 1; - uint64 client_id = 2; - repeated uint64 thread_ids = 3; -} - -message DapThreadsRequest { - uint64 project_id = 1; - uint64 client_id = 2; -} - -message DapThreadsResponse { - repeated DapThread threads = 1; -} - -message DapTerminateRequest { - uint64 project_id = 1; - uint64 client_id = 2; - optional bool restart = 3; -} - -message DapRestartRequest { - uint64 project_id = 1; - uint64 client_id = 2; - bytes raw_args = 3; -} - -message DapRestartStackFrameRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 stack_frame_id = 3; -} - -message ToggleIgnoreBreakpoints { - uint64 project_id = 1; - uint32 session_id = 2; -} - -message IgnoreBreakpointState { - uint64 project_id = 1; - uint64 session_id = 2; - bool ignore = 3; -} - -message DapNextRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional bool single_thread = 4; - optional SteppingGranularity granularity = 5; -} - -message DapStepInRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional uint64 target_id = 4; - optional bool single_thread = 5; - optional SteppingGranularity granularity = 6; -} - -message DapStepOutRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional bool single_thread = 4; - optional SteppingGranularity granularity = 5; -} - -message DapStepBackRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional bool single_thread = 4; - optional SteppingGranularity granularity = 5; -} - -message DapContinueRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional bool single_thread = 4; -} - -message DapContinueResponse { - uint64 client_id = 1; - optional bool all_threads_continued = 2; -} - -message DapModulesRequest { - uint64 project_id = 1; - uint64 client_id = 2; -} - -message DapModulesResponse { - uint64 client_id = 1; - repeated DapModule modules = 2; -} - -message DapLoadedSourcesRequest { - uint64 project_id = 1; - uint64 client_id = 2; -} - -message DapLoadedSourcesResponse { - uint64 client_id = 1; - repeated DapSource sources = 2; -} - -message DapStackTraceRequest { - uint64 project_id = 1; - uint64 client_id = 2; - uint64 thread_id = 3; - optional uint64 start_frame = 4; - optional uint64 stack_trace_levels = 5; -} - -message DapStackTraceResponse { - repeated DapStackFrame frames = 1; -} - -message DapStackFrame { - uint64 id = 1; - string name = 2; - optional DapSource source = 3; - uint64 line = 4; - uint64 column = 5; - optional uint64 end_line = 6; - optional uint64 end_column = 7; - optional bool can_restart = 8; - optional string instruction_pointer_reference = 9; - optional DapModuleId module_id = 10; - optional DapStackPresentationHint presentation_hint = 11; -} - -message DebuggerLoadedSourceList { - uint64 client_id = 1; - repeated DapSource sources = 2; -} - -message DapVariables { - uint64 client_id = 1; - repeated DapVariable variables = 2; -} - -// Remote Debugging: Dap Types -message DapVariable { - string name = 1; - string value = 2; - optional string type = 3; - // optional DapVariablePresentationHint presentation_hint = 4; - optional string evaluate_name = 5; - uint64 variables_reference = 6; - optional uint64 named_variables = 7; - optional uint64 indexed_variables = 8; - optional string memory_reference = 9; -} - -message DapThread { - uint64 id = 1; - string name = 2; -} - -message DapScope { - string name = 1; - optional DapScopePresentationHint presentation_hint = 2; - uint64 variables_reference = 3; - optional uint64 named_variables = 4; - optional uint64 indexed_variables = 5; - bool expensive = 6; - optional DapSource source = 7; - optional uint64 line = 8; - optional uint64 column = 9; - optional uint64 end_line = 10; - optional uint64 end_column = 11; -} - -message DapSource { - optional string name = 1; - optional string path = 2; - optional uint64 source_reference = 3; - optional DapSourcePresentationHint presentation_hint = 4; - optional string origin = 5; - repeated DapSource sources = 6; - optional bytes adapter_data = 7; - repeated DapChecksum checksums = 8; -} - -enum DapOutputCategory { - ConsoleOutput = 0; - Important = 1; - Stdout = 2; - Stderr = 3; - Unknown = 4; -} - -enum DapOutputEventGroup { - Start = 0; - StartCollapsed = 1; - End = 2; -} - -message DapOutputEvent { - string output = 1; - optional DapOutputCategory category = 2; - optional uint64 variables_reference = 3; - optional DapOutputEventGroup group = 4; - optional DapSource source = 5; - optional uint32 line = 6; - optional uint32 column = 7; -} - -enum DapChecksumAlgorithm { - CHECKSUM_ALGORITHM_UNSPECIFIED = 0; - MD5 = 1; - SHA1 = 2; - SHA256 = 3; - TIMESTAMP = 4; -} - -message DapChecksum { - DapChecksumAlgorithm algorithm = 1; - string checksum = 2; -} - -enum DapScopePresentationHint { - Arguments = 0; - Locals = 1; - Registers = 2; - ReturnValue = 3; - ScopeUnknown = 4; -} - -enum DapSourcePresentationHint { - SourceNormal = 0; - Emphasize = 1; - Deemphasize = 2; - SourceUnknown = 3; -} - -enum DapStackPresentationHint { - StackNormal = 0; - Label = 1; - Subtle = 2; - StackUnknown = 3; -} - -message DapModule { - DapModuleId id = 1; - string name = 2; - optional string path = 3; - optional bool is_optimized = 4; - optional bool is_user_code = 5; - optional string version = 6; - optional string symbol_status = 7; - optional string symbol_file_path = 8; - optional string date_time_stamp = 9; - optional string address_range = 10; -} - -message DapModuleId { - oneof id { - uint32 number = 1; - string string = 2; - } -} - -// Remote FS - -message AddWorktree { - string path = 1; - uint64 project_id = 2; - bool visible = 3; -} - -message AddWorktreeResponse { - uint64 worktree_id = 1; - string canonicalized_path = 2; -} - -message GetPathMetadata { - uint64 project_id = 1; - string path = 2; -} - -message GetPathMetadataResponse { - bool exists = 1; - string path = 2; - bool is_dir = 3; -} - -message ShutdownRemoteServer {} - -message RemoveWorktree { - uint64 worktree_id = 1; -} - -message Toast { - uint64 project_id = 1; - string notification_id = 2; - string message = 3; -} - -message HideToast { - uint64 project_id = 1; - string notification_id = 2; -} - -message OpenServerSettings { - uint64 project_id = 1; -} - -message GetPermalinkToLine { - uint64 project_id = 1; - uint64 buffer_id = 2; - Range selection = 3; -} - -message GetPermalinkToLineResponse { - string permalink = 1; -} message FlushBufferedMessages {} + message FlushBufferedMessagesResponse {} - -message LanguageServerPromptRequest { - uint64 project_id = 1; - - oneof level { - Info info = 2; - Warning warning = 3; - Critical critical = 4; - } - - message Info {} - message Warning {} - message Critical {} - - string message = 5; - repeated string actions = 6; - string lsp_name = 7; -} - -message LanguageServerPromptResponse { - optional uint64 action_response = 1; -} - -message ListToolchains { - uint64 project_id = 1; - uint64 worktree_id = 2; - string language_name = 3; - optional string path = 4; -} - -message Toolchain { - string name = 1; - string path = 2; - string raw_json = 3; -} - -message ToolchainGroup { - uint64 start_index = 1; - string name = 2; -} - -message ListToolchainsResponse { - repeated Toolchain toolchains = 1; - bool has_values = 2; - repeated ToolchainGroup groups = 3; -} - -message ActivateToolchain { - uint64 project_id = 1; - uint64 worktree_id = 2; - Toolchain toolchain = 3; - string language_name = 4; - optional string path = 5; -} - -message ActiveToolchain { - uint64 project_id = 1; - uint64 worktree_id = 2; - string language_name = 3; - optional string path = 4; -} - -message ActiveToolchainResponse { - optional Toolchain toolchain = 1; -} - -message CommitSummary { - string sha = 1; - string subject = 2; - int64 commit_timestamp = 3; -} - -message Branch { - bool is_head = 1; - string name = 2; - optional uint64 unix_timestamp = 3; - optional GitUpstream upstream = 4; - optional CommitSummary most_recent_commit = 5; -} -message GitUpstream { - string ref_name = 1; - optional UpstreamTracking tracking = 2; -} -message UpstreamTracking { - uint64 ahead = 1; - uint64 behind = 2; -} - -message GitBranches { - uint64 project_id = 1; - ProjectPath repository = 2; -} - -message GitBranchesResponse { - repeated Branch branches = 1; -} - -message UpdateGitBranch { - uint64 project_id = 1; - string branch_name = 2; - ProjectPath repository = 3; -} - -message GetPanicFiles { -} - -message GitShow { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string commit = 4; -} - -message GitCommitDetails { - string sha = 1; - string message = 2; - int64 commit_timestamp = 3; - string author_email = 4; - string author_name = 5; -} - -message LoadCommitDiff { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string commit = 4; -} - -message LoadCommitDiffResponse { - repeated CommitFile files = 1; -} - -message CommitFile { - string path = 1; - optional string old_text = 2; - optional string new_text = 3; -} - -message GitReset { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string commit = 4; - ResetMode mode = 5; - enum ResetMode { - SOFT = 0; - MIXED = 1; - } -} - -message GitCheckoutFiles { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string commit = 4; - repeated string paths = 5; -} - -message GetPanicFilesResponse { - repeated string file_contents = 2; -} - -message CancelLanguageServerWork { - uint64 project_id = 1; - - oneof work { - Buffers buffers = 2; - LanguageServerWork language_server_work = 3; - } - - message Buffers { - repeated uint64 buffer_ids = 2; - } - - message LanguageServerWork { - uint64 language_server_id = 1; - optional string token = 2; - } -} - -message Extension { - string id = 1; - string version = 2; - bool dev = 3; -} - -message SyncExtensions { - repeated Extension extensions = 1; -} - -message SyncExtensionsResponse { - string tmp_dir = 1; - repeated Extension missing_extensions = 2; -} - -message InstallExtension { - Extension extension = 1; - string tmp_dir = 2; -} - -message RegisterBufferWithLanguageServers{ - uint64 project_id = 1; - uint64 buffer_id = 2; -} - -message Stage { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - repeated string paths = 4; -} - -message Unstage { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - repeated string paths = 4; -} - -message Commit { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - optional string name = 4; - optional string email = 5; - string message = 6; -} - -message OpenCommitMessageBuffer { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; -} - -message Push { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string remote_name = 4; - string branch_name = 5; - optional PushOptions options = 6; - uint64 askpass_id = 7; - - enum PushOptions { - SET_UPSTREAM = 0; - FORCE = 1; - } -} - -message Fetch { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - uint64 askpass_id = 4; -} - -message GetRemotes { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - optional string branch_name = 4; -} - -message GetRemotesResponse { - repeated Remote remotes = 1; - - message Remote { - string name = 1; - } -} - -message Pull { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string remote_name = 4; - string branch_name = 5; - uint64 askpass_id = 6; -} - -message RemoteMessageResponse { - string stdout = 1; - string stderr = 2; -} - -message AskPassRequest { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - uint64 askpass_id = 4; - string prompt = 5; -} - -message AskPassResponse { - string response = 1; -} - -message GitGetBranches { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; -} - -message GitCreateBranch { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string branch_name = 4; -} - -message GitChangeBranch { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - string branch_name = 4; -} - -message CheckForPushedCommits { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; -} - -message CheckForPushedCommitsResponse { - repeated string pushed_to = 1; -} - -message GitDiff { - uint64 project_id = 1; - reserved 2; - uint64 repository_id = 3; - DiffType diff_type = 4; - - enum DiffType { - HEAD_TO_WORKTREE = 0; - HEAD_TO_INDEX = 1; - } -} - -message GitDiffResponse { - string diff = 1; -} - -message GitInit { - uint64 project_id = 1; - string abs_path = 2; - string fallback_branch_name = 3; -} - -message LanguageServerIdForName { - uint64 project_id = 1; - uint64 buffer_id = 2; - string name = 3; -} - -message LanguageServerIdForNameResponse { - optional uint64 server_id = 1; -} diff --git a/crates/proto/src/proto.rs b/crates/proto/src/proto.rs index bcde89d25f..5156badd64 100644 --- a/crates/proto/src/proto.rs +++ b/crates/proto/src/proto.rs @@ -5,195 +5,20 @@ mod macros; mod typed_envelope; pub use error::*; -pub use typed_envelope::*; - pub use prost::{DecodeError, Message}; -use serde::Serialize; use std::{ - any::{Any, TypeId}, cmp, - fmt::{self, Debug}, + fmt::Debug, iter, mem, - path::{Path, PathBuf}, - sync::Arc, time::{Duration, SystemTime, UNIX_EPOCH}, }; +pub use typed_envelope::*; include!(concat!(env!("OUT_DIR"), "/zed.messages.rs")); pub const SSH_PEER_ID: PeerId = PeerId { owner_id: 0, id: 0 }; pub const SSH_PROJECT_ID: u64 = 0; -pub trait EnvelopedMessage: Clone + Debug + Serialize + Sized + Send + Sync + 'static { - const NAME: &'static str; - const PRIORITY: MessagePriority; - fn into_envelope( - self, - id: u32, - responding_to: Option, - original_sender_id: Option, - ) -> Envelope; - fn from_envelope(envelope: Envelope) -> Option; -} - -pub trait EntityMessage: EnvelopedMessage { - type Entity; - fn remote_entity_id(&self) -> u64; -} - -pub trait RequestMessage: EnvelopedMessage { - type Response: EnvelopedMessage; -} - -pub trait AnyTypedEnvelope: 'static + Send + Sync { - fn payload_type_id(&self) -> TypeId; - fn payload_type_name(&self) -> &'static str; - fn as_any(&self) -> &dyn Any; - fn into_any(self: Box) -> Box; - fn is_background(&self) -> bool; - fn original_sender_id(&self) -> Option; - fn sender_id(&self) -> PeerId; - fn message_id(&self) -> u32; -} - -pub enum MessagePriority { - Foreground, - Background, -} - -impl AnyTypedEnvelope for TypedEnvelope { - fn payload_type_id(&self) -> TypeId { - TypeId::of::() - } - - fn payload_type_name(&self) -> &'static str { - T::NAME - } - - fn as_any(&self) -> &dyn Any { - self - } - - fn into_any(self: Box) -> Box { - self - } - - fn is_background(&self) -> bool { - matches!(T::PRIORITY, MessagePriority::Background) - } - - fn original_sender_id(&self) -> Option { - self.original_sender_id - } - - fn sender_id(&self) -> PeerId { - self.sender_id - } - - fn message_id(&self) -> u32 { - self.message_id - } -} - -impl PeerId { - pub fn from_u64(peer_id: u64) -> Self { - let owner_id = (peer_id >> 32) as u32; - let id = peer_id as u32; - Self { owner_id, id } - } - - pub fn as_u64(self) -> u64 { - ((self.owner_id as u64) << 32) | (self.id as u64) - } -} - -impl Copy for PeerId {} - -impl Eq for PeerId {} - -impl Ord for PeerId { - fn cmp(&self, other: &Self) -> cmp::Ordering { - self.owner_id - .cmp(&other.owner_id) - .then_with(|| self.id.cmp(&other.id)) - } -} - -impl PartialOrd for PeerId { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - -impl std::hash::Hash for PeerId { - fn hash(&self, state: &mut H) { - self.owner_id.hash(state); - self.id.hash(state); - } -} - -impl fmt::Display for PeerId { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}/{}", self.owner_id, self.id) - } -} - -pub trait FromProto { - fn from_proto(proto: String) -> Self; -} - -pub trait ToProto { - fn to_proto(self) -> String; -} - -impl FromProto for PathBuf { - #[cfg(target_os = "windows")] - fn from_proto(proto: String) -> Self { - proto.split("/").collect() - } - - #[cfg(not(target_os = "windows"))] - fn from_proto(proto: String) -> Self { - PathBuf::from(proto) - } -} - -impl FromProto for Arc { - fn from_proto(proto: String) -> Self { - PathBuf::from_proto(proto).into() - } -} - -impl ToProto for PathBuf { - #[cfg(target_os = "windows")] - fn to_proto(self) -> String { - self.components() - .map(|comp| comp.as_os_str().to_string_lossy().to_string()) - .collect::>() - .join("/") - } - - #[cfg(not(target_os = "windows"))] - fn to_proto(self) -> String { - self.to_string_lossy().to_string() - } -} - -impl ToProto for &Path { - #[cfg(target_os = "windows")] - fn to_proto(self) -> String { - self.components() - .map(|comp| comp.as_os_str().to_string_lossy().to_string()) - .collect::>() - .join("/") - } - - #[cfg(not(target_os = "windows"))] - fn to_proto(self) -> String { - self.to_string_lossy().to_string() - } -} - messages!( (AcceptTermsOfService, Foreground), (AcceptTermsOfServiceResponse, Foreground), @@ -949,6 +774,8 @@ mod tests { #[test] #[cfg(target_os = "windows")] fn test_proto() { + use std::path::PathBuf; + fn generate_proto_path(path: PathBuf) -> PathBuf { let proto = path.to_proto(); PathBuf::from_proto(proto) diff --git a/crates/proto/src/typed_envelope.rs b/crates/proto/src/typed_envelope.rs index 6f63c0b94a..50981373a0 100644 --- a/crates/proto/src/typed_envelope.rs +++ b/crates/proto/src/typed_envelope.rs @@ -1,7 +1,185 @@ -use crate::{PeerId, RequestMessage}; +use crate::{Envelope, PeerId}; use anyhow::{Result, anyhow}; +use serde::Serialize; +use std::{ + any::{Any, TypeId}, + cmp, + fmt::{self, Debug}, + path::{Path, PathBuf}, + sync::Arc, +}; use std::{marker::PhantomData, time::Instant}; +pub trait EnvelopedMessage: Clone + Debug + Serialize + Sized + Send + Sync + 'static { + const NAME: &'static str; + const PRIORITY: MessagePriority; + fn into_envelope( + self, + id: u32, + responding_to: Option, + original_sender_id: Option, + ) -> Envelope; + fn from_envelope(envelope: Envelope) -> Option; +} + +pub trait EntityMessage: EnvelopedMessage { + type Entity; + fn remote_entity_id(&self) -> u64; +} + +pub trait RequestMessage: EnvelopedMessage { + type Response: EnvelopedMessage; +} + +pub trait AnyTypedEnvelope: 'static + Send + Sync { + fn payload_type_id(&self) -> TypeId; + fn payload_type_name(&self) -> &'static str; + fn as_any(&self) -> &dyn Any; + fn into_any(self: Box) -> Box; + fn is_background(&self) -> bool; + fn original_sender_id(&self) -> Option; + fn sender_id(&self) -> PeerId; + fn message_id(&self) -> u32; +} + +pub enum MessagePriority { + Foreground, + Background, +} + +impl AnyTypedEnvelope for TypedEnvelope { + fn payload_type_id(&self) -> TypeId { + TypeId::of::() + } + + fn payload_type_name(&self) -> &'static str { + T::NAME + } + + fn as_any(&self) -> &dyn Any { + self + } + + fn into_any(self: Box) -> Box { + self + } + + fn is_background(&self) -> bool { + matches!(T::PRIORITY, MessagePriority::Background) + } + + fn original_sender_id(&self) -> Option { + self.original_sender_id + } + + fn sender_id(&self) -> PeerId { + self.sender_id + } + + fn message_id(&self) -> u32 { + self.message_id + } +} + +impl PeerId { + pub fn from_u64(peer_id: u64) -> Self { + let owner_id = (peer_id >> 32) as u32; + let id = peer_id as u32; + Self { owner_id, id } + } + + pub fn as_u64(self) -> u64 { + ((self.owner_id as u64) << 32) | (self.id as u64) + } +} + +impl Copy for PeerId {} + +impl Eq for PeerId {} + +impl Ord for PeerId { + fn cmp(&self, other: &Self) -> cmp::Ordering { + self.owner_id + .cmp(&other.owner_id) + .then_with(|| self.id.cmp(&other.id)) + } +} + +impl PartialOrd for PeerId { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl std::hash::Hash for PeerId { + fn hash(&self, state: &mut H) { + self.owner_id.hash(state); + self.id.hash(state); + } +} + +impl fmt::Display for PeerId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}/{}", self.owner_id, self.id) + } +} + +pub trait FromProto { + fn from_proto(proto: String) -> Self; +} + +pub trait ToProto { + fn to_proto(self) -> String; +} + +impl FromProto for PathBuf { + #[cfg(target_os = "windows")] + fn from_proto(proto: String) -> Self { + proto.split("/").collect() + } + + #[cfg(not(target_os = "windows"))] + fn from_proto(proto: String) -> Self { + PathBuf::from(proto) + } +} + +impl FromProto for Arc { + fn from_proto(proto: String) -> Self { + PathBuf::from_proto(proto).into() + } +} + +impl ToProto for PathBuf { + #[cfg(target_os = "windows")] + fn to_proto(self) -> String { + self.components() + .map(|comp| comp.as_os_str().to_string_lossy().to_string()) + .collect::>() + .join("/") + } + + #[cfg(not(target_os = "windows"))] + fn to_proto(self) -> String { + self.to_string_lossy().to_string() + } +} + +impl ToProto for &Path { + #[cfg(target_os = "windows")] + fn to_proto(self) -> String { + self.components() + .map(|comp| comp.as_os_str().to_string_lossy().to_string()) + .collect::>() + .join("/") + } + + #[cfg(not(target_os = "windows"))] + fn to_proto(self) -> String { + self.to_string_lossy().to_string() + } +} + pub struct Receipt { pub sender_id: PeerId, pub message_id: u32, diff --git a/crates/rpc/src/proto.rs b/crates/rpc/src/message_stream.rs similarity index 97% rename from crates/rpc/src/proto.rs rename to crates/rpc/src/message_stream.rs index 88df850b37..9ae108312e 100644 --- a/crates/rpc/src/proto.rs +++ b/crates/rpc/src/message_stream.rs @@ -1,9 +1,11 @@ #![allow(non_snake_case)] +pub use ::proto::*; + use anyhow::anyhow; use async_tungstenite::tungstenite::Message as WebSocketMessage; use futures::{SinkExt as _, StreamExt as _}; -pub use proto::{Message as _, *}; +use proto::Message as _; use std::time::Instant; use std::{fmt::Debug, io}; @@ -32,10 +34,6 @@ impl MessageStream { encoding_buffer: Vec::new(), } } - - pub fn inner_mut(&mut self) -> &mut S { - &mut self.stream - } } impl MessageStream diff --git a/crates/rpc/src/peer.rs b/crates/rpc/src/peer.rs index 67cc966d88..be8c200366 100644 --- a/crates/rpc/src/peer.rs +++ b/crates/rpc/src/peer.rs @@ -1,8 +1,8 @@ use super::{ Connection, + message_stream::{Message, MessageStream}, proto::{ - self, AnyTypedEnvelope, EnvelopedMessage, MessageStream, PeerId, Receipt, RequestMessage, - TypedEnvelope, + self, AnyTypedEnvelope, EnvelopedMessage, PeerId, Receipt, RequestMessage, TypedEnvelope, }, }; use anyhow::{Context as _, Result, anyhow}; @@ -67,7 +67,7 @@ pub struct Peer { #[derive(Clone, Serialize)] pub struct ConnectionState { #[serde(skip)] - outgoing_tx: mpsc::UnboundedSender, + outgoing_tx: mpsc::UnboundedSender, next_message_id: Arc, #[allow(clippy::type_complexity)] #[serde(skip)] @@ -209,7 +209,7 @@ impl Peer { _ = keepalive_timer => { tracing::trace!(%connection_id, "keepalive interval: pinging"); futures::select_biased! { - result = writer.write(proto::Message::Ping).fuse() => { + result = writer.write(Message::Ping).fuse() => { tracing::trace!(%connection_id, "keepalive interval: done pinging"); result.context("failed to send keepalive")?; tracing::trace!(%connection_id, "keepalive interval: resetting after pinging"); @@ -226,7 +226,7 @@ impl Peer { tracing::trace!(%connection_id, "incoming rpc message: received"); tracing::trace!(%connection_id, "receive timeout: resetting"); receive_timeout.set(create_timer(RECEIVE_TIMEOUT).fuse()); - if let (proto::Message::Envelope(incoming), received_at) = incoming { + if let (Message::Envelope(incoming), received_at) = incoming { tracing::trace!(%connection_id, "incoming rpc message: processing"); futures::select_biased! { result = incoming_tx.send((incoming, received_at)).fuse() => match result { @@ -469,7 +469,7 @@ impl Peer { .insert(envelope.id, tx); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(envelope)) + .unbounded_send(Message::Envelope(envelope)) .map_err(|_| anyhow!("connection was closed"))?; Ok(()) }); @@ -500,7 +500,7 @@ impl Peer { .insert(message_id, tx); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope( + .unbounded_send(Message::Envelope( request.into_envelope(message_id, None, None), )) .map_err(|_| anyhow!("connection was closed"))?; @@ -545,11 +545,9 @@ impl Peer { let message_id = connection .next_message_id .fetch_add(1, atomic::Ordering::SeqCst); - connection - .outgoing_tx - .unbounded_send(proto::Message::Envelope( - message.into_envelope(message_id, None, None), - ))?; + connection.outgoing_tx.unbounded_send(Message::Envelope( + message.into_envelope(message_id, None, None), + ))?; Ok(()) } @@ -557,7 +555,7 @@ impl Peer { let connection = self.connection_state(receiver_id)?; connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(message))?; + .unbounded_send(Message::Envelope(message))?; Ok(()) } @@ -573,7 +571,7 @@ impl Peer { .fetch_add(1, atomic::Ordering::SeqCst); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(message.into_envelope( + .unbounded_send(Message::Envelope(message.into_envelope( message_id, None, Some(sender_id.into()), @@ -592,7 +590,7 @@ impl Peer { .fetch_add(1, atomic::Ordering::SeqCst); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(response.into_envelope( + .unbounded_send(Message::Envelope(response.into_envelope( message_id, Some(receipt.message_id), None, @@ -610,7 +608,7 @@ impl Peer { connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(message.into_envelope( + .unbounded_send(Message::Envelope(message.into_envelope( message_id, Some(receipt.message_id), None, @@ -629,7 +627,7 @@ impl Peer { .fetch_add(1, atomic::Ordering::SeqCst); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(response.into_envelope( + .unbounded_send(Message::Envelope(response.into_envelope( message_id, Some(receipt.message_id), None, @@ -652,7 +650,7 @@ impl Peer { .fetch_add(1, atomic::Ordering::SeqCst); connection .outgoing_tx - .unbounded_send(proto::Message::Envelope(response.into_envelope( + .unbounded_send(Message::Envelope(response.into_envelope( message_id, Some(request_message_id), None, diff --git a/crates/rpc/src/rpc.rs b/crates/rpc/src/rpc.rs index c168c20fa8..c10ee9d6c8 100644 --- a/crates/rpc/src/rpc.rs +++ b/crates/rpc/src/rpc.rs @@ -2,15 +2,16 @@ pub mod auth; mod conn; mod extension; mod llm; +mod message_stream; mod notification; mod peer; -pub mod proto; pub use conn::Connection; pub use extension::*; pub use llm::*; pub use notification::*; pub use peer::*; +pub use proto; pub use proto::{Receipt, TypedEnvelope, error::*}; mod macros;