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