@calltelemetry/ct-lab-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.
Files changed (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/bin/ct-lab-mcp.d.ts +60 -0
  4. package/dist/bin/ct-lab-mcp.d.ts.map +1 -0
  5. package/dist/bin/ct-lab-mcp.js +261 -0
  6. package/dist/bin/ct-lab-mcp.js.map +1 -0
  7. package/dist/bin/proxmox-mcp.d.ts +58 -0
  8. package/dist/bin/proxmox-mcp.d.ts.map +1 -0
  9. package/dist/bin/proxmox-mcp.js +248 -0
  10. package/dist/bin/proxmox-mcp.js.map +1 -0
  11. package/dist/src/appliance/commands.d.ts +33 -0
  12. package/dist/src/appliance/commands.d.ts.map +1 -0
  13. package/dist/src/appliance/commands.js +241 -0
  14. package/dist/src/appliance/commands.js.map +1 -0
  15. package/dist/src/appliance/executor.d.ts +34 -0
  16. package/dist/src/appliance/executor.d.ts.map +1 -0
  17. package/dist/src/appliance/executor.js +214 -0
  18. package/dist/src/appliance/executor.js.map +1 -0
  19. package/dist/src/appliance/index.d.ts +8 -0
  20. package/dist/src/appliance/index.d.ts.map +1 -0
  21. package/dist/src/appliance/index.js +8 -0
  22. package/dist/src/appliance/index.js.map +1 -0
  23. package/dist/src/appliance/mock.d.ts +66 -0
  24. package/dist/src/appliance/mock.d.ts.map +1 -0
  25. package/dist/src/appliance/mock.js +339 -0
  26. package/dist/src/appliance/mock.js.map +1 -0
  27. package/dist/src/appliance/types.d.ts +83 -0
  28. package/dist/src/appliance/types.d.ts.map +1 -0
  29. package/dist/src/appliance/types.js +58 -0
  30. package/dist/src/appliance/types.js.map +1 -0
  31. package/dist/src/credentials/doppler.d.ts +25 -0
  32. package/dist/src/credentials/doppler.d.ts.map +1 -0
  33. package/dist/src/credentials/doppler.js +68 -0
  34. package/dist/src/credentials/doppler.js.map +1 -0
  35. package/dist/src/credentials/index.d.ts +4 -0
  36. package/dist/src/credentials/index.d.ts.map +1 -0
  37. package/dist/src/credentials/index.js +4 -0
  38. package/dist/src/credentials/index.js.map +1 -0
  39. package/dist/src/credentials/resolver.d.ts +36 -0
  40. package/dist/src/credentials/resolver.d.ts.map +1 -0
  41. package/dist/src/credentials/resolver.js +427 -0
  42. package/dist/src/credentials/resolver.js.map +1 -0
  43. package/dist/src/credentials/types.d.ts +73 -0
  44. package/dist/src/credentials/types.d.ts.map +1 -0
  45. package/dist/src/credentials/types.js +5 -0
  46. package/dist/src/credentials/types.js.map +1 -0
  47. package/dist/src/guardrails/index.d.ts +3 -0
  48. package/dist/src/guardrails/index.d.ts.map +1 -0
  49. package/dist/src/guardrails/index.js +3 -0
  50. package/dist/src/guardrails/index.js.map +1 -0
  51. package/dist/src/guardrails/safety.d.ts +45 -0
  52. package/dist/src/guardrails/safety.d.ts.map +1 -0
  53. package/dist/src/guardrails/safety.js +217 -0
  54. package/dist/src/guardrails/safety.js.map +1 -0
  55. package/dist/src/guardrails/types.d.ts +36 -0
  56. package/dist/src/guardrails/types.d.ts.map +1 -0
  57. package/dist/src/guardrails/types.js +20 -0
  58. package/dist/src/guardrails/types.js.map +1 -0
  59. package/dist/src/hypervisors/esxi/client.d.ts +103 -0
  60. package/dist/src/hypervisors/esxi/client.d.ts.map +1 -0
  61. package/dist/src/hypervisors/esxi/client.js +395 -0
  62. package/dist/src/hypervisors/esxi/client.js.map +1 -0
  63. package/dist/src/hypervisors/esxi/mock.d.ts +45 -0
  64. package/dist/src/hypervisors/esxi/mock.d.ts.map +1 -0
  65. package/dist/src/hypervisors/esxi/mock.js +202 -0
  66. package/dist/src/hypervisors/esxi/mock.js.map +1 -0
  67. package/dist/src/hypervisors/index.d.ts +10 -0
  68. package/dist/src/hypervisors/index.d.ts.map +1 -0
  69. package/dist/src/hypervisors/index.js +10 -0
  70. package/dist/src/hypervisors/index.js.map +1 -0
  71. package/dist/src/hypervisors/manager.d.ts +78 -0
  72. package/dist/src/hypervisors/manager.d.ts.map +1 -0
  73. package/dist/src/hypervisors/manager.js +415 -0
  74. package/dist/src/hypervisors/manager.js.map +1 -0
  75. package/dist/src/hypervisors/proxmox/client.d.ts +29 -0
  76. package/dist/src/hypervisors/proxmox/client.d.ts.map +1 -0
  77. package/dist/src/hypervisors/proxmox/client.js +278 -0
  78. package/dist/src/hypervisors/proxmox/client.js.map +1 -0
  79. package/dist/src/hypervisors/proxmox/mock.d.ts +17 -0
  80. package/dist/src/hypervisors/proxmox/mock.d.ts.map +1 -0
  81. package/dist/src/hypervisors/proxmox/mock.js +26 -0
  82. package/dist/src/hypervisors/proxmox/mock.js.map +1 -0
  83. package/dist/src/hypervisors/types.d.ts +159 -0
  84. package/dist/src/hypervisors/types.d.ts.map +1 -0
  85. package/dist/src/hypervisors/types.js +6 -0
  86. package/dist/src/hypervisors/types.js.map +1 -0
  87. package/dist/src/index.d.ts +19 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/index.js +19 -0
  90. package/dist/src/index.js.map +1 -0
  91. package/dist/src/proxmox/client.d.ts +37 -0
  92. package/dist/src/proxmox/client.d.ts.map +1 -0
  93. package/dist/src/proxmox/client.js +282 -0
  94. package/dist/src/proxmox/client.js.map +1 -0
  95. package/dist/src/proxmox/index.d.ts +53 -0
  96. package/dist/src/proxmox/index.d.ts.map +1 -0
  97. package/dist/src/proxmox/index.js +109 -0
  98. package/dist/src/proxmox/index.js.map +1 -0
  99. package/dist/src/proxmox/mock.d.ts +40 -0
  100. package/dist/src/proxmox/mock.d.ts.map +1 -0
  101. package/dist/src/proxmox/mock.js +362 -0
  102. package/dist/src/proxmox/mock.js.map +1 -0
  103. package/dist/src/proxmox/poller.d.ts +29 -0
  104. package/dist/src/proxmox/poller.d.ts.map +1 -0
  105. package/dist/src/proxmox/poller.js +107 -0
  106. package/dist/src/proxmox/poller.js.map +1 -0
  107. package/dist/src/server/index.d.ts +2 -0
  108. package/dist/src/server/index.d.ts.map +1 -0
  109. package/dist/src/server/index.js +2 -0
  110. package/dist/src/server/index.js.map +1 -0
  111. package/dist/src/server/mcp-server.d.ts +5 -0
  112. package/dist/src/server/mcp-server.d.ts.map +1 -0
  113. package/dist/src/server/mcp-server.js +5 -0
  114. package/dist/src/server/mcp-server.js.map +1 -0
  115. package/dist/src/server.d.ts +35 -0
  116. package/dist/src/server.d.ts.map +1 -0
  117. package/dist/src/server.js +95 -0
  118. package/dist/src/server.js.map +1 -0
  119. package/dist/src/slot/gc.d.ts +42 -0
  120. package/dist/src/slot/gc.d.ts.map +1 -0
  121. package/dist/src/slot/gc.js +79 -0
  122. package/dist/src/slot/gc.js.map +1 -0
  123. package/dist/src/slot/index.d.ts +4 -0
  124. package/dist/src/slot/index.d.ts.map +1 -0
  125. package/dist/src/slot/index.js +4 -0
  126. package/dist/src/slot/index.js.map +1 -0
  127. package/dist/src/slot/manager.d.ts +92 -0
  128. package/dist/src/slot/manager.d.ts.map +1 -0
  129. package/dist/src/slot/manager.js +650 -0
  130. package/dist/src/slot/manager.js.map +1 -0
  131. package/dist/src/slot/types.d.ts +184 -0
  132. package/dist/src/slot/types.d.ts.map +1 -0
  133. package/dist/src/slot/types.js +67 -0
  134. package/dist/src/slot/types.js.map +1 -0
  135. package/dist/src/tools/appliance-exec.d.ts +81 -0
  136. package/dist/src/tools/appliance-exec.d.ts.map +1 -0
  137. package/dist/src/tools/appliance-exec.js +134 -0
  138. package/dist/src/tools/appliance-exec.js.map +1 -0
  139. package/dist/src/tools/claim-slot.d.ts +5 -0
  140. package/dist/src/tools/claim-slot.d.ts.map +1 -0
  141. package/dist/src/tools/claim-slot.js +5 -0
  142. package/dist/src/tools/claim-slot.js.map +1 -0
  143. package/dist/src/tools/index.d.ts +26 -0
  144. package/dist/src/tools/index.d.ts.map +1 -0
  145. package/dist/src/tools/index.js +63 -0
  146. package/dist/src/tools/index.js.map +1 -0
  147. package/dist/src/tools/list-hosts.d.ts +41 -0
  148. package/dist/src/tools/list-hosts.d.ts.map +1 -0
  149. package/dist/src/tools/list-hosts.js +91 -0
  150. package/dist/src/tools/list-hosts.js.map +1 -0
  151. package/dist/src/tools/list-inventory.d.ts +50 -0
  152. package/dist/src/tools/list-inventory.d.ts.map +1 -0
  153. package/dist/src/tools/list-inventory.js +112 -0
  154. package/dist/src/tools/list-inventory.js.map +1 -0
  155. package/dist/src/tools/list-slots.d.ts +5 -0
  156. package/dist/src/tools/list-slots.d.ts.map +1 -0
  157. package/dist/src/tools/list-slots.js +5 -0
  158. package/dist/src/tools/list-slots.js.map +1 -0
  159. package/dist/src/tools/provision-tools.d.ts +231 -0
  160. package/dist/src/tools/provision-tools.d.ts.map +1 -0
  161. package/dist/src/tools/provision-tools.js +289 -0
  162. package/dist/src/tools/provision-tools.js.map +1 -0
  163. package/dist/src/tools/release-slot.d.ts +5 -0
  164. package/dist/src/tools/release-slot.d.ts.map +1 -0
  165. package/dist/src/tools/release-slot.js +5 -0
  166. package/dist/src/tools/release-slot.js.map +1 -0
  167. package/dist/src/tools/slot-tools.d.ts +173 -0
  168. package/dist/src/tools/slot-tools.d.ts.map +1 -0
  169. package/dist/src/tools/slot-tools.js +296 -0
  170. package/dist/src/tools/slot-tools.js.map +1 -0
  171. package/dist/src/tools/vm-action.d.ts +189 -0
  172. package/dist/src/tools/vm-action.d.ts.map +1 -0
  173. package/dist/src/tools/vm-action.js +300 -0
  174. package/dist/src/tools/vm-action.js.map +1 -0
  175. package/dist/src/transports/index.d.ts +3 -0
  176. package/dist/src/transports/index.d.ts.map +1 -0
  177. package/dist/src/transports/index.js +3 -0
  178. package/dist/src/transports/index.js.map +1 -0
  179. package/dist/src/transports/sse.d.ts +38 -0
  180. package/dist/src/transports/sse.d.ts.map +1 -0
  181. package/dist/src/transports/sse.js +167 -0
  182. package/dist/src/transports/sse.js.map +1 -0
  183. package/dist/src/transports/stdio.d.ts +15 -0
  184. package/dist/src/transports/stdio.d.ts.map +1 -0
  185. package/dist/src/transports/stdio.js +34 -0
  186. package/dist/src/transports/stdio.js.map +1 -0
  187. package/dist/src/types/config.d.ts +17 -0
  188. package/dist/src/types/config.d.ts.map +1 -0
  189. package/dist/src/types/config.js +5 -0
  190. package/dist/src/types/config.js.map +1 -0
  191. package/dist/src/types/index.d.ts +4 -0
  192. package/dist/src/types/index.d.ts.map +1 -0
  193. package/dist/src/types/index.js +4 -0
  194. package/dist/src/types/index.js.map +1 -0
  195. package/dist/src/types/mcp.d.ts +38 -0
  196. package/dist/src/types/mcp.d.ts.map +1 -0
  197. package/dist/src/types/mcp.js +46 -0
  198. package/dist/src/types/mcp.js.map +1 -0
  199. package/dist/src/types/proxmox.d.ts +181 -0
  200. package/dist/src/types/proxmox.d.ts.map +1 -0
  201. package/dist/src/types/proxmox.js +5 -0
  202. package/dist/src/types/proxmox.js.map +1 -0
  203. package/dist/src/types/slot.d.ts +5 -0
  204. package/dist/src/types/slot.d.ts.map +1 -0
  205. package/dist/src/types/slot.js +5 -0
  206. package/dist/src/types/slot.js.map +1 -0
  207. package/dist/src/utils/formatters.d.ts +71 -0
  208. package/dist/src/utils/formatters.d.ts.map +1 -0
  209. package/dist/src/utils/formatters.js +480 -0
  210. package/dist/src/utils/formatters.js.map +1 -0
  211. package/dist/src/utils/index.d.ts +6 -0
  212. package/dist/src/utils/index.d.ts.map +1 -0
  213. package/dist/src/utils/index.js +6 -0
  214. package/dist/src/utils/index.js.map +1 -0
  215. package/dist/src/utils/logger.d.ts +28 -0
  216. package/dist/src/utils/logger.d.ts.map +1 -0
  217. package/dist/src/utils/logger.js +74 -0
  218. package/dist/src/utils/logger.js.map +1 -0
  219. package/dist/src/utils/mutex.d.ts +32 -0
  220. package/dist/src/utils/mutex.d.ts.map +1 -0
  221. package/dist/src/utils/mutex.js +86 -0
  222. package/dist/src/utils/mutex.js.map +1 -0
  223. package/dist/src/utils/redact.d.ts +6 -0
  224. package/dist/src/utils/redact.d.ts.map +1 -0
  225. package/dist/src/utils/redact.js +6 -0
  226. package/dist/src/utils/redact.js.map +1 -0
  227. package/dist/src/utils/redactor.d.ts +50 -0
  228. package/dist/src/utils/redactor.d.ts.map +1 -0
  229. package/dist/src/utils/redactor.js +170 -0
  230. package/dist/src/utils/redactor.js.map +1 -0
  231. package/package.json +75 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * MCP Tool: provision_vm
3
+ *
4
+ * Provisions a new disposable appliance VM on Proxmox VE or VMware ESXi from a template
5
+ * with IP/VLAN networking and auto-attached or pre-claimed 8GB slot lease.
6
+ */
7
+ import { z } from "zod";
8
+ import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
9
+ import { formatProvisionResult } from "../utils/formatters.js";
10
+ import { CapacityExceededError, GlobalCapacityExceededError, DatastoreCapacityExceededError, } from "../slot/types.js";
11
+ import { ProtectedVmViolationError } from "../guardrails/types.js";
12
+ export const ProvisionVmInputShape = {
13
+ sourceVmIdOrName: z
14
+ .union([z.string(), z.number()])
15
+ .optional()
16
+ .describe("Source VM template ID or template name to clone from (e.g. '9000', 'CT-ALMALINUX9-TEMPLATE', '102')."),
17
+ template: z
18
+ .union([z.string(), z.number()])
19
+ .optional()
20
+ .describe("Alias for sourceVmIdOrName."),
21
+ newVmName: z
22
+ .string()
23
+ .optional()
24
+ .describe("Name for the newly provisioned disposable VM (e.g. 'ct-appliance-uat-105')."),
25
+ name: z
26
+ .string()
27
+ .optional()
28
+ .describe("Alias for newVmName."),
29
+ newVmId: z
30
+ .union([z.string(), z.number()])
31
+ .optional()
32
+ .describe("Optional explicit VMID for Proxmox. Auto-allocated if omitted."),
33
+ vmid: z
34
+ .union([z.string(), z.number()])
35
+ .optional()
36
+ .describe("Alias for newVmId."),
37
+ targetHost: z
38
+ .string()
39
+ .optional()
40
+ .describe("Target hypervisor host ('proxmox-lab', 'proxmox-mini', 'esxi-intel-192-168-123-176', or omit for auto-placement)."),
41
+ host: z
42
+ .string()
43
+ .optional()
44
+ .describe("Alias for targetHost."),
45
+ hypervisorType: z
46
+ .enum(["proxmox", "esxi", "any"])
47
+ .optional()
48
+ .default("any")
49
+ .describe("Target hypervisor platform preference: 'proxmox', 'esxi', or 'any'."),
50
+ memoryBytes: z
51
+ .number()
52
+ .optional()
53
+ .describe("RAM allocation in bytes (default: 8GB / 8589934592)."),
54
+ memoryMb: z
55
+ .number()
56
+ .optional()
57
+ .describe("RAM allocation in MB (default: 8192 MB)."),
58
+ cpuCores: z
59
+ .number()
60
+ .int()
61
+ .min(1)
62
+ .max(32)
63
+ .optional()
64
+ .describe("Number of CPU cores (default: 2)."),
65
+ cores: z
66
+ .number()
67
+ .int()
68
+ .optional()
69
+ .describe("Alias for cpuCores."),
70
+ vlan: z
71
+ .number()
72
+ .int()
73
+ .min(1)
74
+ .max(4094)
75
+ .optional()
76
+ .describe("VLAN tag assignment (e.g. 124, 125)."),
77
+ ipAddress: z
78
+ .string()
79
+ .optional()
80
+ .describe("Static IP address assignment for the guest VM (e.g. '192.168.124.105')."),
81
+ macAddress: z
82
+ .string()
83
+ .optional()
84
+ .describe("Static MAC address assignment for the guest VM network interface."),
85
+ networkBridge: z
86
+ .string()
87
+ .optional()
88
+ .describe("Network bridge interface (e.g. 'vmbr0', 'VM Network')."),
89
+ storage: z
90
+ .string()
91
+ .optional()
92
+ .describe("Target storage pool / datastore name."),
93
+ linearIssue: z
94
+ .string()
95
+ .optional()
96
+ .describe("Linear issue key tracking this test VM (e.g. 'CTUAT-693')."),
97
+ slotClaimId: z
98
+ .string()
99
+ .optional()
100
+ .describe("Pre-claimed slot claim ID. If omitted, an 8GB slot lease is automatically acquired."),
101
+ startOnDeploy: z
102
+ .boolean()
103
+ .optional()
104
+ .default(true)
105
+ .describe("Whether to immediately power on the VM after cloning completes (default: true)."),
106
+ start: z
107
+ .boolean()
108
+ .optional()
109
+ .describe("Alias for startOnDeploy."),
110
+ tags: z
111
+ .union([z.array(z.string()), z.string()])
112
+ .optional()
113
+ .describe("Tags to attach to the VM (e.g. ['disposable', 'uat', '0.8.7-stable'])."),
114
+ requester: z
115
+ .string()
116
+ .optional()
117
+ .describe("Requester name or agent identifier."),
118
+ fullClone: z
119
+ .boolean()
120
+ .optional()
121
+ .default(true)
122
+ .describe("Whether to perform a full disk clone (default: true)."),
123
+ description: z
124
+ .string()
125
+ .optional()
126
+ .describe("Optional notes/description for the new VM."),
127
+ };
128
+ export const ProvisionVmInputSchema = z
129
+ .object(ProvisionVmInputShape)
130
+ .refine((data) => Boolean(data.sourceVmIdOrName || data.template), { message: "Either 'sourceVmIdOrName' or 'template' must be provided." })
131
+ .refine((data) => Boolean(data.newVmName || data.name), { message: "Either 'newVmName' or 'name' must be provided." });
132
+ export async function handleProvisionVm(rawArgs, context) {
133
+ let autoClaimId;
134
+ let slotClaim;
135
+ try {
136
+ const parseResult = ProvisionVmInputSchema.safeParse(rawArgs);
137
+ if (!parseResult.success) {
138
+ const errMsg = parseResult.error.errors.map((e) => `${e.path.join(".")}: ${e.message}`).join("; ");
139
+ return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, errMsg);
140
+ }
141
+ const args = parseResult.data;
142
+ const source = (args.sourceVmIdOrName ?? args.template);
143
+ const newName = (args.newVmName ?? args.name);
144
+ const targetHost = args.targetHost || args.host;
145
+ const newVmId = args.newVmId ?? args.vmid;
146
+ const linearIssue = args.linearIssue;
147
+ const requester = args.requester;
148
+ const startOnDeploy = args.start !== undefined ? args.start : args.startOnDeploy;
149
+ let parsedTags = [];
150
+ if (args.tags) {
151
+ if (Array.isArray(args.tags)) {
152
+ parsedTags = args.tags;
153
+ }
154
+ else if (typeof args.tags === "string") {
155
+ parsedTags = args.tags.split(/[;, ]+/).map((t) => t.trim()).filter(Boolean);
156
+ }
157
+ }
158
+ // 1. Slot Lease Management: Use provided claim ID or automatically acquire one
159
+ let effectiveTargetHost = targetHost;
160
+ if (!effectiveTargetHost && context.hypervisorManager) {
161
+ const sourceFound = await context.hypervisorManager.findVm(source);
162
+ if (sourceFound) {
163
+ effectiveTargetHost = sourceFound.driver.hostName;
164
+ }
165
+ }
166
+ let claimId = args.slotClaimId;
167
+ if (!claimId) {
168
+ const claimResult = await context.slotManager.claimSlot({
169
+ tag: linearIssue || newName,
170
+ requester: requester || newName,
171
+ linearIssue: linearIssue || (newName.startsWith("CTUAT-") ? newName : undefined),
172
+ targetHost: effectiveTargetHost,
173
+ hypervisorType: args.hypervisorType,
174
+ durationMinutes: 60,
175
+ purpose: `Disposable test VM: ${newName}`,
176
+ });
177
+ autoClaimId = claimResult.claimId;
178
+ claimId = claimResult.claimId;
179
+ slotClaim = claimResult;
180
+ }
181
+ // 2. Perform VM Provisioning via MultiHypervisorManager
182
+ const hypervisorPref = args.hypervisorType === "any" ? undefined : args.hypervisorType;
183
+ const cloneParams = {
184
+ sourceVmIdOrName: source,
185
+ newVmName: newName,
186
+ newVmId: newVmId,
187
+ targetHost: effectiveTargetHost || (slotClaim ? String(slotClaim.hostId) : undefined),
188
+ hypervisorType: hypervisorPref,
189
+ fullClone: args.fullClone,
190
+ description: args.description || `Call Telemetry test VM (${linearIssue || "disposable"})`,
191
+ memoryBytes: args.memoryBytes || (args.memoryMb ? args.memoryMb * 1024 * 1024 : 8192 * 1024 * 1024),
192
+ cpuCores: args.cpuCores ?? args.cores ?? 2,
193
+ vlan: args.vlan,
194
+ ipAddress: args.ipAddress,
195
+ macAddress: args.macAddress,
196
+ networkBridge: args.networkBridge,
197
+ storage: args.storage,
198
+ linearIssue: linearIssue,
199
+ startOnDeploy: startOnDeploy,
200
+ tags: parsedTags,
201
+ requester: requester,
202
+ slotClaimId: claimId,
203
+ };
204
+ let provisionResult;
205
+ if (context.hypervisorManager) {
206
+ provisionResult = await context.hypervisorManager.provisionVm(cloneParams);
207
+ }
208
+ else if (context.proxmoxManager) {
209
+ // Fallback for standalone Proxmox mode
210
+ const hostId = (targetHost || "proxmox-mini");
211
+ const client = context.proxmoxManager.getClient(hostId);
212
+ const newVmidNum = typeof newVmId === "number" ? newVmId : parseInt(String(newVmId || "0"), 10);
213
+ const sourceVmidNum = typeof source === "number" ? source : parseInt(String(source), 10);
214
+ const targetVmid = newVmidNum > 0 ? newVmidNum : 105;
215
+ const cloneTask = await client.cloneVm(sourceVmidNum, targetVmid, newName, {
216
+ full: cloneParams.fullClone,
217
+ description: cloneParams.description,
218
+ });
219
+ if (startOnDeploy) {
220
+ try {
221
+ await client.startVm(targetVmid);
222
+ }
223
+ catch {
224
+ // ignore start error
225
+ }
226
+ }
227
+ provisionResult = {
228
+ vmId: String(targetVmid),
229
+ name: newName,
230
+ hostName: hostId,
231
+ hypervisor: "proxmox",
232
+ status: startOnDeploy ? "running" : "stopped",
233
+ ipAddresses: args.ipAddress ? [args.ipAddress] : [],
234
+ vlan: args.vlan,
235
+ linearIssue: linearIssue,
236
+ slotClaimId: claimId,
237
+ taskUpid: cloneTask.upid,
238
+ createdAt: new Date().toISOString(),
239
+ };
240
+ }
241
+ else {
242
+ throw new Error("No hypervisor manager available to provision VM.");
243
+ }
244
+ // 3. Attach VM ID/Name to the claimed slot
245
+ if (claimId) {
246
+ try {
247
+ await context.slotManager.attachVm(claimId, provisionResult.vmId, provisionResult.name);
248
+ }
249
+ catch (attachErr) {
250
+ console.error("[provision_vm] Warning attaching VM to slot lease:", attachErr);
251
+ }
252
+ }
253
+ const formatted = formatProvisionResult(provisionResult, slotClaim);
254
+ return {
255
+ content: [
256
+ {
257
+ type: "text",
258
+ text: formatted.markdown,
259
+ },
260
+ ],
261
+ structuredContent: formatted.structuredContent,
262
+ };
263
+ }
264
+ catch (error) {
265
+ // If we auto-acquired a slot and provisioning failed, roll back the slot lease
266
+ if (autoClaimId) {
267
+ try {
268
+ await context.slotManager.releaseSlot(autoClaimId);
269
+ }
270
+ catch {
271
+ // ignore rollback error
272
+ }
273
+ }
274
+ if (error instanceof ProtectedVmViolationError) {
275
+ return createToolErrorResult(ProxmoxErrorCode.PROTECTED_VM_ACTION_DENIED, error.message, {
276
+ vmid: error.vmid,
277
+ vmName: error.vmName,
278
+ action: error.action,
279
+ reason: error.reason,
280
+ });
281
+ }
282
+ if (error instanceof CapacityExceededError || error instanceof GlobalCapacityExceededError || error instanceof DatastoreCapacityExceededError) {
283
+ return createToolErrorResult(ProxmoxErrorCode.CAPACITY_EXCEEDED, error.message);
284
+ }
285
+ const msg = error instanceof Error ? error.message : String(error);
286
+ return createToolErrorResult(ProxmoxErrorCode.UPSTREAM_API_ERROR, msg);
287
+ }
288
+ }
289
+ //# sourceMappingURL=provision-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-tools.js","sourceRoot":"","sources":["../../../src/tools/provision-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,8BAA8B,GAE/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,gBAAgB,EAAE,CAAC;SAChB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,sGAAsG,CAAC;IACnH,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IACnC,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;IACjC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mHAAmH,CAAC;IAChI,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uBAAuB,CAAC;IACpC,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;SAChC,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,qEAAqE,CAAC;IAClF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;IACvD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,mCAAmC,CAAC;IAChD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,qBAAqB,CAAC;IAClC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yEAAyE,CAAC;IACtF,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IAClG,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,0BAA0B,CAAC;IACvC,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACxC,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;IACrF,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,uDAAuD,CAAC;IACpE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC,qBAAqB,CAAC;KAC7B,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,EACzD,EAAE,OAAO,EAAE,2DAA2D,EAAE,CACzE;KACA,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAC9C,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAC9D,CAAC;AAKJ,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA4B,EAC5B,OAAoB;IAEpB,IAAI,WAA+B,CAAC;IACpC,IAAI,SAAsC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnG,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAE,CAAC;QACzD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAEjF,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,IAAI,mBAAmB,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnE,IAAI,WAAW,EAAE,CAAC;gBAChB,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtD,GAAG,EAAE,WAAW,IAAI,OAAO;gBAC3B,SAAS,EAAE,SAAS,IAAI,OAAO;gBAC/B,WAAW,EAAE,WAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChF,UAAU,EAAE,mBAAmB;gBAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,eAAe,EAAE,EAAE;gBACnB,OAAO,EAAE,uBAAuB,OAAO,EAAE;aAC1C,CAAC,CAAC;YACH,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;YAClC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YAC9B,SAAS,GAAG,WAAW,CAAC;QAC1B,CAAC;QAED,wDAAwD;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACvF,MAAM,WAAW,GAA4D;YAC3E,gBAAgB,EAAE,MAAM;YACxB,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,cAAc,EAAE,cAAc;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,2BAA2B,WAAW,IAAI,YAAY,GAAG;YAC1F,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACnG,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,WAAW;YACxB,aAAa,EAAE,aAAa;YAC5B,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,OAAO;SACrB,CAAC;QAEF,IAAI,eAAkC,CAAC;QAEvC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,eAAe,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAClC,uCAAuC;YACvC,MAAM,MAAM,GAAG,CAAC,UAAU,IAAI,cAAc,CAAQ,CAAC;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAChG,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAEzF,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE;gBACzE,IAAI,EAAE,WAAW,CAAC,SAAS;gBAC3B,WAAW,EAAE,WAAW,CAAC,WAAW;aACrC,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;gBACvB,CAAC;YACH,CAAC;YAED,eAAe,GAAG;gBAChB,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC;gBACxB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAC7C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,WAAW;gBACxB,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,SAAS,CAAC,IAAI;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YAC1F,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,SAAS,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,CAAC,QAAQ;iBACzB;aACF;YACD,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;SAC/C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,+EAA+E;QAC/E,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,KAAK,YAAY,yBAAyB,EAAE,CAAC;YAC/C,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,EAAE;gBACvF,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,YAAY,qBAAqB,IAAI,KAAK,YAAY,2BAA2B,IAAI,KAAK,YAAY,8BAA8B,EAAE,CAAC;YAC9I,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compatibility re-export for release_slot tool
3
+ */
4
+ export * from "./slot-tools.js";
5
+ //# sourceMappingURL=release-slot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-slot.d.ts","sourceRoot":"","sources":["../../../src/tools/release-slot.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compatibility re-export for release_slot tool
3
+ */
4
+ export * from "./slot-tools.js";
5
+ //# sourceMappingURL=release-slot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-slot.js","sourceRoot":"","sources":["../../../src/tools/release-slot.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * MCP Tools: claim_slot, release_slot, and list_slots
3
+ *
4
+ * Manages 8GB appliance slot reservations, concurrency limits, lease TTLs,
5
+ * least-loaded placement, and Linear issue tracking across Proxmox VE and VMware ESXi.
6
+ */
7
+ import { z } from "zod";
8
+ import { CallToolResult } from "../types/mcp.js";
9
+ import { ToolContext } from "./list-hosts.js";
10
+ export declare const ClaimSlotInputShape: {
11
+ tag: z.ZodOptional<z.ZodString>;
12
+ requester: z.ZodOptional<z.ZodString>;
13
+ linearIssue: z.ZodOptional<z.ZodString>;
14
+ host: z.ZodDefault<z.ZodOptional<z.ZodString>>;
15
+ targetHost: z.ZodOptional<z.ZodString>;
16
+ hypervisorType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox", "esxi", "any"]>>>;
17
+ durationMinutes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
18
+ ttlMinutes: z.ZodOptional<z.ZodNumber>;
19
+ ttlSeconds: z.ZodOptional<z.ZodNumber>;
20
+ purpose: z.ZodOptional<z.ZodString>;
21
+ sessionId: z.ZodOptional<z.ZodString>;
22
+ };
23
+ export declare const ClaimSlotInputSchema: z.ZodEffects<z.ZodObject<{
24
+ tag: z.ZodOptional<z.ZodString>;
25
+ requester: z.ZodOptional<z.ZodString>;
26
+ linearIssue: z.ZodOptional<z.ZodString>;
27
+ host: z.ZodDefault<z.ZodOptional<z.ZodString>>;
28
+ targetHost: z.ZodOptional<z.ZodString>;
29
+ hypervisorType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox", "esxi", "any"]>>>;
30
+ durationMinutes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
31
+ ttlMinutes: z.ZodOptional<z.ZodNumber>;
32
+ ttlSeconds: z.ZodOptional<z.ZodNumber>;
33
+ purpose: z.ZodOptional<z.ZodString>;
34
+ sessionId: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ host: string;
37
+ hypervisorType: "proxmox" | "esxi" | "any";
38
+ durationMinutes: number;
39
+ linearIssue?: string | undefined;
40
+ tag?: string | undefined;
41
+ ttlMinutes?: number | undefined;
42
+ requester?: string | undefined;
43
+ ttlSeconds?: number | undefined;
44
+ purpose?: string | undefined;
45
+ sessionId?: string | undefined;
46
+ targetHost?: string | undefined;
47
+ }, {
48
+ host?: string | undefined;
49
+ linearIssue?: string | undefined;
50
+ hypervisorType?: "proxmox" | "esxi" | "any" | undefined;
51
+ tag?: string | undefined;
52
+ durationMinutes?: number | undefined;
53
+ ttlMinutes?: number | undefined;
54
+ requester?: string | undefined;
55
+ ttlSeconds?: number | undefined;
56
+ purpose?: string | undefined;
57
+ sessionId?: string | undefined;
58
+ targetHost?: string | undefined;
59
+ }>, {
60
+ host: string;
61
+ hypervisorType: "proxmox" | "esxi" | "any";
62
+ durationMinutes: number;
63
+ linearIssue?: string | undefined;
64
+ tag?: string | undefined;
65
+ ttlMinutes?: number | undefined;
66
+ requester?: string | undefined;
67
+ ttlSeconds?: number | undefined;
68
+ purpose?: string | undefined;
69
+ sessionId?: string | undefined;
70
+ targetHost?: string | undefined;
71
+ }, {
72
+ host?: string | undefined;
73
+ linearIssue?: string | undefined;
74
+ hypervisorType?: "proxmox" | "esxi" | "any" | undefined;
75
+ tag?: string | undefined;
76
+ durationMinutes?: number | undefined;
77
+ ttlMinutes?: number | undefined;
78
+ requester?: string | undefined;
79
+ ttlSeconds?: number | undefined;
80
+ purpose?: string | undefined;
81
+ sessionId?: string | undefined;
82
+ targetHost?: string | undefined;
83
+ }>;
84
+ export type ClaimSlotInput = z.infer<typeof ClaimSlotInputSchema>;
85
+ export type ClaimSlotRawInput = z.input<typeof ClaimSlotInputSchema>;
86
+ export declare function handleClaimSlot(rawArgs: ClaimSlotRawInput, context: ToolContext): Promise<CallToolResult>;
87
+ export declare const ReleaseSlotInputShape: {
88
+ claimId: z.ZodOptional<z.ZodString>;
89
+ tag: z.ZodOptional<z.ZodString>;
90
+ requester: z.ZodOptional<z.ZodString>;
91
+ linearIssue: z.ZodOptional<z.ZodString>;
92
+ slotId: z.ZodOptional<z.ZodString>;
93
+ sessionId: z.ZodOptional<z.ZodString>;
94
+ destroyVm: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
95
+ };
96
+ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
97
+ claimId: z.ZodOptional<z.ZodString>;
98
+ tag: z.ZodOptional<z.ZodString>;
99
+ requester: z.ZodOptional<z.ZodString>;
100
+ linearIssue: z.ZodOptional<z.ZodString>;
101
+ slotId: z.ZodOptional<z.ZodString>;
102
+ sessionId: z.ZodOptional<z.ZodString>;
103
+ destroyVm: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ destroyVm: boolean;
106
+ linearIssue?: string | undefined;
107
+ claimId?: string | undefined;
108
+ slotId?: string | undefined;
109
+ tag?: string | undefined;
110
+ requester?: string | undefined;
111
+ sessionId?: string | undefined;
112
+ }, {
113
+ linearIssue?: string | undefined;
114
+ claimId?: string | undefined;
115
+ slotId?: string | undefined;
116
+ tag?: string | undefined;
117
+ requester?: string | undefined;
118
+ sessionId?: string | undefined;
119
+ destroyVm?: boolean | undefined;
120
+ }>, {
121
+ destroyVm: boolean;
122
+ linearIssue?: string | undefined;
123
+ claimId?: string | undefined;
124
+ slotId?: string | undefined;
125
+ tag?: string | undefined;
126
+ requester?: string | undefined;
127
+ sessionId?: string | undefined;
128
+ }, {
129
+ linearIssue?: string | undefined;
130
+ claimId?: string | undefined;
131
+ slotId?: string | undefined;
132
+ tag?: string | undefined;
133
+ requester?: string | undefined;
134
+ sessionId?: string | undefined;
135
+ destroyVm?: boolean | undefined;
136
+ }>;
137
+ export type ReleaseSlotInput = z.infer<typeof ReleaseSlotInputSchema>;
138
+ export type ReleaseSlotRawInput = z.input<typeof ReleaseSlotInputSchema>;
139
+ export declare function handleReleaseSlot(rawArgs: ReleaseSlotRawInput, context: ToolContext): Promise<CallToolResult>;
140
+ export declare const ListSlotsInputShape: {
141
+ host: z.ZodDefault<z.ZodOptional<z.ZodString>>;
142
+ hypervisorType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox", "esxi", "any"]>>>;
143
+ tag: z.ZodOptional<z.ZodString>;
144
+ requester: z.ZodOptional<z.ZodString>;
145
+ linearIssue: z.ZodOptional<z.ZodString>;
146
+ activeOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
147
+ };
148
+ export declare const ListSlotsInputSchema: z.ZodObject<{
149
+ host: z.ZodDefault<z.ZodOptional<z.ZodString>>;
150
+ hypervisorType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox", "esxi", "any"]>>>;
151
+ tag: z.ZodOptional<z.ZodString>;
152
+ requester: z.ZodOptional<z.ZodString>;
153
+ linearIssue: z.ZodOptional<z.ZodString>;
154
+ activeOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
155
+ }, "strip", z.ZodTypeAny, {
156
+ host: string;
157
+ hypervisorType: "proxmox" | "esxi" | "any";
158
+ activeOnly: boolean;
159
+ linearIssue?: string | undefined;
160
+ tag?: string | undefined;
161
+ requester?: string | undefined;
162
+ }, {
163
+ host?: string | undefined;
164
+ linearIssue?: string | undefined;
165
+ hypervisorType?: "proxmox" | "esxi" | "any" | undefined;
166
+ tag?: string | undefined;
167
+ requester?: string | undefined;
168
+ activeOnly?: boolean | undefined;
169
+ }>;
170
+ export type ListSlotsInput = z.infer<typeof ListSlotsInputSchema>;
171
+ export type ListSlotsRawInput = z.input<typeof ListSlotsInputSchema>;
172
+ export declare function handleListSlots(rawArgs: ListSlotsRawInput | undefined, context: ToolContext): Promise<CallToolResult>;
173
+ //# sourceMappingURL=slot-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/slot-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAc9C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAyD/B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAErE,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAyEzB;AAMD,eAAO,MAAM,qBAAqB;;;;;;;;CA8BjC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEJ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEzE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA4DzB;AAMD,eAAO,MAAM,mBAAmB;;;;;;;CA4B/B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAAgC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAErE,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,YAAK,EAC/B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA8BzB"}