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 Auth auth = 4;
10 AuthResponse auth_response = 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 }
26}
27
28message Auth {
29 int32 user_id = 1;
30 string access_token = 2;
31}
32
33message AuthResponse {
34 bool credentials_valid = 1;
35}
36
37message ShareWorktree {
38 Worktree worktree = 1;
39}
40
41message ShareWorktreeResponse {
42 uint64 worktree_id = 1;
43 string access_token = 2;
44}
45
46message OpenWorktree {
47 uint64 worktree_id = 1;
48 string access_token = 2;
49}
50
51message OpenWorktreeResponse {
52 uint64 worktree_id = 1;
53 Worktree worktree = 2;
54 uint32 replica_id = 3;
55 repeated Peer peers = 4;
56}
57
58message UpdateWorktree {
59 uint64 worktree_id = 1;
60 repeated Entry updated_entries = 2;
61 repeated uint64 removed_entries = 3;
62}
63
64message CloseWorktree {
65 uint64 worktree_id = 1;
66}
67
68message AddPeer {
69 uint64 worktree_id = 1;
70 Peer peer = 2;
71}
72
73message RemovePeer {
74 uint64 worktree_id = 1;
75 uint32 peer_id = 2;
76}
77
78message Peer {
79 uint32 peer_id = 1;
80 uint32 replica_id = 2;
81}
82
83message OpenBuffer {
84 uint64 worktree_id = 1;
85 string path = 2;
86}
87
88message OpenBufferResponse {
89 Buffer buffer = 1;
90}
91
92message CloseBuffer {
93 uint64 worktree_id = 1;
94 uint64 buffer_id = 2;
95}
96
97message UpdateBuffer {
98 uint64 worktree_id = 1;
99 uint64 buffer_id = 2;
100 repeated Operation operations = 3;
101}
102
103message SaveBuffer {
104 uint64 worktree_id = 1;
105 uint64 buffer_id = 2;
106}
107
108message BufferSaved {
109 uint64 worktree_id = 1;
110 uint64 buffer_id = 2;
111 repeated VectorClockEntry version = 3;
112 Timestamp mtime = 4;
113}
114
115message User {
116 uint64 id = 1;
117 string github_login = 2;
118 string avatar_url = 3;
119}
120
121message Worktree {
122 string root_name = 1;
123 repeated Entry entries = 2;
124}
125
126message Entry {
127 uint64 id = 1;
128 bool is_dir = 2;
129 string path = 3;
130 uint64 inode = 4;
131 Timestamp mtime = 5;
132 bool is_symlink = 6;
133 bool is_ignored = 7;
134}
135
136message Buffer {
137 uint64 id = 1;
138 string content = 2;
139 repeated Operation.Edit history = 3;
140 repeated SelectionSetSnapshot selections = 4;
141}
142
143message SelectionSetSnapshot {
144 uint32 replica_id = 1;
145 uint32 local_timestamp = 2;
146 repeated Selection selections = 3;
147 bool is_active = 4;
148}
149
150message SelectionSet {
151 repeated Selection selections = 1;
152}
153
154message Selection {
155 uint64 id = 1;
156 Anchor start = 2;
157 Anchor end = 3;
158 bool reversed = 4;
159}
160
161message Anchor {
162 repeated VectorClockEntry version = 1;
163 uint64 offset = 2;
164 Bias bias = 3;
165 enum Bias {
166 LEFT = 0;
167 Right = 1;
168 }
169}
170
171message Operation {
172 oneof variant {
173 Edit edit = 1;
174 Undo undo = 2;
175 UpdateSelections update_selections = 3;
176 SetActiveSelections set_active_selections = 4;
177 }
178
179 message Edit {
180 uint32 replica_id = 1;
181 uint32 local_timestamp = 2;
182 uint32 lamport_timestamp = 3;
183 repeated VectorClockEntry version = 4;
184 repeated Range ranges = 5;
185 optional string new_text = 6;
186 }
187
188 message Undo {
189 uint32 replica_id = 1;
190 uint32 local_timestamp = 2;
191 uint32 lamport_timestamp = 3;
192 repeated Range ranges = 4;
193 repeated VectorClockEntry version = 5;
194 repeated UndoCount counts = 6;
195 }
196
197 message UndoCount {
198 uint32 replica_id = 1;
199 uint32 local_timestamp = 2;
200 uint32 count = 3;
201 }
202
203 message UpdateSelections {
204 uint32 replica_id = 1;
205 uint32 local_timestamp = 2;
206 uint32 lamport_timestamp = 3;
207 SelectionSet set = 4;
208 }
209
210 message SetActiveSelections {
211 uint32 replica_id = 1;
212 optional uint32 local_timestamp = 2;
213 uint32 lamport_timestamp = 3;
214 }
215}
216
217message VectorClockEntry {
218 uint32 replica_id = 1;
219 uint32 timestamp = 2;
220}
221
222message Timestamp {
223 uint64 seconds = 1;
224 uint32 nanos = 2;
225}
226
227message Range {
228 uint64 start = 1;
229 uint64 end = 2;
230}