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