@treeport/treeport 0.4.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/treeport.mjs +26 -1
- package/dist/dist-Crk_Xr82.js +735 -0
- package/dist/node/cli/index.js +184 -1596
- package/dist/node/server/core/launcher.js +45 -0
- package/dist/node/server/index.js +3530 -446
- package/dist/update-qVp7yL5D.js +2716 -0
- package/dist/web/assets/index-2LLiNn3-.js +146 -0
- package/dist/web/assets/index-DmDs47YU.css +2 -0
- package/dist/web/index.html +2 -2
- package/drizzle/0008_recent_project_visibility.sql +4 -0
- package/drizzle/0009_open_folders.sql +148 -0
- package/drizzle/0010_browser_panels_and_permissions.sql +21 -0
- package/drizzle/0011_free_magdalene.sql +1 -0
- package/drizzle/meta/0008_snapshot.json +792 -0
- package/drizzle/meta/0009_snapshot.json +804 -0
- package/drizzle/meta/0010_snapshot.json +923 -0
- package/drizzle/meta/0011_snapshot.json +931 -0
- package/drizzle/meta/_journal.json +28 -0
- package/package.json +6 -3
- package/skills/treeport/SKILL.md +71 -6
- package/dist/loopback-D7k_J_Wl.js +0 -412
- package/dist/web/assets/index-DCtptjcH.js +0 -146
- package/dist/web/assets/index-Wj0w0nWP.css +0 -2
|
@@ -0,0 +1,735 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const BROWSER_MAX_FRAME_BYTES = 8 * 1024 * 1024;
|
|
3
|
+
const browserUrlSchema = z.string().min(1).max(4096).refine((value) => {
|
|
4
|
+
if (!URL.canParse(value)) return false;
|
|
5
|
+
const url = new URL(value);
|
|
6
|
+
return (url.protocol === "http:" || url.protocol === "https:") && url.username === "" && url.password === "";
|
|
7
|
+
}, "Expected an absolute HTTP or HTTPS URL without credentials");
|
|
8
|
+
const browserClientMessageSchema = z.discriminatedUnion("type", [
|
|
9
|
+
z.strictObject({
|
|
10
|
+
type: z.literal("navigate"),
|
|
11
|
+
url: browserUrlSchema
|
|
12
|
+
}),
|
|
13
|
+
z.strictObject({ type: z.literal("back") }),
|
|
14
|
+
z.strictObject({ type: z.literal("forward") }),
|
|
15
|
+
z.strictObject({ type: z.literal("reload") }),
|
|
16
|
+
z.strictObject({ type: z.literal("stop") }),
|
|
17
|
+
z.strictObject({
|
|
18
|
+
type: z.literal("resize"),
|
|
19
|
+
width: z.number().int().min(320).max(3840),
|
|
20
|
+
height: z.number().int().min(200).max(2160)
|
|
21
|
+
}),
|
|
22
|
+
z.strictObject({
|
|
23
|
+
type: z.literal("pointer"),
|
|
24
|
+
phase: z.enum([
|
|
25
|
+
"move",
|
|
26
|
+
"down",
|
|
27
|
+
"up"
|
|
28
|
+
]),
|
|
29
|
+
x: z.number().finite().min(0).max(3840),
|
|
30
|
+
y: z.number().finite().min(0).max(2160),
|
|
31
|
+
button: z.enum([
|
|
32
|
+
"left",
|
|
33
|
+
"right",
|
|
34
|
+
"middle"
|
|
35
|
+
]).optional()
|
|
36
|
+
}),
|
|
37
|
+
z.strictObject({
|
|
38
|
+
type: z.literal("wheel"),
|
|
39
|
+
deltaX: z.number().finite().min(-1e4).max(1e4),
|
|
40
|
+
deltaY: z.number().finite().min(-1e4).max(1e4)
|
|
41
|
+
}),
|
|
42
|
+
z.strictObject({
|
|
43
|
+
type: z.literal("key"),
|
|
44
|
+
phase: z.enum(["down", "up"]),
|
|
45
|
+
key: z.string().min(1).max(128)
|
|
46
|
+
}),
|
|
47
|
+
z.strictObject({
|
|
48
|
+
type: z.literal("insertText"),
|
|
49
|
+
text: z.string().max(64 * 1024)
|
|
50
|
+
}),
|
|
51
|
+
z.strictObject({ type: z.literal("takeControl") }),
|
|
52
|
+
z.strictObject({
|
|
53
|
+
type: z.literal("setVisible"),
|
|
54
|
+
visible: z.boolean()
|
|
55
|
+
}),
|
|
56
|
+
z.strictObject({
|
|
57
|
+
type: z.literal("frameAck"),
|
|
58
|
+
sequence: z.number().int().positive()
|
|
59
|
+
})
|
|
60
|
+
]);
|
|
61
|
+
const browserRuntimeStateSchema = z.strictObject({
|
|
62
|
+
url: z.union([z.literal("about:blank"), browserUrlSchema]),
|
|
63
|
+
title: z.string().max(256),
|
|
64
|
+
loading: z.boolean(),
|
|
65
|
+
canGoBack: z.boolean(),
|
|
66
|
+
canGoForward: z.boolean(),
|
|
67
|
+
viewport: z.strictObject({
|
|
68
|
+
width: z.number().finite().min(0).max(3840),
|
|
69
|
+
height: z.number().finite().min(0).max(2160)
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
const browserSessionStateSchema = browserRuntimeStateSchema.extend({
|
|
73
|
+
controlled: z.boolean(),
|
|
74
|
+
hasController: z.boolean(),
|
|
75
|
+
controller: z.enum([
|
|
76
|
+
"you",
|
|
77
|
+
"agent",
|
|
78
|
+
"other",
|
|
79
|
+
"none"
|
|
80
|
+
])
|
|
81
|
+
});
|
|
82
|
+
z.discriminatedUnion("type", [
|
|
83
|
+
z.strictObject({
|
|
84
|
+
type: z.literal("ready"),
|
|
85
|
+
state: browserSessionStateSchema
|
|
86
|
+
}),
|
|
87
|
+
z.strictObject({
|
|
88
|
+
type: z.literal("state"),
|
|
89
|
+
state: browserSessionStateSchema
|
|
90
|
+
}),
|
|
91
|
+
z.strictObject({
|
|
92
|
+
type: z.literal("controlChanged"),
|
|
93
|
+
state: browserSessionStateSchema
|
|
94
|
+
}),
|
|
95
|
+
z.strictObject({
|
|
96
|
+
type: z.literal("navigationError"),
|
|
97
|
+
message: z.string()
|
|
98
|
+
}),
|
|
99
|
+
z.strictObject({
|
|
100
|
+
type: z.literal("browserUnavailable"),
|
|
101
|
+
message: z.string(),
|
|
102
|
+
installCommand: z.string().nullable()
|
|
103
|
+
}),
|
|
104
|
+
z.strictObject({
|
|
105
|
+
type: z.literal("browserCrashed"),
|
|
106
|
+
message: z.string()
|
|
107
|
+
}),
|
|
108
|
+
z.strictObject({
|
|
109
|
+
type: z.literal("closed"),
|
|
110
|
+
reason: z.string()
|
|
111
|
+
})
|
|
112
|
+
]);
|
|
113
|
+
z.strictObject({
|
|
114
|
+
sequence: z.number().int().positive(),
|
|
115
|
+
mimeType: z.literal("image/jpeg"),
|
|
116
|
+
timestamp: z.number(),
|
|
117
|
+
width: z.number().int().positive(),
|
|
118
|
+
height: z.number().int().positive(),
|
|
119
|
+
data: z.union([z.instanceof(Uint8Array), z.instanceof(ArrayBuffer)]).transform((value) => value instanceof Uint8Array ? value : new Uint8Array(value)).refine((value) => value.byteLength <= BROWSER_MAX_FRAME_BYTES)
|
|
120
|
+
});
|
|
121
|
+
const browserTicketRequestSchema = z.strictObject({
|
|
122
|
+
clientId: z.string().min(1).max(128),
|
|
123
|
+
visible: z.boolean()
|
|
124
|
+
});
|
|
125
|
+
const browserOwnerTicketRequestSchema = z.strictObject({ clientId: z.string().min(1).max(128) });
|
|
126
|
+
const opaqueTokenSchema = z.string().min(32).max(256);
|
|
127
|
+
const browserPanelIdSchema = z.string().min(1).max(128);
|
|
128
|
+
const browserRequestIdSchema = z.string().min(1).max(128);
|
|
129
|
+
const browserGenerationSchema = z.number().int().positive();
|
|
130
|
+
const browserRevisionSchema = z.number().int().nonnegative();
|
|
131
|
+
const browserOwnerEndpointSchema = z.string().url().max(1024).refine((value) => {
|
|
132
|
+
const url = new URL(value);
|
|
133
|
+
return url.protocol === "http:" && url.hostname === "127.0.0.1" && url.username === "" && url.password === "" && url.search === "" && url.hash === "" && url.pathname !== "/";
|
|
134
|
+
}, "Expected a private loopback Browser endpoint");
|
|
135
|
+
const browserAgentArgumentSchema = z.string().max(4096);
|
|
136
|
+
const browserAgentCommandSchema = z.discriminatedUnion("command", [
|
|
137
|
+
z.strictObject({
|
|
138
|
+
command: z.literal("snapshot"),
|
|
139
|
+
args: z.tuple([])
|
|
140
|
+
}),
|
|
141
|
+
z.strictObject({
|
|
142
|
+
command: z.literal("click"),
|
|
143
|
+
args: z.tuple([browserAgentArgumentSchema])
|
|
144
|
+
}),
|
|
145
|
+
z.strictObject({
|
|
146
|
+
command: z.literal("fill"),
|
|
147
|
+
args: z.tuple([browserAgentArgumentSchema, browserAgentArgumentSchema])
|
|
148
|
+
}),
|
|
149
|
+
z.strictObject({
|
|
150
|
+
command: z.literal("press"),
|
|
151
|
+
args: z.tuple([browserAgentArgumentSchema])
|
|
152
|
+
}),
|
|
153
|
+
z.strictObject({
|
|
154
|
+
command: z.literal("console"),
|
|
155
|
+
args: z.union([z.tuple([]), z.tuple([browserAgentArgumentSchema.max(32)])])
|
|
156
|
+
}),
|
|
157
|
+
z.strictObject({
|
|
158
|
+
command: z.literal("requests"),
|
|
159
|
+
args: z.tuple([])
|
|
160
|
+
}),
|
|
161
|
+
z.strictObject({
|
|
162
|
+
command: z.literal("screenshot"),
|
|
163
|
+
args: z.tuple([])
|
|
164
|
+
}),
|
|
165
|
+
z.strictObject({
|
|
166
|
+
command: z.literal("goto"),
|
|
167
|
+
args: z.tuple([browserUrlSchema])
|
|
168
|
+
}),
|
|
169
|
+
z.strictObject({
|
|
170
|
+
command: z.literal("go-back"),
|
|
171
|
+
args: z.tuple([])
|
|
172
|
+
}),
|
|
173
|
+
z.strictObject({
|
|
174
|
+
command: z.literal("go-forward"),
|
|
175
|
+
args: z.tuple([])
|
|
176
|
+
}),
|
|
177
|
+
z.strictObject({
|
|
178
|
+
command: z.literal("reload"),
|
|
179
|
+
args: z.tuple([])
|
|
180
|
+
})
|
|
181
|
+
]);
|
|
182
|
+
const browserAuthSchema = z.strictObject({
|
|
183
|
+
ticket: opaqueTokenSchema,
|
|
184
|
+
protocolVersion: z.literal(3)
|
|
185
|
+
});
|
|
186
|
+
const browserOwnerAuthSchema = z.strictObject({
|
|
187
|
+
ticket: opaqueTokenSchema,
|
|
188
|
+
protocolVersion: z.literal(3),
|
|
189
|
+
endpoint: browserOwnerEndpointSchema,
|
|
190
|
+
challenge: opaqueTokenSchema
|
|
191
|
+
});
|
|
192
|
+
const browserOwnerClientMessageSchema = z.discriminatedUnion("type", [
|
|
193
|
+
z.strictObject({
|
|
194
|
+
type: z.literal("ready"),
|
|
195
|
+
generation: browserGenerationSchema,
|
|
196
|
+
revision: browserRevisionSchema,
|
|
197
|
+
state: browserRuntimeStateSchema
|
|
198
|
+
}),
|
|
199
|
+
z.strictObject({
|
|
200
|
+
type: z.literal("state"),
|
|
201
|
+
generation: browserGenerationSchema,
|
|
202
|
+
revision: browserRevisionSchema,
|
|
203
|
+
state: browserRuntimeStateSchema
|
|
204
|
+
}),
|
|
205
|
+
z.strictObject({
|
|
206
|
+
type: z.literal("popup"),
|
|
207
|
+
generation: browserGenerationSchema,
|
|
208
|
+
url: browserUrlSchema
|
|
209
|
+
}),
|
|
210
|
+
z.strictObject({
|
|
211
|
+
type: z.literal("crashed"),
|
|
212
|
+
generation: browserGenerationSchema,
|
|
213
|
+
message: z.string().min(1).max(1024)
|
|
214
|
+
}),
|
|
215
|
+
z.strictObject({
|
|
216
|
+
type: z.literal("runtimeControlResult"),
|
|
217
|
+
generation: browserGenerationSchema,
|
|
218
|
+
requestId: browserRequestIdSchema,
|
|
219
|
+
accepted: z.boolean()
|
|
220
|
+
}),
|
|
221
|
+
z.strictObject({
|
|
222
|
+
type: z.literal("takeControl"),
|
|
223
|
+
generation: browserGenerationSchema
|
|
224
|
+
}),
|
|
225
|
+
z.strictObject({
|
|
226
|
+
type: z.literal("released"),
|
|
227
|
+
generation: browserGenerationSchema
|
|
228
|
+
}),
|
|
229
|
+
z.strictObject({
|
|
230
|
+
type: z.literal("closeResult"),
|
|
231
|
+
generation: browserGenerationSchema,
|
|
232
|
+
requestId: browserRequestIdSchema,
|
|
233
|
+
canClose: z.boolean()
|
|
234
|
+
})
|
|
235
|
+
]);
|
|
236
|
+
z.discriminatedUnion("type", [
|
|
237
|
+
z.strictObject({
|
|
238
|
+
type: z.literal("claimGranted"),
|
|
239
|
+
panelId: browserPanelIdSchema,
|
|
240
|
+
generation: browserGenerationSchema,
|
|
241
|
+
resumed: z.boolean(),
|
|
242
|
+
state: browserRuntimeStateSchema
|
|
243
|
+
}),
|
|
244
|
+
z.strictObject({
|
|
245
|
+
type: z.literal("claimRejected"),
|
|
246
|
+
message: z.string().min(1).max(1024)
|
|
247
|
+
}),
|
|
248
|
+
z.strictObject({
|
|
249
|
+
type: z.literal("runtimeControl"),
|
|
250
|
+
generation: browserGenerationSchema,
|
|
251
|
+
requestId: browserRequestIdSchema,
|
|
252
|
+
controller: z.enum([
|
|
253
|
+
"agent",
|
|
254
|
+
"other",
|
|
255
|
+
"none"
|
|
256
|
+
]),
|
|
257
|
+
retainPaint: z.boolean()
|
|
258
|
+
}),
|
|
259
|
+
z.strictObject({
|
|
260
|
+
type: z.literal("closeRequest"),
|
|
261
|
+
generation: browserGenerationSchema,
|
|
262
|
+
requestId: browserRequestIdSchema,
|
|
263
|
+
force: z.boolean()
|
|
264
|
+
}),
|
|
265
|
+
z.strictObject({
|
|
266
|
+
type: z.literal("closed"),
|
|
267
|
+
reason: z.string().max(1024)
|
|
268
|
+
})
|
|
269
|
+
]);
|
|
270
|
+
function parseBrowserAuth(value) {
|
|
271
|
+
const result = browserAuthSchema.safeParse(value);
|
|
272
|
+
return result.success ? result.data : null;
|
|
273
|
+
}
|
|
274
|
+
function parseBrowserOwnerAuth(value) {
|
|
275
|
+
const result = browserOwnerAuthSchema.safeParse(value);
|
|
276
|
+
return result.success ? result.data : null;
|
|
277
|
+
}
|
|
278
|
+
function parseBrowserClientMessage(value) {
|
|
279
|
+
const result = browserClientMessageSchema.safeParse(value);
|
|
280
|
+
return result.success ? result.data : null;
|
|
281
|
+
}
|
|
282
|
+
function parseBrowserOwnerClientMessage(value) {
|
|
283
|
+
const result = browserOwnerClientMessageSchema.safeParse(value);
|
|
284
|
+
return result.success ? result.data : null;
|
|
285
|
+
}
|
|
286
|
+
//#endregion
|
|
287
|
+
//#region ../../packages/shared/dist/web-panel-protocol.js
|
|
288
|
+
const webPanelPermissionSchema = z.enum(["same-origin", "tree-files"]);
|
|
289
|
+
//#endregion
|
|
290
|
+
//#region ../../packages/shared/dist/terminal-protocol.js
|
|
291
|
+
const SOCKET_IO_PATH = "/api/socket.io/";
|
|
292
|
+
const TERMINAL_CONTROLLER_GRACE_MS = 1e4;
|
|
293
|
+
const TERMINAL_OUTPUT_HIGH_WATERMARK = 256 * 1024;
|
|
294
|
+
const TERMINAL_OUTPUT_LOW_WATERMARK = 64 * 1024;
|
|
295
|
+
const TERMINAL_OUTPUT_STALL_TIMEOUT_MS = 3e4;
|
|
296
|
+
const TERMINAL_MAX_CLIENT_MESSAGE_BYTES = 128 * 1024;
|
|
297
|
+
const TERMINAL_MAX_INPUT_BYTES = 64 * 1024;
|
|
298
|
+
const TERMINAL_SCROLL_EXIT_SEQUENCE = "\x1B[9000~";
|
|
299
|
+
const TERMINAL_SELECTION_START_SEQUENCE = "\x1B[9001~";
|
|
300
|
+
const TERMINAL_SELECTION_STOP_SEQUENCE = "\x1B[9002~";
|
|
301
|
+
const TERMINAL_SELECTION_CLEAR_SEQUENCE = "\x1B[9003~";
|
|
302
|
+
const TERMINAL_SELECTION_RESTORE_SEQUENCE = "\x1B[9004~";
|
|
303
|
+
z.unknown();
|
|
304
|
+
const terminalId = z.string().min(1).max(128);
|
|
305
|
+
const clientId = z.string().min(1).max(128);
|
|
306
|
+
const streamId = z.string().min(1).max(128);
|
|
307
|
+
const generation = z.number().int().nonnegative();
|
|
308
|
+
const dimensions = {
|
|
309
|
+
cols: z.number().int().min(2).max(1e3),
|
|
310
|
+
rows: z.number().int().min(2).max(500)
|
|
311
|
+
};
|
|
312
|
+
const terminalSizeSchema = z.strictObject(dimensions);
|
|
313
|
+
const terminalProgressSchema = z.strictObject({
|
|
314
|
+
state: z.enum([
|
|
315
|
+
"normal",
|
|
316
|
+
"error",
|
|
317
|
+
"indeterminate",
|
|
318
|
+
"paused"
|
|
319
|
+
]),
|
|
320
|
+
value: z.number().int().min(0).max(100).nullable()
|
|
321
|
+
});
|
|
322
|
+
const terminalProgramSchema = z.enum([
|
|
323
|
+
"pi",
|
|
324
|
+
"claude",
|
|
325
|
+
"codex"
|
|
326
|
+
]);
|
|
327
|
+
const terminalRuntimeMetadataSchema = z.strictObject({
|
|
328
|
+
terminalId: z.string().min(1),
|
|
329
|
+
title: z.string().max(256).nullable(),
|
|
330
|
+
program: terminalProgramSchema.nullable().default(null),
|
|
331
|
+
hasForegroundProcess: z.boolean().nullable().optional(),
|
|
332
|
+
progress: terminalProgressSchema.nullable(),
|
|
333
|
+
progressStartedAt: z.string().datetime().nullable().default(null),
|
|
334
|
+
progressClearedAt: z.string().datetime().nullable().default(null),
|
|
335
|
+
bell: z.strictObject({
|
|
336
|
+
sequence: z.number().int().positive(),
|
|
337
|
+
at: z.string().datetime(),
|
|
338
|
+
unread: z.boolean()
|
|
339
|
+
}).nullable().default(null)
|
|
340
|
+
});
|
|
341
|
+
const terminalBellAcknowledgementSchema = z.strictObject({ sequence: z.number().int().positive() });
|
|
342
|
+
function parseTerminalProgress(data) {
|
|
343
|
+
const [command, rawState, rawValue, ...extra] = data.split(";");
|
|
344
|
+
if (command !== "4" || extra.length > 0 || !/^[0-4]$/.test(rawState ?? "")) return;
|
|
345
|
+
const state = Number(rawState);
|
|
346
|
+
if (state === 0) return null;
|
|
347
|
+
if (rawValue !== void 0 && rawValue !== "" && !/^\d{1,3}$/.test(rawValue)) return;
|
|
348
|
+
const value = rawValue === void 0 || rawValue === "" ? null : Number(rawValue);
|
|
349
|
+
if (value !== null && value > 100) return;
|
|
350
|
+
return {
|
|
351
|
+
state: [
|
|
352
|
+
void 0,
|
|
353
|
+
"normal",
|
|
354
|
+
"error",
|
|
355
|
+
"indeterminate",
|
|
356
|
+
"paused"
|
|
357
|
+
][state],
|
|
358
|
+
value
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
const terminalAuthSchema = z.strictObject({
|
|
362
|
+
terminalId,
|
|
363
|
+
clientId,
|
|
364
|
+
...dimensions
|
|
365
|
+
});
|
|
366
|
+
const terminalInputSchema = z.strictObject({
|
|
367
|
+
generation,
|
|
368
|
+
data: z.string().max(TERMINAL_MAX_INPUT_BYTES)
|
|
369
|
+
});
|
|
370
|
+
const terminalBinarySchema = z.strictObject({
|
|
371
|
+
generation,
|
|
372
|
+
data: z.string().max(TERMINAL_MAX_INPUT_BYTES)
|
|
373
|
+
});
|
|
374
|
+
const terminalResizeSchema = z.strictObject({
|
|
375
|
+
generation,
|
|
376
|
+
...dimensions
|
|
377
|
+
});
|
|
378
|
+
const terminalTakeControlSchema = z.strictObject({
|
|
379
|
+
generation,
|
|
380
|
+
...dimensions
|
|
381
|
+
});
|
|
382
|
+
const terminalLegacyTakeControlSchema = z.strictObject({ generation });
|
|
383
|
+
const terminalOutputAckSchema = z.strictObject({
|
|
384
|
+
streamId,
|
|
385
|
+
sequence: z.number().int().nonnegative()
|
|
386
|
+
});
|
|
387
|
+
const terminalReadyBase = {
|
|
388
|
+
connectionId: z.string().min(1).max(128),
|
|
389
|
+
streamId,
|
|
390
|
+
generation,
|
|
391
|
+
controller: z.boolean(),
|
|
392
|
+
reset: z.literal("full")
|
|
393
|
+
};
|
|
394
|
+
const terminalLegacyReadySchema = z.strictObject(terminalReadyBase);
|
|
395
|
+
const terminalReadyV2Schema = z.strictObject({
|
|
396
|
+
...terminalReadyBase,
|
|
397
|
+
...dimensions,
|
|
398
|
+
revision: z.number().int().positive()
|
|
399
|
+
});
|
|
400
|
+
z.union([terminalLegacyReadySchema, terminalReadyV2Schema]);
|
|
401
|
+
z.strictObject({
|
|
402
|
+
...dimensions,
|
|
403
|
+
revision: z.number().int().positive()
|
|
404
|
+
});
|
|
405
|
+
z.strictObject({
|
|
406
|
+
streamId,
|
|
407
|
+
sequence: z.number().int().positive(),
|
|
408
|
+
data: z.string()
|
|
409
|
+
});
|
|
410
|
+
z.strictObject({ title: z.string().max(256) });
|
|
411
|
+
z.strictObject({ progress: terminalProgressSchema.nullable() });
|
|
412
|
+
z.strictObject({ viewing: z.boolean() });
|
|
413
|
+
z.strictObject({
|
|
414
|
+
generation,
|
|
415
|
+
controller: z.boolean()
|
|
416
|
+
});
|
|
417
|
+
z.strictObject({ exitCode: z.number().int().nullable() });
|
|
418
|
+
z.strictObject({
|
|
419
|
+
code: z.string().min(1).max(80),
|
|
420
|
+
message: z.string().min(1).max(1e3),
|
|
421
|
+
retryable: z.boolean()
|
|
422
|
+
});
|
|
423
|
+
function parseTerminalAuth(value) {
|
|
424
|
+
const parsed = terminalAuthSchema.safeParse(value);
|
|
425
|
+
return parsed.success ? parsed.data : null;
|
|
426
|
+
}
|
|
427
|
+
//#endregion
|
|
428
|
+
//#region ../../packages/shared/dist/socket-protocol.js
|
|
429
|
+
const identifierSchema = z.string().min(1).max(128);
|
|
430
|
+
const eventEnvelope = (type, data) => z.strictObject({
|
|
431
|
+
id: identifierSchema,
|
|
432
|
+
type: z.literal(type),
|
|
433
|
+
at: z.string().datetime(),
|
|
434
|
+
data
|
|
435
|
+
});
|
|
436
|
+
const projectEventDataSchema = z.strictObject({
|
|
437
|
+
projectId: identifierSchema,
|
|
438
|
+
worktreeId: z.null()
|
|
439
|
+
});
|
|
440
|
+
const worktreeEventDataSchema = z.strictObject({ worktreeId: identifierSchema });
|
|
441
|
+
const projectWorktreeEventDataSchema = z.strictObject({
|
|
442
|
+
projectId: identifierSchema,
|
|
443
|
+
worktreeId: identifierSchema
|
|
444
|
+
});
|
|
445
|
+
const operationEventDataSchema = z.strictObject({
|
|
446
|
+
operationId: identifierSchema,
|
|
447
|
+
worktreeId: identifierSchema
|
|
448
|
+
});
|
|
449
|
+
const webPanelSnapshotSchema = z.strictObject({
|
|
450
|
+
id: z.string().min(1),
|
|
451
|
+
kind: z.literal("web"),
|
|
452
|
+
worktreeId: z.string().min(1),
|
|
453
|
+
definitionId: z.string().min(1),
|
|
454
|
+
title: z.string().min(1),
|
|
455
|
+
launch: z.strictObject({
|
|
456
|
+
input: z.record(z.string(), z.json()).nullable(),
|
|
457
|
+
cwd: z.string().nullable()
|
|
458
|
+
}),
|
|
459
|
+
permissions: z.array(webPanelPermissionSchema),
|
|
460
|
+
sandbox: z.strictObject({ allowSameOrigin: z.boolean() }),
|
|
461
|
+
createdAt: z.string(),
|
|
462
|
+
updatedAt: z.string()
|
|
463
|
+
});
|
|
464
|
+
const browserPanelSnapshotSchema = z.strictObject({
|
|
465
|
+
id: z.string().min(1),
|
|
466
|
+
kind: z.literal("browser"),
|
|
467
|
+
worktreeId: z.string().min(1),
|
|
468
|
+
title: z.string().min(1).max(256),
|
|
469
|
+
url: z.union([z.literal("about:blank"), browserUrlSchema]),
|
|
470
|
+
createdAt: z.string(),
|
|
471
|
+
updatedAt: z.string()
|
|
472
|
+
});
|
|
473
|
+
const openPanelSnapshotSchema = z.discriminatedUnion("kind", [webPanelSnapshotSchema, browserPanelSnapshotSchema]);
|
|
474
|
+
const productEventSchema = z.discriminatedUnion("type", [
|
|
475
|
+
eventEnvelope("project.created", projectEventDataSchema),
|
|
476
|
+
eventEnvelope("project.updated", projectEventDataSchema),
|
|
477
|
+
eventEnvelope("project.removed", projectEventDataSchema),
|
|
478
|
+
eventEnvelope("worktree.created", projectWorktreeEventDataSchema),
|
|
479
|
+
eventEnvelope("worktree.updated", worktreeEventDataSchema),
|
|
480
|
+
eventEnvelope("worktree.removed", projectWorktreeEventDataSchema),
|
|
481
|
+
eventEnvelope("create.started", z.strictObject({
|
|
482
|
+
projectId: identifierSchema,
|
|
483
|
+
operationId: identifierSchema,
|
|
484
|
+
worktreeId: z.null()
|
|
485
|
+
})),
|
|
486
|
+
eventEnvelope("create.completed", z.strictObject({
|
|
487
|
+
projectId: identifierSchema,
|
|
488
|
+
operationId: identifierSchema,
|
|
489
|
+
worktreeId: identifierSchema
|
|
490
|
+
})),
|
|
491
|
+
eventEnvelope("create.failed", z.strictObject({
|
|
492
|
+
projectId: identifierSchema,
|
|
493
|
+
operationId: identifierSchema,
|
|
494
|
+
worktreeId: z.null()
|
|
495
|
+
})),
|
|
496
|
+
eventEnvelope("terminal.created", z.strictObject({
|
|
497
|
+
projectId: identifierSchema.optional(),
|
|
498
|
+
worktreeId: identifierSchema,
|
|
499
|
+
terminalId: identifierSchema
|
|
500
|
+
})),
|
|
501
|
+
eventEnvelope("terminal.updated", z.strictObject({
|
|
502
|
+
worktreeId: identifierSchema,
|
|
503
|
+
terminalId: identifierSchema
|
|
504
|
+
})),
|
|
505
|
+
eventEnvelope("terminal.removed", z.strictObject({
|
|
506
|
+
worktreeId: identifierSchema,
|
|
507
|
+
terminalId: identifierSchema
|
|
508
|
+
})),
|
|
509
|
+
eventEnvelope("terminal.metadata", terminalRuntimeMetadataSchema.extend({ worktreeId: z.null() })),
|
|
510
|
+
eventEnvelope("terminal.controller_changed", z.strictObject({
|
|
511
|
+
terminalId: identifierSchema,
|
|
512
|
+
controlled: z.boolean(),
|
|
513
|
+
worktreeId: z.null()
|
|
514
|
+
})),
|
|
515
|
+
eventEnvelope("panel.created", z.strictObject({
|
|
516
|
+
worktreeId: identifierSchema,
|
|
517
|
+
panelId: identifierSchema
|
|
518
|
+
})),
|
|
519
|
+
eventEnvelope("panel.updated", z.strictObject({
|
|
520
|
+
worktreeId: identifierSchema,
|
|
521
|
+
panelId: identifierSchema
|
|
522
|
+
})),
|
|
523
|
+
eventEnvelope("panel.open_requested", z.strictObject({
|
|
524
|
+
worktreeId: identifierSchema,
|
|
525
|
+
panelId: identifierSchema,
|
|
526
|
+
panel: openPanelSnapshotSchema,
|
|
527
|
+
sourceTerminalId: identifierSchema.nullable(),
|
|
528
|
+
sourcePanelId: identifierSchema.nullable()
|
|
529
|
+
})),
|
|
530
|
+
eventEnvelope("panel.removed", z.strictObject({
|
|
531
|
+
worktreeId: identifierSchema,
|
|
532
|
+
panelId: identifierSchema
|
|
533
|
+
})),
|
|
534
|
+
eventEnvelope("workspace.open_requested", z.strictObject({
|
|
535
|
+
worktreeId: identifierSchema,
|
|
536
|
+
sourceTerminalId: identifierSchema
|
|
537
|
+
})),
|
|
538
|
+
eventEnvelope("remove.started", operationEventDataSchema.extend({ kind: z.literal("remove") })),
|
|
539
|
+
eventEnvelope("remove.completed", operationEventDataSchema),
|
|
540
|
+
eventEnvelope("remove.failed", operationEventDataSchema.extend({ error: z.string() }))
|
|
541
|
+
]);
|
|
542
|
+
const eventsSnapshotSchema = z.strictObject({
|
|
543
|
+
at: z.string().datetime(),
|
|
544
|
+
terminalMetadata: z.array(terminalRuntimeMetadataSchema),
|
|
545
|
+
webPanels: z.array(webPanelSnapshotSchema),
|
|
546
|
+
browserPanels: z.array(browserPanelSnapshotSchema)
|
|
547
|
+
});
|
|
548
|
+
z.unknown();
|
|
549
|
+
function parseEventsSnapshot(value) {
|
|
550
|
+
const parsed = eventsSnapshotSchema.safeParse(value);
|
|
551
|
+
return parsed.success ? parsed.data : null;
|
|
552
|
+
}
|
|
553
|
+
function parseProductEvent(value) {
|
|
554
|
+
const parsed = productEventSchema.safeParse(value);
|
|
555
|
+
return parsed.success ? parsed.data : null;
|
|
556
|
+
}
|
|
557
|
+
//#endregion
|
|
558
|
+
//#region ../../packages/shared/dist/index.js
|
|
559
|
+
const TERMINAL_MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
|
|
560
|
+
const TERMINAL_EXECUTABLE_MAX_LENGTH = 4096;
|
|
561
|
+
const TERMINAL_ARGUMENT_MAX_LENGTH = 4096;
|
|
562
|
+
const TERMINAL_CAPTURE_MAX_LINES = 5e3;
|
|
563
|
+
const WEB_PANEL_INPUT_MAX_BYTES = 64 * 1024;
|
|
564
|
+
const TREE_CONTEXT_VALUE_MAX_LENGTH = 16 * 1024;
|
|
565
|
+
const TREE_CONTEXT_VALUES_MAX_LENGTH = 64 * 1024;
|
|
566
|
+
const TREE_FILE_MAX_BYTES = 2 * 1024 * 1024;
|
|
567
|
+
const TREE_FILE_LIST_MAX_ENTRIES = 5e4;
|
|
568
|
+
function formatCommandLine(argv) {
|
|
569
|
+
return argv.map((value) => {
|
|
570
|
+
if (value === "") return "\"\"";
|
|
571
|
+
if (!/[\s"'\\]/.test(value)) return value;
|
|
572
|
+
return `"${value.replace(/["\\]/g, "\\$&")}"`;
|
|
573
|
+
}).join(" ");
|
|
574
|
+
}
|
|
575
|
+
const PROJECT_COLORS = [
|
|
576
|
+
"rose",
|
|
577
|
+
"orange",
|
|
578
|
+
"amber",
|
|
579
|
+
"emerald",
|
|
580
|
+
"cyan",
|
|
581
|
+
"blue",
|
|
582
|
+
"violet",
|
|
583
|
+
"pink"
|
|
584
|
+
];
|
|
585
|
+
const browseDirectoryQuerySchema = z.object({
|
|
586
|
+
input: z.string().trim().min(1).max(4096),
|
|
587
|
+
hidden: z.enum(["true", "false"]).optional().default("false").transform((value) => value === "true")
|
|
588
|
+
});
|
|
589
|
+
const terminalCaptureQuerySchema = z.object({ lines: z.coerce.number().int().min(1).max(TERMINAL_CAPTURE_MAX_LINES).optional().default(200) });
|
|
590
|
+
const registerProjectSchema = z.object({
|
|
591
|
+
path: z.string().trim().min(1),
|
|
592
|
+
name: z.string().trim().min(1).max(120).optional()
|
|
593
|
+
});
|
|
594
|
+
const updateProjectSchema = z.object({ color: z.enum(PROJECT_COLORS).nullable() });
|
|
595
|
+
const terminalNameSchema = z.string().trim().min(1).max(120);
|
|
596
|
+
const terminalArgvSchema = z.array(z.string()).min(1).max(128);
|
|
597
|
+
const terminalPresetArgumentSchema = z.string().max(TERMINAL_ARGUMENT_MAX_LENGTH);
|
|
598
|
+
const terminalPresetFields = {
|
|
599
|
+
name: terminalNameSchema,
|
|
600
|
+
executable: z.string().min(1).max(TERMINAL_EXECUTABLE_MAX_LENGTH).refine((value) => value.trim().length > 0, { message: "Executable cannot be blank" }),
|
|
601
|
+
args: z.array(terminalPresetArgumentSchema).max(127),
|
|
602
|
+
closeOnSuccess: z.boolean().default(false)
|
|
603
|
+
};
|
|
604
|
+
const repositoryTerminalPresetSchema = z.strictObject(terminalPresetFields);
|
|
605
|
+
const repositoryTerminalPresetIdSchema = z.string().regex(/^[a-z0-9][a-z0-9._-]{0,119}$/, { message: "Preset IDs must contain only lowercase letters, numbers, dots, underscores, and hyphens" });
|
|
606
|
+
const repositoryTerminalPresetsFileSchema = z.strictObject({
|
|
607
|
+
version: z.literal(1),
|
|
608
|
+
presets: z.record(repositoryTerminalPresetIdSchema, z.unknown())
|
|
609
|
+
});
|
|
610
|
+
const terminalPresetRevisionSchema = z.string().min(1).max(64);
|
|
611
|
+
const treeContextFieldIdSchema = z.string().trim().regex(/^[a-z0-9][a-z0-9._-]{0,119}$/, { message: "Field IDs must contain only lowercase letters, numbers, dots, underscores, and hyphens" });
|
|
612
|
+
const treeContextFieldDefinitionSchema = z.strictObject({
|
|
613
|
+
id: treeContextFieldIdSchema,
|
|
614
|
+
label: z.string().trim().min(1).max(120).refine((value) => !value.includes("\0"), { message: "Field labels cannot contain NUL" }),
|
|
615
|
+
input: z.enum(["text", "textarea"])
|
|
616
|
+
});
|
|
617
|
+
const treeContextValuesSchema = z.record(treeContextFieldIdSchema, z.string().trim().min(1).max(TREE_CONTEXT_VALUE_MAX_LENGTH).refine((value) => !value.includes("\0"), { message: "Tree context values cannot contain NUL" })).superRefine((values, context) => {
|
|
618
|
+
const entries = Object.entries(values);
|
|
619
|
+
if (entries.length > 64) context.addIssue({
|
|
620
|
+
code: "custom",
|
|
621
|
+
message: `Tree context cannot contain more than 64 values`
|
|
622
|
+
});
|
|
623
|
+
if (entries.reduce((length, [key, value]) => length + key.length + value.length, 0) > 65536) context.addIssue({
|
|
624
|
+
code: "custom",
|
|
625
|
+
message: `Tree context cannot contain more than ${TREE_CONTEXT_VALUES_MAX_LENGTH} characters`
|
|
626
|
+
});
|
|
627
|
+
});
|
|
628
|
+
const initialTerminalSchema = z.object({
|
|
629
|
+
name: terminalNameSchema,
|
|
630
|
+
initialTitle: terminalNameSchema.optional(),
|
|
631
|
+
argv: terminalArgvSchema.optional(),
|
|
632
|
+
returnToShell: z.boolean().optional(),
|
|
633
|
+
initialSize: terminalSizeSchema.optional()
|
|
634
|
+
});
|
|
635
|
+
const createWorktreeSchema = z.object({
|
|
636
|
+
name: z.string().trim().min(1).max(120),
|
|
637
|
+
base: z.enum(["default", "current"]).default("default"),
|
|
638
|
+
context: treeContextValuesSchema.optional(),
|
|
639
|
+
sourceWorktreeId: z.string().min(1).optional(),
|
|
640
|
+
initialTerminal: initialTerminalSchema.optional()
|
|
641
|
+
}).superRefine((value, context) => {
|
|
642
|
+
if (value.base === "current" && !value.sourceWorktreeId) context.addIssue({
|
|
643
|
+
code: "custom",
|
|
644
|
+
path: ["sourceWorktreeId"],
|
|
645
|
+
message: "A source tree is required when starting from current"
|
|
646
|
+
});
|
|
647
|
+
});
|
|
648
|
+
const terminalCwdSchema = z.string().min(1).max(4096).refine((value) => value.trim().length > 0 && !value.includes("\0"), { message: "Working directory cannot be blank or contain NUL" });
|
|
649
|
+
const terminalEnvironmentKeySchema = z.string().min(1).max(256).refine((value) => !value.includes("=") && !value.includes("\0"), { message: "Environment keys cannot contain equals or NUL" });
|
|
650
|
+
const terminalShellCommandSchema = z.string().min(1).max(TERMINAL_ARGUMENT_MAX_LENGTH).refine((value) => value.trim().length > 0 && !value.includes("\0"), { message: "Shell command cannot be blank or contain NUL" });
|
|
651
|
+
const terminalEnvironmentSchema = z.record(terminalEnvironmentKeySchema, z.string().max(TERMINAL_ARGUMENT_MAX_LENGTH).refine((value) => !value.includes("\0"), { message: "Environment values cannot contain NUL" })).refine((value) => Object.keys(value).length <= 128, { message: "Environment cannot contain more than 128 variables" });
|
|
652
|
+
const createTerminalSchema = z.object({
|
|
653
|
+
name: terminalNameSchema,
|
|
654
|
+
initialTitle: terminalNameSchema.optional(),
|
|
655
|
+
argv: terminalArgvSchema.optional(),
|
|
656
|
+
shellCommand: terminalShellCommandSchema.optional(),
|
|
657
|
+
cwd: terminalCwdSchema.optional(),
|
|
658
|
+
env: terminalEnvironmentSchema.optional(),
|
|
659
|
+
returnToShell: z.boolean().optional(),
|
|
660
|
+
closeOnSuccess: z.boolean().optional(),
|
|
661
|
+
initialSize: terminalSizeSchema.optional()
|
|
662
|
+
}).refine((value) => !(value.argv && value.shellCommand), { message: "A terminal cannot have both argv and a shell command" }).refine((value) => !(value.returnToShell && value.closeOnSuccess), { message: "A terminal cannot return to a shell and close on success" });
|
|
663
|
+
const updateTerminalSchema = z.object({ name: terminalNameSchema });
|
|
664
|
+
const webPanelInputSchema = z.record(z.string(), z.json());
|
|
665
|
+
const createWebPanelSchema = z.object({
|
|
666
|
+
definitionId: z.string().min(1).max(256),
|
|
667
|
+
input: webPanelInputSchema.nullable().optional(),
|
|
668
|
+
launchCwd: z.string().max(4096).nullable().optional()
|
|
669
|
+
});
|
|
670
|
+
const updateWebPanelPermissionGrantSchema = z.strictObject({
|
|
671
|
+
granted: z.boolean(),
|
|
672
|
+
permissions: z.array(webPanelPermissionSchema)
|
|
673
|
+
});
|
|
674
|
+
const createBrowserPanelSchema = z.strictObject({
|
|
675
|
+
url: browserUrlSchema.optional(),
|
|
676
|
+
sourceTerminalId: z.string().min(1).max(128).nullable().optional()
|
|
677
|
+
});
|
|
678
|
+
const openBrowserPanelFromTerminalSchema = z.strictObject({ url: browserUrlSchema });
|
|
679
|
+
const openWebPanelSchema = createWebPanelSchema.extend({
|
|
680
|
+
newInstance: z.boolean().optional(),
|
|
681
|
+
sourceTerminalId: z.string().min(1).max(128).nullable().optional()
|
|
682
|
+
});
|
|
683
|
+
const requestWorkspaceOpenSchema = z.object({ sourceTerminalId: z.string().min(1).max(128) });
|
|
684
|
+
const webPanelStorageKeySchema = z.string().min(1).max(128);
|
|
685
|
+
const getWebPanelStorageSchema = z.object({ key: webPanelStorageKeySchema });
|
|
686
|
+
const setWebPanelStorageSchema = z.object({
|
|
687
|
+
key: webPanelStorageKeySchema,
|
|
688
|
+
value: z.json()
|
|
689
|
+
});
|
|
690
|
+
const deleteWebPanelStorageSchema = z.object({ key: webPanelStorageKeySchema });
|
|
691
|
+
const treeFilePathSchema = z.string().min(1).max(4096).refine((value) => !value.includes("\0") && !value.startsWith("/") && value.split("/").every((segment) => segment !== "" && segment !== ".."), { message: "File path must be a relative path inside the tree" });
|
|
692
|
+
const readTreeFileSchema = z.strictObject({ path: treeFilePathSchema });
|
|
693
|
+
const writeTreeFileSchema = z.strictObject({
|
|
694
|
+
path: treeFilePathSchema,
|
|
695
|
+
content: z.string(),
|
|
696
|
+
expectedRevision: z.string().min(1).max(128)
|
|
697
|
+
});
|
|
698
|
+
const createTerminalPresetSchema = z.object(terminalPresetFields);
|
|
699
|
+
const updateTerminalPresetSchema = z.object({
|
|
700
|
+
...terminalPresetFields,
|
|
701
|
+
closeOnSuccess: z.boolean().optional(),
|
|
702
|
+
expectedUpdatedAt: terminalPresetRevisionSchema
|
|
703
|
+
});
|
|
704
|
+
const deleteTerminalPresetSchema = z.object({ expectedUpdatedAt: terminalPresetRevisionSchema });
|
|
705
|
+
const packageProjectQuerySchema = z.object({ path: z.string().trim().min(1).max(4096) });
|
|
706
|
+
const packageInstallSchema = z.object({
|
|
707
|
+
source: z.string().trim().min(1).max(4096),
|
|
708
|
+
projectId: z.string().min(1).optional()
|
|
709
|
+
});
|
|
710
|
+
const packageRemoveSchema = z.object({
|
|
711
|
+
source: z.string().trim().min(1).max(4096),
|
|
712
|
+
projectId: z.string().min(1).optional()
|
|
713
|
+
});
|
|
714
|
+
const packageUpdateSchema = z.object({ source: z.string().trim().min(1).max(4096).optional() });
|
|
715
|
+
const packageReloadSchema = z.object({ projectId: z.string().min(1).optional() });
|
|
716
|
+
const removeWorktreeSchema = z.object({
|
|
717
|
+
confirmationToken: z.string().length(64),
|
|
718
|
+
confirmDestructive: z.boolean()
|
|
719
|
+
});
|
|
720
|
+
z.object({
|
|
721
|
+
project: z.string().min(1),
|
|
722
|
+
worktreeName: z.string().trim().min(1).max(120),
|
|
723
|
+
name: terminalNameSchema,
|
|
724
|
+
argv: terminalArgvSchema.optional(),
|
|
725
|
+
base: z.enum(["default", "current"]).default("default"),
|
|
726
|
+
sourceWorktreeId: z.string().min(1).optional()
|
|
727
|
+
}).superRefine((value, context) => {
|
|
728
|
+
if (value.base === "current" && !value.sourceWorktreeId) context.addIssue({
|
|
729
|
+
code: "custom",
|
|
730
|
+
path: ["sourceWorktreeId"],
|
|
731
|
+
message: "A source tree is required when starting from current"
|
|
732
|
+
});
|
|
733
|
+
});
|
|
734
|
+
//#endregion
|
|
735
|
+
export { TERMINAL_SELECTION_STOP_SEQUENCE as $, terminalCaptureQuerySchema as A, parseEventsSnapshot as B, readTreeFileSchema as C, repositoryTerminalPresetsFileSchema as D, repositoryTerminalPresetSchema as E, updateTerminalPresetSchema as F, TERMINAL_MAX_INPUT_BYTES as G, SOCKET_IO_PATH as H, updateTerminalSchema as I, TERMINAL_OUTPUT_STALL_TIMEOUT_MS as J, TERMINAL_OUTPUT_HIGH_WATERMARK as K, updateWebPanelPermissionGrantSchema as L, treeContextValuesSchema as M, treeFilePathSchema as N, requestWorkspaceOpenSchema as O, updateProjectSchema as P, TERMINAL_SELECTION_START_SEQUENCE as Q, webPanelInputSchema as R, packageUpdateSchema as S, removeWorktreeSchema as T, TERMINAL_CONTROLLER_GRACE_MS as U, parseProductEvent as V, TERMINAL_MAX_CLIENT_MESSAGE_BYTES as W, TERMINAL_SELECTION_CLEAR_SEQUENCE as X, TERMINAL_SCROLL_EXIT_SEQUENCE as Y, TERMINAL_SELECTION_RESTORE_SEQUENCE as Z, openWebPanelSchema as _, parseBrowserAuth as _t, WEB_PANEL_INPUT_MAX_BYTES as a, terminalLegacyTakeControlSchema as at, packageReloadSchema as b, parseBrowserOwnerClientMessage as bt, createTerminalPresetSchema as c, terminalSizeSchema as ct, createWorktreeSchema as d, BROWSER_MAX_FRAME_BYTES as dt, parseTerminalAuth as et, deleteTerminalPresetSchema as f, browserAgentCommandSchema as ft, openBrowserPanelFromTerminalSchema as g, browserUrlSchema as gt, getWebPanelStorageSchema as h, browserTicketRequestSchema as ht, TREE_FILE_MAX_BYTES as i, terminalInputSchema as it, treeContextFieldDefinitionSchema as j, setWebPanelStorageSchema as k, createTerminalSchema as l, terminalTakeControlSchema as lt, formatCommandLine as m, browserOwnerTicketRequestSchema as mt, TERMINAL_MAX_UPLOAD_BYTES as n, terminalBellAcknowledgementSchema as nt, browseDirectoryQuerySchema as o, terminalOutputAckSchema as ot, deleteWebPanelStorageSchema as p, browserOwnerEndpointSchema as pt, TERMINAL_OUTPUT_LOW_WATERMARK as q, TREE_FILE_LIST_MAX_ENTRIES as r, terminalBinarySchema as rt, createBrowserPanelSchema as s, terminalResizeSchema as st, TERMINAL_CAPTURE_MAX_LINES as t, parseTerminalProgress as tt, createWebPanelSchema as u, webPanelPermissionSchema as ut, packageInstallSchema as v, parseBrowserClientMessage as vt, registerProjectSchema as w, packageRemoveSchema as x, packageProjectQuerySchema as y, parseBrowserOwnerAuth as yt, writeTreeFileSchema as z };
|