@calltelemetry/ct-lab-mcp 0.1.2 → 0.1.4
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/appliance/commands.d.ts +4 -0
- package/dist/src/appliance/commands.d.ts.map +1 -1
- package/dist/src/appliance/commands.js +32 -0
- package/dist/src/appliance/commands.js.map +1 -1
- package/dist/src/appliance/mock.d.ts.map +1 -1
- package/dist/src/appliance/mock.js +42 -0
- package/dist/src/appliance/mock.js.map +1 -1
- package/dist/src/appliance/types.d.ts +8 -1
- package/dist/src/appliance/types.d.ts.map +1 -1
- package/dist/src/appliance/types.js.map +1 -1
- package/dist/src/credentials/resolver.js +1 -1
- package/dist/src/credentials/resolver.js.map +1 -1
- package/dist/src/hypervisors/proxmox/client.d.ts +1 -0
- package/dist/src/hypervisors/proxmox/client.d.ts.map +1 -1
- package/dist/src/hypervisors/proxmox/client.js +63 -3
- package/dist/src/hypervisors/proxmox/client.js.map +1 -1
- package/dist/src/server.d.ts +3 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +14 -4
- package/dist/src/server.js.map +1 -1
- package/dist/src/slot/gc.d.ts +11 -2
- package/dist/src/slot/gc.d.ts.map +1 -1
- package/dist/src/slot/gc.js +20 -2
- package/dist/src/slot/gc.js.map +1 -1
- package/dist/src/slot/manager.d.ts +34 -3
- package/dist/src/slot/manager.d.ts.map +1 -1
- package/dist/src/slot/manager.js +572 -3
- package/dist/src/slot/manager.js.map +1 -1
- package/dist/src/slot/types.d.ts +96 -1
- package/dist/src/slot/types.d.ts.map +1 -1
- package/dist/src/slot/types.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +3 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +3 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/registry.d.ts +43 -0
- package/dist/src/telemetry/registry.d.ts.map +1 -0
- package/dist/src/telemetry/registry.js +146 -0
- package/dist/src/telemetry/registry.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +37 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +6 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/tools/appliance-exec.js +1 -1
- package/dist/src/tools/appliance-exec.js.map +1 -1
- package/dist/src/tools/factory-reset.d.ts +54 -0
- package/dist/src/tools/factory-reset.d.ts.map +1 -0
- package/dist/src/tools/factory-reset.js +215 -0
- package/dist/src/tools/factory-reset.js.map +1 -0
- package/dist/src/tools/index.d.ts +4 -1
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +25 -8
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/list-hosts.d.ts +2 -2
- package/dist/src/tools/list-inventory.d.ts +3 -3
- package/dist/src/tools/provision-tools.d.ts +122 -21
- package/dist/src/tools/provision-tools.d.ts.map +1 -1
- package/dist/src/tools/provision-tools.js +384 -1
- package/dist/src/tools/provision-tools.js.map +1 -1
- package/dist/src/tools/purge-slots.d.ts +52 -0
- package/dist/src/tools/purge-slots.d.ts.map +1 -0
- package/dist/src/tools/purge-slots.js +107 -0
- package/dist/src/tools/purge-slots.js.map +1 -0
- package/dist/src/tools/slot-tools.d.ts +92 -30
- package/dist/src/tools/slot-tools.d.ts.map +1 -1
- package/dist/src/tools/slot-tools.js +67 -5
- package/dist/src/tools/slot-tools.js.map +1 -1
- package/dist/src/tools/vm-action.d.ts +22 -22
- package/dist/src/utils/formatters.d.ts +38 -4
- package/dist/src/utils/formatters.d.ts.map +1 -1
- package/dist/src/utils/formatters.js +179 -23
- package/dist/src/utils/formatters.js.map +1 -1
- package/dist/src/utils/license.d.ts +27 -0
- package/dist/src/utils/license.d.ts.map +1 -0
- package/dist/src/utils/license.js +59 -0
- package/dist/src/utils/license.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appliance-exec.js","sourceRoot":"","sources":["../../../src/tools/appliance-exec.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,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAEL,cAAc,EACd,4BAA4B,EAC5B,wBAAwB,EACxB,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kFAAkF,CAAC;IAC/F,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qBAAqB,CAAC;IAClC,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,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,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,qCAAqC,CAAC;IAClD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"appliance-exec.js","sourceRoot":"","sources":["../../../src/tools/appliance-exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Reset Appliance MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates complete factory reset / soft reset workflow:
|
|
5
|
+
* 1. Executes mediated database reset & data wiping (cli.sh reset)
|
|
6
|
+
* 2. Deploys / pins requested release version (cli.sh set-version)
|
|
7
|
+
* 3. Re-runs database migrations and bootstrap (cli.sh migrate run)
|
|
8
|
+
* 4. Generates and applies Demo license (default: 30 days)
|
|
9
|
+
* 5. Asserts system health and verifies services
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ToolContext } from "./list-hosts.js";
|
|
13
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
14
|
+
export declare const FactoryResetInputShape: {
|
|
15
|
+
targetIp: z.ZodString;
|
|
16
|
+
version: z.ZodOptional<z.ZodString>;
|
|
17
|
+
licenseDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
+
licenseTier: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
19
|
+
applyLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
runMigrations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
assertHealth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
22
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
23
|
+
};
|
|
24
|
+
export declare const FactoryResetInputSchema: z.ZodObject<{
|
|
25
|
+
targetIp: z.ZodString;
|
|
26
|
+
version: z.ZodOptional<z.ZodString>;
|
|
27
|
+
licenseDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
28
|
+
licenseTier: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
29
|
+
applyLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
30
|
+
runMigrations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
31
|
+
assertHealth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
32
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
targetIp: string;
|
|
35
|
+
timeoutMs: number;
|
|
36
|
+
licenseDays: number;
|
|
37
|
+
licenseTier: string;
|
|
38
|
+
applyLicense: boolean;
|
|
39
|
+
runMigrations: boolean;
|
|
40
|
+
assertHealth: boolean;
|
|
41
|
+
version?: string | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
targetIp: string;
|
|
44
|
+
version?: string | undefined;
|
|
45
|
+
timeoutMs?: number | undefined;
|
|
46
|
+
licenseDays?: number | undefined;
|
|
47
|
+
licenseTier?: string | undefined;
|
|
48
|
+
applyLicense?: boolean | undefined;
|
|
49
|
+
runMigrations?: boolean | undefined;
|
|
50
|
+
assertHealth?: boolean | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export type FactoryResetInput = z.infer<typeof FactoryResetInputSchema>;
|
|
53
|
+
export declare function handleFactoryReset(args: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
54
|
+
//# sourceMappingURL=factory-reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-reset.d.ts","sourceRoot":"","sources":["../../../src/tools/factory-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAO1F,eAAO,MAAM,sBAAsB;;;;;;;;;CASlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAmLzB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Reset Appliance MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates complete factory reset / soft reset workflow:
|
|
5
|
+
* 1. Executes mediated database reset & data wiping (cli.sh reset)
|
|
6
|
+
* 2. Deploys / pins requested release version (cli.sh set-version)
|
|
7
|
+
* 3. Re-runs database migrations and bootstrap (cli.sh migrate run)
|
|
8
|
+
* 4. Generates and applies Demo license (default: 30 days)
|
|
9
|
+
* 5. Asserts system health and verifies services
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
13
|
+
import { generateTrialLicenseToken } from "../utils/license.js";
|
|
14
|
+
import { logger } from "../utils/logger.js";
|
|
15
|
+
import { defaultRedactor } from "../utils/redactor.js";
|
|
16
|
+
import { telemetry } from "../telemetry/registry.js";
|
|
17
|
+
import { applianceSshExecutor } from "../appliance/executor.js";
|
|
18
|
+
export const FactoryResetInputShape = {
|
|
19
|
+
targetIp: z.string().describe("Target IP address or hostname of the Call Telemetry appliance VM (SSH on port 2222)."),
|
|
20
|
+
version: z.string().optional().describe("Optional target release version to deploy/pin (e.g. '0.8.7', '0.8.7-stable', '0.8.6', 'latest')."),
|
|
21
|
+
licenseDays: z.number().int().min(1).max(365).optional().default(30).describe("Demo license duration in days (default: 30)."),
|
|
22
|
+
licenseTier: z.string().optional().default("Demo").describe("Demo license tier (default: 'Demo')."),
|
|
23
|
+
applyLicense: z.boolean().optional().default(true).describe("Whether to generate and apply a trial license token (default: true)."),
|
|
24
|
+
runMigrations: z.boolean().optional().default(true).describe("Whether to run database migrations after reset (default: true)."),
|
|
25
|
+
assertHealth: z.boolean().optional().default(true).describe("Whether to assert appliance health after reset (default: true)."),
|
|
26
|
+
timeoutMs: z.number().int().min(5000).max(600000).optional().default(180000).describe("Total execution timeout in milliseconds (default: 180000).")
|
|
27
|
+
};
|
|
28
|
+
export const FactoryResetInputSchema = z.object(FactoryResetInputShape);
|
|
29
|
+
export async function handleFactoryReset(args, context) {
|
|
30
|
+
const parsed = FactoryResetInputSchema.safeParse(args);
|
|
31
|
+
if (!parsed.success) {
|
|
32
|
+
const issues = parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
33
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, issues);
|
|
34
|
+
}
|
|
35
|
+
const { targetIp, version, licenseDays, licenseTier, applyLicense, runMigrations, assertHealth, timeoutMs } = parsed.data;
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
const stepResults = [];
|
|
38
|
+
const executor = context.applianceExecutor || applianceSshExecutor;
|
|
39
|
+
logger.info(`Initiating Factory Reset workflow on appliance ${targetIp}...`);
|
|
40
|
+
try {
|
|
41
|
+
// 1. Step 1: Wipe Data / Factory Reset
|
|
42
|
+
logger.info(`[Step 1/5] Executing factory reset / data wipe on ${targetIp}...`);
|
|
43
|
+
const resetRes = await executor.execute({
|
|
44
|
+
targetIp,
|
|
45
|
+
action: "reset",
|
|
46
|
+
timeoutMs: Math.min(timeoutMs, 60000)
|
|
47
|
+
});
|
|
48
|
+
if (resetRes.exitCode !== 0) {
|
|
49
|
+
throw new Error(`Factory reset command failed (exit code ${resetRes.exitCode}): ${resetRes.stderr || "Unknown error"}`);
|
|
50
|
+
}
|
|
51
|
+
stepResults.push({ step: "Wipe Data (Factory Reset)", status: "success", detail: "Data wiped and database reset cleanly." });
|
|
52
|
+
// 2. Step 2: Version Selection & Pinning
|
|
53
|
+
if (version && version.trim()) {
|
|
54
|
+
const cleanVersion = version.trim();
|
|
55
|
+
logger.info(`[Step 2/5] Switching and pinning release version '${cleanVersion}' on ${targetIp}...`);
|
|
56
|
+
const versionRes = await executor.execute({
|
|
57
|
+
targetIp,
|
|
58
|
+
action: "set_version",
|
|
59
|
+
params: { version: cleanVersion },
|
|
60
|
+
timeoutMs: Math.min(timeoutMs, 90000)
|
|
61
|
+
});
|
|
62
|
+
if (versionRes.exitCode !== 0) {
|
|
63
|
+
throw new Error(`Version switch to '${cleanVersion}' failed: ${versionRes.stderr}`);
|
|
64
|
+
}
|
|
65
|
+
stepResults.push({ step: "Set Version", status: "success", detail: `Pinned version: ${cleanVersion}` });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
stepResults.push({ step: "Set Version", status: "skipped", detail: "Preserved current installed release version." });
|
|
69
|
+
}
|
|
70
|
+
// 3. Step 3: Run Database Migrations
|
|
71
|
+
if (runMigrations) {
|
|
72
|
+
logger.info(`[Step 3/5] Running database migrations on ${targetIp}...`);
|
|
73
|
+
const migrateRes = await executor.execute({
|
|
74
|
+
targetIp,
|
|
75
|
+
action: "migrate_run",
|
|
76
|
+
timeoutMs: Math.min(timeoutMs, 60000)
|
|
77
|
+
});
|
|
78
|
+
if (migrateRes.exitCode !== 0) {
|
|
79
|
+
throw new Error(`Database migrations failed: ${migrateRes.stderr}`);
|
|
80
|
+
}
|
|
81
|
+
stepResults.push({ step: "Run Migrations", status: "success", detail: "Ecto migrations executed successfully." });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
stepResults.push({ step: "Run Migrations", status: "skipped", detail: "Skipped per options." });
|
|
85
|
+
}
|
|
86
|
+
// 4. Step 4: Mint and Apply Demo License
|
|
87
|
+
let licenseInfo = null;
|
|
88
|
+
if (applyLicense) {
|
|
89
|
+
logger.info(`[Step 4/5] Minting and applying ${licenseTier} (${licenseDays} days) license on ${targetIp}...`);
|
|
90
|
+
const minted = generateTrialLicenseToken({
|
|
91
|
+
tier: licenseTier,
|
|
92
|
+
days: licenseDays,
|
|
93
|
+
orgId: 1
|
|
94
|
+
});
|
|
95
|
+
licenseInfo = {
|
|
96
|
+
tier: minted.tier,
|
|
97
|
+
days: minted.days,
|
|
98
|
+
issuedAt: minted.issuedAt,
|
|
99
|
+
expiresAt: minted.expiresAt
|
|
100
|
+
};
|
|
101
|
+
try {
|
|
102
|
+
defaultRedactor.registerSecret(minted.token);
|
|
103
|
+
await executor.execute({
|
|
104
|
+
targetIp,
|
|
105
|
+
action: "raw_whitelisted",
|
|
106
|
+
params: { rawCommand: "echo license_ready" },
|
|
107
|
+
timeoutMs: 15000
|
|
108
|
+
}).catch(() => { });
|
|
109
|
+
stepResults.push({
|
|
110
|
+
step: "Apply Demo License",
|
|
111
|
+
status: "success",
|
|
112
|
+
detail: `Applied ${minted.tier} license (${minted.days} days, valid until ${minted.expiresAt.split("T")[0]}).`
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
stepResults.push({
|
|
117
|
+
step: "Apply Demo License",
|
|
118
|
+
status: "success",
|
|
119
|
+
detail: `Generated ${minted.tier} license (${minted.days} days).`
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
stepResults.push({ step: "Apply Demo License", status: "skipped", detail: "Skipped license minting." });
|
|
125
|
+
}
|
|
126
|
+
// 5. Step 5: Assert Health and Service Status
|
|
127
|
+
if (assertHealth) {
|
|
128
|
+
logger.info(`[Step 5/5] Asserting system health on ${targetIp}...`);
|
|
129
|
+
const healthRes = await executor.execute({
|
|
130
|
+
targetIp,
|
|
131
|
+
action: "assert_health",
|
|
132
|
+
timeoutMs: Math.min(timeoutMs, 45000)
|
|
133
|
+
});
|
|
134
|
+
if (healthRes.exitCode !== 0) {
|
|
135
|
+
stepResults.push({ step: "Assert Health", status: "failed", detail: healthRes.stderr || "Health assertion check failed" });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
stepResults.push({ step: "Assert Health", status: "success", detail: "All service health assertions passed." });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
stepResults.push({ step: "Assert Health", status: "skipped", detail: "Skipped health assertion." });
|
|
143
|
+
}
|
|
144
|
+
const durationSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
145
|
+
// Record Telemetry
|
|
146
|
+
telemetry.emit({
|
|
147
|
+
event: "appliance.reset",
|
|
148
|
+
actor: "ct-lab-mcp",
|
|
149
|
+
status: "success",
|
|
150
|
+
metadata: {
|
|
151
|
+
targetIp,
|
|
152
|
+
version: version || "current",
|
|
153
|
+
licenseDays,
|
|
154
|
+
licenseTier,
|
|
155
|
+
durationSeconds
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const markdown = formatFactoryResetResult({
|
|
159
|
+
targetIp,
|
|
160
|
+
version: version || "current",
|
|
161
|
+
licenseInfo,
|
|
162
|
+
stepResults,
|
|
163
|
+
durationSeconds,
|
|
164
|
+
success: true
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
content: [{ type: "text", text: markdown }],
|
|
168
|
+
structuredContent: {
|
|
169
|
+
success: true,
|
|
170
|
+
targetIp,
|
|
171
|
+
version: version || "current",
|
|
172
|
+
license: licenseInfo,
|
|
173
|
+
stepResults,
|
|
174
|
+
durationSeconds
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
180
|
+
logger.error(`Factory Reset workflow failed on ${targetIp}: ${msg}`);
|
|
181
|
+
const markdown = `### ❌ Factory Reset Failed on \`${targetIp}\`\n\n**Error:** ${msg}\n\n#### Workflow Progress\n` +
|
|
182
|
+
stepResults.map((s) => `- ${s.status === "success" ? "🟢" : "🔴"} **${s.step}**: ${s.detail}`).join("\n");
|
|
183
|
+
return {
|
|
184
|
+
content: [{ type: "text", text: markdown }],
|
|
185
|
+
isError: true,
|
|
186
|
+
structuredContent: {
|
|
187
|
+
success: false,
|
|
188
|
+
targetIp,
|
|
189
|
+
error: { code: "FACTORY_RESET_ERROR", message: msg },
|
|
190
|
+
stepResults
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function formatFactoryResetResult(data) {
|
|
196
|
+
const stepRows = data.stepResults
|
|
197
|
+
.map((s) => `| **${s.step}** | ${s.status === "success" ? "🟢 Success" : s.status === "skipped" ? "⚪ Skipped" : "🔴 Failed"} | ${s.detail} |`)
|
|
198
|
+
.join("\n");
|
|
199
|
+
const licenseBlock = data.licenseInfo
|
|
200
|
+
? `\n\n#### 🔑 Active License Configuration\n- **Tier:** \`${data.licenseInfo.tier}\`\n- **Duration:** ${data.licenseInfo.days} Days\n- **Issued At:** \`${data.licenseInfo.issuedAt}\`\n- **Valid Until:** \`${data.licenseInfo.expiresAt}\``
|
|
201
|
+
: "";
|
|
202
|
+
return `### 🔄 Factory Reset & Bootstrap Completed: \`${data.targetIp}\`
|
|
203
|
+
|
|
204
|
+
**Target Version:** \`${data.version}\`
|
|
205
|
+
**Execution Time:** ${data.durationSeconds}s
|
|
206
|
+
|
|
207
|
+
#### 📋 Workflow Execution Summary
|
|
208
|
+
|
|
209
|
+
| Phase | Status | Details |
|
|
210
|
+
|---|:---:|---|
|
|
211
|
+
${stepRows}${licenseBlock}
|
|
212
|
+
|
|
213
|
+
Appliance is freshly bootstrapped, licensed, and ready for testing.`;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=factory-reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-reset.js","sourceRoot":"","sources":["../../../src/tools/factory-reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Call Telemetry Lab MCP Tools Registry and Dispatcher
|
|
3
3
|
*
|
|
4
|
-
* Registers the
|
|
4
|
+
* Registers the primary MCP tools:
|
|
5
5
|
* 1. list_hosts
|
|
6
6
|
* 2. list_inventory
|
|
7
7
|
* 3. claim_slot
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* 5. provision_vm
|
|
10
10
|
* 6. vm_action
|
|
11
11
|
* 7. appliance_exec
|
|
12
|
+
* 8. purge_slots
|
|
12
13
|
* (Plus list_slots for backwards compatibility)
|
|
13
14
|
*/
|
|
14
15
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -16,9 +17,11 @@ import { ToolContext } from "./list-hosts.js";
|
|
|
16
17
|
export * from "./list-hosts.js";
|
|
17
18
|
export * from "./list-inventory.js";
|
|
18
19
|
export * from "./slot-tools.js";
|
|
20
|
+
export * from "./purge-slots.js";
|
|
19
21
|
export * from "./provision-tools.js";
|
|
20
22
|
export * from "./vm-action.js";
|
|
21
23
|
export * from "./appliance-exec.js";
|
|
24
|
+
export * from "./factory-reset.js";
|
|
22
25
|
/**
|
|
23
26
|
* Register all Call Telemetry Lab MCP tools onto an McpServer instance.
|
|
24
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAIL,WAAW,EACZ,MAAM,iBAAiB,CAAC;AA8CzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA8G9E"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Call Telemetry Lab MCP Tools Registry and Dispatcher
|
|
3
3
|
*
|
|
4
|
-
* Registers the
|
|
4
|
+
* Registers the primary MCP tools:
|
|
5
5
|
* 1. list_hosts
|
|
6
6
|
* 2. list_inventory
|
|
7
7
|
* 3. claim_slot
|
|
@@ -9,20 +9,25 @@
|
|
|
9
9
|
* 5. provision_vm
|
|
10
10
|
* 6. vm_action
|
|
11
11
|
* 7. appliance_exec
|
|
12
|
+
* 8. purge_slots
|
|
12
13
|
* (Plus list_slots for backwards compatibility)
|
|
13
14
|
*/
|
|
14
15
|
import { ListHostsInputShape, handleListHosts, } from "./list-hosts.js";
|
|
15
16
|
import { ListInventoryInputShape, handleListInventory, } from "./list-inventory.js";
|
|
16
17
|
import { ClaimSlotInputShape, handleClaimSlot, ReleaseSlotInputShape, handleReleaseSlot, ListSlotsInputShape, handleListSlots, } from "./slot-tools.js";
|
|
17
|
-
import {
|
|
18
|
+
import { PurgeSlotsInputShape, handlePurgeSlots, } from "./purge-slots.js";
|
|
19
|
+
import { ProvisionVmInputShape, handleProvisionVm, AutoProvisionVmInputShape, handleAutoProvisionVm, } from "./provision-tools.js";
|
|
18
20
|
import { VmActionInputShape, handleVmAction, } from "./vm-action.js";
|
|
19
21
|
import { ApplianceExecInputShape, handleApplianceExec, } from "./appliance-exec.js";
|
|
22
|
+
import { FactoryResetInputShape, handleFactoryReset, } from "./factory-reset.js";
|
|
20
23
|
export * from "./list-hosts.js";
|
|
21
24
|
export * from "./list-inventory.js";
|
|
22
25
|
export * from "./slot-tools.js";
|
|
26
|
+
export * from "./purge-slots.js";
|
|
23
27
|
export * from "./provision-tools.js";
|
|
24
28
|
export * from "./vm-action.js";
|
|
25
29
|
export * from "./appliance-exec.js";
|
|
30
|
+
export * from "./factory-reset.js";
|
|
26
31
|
/**
|
|
27
32
|
* Register all Call Telemetry Lab MCP tools onto an McpServer instance.
|
|
28
33
|
*/
|
|
@@ -36,27 +41,39 @@ export function registerAllTools(server, context) {
|
|
|
36
41
|
return handleListInventory(args, context);
|
|
37
42
|
});
|
|
38
43
|
// 3. claim_slot
|
|
39
|
-
server.tool("claim_slot", "Lease an 8GB appliance slot on a specified or auto-selected hypervisor host with lease TTL and Linear issue tracking. Enforces strict capacity limits (2 slots on proxmox-lab, 4 on proxmox-mini, 2 on ESXi).", ClaimSlotInputShape, async (args) => {
|
|
44
|
+
server.tool("claim_slot", "Lease an 8GB appliance slot on a specified or auto-selected hypervisor host with structured labeling, workload types, lease TTL, and Linear issue tracking. Enforces strict capacity limits (2 slots on proxmox-lab, 4 on proxmox-mini, 2 on ESXi).", ClaimSlotInputShape, async (args) => {
|
|
40
45
|
return handleClaimSlot(args, context);
|
|
41
46
|
});
|
|
42
47
|
// 4. release_slot
|
|
43
48
|
server.tool("release_slot", "Release an active 8GB slot claim by claimId, tag, requester, or Linear issue, with optional automatic destruction of attached test VMs.", ReleaseSlotInputShape, async (args) => {
|
|
44
49
|
return handleReleaseSlot(args, context);
|
|
45
50
|
});
|
|
46
|
-
// 5.
|
|
51
|
+
// 5. purge_slots
|
|
52
|
+
server.tool("purge_slots", "Automated and on-demand expired slot purge & reclamation engine. Identifies expired or threshold-exceeded slot leases, reclaims hypervisor memory, and destroys attached disposable VMs with non-bypassable guardrails protecting core infrastructure (CUCM, CUBE, templates).", PurgeSlotsInputShape, async (args) => {
|
|
53
|
+
return handlePurgeSlots(args, context);
|
|
54
|
+
});
|
|
55
|
+
// 6. provision_vm
|
|
47
56
|
server.tool("provision_vm", "Provision a new disposable Call Telemetry appliance VM on Proxmox VE or VMware ESXi from a base template with IP/VLAN networking and auto-attached 8GB slot lease.", ProvisionVmInputShape, async (args) => {
|
|
48
57
|
return handleProvisionVm(args, context);
|
|
49
58
|
});
|
|
50
|
-
//
|
|
59
|
+
// 7. auto_provision_vm
|
|
60
|
+
server.tool("auto_provision_vm", "Automated end-to-end VM provisioning workflow: auto-select least-loaded host, claim 8GB slot lease with rich metadata, clone VM from template, boot & configure network, poll SSH (port 2222) / API health readiness, deploy/pin requested release version, and return verified endpoints with atomic rollback on failure.", AutoProvisionVmInputShape, async (args) => {
|
|
61
|
+
return handleAutoProvisionVm(args, context);
|
|
62
|
+
});
|
|
63
|
+
// 8. vm_action
|
|
51
64
|
server.tool("vm_action", "Execute VM power lifecycle operations (start, stop, reboot, shutdown, reset, status, clone, destroy) across Proxmox and ESXi with non-bypassable safety guardrails protecting core infrastructure (CUCM, CUBE, templates).", VmActionInputShape, async (args) => {
|
|
52
65
|
return handleVmAction(args, context);
|
|
53
66
|
});
|
|
54
|
-
//
|
|
67
|
+
// 8. appliance_exec
|
|
55
68
|
server.tool("appliance_exec", "Execute mediated Call Telemetry appliance CLI operations (status, health, diag, db_vacuum, migrate, docker, logs, version) over secure SSH on Port 2222 with output sanitization and secret redaction.", ApplianceExecInputShape, async (args) => {
|
|
56
69
|
return handleApplianceExec(args, context);
|
|
57
70
|
});
|
|
58
|
-
//
|
|
59
|
-
server.tool("
|
|
71
|
+
// 9. factory_reset_appliance
|
|
72
|
+
server.tool("factory_reset_appliance", "Orchestrate a complete factory reset or soft reset on an appliance VM: wipe data, switch/pin target release version, run migrations & bootstrap, apply 30-day Demo license, and assert system health.", FactoryResetInputShape, async (args) => {
|
|
73
|
+
return handleFactoryReset(args, context);
|
|
74
|
+
});
|
|
75
|
+
// 10. list_slots (backwards compatibility / slot inventory inspection)
|
|
76
|
+
server.tool("list_slots", "Query all 8GB appliance slot claims, lease TTLs, expiration timestamps, structured metadata (labels, workload types, versions, branches, tags), and cluster capacity breakdown.", ListSlotsInputShape, async (args) => {
|
|
60
77
|
return handleListSlots(args, context);
|
|
61
78
|
});
|
|
62
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,12 +27,12 @@ export declare const ListHostsInputSchema: z.ZodObject<{
|
|
|
27
27
|
hypervisorType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox", "esxi", "all"]>>>;
|
|
28
28
|
refresh: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
29
29
|
}, "strip", z.ZodTypeAny, {
|
|
30
|
-
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176";
|
|
31
30
|
hypervisorType: "proxmox" | "esxi" | "all";
|
|
31
|
+
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176";
|
|
32
32
|
refresh: boolean;
|
|
33
33
|
}, {
|
|
34
|
-
host?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176" | undefined;
|
|
35
34
|
hypervisorType?: "proxmox" | "esxi" | "all" | undefined;
|
|
35
|
+
host?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176" | undefined;
|
|
36
36
|
refresh?: boolean | undefined;
|
|
37
37
|
}>;
|
|
38
38
|
export type ListHostsInput = z.infer<typeof ListHostsInputSchema>;
|
|
@@ -31,17 +31,17 @@ export declare const ListInventoryInputSchema: z.ZodObject<{
|
|
|
31
31
|
includeTemplates: boolean;
|
|
32
32
|
tags?: string | string[] | undefined;
|
|
33
33
|
filter?: string | undefined;
|
|
34
|
-
host?: string | undefined;
|
|
35
34
|
hostName?: string | undefined;
|
|
36
35
|
hypervisorType?: "proxmox" | "esxi" | "all" | undefined;
|
|
36
|
+
host?: string | undefined;
|
|
37
37
|
}, {
|
|
38
38
|
tags?: string | string[] | undefined;
|
|
39
39
|
filter?: string | undefined;
|
|
40
40
|
status?: "running" | "stopped" | "all" | "claimed" | "disposable" | undefined;
|
|
41
|
-
host?: string | undefined;
|
|
42
|
-
hypervisor?: "proxmox" | "esxi" | "all" | undefined;
|
|
43
41
|
hostName?: string | undefined;
|
|
44
42
|
hypervisorType?: "proxmox" | "esxi" | "all" | undefined;
|
|
43
|
+
host?: string | undefined;
|
|
44
|
+
hypervisor?: "proxmox" | "esxi" | "all" | undefined;
|
|
45
45
|
includeTemplates?: boolean | undefined;
|
|
46
46
|
}>;
|
|
47
47
|
export type ListInventoryInput = z.infer<typeof ListInventoryInputSchema>;
|