@ebowwa/codespaces-types 0.1.0 → 1.1.0

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.
Files changed (45) hide show
  1. package/README.md +34 -37
  2. package/dist/{index.d.ts → compile/index.d.ts} +1 -0
  3. package/dist/compile/index.d.ts.map +1 -0
  4. package/dist/{resources.d.ts → compile/resources.d.ts} +1 -0
  5. package/dist/compile/resources.d.ts.map +1 -0
  6. package/dist/{schemas → compile/schemas}/resources.d.ts +5 -4
  7. package/dist/compile/schemas/resources.d.ts.map +1 -0
  8. package/dist/{terminal-websocket.d.ts → compile/terminal-websocket.d.ts} +1 -0
  9. package/dist/compile/terminal-websocket.d.ts.map +1 -0
  10. package/dist/{time.d.ts → compile/time.d.ts} +1 -0
  11. package/dist/compile/time.d.ts.map +1 -0
  12. package/dist/{user → compile/user}/distributions.d.ts +1 -1
  13. package/dist/compile/user/distributions.d.ts.map +1 -0
  14. package/dist/{user → compile/user}/distributions.js +1 -1
  15. package/dist/{validation.d.ts → compile/validation.d.ts} +1 -0
  16. package/dist/compile/validation.d.ts.map +1 -0
  17. package/dist/runtime/ai.d.ts +1336 -0
  18. package/dist/runtime/ai.d.ts.map +1 -0
  19. package/dist/runtime/ai.js +416 -0
  20. package/dist/runtime/api.d.ts +1304 -0
  21. package/dist/runtime/api.d.ts.map +1 -0
  22. package/dist/runtime/api.js +673 -0
  23. package/dist/runtime/database.d.ts +376 -0
  24. package/dist/runtime/database.d.ts.map +1 -0
  25. package/dist/runtime/database.js +91 -0
  26. package/dist/runtime/env.d.ts +121 -0
  27. package/dist/runtime/env.d.ts.map +1 -0
  28. package/dist/runtime/env.js +54 -0
  29. package/dist/runtime/glm.d.ts +17 -0
  30. package/dist/runtime/glm.d.ts.map +1 -0
  31. package/dist/runtime/glm.js +25 -0
  32. package/dist/runtime/index.d.ts +13 -0
  33. package/dist/runtime/index.d.ts.map +1 -0
  34. package/dist/runtime/index.js +12 -0
  35. package/dist/runtime/ssh.d.ts +111 -0
  36. package/dist/runtime/ssh.d.ts.map +1 -0
  37. package/dist/runtime/ssh.js +44 -0
  38. package/package.json +48 -53
  39. package/LICENSE +0 -21
  40. /package/dist/{index.js → compile/index.js} +0 -0
  41. /package/dist/{resources.js → compile/resources.js} +0 -0
  42. /package/dist/{schemas → compile/schemas}/resources.js +0 -0
  43. /package/dist/{terminal-websocket.js → compile/terminal-websocket.js} +0 -0
  44. /package/dist/{time.js → compile/time.js} +0 -0
  45. /package/dist/{validation.js → compile/validation.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../runtime/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,673 @@
1
+ /**
2
+ * Zod schemas for API request/response validation
3
+ */
4
+ import { z } from "zod";
5
+ /**
6
+ * Environment ID validation
7
+ */
8
+ export const EnvironmentIdSchema = z
9
+ .string()
10
+ .transform((val) => parseInt(val, 10))
11
+ .pipe(z.number().int().positive("Environment ID must be a positive integer"));
12
+ /**
13
+ * Create Environment Request
14
+ */
15
+ export const CreateEnvironmentRequestSchema = z.object({
16
+ name: z
17
+ .string()
18
+ .min(1, "Name is required")
19
+ .max(64, "Name must be 64 characters or less")
20
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
21
+ serverType: z.string().min(1, "Server type is required"),
22
+ location: z.string().min(1, "Location is required"),
23
+ sshKeys: z.array(z.string()).optional(),
24
+ autoInstallSeed: z.boolean().default(false).optional(),
25
+ metadata: z
26
+ .object({
27
+ description: z.string().optional(),
28
+ project: z.string().optional(),
29
+ owner: z.string().optional(),
30
+ purpose: z.string().optional(),
31
+ environmentType: z
32
+ .enum(["development", "staging", "production", "testing"])
33
+ .optional(),
34
+ })
35
+ .optional(),
36
+ });
37
+ /**
38
+ * Update Metadata Request
39
+ */
40
+ export const UpdateMetadataRequestSchema = z.object({
41
+ description: z.string().optional(),
42
+ project: z.string().optional(),
43
+ owner: z.string().optional(),
44
+ purpose: z.string().optional(),
45
+ environmentType: z
46
+ .enum(["development", "staging", "production", "testing"])
47
+ .optional(),
48
+ });
49
+ /**
50
+ * Update Activity Request
51
+ */
52
+ export const UpdateActivityRequestSchema = z.object({
53
+ hoursActive: z.number().min(0).optional(),
54
+ lastActive: z.string().datetime().optional(),
55
+ activePorts: z
56
+ .array(z.object({
57
+ port: z.number().int().min(1).max(65535),
58
+ protocol: z.enum(["tcp", "udp"]),
59
+ service: z.string().optional(),
60
+ state: z.enum(["open", "closed", "filtered"]),
61
+ }))
62
+ .optional(),
63
+ });
64
+ /**
65
+ * Update Plugins Request
66
+ */
67
+ export const UpdatePluginsRequestSchema = z.object({
68
+ plugins: z
69
+ .record(z.string(), z.object({
70
+ enabled: z.boolean(),
71
+ config: z.record(z.string(), z.any()).optional(),
72
+ }))
73
+ .optional(),
74
+ });
75
+ /**
76
+ * SSH Connection Request
77
+ */
78
+ export const SSHConnectionRequestSchema = z.object({
79
+ host: z.string().min(1, "Host is required"),
80
+ user: z.string().default("root").optional(),
81
+ });
82
+ /**
83
+ * SSH Test Request
84
+ */
85
+ export const SSHTestRequestSchema = z.object({
86
+ host: z.string().min(1, "Host is required"),
87
+ user: z.string().default("root").optional(),
88
+ port: z.number().int().positive().max(65535).default(22).optional(),
89
+ });
90
+ /**
91
+ * SSH Fingerprint Request
92
+ */
93
+ export const SSHFingerprintRequestSchema = z.object({
94
+ host: z.string().min(1, "Host is required"),
95
+ user: z.string().default("root").optional(),
96
+ port: z.number().int().positive().max(65535).default(22).optional(),
97
+ });
98
+ /**
99
+ * Terminal Create Session Request
100
+ */
101
+ export const TerminalCreateSessionSchema = z.object({
102
+ host: z.string().min(1, "Host is required"),
103
+ user: z.string().default("root").optional(),
104
+ port: z.number().int().positive().max(65535).default(22).optional(),
105
+ rows: z.number().int().positive().max(200).default(24).optional(),
106
+ cols: z.number().int().positive().max(500).default(80).optional(),
107
+ });
108
+ /**
109
+ * Terminal Resize Request
110
+ */
111
+ export const TerminalResizeSchema = z.object({
112
+ sessionId: z.string().min(1, "Session ID is required"),
113
+ rows: z.number().int().positive().max(200),
114
+ cols: z.number().int().positive().max(500),
115
+ });
116
+ /**
117
+ * SCP Upload Request
118
+ */
119
+ export const SCPUploadRequestSchema = z.object({
120
+ host: z.string().min(1, "Host is required"),
121
+ user: z.string().default("root").optional(),
122
+ source: z.string().min(1, "Source path is required"),
123
+ destination: z.string().min(1, "Destination path is required"),
124
+ recursive: z.boolean().default(false).optional(),
125
+ preserve: z.boolean().default(false).optional(),
126
+ });
127
+ /**
128
+ * SCP Download Request
129
+ */
130
+ export const SCPDownloadRequestSchema = z.object({
131
+ host: z.string().min(1, "Host is required"),
132
+ user: z.string().default("root").optional(),
133
+ source: z.string().min(1, "Source path is required"),
134
+ destination: z.string().min(1, "Destination path is required"),
135
+ recursive: z.boolean().default(false).optional(),
136
+ preserve: z.boolean().default(false).optional(),
137
+ });
138
+ /**
139
+ * Files List Request
140
+ */
141
+ export const FilesListRequestSchema = z.object({
142
+ host: z.string().min(1, "Host is required"),
143
+ user: z.string().default("root").optional(),
144
+ path: z.string().default(".").optional(),
145
+ });
146
+ /**
147
+ * Files Preview Request
148
+ */
149
+ export const FilesPreviewRequestSchema = z.object({
150
+ host: z.string().min(1, "Host is required"),
151
+ user: z.string().default("root").optional(),
152
+ path: z.string().min(1, "Path is required"),
153
+ });
154
+ /**
155
+ * SSH Key ID validation
156
+ */
157
+ export const SSHKeyIdSchema = z
158
+ .string()
159
+ .transform((val) => parseInt(val, 10))
160
+ .pipe(z.number().int().positive("SSH Key ID must be a positive integer"));
161
+ /**
162
+ * Create SSH Key Request
163
+ */
164
+ export const CreateSSHKeyRequestSchema = z.object({
165
+ name: z
166
+ .string()
167
+ .min(1, "Name is required")
168
+ .max(64, "Name must be 64 characters or less")
169
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
170
+ public_key: z.string().min(1, "Public key is required"),
171
+ labels: z.record(z.string(), z.any()).optional(),
172
+ });
173
+ /**
174
+ * AI Generate Request
175
+ */
176
+ export const AIGenerateRequestSchema = z.object({
177
+ prompt: z.string().min(1, "Prompt is required"),
178
+ model: z.string().optional(), // Generic string for any AI provider
179
+ temperature: z.number().min(0).max(2).optional(),
180
+ maxTokens: z.number().int().positive().optional(),
181
+ });
182
+ /**
183
+ * AI Chat Request
184
+ */
185
+ export const AIChatRequestSchema = z.object({
186
+ messages: z.array(z.any()).min(1, "At least one message is required"),
187
+ model: z.string().optional(), // Generic string for any AI provider
188
+ temperature: z.number().min(0).max(2).optional(),
189
+ maxTokens: z.number().int().positive().optional(),
190
+ });
191
+ /**
192
+ * AI Suggest Name Request
193
+ */
194
+ export const AISuggestNameRequestSchema = z.object({
195
+ project: z.string().optional(),
196
+ description: z.string().optional(),
197
+ });
198
+ /**
199
+ * AI Suggest Server Type Request
200
+ */
201
+ export const AISuggestServerTypeRequestSchema = z.object({
202
+ workload: z.string().min(1, "Workload description is required"),
203
+ });
204
+ /**
205
+ * AI Analyze Resources Request
206
+ */
207
+ export const AIAnalyzeResourcesRequestSchema = z.object({
208
+ cpu: z.number().min(0).max(100),
209
+ memory: z.number().min(0).max(100),
210
+ disk: z.number().min(0).max(100),
211
+ });
212
+ /**
213
+ * AI Troubleshoot SSH Request
214
+ */
215
+ export const AITroubleshootSSHRequestSchema = z.object({
216
+ error: z.string().min(1, "Error message is required"),
217
+ });
218
+ /**
219
+ * AI Suggest Actions Request
220
+ */
221
+ export const AISuggestActionsRequestSchema = z.object({
222
+ status: z.string().min(1, "Status is required"),
223
+ age: z.string().optional(),
224
+ });
225
+ /**
226
+ * AI Status Message Request
227
+ */
228
+ export const AIStatusMessageRequestSchema = z.object({
229
+ status: z.string().min(1, "Status is required"),
230
+ name: z.string().min(1, "Name is required"),
231
+ });
232
+ /**
233
+ * Metrics Query Schema (for query parameters)
234
+ */
235
+ export const MetricsQuerySchema = z.object({
236
+ hours: z
237
+ .string()
238
+ .default("24")
239
+ .transform((val) => parseInt(val, 10))
240
+ .pipe(z.number().int().positive().max(8760)),
241
+ limit: z
242
+ .string()
243
+ .default("100")
244
+ .transform((val) => parseInt(val, 10))
245
+ .pipe(z.number().int().positive().max(1000)),
246
+ });
247
+ /**
248
+ * Insert Metric Request
249
+ */
250
+ export const InsertMetricRequestSchema = z.object({
251
+ environmentId: z.number().int().positive(),
252
+ cpuPercent: z.number().min(0).max(100),
253
+ memoryPercent: z.number().min(0).max(100),
254
+ memoryUsed: z.number().min(0),
255
+ memoryTotal: z.number().min(0),
256
+ diskPercent: z.number().min(0).max(100),
257
+ diskUsed: z.number().min(0),
258
+ diskTotal: z.number().min(0),
259
+ gpuPercent: z.number().min(0).max(100).optional(),
260
+ gpuMemoryUsed: z.number().min(0).optional(),
261
+ gpuMemoryTotal: z.number().min(0).optional(),
262
+ });
263
+ /**
264
+ * AI Analyze Historical Request
265
+ */
266
+ export const AIAnalyzeHistoricalRequestSchema = z.object({
267
+ environmentId: z.number().int().positive(),
268
+ hours: z.number().int().positive().max(8760).default(24),
269
+ });
270
+ /**
271
+ * Seed Install Request
272
+ */
273
+ export const SeedInstallRequestSchema = z.object({
274
+ environmentId: z.string().min(1, "Environment ID is required"),
275
+ autoConfirm: z.boolean().default(true).optional(),
276
+ });
277
+ /**
278
+ * Seed Install Response (partial - actual response includes more fields)
279
+ */
280
+ export const SeedInstallResponseSchema = z.object({
281
+ success: z.boolean(),
282
+ cloned: z.boolean(),
283
+ setupRun: z.boolean(),
284
+ seedPath: z.string(),
285
+ error: z.string().optional(),
286
+ output: z.array(z.string()),
287
+ });
288
+ /**
289
+ * Seed Status Response
290
+ */
291
+ export const SeedStatusResponseSchema = z.object({
292
+ installed: z.boolean(),
293
+ setupComplete: z.boolean(),
294
+ version: z.string().optional(),
295
+ branch: z.string().optional(),
296
+ });
297
+ /**
298
+ * Login Commands Response
299
+ */
300
+ export const LoginCommandsResponseSchema = z.object({
301
+ ssh: z.string(),
302
+ web: z.string(),
303
+ claude: z.string(),
304
+ quick: z.string(),
305
+ });
306
+ // ============================================
307
+ // Volume Schemas
308
+ // ============================================
309
+ /**
310
+ * Volume ID validation
311
+ */
312
+ export const VolumeIdSchema = z
313
+ .string()
314
+ .transform((val) => parseInt(val, 10))
315
+ .pipe(z.number().int().positive("Volume ID must be a positive integer"));
316
+ /**
317
+ * Create Volume Request
318
+ */
319
+ export const CreateVolumeRequestSchema = z.object({
320
+ name: z
321
+ .string()
322
+ .min(1, "Name is required")
323
+ .max(64, "Name must be 64 characters or less")
324
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9-]*$/, "Name must start with letter/number and contain only letters, numbers, and hyphens"),
325
+ size: z
326
+ .number()
327
+ .int()
328
+ .positive("Size must be a positive integer")
329
+ .min(10, "Minimum volume size is 10 GB")
330
+ .max(10240, "Maximum volume size is 10 TB"),
331
+ server: z.string().optional(), // Server ID to attach to
332
+ location: z.string().optional(), // Location if not attaching to server
333
+ automount: z.boolean().default(true).optional(),
334
+ format: z.enum(["ext4", "xfs"]).optional(),
335
+ labels: z.record(z.string(), z.any()).optional(),
336
+ });
337
+ /**
338
+ * Update Volume Request
339
+ */
340
+ export const UpdateVolumeRequestSchema = z.object({
341
+ name: z.string().min(1).max(64).optional(),
342
+ labels: z.record(z.string(), z.any()).optional(),
343
+ });
344
+ /**
345
+ * Attach Volume Request
346
+ */
347
+ export const AttachVolumeRequestSchema = z.object({
348
+ volumeId: z.number().int().positive("Volume ID is required"),
349
+ serverId: z.number().int().positive("Server ID is required"),
350
+ automount: z.boolean().default(true).optional(),
351
+ });
352
+ /**
353
+ * Detach Volume Request
354
+ */
355
+ export const DetachVolumeRequestSchema = z.object({
356
+ volumeId: z.number().int().positive("Volume ID is required"),
357
+ });
358
+ /**
359
+ * Resize Volume Request
360
+ */
361
+ export const ResizeVolumeRequestSchema = z.object({
362
+ volumeId: z.number().int().positive("Volume ID is required"),
363
+ size: z
364
+ .number()
365
+ .int()
366
+ .positive("Size must be a positive integer")
367
+ .min(10, "Minimum volume size is 10 GB")
368
+ .max(10240, "Maximum volume size is 10 TB"),
369
+ });
370
+ /**
371
+ * Volume Protection Request
372
+ */
373
+ export const VolumeProtectionRequestSchema = z.object({
374
+ delete: z.boolean(),
375
+ });
376
+ /**
377
+ * Volume Price Query
378
+ */
379
+ export const VolumePriceQuerySchema = z.object({
380
+ size: z
381
+ .number()
382
+ .int()
383
+ .positive("Size must be a positive integer")
384
+ .min(10, "Minimum volume size is 10 GB")
385
+ .max(10240, "Maximum volume size is 10 TB"),
386
+ });
387
+ // ============================================
388
+ // Tmux Session Management Schemas
389
+ // ============================================
390
+ /**
391
+ * Tmux Send Command Request
392
+ */
393
+ export const TmuxSendCommandSchema = z.object({
394
+ sessionId: z.string().min(1, "Session ID is required"),
395
+ command: z.string().min(1, "Command is required"),
396
+ paneIndex: z.string().default("0").optional(),
397
+ });
398
+ /**
399
+ * Tmux Split Pane Request
400
+ */
401
+ export const TmuxSplitPaneSchema = z.object({
402
+ sessionId: z.string().min(1, "Session ID is required"),
403
+ direction: z.enum(["h", "v"]).default("v"),
404
+ command: z.string().optional(),
405
+ });
406
+ /**
407
+ * Tmux List Windows Request
408
+ */
409
+ export const TmuxListWindowsSchema = z.object({
410
+ sessionId: z.string().min(1, "Session ID is required"),
411
+ });
412
+ /**
413
+ * Tmux List Panes Request
414
+ */
415
+ export const TmuxListPanesSchema = z.object({
416
+ sessionId: z.string().min(1, "Session ID is required"),
417
+ windowIndex: z.string().default("0").optional(),
418
+ });
419
+ /**
420
+ * Tmux Capture Pane Request
421
+ */
422
+ export const TmuxCapturePaneSchema = z.object({
423
+ sessionId: z.string().min(1, "Session ID is required"),
424
+ paneIndex: z.string().default("0").optional(),
425
+ });
426
+ /**
427
+ * Tmux Get History Request
428
+ */
429
+ export const TmuxGetHistorySchema = z.object({
430
+ sessionId: z.string().min(1, "Session ID is required"),
431
+ paneIndex: z.string().default("0").optional(),
432
+ lines: z.number().int().default(-1).optional(),
433
+ });
434
+ /**
435
+ * Tmux Switch Window Request
436
+ */
437
+ export const TmuxSwitchWindowSchema = z.object({
438
+ sessionId: z.string().min(1, "Session ID is required"),
439
+ windowIndex: z.string().min(1, "Window index is required"),
440
+ });
441
+ /**
442
+ * Tmux Switch Pane Request
443
+ */
444
+ export const TmuxSwitchPaneSchema = z.object({
445
+ sessionId: z.string().min(1, "Session ID is required"),
446
+ paneIndex: z.string().min(1, "Pane index is required"),
447
+ });
448
+ /**
449
+ * Tmux Rename Window Request
450
+ */
451
+ export const TmuxRenameWindowSchema = z.object({
452
+ sessionId: z.string().min(1, "Session ID is required"),
453
+ windowIndex: z.string().min(1, "Window index is required"),
454
+ newName: z.string().min(1, "New name is required").max(64),
455
+ });
456
+ /**
457
+ * Tmux Kill Pane Request
458
+ */
459
+ export const TmuxKillPaneSchema = z.object({
460
+ sessionId: z.string().min(1, "Session ID is required"),
461
+ paneIndex: z.string().min(1, "Pane index is required"),
462
+ });
463
+ /**
464
+ * Tmux Detailed Info Request
465
+ */
466
+ export const TmuxDetailedInfoSchema = z.object({
467
+ sessionId: z.string().min(1, "Session ID is required"),
468
+ });
469
+ // ============================================
470
+ // Multi-Node Tmux Manager Schemas
471
+ // ============================================
472
+ /**
473
+ * Tmux Manager Add Node Request
474
+ */
475
+ export const TmuxManagerAddNodeSchema = z.object({
476
+ id: z.string().min(1, "Node ID is required"),
477
+ name: z.string().min(1, "Node name is required"),
478
+ ip: z.string().min(1, "IP address is required"),
479
+ ipv6: z.string().nullable().optional(),
480
+ user: z.string().default("root"),
481
+ port: z.number().int().positive().max(65535).default(22),
482
+ keyPath: z.string().optional(),
483
+ status: z.enum(["running", "stopped", "unreachable"]).default("running"),
484
+ tags: z.array(z.string()).optional(),
485
+ location: z.string().optional(),
486
+ });
487
+ /**
488
+ * Tmux Manager Create Session Request
489
+ */
490
+ export const TmuxManagerCreateSessionSchema = z.object({
491
+ nodeId: z.string().min(1, "Node ID is required"),
492
+ sessionName: z.string().optional(),
493
+ cwd: z.string().optional(),
494
+ initialCommand: z.string().optional(),
495
+ layout: z.enum(["even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled"]).optional(),
496
+ });
497
+ /**
498
+ * Tmux Manager Attach Session Request
499
+ */
500
+ export const TmuxManagerAttachSessionSchema = z.object({
501
+ nodeId: z.string().min(1, "Node ID is required"),
502
+ sessionName: z.string().optional(),
503
+ });
504
+ /**
505
+ * Tmux Manager Kill Session Request
506
+ */
507
+ export const TmuxManagerKillSessionSchema = z.object({
508
+ nodeId: z.string().min(1, "Node ID is required"),
509
+ sessionName: z.string().min(1, "Session name is required"),
510
+ });
511
+ /**
512
+ * Tmux Manager Send Command Request
513
+ */
514
+ export const TmuxManagerSendCommandSchema = z.object({
515
+ nodeId: z.string().min(1, "Node ID is required"),
516
+ sessionName: z.string().min(1, "Session name is required"),
517
+ command: z.string().min(1, "Command is required"),
518
+ paneIndex: z.string().default("0"),
519
+ });
520
+ /**
521
+ * Tmux Manager Batch Send Command Request
522
+ */
523
+ export const TmuxManagerBatchSendCommandSchema = z.object({
524
+ nodeIds: z.array(z.string().min(1)).min(1, "At least one node ID is required"),
525
+ sessionName: z.string().min(1, "Session name is required"),
526
+ command: z.string().min(1, "Command is required"),
527
+ paneIndex: z.string().default("0"),
528
+ parallel: z.boolean().default(true),
529
+ continueOnError: z.boolean().default(true),
530
+ timeout: z.number().int().positive().default(30),
531
+ });
532
+ /**
533
+ * Tmux Manager Split Pane Request
534
+ */
535
+ export const TmuxManagerSplitPaneSchema = z.object({
536
+ nodeId: z.string().min(1, "Node ID is required"),
537
+ sessionName: z.string().min(1, "Session name is required"),
538
+ direction: z.enum(["h", "v"]).default("v"),
539
+ command: z.string().nullable().optional(),
540
+ windowIndex: z.string().default("0"),
541
+ });
542
+ /**
543
+ * Tmux Manager Capture Pane Request
544
+ */
545
+ export const TmuxManagerCapturePaneSchema = z.object({
546
+ nodeId: z.string().min(1, "Node ID is required"),
547
+ sessionName: z.string().min(1, "Session name is required"),
548
+ paneIndex: z.string().default("0"),
549
+ });
550
+ /**
551
+ * Tmux Manager Get History Request
552
+ */
553
+ export const TmuxManagerGetHistorySchema = z.object({
554
+ nodeId: z.string().min(1, "Node ID is required"),
555
+ sessionName: z.string().min(1, "Session name is required"),
556
+ paneIndex: z.string().default("0"),
557
+ lines: z.number().int().default(-1),
558
+ });
559
+ /**
560
+ * Tmux Manager List Windows Request
561
+ */
562
+ export const TmuxManagerListWindowsSchema = z.object({
563
+ nodeId: z.string().min(1, "Node ID is required"),
564
+ sessionName: z.string().min(1, "Session name is required"),
565
+ });
566
+ /**
567
+ * Tmux Manager List Panes Request
568
+ */
569
+ export const TmuxManagerListPanesSchema = z.object({
570
+ nodeId: z.string().min(1, "Node ID is required"),
571
+ sessionName: z.string().min(1, "Session name is required"),
572
+ windowIndex: z.string().default("0"),
573
+ });
574
+ /**
575
+ * Tmux Manager Switch Window Request
576
+ */
577
+ export const TmuxManagerSwitchWindowSchema = z.object({
578
+ nodeId: z.string().min(1, "Node ID is required"),
579
+ sessionName: z.string().min(1, "Session name is required"),
580
+ windowIndex: z.string().min(1, "Window index is required"),
581
+ });
582
+ /**
583
+ * Tmux Manager Switch Pane Request
584
+ */
585
+ export const TmuxManagerSwitchPaneSchema = z.object({
586
+ nodeId: z.string().min(1, "Node ID is required"),
587
+ sessionName: z.string().min(1, "Session name is required"),
588
+ paneIndex: z.string().min(1, "Pane index is required"),
589
+ });
590
+ /**
591
+ * Tmux Manager Rename Window Request
592
+ */
593
+ export const TmuxManagerRenameWindowSchema = z.object({
594
+ nodeId: z.string().min(1, "Node ID is required"),
595
+ sessionName: z.string().min(1, "Session name is required"),
596
+ windowIndex: z.string().min(1, "Window index is required"),
597
+ newName: z.string().min(1, "New name is required").max(64),
598
+ });
599
+ /**
600
+ * Tmux Manager Kill Pane Request
601
+ */
602
+ export const TmuxManagerKillPaneSchema = z.object({
603
+ nodeId: z.string().min(1, "Node ID is required"),
604
+ sessionName: z.string().min(1, "Session name is required"),
605
+ paneIndex: z.string().min(1, "Pane index is required"),
606
+ });
607
+ /**
608
+ * Tmux Manager Cleanup Old Sessions Request
609
+ */
610
+ export const TmuxManagerCleanupOldSessionsSchema = z.object({
611
+ nodeId: z.string().min(1, "Node ID is required"),
612
+ ageLimitMs: z.number().int().positive().default(30 * 24 * 60 * 60 * 1000), // 30 days
613
+ });
614
+ /**
615
+ * Tmux Manager Detailed Session Request
616
+ */
617
+ export const TmuxManagerDetailedSessionSchema = z.object({
618
+ nodeId: z.string().min(1, "Node ID is required"),
619
+ sessionName: z.string().min(1, "Session name is required"),
620
+ });
621
+ /**
622
+ * Tmux Manager List Sessions Query
623
+ */
624
+ export const TmuxManagerListSessionsQuerySchema = z.object({
625
+ nodeIds: z.array(z.string()).optional(),
626
+ tags: z.array(z.string()).optional(),
627
+ detailed: z.boolean().default(false).optional(),
628
+ includeInactive: z.boolean().default(false).optional(),
629
+ });
630
+ // ============================================
631
+ // Activities Schemas
632
+ // ============================================
633
+ /**
634
+ * Add Activity Request
635
+ */
636
+ export const AddActivityRequestSchema = z.object({
637
+ environmentId: z.string().min(1, "Environment ID is required"),
638
+ action: z.string().min(1, "Action is required").max(100),
639
+ environmentName: z.string().min(1, "Environment name is required").max(64),
640
+ details: z.string().max(1000).optional(),
641
+ });
642
+ /**
643
+ * Activities Query Schema (for query parameters)
644
+ */
645
+ export const ActivitiesQueryParamsSchema = z.object({
646
+ environmentId: z.string().optional(),
647
+ limit: z
648
+ .string()
649
+ .default("100")
650
+ .transform((val) => parseInt(val, 10))
651
+ .pipe(z.number().int().positive().max(1000))
652
+ .optional(),
653
+ hours: z
654
+ .string()
655
+ .transform((val) => parseInt(val, 10))
656
+ .pipe(z.number().int().positive())
657
+ .optional(),
658
+ since: z.string().datetime().optional(),
659
+ until: z.string().datetime().optional(),
660
+ action: z.string().optional(),
661
+ });
662
+ /**
663
+ * Cleanup Activities Request
664
+ */
665
+ export const CleanupActivitiesRequestSchema = z.object({
666
+ environmentId: z.string().optional(),
667
+ keepHours: z
668
+ .number()
669
+ .int()
670
+ .positive()
671
+ .default(720) // 30 days
672
+ .optional(),
673
+ });