zed.proto

  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}