mcp-server-kubernetes 0.1.5 → 0.2.3

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 (49) hide show
  1. package/README.md +29 -9
  2. package/dist/config/cleanup-config.d.ts +8 -0
  3. package/dist/config/cleanup-config.js +8 -0
  4. package/dist/config/container-templates.d.ts +5 -0
  5. package/dist/config/container-templates.js +109 -0
  6. package/dist/config/deployment-config.d.ts +31 -0
  7. package/dist/config/deployment-config.js +23 -0
  8. package/dist/config/namespace-config.d.ts +8 -0
  9. package/dist/config/namespace-config.js +8 -0
  10. package/dist/config/server-config.d.ts +8 -0
  11. package/dist/config/server-config.js +8 -0
  12. package/dist/index.js +49 -928
  13. package/dist/models/helm-models.d.ts +39 -0
  14. package/dist/models/helm-models.js +8 -0
  15. package/dist/models/resource-models.d.ts +94 -0
  16. package/dist/models/resource-models.js +17 -0
  17. package/dist/models/response-schemas.d.ts +221 -0
  18. package/dist/models/response-schemas.js +36 -0
  19. package/dist/models/tool-models.d.ts +42 -0
  20. package/dist/models/tool-models.js +10 -0
  21. package/dist/resources/handlers.d.ts +22 -0
  22. package/dist/resources/handlers.js +112 -0
  23. package/dist/tools/create_pod.d.ts +39 -0
  24. package/dist/tools/create_pod.js +71 -0
  25. package/dist/tools/delete_pod.d.ts +31 -0
  26. package/dist/tools/delete_pod.js +45 -0
  27. package/dist/tools/describe_pod.d.ts +33 -0
  28. package/dist/tools/describe_pod.js +81 -0
  29. package/dist/tools/get_logs.d.ts +67 -0
  30. package/dist/tools/get_logs.js +150 -0
  31. package/dist/tools/helm-operations.d.ts +99 -0
  32. package/dist/tools/helm-operations.js +198 -0
  33. package/dist/tools/list_deployments.d.ts +23 -0
  34. package/dist/tools/list_deployments.js +30 -0
  35. package/dist/tools/list_nodes.d.ts +15 -0
  36. package/dist/tools/list_nodes.js +21 -0
  37. package/dist/tools/list_pods.d.ts +23 -0
  38. package/dist/tools/list_pods.js +29 -0
  39. package/dist/tools/list_services.d.ts +23 -0
  40. package/dist/tools/list_services.js +31 -0
  41. package/dist/types.d.ts +4 -433
  42. package/dist/types.js +6 -120
  43. package/dist/utils/kubernetes-manager.d.ts +21 -0
  44. package/dist/utils/kubernetes-manager.js +68 -0
  45. package/package.json +3 -2
  46. package/dist/helm.test.d.ts +0 -1
  47. package/dist/helm.test.js +0 -208
  48. package/dist/unit.test.d.ts +0 -1
  49. package/dist/unit.test.js +0 -293
package/dist/types.d.ts CHANGED
@@ -1,433 +1,4 @@
1
- import { z } from "zod";
2
- export declare const ContainerTemplate: z.ZodEnum<["ubuntu", "nginx", "busybox", "alpine"]>;
3
- export declare const ResourceSchema: z.ZodObject<{
4
- uri: z.ZodString;
5
- name: z.ZodString;
6
- description: z.ZodString;
7
- }, "strip", z.ZodTypeAny, {
8
- uri: string;
9
- name: string;
10
- description: string;
11
- }, {
12
- uri: string;
13
- name: string;
14
- description: string;
15
- }>;
16
- export declare const ToolSchema: z.ZodObject<{
17
- name: z.ZodString;
18
- description: z.ZodString;
19
- inputSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
20
- }, "strip", z.ZodTypeAny, {
21
- name: string;
22
- description: string;
23
- inputSchema: Record<string, any>;
24
- }, {
25
- name: string;
26
- description: string;
27
- inputSchema: Record<string, any>;
28
- }>;
29
- export declare const ListToolsResponseSchema: z.ZodObject<{
30
- tools: z.ZodArray<z.ZodObject<{
31
- name: z.ZodString;
32
- description: z.ZodString;
33
- inputSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
34
- }, "strip", z.ZodTypeAny, {
35
- name: string;
36
- description: string;
37
- inputSchema: Record<string, any>;
38
- }, {
39
- name: string;
40
- description: string;
41
- inputSchema: Record<string, any>;
42
- }>, "many">;
43
- }, "strip", z.ZodTypeAny, {
44
- tools: {
45
- name: string;
46
- description: string;
47
- inputSchema: Record<string, any>;
48
- }[];
49
- }, {
50
- tools: {
51
- name: string;
52
- description: string;
53
- inputSchema: Record<string, any>;
54
- }[];
55
- }>;
56
- export declare const CreatePodResponseSchema: z.ZodObject<{
57
- content: z.ZodArray<z.ZodObject<{
58
- type: z.ZodLiteral<"text">;
59
- text: z.ZodString;
60
- }, "strip", z.ZodTypeAny, {
61
- type: "text";
62
- text: string;
63
- }, {
64
- type: "text";
65
- text: string;
66
- }>, "many">;
67
- }, "strip", z.ZodTypeAny, {
68
- content: {
69
- type: "text";
70
- text: string;
71
- }[];
72
- }, {
73
- content: {
74
- type: "text";
75
- text: string;
76
- }[];
77
- }>;
78
- export declare const CreateDeploymentResponseSchema: z.ZodObject<{
79
- content: z.ZodArray<z.ZodObject<{
80
- type: z.ZodLiteral<"text">;
81
- text: z.ZodString;
82
- }, "strip", z.ZodTypeAny, {
83
- type: "text";
84
- text: string;
85
- }, {
86
- type: "text";
87
- text: string;
88
- }>, "many">;
89
- }, "strip", z.ZodTypeAny, {
90
- content: {
91
- type: "text";
92
- text: string;
93
- }[];
94
- }, {
95
- content: {
96
- type: "text";
97
- text: string;
98
- }[];
99
- }>;
100
- export declare const DeletePodResponseSchema: z.ZodObject<{
101
- content: z.ZodArray<z.ZodObject<{
102
- type: z.ZodLiteral<"text">;
103
- text: z.ZodString;
104
- }, "strip", z.ZodTypeAny, {
105
- type: "text";
106
- text: string;
107
- }, {
108
- type: "text";
109
- text: string;
110
- }>, "many">;
111
- }, "strip", z.ZodTypeAny, {
112
- content: {
113
- type: "text";
114
- text: string;
115
- }[];
116
- }, {
117
- content: {
118
- type: "text";
119
- text: string;
120
- }[];
121
- }>;
122
- export declare const CleanupResponseSchema: z.ZodObject<{
123
- content: z.ZodArray<z.ZodObject<{
124
- type: z.ZodLiteral<"text">;
125
- text: z.ZodString;
126
- }, "strip", z.ZodTypeAny, {
127
- type: "text";
128
- text: string;
129
- }, {
130
- type: "text";
131
- text: string;
132
- }>, "many">;
133
- }, "strip", z.ZodTypeAny, {
134
- content: {
135
- type: "text";
136
- text: string;
137
- }[];
138
- }, {
139
- content: {
140
- type: "text";
141
- text: string;
142
- }[];
143
- }>;
144
- export declare const ListPodsResponseSchema: z.ZodObject<{
145
- content: z.ZodArray<z.ZodObject<{
146
- type: z.ZodLiteral<"text">;
147
- text: z.ZodString;
148
- }, "strip", z.ZodTypeAny, {
149
- type: "text";
150
- text: string;
151
- }, {
152
- type: "text";
153
- text: string;
154
- }>, "many">;
155
- }, "strip", z.ZodTypeAny, {
156
- content: {
157
- type: "text";
158
- text: string;
159
- }[];
160
- }, {
161
- content: {
162
- type: "text";
163
- text: string;
164
- }[];
165
- }>;
166
- export declare const ListDeploymentsResponseSchema: z.ZodObject<{
167
- content: z.ZodArray<z.ZodObject<{
168
- type: z.ZodLiteral<"text">;
169
- text: z.ZodString;
170
- }, "strip", z.ZodTypeAny, {
171
- type: "text";
172
- text: string;
173
- }, {
174
- type: "text";
175
- text: string;
176
- }>, "many">;
177
- }, "strip", z.ZodTypeAny, {
178
- content: {
179
- type: "text";
180
- text: string;
181
- }[];
182
- }, {
183
- content: {
184
- type: "text";
185
- text: string;
186
- }[];
187
- }>;
188
- export declare const ListServicesResponseSchema: z.ZodObject<{
189
- content: z.ZodArray<z.ZodObject<{
190
- type: z.ZodLiteral<"text">;
191
- text: z.ZodString;
192
- }, "strip", z.ZodTypeAny, {
193
- type: "text";
194
- text: string;
195
- }, {
196
- type: "text";
197
- text: string;
198
- }>, "many">;
199
- }, "strip", z.ZodTypeAny, {
200
- content: {
201
- type: "text";
202
- text: string;
203
- }[];
204
- }, {
205
- content: {
206
- type: "text";
207
- text: string;
208
- }[];
209
- }>;
210
- export declare const ListNamespacesResponseSchema: z.ZodObject<{
211
- content: z.ZodArray<z.ZodObject<{
212
- type: z.ZodLiteral<"text">;
213
- text: z.ZodString;
214
- }, "strip", z.ZodTypeAny, {
215
- type: "text";
216
- text: string;
217
- }, {
218
- type: "text";
219
- text: string;
220
- }>, "many">;
221
- }, "strip", z.ZodTypeAny, {
222
- content: {
223
- type: "text";
224
- text: string;
225
- }[];
226
- }, {
227
- content: {
228
- type: "text";
229
- text: string;
230
- }[];
231
- }>;
232
- export declare const ListNodesResponseSchema: z.ZodObject<{
233
- content: z.ZodArray<z.ZodObject<{
234
- type: z.ZodLiteral<"text">;
235
- text: z.ZodString;
236
- }, "strip", z.ZodTypeAny, {
237
- type: "text";
238
- text: string;
239
- }, {
240
- type: "text";
241
- text: string;
242
- }>, "many">;
243
- }, "strip", z.ZodTypeAny, {
244
- content: {
245
- type: "text";
246
- text: string;
247
- }[];
248
- }, {
249
- content: {
250
- type: "text";
251
- text: string;
252
- }[];
253
- }>;
254
- export declare const GetLogsResponseSchema: z.ZodObject<{
255
- content: z.ZodArray<z.ZodObject<{
256
- type: z.ZodLiteral<"text">;
257
- text: z.ZodString;
258
- }, "strip", z.ZodTypeAny, {
259
- type: "text";
260
- text: string;
261
- }, {
262
- type: "text";
263
- text: string;
264
- }>, "many">;
265
- }, "strip", z.ZodTypeAny, {
266
- content: {
267
- type: "text";
268
- text: string;
269
- }[];
270
- }, {
271
- content: {
272
- type: "text";
273
- text: string;
274
- }[];
275
- }>;
276
- export declare const ListResourcesResponseSchema: z.ZodObject<{
277
- resources: z.ZodArray<z.ZodObject<{
278
- uri: z.ZodString;
279
- name: z.ZodString;
280
- description: z.ZodString;
281
- }, "strip", z.ZodTypeAny, {
282
- uri: string;
283
- name: string;
284
- description: string;
285
- }, {
286
- uri: string;
287
- name: string;
288
- description: string;
289
- }>, "many">;
290
- }, "strip", z.ZodTypeAny, {
291
- resources: {
292
- uri: string;
293
- name: string;
294
- description: string;
295
- }[];
296
- }, {
297
- resources: {
298
- uri: string;
299
- name: string;
300
- description: string;
301
- }[];
302
- }>;
303
- export declare const ReadResourceResponseSchema: z.ZodObject<{
304
- contents: z.ZodArray<z.ZodObject<{
305
- uri: z.ZodString;
306
- mimeType: z.ZodString;
307
- text: z.ZodString;
308
- }, "strip", z.ZodTypeAny, {
309
- uri: string;
310
- text: string;
311
- mimeType: string;
312
- }, {
313
- uri: string;
314
- text: string;
315
- mimeType: string;
316
- }>, "many">;
317
- }, "strip", z.ZodTypeAny, {
318
- contents: {
319
- uri: string;
320
- text: string;
321
- mimeType: string;
322
- }[];
323
- }, {
324
- contents: {
325
- uri: string;
326
- text: string;
327
- mimeType: string;
328
- }[];
329
- }>;
330
- export type K8sResource = z.infer<typeof ResourceSchema>;
331
- export type K8sTool = z.infer<typeof ToolSchema>;
332
- export interface ResourceTracker {
333
- kind: string;
334
- name: string;
335
- namespace: string;
336
- createdAt: Date;
337
- }
338
- export interface PortForwardTracker {
339
- id: string;
340
- server: {
341
- stop: () => Promise<void>;
342
- };
343
- resourceType: string;
344
- name: string;
345
- namespace: string;
346
- ports: {
347
- local: number;
348
- remote: number;
349
- }[];
350
- }
351
- export interface WatchTracker {
352
- id: string;
353
- abort: AbortController;
354
- resourceType: string;
355
- namespace: string;
356
- }
357
- export declare const HelmInstallRequestSchema: z.ZodObject<{
358
- name: z.ZodString;
359
- chart: z.ZodString;
360
- namespace: z.ZodOptional<z.ZodString>;
361
- values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
362
- version: z.ZodOptional<z.ZodString>;
363
- repo: z.ZodOptional<z.ZodString>;
364
- }, "strip", z.ZodTypeAny, {
365
- name: string;
366
- chart: string;
367
- values?: Record<string, any> | undefined;
368
- namespace?: string | undefined;
369
- version?: string | undefined;
370
- repo?: string | undefined;
371
- }, {
372
- name: string;
373
- chart: string;
374
- values?: Record<string, any> | undefined;
375
- namespace?: string | undefined;
376
- version?: string | undefined;
377
- repo?: string | undefined;
378
- }>;
379
- export declare const HelmUninstallRequestSchema: z.ZodObject<{
380
- name: z.ZodString;
381
- namespace: z.ZodOptional<z.ZodString>;
382
- }, "strip", z.ZodTypeAny, {
383
- name: string;
384
- namespace?: string | undefined;
385
- }, {
386
- name: string;
387
- namespace?: string | undefined;
388
- }>;
389
- export declare const HelmUpgradeRequestSchema: z.ZodObject<{
390
- name: z.ZodString;
391
- chart: z.ZodString;
392
- repo: z.ZodOptional<z.ZodString>;
393
- values: z.ZodRecord<z.ZodString, z.ZodAny>;
394
- namespace: z.ZodOptional<z.ZodString>;
395
- }, "strip", z.ZodTypeAny, {
396
- name: string;
397
- values: Record<string, any>;
398
- chart: string;
399
- namespace?: string | undefined;
400
- repo?: string | undefined;
401
- }, {
402
- name: string;
403
- values: Record<string, any>;
404
- chart: string;
405
- namespace?: string | undefined;
406
- repo?: string | undefined;
407
- }>;
408
- export declare const HelmResponseSchema: z.ZodObject<{
409
- content: z.ZodArray<z.ZodObject<{
410
- type: z.ZodLiteral<"text">;
411
- text: z.ZodString;
412
- }, "strip", z.ZodTypeAny, {
413
- type: "text";
414
- text: string;
415
- }, {
416
- type: "text";
417
- text: string;
418
- }>, "many">;
419
- }, "strip", z.ZodTypeAny, {
420
- content: {
421
- type: "text";
422
- text: string;
423
- }[];
424
- }, {
425
- content: {
426
- type: "text";
427
- text: string;
428
- }[];
429
- }>;
430
- export type HelmInstallRequest = z.infer<typeof HelmInstallRequestSchema>;
431
- export type HelmUninstallRequest = z.infer<typeof HelmUninstallRequestSchema>;
432
- export type HelmUpgradeRequest = z.infer<typeof HelmUpgradeRequestSchema>;
433
- export type HelmResponse = z.infer<typeof HelmResponseSchema>;
1
+ export * from "./models/response-schemas.js";
2
+ export * from "./models/resource-models.js";
3
+ export * from "./models/tool-models.js";
4
+ export { KubernetesManager } from "./utils/kubernetes-manager.js";
package/dist/types.js CHANGED
@@ -1,120 +1,6 @@
1
- import { z } from "zod";
2
- // Kubernetes-specific types
3
- export const ContainerTemplate = z.enum([
4
- "ubuntu",
5
- "nginx",
6
- "busybox",
7
- "alpine",
8
- ]);
9
- // Resource response schemas
10
- export const ResourceSchema = z.object({
11
- uri: z.string(),
12
- name: z.string(),
13
- description: z.string(),
14
- });
15
- // Tool response schemas
16
- export const ToolSchema = z.object({
17
- name: z.string(),
18
- description: z.string(),
19
- inputSchema: z.record(z.any()),
20
- });
21
- export const ListToolsResponseSchema = z.object({
22
- tools: z.array(ToolSchema),
23
- });
24
- // Tool-specific response schemas
25
- export const CreatePodResponseSchema = z.object({
26
- content: z.array(z.object({
27
- type: z.literal("text"),
28
- text: z.string(),
29
- })),
30
- });
31
- export const CreateDeploymentResponseSchema = z.object({
32
- content: z.array(z.object({
33
- type: z.literal("text"),
34
- text: z.string(),
35
- })),
36
- });
37
- export const DeletePodResponseSchema = z.object({
38
- content: z.array(z.object({
39
- type: z.literal("text"),
40
- text: z.string(),
41
- })),
42
- });
43
- export const CleanupResponseSchema = z.object({
44
- content: z.array(z.object({
45
- type: z.literal("text"),
46
- text: z.string(),
47
- })),
48
- });
49
- export const ListPodsResponseSchema = z.object({
50
- content: z.array(z.object({
51
- type: z.literal("text"),
52
- text: z.string(),
53
- })),
54
- });
55
- export const ListDeploymentsResponseSchema = z.object({
56
- content: z.array(z.object({
57
- type: z.literal("text"),
58
- text: z.string(),
59
- })),
60
- });
61
- export const ListServicesResponseSchema = z.object({
62
- content: z.array(z.object({
63
- type: z.literal("text"),
64
- text: z.string(),
65
- })),
66
- });
67
- export const ListNamespacesResponseSchema = z.object({
68
- content: z.array(z.object({
69
- type: z.literal("text"),
70
- text: z.string(),
71
- })),
72
- });
73
- export const ListNodesResponseSchema = z.object({
74
- content: z.array(z.object({
75
- type: z.literal("text"),
76
- text: z.string(),
77
- })),
78
- });
79
- export const GetLogsResponseSchema = z.object({
80
- content: z.array(z.object({
81
- type: z.literal("text"),
82
- text: z.string(),
83
- })),
84
- });
85
- export const ListResourcesResponseSchema = z.object({
86
- resources: z.array(ResourceSchema),
87
- });
88
- export const ReadResourceResponseSchema = z.object({
89
- contents: z.array(z.object({
90
- uri: z.string(),
91
- mimeType: z.string(),
92
- text: z.string(),
93
- })),
94
- });
95
- // Helm-related types
96
- export const HelmInstallRequestSchema = z.object({
97
- name: z.string(),
98
- chart: z.string(),
99
- namespace: z.string().optional(),
100
- values: z.record(z.any()).optional(),
101
- version: z.string().optional(),
102
- repo: z.string().optional(),
103
- });
104
- export const HelmUninstallRequestSchema = z.object({
105
- name: z.string(),
106
- namespace: z.string().optional(),
107
- });
108
- export const HelmUpgradeRequestSchema = z.object({
109
- name: z.string(),
110
- chart: z.string(),
111
- repo: z.string().optional(),
112
- values: z.record(z.any()),
113
- namespace: z.string().optional(),
114
- });
115
- export const HelmResponseSchema = z.object({
116
- content: z.array(z.object({
117
- type: z.literal("text"),
118
- text: z.string(),
119
- })),
120
- });
1
+ // Re-export models for backward compatibility
2
+ export * from "./models/response-schemas.js";
3
+ export * from "./models/resource-models.js";
4
+ export * from "./models/tool-models.js";
5
+ // Re-export KubernetesManager for backward compatibility
6
+ export { KubernetesManager } from "./utils/kubernetes-manager.js";
@@ -0,0 +1,21 @@
1
+ import * as k8s from "@kubernetes/client-node";
2
+ import { PortForwardTracker, WatchTracker } from "../types.js";
3
+ export declare class KubernetesManager {
4
+ private resources;
5
+ private portForwards;
6
+ private watches;
7
+ private kc;
8
+ private k8sApi;
9
+ private k8sAppsApi;
10
+ constructor();
11
+ cleanup(): Promise<void>;
12
+ trackResource(kind: string, name: string, namespace: string): void;
13
+ deleteResource(kind: string, name: string, namespace: string): Promise<void>;
14
+ trackPortForward(pf: PortForwardTracker): void;
15
+ getPortForward(id: string): PortForwardTracker | undefined;
16
+ removePortForward(id: string): void;
17
+ trackWatch(watch: WatchTracker): void;
18
+ getKubeConfig(): k8s.KubeConfig;
19
+ getCoreApi(): k8s.CoreV1Api;
20
+ getAppsApi(): k8s.AppsV1Api;
21
+ }
@@ -0,0 +1,68 @@
1
+ import * as k8s from "@kubernetes/client-node";
2
+ export class KubernetesManager {
3
+ resources = [];
4
+ portForwards = [];
5
+ watches = [];
6
+ kc;
7
+ k8sApi;
8
+ k8sAppsApi;
9
+ constructor() {
10
+ this.kc = new k8s.KubeConfig();
11
+ this.kc.loadFromDefault();
12
+ this.k8sApi = this.kc.makeApiClient(k8s.CoreV1Api);
13
+ this.k8sAppsApi = this.kc.makeApiClient(k8s.AppsV1Api);
14
+ }
15
+ async cleanup() {
16
+ // Stop watches
17
+ for (const watch of this.watches) {
18
+ watch.abort.abort();
19
+ }
20
+ // Delete tracked resources in reverse order
21
+ for (const resource of [...this.resources].reverse()) {
22
+ try {
23
+ await this.deleteResource(resource.kind, resource.name, resource.namespace);
24
+ }
25
+ catch (error) {
26
+ console.error(`Failed to delete ${resource.kind} ${resource.name}:`, error);
27
+ }
28
+ }
29
+ }
30
+ trackResource(kind, name, namespace) {
31
+ this.resources.push({ kind, name, namespace, createdAt: new Date() });
32
+ }
33
+ async deleteResource(kind, name, namespace) {
34
+ switch (kind.toLowerCase()) {
35
+ case "pod":
36
+ await this.k8sApi.deleteNamespacedPod(name, namespace);
37
+ break;
38
+ case "deployment":
39
+ await this.k8sAppsApi.deleteNamespacedDeployment(name, namespace);
40
+ break;
41
+ case "service":
42
+ await this.k8sApi.deleteNamespacedService(name, namespace);
43
+ break;
44
+ }
45
+ this.resources = this.resources.filter((r) => !(r.kind === kind && r.name === name && r.namespace === namespace));
46
+ }
47
+ trackPortForward(pf) {
48
+ this.portForwards.push(pf);
49
+ }
50
+ getPortForward(id) {
51
+ return this.portForwards.find((p) => p.id === id);
52
+ }
53
+ removePortForward(id) {
54
+ this.portForwards = this.portForwards.filter((p) => p.id !== id);
55
+ }
56
+ trackWatch(watch) {
57
+ this.watches.push(watch);
58
+ }
59
+ getKubeConfig() {
60
+ return this.kc;
61
+ }
62
+ getCoreApi() {
63
+ return this.k8sApi;
64
+ }
65
+ getAppsApi() {
66
+ return this.k8sAppsApi;
67
+ }
68
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-kubernetes",
3
- "version": "0.1.5",
3
+ "version": "0.2.3",
4
4
  "description": "MCP server for interacting with Kubernetes clusters via kubectl",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -37,7 +37,8 @@
37
37
  "@kubernetes/client-node": "^0.20.0",
38
38
  "@modelcontextprotocol/sdk": "1.0.1",
39
39
  "js-yaml": "^4.1.0",
40
- "zod": "^3.22.4"
40
+ "yaml": "^2.7.0",
41
+ "zod": "^3.24.2"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/js-yaml": "^4.0.9",
@@ -1 +0,0 @@
1
- export {};