@calltelemetry/ct-lab-mcp 0.8.45 → 0.8.47
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/dist/src/tools/canonical-guard.d.ts +1 -1
- package/dist/src/tools/canonical-guard.d.ts.map +1 -1
- package/dist/src/tools/canonical-guard.js +8 -0
- package/dist/src/tools/canonical-guard.js.map +1 -1
- package/dist/src/tools/fleet-metrics.d.ts +26 -0
- package/dist/src/tools/fleet-metrics.d.ts.map +1 -0
- package/dist/src/tools/fleet-metrics.js +181 -0
- package/dist/src/tools/fleet-metrics.js.map +1 -0
- package/dist/src/tools/host-migrate-vm.d.ts +91 -0
- package/dist/src/tools/host-migrate-vm.d.ts.map +1 -0
- package/dist/src/tools/host-migrate-vm.js +138 -0
- package/dist/src/tools/host-migrate-vm.js.map +1 -0
- package/dist/src/tools/index.d.ts +3 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +22 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/provision-tools.d.ts.map +1 -1
- package/dist/src/tools/provision-tools.js +18 -15
- package/dist/src/tools/provision-tools.js.map +1 -1
- package/dist/src/tools/proxmox-host-policy.d.ts +14 -0
- package/dist/src/tools/proxmox-host-policy.d.ts.map +1 -0
- package/dist/src/tools/proxmox-host-policy.js +30 -0
- package/dist/src/tools/proxmox-host-policy.js.map +1 -0
- package/dist/src/tools/sandbox-tools.d.ts +215 -0
- package/dist/src/tools/sandbox-tools.d.ts.map +1 -0
- package/dist/src/tools/sandbox-tools.js +212 -0
- package/dist/src/tools/sandbox-tools.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Rapid Ephemeral Sandbox MCP Tools (sandbox_clone, sandbox_reset).
|
|
3
|
+
* Wraps canonical `lab-inventory sandbox clone` and `sandbox reset` for sub-15s
|
|
4
|
+
* linked clone provisioning and instant snapshot rollback on Proxmox VE.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
8
|
+
import { ToolContext } from "./list-hosts.js";
|
|
9
|
+
export declare const SandboxCloneInputShape: {
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
linearIssue: z.ZodString;
|
|
12
|
+
operationId: z.ZodString;
|
|
13
|
+
templateAssetId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
14
|
+
hostAssetId: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-minis-lab", "proxmox-mini"]>>>;
|
|
15
|
+
cores: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
16
|
+
memoryMb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
17
|
+
diskGb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
+
storage: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
19
|
+
baselineSnapshot: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
20
|
+
ttlHours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
21
|
+
sshKey: z.ZodOptional<z.ZodString>;
|
|
22
|
+
sshKeyFile: z.ZodOptional<z.ZodString>;
|
|
23
|
+
waitAgent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
24
|
+
vmid: z.ZodOptional<z.ZodNumber>;
|
|
25
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
26
|
+
confirmAssetId: z.ZodOptional<z.ZodString>;
|
|
27
|
+
confirmName: z.ZodOptional<z.ZodString>;
|
|
28
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
29
|
+
receiptFile: z.ZodOptional<z.ZodString>;
|
|
30
|
+
};
|
|
31
|
+
export declare const SandboxCloneInputSchema: z.ZodEffects<z.ZodObject<{
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
linearIssue: z.ZodString;
|
|
34
|
+
operationId: z.ZodString;
|
|
35
|
+
templateAssetId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
36
|
+
hostAssetId: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-minis-lab", "proxmox-mini"]>>>;
|
|
37
|
+
cores: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
38
|
+
memoryMb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
39
|
+
diskGb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
40
|
+
storage: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
41
|
+
baselineSnapshot: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
42
|
+
ttlHours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
43
|
+
sshKey: z.ZodOptional<z.ZodString>;
|
|
44
|
+
sshKeyFile: z.ZodOptional<z.ZodString>;
|
|
45
|
+
waitAgent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
46
|
+
vmid: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
48
|
+
confirmAssetId: z.ZodOptional<z.ZodString>;
|
|
49
|
+
confirmName: z.ZodOptional<z.ZodString>;
|
|
50
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
51
|
+
receiptFile: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}, "strip", z.ZodTypeAny, {
|
|
53
|
+
storage: string;
|
|
54
|
+
name: string;
|
|
55
|
+
cores: number;
|
|
56
|
+
memoryMb: number;
|
|
57
|
+
linearIssue: string;
|
|
58
|
+
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
59
|
+
operationId: string;
|
|
60
|
+
diskGb: number;
|
|
61
|
+
templateAssetId: string;
|
|
62
|
+
apply: boolean;
|
|
63
|
+
ttlHours: number;
|
|
64
|
+
baselineSnapshot: string;
|
|
65
|
+
waitAgent: boolean;
|
|
66
|
+
vmid?: number | undefined;
|
|
67
|
+
receiptFile?: string | undefined;
|
|
68
|
+
confirmAssetId?: string | undefined;
|
|
69
|
+
planDigest?: string | undefined;
|
|
70
|
+
sshKey?: string | undefined;
|
|
71
|
+
sshKeyFile?: string | undefined;
|
|
72
|
+
confirmName?: string | undefined;
|
|
73
|
+
}, {
|
|
74
|
+
name: string;
|
|
75
|
+
linearIssue: string;
|
|
76
|
+
operationId: string;
|
|
77
|
+
storage?: string | undefined;
|
|
78
|
+
cores?: number | undefined;
|
|
79
|
+
memoryMb?: number | undefined;
|
|
80
|
+
vmid?: number | undefined;
|
|
81
|
+
hostAssetId?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | undefined;
|
|
82
|
+
diskGb?: number | undefined;
|
|
83
|
+
templateAssetId?: string | undefined;
|
|
84
|
+
apply?: boolean | undefined;
|
|
85
|
+
receiptFile?: string | undefined;
|
|
86
|
+
ttlHours?: number | undefined;
|
|
87
|
+
confirmAssetId?: string | undefined;
|
|
88
|
+
planDigest?: string | undefined;
|
|
89
|
+
baselineSnapshot?: string | undefined;
|
|
90
|
+
sshKey?: string | undefined;
|
|
91
|
+
sshKeyFile?: string | undefined;
|
|
92
|
+
waitAgent?: boolean | undefined;
|
|
93
|
+
confirmName?: string | undefined;
|
|
94
|
+
}>, {
|
|
95
|
+
storage: string;
|
|
96
|
+
name: string;
|
|
97
|
+
cores: number;
|
|
98
|
+
memoryMb: number;
|
|
99
|
+
linearIssue: string;
|
|
100
|
+
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
101
|
+
operationId: string;
|
|
102
|
+
diskGb: number;
|
|
103
|
+
templateAssetId: string;
|
|
104
|
+
apply: boolean;
|
|
105
|
+
ttlHours: number;
|
|
106
|
+
baselineSnapshot: string;
|
|
107
|
+
waitAgent: boolean;
|
|
108
|
+
vmid?: number | undefined;
|
|
109
|
+
receiptFile?: string | undefined;
|
|
110
|
+
confirmAssetId?: string | undefined;
|
|
111
|
+
planDigest?: string | undefined;
|
|
112
|
+
sshKey?: string | undefined;
|
|
113
|
+
sshKeyFile?: string | undefined;
|
|
114
|
+
confirmName?: string | undefined;
|
|
115
|
+
}, {
|
|
116
|
+
name: string;
|
|
117
|
+
linearIssue: string;
|
|
118
|
+
operationId: string;
|
|
119
|
+
storage?: string | undefined;
|
|
120
|
+
cores?: number | undefined;
|
|
121
|
+
memoryMb?: number | undefined;
|
|
122
|
+
vmid?: number | undefined;
|
|
123
|
+
hostAssetId?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | undefined;
|
|
124
|
+
diskGb?: number | undefined;
|
|
125
|
+
templateAssetId?: string | undefined;
|
|
126
|
+
apply?: boolean | undefined;
|
|
127
|
+
receiptFile?: string | undefined;
|
|
128
|
+
ttlHours?: number | undefined;
|
|
129
|
+
confirmAssetId?: string | undefined;
|
|
130
|
+
planDigest?: string | undefined;
|
|
131
|
+
baselineSnapshot?: string | undefined;
|
|
132
|
+
sshKey?: string | undefined;
|
|
133
|
+
sshKeyFile?: string | undefined;
|
|
134
|
+
waitAgent?: boolean | undefined;
|
|
135
|
+
confirmName?: string | undefined;
|
|
136
|
+
}>;
|
|
137
|
+
export type SandboxCloneInput = z.infer<typeof SandboxCloneInputSchema>;
|
|
138
|
+
export declare const SandboxResetInputShape: {
|
|
139
|
+
assetId: z.ZodString;
|
|
140
|
+
linearIssue: z.ZodString;
|
|
141
|
+
operationId: z.ZodString;
|
|
142
|
+
snapshotName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
143
|
+
hostAssetId: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-minis-lab", "proxmox-mini"]>>>;
|
|
144
|
+
waitAgent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
145
|
+
vmid: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
147
|
+
confirmAssetId: z.ZodOptional<z.ZodString>;
|
|
148
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
149
|
+
receiptFile: z.ZodOptional<z.ZodString>;
|
|
150
|
+
};
|
|
151
|
+
export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
152
|
+
assetId: z.ZodString;
|
|
153
|
+
linearIssue: z.ZodString;
|
|
154
|
+
operationId: z.ZodString;
|
|
155
|
+
snapshotName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
156
|
+
hostAssetId: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-minis-lab", "proxmox-mini"]>>>;
|
|
157
|
+
waitAgent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
158
|
+
vmid: z.ZodOptional<z.ZodNumber>;
|
|
159
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
160
|
+
confirmAssetId: z.ZodOptional<z.ZodString>;
|
|
161
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
162
|
+
receiptFile: z.ZodOptional<z.ZodString>;
|
|
163
|
+
}, "strip", z.ZodTypeAny, {
|
|
164
|
+
linearIssue: string;
|
|
165
|
+
assetId: string;
|
|
166
|
+
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
167
|
+
operationId: string;
|
|
168
|
+
apply: boolean;
|
|
169
|
+
snapshotName: string;
|
|
170
|
+
waitAgent: boolean;
|
|
171
|
+
vmid?: number | undefined;
|
|
172
|
+
receiptFile?: string | undefined;
|
|
173
|
+
confirmAssetId?: string | undefined;
|
|
174
|
+
planDigest?: string | undefined;
|
|
175
|
+
}, {
|
|
176
|
+
linearIssue: string;
|
|
177
|
+
assetId: string;
|
|
178
|
+
operationId: string;
|
|
179
|
+
vmid?: number | undefined;
|
|
180
|
+
hostAssetId?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | undefined;
|
|
181
|
+
apply?: boolean | undefined;
|
|
182
|
+
receiptFile?: string | undefined;
|
|
183
|
+
confirmAssetId?: string | undefined;
|
|
184
|
+
snapshotName?: string | undefined;
|
|
185
|
+
planDigest?: string | undefined;
|
|
186
|
+
waitAgent?: boolean | undefined;
|
|
187
|
+
}>, {
|
|
188
|
+
linearIssue: string;
|
|
189
|
+
assetId: string;
|
|
190
|
+
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
191
|
+
operationId: string;
|
|
192
|
+
apply: boolean;
|
|
193
|
+
snapshotName: string;
|
|
194
|
+
waitAgent: boolean;
|
|
195
|
+
vmid?: number | undefined;
|
|
196
|
+
receiptFile?: string | undefined;
|
|
197
|
+
confirmAssetId?: string | undefined;
|
|
198
|
+
planDigest?: string | undefined;
|
|
199
|
+
}, {
|
|
200
|
+
linearIssue: string;
|
|
201
|
+
assetId: string;
|
|
202
|
+
operationId: string;
|
|
203
|
+
vmid?: number | undefined;
|
|
204
|
+
hostAssetId?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | undefined;
|
|
205
|
+
apply?: boolean | undefined;
|
|
206
|
+
receiptFile?: string | undefined;
|
|
207
|
+
confirmAssetId?: string | undefined;
|
|
208
|
+
snapshotName?: string | undefined;
|
|
209
|
+
planDigest?: string | undefined;
|
|
210
|
+
waitAgent?: boolean | undefined;
|
|
211
|
+
}>;
|
|
212
|
+
export type SandboxResetInput = z.infer<typeof SandboxResetInputSchema>;
|
|
213
|
+
export declare function handleSandboxClone(rawArgs: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
214
|
+
export declare function handleSandboxReset(rawArgs: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
215
|
+
//# sourceMappingURL=sandbox-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/sandbox-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM9C,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;CAwClC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBhC,CAAC;AAEL,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;CA6BlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBhC,CAAC;AAEL,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA+DzB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA8CzB"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Rapid Ephemeral Sandbox MCP Tools (sandbox_clone, sandbox_reset).
|
|
3
|
+
* Wraps canonical `lab-inventory sandbox clone` and `sandbox reset` for sub-15s
|
|
4
|
+
* linked clone provisioning and instant snapshot rollback on Proxmox VE.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
8
|
+
import { canonicalMode, runCanonicalOperation } from "./canonical-guard.js";
|
|
9
|
+
import { normalizeProxmoxHost, ProxmoxHostInputSchema, } from "./proxmox-host-policy.js";
|
|
10
|
+
export const SandboxCloneInputShape = {
|
|
11
|
+
name: z
|
|
12
|
+
.string()
|
|
13
|
+
.min(1)
|
|
14
|
+
.describe("Sandbox VM name (e.g. 'sandbox-agent-feat-api-101')."),
|
|
15
|
+
linearIssue: z
|
|
16
|
+
.string()
|
|
17
|
+
.regex(/^[A-Za-z][A-Za-z0-9]*-[1-9][0-9]*$/)
|
|
18
|
+
.describe("Linear campaign issue key tracking this sandbox (e.g. 'UAT-1636')."),
|
|
19
|
+
operationId: z
|
|
20
|
+
.string()
|
|
21
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$/)
|
|
22
|
+
.describe("Unique idempotency ID for this sandbox transaction (8-128 characters)."),
|
|
23
|
+
templateAssetId: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.optional()
|
|
27
|
+
.default("almalinux-97-sandbox-template")
|
|
28
|
+
.describe("Gold master template asset ID. Defaults to 'almalinux-97-sandbox-template' (authoritative CallTelemetry master). Also supports 'ubuntu-2404-sandbox-template'."),
|
|
29
|
+
hostAssetId: ProxmoxHostInputSchema
|
|
30
|
+
.optional()
|
|
31
|
+
.default("proxmox-minis-lab")
|
|
32
|
+
.describe("Target Proxmox host asset ID (default: 'proxmox-minis-lab')."),
|
|
33
|
+
cores: z.number().int().positive().optional().default(2).describe("vCPU core count (default: 2)."),
|
|
34
|
+
memoryMb: z.number().int().positive().optional().default(4096).describe("RAM in megabytes (default: 4096)."),
|
|
35
|
+
diskGb: z.number().int().positive().optional().default(20).describe("Root disk size in gigabytes (default: 20)."),
|
|
36
|
+
storage: z.string().min(1).optional().default("local-lvm").describe("Target storage pool (default: 'local-lvm')."),
|
|
37
|
+
baselineSnapshot: z.string().min(1).optional().default("clean-state").describe("Baseline snapshot name (default: 'clean-state')."),
|
|
38
|
+
ttlHours: z.number().int().positive().optional().default(4).describe("Slot lease TTL in hours (default: 4)."),
|
|
39
|
+
sshKey: z.string().optional().describe("SSH public key string (ssh-ed25519 or ssh-rsa) to inject via cloud-init."),
|
|
40
|
+
sshKeyFile: z.string().optional().describe("Path to SSH public key file for injection."),
|
|
41
|
+
waitAgent: z.boolean().optional().default(false).describe("Wait for QEMU guest agent health verification before completing."),
|
|
42
|
+
vmid: z.number().int().positive().optional().describe("Optional explicit static VMID in 300-899 range."),
|
|
43
|
+
apply: z.boolean().optional().default(false).describe("Omit for a dry-run plan. True executes rapid linked clone creation."),
|
|
44
|
+
confirmAssetId: z.string().min(1).optional().describe("Required with apply=true and must match name."),
|
|
45
|
+
confirmName: z.string().min(1).optional().describe("Required with apply=true and must match name."),
|
|
46
|
+
planDigest: z.string().regex(/^[a-f0-9]{64}$/i).optional().describe("Required with apply=true and must match dry-run plan digest."),
|
|
47
|
+
receiptFile: z.string().min(1).optional().describe("Optional path for a copy of the plan or durable transaction receipt."),
|
|
48
|
+
};
|
|
49
|
+
export const SandboxCloneInputSchema = z
|
|
50
|
+
.object(SandboxCloneInputShape)
|
|
51
|
+
.superRefine((value, context) => {
|
|
52
|
+
if (!value.apply)
|
|
53
|
+
return;
|
|
54
|
+
const confirm = value.confirmAssetId ?? value.confirmName;
|
|
55
|
+
if (!confirm || confirm !== value.name) {
|
|
56
|
+
context.addIssue({
|
|
57
|
+
code: z.ZodIssueCode.custom,
|
|
58
|
+
path: ["confirmAssetId"],
|
|
59
|
+
message: "must exactly match name when apply=true",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (!value.planDigest) {
|
|
63
|
+
context.addIssue({
|
|
64
|
+
code: z.ZodIssueCode.custom,
|
|
65
|
+
path: ["planDigest"],
|
|
66
|
+
message: "is required when apply=true",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
export const SandboxResetInputShape = {
|
|
71
|
+
assetId: z
|
|
72
|
+
.string()
|
|
73
|
+
.min(1)
|
|
74
|
+
.describe("Sandbox VM name or canonical asset ID to reset."),
|
|
75
|
+
linearIssue: z
|
|
76
|
+
.string()
|
|
77
|
+
.regex(/^[A-Za-z][A-Za-z0-9]*-[1-9][0-9]*$/)
|
|
78
|
+
.describe("Linear campaign issue key tracking this sandbox."),
|
|
79
|
+
operationId: z
|
|
80
|
+
.string()
|
|
81
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$/)
|
|
82
|
+
.describe("Unique idempotency ID for this reset transaction (8-128 characters)."),
|
|
83
|
+
snapshotName: z
|
|
84
|
+
.string()
|
|
85
|
+
.min(1)
|
|
86
|
+
.optional()
|
|
87
|
+
.default("clean-state")
|
|
88
|
+
.describe("Snapshot name to roll back to (default: 'clean-state')."),
|
|
89
|
+
hostAssetId: ProxmoxHostInputSchema
|
|
90
|
+
.optional()
|
|
91
|
+
.default("proxmox-minis-lab")
|
|
92
|
+
.describe("Target Proxmox host asset ID (default: 'proxmox-minis-lab')."),
|
|
93
|
+
waitAgent: z.boolean().optional().default(false).describe("Wait for QEMU guest agent health verification after rollback."),
|
|
94
|
+
vmid: z.number().int().positive().optional().describe("Optional target VMID."),
|
|
95
|
+
apply: z.boolean().optional().default(false).describe("Omit for a dry-run plan. True executes instant snapshot rollback."),
|
|
96
|
+
confirmAssetId: z.string().min(1).optional().describe("Required with apply=true and must match assetId."),
|
|
97
|
+
planDigest: z.string().regex(/^[a-f0-9]{64}$/i).optional().describe("Required with apply=true and must match dry-run plan digest."),
|
|
98
|
+
receiptFile: z.string().min(1).optional().describe("Optional path for a copy of the plan or durable transaction receipt."),
|
|
99
|
+
};
|
|
100
|
+
export const SandboxResetInputSchema = z
|
|
101
|
+
.object(SandboxResetInputShape)
|
|
102
|
+
.superRefine((value, context) => {
|
|
103
|
+
if (!value.apply)
|
|
104
|
+
return;
|
|
105
|
+
if (value.confirmAssetId !== value.assetId) {
|
|
106
|
+
context.addIssue({
|
|
107
|
+
code: z.ZodIssueCode.custom,
|
|
108
|
+
path: ["confirmAssetId"],
|
|
109
|
+
message: "must exactly match assetId when apply=true",
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (!value.planDigest) {
|
|
113
|
+
context.addIssue({
|
|
114
|
+
code: z.ZodIssueCode.custom,
|
|
115
|
+
path: ["planDigest"],
|
|
116
|
+
message: "is required when apply=true",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const SANDBOX_TIMEOUT_MS = 60_000; // Sub-15s target with 60s bounded ceiling
|
|
121
|
+
export async function handleSandboxClone(rawArgs, context) {
|
|
122
|
+
const parsed = SandboxCloneInputSchema.safeParse(rawArgs);
|
|
123
|
+
if (!parsed.success) {
|
|
124
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, parsed.error.errors
|
|
125
|
+
.map((error) => `${error.path.join(".")}: ${error.message}`)
|
|
126
|
+
.join("; "));
|
|
127
|
+
}
|
|
128
|
+
if (!canonicalMode(context)) {
|
|
129
|
+
return createToolErrorResult("CANONICAL_OPERATION_REQUIRES_BRIDGE", "sandbox clone requires canonical lab mode; the Node slot manager does not perform ephemeral sandbox cloning");
|
|
130
|
+
}
|
|
131
|
+
const value = parsed.data;
|
|
132
|
+
const normalizedHost = normalizeProxmoxHost(value.hostAssetId);
|
|
133
|
+
const args = [
|
|
134
|
+
"sandbox",
|
|
135
|
+
"clone",
|
|
136
|
+
"--name",
|
|
137
|
+
value.name,
|
|
138
|
+
"--linear-issue",
|
|
139
|
+
value.linearIssue,
|
|
140
|
+
"--operation-id",
|
|
141
|
+
value.operationId,
|
|
142
|
+
"--template-asset-id",
|
|
143
|
+
value.templateAssetId,
|
|
144
|
+
"--host-asset-id",
|
|
145
|
+
normalizedHost,
|
|
146
|
+
"--cores",
|
|
147
|
+
String(value.cores),
|
|
148
|
+
"--memory-mb",
|
|
149
|
+
String(value.memoryMb),
|
|
150
|
+
"--disk-gb",
|
|
151
|
+
String(value.diskGb),
|
|
152
|
+
"--storage",
|
|
153
|
+
value.storage,
|
|
154
|
+
"--baseline-snapshot",
|
|
155
|
+
value.baselineSnapshot,
|
|
156
|
+
"--ttl-hours",
|
|
157
|
+
String(value.ttlHours),
|
|
158
|
+
];
|
|
159
|
+
if (value.sshKey)
|
|
160
|
+
args.push("--ssh-key", value.sshKey);
|
|
161
|
+
if (value.sshKeyFile)
|
|
162
|
+
args.push("--ssh-key-file", value.sshKeyFile);
|
|
163
|
+
if (value.waitAgent)
|
|
164
|
+
args.push("--wait-agent");
|
|
165
|
+
if (value.vmid !== undefined)
|
|
166
|
+
args.push("--vmid", String(value.vmid));
|
|
167
|
+
if (value.receiptFile)
|
|
168
|
+
args.push("--receipt-file", value.receiptFile);
|
|
169
|
+
if (value.apply) {
|
|
170
|
+
const confirm = value.confirmAssetId ?? value.confirmName;
|
|
171
|
+
args.push("--apply", "--confirm-asset-id", confirm, "--confirm-name", confirm, "--plan-digest", value.planDigest);
|
|
172
|
+
}
|
|
173
|
+
return runCanonicalOperation(context.canonicalBridge, "sandbox_clone", args, SANDBOX_TIMEOUT_MS);
|
|
174
|
+
}
|
|
175
|
+
export async function handleSandboxReset(rawArgs, context) {
|
|
176
|
+
const parsed = SandboxResetInputSchema.safeParse(rawArgs);
|
|
177
|
+
if (!parsed.success) {
|
|
178
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, parsed.error.errors
|
|
179
|
+
.map((error) => `${error.path.join(".")}: ${error.message}`)
|
|
180
|
+
.join("; "));
|
|
181
|
+
}
|
|
182
|
+
if (!canonicalMode(context)) {
|
|
183
|
+
return createToolErrorResult("CANONICAL_OPERATION_REQUIRES_BRIDGE", "sandbox reset requires canonical lab mode; the Node slot manager does not perform snapshot rollbacks");
|
|
184
|
+
}
|
|
185
|
+
const value = parsed.data;
|
|
186
|
+
const normalizedHost = normalizeProxmoxHost(value.hostAssetId);
|
|
187
|
+
const args = [
|
|
188
|
+
"sandbox",
|
|
189
|
+
"reset",
|
|
190
|
+
"--asset-id",
|
|
191
|
+
value.assetId,
|
|
192
|
+
"--linear-issue",
|
|
193
|
+
value.linearIssue,
|
|
194
|
+
"--operation-id",
|
|
195
|
+
value.operationId,
|
|
196
|
+
"--snapshot-name",
|
|
197
|
+
value.snapshotName,
|
|
198
|
+
"--host-asset-id",
|
|
199
|
+
normalizedHost,
|
|
200
|
+
];
|
|
201
|
+
if (value.waitAgent)
|
|
202
|
+
args.push("--wait-agent");
|
|
203
|
+
if (value.vmid !== undefined)
|
|
204
|
+
args.push("--vmid", String(value.vmid));
|
|
205
|
+
if (value.receiptFile)
|
|
206
|
+
args.push("--receipt-file", value.receiptFile);
|
|
207
|
+
if (value.apply) {
|
|
208
|
+
args.push("--apply", "--confirm-asset-id", value.confirmAssetId, "--plan-digest", value.planDigest);
|
|
209
|
+
}
|
|
210
|
+
return runCanonicalOperation(context.canonicalBridge, "sandbox_reset", args, SANDBOX_TIMEOUT_MS);
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=sandbox-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-tools.js","sourceRoot":"","sources":["../../../src/tools/sandbox-tools.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.
|
|
3
|
+
"version": "0.8.47",
|
|
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",
|