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        AddCollaborator add_collaborator = 19;
 25        RemoveCollaborator remove_collaborator = 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        UpdateContacts update_contacts = 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 authorized_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 Collaborator collaborators = 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 AddCollaborator {
100    uint64 worktree_id = 1;
101    Collaborator collaborator = 2;
102}
103
104message RemoveCollaborator {
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 UpdateContacts {
194    repeated Contact contacts = 1;
195}
196
197// Entities
198
199message Collaborator {
200    uint32 peer_id = 1;
201    uint32 replica_id = 2;
202    uint64 user_id = 3;
203}
204
205message User {
206    uint64 id = 1;
207    string github_login = 2;
208    string avatar_url = 3;
209}
210
211message Worktree {
212    uint64 id = 1;
213    string root_name = 2;
214    repeated Entry entries = 3;
215}
216
217message Entry {
218    uint64 id = 1;
219    bool is_dir = 2;
220    string path = 3;
221    uint64 inode = 4;
222    Timestamp mtime = 5;
223    bool is_symlink = 6;
224    bool is_ignored = 7;
225}
226
227message Buffer {
228    uint64 id = 1;
229    string content = 2;
230    repeated Operation.Edit history = 3;
231    repeated SelectionSet selections = 4;
232    DiagnosticSet diagnostics = 5;
233}
234
235message SelectionSet {
236    uint32 replica_id = 1;
237    uint32 lamport_timestamp = 2;
238    bool is_active = 3;
239    repeated VectorClockEntry version = 4;
240    repeated Selection selections = 5;
241}
242
243message Selection {
244    uint64 id = 1;
245    uint64 start = 2;
246    uint64 end = 3;
247    bool reversed = 4;
248}
249
250message DiagnosticSet {
251    repeated VectorClockEntry version = 1;
252    repeated Diagnostic diagnostics = 2;
253}
254
255message Diagnostic {
256    uint64 start = 1;
257    uint64 end = 2;
258    Severity severity = 3;
259    string message = 4;
260    uint64 group_id = 5;
261    bool is_primary = 6;
262    enum Severity {
263        None = 0;
264        Error = 1;
265        Warning = 2;
266        Information = 3;
267        Hint = 4;
268    }
269}
270
271
272
273message Operation {
274    oneof variant {
275        Edit edit = 1;
276        Undo undo = 2;
277        UpdateSelections update_selections = 3;
278        RemoveSelections remove_selections = 4;
279        SetActiveSelections set_active_selections = 5;
280        DiagnosticSet update_diagnostics = 6;
281    }
282
283    message Edit {
284        uint32 replica_id = 1;
285        uint32 local_timestamp = 2;
286        uint32 lamport_timestamp = 3;
287        repeated VectorClockEntry version = 4;
288        repeated Range ranges = 5;
289        optional string new_text = 6;
290    }
291
292    message Undo {
293        uint32 replica_id = 1;
294        uint32 local_timestamp = 2;
295        uint32 lamport_timestamp = 3;
296        repeated Range ranges = 4;
297        repeated VectorClockEntry version = 5;
298        repeated UndoCount counts = 6;
299    }
300
301    message UndoCount {
302        uint32 replica_id = 1;
303        uint32 local_timestamp = 2;
304        uint32 count = 3;
305    }
306
307    message UpdateSelections {
308        uint32 replica_id = 1;
309        uint32 local_timestamp = 2;
310        uint32 lamport_timestamp = 3;
311        repeated VectorClockEntry version = 4;
312        repeated Selection selections = 5;
313    }
314
315    message RemoveSelections {
316        uint32 replica_id = 1;
317        uint32 local_timestamp = 2;
318        uint32 lamport_timestamp = 3;
319    }
320
321    message SetActiveSelections {
322        uint32 replica_id = 1;
323        optional uint32 local_timestamp = 2;
324        uint32 lamport_timestamp = 3;
325    }
326}
327
328message VectorClockEntry {
329    uint32 replica_id = 1;
330    uint32 timestamp = 2;
331}
332
333message Timestamp {
334    uint64 seconds = 1;
335    uint32 nanos = 2;
336}
337
338message Range {
339    uint64 start = 1;
340    uint64 end = 2;
341}
342
343message Nonce {
344    uint64 upper_half = 1;
345    uint64 lower_half = 2;
346}
347
348message Channel {
349    uint64 id = 1;
350    string name = 2;
351}
352
353message ChannelMessage {
354    uint64 id = 1;
355    string body = 2;
356    uint64 timestamp = 3;
357    uint64 sender_id = 4;
358    Nonce nonce = 5;
359}
360
361message Contact {
362    uint64 user_id = 1;
363    repeated WorktreeMetadata worktrees = 2;
364}
365
366message WorktreeMetadata {
367    uint64 id = 1;
368    string root_name = 2;
369    bool is_shared = 3;
370    repeated uint64 guests = 4;
371}