@ebowwa/codespaces-types 1.4.0 → 1.4.2

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/runtime/index.js CHANGED
@@ -1,28 +1,884 @@
1
- "use strict";
2
- /**
3
- * Central export point for all Zod schemas
4
- *
5
- * Note: Hetzner schemas are in app/backend/shared/lib/hetzner/schemas.ts
6
- * to keep them with the Hetzner client implementation.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
1
+ // @bun
2
+ // runtime/api.js
3
+ import { z } from "zod";
4
+ var EnvironmentIdSchema = z.string().transform((val) => parseInt(val, 10)).pipe(z.number().int().positive("Environment ID must be a positive integer"));
5
+ var CreateEnvironmentRequestSchema = z.object({
6
+ name: z.string().min(1, "Name is required").max(64, "Name must be 64 characters or less").regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
7
+ serverType: z.string().min(1, "Server type is required"),
8
+ location: z.string().min(1, "Location is required"),
9
+ sshKeys: z.array(z.string()).optional(),
10
+ autoInstallSeed: z.boolean().default(false).optional(),
11
+ metadata: z.object({
12
+ description: z.string().optional(),
13
+ project: z.string().optional(),
14
+ owner: z.string().optional(),
15
+ purpose: z.string().optional(),
16
+ environmentType: z.enum(["development", "staging", "production", "testing"]).optional()
17
+ }).optional()
18
+ });
19
+ var UpdateMetadataRequestSchema = z.object({
20
+ description: z.string().optional(),
21
+ project: z.string().optional(),
22
+ owner: z.string().optional(),
23
+ purpose: z.string().optional(),
24
+ environmentType: z.enum(["development", "staging", "production", "testing"]).optional()
25
+ });
26
+ var UpdateActivityRequestSchema = z.object({
27
+ hoursActive: z.number().min(0).optional(),
28
+ lastActive: z.string().datetime().optional(),
29
+ activePorts: z.array(z.object({
30
+ port: z.number().int().min(1).max(65535),
31
+ protocol: z.enum(["tcp", "udp"]),
32
+ service: z.string().optional(),
33
+ state: z.enum(["open", "closed", "filtered"])
34
+ })).optional()
35
+ });
36
+ var UpdatePluginsRequestSchema = z.object({
37
+ plugins: z.record(z.string(), z.object({
38
+ enabled: z.boolean(),
39
+ config: z.record(z.string(), z.any()).optional()
40
+ })).optional()
41
+ });
42
+ var SSHConnectionRequestSchema = z.object({
43
+ host: z.string().min(1, "Host is required"),
44
+ user: z.string().default("root").optional()
45
+ });
46
+ var SSHTestRequestSchema = z.object({
47
+ host: z.string().min(1, "Host is required"),
48
+ user: z.string().default("root").optional(),
49
+ port: z.number().int().positive().max(65535).default(22).optional()
50
+ });
51
+ var SSHFingerprintRequestSchema = z.object({
52
+ host: z.string().min(1, "Host is required"),
53
+ user: z.string().default("root").optional(),
54
+ port: z.number().int().positive().max(65535).default(22).optional()
55
+ });
56
+ var TerminalCreateSessionSchema = z.object({
57
+ host: z.string().min(1, "Host is required"),
58
+ user: z.string().default("root").optional(),
59
+ port: z.number().int().positive().max(65535).default(22).optional(),
60
+ rows: z.number().int().positive().max(200).default(24).optional(),
61
+ cols: z.number().int().positive().max(500).default(80).optional()
62
+ });
63
+ var TerminalResizeSchema = z.object({
64
+ sessionId: z.string().min(1, "Session ID is required"),
65
+ rows: z.number().int().positive().max(200),
66
+ cols: z.number().int().positive().max(500)
67
+ });
68
+ var SCPUploadRequestSchema = z.object({
69
+ host: z.string().min(1, "Host is required"),
70
+ user: z.string().default("root").optional(),
71
+ source: z.string().min(1, "Source path is required"),
72
+ destination: z.string().min(1, "Destination path is required"),
73
+ recursive: z.boolean().default(false).optional(),
74
+ preserve: z.boolean().default(false).optional()
75
+ });
76
+ var SCPDownloadRequestSchema = z.object({
77
+ host: z.string().min(1, "Host is required"),
78
+ user: z.string().default("root").optional(),
79
+ source: z.string().min(1, "Source path is required"),
80
+ destination: z.string().min(1, "Destination path is required"),
81
+ recursive: z.boolean().default(false).optional(),
82
+ preserve: z.boolean().default(false).optional()
83
+ });
84
+ var FilesListRequestSchema = z.object({
85
+ host: z.string().min(1, "Host is required"),
86
+ user: z.string().default("root").optional(),
87
+ path: z.string().default(".").optional()
88
+ });
89
+ var FilesPreviewRequestSchema = z.object({
90
+ host: z.string().min(1, "Host is required"),
91
+ user: z.string().default("root").optional(),
92
+ path: z.string().min(1, "Path is required")
93
+ });
94
+ var SSHKeyIdSchema = z.string().transform((val) => parseInt(val, 10)).pipe(z.number().int().positive("SSH Key ID must be a positive integer"));
95
+ var CreateSSHKeyRequestSchema = z.object({
96
+ name: z.string().min(1, "Name is required").max(64, "Name must be 64 characters or less").regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
97
+ public_key: z.string().min(1, "Public key is required"),
98
+ labels: z.record(z.string(), z.any()).optional()
99
+ });
100
+ var AIGenerateRequestSchema = z.object({
101
+ prompt: z.string().min(1, "Prompt is required"),
102
+ model: z.string().optional(),
103
+ temperature: z.number().min(0).max(2).optional(),
104
+ maxTokens: z.number().int().positive().optional()
105
+ });
106
+ var AIChatRequestSchema = z.object({
107
+ messages: z.array(z.any()).min(1, "At least one message is required"),
108
+ model: z.string().optional(),
109
+ temperature: z.number().min(0).max(2).optional(),
110
+ maxTokens: z.number().int().positive().optional()
111
+ });
112
+ var AISuggestNameRequestSchema = z.object({
113
+ project: z.string().optional(),
114
+ description: z.string().optional()
115
+ });
116
+ var AISuggestServerTypeRequestSchema = z.object({
117
+ workload: z.string().min(1, "Workload description is required")
118
+ });
119
+ var AIAnalyzeResourcesRequestSchema = z.object({
120
+ cpu: z.number().min(0).max(100),
121
+ memory: z.number().min(0).max(100),
122
+ disk: z.number().min(0).max(100)
123
+ });
124
+ var AITroubleshootSSHRequestSchema = z.object({
125
+ error: z.string().min(1, "Error message is required")
126
+ });
127
+ var AISuggestActionsRequestSchema = z.object({
128
+ status: z.string().min(1, "Status is required"),
129
+ age: z.string().optional()
130
+ });
131
+ var AIStatusMessageRequestSchema = z.object({
132
+ status: z.string().min(1, "Status is required"),
133
+ name: z.string().min(1, "Name is required")
134
+ });
135
+ var MetricsQuerySchema = z.object({
136
+ hours: z.string().default("24").transform((val) => parseInt(val, 10)).pipe(z.number().int().positive().max(8760)),
137
+ limit: z.string().default("100").transform((val) => parseInt(val, 10)).pipe(z.number().int().positive().max(1000))
138
+ });
139
+ var InsertMetricRequestSchema = z.object({
140
+ environmentId: z.number().int().positive(),
141
+ cpuPercent: z.number().min(0).max(100),
142
+ memoryPercent: z.number().min(0).max(100),
143
+ memoryUsed: z.number().min(0),
144
+ memoryTotal: z.number().min(0),
145
+ diskPercent: z.number().min(0).max(100),
146
+ diskUsed: z.number().min(0),
147
+ diskTotal: z.number().min(0),
148
+ gpuPercent: z.number().min(0).max(100).optional(),
149
+ gpuMemoryUsed: z.number().min(0).optional(),
150
+ gpuMemoryTotal: z.number().min(0).optional()
151
+ });
152
+ var AIAnalyzeHistoricalRequestSchema = z.object({
153
+ environmentId: z.number().int().positive(),
154
+ hours: z.number().int().positive().max(8760).default(24)
155
+ });
156
+ var SeedInstallRequestSchema = z.object({
157
+ environmentId: z.string().min(1, "Environment ID is required"),
158
+ autoConfirm: z.boolean().default(true).optional()
159
+ });
160
+ var SeedInstallResponseSchema = z.object({
161
+ success: z.boolean(),
162
+ cloned: z.boolean(),
163
+ setupRun: z.boolean(),
164
+ seedPath: z.string(),
165
+ error: z.string().optional(),
166
+ output: z.array(z.string())
167
+ });
168
+ var SeedStatusResponseSchema = z.object({
169
+ installed: z.boolean(),
170
+ setupComplete: z.boolean(),
171
+ version: z.string().optional(),
172
+ branch: z.string().optional()
173
+ });
174
+ var LoginCommandsResponseSchema = z.object({
175
+ ssh: z.string(),
176
+ web: z.string(),
177
+ claude: z.string(),
178
+ quick: z.string()
179
+ });
180
+ var VolumeIdSchema = z.string().transform((val) => parseInt(val, 10)).pipe(z.number().int().positive("Volume ID must be a positive integer"));
181
+ var CreateVolumeRequestSchema = z.object({
182
+ name: z.string().min(1, "Name is required").max(64, "Name must be 64 characters or less").regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
183
+ size: z.number().int().positive("Size must be a positive integer").min(10, "Minimum volume size is 10 GB").max(10240, "Maximum volume size is 10 TB"),
184
+ server: z.string().optional(),
185
+ location: z.string().optional(),
186
+ automount: z.boolean().default(true).optional(),
187
+ format: z.enum(["ext4", "xfs"]).optional(),
188
+ labels: z.record(z.string(), z.any()).optional()
189
+ });
190
+ var UpdateVolumeRequestSchema = z.object({
191
+ name: z.string().min(1).max(64).optional(),
192
+ labels: z.record(z.string(), z.any()).optional()
193
+ });
194
+ var AttachVolumeRequestSchema = z.object({
195
+ volumeId: z.number().int().positive("Volume ID is required"),
196
+ serverId: z.number().int().positive("Server ID is required"),
197
+ automount: z.boolean().default(true).optional()
198
+ });
199
+ var DetachVolumeRequestSchema = z.object({
200
+ volumeId: z.number().int().positive("Volume ID is required")
201
+ });
202
+ var ResizeVolumeRequestSchema = z.object({
203
+ volumeId: z.number().int().positive("Volume ID is required"),
204
+ size: z.number().int().positive("Size must be a positive integer").min(10, "Minimum volume size is 10 GB").max(10240, "Maximum volume size is 10 TB")
205
+ });
206
+ var VolumeProtectionRequestSchema = z.object({
207
+ delete: z.boolean()
208
+ });
209
+ var VolumePriceQuerySchema = z.object({
210
+ size: z.number().int().positive("Size must be a positive integer").min(10, "Minimum volume size is 10 GB").max(10240, "Maximum volume size is 10 TB")
211
+ });
212
+ var TmuxSendCommandSchema = z.object({
213
+ sessionId: z.string().min(1, "Session ID is required"),
214
+ command: z.string().min(1, "Command is required"),
215
+ paneIndex: z.string().default("0").optional()
216
+ });
217
+ var TmuxSplitPaneSchema = z.object({
218
+ sessionId: z.string().min(1, "Session ID is required"),
219
+ direction: z.enum(["h", "v"]).default("v"),
220
+ command: z.string().optional()
221
+ });
222
+ var TmuxListWindowsSchema = z.object({
223
+ sessionId: z.string().min(1, "Session ID is required")
224
+ });
225
+ var TmuxListPanesSchema = z.object({
226
+ sessionId: z.string().min(1, "Session ID is required"),
227
+ windowIndex: z.string().default("0").optional()
228
+ });
229
+ var TmuxCapturePaneSchema = z.object({
230
+ sessionId: z.string().min(1, "Session ID is required"),
231
+ paneIndex: z.string().default("0").optional()
232
+ });
233
+ var TmuxGetHistorySchema = z.object({
234
+ sessionId: z.string().min(1, "Session ID is required"),
235
+ paneIndex: z.string().default("0").optional(),
236
+ lines: z.number().int().default(-1).optional()
237
+ });
238
+ var TmuxSwitchWindowSchema = z.object({
239
+ sessionId: z.string().min(1, "Session ID is required"),
240
+ windowIndex: z.string().min(1, "Window index is required")
241
+ });
242
+ var TmuxSwitchPaneSchema = z.object({
243
+ sessionId: z.string().min(1, "Session ID is required"),
244
+ paneIndex: z.string().min(1, "Pane index is required")
245
+ });
246
+ var TmuxRenameWindowSchema = z.object({
247
+ sessionId: z.string().min(1, "Session ID is required"),
248
+ windowIndex: z.string().min(1, "Window index is required"),
249
+ newName: z.string().min(1, "New name is required").max(64)
250
+ });
251
+ var TmuxKillPaneSchema = z.object({
252
+ sessionId: z.string().min(1, "Session ID is required"),
253
+ paneIndex: z.string().min(1, "Pane index is required")
254
+ });
255
+ var TmuxDetailedInfoSchema = z.object({
256
+ sessionId: z.string().min(1, "Session ID is required")
257
+ });
258
+ var TmuxManagerAddNodeSchema = z.object({
259
+ id: z.string().min(1, "Node ID is required"),
260
+ name: z.string().min(1, "Node name is required"),
261
+ ip: z.string().min(1, "IP address is required"),
262
+ ipv6: z.string().nullable().optional(),
263
+ user: z.string().default("root"),
264
+ port: z.number().int().positive().max(65535).default(22),
265
+ keyPath: z.string().optional(),
266
+ status: z.enum(["running", "stopped", "unreachable"]).default("running"),
267
+ tags: z.array(z.string()).optional(),
268
+ location: z.string().optional()
269
+ });
270
+ var TmuxManagerCreateSessionSchema = z.object({
271
+ nodeId: z.string().min(1, "Node ID is required"),
272
+ sessionName: z.string().optional(),
273
+ cwd: z.string().optional(),
274
+ initialCommand: z.string().optional(),
275
+ layout: z.enum(["even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled"]).optional()
276
+ });
277
+ var TmuxManagerAttachSessionSchema = z.object({
278
+ nodeId: z.string().min(1, "Node ID is required"),
279
+ sessionName: z.string().optional()
280
+ });
281
+ var TmuxManagerKillSessionSchema = z.object({
282
+ nodeId: z.string().min(1, "Node ID is required"),
283
+ sessionName: z.string().min(1, "Session name is required")
284
+ });
285
+ var TmuxManagerSendCommandSchema = z.object({
286
+ nodeId: z.string().min(1, "Node ID is required"),
287
+ sessionName: z.string().min(1, "Session name is required"),
288
+ command: z.string().min(1, "Command is required"),
289
+ paneIndex: z.string().default("0")
290
+ });
291
+ var TmuxManagerBatchSendCommandSchema = z.object({
292
+ nodeIds: z.array(z.string().min(1)).min(1, "At least one node ID is required"),
293
+ sessionName: z.string().min(1, "Session name is required"),
294
+ command: z.string().min(1, "Command is required"),
295
+ paneIndex: z.string().default("0"),
296
+ parallel: z.boolean().default(true),
297
+ continueOnError: z.boolean().default(true),
298
+ timeout: z.number().int().positive().default(30)
299
+ });
300
+ var TmuxManagerSplitPaneSchema = z.object({
301
+ nodeId: z.string().min(1, "Node ID is required"),
302
+ sessionName: z.string().min(1, "Session name is required"),
303
+ direction: z.enum(["h", "v"]).default("v"),
304
+ command: z.string().nullable().optional(),
305
+ windowIndex: z.string().default("0")
306
+ });
307
+ var TmuxManagerCapturePaneSchema = z.object({
308
+ nodeId: z.string().min(1, "Node ID is required"),
309
+ sessionName: z.string().min(1, "Session name is required"),
310
+ paneIndex: z.string().default("0")
311
+ });
312
+ var TmuxManagerGetHistorySchema = z.object({
313
+ nodeId: z.string().min(1, "Node ID is required"),
314
+ sessionName: z.string().min(1, "Session name is required"),
315
+ paneIndex: z.string().default("0"),
316
+ lines: z.number().int().default(-1)
317
+ });
318
+ var TmuxManagerListWindowsSchema = z.object({
319
+ nodeId: z.string().min(1, "Node ID is required"),
320
+ sessionName: z.string().min(1, "Session name is required")
321
+ });
322
+ var TmuxManagerListPanesSchema = z.object({
323
+ nodeId: z.string().min(1, "Node ID is required"),
324
+ sessionName: z.string().min(1, "Session name is required"),
325
+ windowIndex: z.string().default("0")
326
+ });
327
+ var TmuxManagerSwitchWindowSchema = z.object({
328
+ nodeId: z.string().min(1, "Node ID is required"),
329
+ sessionName: z.string().min(1, "Session name is required"),
330
+ windowIndex: z.string().min(1, "Window index is required")
331
+ });
332
+ var TmuxManagerSwitchPaneSchema = z.object({
333
+ nodeId: z.string().min(1, "Node ID is required"),
334
+ sessionName: z.string().min(1, "Session name is required"),
335
+ paneIndex: z.string().min(1, "Pane index is required")
336
+ });
337
+ var TmuxManagerRenameWindowSchema = z.object({
338
+ nodeId: z.string().min(1, "Node ID is required"),
339
+ sessionName: z.string().min(1, "Session name is required"),
340
+ windowIndex: z.string().min(1, "Window index is required"),
341
+ newName: z.string().min(1, "New name is required").max(64)
342
+ });
343
+ var TmuxManagerKillPaneSchema = z.object({
344
+ nodeId: z.string().min(1, "Node ID is required"),
345
+ sessionName: z.string().min(1, "Session name is required"),
346
+ paneIndex: z.string().min(1, "Pane index is required")
347
+ });
348
+ var TmuxManagerCleanupOldSessionsSchema = z.object({
349
+ nodeId: z.string().min(1, "Node ID is required"),
350
+ ageLimitMs: z.number().int().positive().default(30 * 24 * 60 * 60 * 1000)
351
+ });
352
+ var TmuxManagerDetailedSessionSchema = z.object({
353
+ nodeId: z.string().min(1, "Node ID is required"),
354
+ sessionName: z.string().min(1, "Session name is required")
355
+ });
356
+ var TmuxManagerListSessionsQuerySchema = z.object({
357
+ nodeIds: z.array(z.string()).optional(),
358
+ tags: z.array(z.string()).optional(),
359
+ detailed: z.boolean().default(false).optional(),
360
+ includeInactive: z.boolean().default(false).optional()
361
+ });
362
+ var AddActivityRequestSchema = z.object({
363
+ environmentId: z.string().min(1, "Environment ID is required"),
364
+ action: z.string().min(1, "Action is required").max(100),
365
+ environmentName: z.string().min(1, "Environment name is required").max(64),
366
+ details: z.string().max(1000).optional()
367
+ });
368
+ var ActivitiesQueryParamsSchema = z.object({
369
+ environmentId: z.string().optional(),
370
+ limit: z.string().default("100").transform((val) => parseInt(val, 10)).pipe(z.number().int().positive().max(1000)).optional(),
371
+ hours: z.string().transform((val) => parseInt(val, 10)).pipe(z.number().int().positive()).optional(),
372
+ since: z.string().datetime().optional(),
373
+ until: z.string().datetime().optional(),
374
+ action: z.string().optional()
375
+ });
376
+ var CleanupActivitiesRequestSchema = z.object({
377
+ environmentId: z.string().optional(),
378
+ keepHours: z.number().int().positive().default(720).optional()
379
+ });
380
+ // runtime/ai.js
381
+ import { z as z2 } from "zod";
382
+ var ChatMessageRoleSchema = z2.enum(["system", "user", "assistant", "tool"]);
383
+ var ToolCallSchema = z2.object({
384
+ id: z2.string(),
385
+ type: z2.literal("function"),
386
+ function: z2.object({
387
+ name: z2.string(),
388
+ arguments: z2.string()
389
+ })
390
+ });
391
+ var ChatMessageSchema = z2.object({
392
+ role: ChatMessageRoleSchema,
393
+ content: z2.string(),
394
+ tool_calls: z2.array(ToolCallSchema).optional(),
395
+ tool_call_id: z2.string().optional()
396
+ });
397
+ var TokenUsageSchema = z2.object({
398
+ promptTokens: z2.number().int().nonnegative(),
399
+ completionTokens: z2.number().int().nonnegative(),
400
+ totalTokens: z2.number().int().nonnegative()
401
+ });
402
+ var RawUsageSchema = z2.object({
403
+ prompt_tokens: z2.number().int().nonnegative(),
404
+ completion_tokens: z2.number().int().nonnegative(),
405
+ total_tokens: z2.number().int().nonnegative()
406
+ });
407
+ var BaseAIRequestOptionsSchema = z2.object({
408
+ model: z2.string().optional(),
409
+ temperature: z2.number().min(0).max(2).optional(),
410
+ maxTokens: z2.number().int().positive().optional()
411
+ });
412
+ var ChatCompletionOptionsSchema = BaseAIRequestOptionsSchema.extend({
413
+ stream: z2.boolean().optional().default(false),
414
+ timeout: z2.number().int().positive().optional().default(30000),
415
+ maxRetries: z2.number().int().nonnegative().optional().default(3)
416
+ });
417
+ var AIRequestSchema = BaseAIRequestOptionsSchema.extend({
418
+ prompt: z2.string(),
419
+ systemPrompt: z2.string().optional()
420
+ });
421
+ var AIChatModuleRequestSchema = BaseAIRequestOptionsSchema.extend({
422
+ messages: z2.array(ChatMessageSchema).min(1)
423
+ });
424
+ var LatencyInfoSchema = z2.object({
425
+ totalMs: z2.number().nonnegative(),
426
+ formatted: z2.string()
427
+ });
428
+ var RawChoiceSchema = z2.object({
429
+ index: z2.number().int().nonnegative(),
430
+ message: z2.object({
431
+ role: z2.string(),
432
+ content: z2.string().nullable().optional(),
433
+ tool_calls: z2.array(ToolCallSchema).optional()
434
+ }),
435
+ finish_reason: z2.string().nullable()
436
+ });
437
+ var RawChatCompletionResponseSchema = z2.object({
438
+ id: z2.string(),
439
+ object: z2.string(),
440
+ created: z2.number().int().nonnegative(),
441
+ model: z2.string(),
442
+ choices: z2.array(RawChoiceSchema).min(1),
443
+ usage: RawUsageSchema.optional()
444
+ });
445
+ var ChatCompletionResponseSchema = z2.object({
446
+ id: z2.string(),
447
+ object: z2.string(),
448
+ created: z2.number().int().nonnegative(),
449
+ model: z2.string(),
450
+ choices: z2.array(z2.object({
451
+ index: z2.number().int().nonnegative(),
452
+ message: z2.object({
453
+ role: z2.string(),
454
+ content: z2.string().nullable().optional(),
455
+ tool_calls: z2.array(ToolCallSchema).optional()
456
+ }),
457
+ finish_reason: z2.string().nullable()
458
+ })).min(1),
459
+ usage: TokenUsageSchema.optional(),
460
+ latency: LatencyInfoSchema.optional()
461
+ });
462
+ var AIResponseSchema = z2.object({
463
+ success: z2.boolean(),
464
+ content: z2.string().optional(),
465
+ error: z2.string().optional(),
466
+ usage: TokenUsageSchema.optional()
467
+ });
468
+ var AIChatResponseSchema = z2.object({
469
+ success: z2.boolean(),
470
+ message: z2.string().optional(),
471
+ usage: TokenUsageSchema.optional(),
472
+ error: z2.string().optional()
473
+ });
474
+ var StreamDeltaSchema = z2.object({
475
+ role: z2.string().optional(),
476
+ content: z2.string().optional()
477
+ });
478
+ var StreamChunkTypeSchema = z2.enum(["text", "done", "error"]);
479
+ var RawStreamChunkSchema = z2.object({
480
+ id: z2.string(),
481
+ object: z2.string(),
482
+ created: z2.number().int().nonnegative(),
483
+ model: z2.string(),
484
+ choices: z2.array(z2.object({
485
+ index: z2.number().int().nonnegative(),
486
+ delta: StreamDeltaSchema,
487
+ finish_reason: z2.string().nullable().optional()
488
+ })).min(1),
489
+ usage: RawUsageSchema.optional()
490
+ });
491
+ var StreamChunkSchema = z2.object({
492
+ type: StreamChunkTypeSchema,
493
+ id: z2.string().optional(),
494
+ content: z2.string().optional(),
495
+ finishReason: z2.string().optional(),
496
+ usage: TokenUsageSchema.optional(),
497
+ error: z2.string().optional()
498
+ });
499
+ var APIErrorResponseSchema = z2.object({
500
+ error: z2.object({
501
+ message: z2.string(),
502
+ type: z2.string().optional(),
503
+ code: z2.string().optional()
504
+ }).optional()
505
+ });
506
+ var ErrorTypeSchema = z2.enum([
507
+ "timeout",
508
+ "auth",
509
+ "rate_limit",
510
+ "network",
511
+ "validation",
512
+ "unknown"
513
+ ]);
514
+ function validateChatMessage(data) {
515
+ return ChatMessageSchema.safeParse(data);
516
+ }
517
+ function validateChatMessages(data) {
518
+ return z2.array(ChatMessageSchema).min(1).safeParse(data);
519
+ }
520
+ function validateChatCompletionOptions(data) {
521
+ return ChatCompletionOptionsSchema.safeParse(data);
522
+ }
523
+ function validateRawResponse(data) {
524
+ return RawChatCompletionResponseSchema.safeParse(data);
525
+ }
526
+ function convertUsage(raw) {
527
+ const result = RawUsageSchema.safeParse(raw);
528
+ if (!result.success)
529
+ return null;
530
+ return {
531
+ promptTokens: result.data.prompt_tokens,
532
+ completionTokens: result.data.completion_tokens,
533
+ totalTokens: result.data.total_tokens
534
+ };
535
+ }
536
+ function categorizeError(data) {
537
+ if (data instanceof Error) {
538
+ if (data.message.includes("timeout")) {
539
+ return "timeout";
13
540
  }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
541
+ if (data.message.includes("unauthorized") || data.message.includes("401")) {
542
+ return "auth";
543
+ }
544
+ if (data.message.includes("rate limit") || data.message.includes("429")) {
545
+ return "rate_limit";
546
+ }
547
+ if (data instanceof TypeError || data.message.includes("fetch")) {
548
+ return "network";
549
+ }
550
+ }
551
+ const errorResult = APIErrorResponseSchema.safeParse(data);
552
+ if (errorResult.success && errorResult.data.error) {
553
+ const errorMsg = errorResult.data.error.message.toLowerCase();
554
+ if (errorMsg.includes("timeout"))
555
+ return "timeout";
556
+ if (errorMsg.includes("unauthorized") || errorMsg.includes("invalid api key") || errorMsg.includes("401"))
557
+ return "auth";
558
+ if (errorMsg.includes("rate limit") || errorMsg.includes("429"))
559
+ return "rate_limit";
560
+ }
561
+ return "unknown";
562
+ }
563
+ function parseSSERow(line) {
564
+ const trimmed = line.trim();
565
+ if (!trimmed || trimmed === "")
566
+ return null;
567
+ if (!trimmed.startsWith("data: "))
568
+ return null;
569
+ const data = trimmed.slice(6);
570
+ if (data === "[DONE]")
571
+ return data;
572
+ return data;
573
+ }
574
+ async function* parseSSEStream(response) {
575
+ if (!response.body) {
576
+ yield {
577
+ type: "error",
578
+ error: "Response body is null"
579
+ };
580
+ return;
581
+ }
582
+ const reader = response.body.getReader();
583
+ const decoder = new TextDecoder;
584
+ let buffer = "";
585
+ try {
586
+ while (true) {
587
+ const { done, value } = await reader.read();
588
+ if (done)
589
+ break;
590
+ buffer += decoder.decode(value, { stream: true });
591
+ const lines = buffer.split(`
592
+ `);
593
+ buffer = lines.pop() || "";
594
+ for (const line of lines) {
595
+ const data = parseSSERow(line);
596
+ if (!data)
597
+ continue;
598
+ if (data === "[DONE]") {
599
+ yield {
600
+ type: "done"
601
+ };
602
+ return;
603
+ }
604
+ try {
605
+ const raw = JSON.parse(data);
606
+ const rawChunkResult = RawStreamChunkSchema.safeParse(raw);
607
+ if (!rawChunkResult.success) {
608
+ yield {
609
+ type: "error",
610
+ error: `Invalid stream chunk: ${rawChunkResult.error.message}`
611
+ };
612
+ continue;
613
+ }
614
+ const rawChunk = rawChunkResult.data;
615
+ const delta = rawChunk.choices[0].delta;
616
+ const usage = rawChunk.usage ? {
617
+ promptTokens: rawChunk.usage.prompt_tokens,
618
+ completionTokens: rawChunk.usage.completion_tokens,
619
+ totalTokens: rawChunk.usage.total_tokens
620
+ } : undefined;
621
+ yield {
622
+ type: "text",
623
+ id: rawChunk.id,
624
+ content: delta.content || "",
625
+ finishReason: rawChunk.choices[0].finish_reason || undefined,
626
+ usage
627
+ };
628
+ } catch (error) {
629
+ yield {
630
+ type: "error",
631
+ error: `Failed to parse stream chunk: ${error instanceof Error ? error.message : String(error)}`
632
+ };
633
+ }
634
+ }
635
+ }
636
+ } finally {
637
+ reader.releaseLock();
638
+ }
639
+ }
640
+ // runtime/database.js
641
+ import { z as z3 } from "zod";
642
+ var ActivePortSchema = z3.object({
643
+ port: z3.number().int().min(1).max(65535),
644
+ protocol: z3.enum(["tcp", "udp"]),
645
+ service: z3.string().optional(),
646
+ state: z3.enum(["open", "closed", "filtered"])
647
+ });
648
+ var EnvironmentMetadataSchema = z3.object({
649
+ id: z3.string(),
650
+ description: z3.string().optional(),
651
+ project: z3.string().optional(),
652
+ owner: z3.string().optional(),
653
+ purpose: z3.string().optional(),
654
+ environmentType: z3.enum(["development", "staging", "production", "testing"]).optional(),
655
+ hoursActive: z3.number().min(0).optional(),
656
+ lastActive: z3.string().datetime().optional(),
657
+ activePorts: z3.array(ActivePortSchema).optional(),
658
+ sshKeyPath: z3.string().optional(),
659
+ bootstrapStatus: z3.enum(["bootstrapping", "ready", "failed"]).optional(),
660
+ permissions: z3.object({
661
+ seedConfig: z3.object({
662
+ sourceEnvironmentId: z3.string().optional(),
663
+ dependencySnapshot: z3.string().optional(),
664
+ setupScript: z3.string().optional()
665
+ }).optional(),
666
+ logins: z3.object({
667
+ github: z3.object({
668
+ enabled: z3.boolean(),
669
+ username: z3.string().optional(),
670
+ tokenScopes: z3.array(z3.string()).optional()
671
+ }).optional(),
672
+ doppler: z3.object({
673
+ enabled: z3.boolean(),
674
+ project: z3.string().optional(),
675
+ config: z3.string().optional()
676
+ }).optional(),
677
+ tailscale: z3.object({
678
+ enabled: z3.boolean(),
679
+ authKey: z3.string().optional(),
680
+ hostname: z3.string().optional()
681
+ }).optional()
682
+ }).optional(),
683
+ vpns: z3.array(z3.object({
684
+ name: z3.string(),
685
+ type: z3.enum(["wireguard", "openvpn", "tailscale"]),
686
+ config: z3.string(),
687
+ connected: z3.boolean()
688
+ })).optional(),
689
+ plugins: z3.record(z3.string(), z3.any()).optional()
690
+ }).optional(),
691
+ updatedAt: z3.string().datetime().optional()
692
+ });
693
+ var ActivityUpdateSchema = z3.object({
694
+ hoursActive: z3.number().min(0).optional(),
695
+ lastActive: z3.string().datetime().optional(),
696
+ activePorts: z3.array(ActivePortSchema).optional()
697
+ });
698
+ var PluginsUpdateSchema = z3.object({
699
+ plugins: z3.record(z3.string(), z3.any()).optional()
700
+ });
701
+ // runtime/env.js
702
+ import { z as z4 } from "zod";
703
+ var ServerEnvSchema = z4.object({
704
+ TEMP_UPLOAD_DIR: z4.string().optional().default("/tmp/cheapspaces-uploads"),
705
+ HETZNER_API_TOKEN: z4.string().min(1).optional()
706
+ });
707
+ var AIEnvSchema = z4.object({
708
+ Z_AI_API_KEY: z4.string().min(1).optional(),
709
+ ZAI_API_KEY: z4.string().min(1).optional(),
710
+ GLM_API_KEY: z4.string().min(1).optional()
711
+ }).refine((data) => data.Z_AI_API_KEY || data.ZAI_API_KEY || data.GLM_API_KEY, {
712
+ message: "At least one AI API key must be provided (Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY)"
713
+ });
714
+ var EnvSchema = z4.object({
715
+ TEMP_UPLOAD_DIR: z4.string().optional().default("/tmp/cheapspaces-uploads"),
716
+ HETZNER_API_TOKEN: z4.string().min(1).optional(),
717
+ Z_AI_API_KEY: z4.string().min(1).optional(),
718
+ ZAI_API_KEY: z4.string().min(1).optional(),
719
+ GLM_API_KEY: z4.string().min(1).optional()
720
+ }).refine((data) => data.Z_AI_API_KEY || data.ZAI_API_KEY || data.GLM_API_KEY, {
721
+ message: "At least one AI API key must be provided (Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY)"
722
+ });
723
+ function validateEnv(env = process.env) {
724
+ return EnvSchema.safeParse(env);
725
+ }
726
+ function validateServerEnv(env = process.env) {
727
+ return ServerEnvSchema.safeParse(env);
728
+ }
729
+ function validateAIEnv(env = process.env) {
730
+ return AIEnvSchema.safeParse(env);
731
+ }
732
+ // runtime/glm.js
733
+ import { z as z5 } from "zod";
734
+ var GLMModelSchema = z5.enum([
735
+ "GLM-4.7",
736
+ "GLM-4.6",
737
+ "GLM-4.5",
738
+ "GLM-4.5-air"
739
+ ]);
740
+ // runtime/ssh.js
741
+ import { z as z6 } from "zod";
742
+ var SSHOptionsSchema = z6.object({
743
+ host: z6.string().min(1, "Host is required"),
744
+ user: z6.string().default("root"),
745
+ timeout: z6.number().int().positive().default(5),
746
+ port: z6.number().int().positive().max(65535).default(22),
747
+ keyPath: z6.string().optional(),
748
+ password: z6.string().optional()
749
+ });
750
+ var SSHCommandSchema = z6.string().min(1, "Command cannot be empty");
751
+ var SCPOptionsSchema = SSHOptionsSchema.extend({
752
+ source: z6.string().min(1, "Source is required"),
753
+ destination: z6.string().min(1, "Destination is required"),
754
+ recursive: z6.boolean().default(false),
755
+ preserve: z6.boolean().default(false)
756
+ });
757
+ var FilesListOptionsSchema = z6.object({
758
+ host: z6.string().min(1, "Host is required"),
759
+ user: z6.string().default("root"),
760
+ path: z6.string().default(".")
761
+ });
762
+ var FilePreviewOptionsSchema = z6.object({
763
+ host: z6.string().min(1, "Host is required"),
764
+ user: z6.string().default("root"),
765
+ path: z6.string().min(1, "Path is required")
766
+ });
767
+ export {
768
+ validateServerEnv,
769
+ validateRawResponse,
770
+ validateEnv,
771
+ validateChatMessages,
772
+ validateChatMessage,
773
+ validateChatCompletionOptions,
774
+ validateAIEnv,
775
+ parseSSEStream,
776
+ parseSSERow,
777
+ convertUsage,
778
+ categorizeError,
779
+ VolumeProtectionRequestSchema,
780
+ VolumePriceQuerySchema,
781
+ VolumeIdSchema,
782
+ UpdateVolumeRequestSchema,
783
+ UpdatePluginsRequestSchema,
784
+ UpdateMetadataRequestSchema,
785
+ UpdateActivityRequestSchema,
786
+ ToolCallSchema,
787
+ TokenUsageSchema,
788
+ TmuxSwitchWindowSchema,
789
+ TmuxSwitchPaneSchema,
790
+ TmuxSplitPaneSchema,
791
+ TmuxSendCommandSchema,
792
+ TmuxRenameWindowSchema,
793
+ TmuxManagerSwitchWindowSchema,
794
+ TmuxManagerSwitchPaneSchema,
795
+ TmuxManagerSplitPaneSchema,
796
+ TmuxManagerSendCommandSchema,
797
+ TmuxManagerRenameWindowSchema,
798
+ TmuxManagerListWindowsSchema,
799
+ TmuxManagerListSessionsQuerySchema,
800
+ TmuxManagerListPanesSchema,
801
+ TmuxManagerKillSessionSchema,
802
+ TmuxManagerKillPaneSchema,
803
+ TmuxManagerGetHistorySchema,
804
+ TmuxManagerDetailedSessionSchema,
805
+ TmuxManagerCreateSessionSchema,
806
+ TmuxManagerCleanupOldSessionsSchema,
807
+ TmuxManagerCapturePaneSchema,
808
+ TmuxManagerBatchSendCommandSchema,
809
+ TmuxManagerAttachSessionSchema,
810
+ TmuxManagerAddNodeSchema,
811
+ TmuxListWindowsSchema,
812
+ TmuxListPanesSchema,
813
+ TmuxKillPaneSchema,
814
+ TmuxGetHistorySchema,
815
+ TmuxDetailedInfoSchema,
816
+ TmuxCapturePaneSchema,
817
+ TerminalResizeSchema,
818
+ TerminalCreateSessionSchema,
819
+ StreamDeltaSchema,
820
+ StreamChunkTypeSchema,
821
+ StreamChunkSchema,
822
+ ServerEnvSchema,
823
+ SeedStatusResponseSchema,
824
+ SeedInstallResponseSchema,
825
+ SeedInstallRequestSchema,
826
+ SSHTestRequestSchema,
827
+ SSHOptionsSchema,
828
+ SSHKeyIdSchema,
829
+ SSHFingerprintRequestSchema,
830
+ SSHConnectionRequestSchema,
831
+ SSHCommandSchema,
832
+ SCPUploadRequestSchema,
833
+ SCPOptionsSchema,
834
+ SCPDownloadRequestSchema,
835
+ ResizeVolumeRequestSchema,
836
+ RawUsageSchema,
837
+ RawStreamChunkSchema,
838
+ RawChoiceSchema,
839
+ RawChatCompletionResponseSchema,
840
+ PluginsUpdateSchema,
841
+ MetricsQuerySchema,
842
+ LoginCommandsResponseSchema,
843
+ LatencyInfoSchema,
844
+ InsertMetricRequestSchema,
845
+ GLMModelSchema,
846
+ FilesPreviewRequestSchema,
847
+ FilesListRequestSchema,
848
+ FilesListOptionsSchema,
849
+ FilePreviewOptionsSchema,
850
+ ErrorTypeSchema,
851
+ EnvironmentMetadataSchema,
852
+ EnvironmentIdSchema,
853
+ EnvSchema,
854
+ DetachVolumeRequestSchema,
855
+ CreateVolumeRequestSchema,
856
+ CreateSSHKeyRequestSchema,
857
+ CreateEnvironmentRequestSchema,
858
+ CleanupActivitiesRequestSchema,
859
+ ChatMessageSchema,
860
+ ChatMessageRoleSchema,
861
+ ChatCompletionResponseSchema,
862
+ ChatCompletionOptionsSchema,
863
+ BaseAIRequestOptionsSchema,
864
+ AttachVolumeRequestSchema,
865
+ AddActivityRequestSchema,
866
+ ActivityUpdateSchema,
867
+ ActivitiesQueryParamsSchema,
868
+ ActivePortSchema,
869
+ APIErrorResponseSchema,
870
+ AITroubleshootSSHRequestSchema,
871
+ AISuggestServerTypeRequestSchema,
872
+ AISuggestNameRequestSchema,
873
+ AISuggestActionsRequestSchema,
874
+ AIStatusMessageRequestSchema,
875
+ AIResponseSchema,
876
+ AIRequestSchema,
877
+ AIGenerateRequestSchema,
878
+ AIEnvSchema,
879
+ AIChatResponseSchema,
880
+ AIChatRequestSchema,
881
+ AIChatModuleRequestSchema,
882
+ AIAnalyzeResourcesRequestSchema,
883
+ AIAnalyzeHistoricalRequestSchema
21
884
  };
22
- Object.defineProperty(exports, "__esModule", { value: true });
23
- __exportStar(require("./api.js"), exports);
24
- __exportStar(require("./ai.js"), exports);
25
- __exportStar(require("./database.js"), exports);
26
- __exportStar(require("./env.js"), exports);
27
- __exportStar(require("./glm.js"), exports);
28
- __exportStar(require("./ssh.js"), exports);