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 OpenWorktree open_worktree = 9;
15 OpenWorktreeResponse open_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 }
39}
40
41// Messages
42
43message Ping {}
44
45message Ack {}
46
47message Error {
48 string message = 1;
49}
50
51message ShareWorktree {
52 Worktree worktree = 1;
53}
54
55message ShareWorktreeResponse {
56 uint64 worktree_id = 1;
57 string access_token = 2;
58}
59
60message OpenWorktree {
61 uint64 worktree_id = 1;
62 string access_token = 2;
63}
64
65message OpenWorktreeResponse {
66 uint64 worktree_id = 1;
67 Worktree worktree = 2;
68 uint32 replica_id = 3;
69 repeated Peer peers = 4;
70}
71
72message UpdateWorktree {
73 uint64 worktree_id = 1;
74 repeated Entry updated_entries = 2;
75 repeated uint64 removed_entries = 3;
76}
77
78message CloseWorktree {
79 uint64 worktree_id = 1;
80}
81
82message AddPeer {
83 uint64 worktree_id = 1;
84 Peer peer = 2;
85}
86
87message RemovePeer {
88 uint64 worktree_id = 1;
89 uint32 peer_id = 2;
90}
91
92message OpenBuffer {
93 uint64 worktree_id = 1;
94 string path = 2;
95}
96
97message OpenBufferResponse {
98 Buffer buffer = 1;
99}
100
101message CloseBuffer {
102 uint64 worktree_id = 1;
103 uint64 buffer_id = 2;
104}
105
106message UpdateBuffer {
107 uint64 worktree_id = 1;
108 uint64 buffer_id = 2;
109 repeated Operation operations = 3;
110}
111
112message SaveBuffer {
113 uint64 worktree_id = 1;
114 uint64 buffer_id = 2;
115}
116
117message BufferSaved {
118 uint64 worktree_id = 1;
119 uint64 buffer_id = 2;
120 repeated VectorClockEntry version = 3;
121 Timestamp mtime = 4;
122}
123
124message GetChannels {}
125
126message GetChannelsResponse {
127 repeated Channel channels = 1;
128}
129
130message JoinChannel {
131 uint64 channel_id = 1;
132}
133
134message JoinChannelResponse {
135 repeated ChannelMessage messages = 1;
136 bool done = 2;
137}
138
139message LeaveChannel {
140 uint64 channel_id = 1;
141}
142
143message GetUsers {
144 repeated uint64 user_ids = 1;
145}
146
147message GetUsersResponse {
148 repeated User users = 1;
149}
150
151message SendChannelMessage {
152 uint64 channel_id = 1;
153 string body = 2;
154 Nonce nonce = 3;
155}
156
157message SendChannelMessageResponse {
158 ChannelMessage message = 1;
159}
160
161message ChannelMessageSent {
162 uint64 channel_id = 1;
163 ChannelMessage message = 2;
164}
165
166message GetChannelMessages {
167 uint64 channel_id = 1;
168 uint64 before_message_id = 2;
169}
170
171message GetChannelMessagesResponse {
172 repeated ChannelMessage messages = 1;
173 bool done = 2;
174}
175
176// Entities
177
178message Peer {
179 uint32 peer_id = 1;
180 uint32 replica_id = 2;
181}
182
183message User {
184 uint64 id = 1;
185 string github_login = 2;
186 string avatar_url = 3;
187}
188
189message Worktree {
190 string root_name = 1;
191 repeated Entry entries = 2;
192}
193
194message Entry {
195 uint64 id = 1;
196 bool is_dir = 2;
197 string path = 3;
198 uint64 inode = 4;
199 Timestamp mtime = 5;
200 bool is_symlink = 6;
201 bool is_ignored = 7;
202}
203
204message Buffer {
205 uint64 id = 1;
206 string content = 2;
207 repeated Operation.Edit history = 3;
208 repeated SelectionSetSnapshot selections = 4;
209}
210
211message SelectionSetSnapshot {
212 uint32 replica_id = 1;
213 uint32 local_timestamp = 2;
214 repeated Selection selections = 3;
215 bool is_active = 4;
216}
217
218message SelectionSet {
219 repeated Selection selections = 1;
220}
221
222message Selection {
223 uint64 id = 1;
224 Anchor start = 2;
225 Anchor end = 3;
226 bool reversed = 4;
227}
228
229message Anchor {
230 repeated VectorClockEntry version = 1;
231 uint64 offset = 2;
232 Bias bias = 3;
233 enum Bias {
234 LEFT = 0;
235 Right = 1;
236 }
237}
238
239message Operation {
240 oneof variant {
241 Edit edit = 1;
242 Undo undo = 2;
243 UpdateSelections update_selections = 3;
244 SetActiveSelections set_active_selections = 4;
245 }
246
247 message Edit {
248 uint32 replica_id = 1;
249 uint32 local_timestamp = 2;
250 uint32 lamport_timestamp = 3;
251 repeated VectorClockEntry version = 4;
252 repeated Range ranges = 5;
253 optional string new_text = 6;
254 }
255
256 message Undo {
257 uint32 replica_id = 1;
258 uint32 local_timestamp = 2;
259 uint32 lamport_timestamp = 3;
260 repeated Range ranges = 4;
261 repeated VectorClockEntry version = 5;
262 repeated UndoCount counts = 6;
263 }
264
265 message UndoCount {
266 uint32 replica_id = 1;
267 uint32 local_timestamp = 2;
268 uint32 count = 3;
269 }
270
271 message UpdateSelections {
272 uint32 replica_id = 1;
273 uint32 local_timestamp = 2;
274 uint32 lamport_timestamp = 3;
275 SelectionSet set = 4;
276 }
277
278 message SetActiveSelections {
279 uint32 replica_id = 1;
280 optional uint32 local_timestamp = 2;
281 uint32 lamport_timestamp = 3;
282 }
283}
284
285message VectorClockEntry {
286 uint32 replica_id = 1;
287 uint32 timestamp = 2;
288}
289
290message Timestamp {
291 uint64 seconds = 1;
292 uint32 nanos = 2;
293}
294
295message Range {
296 uint64 start = 1;
297 uint64 end = 2;
298}
299
300message Nonce {
301 uint64 upper_half = 1;
302 uint64 lower_half = 2;
303}
304
305message Channel {
306 uint64 id = 1;
307 string name = 2;
308}
309
310message ChannelMessage {
311 uint64 id = 1;
312 string body = 2;
313 uint64 timestamp = 3;
314 uint64 sender_id = 4;
315 Nonce nonce = 5;
316}