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}
155
156message SendChannelMessageResponse {
157 ChannelMessage message = 1;
158}
159
160message ChannelMessageSent {
161 uint64 channel_id = 1;
162 ChannelMessage message = 2;
163}
164
165message GetChannelMessages {
166 uint64 channel_id = 1;
167 uint64 before_message_id = 2;
168}
169
170message GetChannelMessagesResponse {
171 repeated ChannelMessage messages = 1;
172 bool done = 2;
173}
174
175// Entities
176
177message Peer {
178 uint32 peer_id = 1;
179 uint32 replica_id = 2;
180}
181
182message User {
183 uint64 id = 1;
184 string github_login = 2;
185 string avatar_url = 3;
186}
187
188message Worktree {
189 string root_name = 1;
190 repeated Entry entries = 2;
191}
192
193message Entry {
194 uint64 id = 1;
195 bool is_dir = 2;
196 string path = 3;
197 uint64 inode = 4;
198 Timestamp mtime = 5;
199 bool is_symlink = 6;
200 bool is_ignored = 7;
201}
202
203message Buffer {
204 uint64 id = 1;
205 string content = 2;
206 repeated Operation.Edit history = 3;
207 repeated SelectionSetSnapshot selections = 4;
208}
209
210message SelectionSetSnapshot {
211 uint32 replica_id = 1;
212 uint32 local_timestamp = 2;
213 repeated Selection selections = 3;
214 bool is_active = 4;
215}
216
217message SelectionSet {
218 repeated Selection selections = 1;
219}
220
221message Selection {
222 uint64 id = 1;
223 Anchor start = 2;
224 Anchor end = 3;
225 bool reversed = 4;
226}
227
228message Anchor {
229 repeated VectorClockEntry version = 1;
230 uint64 offset = 2;
231 Bias bias = 3;
232 enum Bias {
233 LEFT = 0;
234 Right = 1;
235 }
236}
237
238message Operation {
239 oneof variant {
240 Edit edit = 1;
241 Undo undo = 2;
242 UpdateSelections update_selections = 3;
243 SetActiveSelections set_active_selections = 4;
244 }
245
246 message Edit {
247 uint32 replica_id = 1;
248 uint32 local_timestamp = 2;
249 uint32 lamport_timestamp = 3;
250 repeated VectorClockEntry version = 4;
251 repeated Range ranges = 5;
252 optional string new_text = 6;
253 }
254
255 message Undo {
256 uint32 replica_id = 1;
257 uint32 local_timestamp = 2;
258 uint32 lamport_timestamp = 3;
259 repeated Range ranges = 4;
260 repeated VectorClockEntry version = 5;
261 repeated UndoCount counts = 6;
262 }
263
264 message UndoCount {
265 uint32 replica_id = 1;
266 uint32 local_timestamp = 2;
267 uint32 count = 3;
268 }
269
270 message UpdateSelections {
271 uint32 replica_id = 1;
272 uint32 local_timestamp = 2;
273 uint32 lamport_timestamp = 3;
274 SelectionSet set = 4;
275 }
276
277 message SetActiveSelections {
278 uint32 replica_id = 1;
279 optional uint32 local_timestamp = 2;
280 uint32 lamport_timestamp = 3;
281 }
282}
283
284message VectorClockEntry {
285 uint32 replica_id = 1;
286 uint32 timestamp = 2;
287}
288
289message Timestamp {
290 uint64 seconds = 1;
291 uint32 nanos = 2;
292}
293
294message Range {
295 uint64 start = 1;
296 uint64 end = 2;
297}
298
299message Channel {
300 uint64 id = 1;
301 string name = 2;
302}
303
304message ChannelMessage {
305 uint64 id = 1;
306 string body = 2;
307 uint64 timestamp = 3;
308 uint64 sender_id = 4;
309}