@calltelemetry/ct-lab-mcp 0.8.22 → 0.8.24

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 (42) hide show
  1. package/README.md +112 -0
  2. package/dist/src/canonical/bridge.d.ts +6 -0
  3. package/dist/src/canonical/bridge.d.ts.map +1 -1
  4. package/dist/src/canonical/bridge.js +90 -9
  5. package/dist/src/canonical/bridge.js.map +1 -1
  6. package/dist/src/credentials/resolver.d.ts +7 -1
  7. package/dist/src/credentials/resolver.d.ts.map +1 -1
  8. package/dist/src/credentials/resolver.js +83 -0
  9. package/dist/src/credentials/resolver.js.map +1 -1
  10. package/dist/src/credentials/types.d.ts +7 -0
  11. package/dist/src/credentials/types.d.ts.map +1 -1
  12. package/dist/src/server.d.ts.map +1 -1
  13. package/dist/src/server.js +3 -1
  14. package/dist/src/server.js.map +1 -1
  15. package/dist/src/tools/canonical-guard.d.ts +28 -0
  16. package/dist/src/tools/canonical-guard.d.ts.map +1 -1
  17. package/dist/src/tools/canonical-guard.js +108 -0
  18. package/dist/src/tools/canonical-guard.js.map +1 -1
  19. package/dist/src/tools/credential-status.d.ts.map +1 -1
  20. package/dist/src/tools/credential-status.js +29 -3
  21. package/dist/src/tools/credential-status.js.map +1 -1
  22. package/dist/src/tools/index.d.ts +1 -0
  23. package/dist/src/tools/index.d.ts.map +1 -1
  24. package/dist/src/tools/index.js +15 -8
  25. package/dist/src/tools/index.js.map +1 -1
  26. package/dist/src/tools/lab-dev.d.ts +711 -0
  27. package/dist/src/tools/lab-dev.d.ts.map +1 -0
  28. package/dist/src/tools/lab-dev.js +508 -0
  29. package/dist/src/tools/lab-dev.js.map +1 -0
  30. package/dist/src/tools/provision-tools.d.ts +36 -0
  31. package/dist/src/tools/provision-tools.d.ts.map +1 -1
  32. package/dist/src/tools/provision-tools.js +37 -4
  33. package/dist/src/tools/provision-tools.js.map +1 -1
  34. package/dist/src/tools/vm-cleanup.d.ts +21 -0
  35. package/dist/src/tools/vm-cleanup.d.ts.map +1 -1
  36. package/dist/src/tools/vm-cleanup.js +233 -2
  37. package/dist/src/tools/vm-cleanup.js.map +1 -1
  38. package/dist/src/tools/vm-repair.d.ts +98 -0
  39. package/dist/src/tools/vm-repair.d.ts.map +1 -0
  40. package/dist/src/tools/vm-repair.js +60 -0
  41. package/dist/src/tools/vm-repair.js.map +1 -0
  42. package/package.json +1 -1
@@ -11,6 +11,237 @@
11
11
  import { z } from "zod";
12
12
  import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
13
13
  import { canonicalOperationBlocked, runCanonicalOperation } from "./canonical-guard.js";
14
+ const CANONICAL_PROXMOX_HOST_ID = /^proxmox-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
15
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
16
+ function asRecord(value) {
17
+ return value && typeof value === "object" && !Array.isArray(value)
18
+ ? value
19
+ : undefined;
20
+ }
21
+ function nonEmptyExactString(value) {
22
+ if (typeof value !== "string" || value.length === 0 || value.trim() !== value)
23
+ return undefined;
24
+ return value;
25
+ }
26
+ function identityCoordinates(item) {
27
+ const row = asRecord(item);
28
+ if (!row || row.hypervisor !== undefined && row.hypervisor !== "proxmox")
29
+ return undefined;
30
+ const hostAssetId = nonEmptyExactString(row.host_asset_id);
31
+ if (!hostAssetId || !CANONICAL_PROXMOX_HOST_ID.test(hostAssetId))
32
+ return undefined;
33
+ const identity = asRecord(row.identity);
34
+ if (!identity || typeof identity.vmid !== "number" || !Number.isSafeInteger(identity.vmid) || identity.vmid <= 0) {
35
+ return undefined;
36
+ }
37
+ const instanceUuid = nonEmptyExactString(identity.instance_uuid);
38
+ const smbiosUuid = nonEmptyExactString(identity.smbios_uuid);
39
+ if (instanceUuid && smbiosUuid && instanceUuid !== smbiosUuid)
40
+ return undefined;
41
+ const uuid = instanceUuid || smbiosUuid;
42
+ if (!uuid || !UUID.test(uuid))
43
+ return undefined;
44
+ return { hostAssetId, vmid: identity.vmid, uuid };
45
+ }
46
+ function identityKey(item) {
47
+ const identity = identityCoordinates(item);
48
+ return identity
49
+ ? `untracked:${identity.hostAssetId}:${identity.vmid}:${identity.uuid}`
50
+ : undefined;
51
+ }
52
+ /**
53
+ * Return the canonical cleanup confirmation key only for an eligible,
54
+ * untracked Proxmox row whose complete structured identity is present.
55
+ * Tracked asset IDs, ESXi rows, protected/ineligible rows, and ambiguous or
56
+ * malformed identities deliberately return undefined.
57
+ */
58
+ export function canonicalCleanupConfirmKey(item) {
59
+ const row = asRecord(item);
60
+ if (!row || row.asset_id !== undefined && row.asset_id !== null && row.asset_id !== "")
61
+ return undefined;
62
+ if (row.delete_ready !== true || row.protected !== false)
63
+ return undefined;
64
+ return identityKey(row);
65
+ }
66
+ function candidateKeys(value, exactSelection = false) {
67
+ if (!Array.isArray(value))
68
+ return { reason: "cleanup_candidates_invalid" };
69
+ const keys = [];
70
+ const seen = new Set();
71
+ const seenTargets = new Map();
72
+ for (const item of value) {
73
+ const row = asRecord(item);
74
+ if (exactSelection && !canonicalCleanupConfirmKey(item)) {
75
+ return { reason: "cleanup_selection_invalid" };
76
+ }
77
+ // Tracked asset IDs and ESXi entries have different canonical
78
+ // confirmation forms. They are intentionally not projected here.
79
+ if (!row || row.asset_id !== undefined && row.asset_id !== null && row.asset_id !== "")
80
+ continue;
81
+ if (row.hypervisor === "esxi")
82
+ continue;
83
+ // Only delete-ready, unprotected entries are candidates. Ignore other
84
+ // rows rather than accidentally manufacturing a destructive key.
85
+ if (row.delete_ready !== true || row.protected !== false)
86
+ continue;
87
+ const key = canonicalCleanupConfirmKey(item);
88
+ if (!key)
89
+ return { reason: "cleanup_candidates_invalid" };
90
+ const identity = identityCoordinates(item);
91
+ if (!identity)
92
+ return { reason: "cleanup_candidates_invalid" };
93
+ const target = `${identity.hostAssetId}:${identity.vmid}`;
94
+ const priorUuid = seenTargets.get(target);
95
+ if (priorUuid && priorUuid !== identity.uuid.toLowerCase()) {
96
+ return { reason: "cleanup_candidates_ambiguous" };
97
+ }
98
+ seenTargets.set(target, identity.uuid.toLowerCase());
99
+ if (seen.has(key))
100
+ return { reason: "cleanup_candidates_ambiguous" };
101
+ seen.add(key);
102
+ keys.push(key);
103
+ }
104
+ return { keys };
105
+ }
106
+ function allClassifiedKeys(value) {
107
+ if (!Array.isArray(value))
108
+ return { keys: [] };
109
+ const keys = [];
110
+ const seen = new Set();
111
+ const seenTargets = new Map();
112
+ for (const item of value) {
113
+ const row = asRecord(item);
114
+ if (!row || (row.asset_id !== undefined && row.asset_id !== null && row.asset_id !== ""))
115
+ continue;
116
+ // ESXi leftovers intentionally have no positive VMID and cannot produce
117
+ // this Proxmox confirmation form; they do not invalidate Proxmox rows.
118
+ if (row.hypervisor === "esxi")
119
+ continue;
120
+ const identity = asRecord(row.identity);
121
+ // The canonical cleanup schema omits `hypervisor` from classified rows;
122
+ // rows with no positive VMID are therefore unsupported (normally ESXi).
123
+ // For rows that do have a structured Proxmox identity, inspect even
124
+ // protected/ineligible entries so an eligible duplicate cannot be treated
125
+ // as unambiguous.
126
+ if (!identity || identity.vmid === null || identity.vmid === undefined)
127
+ continue;
128
+ const key = identityKey(row);
129
+ if (!key)
130
+ return { reason: "cleanup_candidates_invalid" };
131
+ const identityCoordinatesValue = identityCoordinates(row);
132
+ if (!identityCoordinatesValue)
133
+ return { reason: "cleanup_candidates_invalid" };
134
+ const target = `${identityCoordinatesValue.hostAssetId}:${identityCoordinatesValue.vmid}`;
135
+ const priorUuid = seenTargets.get(target);
136
+ if (priorUuid && priorUuid !== identityCoordinatesValue.uuid.toLowerCase()) {
137
+ return { reason: "cleanup_candidates_ambiguous" };
138
+ }
139
+ seenTargets.set(target, identityCoordinatesValue.uuid.toLowerCase());
140
+ if (seen.has(key))
141
+ return { reason: "cleanup_candidates_ambiguous" };
142
+ seen.add(key);
143
+ keys.push(key);
144
+ }
145
+ return { keys };
146
+ }
147
+ /**
148
+ * Project canonical cleanup's structured candidates into the exact
149
+ * `confirmAssets` value accepted by the next cleanup call. This never reads
150
+ * `selected_keys`/`required_confirmations`; those are redacted transport
151
+ * strings and are intentionally not confirmation authority.
152
+ */
153
+ export function deriveCanonicalCleanupConfirmations(value) {
154
+ const payload = asRecord(value);
155
+ if (!payload || payload.schema !== "calltelemetry-lab-vm-cleanup/v1") {
156
+ return { status: "unavailable", reason: "cleanup_result_missing" };
157
+ }
158
+ const classified = allClassifiedKeys(payload.vms);
159
+ if (classified.reason)
160
+ return { status: "unavailable", reason: classified.reason };
161
+ const eligibleRows = Array.isArray(payload.delete_ready) ? payload.delete_ready : undefined;
162
+ const eligible = candidateKeys(eligibleRows);
163
+ if (eligible.reason || !eligible.keys) {
164
+ return { status: "unavailable", reason: eligible.reason || "cleanup_candidates_invalid" };
165
+ }
166
+ if (eligibleRows && eligible.keys.length === 0 && eligibleRows.length > 0) {
167
+ return { status: "unavailable", reason: "cleanup_no_structured_untracked_targets" };
168
+ }
169
+ const hasSelection = Object.prototype.hasOwnProperty.call(payload, "selected_delete_ready");
170
+ const selectedRows = hasSelection && Array.isArray(payload.selected_delete_ready)
171
+ ? payload.selected_delete_ready
172
+ : undefined;
173
+ const selected = hasSelection ? candidateKeys(selectedRows, true) : { keys: eligible.keys };
174
+ if (selected.reason || !selected.keys) {
175
+ return { status: "unavailable", reason: selected.reason || "cleanup_selection_invalid" };
176
+ }
177
+ if (hasSelection && selectedRows && selected.keys.length === 0 && selectedRows.length > 0) {
178
+ return { status: "unavailable", reason: "cleanup_no_structured_untracked_targets" };
179
+ }
180
+ const eligibleSet = new Set(eligible.keys);
181
+ if (selected.keys.some((key) => !eligibleSet.has(key))) {
182
+ return { status: "unavailable", reason: "cleanup_selection_not_eligible" };
183
+ }
184
+ // Every projected eligible identity must agree with the full classification,
185
+ // including protection and eligibility. Never trust a contradictory copy
186
+ // from a convenience list or silently reduce an explicit selection.
187
+ if (eligible.keys.length > 0) {
188
+ if (!Array.isArray(payload.vms)) {
189
+ return { status: "unavailable", reason: "cleanup_candidates_invalid" };
190
+ }
191
+ const classifiedEligible = new Set(payload.vms.map(canonicalCleanupConfirmKey).filter(Boolean));
192
+ if (eligible.keys.some((key) => !classifiedEligible.has(key))) {
193
+ return { status: "unavailable", reason: "cleanup_candidates_ambiguous" };
194
+ }
195
+ }
196
+ if (selected.keys.length === 0) {
197
+ return {
198
+ status: "empty",
199
+ scope: hasSelection ? "selected" : "eligible",
200
+ keys: [],
201
+ confirmAssets: "",
202
+ };
203
+ }
204
+ return {
205
+ status: "available",
206
+ scope: hasSelection ? "selected" : "eligible",
207
+ keys: selected.keys,
208
+ confirmAssets: selected.keys.join(","),
209
+ };
210
+ }
211
+ function withCleanupConfirmations(result) {
212
+ if (result.isError || !result.structuredContent || typeof result.structuredContent !== "object")
213
+ return result;
214
+ const payload = result.structuredContent;
215
+ if (payload.operation !== "list_expired_vms" && payload.operation !== "cleanup_expired_vms")
216
+ return result;
217
+ const canonicalResult = asRecord(payload.result);
218
+ const confirmation = deriveCanonicalCleanupConfirmations(canonicalResult);
219
+ const projectedResult = {
220
+ ...(canonicalResult || {}),
221
+ cleanup_confirmation: confirmation,
222
+ };
223
+ if (confirmation.status === "available") {
224
+ projectedResult.safe_confirm_assets = confirmation.confirmAssets;
225
+ projectedResult.safe_confirm_keys = confirmation.keys;
226
+ }
227
+ const content = confirmation.status === "available" && confirmation.confirmAssets
228
+ ? [
229
+ ...result.content,
230
+ {
231
+ type: "text",
232
+ text: `Safe canonical cleanup confirmation (structured identity): ${confirmation.confirmAssets}`,
233
+ },
234
+ ]
235
+ : result.content;
236
+ return {
237
+ ...result,
238
+ content,
239
+ structuredContent: {
240
+ ...payload,
241
+ result: projectedResult,
242
+ },
243
+ };
244
+ }
14
245
  export const ListExpiredVmsInputShape = {
15
246
  warnHours: z
16
247
  .number()
@@ -99,7 +330,7 @@ export async function handleListExpiredVms(rawArgs = {}, context) {
99
330
  return canonicalOperationBlocked("list_expired_vms", "classify expired/dead leftover VMs through canonical lab-inventory vm cleanup");
100
331
  }
101
332
  const args = ListExpiredVmsInputSchema.parse(rawArgs);
102
- return runCanonicalOperation(context.canonicalBridge, "list_expired_vms", cleanupCommand({ ...args, deleteTerminalIssues: true, dryRun: true }));
333
+ return withCleanupConfirmations(await runCanonicalOperation(context.canonicalBridge, "list_expired_vms", cleanupCommand({ ...args, deleteTerminalIssues: true, dryRun: true })));
103
334
  }
104
335
  export async function handleCleanupExpiredVms(rawArgs = {}, context) {
105
336
  if (!context.canonicalBridge) {
@@ -110,7 +341,7 @@ export async function handleCleanupExpiredVms(rawArgs = {}, context) {
110
341
  if (!args.dryRun && args.apply !== false && !args.confirmAssets) {
111
342
  throw new Error("confirmAssets is required for cleanup mutation; use dryRun for classification");
112
343
  }
113
- return runCanonicalOperation(context.canonicalBridge, "cleanup_expired_vms", cleanupCommand(args));
344
+ return withCleanupConfirmations(await runCanonicalOperation(context.canonicalBridge, "cleanup_expired_vms", cleanupCommand(args)));
114
345
  }
115
346
  catch (error) {
116
347
  const msg = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"vm-cleanup.js","sourceRoot":"","sources":["../../../src/tools/vm-cleanup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vm-cleanup.js","sourceRoot":"","sources":["../../../src/tools/vm-cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /** Exact pending-provision credential recovery. No direct guest fallback. */
2
+ import { z } from "zod";
3
+ import { CallToolResult } from "../types/mcp.js";
4
+ import { ToolContext } from "./list-hosts.js";
5
+ export declare const VmRepairInputObjectSchema: z.ZodObject<{
6
+ assetId: z.ZodString;
7
+ leaseId: z.ZodString;
8
+ linearIssue: z.ZodString;
9
+ operationId: z.ZodString;
10
+ provisionOperationId: z.ZodString;
11
+ confirmSmbiosUuid: z.ZodString;
12
+ apply: z.ZodDefault<z.ZodBoolean>;
13
+ reconcile: z.ZodDefault<z.ZodBoolean>;
14
+ restartConsole: z.ZodDefault<z.ZodBoolean>;
15
+ confirmAssetId: z.ZodOptional<z.ZodString>;
16
+ }, "strict", z.ZodTypeAny, {
17
+ linearIssue: string;
18
+ leaseId: string;
19
+ assetId: string;
20
+ operationId: string;
21
+ apply: boolean;
22
+ confirmSmbiosUuid: string;
23
+ provisionOperationId: string;
24
+ reconcile: boolean;
25
+ restartConsole: boolean;
26
+ confirmAssetId?: string | undefined;
27
+ }, {
28
+ linearIssue: string;
29
+ leaseId: string;
30
+ assetId: string;
31
+ operationId: string;
32
+ confirmSmbiosUuid: string;
33
+ provisionOperationId: string;
34
+ apply?: boolean | undefined;
35
+ confirmAssetId?: string | undefined;
36
+ reconcile?: boolean | undefined;
37
+ restartConsole?: boolean | undefined;
38
+ }>;
39
+ export declare const VmRepairInputSchema: z.ZodEffects<z.ZodObject<{
40
+ assetId: z.ZodString;
41
+ leaseId: z.ZodString;
42
+ linearIssue: z.ZodString;
43
+ operationId: z.ZodString;
44
+ provisionOperationId: z.ZodString;
45
+ confirmSmbiosUuid: z.ZodString;
46
+ apply: z.ZodDefault<z.ZodBoolean>;
47
+ reconcile: z.ZodDefault<z.ZodBoolean>;
48
+ restartConsole: z.ZodDefault<z.ZodBoolean>;
49
+ confirmAssetId: z.ZodOptional<z.ZodString>;
50
+ }, "strict", z.ZodTypeAny, {
51
+ linearIssue: string;
52
+ leaseId: string;
53
+ assetId: string;
54
+ operationId: string;
55
+ apply: boolean;
56
+ confirmSmbiosUuid: string;
57
+ provisionOperationId: string;
58
+ reconcile: boolean;
59
+ restartConsole: boolean;
60
+ confirmAssetId?: string | undefined;
61
+ }, {
62
+ linearIssue: string;
63
+ leaseId: string;
64
+ assetId: string;
65
+ operationId: string;
66
+ confirmSmbiosUuid: string;
67
+ provisionOperationId: string;
68
+ apply?: boolean | undefined;
69
+ confirmAssetId?: string | undefined;
70
+ reconcile?: boolean | undefined;
71
+ restartConsole?: boolean | undefined;
72
+ }>, {
73
+ linearIssue: string;
74
+ leaseId: string;
75
+ assetId: string;
76
+ operationId: string;
77
+ apply: boolean;
78
+ confirmSmbiosUuid: string;
79
+ provisionOperationId: string;
80
+ reconcile: boolean;
81
+ restartConsole: boolean;
82
+ confirmAssetId?: string | undefined;
83
+ }, {
84
+ linearIssue: string;
85
+ leaseId: string;
86
+ assetId: string;
87
+ operationId: string;
88
+ confirmSmbiosUuid: string;
89
+ provisionOperationId: string;
90
+ apply?: boolean | undefined;
91
+ confirmAssetId?: string | undefined;
92
+ reconcile?: boolean | undefined;
93
+ restartConsole?: boolean | undefined;
94
+ }>;
95
+ export type VmRepairInput = z.output<typeof VmRepairInputSchema>;
96
+ export declare function buildVmRepairCommand(args: VmRepairInput): string[];
97
+ export declare function handleVmRepair(raw: unknown, context: ToolContext): Promise<CallToolResult>;
98
+ //# sourceMappingURL=vm-repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-repair.d.ts","sourceRoot":"","sources":["../../../src/tools/vm-repair.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC;AAGZ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAWlE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhG"}
@@ -0,0 +1,60 @@
1
+ /** Exact pending-provision credential recovery. No direct guest fallback. */
2
+ import { z } from "zod";
3
+ import { createToolErrorResult } from "../types/mcp.js";
4
+ import { canonicalMode, canonicalOperationBlocked, runCanonicalOperation } from "./canonical-guard.js";
5
+ const operationId = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$/);
6
+ export const VmRepairInputObjectSchema = z.object({
7
+ assetId: z.string().regex(/^[a-z0-9][a-z0-9-]{7,127}$/),
8
+ leaseId: z.string().regex(/^lease-[A-Za-z0-9-]{1,120}$/),
9
+ linearIssue: z.string().regex(/^[A-Z][A-Z0-9]*-[1-9][0-9]*$/),
10
+ operationId,
11
+ provisionOperationId: operationId,
12
+ confirmSmbiosUuid: z.string().uuid(),
13
+ apply: z.boolean().default(false),
14
+ reconcile: z.boolean().default(false).describe("Reconcile the same journaled console-recovery operation using its retained material; never repeat a password reset."),
15
+ restartConsole: z.boolean().default(false).describe("Explicitly recover a silent console through one journaled graceful shutdown/start of the exact disposable VM. Requires apply and same-operation reconcile; never a force stop or a repeated password reset."),
16
+ confirmAssetId: z.string().optional(),
17
+ }).strict();
18
+ // Register the object shape for SDK discovery; cross-field policy remains
19
+ // enforced here by the handler before canonical dispatch.
20
+ export const VmRepairInputSchema = VmRepairInputObjectSchema.superRefine((value, ctx) => {
21
+ if (value.operationId === value.provisionOperationId) {
22
+ ctx.addIssue({ code: "custom", message: "Repair requires a separate operation ID." });
23
+ }
24
+ if (value.apply ? value.confirmAssetId !== value.assetId : value.confirmAssetId !== undefined) {
25
+ ctx.addIssue({ code: "custom", message: "Apply requires matching asset confirmation; omit it for a plan." });
26
+ }
27
+ if (value.reconcile && !value.apply) {
28
+ ctx.addIssue({ code: "custom", message: "Reconcile requires apply." });
29
+ }
30
+ if (value.restartConsole && (!value.apply || !value.reconcile)) {
31
+ ctx.addIssue({ code: "custom", message: "Console restart requires apply and same-operation reconcile." });
32
+ }
33
+ });
34
+ export function buildVmRepairCommand(args) {
35
+ const command = [
36
+ "vm", "repair", "--asset-id", args.assetId, "--lease-id", args.leaseId,
37
+ "--linear-issue", args.linearIssue, "--operation-id", args.operationId,
38
+ "--provision-operation-id", args.provisionOperationId,
39
+ "--confirm-smbios-uuid", args.confirmSmbiosUuid,
40
+ ];
41
+ if (args.apply)
42
+ command.push("--apply", "--confirm-asset-id", args.confirmAssetId);
43
+ if (args.reconcile)
44
+ command.push("--reconcile");
45
+ if (args.restartConsole)
46
+ command.push("--restart-console");
47
+ return command;
48
+ }
49
+ export async function handleVmRepair(raw, context) {
50
+ const parsed = VmRepairInputSchema.safeParse(raw);
51
+ if (!parsed.success) {
52
+ // Never echo unknown fields or caller values: this boundary accepts no secrets.
53
+ return createToolErrorResult("VALIDATION_ERROR", "Invalid exact-identity credential-repair request.");
54
+ }
55
+ if (!canonicalMode(context)) {
56
+ return canonicalOperationBlocked("vm_repair", "credential recovery requires the canonical pending journal and live lease authority");
57
+ }
58
+ return runCanonicalOperation(context.canonicalBridge, "vm_repair", buildVmRepairCommand(parsed.data));
59
+ }
60
+ //# sourceMappingURL=vm-repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-repair.js","sourceRoot":"","sources":["../../../src/tools/vm-repair.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/ct-lab-mcp",
3
- "version": "0.8.22",
3
+ "version": "0.8.24",
4
4
  "description": "Expanded Model Context Protocol (MCP) server for Call Telemetry lab, fleet, and appliance management across Proxmox VE and VMware ESXi.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",