@calltelemetry/ct-lab-mcp 0.8.14 → 0.8.15
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/README.md +14 -0
- package/dist/src/tools/host-maintenance-shutdown.d.ts +4 -4
- package/dist/src/tools/list-hosts.d.ts.map +1 -1
- package/dist/src/tools/list-hosts.js +145 -6
- package/dist/src/tools/list-hosts.js.map +1 -1
- package/dist/src/tools/list-inventory.d.ts.map +1 -1
- package/dist/src/tools/list-inventory.js +217 -20
- package/dist/src/tools/list-inventory.js.map +1 -1
- package/dist/src/tools/provision-tools.d.ts +8 -8
- package/dist/src/tools/quick-provision.d.ts +2 -2
- package/dist/src/tools/vm-action.d.ts +4 -4
- package/dist/src/tools/vm-cleanup.d.ts +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -182,6 +182,20 @@ operation inputs, and the CLI's dry-run / apply receipt workflow. Legacy
|
|
|
182
182
|
guest, storage, snapshot, CUBE lease, and appliance mutations that do not yet
|
|
183
183
|
have an identity-bound bridge still return `CANONICAL_OPERATION_REQUIRES_BRIDGE`.
|
|
184
184
|
|
|
185
|
+
Canonical host reads dispatch one identity-bound CLI discovery per requested
|
|
186
|
+
host. Multi-host reads keep successful host payloads and return
|
|
187
|
+
`partial: true` with structured `discovery_unavailable` warnings for failed
|
|
188
|
+
peers; an exact-host read, or a read where every requested host fails, remains
|
|
189
|
+
fail-closed. `list_inventory` consumes the canonical
|
|
190
|
+
`calltelemetry-lab-vm-inventory/v1` partial-discovery contract and may project
|
|
191
|
+
its rows by exact host or hypervisor without creating another inventory. Exact
|
|
192
|
+
host reads invoke `vm inventory --host-asset-id`, hypervisor reads invoke
|
|
193
|
+
`vm inventory --hypervisor`, and only all-scope reads invoke
|
|
194
|
+
`vm inventory --all`.
|
|
195
|
+
Warnings are preserved, with the current singleton ESXi warning bound to its
|
|
196
|
+
canonical host identity. Status, template, text, and tag projection remains
|
|
197
|
+
unsupported until those fields have an authoritative canonical CLI contract.
|
|
198
|
+
|
|
185
199
|
`lab_mission` is the bounded façade for `lab-inventory mission run`. It accepts
|
|
186
200
|
an immutable manifest path and canonical SHA-256, plans by default, and requires
|
|
187
201
|
the exact asset confirmation plus a clean registered executor checkout for
|
|
@@ -27,9 +27,9 @@ export declare const HostMaintenanceShutdownInputSchema: z.ZodEffects<z.ZodObjec
|
|
|
27
27
|
lockTimeoutSeconds: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
28
28
|
}, "strip", z.ZodTypeAny, {
|
|
29
29
|
reason: string;
|
|
30
|
+
hostAssetId: string;
|
|
30
31
|
operationId: string;
|
|
31
32
|
apply: boolean;
|
|
32
|
-
hostAssetId: string;
|
|
33
33
|
lockTimeoutSeconds: number;
|
|
34
34
|
guestShutdownTimeoutSeconds: number;
|
|
35
35
|
maintenanceTimeoutSeconds: number;
|
|
@@ -38,8 +38,8 @@ export declare const HostMaintenanceShutdownInputSchema: z.ZodEffects<z.ZodObjec
|
|
|
38
38
|
planDigest?: string | undefined;
|
|
39
39
|
}, {
|
|
40
40
|
reason: string;
|
|
41
|
-
operationId: string;
|
|
42
41
|
hostAssetId: string;
|
|
42
|
+
operationId: string;
|
|
43
43
|
apply?: boolean | undefined;
|
|
44
44
|
receiptFile?: string | undefined;
|
|
45
45
|
confirmHostAssetId?: string | undefined;
|
|
@@ -49,9 +49,9 @@ export declare const HostMaintenanceShutdownInputSchema: z.ZodEffects<z.ZodObjec
|
|
|
49
49
|
maintenanceTimeoutSeconds?: number | undefined;
|
|
50
50
|
}>, {
|
|
51
51
|
reason: string;
|
|
52
|
+
hostAssetId: string;
|
|
52
53
|
operationId: string;
|
|
53
54
|
apply: boolean;
|
|
54
|
-
hostAssetId: string;
|
|
55
55
|
lockTimeoutSeconds: number;
|
|
56
56
|
guestShutdownTimeoutSeconds: number;
|
|
57
57
|
maintenanceTimeoutSeconds: number;
|
|
@@ -60,8 +60,8 @@ export declare const HostMaintenanceShutdownInputSchema: z.ZodEffects<z.ZodObjec
|
|
|
60
60
|
planDigest?: string | undefined;
|
|
61
61
|
}, {
|
|
62
62
|
reason: string;
|
|
63
|
-
operationId: string;
|
|
64
63
|
hostAssetId: string;
|
|
64
|
+
operationId: string;
|
|
65
65
|
apply?: boolean | undefined;
|
|
66
66
|
receiptFile?: string | undefined;
|
|
67
67
|
confirmHostAssetId?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-hosts.d.ts","sourceRoot":"","sources":["../../../src/tools/list-hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"list-hosts.d.ts","sourceRoot":"","sources":["../../../src/tools/list-hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,0BAA0B,CAAC;IACzC,yEAAyE;IACzE,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,eAAO,MAAM,mBAAmB;;;;;CAqB/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;AA4MrE,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,YAAK,EAC/B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAsEzB"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* across Proxmox VE (proxmox-lab, proxmox-mini) and VMware ESXi (esxi-intel-192-168-123-176).
|
|
5
5
|
*/
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
7
|
+
import { ProxmoxErrorCode, createToolErrorResult, createToolSuccessResult, } from "../types/mcp.js";
|
|
8
8
|
import { formatHostSummary, formatUnifiedHostCapacities } from "../utils/formatters.js";
|
|
9
|
-
import { canonicalMode
|
|
9
|
+
import { canonicalMode } from "./canonical-guard.js";
|
|
10
10
|
export const ListHostsInputShape = {
|
|
11
11
|
host: z
|
|
12
12
|
.enum(["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176", "all"])
|
|
@@ -30,14 +30,153 @@ export const ListHostsInputShape = {
|
|
|
30
30
|
.describe("Output format: 'table' for human-readable markdown table, 'json' for raw structured JSON."),
|
|
31
31
|
};
|
|
32
32
|
export const ListHostsInputSchema = z.object(ListHostsInputShape);
|
|
33
|
+
const CANONICAL_HOSTS = [
|
|
34
|
+
{
|
|
35
|
+
hostAssetId: "proxmox-lab",
|
|
36
|
+
hypervisor: "proxmox",
|
|
37
|
+
command: ["proxmox", "discover", "--host-asset-id", "proxmox-lab", "--full"],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
hostAssetId: "proxmox-minis-lab",
|
|
41
|
+
hypervisor: "proxmox",
|
|
42
|
+
command: ["proxmox", "discover", "--host-asset-id", "proxmox-minis-lab", "--full"],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
hostAssetId: "esxi-intel-192-168-123-176",
|
|
46
|
+
hypervisor: "esxi",
|
|
47
|
+
command: ["esxi", "discover"],
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
function canonicalHostId(host) {
|
|
51
|
+
return host === "proxmox-mini" ? "proxmox-minis-lab" : host;
|
|
52
|
+
}
|
|
53
|
+
function selectedCanonicalHosts(args) {
|
|
54
|
+
const requestedHost = canonicalHostId(args.host);
|
|
55
|
+
return CANONICAL_HOSTS.filter((spec) => (requestedHost === "all" || spec.hostAssetId === requestedHost)
|
|
56
|
+
&& (args.hypervisorType === "all" || spec.hypervisor === args.hypervisorType));
|
|
57
|
+
}
|
|
58
|
+
function parseCanonicalJson(value) {
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(value);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function canonicalFailureMessage(stdout, stderr, hostAssetId) {
|
|
67
|
+
const processStderr = stderr.trim();
|
|
68
|
+
if (processStderr)
|
|
69
|
+
return processStderr;
|
|
70
|
+
const parsed = parseCanonicalJson(stdout);
|
|
71
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
72
|
+
const receipt = parsed;
|
|
73
|
+
const nestedStderr = typeof receipt.stderr === "string" ? receipt.stderr.trim() : "";
|
|
74
|
+
const nestedStdout = typeof receipt.stdout === "string" ? receipt.stdout.trim() : "";
|
|
75
|
+
if (nestedStderr || nestedStdout)
|
|
76
|
+
return nestedStderr || nestedStdout;
|
|
77
|
+
}
|
|
78
|
+
return stdout.trim() || `canonical discovery failed for ${hostAssetId}`;
|
|
79
|
+
}
|
|
80
|
+
function canonicalDiscoveryUnavailable(spec, result) {
|
|
81
|
+
if (result.timedOut)
|
|
82
|
+
return true;
|
|
83
|
+
const message = canonicalFailureMessage(result.stdout, result.stderr, spec.hostAssetId);
|
|
84
|
+
if (spec.hypervisor === "proxmox") {
|
|
85
|
+
return /\bProxmox ticket request transport failed\b/i.test(message)
|
|
86
|
+
|| /\bProxmox API (?:GET|POST|PUT|PATCH|DELETE) \/\S+ transport failed\b/i.test(message);
|
|
87
|
+
}
|
|
88
|
+
return /\bESXi SOAP request failed:/i.test(message)
|
|
89
|
+
&& /(?:connection (?:refused|reset|timed out)|timed out|no route to host|network is unreachable|temporary failure in name resolution|name or service not known|nodename nor servname provided|remote end closed connection)/i.test(message);
|
|
90
|
+
}
|
|
91
|
+
async function handleCanonicalListHosts(args, context) {
|
|
92
|
+
const bridge = context.canonicalBridge;
|
|
93
|
+
if (!bridge) {
|
|
94
|
+
return createToolErrorResult("CANONICAL_INVENTORY_UNAVAILABLE", "canonical lab bridge is not available", { operation: "list_hosts" });
|
|
95
|
+
}
|
|
96
|
+
const selected = selectedCanonicalHosts(args);
|
|
97
|
+
if (selected.length === 0) {
|
|
98
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, "The requested host does not belong to the requested hypervisor type.", {
|
|
99
|
+
host: canonicalHostId(args.host),
|
|
100
|
+
hypervisorType: args.hypervisorType,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
let outcomes;
|
|
104
|
+
try {
|
|
105
|
+
outcomes = await Promise.all(selected.map(async (spec) => ({
|
|
106
|
+
spec,
|
|
107
|
+
result: await bridge.run(spec.command),
|
|
108
|
+
})));
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return createToolErrorResult("CANONICAL_INVENTORY_UNAVAILABLE", error instanceof Error ? error.message : String(error), { operation: "list_hosts" });
|
|
112
|
+
}
|
|
113
|
+
const hosts = {};
|
|
114
|
+
const warnings = [];
|
|
115
|
+
const commands = [];
|
|
116
|
+
for (const { spec, result } of outcomes) {
|
|
117
|
+
commands.push(result.command);
|
|
118
|
+
if (result.exitCode !== 0) {
|
|
119
|
+
const message = canonicalFailureMessage(result.stdout, result.stderr, spec.hostAssetId);
|
|
120
|
+
if (!canonicalDiscoveryUnavailable(spec, result)) {
|
|
121
|
+
return createToolErrorResult("CANONICAL_OPERATION_FAILED", message, {
|
|
122
|
+
operation: "list_hosts",
|
|
123
|
+
hostAssetId: spec.hostAssetId,
|
|
124
|
+
hypervisor: spec.hypervisor,
|
|
125
|
+
command: result.command,
|
|
126
|
+
exitCode: result.exitCode,
|
|
127
|
+
...(result.signalCode ? { signalCode: result.signalCode } : {}),
|
|
128
|
+
...(result.timedOut ? { timedOut: true } : {}),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
warnings.push({
|
|
132
|
+
hypervisor: spec.hypervisor,
|
|
133
|
+
host_asset_id: spec.hostAssetId,
|
|
134
|
+
code: "discovery_unavailable",
|
|
135
|
+
message,
|
|
136
|
+
});
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const payload = parseCanonicalJson(result.stdout);
|
|
140
|
+
if (spec.hypervisor === "proxmox") {
|
|
141
|
+
const hostPayload = payload && typeof payload === "object" && !Array.isArray(payload)
|
|
142
|
+
? payload[spec.hostAssetId]
|
|
143
|
+
: undefined;
|
|
144
|
+
if (!hostPayload
|
|
145
|
+
|| typeof hostPayload !== "object"
|
|
146
|
+
|| Array.isArray(hostPayload)
|
|
147
|
+
|| hostPayload.host_asset_id !== spec.hostAssetId) {
|
|
148
|
+
return createToolErrorResult("CANONICAL_CONTRACT_INVALID", `canonical Proxmox discovery did not return exact host identity ${spec.hostAssetId}`, { operation: "list_hosts", hostAssetId: spec.hostAssetId, command: result.command });
|
|
149
|
+
}
|
|
150
|
+
hosts[spec.hostAssetId] = hostPayload;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (!Array.isArray(payload) || !payload.every((row) => row && typeof row === "object" && !Array.isArray(row))) {
|
|
154
|
+
return createToolErrorResult("CANONICAL_CONTRACT_INVALID", `canonical ESXi discovery returned an invalid payload for ${spec.hostAssetId}`, { operation: "list_hosts", hostAssetId: spec.hostAssetId, command: result.command });
|
|
155
|
+
}
|
|
156
|
+
hosts[spec.hostAssetId] = payload;
|
|
157
|
+
}
|
|
158
|
+
warnings.sort((left, right) => left.host_asset_id.localeCompare(right.host_asset_id));
|
|
159
|
+
const requestedHosts = selected.map((spec) => spec.hostAssetId);
|
|
160
|
+
const partial = warnings.length > 0;
|
|
161
|
+
if (Object.keys(hosts).length === 0) {
|
|
162
|
+
return createToolErrorResult("CANONICAL_OPERATION_FAILED", `canonical discovery failed for every requested host: ${requestedHosts.join(", ")}`, { operation: "list_hosts", requestedHosts, partial, warnings, commands });
|
|
163
|
+
}
|
|
164
|
+
const payload = {
|
|
165
|
+
success: true,
|
|
166
|
+
operation: "list_hosts",
|
|
167
|
+
requestedHosts,
|
|
168
|
+
partial,
|
|
169
|
+
result: hosts,
|
|
170
|
+
warnings,
|
|
171
|
+
commands,
|
|
172
|
+
};
|
|
173
|
+
return createToolSuccessResult(JSON.stringify(payload, null, 2), payload);
|
|
174
|
+
}
|
|
33
175
|
export async function handleListHosts(rawArgs = {}, context) {
|
|
34
176
|
try {
|
|
35
177
|
const args = ListHostsInputSchema.parse(rawArgs);
|
|
36
178
|
if (canonicalMode(context)) {
|
|
37
|
-
|
|
38
|
-
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, "Canonical list_hosts returns the complete inventory-bound host projection; filter the returned records without a second control plane.");
|
|
39
|
-
}
|
|
40
|
-
return runCanonicalOperation(context.canonicalBridge, "list_hosts", ["proxmox", "discover", "--all", "--full"]);
|
|
179
|
+
return handleCanonicalListHosts(args, context);
|
|
41
180
|
}
|
|
42
181
|
const hostFilter = args.host === "all" ? undefined : args.host;
|
|
43
182
|
if (context.hypervisorManager) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-hosts.js","sourceRoot":"","sources":["../../../src/tools/list-hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"list-hosts.js","sourceRoot":"","sources":["../../../src/tools/list-hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-inventory.d.ts","sourceRoot":"","sources":["../../../src/tools/list-inventory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"list-inventory.d.ts","sourceRoot":"","sources":["../../../src/tools/list-inventory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,eAAO,MAAM,uBAAuB;;;;;;;;;;CAyCnC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA+S7E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,YAAK,EACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAuEzB"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* protected flag, release version, and Linear-bound claim leases.
|
|
5
5
|
*/
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
7
|
+
import { ProxmoxErrorCode, createToolErrorResult, createToolSuccessResult, } from "../types/mcp.js";
|
|
8
8
|
import { formatUnifiedInventory } from "../utils/formatters.js";
|
|
9
|
-
import { canonicalMode
|
|
9
|
+
import { canonicalMode } from "./canonical-guard.js";
|
|
10
10
|
export const ListInventoryInputShape = {
|
|
11
11
|
hypervisor: z
|
|
12
12
|
.enum(["proxmox", "esxi", "all"])
|
|
@@ -50,28 +50,225 @@ export const ListInventoryInputShape = {
|
|
|
50
50
|
.describe("Output format: 'table' for human-readable markdown table, 'json' for raw structured JSON."),
|
|
51
51
|
};
|
|
52
52
|
export const ListInventoryInputSchema = z.object(ListInventoryInputShape);
|
|
53
|
+
const CANONICAL_HOST_IDS = new Set([
|
|
54
|
+
"proxmox-lab",
|
|
55
|
+
"proxmox-minis-lab",
|
|
56
|
+
"esxi-intel-192-168-123-176",
|
|
57
|
+
]);
|
|
58
|
+
const CANONICAL_ESXI_HOST_ID = "esxi-intel-192-168-123-176";
|
|
59
|
+
const CANONICAL_HOSTS_BY_HYPERVISOR = {
|
|
60
|
+
proxmox: ["proxmox-lab", "proxmox-minis-lab"],
|
|
61
|
+
esxi: ["esxi-intel-192-168-123-176"],
|
|
62
|
+
};
|
|
63
|
+
const CANONICAL_HYPERVISOR_BY_HOST = {
|
|
64
|
+
"proxmox-lab": "proxmox",
|
|
65
|
+
"proxmox-minis-lab": "proxmox",
|
|
66
|
+
"esxi-intel-192-168-123-176": "esxi",
|
|
67
|
+
};
|
|
68
|
+
const CanonicalInventoryIdentitySchema = z.object({
|
|
69
|
+
bios_uuid: z.string(),
|
|
70
|
+
instance_uuid: z.string(),
|
|
71
|
+
path: z.string(),
|
|
72
|
+
smbios_uuid: z.string(),
|
|
73
|
+
vmid: z.number().int().nonnegative().nullable(),
|
|
74
|
+
}).passthrough();
|
|
75
|
+
function canonicalHostId(host) {
|
|
76
|
+
return host === "proxmox-mini" ? "proxmox-minis-lab" : host;
|
|
77
|
+
}
|
|
78
|
+
function selectedHost(args) {
|
|
79
|
+
const host = canonicalHostId(args.host);
|
|
80
|
+
const hostName = canonicalHostId(args.hostName);
|
|
81
|
+
if (host && hostName && host !== hostName)
|
|
82
|
+
return undefined;
|
|
83
|
+
return host || hostName;
|
|
84
|
+
}
|
|
85
|
+
function selectedHypervisor(args) {
|
|
86
|
+
const hypervisor = args.hypervisor || "all";
|
|
87
|
+
const alias = args.hypervisorType || "all";
|
|
88
|
+
if (hypervisor !== "all" && alias !== "all" && hypervisor !== alias)
|
|
89
|
+
return undefined;
|
|
90
|
+
return hypervisor !== "all" ? hypervisor : alias;
|
|
91
|
+
}
|
|
92
|
+
function normalizeCanonicalWarning(value) {
|
|
93
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
94
|
+
return undefined;
|
|
95
|
+
const warning = value;
|
|
96
|
+
if ((warning.hypervisor !== "proxmox" && warning.hypervisor !== "esxi")
|
|
97
|
+
|| warning.code !== "discovery_unavailable"
|
|
98
|
+
|| typeof warning.message !== "string"
|
|
99
|
+
|| warning.message.trim().length === 0) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const explicitHost = typeof warning.host_asset_id === "string" && warning.host_asset_id.length > 0
|
|
103
|
+
? warning.host_asset_id
|
|
104
|
+
: undefined;
|
|
105
|
+
const hostAssetId = explicitHost
|
|
106
|
+
|| (warning.hypervisor === "esxi" ? CANONICAL_ESXI_HOST_ID : undefined);
|
|
107
|
+
if (!hostAssetId || CANONICAL_HYPERVISOR_BY_HOST[hostAssetId] !== warning.hypervisor) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
...warning,
|
|
112
|
+
hypervisor: warning.hypervisor,
|
|
113
|
+
host_asset_id: hostAssetId,
|
|
114
|
+
code: warning.code,
|
|
115
|
+
message: warning.message,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function normalizeCanonicalRow(value) {
|
|
119
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
120
|
+
return undefined;
|
|
121
|
+
const row = value;
|
|
122
|
+
if (typeof row.host_asset_id !== "string"
|
|
123
|
+
|| (row.hypervisor !== "proxmox" && row.hypervisor !== "esxi")
|
|
124
|
+
|| CANONICAL_HYPERVISOR_BY_HOST[row.host_asset_id] !== row.hypervisor) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const identity = CanonicalInventoryIdentitySchema.safeParse(row.identity);
|
|
128
|
+
if (!identity.success)
|
|
129
|
+
return undefined;
|
|
130
|
+
if ((row.hypervisor === "proxmox" && identity.data.vmid === null)
|
|
131
|
+
|| (row.hypervisor === "esxi" && identity.data.vmid !== null)) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return row;
|
|
135
|
+
}
|
|
136
|
+
function parseCanonicalInventory(stdout) {
|
|
137
|
+
let value;
|
|
138
|
+
try {
|
|
139
|
+
value = JSON.parse(stdout);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
145
|
+
return undefined;
|
|
146
|
+
const payload = value;
|
|
147
|
+
const generatedAt = z.string().datetime({ offset: true }).safeParse(payload.generated_at);
|
|
148
|
+
const rawWarnings = Array.isArray(payload.warnings) ? payload.warnings : undefined;
|
|
149
|
+
const warnings = rawWarnings?.map(normalizeCanonicalWarning);
|
|
150
|
+
const warningsAreStructured = warnings !== undefined
|
|
151
|
+
&& warnings.every((warning) => warning !== undefined);
|
|
152
|
+
const rawRows = Array.isArray(payload.rows) ? payload.rows : undefined;
|
|
153
|
+
const rows = rawRows?.map(normalizeCanonicalRow);
|
|
154
|
+
const rowsAreStructured = rows !== undefined
|
|
155
|
+
&& rows.every((row) => row !== undefined);
|
|
156
|
+
if (payload.schema !== "calltelemetry-lab-vm-inventory/v1"
|
|
157
|
+
|| !generatedAt.success
|
|
158
|
+
|| typeof payload.partial !== "boolean"
|
|
159
|
+
|| !warningsAreStructured
|
|
160
|
+
|| payload.partial !== ((rawWarnings?.length ?? 0) > 0)
|
|
161
|
+
|| !rowsAreStructured) {
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
return { ...payload, generated_at: generatedAt.data, warnings, rows };
|
|
165
|
+
}
|
|
166
|
+
function warningMatchesScope(warning, host, hypervisor) {
|
|
167
|
+
const warningHost = canonicalHostId(warning.host_asset_id);
|
|
168
|
+
const warningHypervisor = warning.hypervisor;
|
|
169
|
+
if (host) {
|
|
170
|
+
return warningHost === host;
|
|
171
|
+
}
|
|
172
|
+
return hypervisor === "all" || warningHypervisor === hypervisor;
|
|
173
|
+
}
|
|
174
|
+
function everyRequestedHostFailed(warnings, host, hypervisor) {
|
|
175
|
+
const failedHosts = new Set(warnings.map((warning) => canonicalHostId(warning.host_asset_id)));
|
|
176
|
+
if (host)
|
|
177
|
+
return failedHosts.has(host);
|
|
178
|
+
const requestedHosts = hypervisor === "all"
|
|
179
|
+
? [...CANONICAL_HOST_IDS]
|
|
180
|
+
: CANONICAL_HOSTS_BY_HYPERVISOR[hypervisor];
|
|
181
|
+
return requestedHosts.every((requestedHost) => failedHosts.has(requestedHost));
|
|
182
|
+
}
|
|
183
|
+
async function handleCanonicalListInventory(args, context) {
|
|
184
|
+
const bridge = context.canonicalBridge;
|
|
185
|
+
if (!bridge) {
|
|
186
|
+
return createToolErrorResult("CANONICAL_INVENTORY_UNAVAILABLE", "canonical lab bridge is not available", { operation: "list_inventory" });
|
|
187
|
+
}
|
|
188
|
+
const host = selectedHost(args);
|
|
189
|
+
if (args.host && args.hostName && !host) {
|
|
190
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, "host and hostName must resolve to the same canonical host identity");
|
|
191
|
+
}
|
|
192
|
+
if (host && !CANONICAL_HOST_IDS.has(host)) {
|
|
193
|
+
return createToolErrorResult(ProxmoxErrorCode.HOST_NOT_FOUND, `canonical host identity was not found: ${host}`, { host });
|
|
194
|
+
}
|
|
195
|
+
const hypervisor = selectedHypervisor(args);
|
|
196
|
+
if (!hypervisor) {
|
|
197
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, "hypervisor and hypervisorType must select the same platform");
|
|
198
|
+
}
|
|
199
|
+
const hostHypervisor = host === "esxi-intel-192-168-123-176" ? "esxi" : host ? "proxmox" : undefined;
|
|
200
|
+
if (hostHypervisor && hypervisor !== "all" && hostHypervisor !== hypervisor) {
|
|
201
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, "The requested host does not belong to the requested hypervisor type.", { host, hypervisor });
|
|
202
|
+
}
|
|
203
|
+
const hasUnsupportedFilter = args.status !== "all"
|
|
204
|
+
|| args.includeTemplates
|
|
205
|
+
|| Boolean(args.filter)
|
|
206
|
+
|| Boolean(args.tags);
|
|
207
|
+
if (hasUnsupportedFilter) {
|
|
208
|
+
return createToolErrorResult("CANONICAL_FILTER_UNSUPPORTED", "canonical inventory mode supports exact host and hypervisor projection; status, template, text, and tag filters require canonical CLI fields that are not yet available");
|
|
209
|
+
}
|
|
210
|
+
let result;
|
|
211
|
+
try {
|
|
212
|
+
const command = ["vm", "inventory"];
|
|
213
|
+
if (host) {
|
|
214
|
+
command.push("--host-asset-id", host);
|
|
215
|
+
}
|
|
216
|
+
else if (hypervisor !== "all") {
|
|
217
|
+
command.push("--hypervisor", hypervisor);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
command.push("--all");
|
|
221
|
+
}
|
|
222
|
+
command.push("--format", "json");
|
|
223
|
+
result = await bridge.run(command);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
return createToolErrorResult("CANONICAL_INVENTORY_UNAVAILABLE", error instanceof Error ? error.message : String(error), { operation: "list_inventory" });
|
|
227
|
+
}
|
|
228
|
+
if (result.exitCode !== 0) {
|
|
229
|
+
return createToolErrorResult("CANONICAL_OPERATION_FAILED", result.stderr || result.stdout || "list_inventory failed in canonical lab CLI", {
|
|
230
|
+
operation: "list_inventory",
|
|
231
|
+
command: result.command,
|
|
232
|
+
exitCode: result.exitCode,
|
|
233
|
+
...(result.signalCode ? { signalCode: result.signalCode } : {}),
|
|
234
|
+
...(result.timedOut ? { timedOut: true } : {}),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const payload = parseCanonicalInventory(result.stdout);
|
|
238
|
+
if (!payload) {
|
|
239
|
+
return createToolErrorResult("CANONICAL_CONTRACT_INVALID", "canonical vm inventory did not return the required partial-discovery contract", { operation: "list_inventory", command: result.command });
|
|
240
|
+
}
|
|
241
|
+
const scopeWarnings = payload.warnings.filter((warning) => warningMatchesScope(warning, host, hypervisor));
|
|
242
|
+
if (everyRequestedHostFailed(scopeWarnings, host, hypervisor)) {
|
|
243
|
+
return createToolErrorResult("CANONICAL_OPERATION_FAILED", `canonical discovery could not satisfy the requested ${host ? `host ${host}` : `${hypervisor} scope`}`, {
|
|
244
|
+
operation: "list_inventory",
|
|
245
|
+
...(host ? { requestedHost: host } : { requestedHypervisor: hypervisor }),
|
|
246
|
+
partial: payload.partial,
|
|
247
|
+
warnings: payload.warnings,
|
|
248
|
+
command: result.command,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
const rows = payload.rows.filter((row) => {
|
|
252
|
+
const rowHost = canonicalHostId(typeof row.host_asset_id === "string" ? row.host_asset_id : undefined);
|
|
253
|
+
const rowHypervisor = typeof row.hypervisor === "string" ? row.hypervisor : undefined;
|
|
254
|
+
return (!host || rowHost === host)
|
|
255
|
+
&& (hypervisor === "all" || rowHypervisor === hypervisor);
|
|
256
|
+
});
|
|
257
|
+
const projected = { ...payload, rows };
|
|
258
|
+
const response = {
|
|
259
|
+
success: true,
|
|
260
|
+
operation: "list_inventory",
|
|
261
|
+
command: result.command,
|
|
262
|
+
exitCode: result.exitCode,
|
|
263
|
+
result: projected,
|
|
264
|
+
};
|
|
265
|
+
return createToolSuccessResult(JSON.stringify(projected, null, 2), response);
|
|
266
|
+
}
|
|
53
267
|
export async function handleListInventory(rawArgs = {}, context) {
|
|
54
268
|
try {
|
|
55
269
|
const args = ListInventoryInputSchema.parse(rawArgs);
|
|
56
270
|
if (canonicalMode(context)) {
|
|
57
|
-
|
|
58
|
-
(args.hypervisorType && args.hypervisorType !== "all") ||
|
|
59
|
-
args.host ||
|
|
60
|
-
args.hostName ||
|
|
61
|
-
(args.status && args.status !== "all") ||
|
|
62
|
-
args.includeTemplates ||
|
|
63
|
-
args.filter ||
|
|
64
|
-
args.tags;
|
|
65
|
-
if (hasFilter) {
|
|
66
|
-
return createToolErrorResult("CANONICAL_FILTER_UNSUPPORTED", "canonical inventory mode exposes the complete identity-bound inventory; apply filtering to the returned records");
|
|
67
|
-
}
|
|
68
|
-
return runCanonicalOperation(context.canonicalBridge, "list_inventory", [
|
|
69
|
-
"vm",
|
|
70
|
-
"inventory",
|
|
71
|
-
"--all",
|
|
72
|
-
"--format",
|
|
73
|
-
"json",
|
|
74
|
-
]);
|
|
271
|
+
return handleCanonicalListInventory(args, context);
|
|
75
272
|
}
|
|
76
273
|
let parsedTags;
|
|
77
274
|
if (args.tags) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-inventory.js","sourceRoot":"","sources":["../../../src/tools/list-inventory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-inventory.js","sourceRoot":"","sources":["../../../src/tools/list-inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -153,12 +153,12 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
153
153
|
requester?: string | undefined;
|
|
154
154
|
purpose?: string | undefined;
|
|
155
155
|
assetId?: string | undefined;
|
|
156
|
+
hostAssetId?: string | undefined;
|
|
156
157
|
operationId?: string | undefined;
|
|
157
158
|
receiptFile?: string | undefined;
|
|
158
159
|
ttlHours?: number | undefined;
|
|
159
160
|
confirmAssetId?: string | undefined;
|
|
160
161
|
targetHost?: string | undefined;
|
|
161
|
-
hostAssetId?: string | undefined;
|
|
162
162
|
outputFile?: string | undefined;
|
|
163
163
|
templateAssetId?: string | undefined;
|
|
164
164
|
webImage?: string | undefined;
|
|
@@ -204,13 +204,13 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
204
204
|
requester?: string | undefined;
|
|
205
205
|
purpose?: string | undefined;
|
|
206
206
|
assetId?: string | undefined;
|
|
207
|
+
hostAssetId?: string | undefined;
|
|
207
208
|
operationId?: string | undefined;
|
|
208
209
|
apply?: boolean | undefined;
|
|
209
210
|
receiptFile?: string | undefined;
|
|
210
211
|
ttlHours?: number | undefined;
|
|
211
212
|
confirmAssetId?: string | undefined;
|
|
212
213
|
targetHost?: string | undefined;
|
|
213
|
-
hostAssetId?: string | undefined;
|
|
214
214
|
outputFile?: string | undefined;
|
|
215
215
|
templateAssetId?: string | undefined;
|
|
216
216
|
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
@@ -269,12 +269,12 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
269
269
|
requester?: string | undefined;
|
|
270
270
|
purpose?: string | undefined;
|
|
271
271
|
assetId?: string | undefined;
|
|
272
|
+
hostAssetId?: string | undefined;
|
|
272
273
|
operationId?: string | undefined;
|
|
273
274
|
receiptFile?: string | undefined;
|
|
274
275
|
ttlHours?: number | undefined;
|
|
275
276
|
confirmAssetId?: string | undefined;
|
|
276
277
|
targetHost?: string | undefined;
|
|
277
|
-
hostAssetId?: string | undefined;
|
|
278
278
|
outputFile?: string | undefined;
|
|
279
279
|
templateAssetId?: string | undefined;
|
|
280
280
|
webImage?: string | undefined;
|
|
@@ -320,13 +320,13 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
320
320
|
requester?: string | undefined;
|
|
321
321
|
purpose?: string | undefined;
|
|
322
322
|
assetId?: string | undefined;
|
|
323
|
+
hostAssetId?: string | undefined;
|
|
323
324
|
operationId?: string | undefined;
|
|
324
325
|
apply?: boolean | undefined;
|
|
325
326
|
receiptFile?: string | undefined;
|
|
326
327
|
ttlHours?: number | undefined;
|
|
327
328
|
confirmAssetId?: string | undefined;
|
|
328
329
|
targetHost?: string | undefined;
|
|
329
|
-
hostAssetId?: string | undefined;
|
|
330
330
|
outputFile?: string | undefined;
|
|
331
331
|
templateAssetId?: string | undefined;
|
|
332
332
|
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
@@ -385,12 +385,12 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
385
385
|
requester?: string | undefined;
|
|
386
386
|
purpose?: string | undefined;
|
|
387
387
|
assetId?: string | undefined;
|
|
388
|
+
hostAssetId?: string | undefined;
|
|
388
389
|
operationId?: string | undefined;
|
|
389
390
|
receiptFile?: string | undefined;
|
|
390
391
|
ttlHours?: number | undefined;
|
|
391
392
|
confirmAssetId?: string | undefined;
|
|
392
393
|
targetHost?: string | undefined;
|
|
393
|
-
hostAssetId?: string | undefined;
|
|
394
394
|
outputFile?: string | undefined;
|
|
395
395
|
templateAssetId?: string | undefined;
|
|
396
396
|
webImage?: string | undefined;
|
|
@@ -436,13 +436,13 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
436
436
|
requester?: string | undefined;
|
|
437
437
|
purpose?: string | undefined;
|
|
438
438
|
assetId?: string | undefined;
|
|
439
|
+
hostAssetId?: string | undefined;
|
|
439
440
|
operationId?: string | undefined;
|
|
440
441
|
apply?: boolean | undefined;
|
|
441
442
|
receiptFile?: string | undefined;
|
|
442
443
|
ttlHours?: number | undefined;
|
|
443
444
|
confirmAssetId?: string | undefined;
|
|
444
445
|
targetHost?: string | undefined;
|
|
445
|
-
hostAssetId?: string | undefined;
|
|
446
446
|
outputFile?: string | undefined;
|
|
447
447
|
templateAssetId?: string | undefined;
|
|
448
448
|
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
@@ -628,6 +628,7 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
628
628
|
requester?: string | undefined;
|
|
629
629
|
purpose?: string | undefined;
|
|
630
630
|
assetId?: string | undefined;
|
|
631
|
+
hostAssetId?: string | undefined;
|
|
631
632
|
operationId?: string | undefined;
|
|
632
633
|
receiptFile?: string | undefined;
|
|
633
634
|
ttlHours?: number | undefined;
|
|
@@ -635,7 +636,6 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
635
636
|
placementSeed?: string | undefined;
|
|
636
637
|
targetHost?: string | undefined;
|
|
637
638
|
allowEsxiSlots?: boolean | undefined;
|
|
638
|
-
hostAssetId?: string | undefined;
|
|
639
639
|
outputFile?: string | undefined;
|
|
640
640
|
templateAssetId?: string | undefined;
|
|
641
641
|
webImage?: string | undefined;
|
|
@@ -681,6 +681,7 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
681
681
|
requester?: string | undefined;
|
|
682
682
|
purpose?: string | undefined;
|
|
683
683
|
assetId?: string | undefined;
|
|
684
|
+
hostAssetId?: string | undefined;
|
|
684
685
|
operationId?: string | undefined;
|
|
685
686
|
apply?: boolean | undefined;
|
|
686
687
|
receiptFile?: string | undefined;
|
|
@@ -690,7 +691,6 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
690
691
|
targetHost?: string | undefined;
|
|
691
692
|
purgeIfFull?: boolean | undefined;
|
|
692
693
|
allowEsxiSlots?: boolean | undefined;
|
|
693
|
-
hostAssetId?: string | undefined;
|
|
694
694
|
outputFile?: string | undefined;
|
|
695
695
|
templateAssetId?: string | undefined;
|
|
696
696
|
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
@@ -84,8 +84,8 @@ export declare const ProxmoxQuickProvisionInputSchema: z.ZodObject<{
|
|
|
84
84
|
version: string;
|
|
85
85
|
linearIssue: string;
|
|
86
86
|
purpose: string;
|
|
87
|
-
apply: boolean;
|
|
88
87
|
hostAssetId: string;
|
|
88
|
+
apply: boolean;
|
|
89
89
|
storage?: string | undefined;
|
|
90
90
|
size?: {
|
|
91
91
|
memoryMb: number;
|
|
@@ -121,11 +121,11 @@ export declare const ProxmoxQuickProvisionInputSchema: z.ZodObject<{
|
|
|
121
121
|
vmid?: number | undefined;
|
|
122
122
|
network?: string | undefined;
|
|
123
123
|
purpose?: string | undefined;
|
|
124
|
+
hostAssetId?: string | undefined;
|
|
124
125
|
operationId?: string | undefined;
|
|
125
126
|
apply?: boolean | undefined;
|
|
126
127
|
ttlHours?: number | undefined;
|
|
127
128
|
placementSeed?: string | undefined;
|
|
128
|
-
hostAssetId?: string | undefined;
|
|
129
129
|
webImage?: string | undefined;
|
|
130
130
|
baseVersion?: string | undefined;
|
|
131
131
|
diskGb?: number | undefined;
|
|
@@ -138,11 +138,11 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
138
138
|
reason?: string | undefined;
|
|
139
139
|
timeoutSeconds?: number | undefined;
|
|
140
140
|
assetId?: string | undefined;
|
|
141
|
+
hostAssetId?: string | undefined;
|
|
141
142
|
artifactReceipt?: string | undefined;
|
|
142
143
|
receiptFile?: string | undefined;
|
|
143
144
|
confirmAssetId?: string | undefined;
|
|
144
145
|
targetHost?: string | undefined;
|
|
145
|
-
hostAssetId?: string | undefined;
|
|
146
146
|
confirmVmid?: string | number | undefined;
|
|
147
147
|
smbiosUuid?: string | undefined;
|
|
148
148
|
confirmHostAssetId?: string | undefined;
|
|
@@ -169,13 +169,13 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
169
169
|
reason?: string | undefined;
|
|
170
170
|
timeoutSeconds?: number | undefined;
|
|
171
171
|
assetId?: string | undefined;
|
|
172
|
+
hostAssetId?: string | undefined;
|
|
172
173
|
artifactReceipt?: string | undefined;
|
|
173
174
|
apply?: boolean | undefined;
|
|
174
175
|
receiptFile?: string | undefined;
|
|
175
176
|
force?: boolean | undefined;
|
|
176
177
|
confirmAssetId?: string | undefined;
|
|
177
178
|
targetHost?: string | undefined;
|
|
178
|
-
hostAssetId?: string | undefined;
|
|
179
179
|
confirmVmid?: string | number | undefined;
|
|
180
180
|
smbiosUuid?: string | undefined;
|
|
181
181
|
confirmHostAssetId?: string | undefined;
|
|
@@ -208,11 +208,11 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
208
208
|
reason?: string | undefined;
|
|
209
209
|
timeoutSeconds?: number | undefined;
|
|
210
210
|
assetId?: string | undefined;
|
|
211
|
+
hostAssetId?: string | undefined;
|
|
211
212
|
artifactReceipt?: string | undefined;
|
|
212
213
|
receiptFile?: string | undefined;
|
|
213
214
|
confirmAssetId?: string | undefined;
|
|
214
215
|
targetHost?: string | undefined;
|
|
215
|
-
hostAssetId?: string | undefined;
|
|
216
216
|
confirmVmid?: string | number | undefined;
|
|
217
217
|
smbiosUuid?: string | undefined;
|
|
218
218
|
confirmHostAssetId?: string | undefined;
|
|
@@ -239,13 +239,13 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
239
239
|
reason?: string | undefined;
|
|
240
240
|
timeoutSeconds?: number | undefined;
|
|
241
241
|
assetId?: string | undefined;
|
|
242
|
+
hostAssetId?: string | undefined;
|
|
242
243
|
artifactReceipt?: string | undefined;
|
|
243
244
|
apply?: boolean | undefined;
|
|
244
245
|
receiptFile?: string | undefined;
|
|
245
246
|
force?: boolean | undefined;
|
|
246
247
|
confirmAssetId?: string | undefined;
|
|
247
248
|
targetHost?: string | undefined;
|
|
248
|
-
hostAssetId?: string | undefined;
|
|
249
249
|
confirmVmid?: string | number | undefined;
|
|
250
250
|
smbiosUuid?: string | undefined;
|
|
251
251
|
confirmHostAssetId?: string | undefined;
|
|
@@ -22,12 +22,12 @@ export declare const ListExpiredVmsInputSchema: z.ZodObject<{
|
|
|
22
22
|
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["json", "table"]>>>;
|
|
23
23
|
}, "strip", z.ZodTypeAny, {
|
|
24
24
|
format: "table" | "json";
|
|
25
|
-
warnHours?: number | undefined;
|
|
26
25
|
hostAssetId?: string | undefined;
|
|
26
|
+
warnHours?: number | undefined;
|
|
27
27
|
}, {
|
|
28
28
|
format?: "table" | "json" | undefined;
|
|
29
|
-
warnHours?: number | undefined;
|
|
30
29
|
hostAssetId?: string | undefined;
|
|
30
|
+
warnHours?: number | undefined;
|
|
31
31
|
}>;
|
|
32
32
|
export type ListExpiredVmsInput = z.infer<typeof ListExpiredVmsInputSchema>;
|
|
33
33
|
export type ListExpiredVmsRawInput = z.input<typeof ListExpiredVmsInputSchema>;
|
|
@@ -60,20 +60,20 @@ export declare const CleanupExpiredVmsInputSchema: z.ZodObject<{
|
|
|
60
60
|
apply: boolean;
|
|
61
61
|
deleteTerminalIssues: boolean;
|
|
62
62
|
reason?: string | undefined;
|
|
63
|
+
hostAssetId?: string | undefined;
|
|
63
64
|
artifactReceipt?: string | undefined;
|
|
64
65
|
confirmAssets?: string | undefined;
|
|
65
66
|
warnHours?: number | undefined;
|
|
66
|
-
hostAssetId?: string | undefined;
|
|
67
67
|
outputFile?: string | undefined;
|
|
68
68
|
}, {
|
|
69
69
|
dryRun?: boolean | undefined;
|
|
70
70
|
format?: "table" | "json" | undefined;
|
|
71
71
|
reason?: string | undefined;
|
|
72
|
+
hostAssetId?: string | undefined;
|
|
72
73
|
artifactReceipt?: string | undefined;
|
|
73
74
|
apply?: boolean | undefined;
|
|
74
75
|
confirmAssets?: string | undefined;
|
|
75
76
|
warnHours?: number | undefined;
|
|
76
|
-
hostAssetId?: string | undefined;
|
|
77
77
|
deleteTerminalIssues?: boolean | undefined;
|
|
78
78
|
outputFile?: string | undefined;
|
|
79
79
|
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@calltelemetry/ct-lab-mcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.15",
|
|
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",
|