@bldg-7/proxmox-mcp 0.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.
- package/LICENSE +21 -0
- package/README.md +1033 -0
- package/dist/client/proxmox.d.ts +14 -0
- package/dist/client/proxmox.d.ts.map +1 -0
- package/dist/client/proxmox.js +82 -0
- package/dist/client/proxmox.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +24 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +31 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +32 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/formatters/index.d.ts +42 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +85 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/index.d.ts +41 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +69 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +2 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +2 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +2 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/schemas/backup.d.ts +101 -0
- package/dist/schemas/backup.d.ts.map +1 -0
- package/dist/schemas/backup.js +43 -0
- package/dist/schemas/backup.js.map +1 -0
- package/dist/schemas/disk.d.ts +144 -0
- package/dist/schemas/disk.d.ts.map +1 -0
- package/dist/schemas/disk.js +60 -0
- package/dist/schemas/disk.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/network.d.ts +140 -0
- package/dist/schemas/network.d.ts.map +1 -0
- package/dist/schemas/network.js +56 -0
- package/dist/schemas/network.js.map +1 -0
- package/dist/schemas/node.d.ts +16 -0
- package/dist/schemas/node.d.ts.map +1 -0
- package/dist/schemas/node.js +12 -0
- package/dist/schemas/node.js.map +1 -0
- package/dist/schemas/snapshot.d.ts +116 -0
- package/dist/schemas/snapshot.d.ts.map +1 -0
- package/dist/schemas/snapshot.js +34 -0
- package/dist/schemas/snapshot.js.map +1 -0
- package/dist/schemas/vm.d.ts +330 -0
- package/dist/schemas/vm.d.ts.map +1 -0
- package/dist/schemas/vm.js +111 -0
- package/dist/schemas/vm.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +142 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/backup.d.ts +35 -0
- package/dist/tools/backup.d.ts.map +1 -0
- package/dist/tools/backup.js +210 -0
- package/dist/tools/backup.js.map +1 -0
- package/dist/tools/cluster.d.ts +15 -0
- package/dist/tools/cluster.d.ts.map +1 -0
- package/dist/tools/cluster.js +82 -0
- package/dist/tools/cluster.js.map +1 -0
- package/dist/tools/command.d.ts +6 -0
- package/dist/tools/command.d.ts.map +1 -0
- package/dist/tools/command.js +26 -0
- package/dist/tools/command.js.map +1 -0
- package/dist/tools/disk.d.ts +45 -0
- package/dist/tools/disk.d.ts.map +1 -0
- package/dist/tools/disk.js +243 -0
- package/dist/tools/disk.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/network.d.ts +35 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +270 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/node.d.ts +15 -0
- package/dist/tools/node.d.ts.map +1 -0
- package/dist/tools/node.js +73 -0
- package/dist/tools/node.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +87 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/snapshot.d.ts +45 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +249 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/vm-create.d.ts +8 -0
- package/dist/tools/vm-create.d.ts.map +1 -0
- package/dist/tools/vm-create.js +129 -0
- package/dist/tools/vm-create.js.map +1 -0
- package/dist/tools/vm-lifecycle.d.ts +67 -0
- package/dist/tools/vm-lifecycle.d.ts.map +1 -0
- package/dist/tools/vm-lifecycle.js +319 -0
- package/dist/tools/vm-lifecycle.js.map +1 -0
- package/dist/tools/vm-modify.d.ts +25 -0
- package/dist/tools/vm-modify.d.ts.map +1 -0
- package/dist/tools/vm-modify.js +155 -0
- package/dist/tools/vm-modify.js.map +1 -0
- package/dist/tools/vm-query.d.ts +20 -0
- package/dist/tools/vm-query.d.ts.map +1 -0
- package/dist/tools/vm-query.js +166 -0
- package/dist/tools/vm-query.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/proxmox.d.ts +166 -0
- package/dist/types/proxmox.d.ts.map +1 -0
- package/dist/types/proxmox.js +2 -0
- package/dist/types/proxmox.js.map +1 -0
- package/dist/types/tools.d.ts +12 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +64 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validators/index.d.ts +75 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +185 -0
- package/dist/validators/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { formatToolResponse, formatErrorResponse, } from '../formatters/index.js';
|
|
2
|
+
import { requireElevated } from '../middleware/index.js';
|
|
3
|
+
import { validateNodeName, validateVMID, validateStorageName } from '../validators/index.js';
|
|
4
|
+
import { addDiskVmSchema, addMountpointLxcSchema, resizeDiskVmSchema, resizeDiskLxcSchema, removeDiskVmSchema, removeMountpointLxcSchema, moveDiskVmSchema, moveDiskLxcSchema, } from '../schemas/disk.js';
|
|
5
|
+
/**
|
|
6
|
+
* Add a new disk to a QEMU VM
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export async function addDiskVM(client, config, input) {
|
|
10
|
+
try {
|
|
11
|
+
requireElevated(config, 'add VM disk');
|
|
12
|
+
const validated = addDiskVmSchema.parse(input);
|
|
13
|
+
const safeNode = validateNodeName(validated.node);
|
|
14
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
15
|
+
const safeStorage = validateStorageName(validated.storage);
|
|
16
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'PUT', {
|
|
17
|
+
[validated.disk]: `${safeStorage}:${validated.size}`,
|
|
18
|
+
});
|
|
19
|
+
let output = `💿 **VM Disk Addition Started**\n\n`;
|
|
20
|
+
output += `• **VM ID**: ${safeVmid}\n`;
|
|
21
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
22
|
+
output += `• **Disk**: ${validated.disk}\n`;
|
|
23
|
+
output += `• **Storage**: ${safeStorage}\n`;
|
|
24
|
+
output += `• **Size**: ${validated.size} GB\n`;
|
|
25
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
26
|
+
output += `**Disk naming conventions**:\n`;
|
|
27
|
+
output += ` • SCSI: scsi0-15\n`;
|
|
28
|
+
output += ` • VirtIO: virtio0-15\n`;
|
|
29
|
+
output += ` • SATA: sata0-5\n`;
|
|
30
|
+
output += ` • IDE: ide0-3\n\n`;
|
|
31
|
+
output += `**Note**: The VM may need to be stopped for this operation depending on configuration.`;
|
|
32
|
+
return formatToolResponse(output);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return formatErrorResponse(error, 'Add VM Disk');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add a mount point to an LXC container
|
|
40
|
+
* Requires elevated permissions
|
|
41
|
+
*/
|
|
42
|
+
export async function addMountpointLxc(client, config, input) {
|
|
43
|
+
try {
|
|
44
|
+
requireElevated(config, 'add LXC mount point');
|
|
45
|
+
const validated = addMountpointLxcSchema.parse(input);
|
|
46
|
+
const safeNode = validateNodeName(validated.node);
|
|
47
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
48
|
+
const safeStorage = validateStorageName(validated.storage);
|
|
49
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'PUT', {
|
|
50
|
+
[validated.mp]: `${safeStorage}:${validated.size}`,
|
|
51
|
+
});
|
|
52
|
+
let output = `💿 **LXC Mount Point Addition Started**\n\n`;
|
|
53
|
+
output += `• **Container ID**: ${safeVmid}\n`;
|
|
54
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
55
|
+
output += `• **Mount Point**: ${validated.mp}\n`;
|
|
56
|
+
output += `• **Storage**: ${safeStorage}\n`;
|
|
57
|
+
output += `• **Size**: ${validated.size} GB\n`;
|
|
58
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
59
|
+
output += `**Mount point naming**: mp0-255\n\n`;
|
|
60
|
+
output += `**Note**: The container may need to be stopped for this operation.`;
|
|
61
|
+
return formatToolResponse(output);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return formatErrorResponse(error, 'Add LXC Mount Point');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resize a QEMU VM disk
|
|
69
|
+
* Requires elevated permissions
|
|
70
|
+
*/
|
|
71
|
+
export async function resizeDiskVM(client, config, input) {
|
|
72
|
+
try {
|
|
73
|
+
requireElevated(config, 'resize VM disk');
|
|
74
|
+
const validated = resizeDiskVmSchema.parse(input);
|
|
75
|
+
const safeNode = validateNodeName(validated.node);
|
|
76
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
77
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/resize`, 'PUT', {
|
|
78
|
+
disk: validated.disk,
|
|
79
|
+
size: validated.size,
|
|
80
|
+
});
|
|
81
|
+
let output = `📏 **VM Disk Resize Started**\n\n`;
|
|
82
|
+
output += `• **VM ID**: ${safeVmid}\n`;
|
|
83
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
84
|
+
output += `• **Disk**: ${validated.disk}\n`;
|
|
85
|
+
output += `• **New Size**: ${validated.size}\n`;
|
|
86
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
87
|
+
output += `**Size format examples**:\n`;
|
|
88
|
+
output += ` • +10G: Add 10GB to current size\n`;
|
|
89
|
+
output += ` • 50G: Set absolute size to 50GB\n\n`;
|
|
90
|
+
output += `**Note**: Disks can only be expanded, not shrunk. Some configurations allow online resizing.`;
|
|
91
|
+
return formatToolResponse(output);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return formatErrorResponse(error, 'Resize VM Disk');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resize an LXC container disk or mount point
|
|
99
|
+
* Requires elevated permissions
|
|
100
|
+
*/
|
|
101
|
+
export async function resizeDiskLxc(client, config, input) {
|
|
102
|
+
try {
|
|
103
|
+
requireElevated(config, 'resize LXC disk');
|
|
104
|
+
const validated = resizeDiskLxcSchema.parse(input);
|
|
105
|
+
const safeNode = validateNodeName(validated.node);
|
|
106
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
107
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/resize`, 'PUT', {
|
|
108
|
+
disk: validated.disk,
|
|
109
|
+
size: validated.size,
|
|
110
|
+
});
|
|
111
|
+
let output = `📏 **LXC Disk Resize Started**\n\n`;
|
|
112
|
+
output += `• **Container ID**: ${safeVmid}\n`;
|
|
113
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
114
|
+
output += `• **Disk**: ${validated.disk}\n`;
|
|
115
|
+
output += `• **New Size**: ${validated.size}\n`;
|
|
116
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
117
|
+
output += `**Size format examples**:\n`;
|
|
118
|
+
output += ` • +10G: Add 10GB to current size\n`;
|
|
119
|
+
output += ` • 50G: Set absolute size to 50GB\n\n`;
|
|
120
|
+
output += `**Valid disk names**: rootfs, mp0, mp1, mp2, etc.\n\n`;
|
|
121
|
+
output += `**Note**: Disks can only be expanded, not shrunk. Container may need to be stopped.`;
|
|
122
|
+
return formatToolResponse(output);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return formatErrorResponse(error, 'Resize LXC Disk');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Remove a disk from a QEMU VM
|
|
130
|
+
* Requires elevated permissions
|
|
131
|
+
*/
|
|
132
|
+
export async function removeDiskVM(client, config, input) {
|
|
133
|
+
try {
|
|
134
|
+
requireElevated(config, 'remove VM disk');
|
|
135
|
+
const validated = removeDiskVmSchema.parse(input);
|
|
136
|
+
const safeNode = validateNodeName(validated.node);
|
|
137
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
138
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'PUT', {
|
|
139
|
+
delete: validated.disk,
|
|
140
|
+
});
|
|
141
|
+
let output = `➖ **VM Disk Removal Started**\n\n`;
|
|
142
|
+
output += `• **VM ID**: ${safeVmid}\n`;
|
|
143
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
144
|
+
output += `• **Disk**: ${validated.disk}\n`;
|
|
145
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
146
|
+
output += `**Warning**: This will permanently delete the disk and all its data.\n`;
|
|
147
|
+
output += `**Note**: The VM should be stopped for this operation.`;
|
|
148
|
+
return formatToolResponse(output);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
return formatErrorResponse(error, 'Remove VM Disk');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Remove a mount point from an LXC container
|
|
156
|
+
* Requires elevated permissions
|
|
157
|
+
*/
|
|
158
|
+
export async function removeMountpointLxc(client, config, input) {
|
|
159
|
+
try {
|
|
160
|
+
requireElevated(config, 'remove LXC mount point');
|
|
161
|
+
const validated = removeMountpointLxcSchema.parse(input);
|
|
162
|
+
const safeNode = validateNodeName(validated.node);
|
|
163
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
164
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'PUT', {
|
|
165
|
+
delete: validated.mp,
|
|
166
|
+
});
|
|
167
|
+
let output = `➖ **LXC Mount Point Removal Started**\n\n`;
|
|
168
|
+
output += `• **Container ID**: ${safeVmid}\n`;
|
|
169
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
170
|
+
output += `• **Mount Point**: ${validated.mp}\n`;
|
|
171
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
172
|
+
output += `**Warning**: This will permanently delete the mount point and all its data.\n`;
|
|
173
|
+
output += `**Note**: The container should be stopped for this operation.`;
|
|
174
|
+
return formatToolResponse(output);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return formatErrorResponse(error, 'Remove LXC Mount Point');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Move a QEMU VM disk to different storage
|
|
182
|
+
* Requires elevated permissions
|
|
183
|
+
*/
|
|
184
|
+
export async function moveDiskVM(client, config, input) {
|
|
185
|
+
try {
|
|
186
|
+
requireElevated(config, 'move VM disk');
|
|
187
|
+
const validated = moveDiskVmSchema.parse(input);
|
|
188
|
+
const safeNode = validateNodeName(validated.node);
|
|
189
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
190
|
+
const safeStorage = validateStorageName(validated.storage);
|
|
191
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/move_disk`, 'POST', {
|
|
192
|
+
disk: validated.disk,
|
|
193
|
+
storage: safeStorage,
|
|
194
|
+
delete: validated.delete !== false ? 1 : 0,
|
|
195
|
+
});
|
|
196
|
+
let output = `📦 **VM Disk Move Started**\n\n`;
|
|
197
|
+
output += `• **VM ID**: ${safeVmid}\n`;
|
|
198
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
199
|
+
output += `• **Disk**: ${validated.disk}\n`;
|
|
200
|
+
output += `• **Target Storage**: ${safeStorage}\n`;
|
|
201
|
+
output += `• **Delete Source**: ${validated.delete !== false ? 'Yes' : 'No'}\n`;
|
|
202
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
203
|
+
output += `**Note**: Disk move operation may take several minutes depending on disk size.\n`;
|
|
204
|
+
output += `**Tip**: The VM should be stopped for this operation in most configurations.`;
|
|
205
|
+
return formatToolResponse(output);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
return formatErrorResponse(error, 'Move VM Disk');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Move an LXC container disk to different storage
|
|
213
|
+
* Requires elevated permissions
|
|
214
|
+
*/
|
|
215
|
+
export async function moveDiskLxc(client, config, input) {
|
|
216
|
+
try {
|
|
217
|
+
requireElevated(config, 'move LXC disk');
|
|
218
|
+
const validated = moveDiskLxcSchema.parse(input);
|
|
219
|
+
const safeNode = validateNodeName(validated.node);
|
|
220
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
221
|
+
const safeStorage = validateStorageName(validated.storage);
|
|
222
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/move_volume`, 'POST', {
|
|
223
|
+
volume: validated.disk,
|
|
224
|
+
storage: safeStorage,
|
|
225
|
+
delete: validated.delete !== false ? 1 : 0,
|
|
226
|
+
});
|
|
227
|
+
let output = `📦 **LXC Disk Move Started**\n\n`;
|
|
228
|
+
output += `• **Container ID**: ${safeVmid}\n`;
|
|
229
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
230
|
+
output += `• **Volume**: ${validated.disk}\n`;
|
|
231
|
+
output += `• **Target Storage**: ${safeStorage}\n`;
|
|
232
|
+
output += `• **Delete Source**: ${validated.delete !== false ? 'Yes' : 'No'}\n`;
|
|
233
|
+
output += `• **Task ID**: ${result || 'N/A'}\n\n`;
|
|
234
|
+
output += `**Valid volumes**: rootfs, mp0, mp1, mp2, etc.\n\n`;
|
|
235
|
+
output += `**Note**: Volume move operation may take several minutes depending on volume size.\n`;
|
|
236
|
+
output += `**Tip**: The container should be stopped for this operation.`;
|
|
237
|
+
return formatToolResponse(output);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
return formatErrorResponse(error, 'Move LXC Disk');
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=disk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk.js","sourceRoot":"","sources":["../../src/tools/disk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { getNodes, getNodeStatus } from './node.js';
|
|
2
|
+
export { getClusterStatus, getNextVMID } from './cluster.js';
|
|
3
|
+
export { getVMs, getVMStatus, getStorage } from './vm-query.js';
|
|
4
|
+
export { startLxc, startVM, stopLxc, stopVM, deleteLxc, deleteVM, rebootLxc, rebootVM, shutdownLxc, shutdownVM, pauseVM, resumeVM, } from './vm-lifecycle.js';
|
|
5
|
+
export { cloneLxc, cloneVM, resizeLxc, resizeVM } from './vm-modify.js';
|
|
6
|
+
export { createSnapshotLxc, createSnapshotVM, listSnapshotsLxc, listSnapshotsVM, rollbackSnapshotLxc, rollbackSnapshotVM, deleteSnapshotLxc, deleteSnapshotVM, } from './snapshot.js';
|
|
7
|
+
export { createBackupLxc, createBackupVM, listBackups, restoreBackupLxc, restoreBackupVM, deleteBackup, } from './backup.js';
|
|
8
|
+
export { addDiskVM, addMountpointLxc, resizeDiskVM, resizeDiskLxc, removeDiskVM, removeMountpointLxc, moveDiskVM, moveDiskLxc, } from './disk.js';
|
|
9
|
+
export { addNetworkVm, addNetworkLxc, updateNetworkVm, updateNetworkLxc, removeNetworkVm, removeNetworkLxc, } from './network.js';
|
|
10
|
+
export { executeVMCommand } from './command.js';
|
|
11
|
+
export { listTemplates, createLxc, createVM } from './vm-create.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,WAAW,GACZ,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Node & Cluster tools
|
|
2
|
+
export { getNodes, getNodeStatus } from './node.js';
|
|
3
|
+
export { getClusterStatus, getNextVMID } from './cluster.js';
|
|
4
|
+
// VM Query & Lifecycle tools
|
|
5
|
+
export { getVMs, getVMStatus, getStorage } from './vm-query.js';
|
|
6
|
+
export { startLxc, startVM, stopLxc, stopVM, deleteLxc, deleteVM, rebootLxc, rebootVM, shutdownLxc, shutdownVM, pauseVM, resumeVM, } from './vm-lifecycle.js';
|
|
7
|
+
export { cloneLxc, cloneVM, resizeLxc, resizeVM } from './vm-modify.js';
|
|
8
|
+
// Snapshot tools
|
|
9
|
+
export { createSnapshotLxc, createSnapshotVM, listSnapshotsLxc, listSnapshotsVM, rollbackSnapshotLxc, rollbackSnapshotVM, deleteSnapshotLxc, deleteSnapshotVM, } from './snapshot.js';
|
|
10
|
+
// Backup tools
|
|
11
|
+
export { createBackupLxc, createBackupVM, listBackups, restoreBackupLxc, restoreBackupVM, deleteBackup, } from './backup.js';
|
|
12
|
+
// Disk tools
|
|
13
|
+
export { addDiskVM, addMountpointLxc, resizeDiskVM, resizeDiskLxc, removeDiskVM, removeMountpointLxc, moveDiskVM, moveDiskLxc, } from './disk.js';
|
|
14
|
+
// Network tools
|
|
15
|
+
export { addNetworkVm, addNetworkLxc, updateNetworkVm, updateNetworkLxc, removeNetworkVm, removeNetworkLxc, } from './network.js';
|
|
16
|
+
// Command tool
|
|
17
|
+
export { executeVMCommand } from './command.js';
|
|
18
|
+
// Creation tools
|
|
19
|
+
export { listTemplates, createLxc, createVM } from './vm-create.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7D,6BAA6B;AAC7B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExE,iBAAiB;AACjB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,eAAe;AACf,OAAO,EACL,eAAe,EACf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,aAAa;AACb,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ProxmoxApiClient } from '../client/proxmox.js';
|
|
2
|
+
import type { Config } from '../config/index.js';
|
|
3
|
+
import type { ToolResponse } from '../types/index.js';
|
|
4
|
+
import type { AddNetworkVmInput, AddNetworkLxcInput, UpdateNetworkVmInput, UpdateNetworkLxcInput, RemoveNetworkVmInput, RemoveNetworkLxcInput } from '../schemas/network.js';
|
|
5
|
+
/**
|
|
6
|
+
* Add network interface to QEMU VM
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export declare function addNetworkVm(client: ProxmoxApiClient, config: Config, input: AddNetworkVmInput): Promise<ToolResponse>;
|
|
10
|
+
/**
|
|
11
|
+
* Add network interface to LXC container
|
|
12
|
+
* Requires elevated permissions
|
|
13
|
+
*/
|
|
14
|
+
export declare function addNetworkLxc(client: ProxmoxApiClient, config: Config, input: AddNetworkLxcInput): Promise<ToolResponse>;
|
|
15
|
+
/**
|
|
16
|
+
* Update network interface on QEMU VM
|
|
17
|
+
* Requires elevated permissions
|
|
18
|
+
*/
|
|
19
|
+
export declare function updateNetworkVm(client: ProxmoxApiClient, config: Config, input: UpdateNetworkVmInput): Promise<ToolResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Update network interface on LXC container
|
|
22
|
+
* Requires elevated permissions
|
|
23
|
+
*/
|
|
24
|
+
export declare function updateNetworkLxc(client: ProxmoxApiClient, config: Config, input: UpdateNetworkLxcInput): Promise<ToolResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove network interface from QEMU VM
|
|
27
|
+
* Requires elevated permissions
|
|
28
|
+
*/
|
|
29
|
+
export declare function removeNetworkVm(client: ProxmoxApiClient, config: Config, input: RemoveNetworkVmInput): Promise<ToolResponse>;
|
|
30
|
+
/**
|
|
31
|
+
* Remove network interface from LXC container
|
|
32
|
+
* Requires elevated permissions
|
|
33
|
+
*/
|
|
34
|
+
export declare function removeNetworkLxc(client: ProxmoxApiClient, config: Config, input: RemoveNetworkLxcInput): Promise<ToolResponse>;
|
|
35
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBtD,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,CAyCvB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,YAAY,CAAC,CAuCvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA2FvB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAgFvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { formatToolResponse, formatErrorResponse, } from '../formatters/index.js';
|
|
2
|
+
import { requireElevated } from '../middleware/index.js';
|
|
3
|
+
import { validateNodeName, validateVMID, validateNetworkId, validateBridgeName, } from '../validators/index.js';
|
|
4
|
+
import { addNetworkVmSchema, addNetworkLxcSchema, updateNetworkVmSchema, updateNetworkLxcSchema, removeNetworkVmSchema, removeNetworkLxcSchema, } from '../schemas/network.js';
|
|
5
|
+
/**
|
|
6
|
+
* Add network interface to QEMU VM
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export async function addNetworkVm(client, config, input) {
|
|
10
|
+
try {
|
|
11
|
+
requireElevated(config, 'add VM network');
|
|
12
|
+
const validated = addNetworkVmSchema.parse(input);
|
|
13
|
+
const safeNode = validateNodeName(validated.node);
|
|
14
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
15
|
+
const safeNet = validateNetworkId(validated.net);
|
|
16
|
+
const safeBridge = validateBridgeName(validated.bridge);
|
|
17
|
+
// Build network config string
|
|
18
|
+
let netConfig = `model=${validated.model || 'virtio'},bridge=${safeBridge}`;
|
|
19
|
+
if (validated.macaddr)
|
|
20
|
+
netConfig += `,macaddr=${validated.macaddr}`;
|
|
21
|
+
if (validated.vlan !== undefined && validated.vlan !== null) {
|
|
22
|
+
netConfig += `,tag=${validated.vlan}`;
|
|
23
|
+
}
|
|
24
|
+
if (validated.firewall)
|
|
25
|
+
netConfig += `,firewall=1`;
|
|
26
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'PUT', { [safeNet]: netConfig });
|
|
27
|
+
const output = `🌐 **VM Network Added**\n\n` +
|
|
28
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
29
|
+
`• **Network**: ${safeNet}\n` +
|
|
30
|
+
`• **Bridge**: ${safeBridge}\n` +
|
|
31
|
+
`• **Model**: ${validated.model || 'virtio'}\n` +
|
|
32
|
+
(validated.macaddr ? `• **MAC Address**: ${validated.macaddr}\n` : '') +
|
|
33
|
+
(validated.vlan !== undefined && validated.vlan !== null
|
|
34
|
+
? `• **VLAN Tag**: ${validated.vlan}\n`
|
|
35
|
+
: '') +
|
|
36
|
+
(validated.firewall ? `• **Firewall**: Enabled\n` : '') +
|
|
37
|
+
`• **Task ID**: ${result}\n`;
|
|
38
|
+
return formatToolResponse(output);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return formatErrorResponse(error, 'Add VM Network');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Add network interface to LXC container
|
|
46
|
+
* Requires elevated permissions
|
|
47
|
+
*/
|
|
48
|
+
export async function addNetworkLxc(client, config, input) {
|
|
49
|
+
try {
|
|
50
|
+
requireElevated(config, 'add LXC network');
|
|
51
|
+
const validated = addNetworkLxcSchema.parse(input);
|
|
52
|
+
const safeNode = validateNodeName(validated.node);
|
|
53
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
54
|
+
const safeNet = validateNetworkId(validated.net);
|
|
55
|
+
const safeBridge = validateBridgeName(validated.bridge);
|
|
56
|
+
// Extract interface number (e.g., net0 -> 0, net1 -> 1)
|
|
57
|
+
const netNum = safeNet.replace('net', '');
|
|
58
|
+
// Build network config string
|
|
59
|
+
let netConfig = `name=eth${netNum},bridge=${safeBridge}`;
|
|
60
|
+
if (validated.ip)
|
|
61
|
+
netConfig += `,ip=${validated.ip}`;
|
|
62
|
+
if (validated.gw)
|
|
63
|
+
netConfig += `,gw=${validated.gw}`;
|
|
64
|
+
if (validated.firewall)
|
|
65
|
+
netConfig += `,firewall=1`;
|
|
66
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'PUT', { [safeNet]: netConfig });
|
|
67
|
+
const output = `🌐 **LXC Network Added**\n\n` +
|
|
68
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
69
|
+
`• **Network**: ${safeNet} (eth${netNum})\n` +
|
|
70
|
+
`• **Bridge**: ${safeBridge}\n` +
|
|
71
|
+
(validated.ip ? `• **IP Address**: ${validated.ip}\n` : '') +
|
|
72
|
+
(validated.gw ? `• **Gateway**: ${validated.gw}\n` : '') +
|
|
73
|
+
(validated.firewall ? `• **Firewall**: Enabled\n` : '') +
|
|
74
|
+
`• **Task ID**: ${result}\n`;
|
|
75
|
+
return formatToolResponse(output);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return formatErrorResponse(error, 'Add LXC Network');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Update network interface on QEMU VM
|
|
83
|
+
* Requires elevated permissions
|
|
84
|
+
*/
|
|
85
|
+
export async function updateNetworkVm(client, config, input) {
|
|
86
|
+
try {
|
|
87
|
+
requireElevated(config, 'update VM network');
|
|
88
|
+
const validated = updateNetworkVmSchema.parse(input);
|
|
89
|
+
const safeNode = validateNodeName(validated.node);
|
|
90
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
91
|
+
const safeNet = validateNetworkId(validated.net);
|
|
92
|
+
// Get current VM configuration
|
|
93
|
+
const currentConfig = (await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'GET'));
|
|
94
|
+
if (!currentConfig[safeNet]) {
|
|
95
|
+
return formatErrorResponse(new Error(`Network interface ${safeNet} does not exist`), 'Update VM Network');
|
|
96
|
+
}
|
|
97
|
+
// Parse current configuration
|
|
98
|
+
const configParts = {};
|
|
99
|
+
currentConfig[safeNet].split(',').forEach((part) => {
|
|
100
|
+
const [key, value] = part.split('=');
|
|
101
|
+
if (key && value)
|
|
102
|
+
configParts[key] = value;
|
|
103
|
+
});
|
|
104
|
+
// Update only provided parameters
|
|
105
|
+
if (validated.bridge !== undefined) {
|
|
106
|
+
const safeBridge = validateBridgeName(validated.bridge);
|
|
107
|
+
configParts.bridge = safeBridge;
|
|
108
|
+
}
|
|
109
|
+
if (validated.model !== undefined) {
|
|
110
|
+
configParts.model = validated.model;
|
|
111
|
+
}
|
|
112
|
+
if (validated.macaddr !== undefined) {
|
|
113
|
+
configParts.macaddr = validated.macaddr;
|
|
114
|
+
}
|
|
115
|
+
if (validated.vlan !== undefined && validated.vlan !== null) {
|
|
116
|
+
configParts.tag = validated.vlan.toString();
|
|
117
|
+
}
|
|
118
|
+
else if (validated.vlan === null) {
|
|
119
|
+
delete configParts.tag;
|
|
120
|
+
}
|
|
121
|
+
if (validated.firewall !== undefined) {
|
|
122
|
+
if (validated.firewall) {
|
|
123
|
+
configParts.firewall = '1';
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
delete configParts.firewall;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Rebuild configuration string
|
|
130
|
+
const netConfig = Object.entries(configParts)
|
|
131
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
132
|
+
.join(',');
|
|
133
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'PUT', { [safeNet]: netConfig });
|
|
134
|
+
const output = `🔧 **VM Network Updated**\n\n` +
|
|
135
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
136
|
+
`• **Network**: ${safeNet}\n` +
|
|
137
|
+
`• **New Configuration**: ${netConfig}\n\n` +
|
|
138
|
+
`**Changes applied**:\n` +
|
|
139
|
+
(validated.bridge !== undefined ? `- Bridge: ${validated.bridge}\n` : '') +
|
|
140
|
+
(validated.model !== undefined ? `- Model: ${validated.model}\n` : '') +
|
|
141
|
+
(validated.macaddr !== undefined
|
|
142
|
+
? `- MAC Address: ${validated.macaddr}\n`
|
|
143
|
+
: '') +
|
|
144
|
+
(validated.vlan !== undefined
|
|
145
|
+
? `- VLAN Tag: ${validated.vlan !== null ? validated.vlan : 'Removed'}\n`
|
|
146
|
+
: '') +
|
|
147
|
+
(validated.firewall !== undefined
|
|
148
|
+
? `- Firewall: ${validated.firewall ? 'Enabled' : 'Disabled'}\n`
|
|
149
|
+
: '') +
|
|
150
|
+
`• **Task ID**: ${result}\n`;
|
|
151
|
+
return formatToolResponse(output);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
return formatErrorResponse(error, 'Update VM Network');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Update network interface on LXC container
|
|
159
|
+
* Requires elevated permissions
|
|
160
|
+
*/
|
|
161
|
+
export async function updateNetworkLxc(client, config, input) {
|
|
162
|
+
try {
|
|
163
|
+
requireElevated(config, 'update LXC network');
|
|
164
|
+
const validated = updateNetworkLxcSchema.parse(input);
|
|
165
|
+
const safeNode = validateNodeName(validated.node);
|
|
166
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
167
|
+
const safeNet = validateNetworkId(validated.net);
|
|
168
|
+
// Get current container configuration
|
|
169
|
+
const currentConfig = (await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'GET'));
|
|
170
|
+
if (!currentConfig[safeNet]) {
|
|
171
|
+
return formatErrorResponse(new Error(`Network interface ${safeNet} does not exist`), 'Update LXC Network');
|
|
172
|
+
}
|
|
173
|
+
// Parse current configuration
|
|
174
|
+
const configParts = {};
|
|
175
|
+
currentConfig[safeNet].split(',').forEach((part) => {
|
|
176
|
+
const [key, value] = part.split('=');
|
|
177
|
+
if (key && value)
|
|
178
|
+
configParts[key] = value;
|
|
179
|
+
});
|
|
180
|
+
// Update only provided parameters
|
|
181
|
+
if (validated.bridge !== undefined) {
|
|
182
|
+
const safeBridge = validateBridgeName(validated.bridge);
|
|
183
|
+
configParts.bridge = safeBridge;
|
|
184
|
+
}
|
|
185
|
+
if (validated.ip !== undefined) {
|
|
186
|
+
configParts.ip = validated.ip;
|
|
187
|
+
}
|
|
188
|
+
if (validated.gw !== undefined) {
|
|
189
|
+
configParts.gw = validated.gw;
|
|
190
|
+
}
|
|
191
|
+
if (validated.firewall !== undefined) {
|
|
192
|
+
if (validated.firewall) {
|
|
193
|
+
configParts.firewall = '1';
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
delete configParts.firewall;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Rebuild configuration string
|
|
200
|
+
const netConfig = Object.entries(configParts)
|
|
201
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
202
|
+
.join(',');
|
|
203
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'PUT', { [safeNet]: netConfig });
|
|
204
|
+
const output = `🔧 **LXC Network Updated**\n\n` +
|
|
205
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
206
|
+
`• **Network**: ${safeNet}\n` +
|
|
207
|
+
`• **New Configuration**: ${netConfig}\n\n` +
|
|
208
|
+
`**Changes applied**:\n` +
|
|
209
|
+
(validated.bridge !== undefined ? `- Bridge: ${validated.bridge}\n` : '') +
|
|
210
|
+
(validated.ip !== undefined ? `- IP Address: ${validated.ip}\n` : '') +
|
|
211
|
+
(validated.gw !== undefined ? `- Gateway: ${validated.gw}\n` : '') +
|
|
212
|
+
(validated.firewall !== undefined
|
|
213
|
+
? `- Firewall: ${validated.firewall ? 'Enabled' : 'Disabled'}\n`
|
|
214
|
+
: '') +
|
|
215
|
+
`• **Task ID**: ${result}\n`;
|
|
216
|
+
return formatToolResponse(output);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return formatErrorResponse(error, 'Update LXC Network');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Remove network interface from QEMU VM
|
|
224
|
+
* Requires elevated permissions
|
|
225
|
+
*/
|
|
226
|
+
export async function removeNetworkVm(client, config, input) {
|
|
227
|
+
try {
|
|
228
|
+
requireElevated(config, 'remove VM network');
|
|
229
|
+
const validated = removeNetworkVmSchema.parse(input);
|
|
230
|
+
const safeNode = validateNodeName(validated.node);
|
|
231
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
232
|
+
const safeNet = validateNetworkId(validated.net);
|
|
233
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/config`, 'PUT', { delete: safeNet });
|
|
234
|
+
const output = `🗑️ **VM Network Removed**\n\n` +
|
|
235
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
236
|
+
`• **Network**: ${safeNet}\n` +
|
|
237
|
+
`• **Task ID**: ${result}\n\n` +
|
|
238
|
+
`**Note**: The network interface has been removed from the VM configuration.\n` +
|
|
239
|
+
`**Tip**: If the VM is running, you may need to restart it for changes to take effect.`;
|
|
240
|
+
return formatToolResponse(output);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
return formatErrorResponse(error, 'Remove VM Network');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Remove network interface from LXC container
|
|
248
|
+
* Requires elevated permissions
|
|
249
|
+
*/
|
|
250
|
+
export async function removeNetworkLxc(client, config, input) {
|
|
251
|
+
try {
|
|
252
|
+
requireElevated(config, 'remove LXC network');
|
|
253
|
+
const validated = removeNetworkLxcSchema.parse(input);
|
|
254
|
+
const safeNode = validateNodeName(validated.node);
|
|
255
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
256
|
+
const safeNet = validateNetworkId(validated.net);
|
|
257
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/config`, 'PUT', { delete: safeNet });
|
|
258
|
+
const output = `🗑️ **LXC Network Removed**\n\n` +
|
|
259
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
260
|
+
`• **Network**: ${safeNet}\n` +
|
|
261
|
+
`• **Task ID**: ${result}\n\n` +
|
|
262
|
+
`**Note**: The network interface has been removed from the container configuration.\n` +
|
|
263
|
+
`**Tip**: If the container is running, you may need to restart it for changes to take effect.`;
|
|
264
|
+
return formatToolResponse(output);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
return formatErrorResponse(error, 'Remove LXC Network');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAU/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,MAAc,EACd,KAAwB;IAExB,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAExD,8BAA8B;QAC9B,IAAI,SAAS,GAAG,SAAS,SAAS,CAAC,KAAK,IAAI,QAAQ,WAAW,UAAU,EAAE,CAAC;QAC5E,IAAI,SAAS,CAAC,OAAO;YAAE,SAAS,IAAI,YAAY,SAAS,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5D,SAAS,IAAI,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ;YAAE,SAAS,IAAI,aAAa,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,SAAS,QAAQ,SAAS,EAC5C,KAAK,EACL,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CACzB,CAAC;QAEF,MAAM,MAAM,GACV,6BAA6B;YAC7B,gBAAgB,QAAQ,IAAI;YAC5B,kBAAkB,OAAO,IAAI;YAC7B,iBAAiB,UAAU,IAAI;YAC/B,gBAAgB,SAAS,CAAC,KAAK,IAAI,QAAQ,IAAI;YAC/C,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI;gBACtD,CAAC,CAAC,mBAAmB,SAAS,CAAC,IAAI,IAAI;gBACvC,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,kBAAkB,MAAM,IAAI,CAAC;QAE/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,gBAAgB,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAwB,EACxB,MAAc,EACd,KAAyB;IAEzB,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAE3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAExD,wDAAwD;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE1C,8BAA8B;QAC9B,IAAI,SAAS,GAAG,WAAW,MAAM,WAAW,UAAU,EAAE,CAAC;QACzD,IAAI,SAAS,CAAC,EAAE;YAAE,SAAS,IAAI,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,SAAS,CAAC,EAAE;YAAE,SAAS,IAAI,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,SAAS,CAAC,QAAQ;YAAE,SAAS,IAAI,aAAa,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,QAAQ,QAAQ,SAAS,EAC3C,KAAK,EACL,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CACzB,CAAC;QAEF,MAAM,MAAM,GACV,8BAA8B;YAC9B,uBAAuB,QAAQ,IAAI;YACnC,kBAAkB,OAAO,QAAQ,MAAM,KAAK;YAC5C,iBAAiB,UAAU,IAAI;YAC/B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,kBAAkB,MAAM,IAAI,CAAC;QAE/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,iBAAiB,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,MAAc,EACd,KAA2B;IAE3B,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,+BAA+B;QAC/B,MAAM,aAAa,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CACzC,UAAU,QAAQ,SAAS,QAAQ,SAAS,EAC5C,KAAK,CACN,CAA2B,CAAC;QAE7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,mBAAmB,CACxB,IAAI,KAAK,CAAC,qBAAqB,OAAO,iBAAiB,CAAC,EACxD,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,KAAK;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxD,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;QAClC,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClC,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACpC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAC1C,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5D,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9C,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,WAAW,CAAC,GAAG,CAAC;QACzB,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,WAAW,CAAC,QAAQ,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;aACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,SAAS,QAAQ,SAAS,EAC5C,KAAK,EACL,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CACzB,CAAC;QAEF,MAAM,MAAM,GACV,+BAA+B;YAC/B,gBAAgB,QAAQ,IAAI;YAC5B,kBAAkB,OAAO,IAAI;YAC7B,4BAA4B,SAAS,MAAM;YAC3C,wBAAwB;YACxB,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS;gBAC9B,CAAC,CAAC,kBAAkB,SAAS,CAAC,OAAO,IAAI;gBACzC,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS;gBAC3B,CAAC,CAAC,eAAe,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI;gBACzE,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS;gBAC/B,CAAC,CAAC,eAAe,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI;gBAChE,CAAC,CAAC,EAAE,CAAC;YACP,kBAAkB,MAAM,IAAI,CAAC;QAE/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAwB,EACxB,MAAc,EACd,KAA4B;IAE5B,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,sCAAsC;QACtC,MAAM,aAAa,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CACzC,UAAU,QAAQ,QAAQ,QAAQ,SAAS,EAC3C,KAAK,CACN,CAA2B,CAAC;QAE7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,mBAAmB,CACxB,IAAI,KAAK,CAAC,qBAAqB,OAAO,iBAAiB,CAAC,EACxD,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,KAAK;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxD,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;QAClC,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,WAAW,CAAC,QAAQ,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;aACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,QAAQ,QAAQ,SAAS,EAC3C,KAAK,EACL,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CACzB,CAAC;QAEF,MAAM,MAAM,GACV,gCAAgC;YAChC,uBAAuB,QAAQ,IAAI;YACnC,kBAAkB,OAAO,IAAI;YAC7B,4BAA4B,SAAS,MAAM;YAC3C,wBAAwB;YACxB,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS;gBAC/B,CAAC,CAAC,eAAe,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI;gBAChE,CAAC,CAAC,EAAE,CAAC;YACP,kBAAkB,MAAM,IAAI,CAAC;QAE/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,oBAAoB,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,MAAc,EACd,KAA2B;IAE3B,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,SAAS,QAAQ,SAAS,EAC5C,KAAK,EACL,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;QAEF,MAAM,MAAM,GACV,gCAAgC;YAChC,gBAAgB,QAAQ,IAAI;YAC5B,kBAAkB,OAAO,IAAI;YAC7B,kBAAkB,MAAM,MAAM;YAC9B,+EAA+E;YAC/E,uFAAuF,CAAC;QAE1F,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAwB,EACxB,MAAc,EACd,KAA4B;IAE5B,IAAI,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,UAAU,QAAQ,QAAQ,QAAQ,SAAS,EAC3C,KAAK,EACL,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;QAEF,MAAM,MAAM,GACV,iCAAiC;YACjC,uBAAuB,QAAQ,IAAI;YACnC,kBAAkB,OAAO,IAAI;YAC7B,kBAAkB,MAAM,MAAM;YAC9B,sFAAsF;YACtF,8FAA8F,CAAC;QAEjG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAc,EAAE,oBAAoB,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
|