zed.proto

  1syntax = "proto3";
  2package zed.messages;
  3
  4message Envelope {
  5    uint32 id = 1;
  6    optional uint32 responding_to = 2;
  7    optional uint32 original_sender_id = 3;
  8    oneof payload {
  9        Ack ack = 4;
 10        Error error = 5;
 11        Ping ping = 6;
 12        ShareWorktree share_worktree = 7;
 13        ShareWorktreeResponse share_worktree_response = 8;
 14        JoinWorktree join_worktree = 9;
 15        JoinWorktreeResponse join_worktree_response = 10;
 16        UpdateWorktree update_worktree = 11;
 17        CloseWorktree close_worktree = 12;
 18        OpenBuffer open_buffer = 13;
 19        OpenBufferResponse open_buffer_response = 14;
 20        CloseBuffer close_buffer = 15;
 21        UpdateBuffer update_buffer = 16;
 22        SaveBuffer save_buffer = 17;
 23        BufferSaved buffer_saved = 18;
 24        AddPeer add_peer = 19;
 25        RemovePeer remove_peer = 20;
 26        GetChannels get_channels = 21;
 27        GetChannelsResponse get_channels_response = 22;
 28        GetUsers get_users = 23;
 29        GetUsersResponse get_users_response = 24;
 30        JoinChannel join_channel = 25;
 31        JoinChannelResponse join_channel_response = 26;
 32        LeaveChannel leave_channel = 27;
 33        SendChannelMessage send_channel_message = 28;
 34        SendChannelMessageResponse send_channel_message_response = 29;
 35        ChannelMessageSent channel_message_sent = 30;
 36        GetChannelMessages get_channel_messages = 31;
 37        GetChannelMessagesResponse get_channel_messages_response = 32;
 38        OpenWorktree open_worktree = 33;
 39        OpenWorktreeResponse open_worktree_response = 34;
 40        UnshareWorktree unshare_worktree = 35;
 41        UpdateCollaborators update_collaborators = 36;
 42        LeaveWorktree leave_worktree = 37;
 43    }
 44}
 45
 46// Messages
 47
 48message Ping {}
 49
 50message Ack {}
 51
 52message Error {
 53    string message = 1;
 54}
 55
 56message OpenWorktree {
 57    string root_name = 1;
 58    repeated string collaborator_logins = 2;
 59}
 60
 61message OpenWorktreeResponse {
 62    uint64 worktree_id = 1;
 63}
 64
 65message ShareWorktree {
 66    Worktree worktree = 1;
 67}
 68
 69message ShareWorktreeResponse {}
 70
 71message UnshareWorktree {
 72    uint64 worktree_id = 1;
 73}
 74
 75message JoinWorktree {
 76    uint64 worktree_id = 1;
 77}
 78
 79message LeaveWorktree {
 80    uint64 worktree_id = 1;
 81}
 82
 83message JoinWorktreeResponse {
 84    Worktree worktree = 2;
 85    uint32 replica_id = 3;
 86    repeated Peer peers = 4;
 87}
 88
 89message UpdateWorktree {
 90    uint64 worktree_id = 1;
 91    repeated Entry updated_entries = 2;
 92    repeated uint64 removed_entries = 3;
 93}
 94
 95message CloseWorktree {
 96    uint64 worktree_id = 1;
 97}
 98
 99message AddPeer {
100    uint64 worktree_id = 1;
101    Peer peer = 2;
102}
103
104message RemovePeer {
105    uint64 worktree_id = 1;
106    uint32 peer_id = 2;
107}
108
109message OpenBuffer {
110    uint64 worktree_id = 1;
111    string path = 2;
112}
113
114message OpenBufferResponse {
115    Buffer buffer = 1;
116}
117
118message CloseBuffer {
119    uint64 worktree_id = 1;
120    uint64 buffer_id = 2;
121}
122
123message UpdateBuffer {
124    uint64 worktree_id = 1;
125    uint64 buffer_id = 2;
126    repeated Operation operations = 3;
127}
128
129message SaveBuffer {
130    uint64 worktree_id = 1;
131    uint64 buffer_id = 2;
132}
133
134message BufferSaved {
135    uint64 worktree_id = 1;
136    uint64 buffer_id = 2;
137    repeated VectorClockEntry version = 3;
138    Timestamp mtime = 4;
139}
140
141message GetChannels {}
142
143message GetChannelsResponse {
144    repeated Channel channels = 1;
145}
146
147message JoinChannel {
148    uint64 channel_id = 1;
149}
150
151message JoinChannelResponse {
152    repeated ChannelMessage messages = 1;
153    bool done = 2;
154}
155
156message LeaveChannel {
157    uint64 channel_id = 1;
158}
159
160message GetUsers {
161    repeated uint64 user_ids = 1;
162}
163
164message GetUsersResponse {
165    repeated User users = 1;
166}
167
168message SendChannelMessage {
169    uint64 channel_id = 1;
170    string body = 2;
171    Nonce nonce = 3;
172}
173
174message SendChannelMessageResponse {
175    ChannelMessage message = 1;
176}
177
178message ChannelMessageSent {
179    uint64 channel_id = 1;
180    ChannelMessage message = 2;
181}
182
183message GetChannelMessages {
184    uint64 channel_id = 1;
185    uint64 before_message_id = 2;
186}
187
188message GetChannelMessagesResponse {
189    repeated ChannelMessage messages = 1;
190    bool done = 2;
191}
192
193message UpdateCollaborators {
194    repeated Collaborator collaborators = 1;
195}
196
197// Entities
198
199message Peer {
200    uint32 peer_id = 1;
201    uint32 replica_id = 2;
202}
203
204message User {
205    uint64 id = 1;
206    string github_login = 2;
207    string avatar_url = 3;
208}
209
210message Worktree {
211    uint64 id = 1;
212    string root_name = 2;
213    repeated Entry entries = 3;
214}
215
216message Entry {
217    uint64 id = 1;
218    bool is_dir = 2;
219    string path = 3;
220    uint64 inode = 4;
221    Timestamp mtime = 5;
222    bool is_symlink = 6;
223    bool is_ignored = 7;
224}
225
226message Buffer {
227    uint64 id = 1;
228    string content = 2;
229    repeated Operation.Edit history = 3;
230    repeated SelectionSet selections = 4;
231    DiagnosticSet diagnostics = 5;
232}
233
234message SelectionSet {
235    uint32 replica_id = 1;
236    uint32 lamport_timestamp = 2;
237    bool is_active = 3;
238    repeated VectorClockEntry version = 4;
239    repeated Selection selections = 5;
240}
241
242message Selection {
243    uint64 id = 1;
244    uint64 start = 2;
245    uint64 end = 3;
246    bool reversed = 4;
247}
248
249message DiagnosticSet {
250    repeated VectorClockEntry version = 1;
251    repeated Diagnostic diagnostics = 2;
252}
253
254message Diagnostic {
255    uint64 start = 1;
256    uint64 end = 2;
257    Severity severity = 3;
258    string message = 4;
259    uint64 group_id = 5;
260    bool is_primary = 6;
261    enum Severity {
262        None = 0;
263        Error = 1;
264        Warning = 2;
265        Information = 3;
266        Hint = 4;
267    }
268}
269
270
271
272message Operation {
273    oneof variant {
274        Edit edit = 1;
275        Undo undo = 2;
276        UpdateSelections update_selections = 3;
277        RemoveSelections remove_selections = 4;
278        SetActiveSelections set_active_selections = 5;
279        DiagnosticSet update_diagnostics = 6;
280    }
281
282    message Edit {
283        uint32 replica_id = 1;
284        uint32 local_timestamp = 2;
285        uint32 lamport_timestamp = 3;
286        repeated VectorClockEntry version = 4;
287        repeated Range ranges = 5;
288        optional string new_text = 6;
289    }
290
291    message Undo {
292        uint32 replica_id = 1;
293        uint32 local_timestamp = 2;
294        uint32 lamport_timestamp = 3;
295        repeated Range ranges = 4;
296        repeated VectorClockEntry version = 5;
297        repeated UndoCount counts = 6;
298    }
299
300    message UndoCount {
301        uint32 replica_id = 1;
302        uint32 local_timestamp = 2;
303        uint32 count = 3;
304    }
305
306    message UpdateSelections {
307        uint32 replica_id = 1;
308        uint32 local_timestamp = 2;
309        uint32 lamport_timestamp = 3;
310        repeated VectorClockEntry version = 4;
311        repeated Selection selections = 5;
312    }
313
314    message RemoveSelections {
315        uint32 replica_id = 1;
316        uint32 local_timestamp = 2;
317        uint32 lamport_timestamp = 3;
318    }
319
320    message SetActiveSelections {
321        uint32 replica_id = 1;
322        optional uint32 local_timestamp = 2;
323        uint32 lamport_timestamp = 3;
324    }
325}
326
327message VectorClockEntry {
328    uint32 replica_id = 1;
329    uint32 timestamp = 2;
330}
331
332message Timestamp {
333    uint64 seconds = 1;
334    uint32 nanos = 2;
335}
336
337message Range {
338    uint64 start = 1;
339    uint64 end = 2;
340}
341
342message Nonce {
343    uint64 upper_half = 1;
344    uint64 lower_half = 2;
345}
346
347message Channel {
348    uint64 id = 1;
349    string name = 2;
350}
351
352message ChannelMessage {
353    uint64 id = 1;
354    string body = 2;
355    uint64 timestamp = 3;
356    uint64 sender_id = 4;
357    Nonce nonce = 5;
358}
359
360message Collaborator {
361    uint64 user_id = 1;
362    repeated WorktreeMetadata worktrees = 2;
363}
364
365message WorktreeMetadata {
366    uint64 id = 1;
367    string root_name = 2;
368    bool is_shared = 3;
369    repeated uint64 guests = 4;
370}