@calltelemetry/ct-lab-mcp 0.8.96 → 0.8.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +50 -33
  2. package/dist/bin/ct-lab-mcp.js +3 -6
  3. package/dist/src/canonical/bridge.d.ts +5 -0
  4. package/dist/src/canonical/bridge.d.ts.map +1 -1
  5. package/dist/src/canonical/bridge.js +17 -14
  6. package/dist/src/canonical/bridge.js.map +1 -1
  7. package/dist/src/credentials/index.d.ts +1 -0
  8. package/dist/src/credentials/index.d.ts.map +1 -1
  9. package/dist/src/credentials/index.js +1 -0
  10. package/dist/src/credentials/index.js.map +1 -1
  11. package/dist/src/credentials/remediation.d.ts +33 -0
  12. package/dist/src/credentials/remediation.d.ts.map +1 -0
  13. package/dist/src/credentials/remediation.js +105 -0
  14. package/dist/src/credentials/remediation.js.map +1 -0
  15. package/dist/src/credentials/resolver.d.ts +2 -3
  16. package/dist/src/credentials/resolver.d.ts.map +1 -1
  17. package/dist/src/credentials/resolver.js +7 -121
  18. package/dist/src/credentials/resolver.js.map +1 -1
  19. package/dist/src/generated-version.d.ts +1 -1
  20. package/dist/src/generated-version.js +1 -1
  21. package/dist/src/hypervisors/esxi/retired.d.ts +7 -7
  22. package/dist/src/hypervisors/esxi/retired.d.ts.map +1 -1
  23. package/dist/src/hypervisors/esxi/retired.js +8 -8
  24. package/dist/src/hypervisors/esxi/retired.js.map +1 -1
  25. package/dist/src/hypervisors/index.d.ts +0 -2
  26. package/dist/src/hypervisors/index.d.ts.map +1 -1
  27. package/dist/src/hypervisors/index.js +0 -2
  28. package/dist/src/hypervisors/index.js.map +1 -1
  29. package/dist/src/hypervisors/manager.d.ts.map +1 -1
  30. package/dist/src/hypervisors/manager.js +14 -31
  31. package/dist/src/hypervisors/manager.js.map +1 -1
  32. package/dist/src/server.d.ts.map +1 -1
  33. package/dist/src/server.js +3 -7
  34. package/dist/src/server.js.map +1 -1
  35. package/dist/src/slot/manager.d.ts +2 -1
  36. package/dist/src/slot/manager.d.ts.map +1 -1
  37. package/dist/src/slot/manager.js +6 -19
  38. package/dist/src/slot/manager.js.map +1 -1
  39. package/dist/src/tools/claimed-import-qcow.d.ts +2 -2
  40. package/dist/src/tools/credential-status.d.ts +2 -2
  41. package/dist/src/tools/credential-status.d.ts.map +1 -1
  42. package/dist/src/tools/credential-status.js +22 -3
  43. package/dist/src/tools/credential-status.js.map +1 -1
  44. package/dist/src/tools/cube-provision.d.ts +2 -2
  45. package/dist/src/tools/find-slot.d.ts +2 -2
  46. package/dist/src/tools/import-qcow.d.ts +6 -6
  47. package/dist/src/tools/index.d.ts.map +1 -1
  48. package/dist/src/tools/index.js +3 -1
  49. package/dist/src/tools/index.js.map +1 -1
  50. package/dist/src/tools/list-hosts.d.ts +1 -1
  51. package/dist/src/tools/list-hosts.d.ts.map +1 -1
  52. package/dist/src/tools/list-hosts.js +2 -10
  53. package/dist/src/tools/list-hosts.js.map +1 -1
  54. package/dist/src/tools/list-inventory.js +2 -2
  55. package/dist/src/tools/list-inventory.js.map +1 -1
  56. package/dist/src/tools/provision-tools.d.ts +8 -8
  57. package/dist/src/tools/quick-provision.d.ts +2 -2
  58. package/dist/src/tools/storage-tools.d.ts.map +1 -1
  59. package/dist/src/tools/storage-tools.js +2 -3
  60. package/dist/src/tools/storage-tools.js.map +1 -1
  61. package/dist/src/transports/sse.d.ts.map +1 -1
  62. package/dist/src/transports/sse.js +1 -1
  63. package/dist/src/transports/sse.js.map +1 -1
  64. package/dist/src/worker.d.ts +0 -2
  65. package/dist/src/worker.d.ts.map +1 -1
  66. package/dist/src/worker.js +0 -1
  67. package/dist/src/worker.js.map +1 -1
  68. package/package.json +2 -4
  69. package/dist/src/hypervisors/esxi/client.d.ts +0 -105
  70. package/dist/src/hypervisors/esxi/client.d.ts.map +0 -1
  71. package/dist/src/hypervisors/esxi/client.js +0 -607
  72. package/dist/src/hypervisors/esxi/client.js.map +0 -1
  73. package/dist/src/hypervisors/esxi/mock.d.ts +0 -46
  74. package/dist/src/hypervisors/esxi/mock.d.ts.map +0 -1
  75. package/dist/src/hypervisors/esxi/mock.js +0 -208
  76. package/dist/src/hypervisors/esxi/mock.js.map +0 -1
@@ -1,46 +0,0 @@
1
- /**
2
- * Mock VMware ESXi Client & Driver for Offline Simulation
3
- * Implements IHypervisorDriver and IEsxiClient backed by in-memory ESXi state machine.
4
- */
5
- import { EsxiDriver, IEsxiClient, EsxiVmSummary } from "./client.js";
6
- import { EsxiHostConfig } from "../../credentials/types.js";
7
- import { SafetyGuardrailEngine } from "../../guardrails/safety.js";
8
- export declare class MockEsxiClient implements IEsxiClient {
9
- readonly hostConfig: EsxiHostConfig;
10
- private vms;
11
- private hostSummary;
12
- constructor(hostConfig: EsxiHostConfig);
13
- private seedDefaultData;
14
- private addVmInternal;
15
- getHostSummary(): Promise<{
16
- cpuCores: number;
17
- cpuUsageMhz?: number;
18
- memoryTotalMb: number;
19
- memoryUsedMb: number;
20
- datastoreTotalGb: number;
21
- datastoreFreeGb: number;
22
- }>;
23
- listVms(): Promise<EsxiVmSummary[]>;
24
- getVm(vmName: string): Promise<EsxiVmSummary | null>;
25
- cloneVm(sourceVmName: string, targetVmName: string, options?: {
26
- memoryMb?: number;
27
- cpuCores?: number;
28
- datastore?: string;
29
- network?: string;
30
- }): Promise<{
31
- success: boolean;
32
- taskRef?: string;
33
- vmName: string;
34
- }>;
35
- startVm(vmName: string): Promise<void>;
36
- stopVm(vmName: string, _force?: boolean): Promise<void>;
37
- rebootVm(vmName: string): Promise<void>;
38
- destroyVm(vmName: string): Promise<void>;
39
- }
40
- export declare class MockEsxiDriver extends EsxiDriver {
41
- readonly isMock: boolean;
42
- private mockClient;
43
- constructor(hostConfig: EsxiHostConfig, safetyEngine?: SafetyGuardrailEngine);
44
- get underlyingMock(): MockEsxiClient;
45
- }
46
- //# sourceMappingURL=mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../src/hypervisors/esxi/mock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAgC,MAAM,4BAA4B,CAAC;AAEjG,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,OAAO,CAAC,GAAG,CAAyC;IACpD,OAAO,CAAC,WAAW,CAOjB;gBAEU,UAAU,EAAE,cAAc;IAKtC,OAAO,CAAC,eAAe;IAsGvB,OAAO,CAAC,aAAa;IAIf,cAAc,IAAI,OAAO,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAaI,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAInC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKpD,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA+B5D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO/C;AAED,qBAAa,cAAe,SAAQ,UAAU;IAI5C,SAAkB,MAAM,EAAE,OAAO,CAAQ;IACzC,OAAO,CAAC,UAAU,CAAiB;gBAGjC,UAAU,EAAE,cAAc,EAC1B,YAAY,GAAE,qBAAoD;IAOpE,IAAI,cAAc,IAAI,cAAc,CAEnC;CACF"}
@@ -1,208 +0,0 @@
1
- /**
2
- * Mock VMware ESXi Client & Driver for Offline Simulation
3
- * Implements IHypervisorDriver and IEsxiClient backed by in-memory ESXi state machine.
4
- */
5
- import { EsxiDriver } from "./client.js";
6
- import { defaultSafetyGuardrailEngine } from "../../guardrails/safety.js";
7
- export class MockEsxiClient {
8
- hostConfig;
9
- vms = new Map();
10
- hostSummary = {
11
- cpuCores: 32,
12
- cpuUsageMhz: 4800,
13
- memoryTotalMb: 131072, // 128 GB
14
- memoryUsedMb: 32768,
15
- datastoreTotalGb: 1860,
16
- datastoreFreeGb: 1200
17
- };
18
- constructor(hostConfig) {
19
- this.hostConfig = hostConfig;
20
- this.seedDefaultData();
21
- }
22
- seedDefaultData() {
23
- // 1. Core Cisco CUCM Infrastructure
24
- this.addVmInternal({
25
- name: "CUCM14-01-6-30",
26
- path: "[datastore1] CUCM14-01-6-30/CUCM14-01-6-30.vmx",
27
- powerState: "poweredOn",
28
- memoryMb: 12288,
29
- cpuCores: 4,
30
- ipAddress: "192.168.125.14",
31
- isTemplate: false,
32
- annotation: "Core CUCM 14 Lab Cluster",
33
- tags: ["cucm", "cisco", "protected"]
34
- });
35
- this.addVmInternal({
36
- name: "CUCM15-01-6-29",
37
- path: "[datastore1] CUCM15-01-6-29/CUCM15-01-6-29.vmx",
38
- powerState: "poweredOn",
39
- memoryMb: 12288,
40
- cpuCores: 4,
41
- ipAddress: "192.168.125.15",
42
- isTemplate: false,
43
- annotation: "Core CUCM 15 Lab Cluster (Node 1)",
44
- tags: ["cucm", "cisco", "protected"]
45
- });
46
- this.addVmInternal({
47
- name: "CUCM15-02-6-30",
48
- path: "[datastore1] CUCM15-02-6-30/CUCM15-02-6-30.vmx",
49
- powerState: "poweredOn",
50
- memoryMb: 12288,
51
- cpuCores: 4,
52
- ipAddress: "192.168.125.16",
53
- isTemplate: false,
54
- annotation: "Core CUCM 15 Lab Cluster (Node 2)",
55
- tags: ["cucm", "cisco", "protected"]
56
- });
57
- this.addVmInternal({
58
- name: "CUCM-115Cluster1",
59
- path: "[datastore1] CUCM-115Cluster1/CUCM-115Cluster1.vmx",
60
- powerState: "poweredOff",
61
- memoryMb: 12288,
62
- cpuCores: 4,
63
- ipAddress: "192.168.125.115",
64
- isTemplate: false,
65
- annotation: "Core CUCM 11.5 Lab Cluster",
66
- tags: ["cucm", "cisco", "protected"]
67
- });
68
- // 2. CUBE Voice Gateway
69
- this.addVmInternal({
70
- name: "CUBE-8000V-[SIP-LAB]-cube-lab",
71
- path: "[datastore1] CUBE-8000V-[SIP-LAB]-cube-lab/CUBE-8000V-[SIP-LAB]-cube-lab.vmx",
72
- powerState: "poweredOn",
73
- memoryMb: 4096,
74
- cpuCores: 2,
75
- ipAddress: "192.168.124.50",
76
- isTemplate: false,
77
- annotation: "Core Cat8000v CUBE Router",
78
- tags: ["cube", "cat8000v", "voice", "protected"]
79
- });
80
- // 3. Lab Infrastructure
81
- this.addVmInternal({
82
- name: "GH-Runner",
83
- path: "[datastore1] GH-Runner/GH-Runner.vmx",
84
- powerState: "poweredOn",
85
- memoryMb: 16384,
86
- cpuCores: 8,
87
- ipAddress: "192.168.123.90",
88
- isTemplate: false,
89
- annotation: "GitHub Actions CI Runner",
90
- tags: ["infra", "ci", "runner", "protected"]
91
- });
92
- this.addVmInternal({
93
- name: "LAB-K8S-192.168.125.118",
94
- path: "[datastore1] LAB-K8S-192.168.125.118/LAB-K8S-192.168.125.118.vmx",
95
- powerState: "poweredOn",
96
- memoryMb: 32768,
97
- cpuCores: 8,
98
- ipAddress: "192.168.125.118",
99
- isTemplate: false,
100
- annotation: "Kubernetes Dev Cluster",
101
- tags: ["k8s", "infra", "protected"]
102
- });
103
- // 4. Golden Base Template
104
- this.addVmInternal({
105
- name: "CT-087-STABLE-TEMPLATE",
106
- path: "[datastore1] CT-087-STABLE-TEMPLATE/CT-087-STABLE-TEMPLATE.vmtx",
107
- powerState: "poweredOff",
108
- memoryMb: 8192,
109
- cpuCores: 4,
110
- isTemplate: true,
111
- diskBytes: 60 * 1024 ** 3,
112
- annotation: "ESXi Base Appliance Template 0.8.7-stable",
113
- tags: ["template", "golden", "protected"]
114
- });
115
- }
116
- addVmInternal(vm) {
117
- this.vms.set(vm.name.toLowerCase(), vm);
118
- }
119
- async getHostSummary() {
120
- let usedMemMb = 0;
121
- for (const vm of this.vms.values()) {
122
- if (vm.powerState === "poweredOn") {
123
- usedMemMb += vm.memoryMb;
124
- }
125
- }
126
- return {
127
- ...this.hostSummary,
128
- memoryUsedMb: usedMemMb
129
- };
130
- }
131
- async listVms() {
132
- return Array.from(this.vms.values()).map((v) => ({ ...v }));
133
- }
134
- async getVm(vmName) {
135
- const vm = this.vms.get(vmName.toLowerCase());
136
- return vm ? { ...vm } : null;
137
- }
138
- async cloneVm(sourceVmName, targetVmName, options = {}) {
139
- const source = this.vms.get(sourceVmName.toLowerCase());
140
- if (!source) {
141
- throw new Error(`Source VM '${sourceVmName}' not found in ESXi mock.`);
142
- }
143
- if (this.vms.has(targetVmName.toLowerCase())) {
144
- throw new Error(`Target VM '${targetVmName}' already exists in ESXi mock.`);
145
- }
146
- const newVm = {
147
- name: targetVmName,
148
- path: `[${options.datastore || "datastore1"}] ${targetVmName}/${targetVmName}.vmx`,
149
- powerState: "poweredOff",
150
- memoryMb: options.memoryMb || source.memoryMb,
151
- diskBytes: source.diskBytes,
152
- cpuCores: options.cpuCores || source.cpuCores,
153
- isTemplate: false,
154
- annotation: `Cloned from ${sourceVmName}`,
155
- tags: ["cloned", "disposable"]
156
- };
157
- this.addVmInternal(newVm);
158
- return {
159
- success: true,
160
- taskRef: `task-clone-${Date.now()}`,
161
- vmName: targetVmName
162
- };
163
- }
164
- async startVm(vmName) {
165
- const vm = this.vms.get(vmName.toLowerCase());
166
- if (!vm)
167
- throw new Error(`VM '${vmName}' not found in ESXi mock.`);
168
- vm.powerState = "poweredOn";
169
- if (!vm.ipAddress) {
170
- vm.ipAddress = `192.168.124.${100 + Math.floor(Math.random() * 100)}`;
171
- }
172
- }
173
- async stopVm(vmName, _force = false) {
174
- const vm = this.vms.get(vmName.toLowerCase());
175
- if (!vm)
176
- throw new Error(`VM '${vmName}' not found in ESXi mock.`);
177
- vm.powerState = "poweredOff";
178
- }
179
- async rebootVm(vmName) {
180
- const vm = this.vms.get(vmName.toLowerCase());
181
- if (!vm)
182
- throw new Error(`VM '${vmName}' not found in ESXi mock.`);
183
- vm.powerState = "poweredOn";
184
- }
185
- async destroyVm(vmName) {
186
- const key = vmName.toLowerCase();
187
- if (!this.vms.has(key)) {
188
- throw new Error(`VM '${vmName}' not found in ESXi mock.`);
189
- }
190
- this.vms.delete(key);
191
- }
192
- }
193
- export class MockEsxiDriver extends EsxiDriver {
194
- // Always mock regardless of the passed hostConfig's isMock flag: this
195
- // driver class IS the in-memory simulation and must never be mistaken
196
- // for a real transport. See QA-395.
197
- isMock = true;
198
- mockClient;
199
- constructor(hostConfig, safetyEngine = defaultSafetyGuardrailEngine) {
200
- const mock = new MockEsxiClient(hostConfig);
201
- super(hostConfig, mock, safetyEngine);
202
- this.mockClient = mock;
203
- }
204
- get underlyingMock() {
205
- return this.mockClient;
206
- }
207
- }
208
- //# sourceMappingURL=mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../../src/hypervisors/esxi/mock.ts"],"names":[],"mappings":"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"}