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}