@soyrageagency/proxmox-mcp 1.0.0

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +792 -0
  3. package/dist/assets.d.ts +18 -0
  4. package/dist/assets.js +53 -0
  5. package/dist/assets.js.map +1 -0
  6. package/dist/branding.d.ts +28 -0
  7. package/dist/branding.js +58 -0
  8. package/dist/branding.js.map +1 -0
  9. package/dist/config.d.ts +70 -0
  10. package/dist/config.js +119 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +14 -0
  13. package/dist/index.js +89 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/logger.d.ts +23 -0
  16. package/dist/logger.js +65 -0
  17. package/dist/logger.js.map +1 -0
  18. package/dist/plugins.d.ts +32 -0
  19. package/dist/plugins.js +149 -0
  20. package/dist/plugins.js.map +1 -0
  21. package/dist/proxmox/client.d.ts +153 -0
  22. package/dist/proxmox/client.js +620 -0
  23. package/dist/proxmox/client.js.map +1 -0
  24. package/dist/resilience/backup-verifier.d.ts +28 -0
  25. package/dist/resilience/backup-verifier.js +222 -0
  26. package/dist/resilience/backup-verifier.js.map +1 -0
  27. package/dist/resilience/dr-drill.d.ts +17 -0
  28. package/dist/resilience/dr-drill.js +138 -0
  29. package/dist/resilience/dr-drill.js.map +1 -0
  30. package/dist/resilience/engine.d.ts +68 -0
  31. package/dist/resilience/engine.js +151 -0
  32. package/dist/resilience/engine.js.map +1 -0
  33. package/dist/resilience/patch-orchestrator.d.ts +31 -0
  34. package/dist/resilience/patch-orchestrator.js +188 -0
  35. package/dist/resilience/patch-orchestrator.js.map +1 -0
  36. package/dist/resilience/report.d.ts +33 -0
  37. package/dist/resilience/report.js +264 -0
  38. package/dist/resilience/report.js.map +1 -0
  39. package/dist/resilience/runbook.d.ts +42 -0
  40. package/dist/resilience/runbook.js +165 -0
  41. package/dist/resilience/runbook.js.map +1 -0
  42. package/dist/resilience/signing.d.ts +43 -0
  43. package/dist/resilience/signing.js +107 -0
  44. package/dist/resilience/signing.js.map +1 -0
  45. package/dist/resilience/types.d.ts +150 -0
  46. package/dist/resilience/types.js +14 -0
  47. package/dist/resilience/types.js.map +1 -0
  48. package/dist/resilience/util.d.ts +16 -0
  49. package/dist/resilience/util.js +32 -0
  50. package/dist/resilience/util.js.map +1 -0
  51. package/dist/tools/about.d.ts +14 -0
  52. package/dist/tools/about.js +54 -0
  53. package/dist/tools/about.js.map +1 -0
  54. package/dist/tools/backups.d.ts +15 -0
  55. package/dist/tools/backups.js +91 -0
  56. package/dist/tools/backups.js.map +1 -0
  57. package/dist/tools/cluster.d.ts +12 -0
  58. package/dist/tools/cluster.js +48 -0
  59. package/dist/tools/cluster.js.map +1 -0
  60. package/dist/tools/context.d.ts +30 -0
  61. package/dist/tools/context.js +12 -0
  62. package/dist/tools/context.js.map +1 -0
  63. package/dist/tools/guests.d.ts +15 -0
  64. package/dist/tools/guests.js +96 -0
  65. package/dist/tools/guests.js.map +1 -0
  66. package/dist/tools/lifecycle.d.ts +16 -0
  67. package/dist/tools/lifecycle.js +93 -0
  68. package/dist/tools/lifecycle.js.map +1 -0
  69. package/dist/tools/management.d.ts +17 -0
  70. package/dist/tools/management.js +135 -0
  71. package/dist/tools/management.js.map +1 -0
  72. package/dist/tools/nodes.d.ts +12 -0
  73. package/dist/tools/nodes.js +44 -0
  74. package/dist/tools/nodes.js.map +1 -0
  75. package/dist/tools/provisioning.d.ts +16 -0
  76. package/dist/tools/provisioning.js +122 -0
  77. package/dist/tools/provisioning.js.map +1 -0
  78. package/dist/tools/resilience.d.ts +21 -0
  79. package/dist/tools/resilience.js +116 -0
  80. package/dist/tools/resilience.js.map +1 -0
  81. package/dist/tools/snapshots.d.ts +17 -0
  82. package/dist/tools/snapshots.js +89 -0
  83. package/dist/tools/snapshots.js.map +1 -0
  84. package/dist/tools/storage.d.ts +11 -0
  85. package/dist/tools/storage.js +39 -0
  86. package/dist/tools/storage.js.map +1 -0
  87. package/dist/tools/tasks.d.ts +11 -0
  88. package/dist/tools/tasks.js +43 -0
  89. package/dist/tools/tasks.js.map +1 -0
  90. package/dist/tui/ansi.d.ts +63 -0
  91. package/dist/tui/ansi.js +115 -0
  92. package/dist/tui/ansi.js.map +1 -0
  93. package/dist/tui/app.d.ts +109 -0
  94. package/dist/tui/app.js +904 -0
  95. package/dist/tui/app.js.map +1 -0
  96. package/dist/tui/box.d.ts +18 -0
  97. package/dist/tui/box.js +38 -0
  98. package/dist/tui/box.js.map +1 -0
  99. package/dist/tui/index.d.ts +20 -0
  100. package/dist/tui/index.js +65 -0
  101. package/dist/tui/index.js.map +1 -0
  102. package/dist/update/channel.d.ts +69 -0
  103. package/dist/update/channel.js +165 -0
  104. package/dist/update/channel.js.map +1 -0
  105. package/dist/update/notice.d.ts +11 -0
  106. package/dist/update/notice.js +27 -0
  107. package/dist/update/notice.js.map +1 -0
  108. package/dist/utils/format.d.ts +21 -0
  109. package/dist/utils/format.js +63 -0
  110. package/dist/utils/format.js.map +1 -0
  111. package/dist/utils/result.d.ts +25 -0
  112. package/dist/utils/result.js +26 -0
  113. package/dist/utils/result.js.map +1 -0
  114. package/package.json +87 -0
  115. package/scripts/install.mjs +301 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/proxmox/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Automated backup verification.
3
+ *
4
+ * Almost nobody tests their restores — they find out on the day of the
5
+ * disaster. This takes the latest vzdump for each target guest, restores it
6
+ * into an *ephemeral, network-isolated* VM, boots it, runs health checks
7
+ * (service comes up, database answers, key-file checksums match), tears the
8
+ * ephemeral guest down and emits a signed, dated evidence report.
9
+ *
10
+ * It runs fully in demo mode (no cluster needed) and, against a real cluster,
11
+ * performs the actual restore → boot → check → destroy cycle via the Proxmox
12
+ * API, fencing the restored guest onto an isolated bridge so it can never talk
13
+ * to production while it is being validated.
14
+ *
15
+ * Part of Proxmox MCP Server.
16
+ * Crafted by SoyRage Agency — https://soyrage.es/
17
+ * MIT licensed (see LICENSE).
18
+ */
19
+ import type { ResilienceContext } from "./engine.js";
20
+ import type { BackupVerifyReport } from "./types.js";
21
+ export interface VerifyOptions {
22
+ /** Restrict to a single VMID; otherwise verify the latest backup per guest. */
23
+ vmid?: number;
24
+ /** Optional node to restore on (default: first node). */
25
+ node?: string;
26
+ }
27
+ /** Verify the latest backup(s) and return an (unsigned) evidence report. */
28
+ export declare function verifyBackups(ctx: ResilienceContext, opts?: VerifyOptions): Promise<BackupVerifyReport>;
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Automated backup verification.
3
+ *
4
+ * Almost nobody tests their restores — they find out on the day of the
5
+ * disaster. This takes the latest vzdump for each target guest, restores it
6
+ * into an *ephemeral, network-isolated* VM, boots it, runs health checks
7
+ * (service comes up, database answers, key-file checksums match), tears the
8
+ * ephemeral guest down and emits a signed, dated evidence report.
9
+ *
10
+ * It runs fully in demo mode (no cluster needed) and, against a real cluster,
11
+ * performs the actual restore → boot → check → destroy cycle via the Proxmox
12
+ * API, fencing the restored guest onto an isolated bridge so it can never talk
13
+ * to production while it is being validated.
14
+ *
15
+ * Part of Proxmox MCP Server.
16
+ * Crafted by SoyRage Agency — https://soyrage.es/
17
+ * MIT licensed (see LICENSE).
18
+ */
19
+ import { CONTROLS } from "./report.js";
20
+ import { worst, nowIso, shortId, sleep } from "./util.js";
21
+ /** Select the newest backup archive for each in-scope VMID. */
22
+ async function candidates(ctx, opts) {
23
+ const node = await ctx.client.resolveNode(opts.node);
24
+ const guests = await ctx.client.guests();
25
+ const nameOf = (vmid) => guests.find((g) => g.vmid === vmid)?.name ?? `vmid-${vmid}`;
26
+ const storages = await ctx.client.backupStorages(node);
27
+ const now = Math.floor(Date.now() / 1000);
28
+ const best = new Map();
29
+ for (const s of storages) {
30
+ for (const it of (await ctx.client.storageContent(node, s, "backup")) ?? []) {
31
+ const vmid = Number(it.vmid ?? 0);
32
+ if (!vmid)
33
+ continue;
34
+ if (opts.vmid && vmid !== opts.vmid)
35
+ continue;
36
+ const ctime = Number(it.ctime ?? 0);
37
+ // Compare on the same clamped age we store, so a future-dated archive
38
+ // (clock skew → negative age) can't masquerade as the newest one.
39
+ const ageSec = Math.max(0, now - ctime);
40
+ const prev = best.get(vmid);
41
+ if (!prev || ageSec < prev.ageSec) {
42
+ best.set(vmid, {
43
+ vmid,
44
+ name: nameOf(vmid),
45
+ archive: String(it.volid ?? ""),
46
+ ageSec,
47
+ sizeBytes: Number(it.size ?? 0),
48
+ });
49
+ }
50
+ }
51
+ }
52
+ return [...best.values()].sort((a, b) => a.vmid - b.vmid);
53
+ }
54
+ /** Build the health-check set appropriate for a guest. */
55
+ function planChecks(c) {
56
+ const checks = [
57
+ { id: "service-up", label: "Guest boots & agent responds" },
58
+ { id: "checksum:/etc/fstab", label: "Key-file checksum: /etc/fstab" },
59
+ ];
60
+ if (/db|postgres|mysql|maria/i.test(c.name)) {
61
+ checks.splice(1, 0, { id: "db-responds", label: "Database accepts connections" });
62
+ checks.push({ id: "checksum:/var/lib/db/PG_VERSION", label: "Key-file checksum: PG_VERSION" });
63
+ }
64
+ else {
65
+ checks.push({ id: "checksum:/etc/os-release", label: "Key-file checksum: /etc/os-release" });
66
+ }
67
+ return checks;
68
+ }
69
+ /** Demo simulation of a single restore+verify cycle. */
70
+ function simulateItem(ctx, c) {
71
+ const restoreSec = Math.round(c.sizeBytes / (220 * 1024 * 1024)) + 24; // ~220 MB/s + boot
72
+ const specs = planChecks(c);
73
+ const checks = specs.map((spec, i) => {
74
+ // Everything passes except a deliberately-surfaced checksum drift on grafana,
75
+ // to prove the verifier actually inspects rather than rubber-stamps.
76
+ const drift = c.name === "grafana" && spec.id.startsWith("checksum:");
77
+ const outcome = drift ? "warn" : "pass";
78
+ const detail = drift
79
+ ? "checksum differs from golden baseline (config changed since baseline)"
80
+ : spec.id === "service-up"
81
+ ? "systemd reached graphical.target; qemu-guest-agent ping OK"
82
+ : spec.id === "db-responds"
83
+ ? "pg_isready: accepting connections on 5432"
84
+ : "sha256 matches recorded baseline";
85
+ return { ...spec, outcome, detail, ms: 120 + i * 40 + (spec.id === "service-up" ? restoreSec * 3 : 0) };
86
+ });
87
+ return {
88
+ vmid: c.vmid,
89
+ name: c.name,
90
+ archive: c.archive,
91
+ archiveAgeSec: c.ageSec,
92
+ ephemeralVmid: ctx.config.resilience.ephemeralVmidBase + c.vmid,
93
+ restoreSec,
94
+ checks,
95
+ outcome: worst(checks.map((x) => x.outcome)),
96
+ cleanedUp: true,
97
+ };
98
+ }
99
+ /** Live restore+verify cycle for a single candidate (best-effort, conservative). */
100
+ async function verifyItemLive(ctx, c) {
101
+ const node = await ctx.client.resolveNode();
102
+ const ephemeralVmid = ctx.config.resilience.ephemeralVmidBase + c.vmid;
103
+ const isQemu = /vzdump-qemu-/.test(c.archive);
104
+ const base = `/nodes/${node}/${isQemu ? "qemu" : "lxc"}/${ephemeralVmid}`;
105
+ const checks = [];
106
+ let cleanedUp = false;
107
+ const t0 = Date.now();
108
+ try {
109
+ // 1. Restore onto the ephemeral VMID (overwrite if a stale one exists).
110
+ const params = { vmid: ephemeralVmid, force: 1 };
111
+ if (isQemu) {
112
+ params.archive = c.archive;
113
+ await ctx.client.post(`/nodes/${node}/qemu`, params);
114
+ }
115
+ else {
116
+ params.ostemplate = c.archive;
117
+ params.restore = 1;
118
+ await ctx.client.post(`/nodes/${node}/lxc`, params);
119
+ }
120
+ // 2. Fence the NIC onto the isolated bridge, link down.
121
+ try {
122
+ await ctx.client.post(`${base}/config`, {
123
+ net0: `virtio,bridge=${ctx.config.resilience.isolatedBridge},link_down=1`,
124
+ });
125
+ }
126
+ catch {
127
+ /* non-fatal: some guests have no net0 */
128
+ }
129
+ // 3. Boot and wait for the agent.
130
+ await ctx.client.post(`${base}/status/start`);
131
+ const restoreSec = Math.round((Date.now() - t0) / 1000);
132
+ const agentUp = await waitForAgent(ctx, base, isQemu);
133
+ checks.push({
134
+ id: "service-up",
135
+ label: "Guest boots & agent responds",
136
+ outcome: agentUp ? "pass" : "warn",
137
+ detail: agentUp ? "guest agent responded" : "guest booted; agent did not answer in time",
138
+ ms: restoreSec * 1000,
139
+ });
140
+ // 4. Best-effort file/DB checks via the guest agent.
141
+ for (const spec of planChecks(c).slice(1))
142
+ checks.push(await liveCheck(ctx, base, spec));
143
+ return {
144
+ vmid: c.vmid,
145
+ name: c.name,
146
+ archive: c.archive,
147
+ archiveAgeSec: c.ageSec,
148
+ ephemeralVmid,
149
+ restoreSec,
150
+ checks,
151
+ outcome: worst(checks.map((x) => x.outcome)),
152
+ cleanedUp,
153
+ };
154
+ }
155
+ finally {
156
+ // 5. Always tear the ephemeral guest down.
157
+ try {
158
+ await ctx.client.post(`${base}/status/stop`).catch(() => { });
159
+ await sleep(1500);
160
+ await ctx.client.del(`${base}?purge=1&destroy-unreferenced-disks=1`);
161
+ cleanedUp = true;
162
+ }
163
+ catch (err) {
164
+ ctx.logger.warn(`Ephemeral ${ephemeralVmid} cleanup failed: ${err.message}`);
165
+ }
166
+ }
167
+ }
168
+ async function waitForAgent(ctx, base, isQemu) {
169
+ if (!isQemu)
170
+ return true; // LXC has no agent; boot is enough
171
+ for (let i = 0; i < 20; i++) {
172
+ try {
173
+ await ctx.client.get(`${base}/agent/ping`);
174
+ return true;
175
+ }
176
+ catch {
177
+ await sleep(3000);
178
+ }
179
+ }
180
+ return false;
181
+ }
182
+ async function liveCheck(_ctx, _base, spec) {
183
+ // Live file/DB verification needs the guest agent's exec API which varies by
184
+ // guest; we mark it a warning with a clear note rather than assert a result
185
+ // we cannot confirm. Demo mode exercises the full logic.
186
+ return {
187
+ ...spec,
188
+ outcome: "warn",
189
+ detail: "requires guest-agent exec on the restored guest — not asserted in this run",
190
+ };
191
+ }
192
+ /** Verify the latest backup(s) and return an (unsigned) evidence report. */
193
+ export async function verifyBackups(ctx, opts = {}) {
194
+ const startedAt = nowIso();
195
+ const t0 = Date.now();
196
+ const cands = await candidates(ctx, opts);
197
+ if (cands.length === 0) {
198
+ throw new Error(opts.vmid ? `No backup archive found for VMID ${opts.vmid}.` : "No backup archives found to verify.");
199
+ }
200
+ const items = [];
201
+ for (const c of cands) {
202
+ items.push(ctx.client.isDemo ? simulateItem(ctx, c) : await verifyItemLive(ctx, c));
203
+ }
204
+ const outcome = worst(items.map((i) => i.outcome));
205
+ const passed = items.filter((i) => i.outcome === "pass").length;
206
+ const finishedAt = nowIso();
207
+ return {
208
+ capability: "backup-verify",
209
+ id: shortId("BV"),
210
+ title: "Backup restore verification",
211
+ startedAt,
212
+ finishedAt,
213
+ durationSec: ctx.client.isDemo ? items.reduce((a, i) => a + i.restoreSec, 0) : Math.round((Date.now() - t0) / 1000),
214
+ outcome,
215
+ summary: `${passed}/${items.length} backup(s) restored & health-checked in an isolated sandbox; ${outcome === "pass" ? "all green" : outcome === "warn" ? "review warnings" : "failures found"}.`,
216
+ demo: ctx.client.isDemo,
217
+ controls: CONTROLS["backup-verify"],
218
+ isolatedBridge: ctx.config.resilience.isolatedBridge,
219
+ items,
220
+ };
221
+ }
222
+ //# sourceMappingURL=backup-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-verifier.js","sourceRoot":"","sources":["../../src/resilience/backup-verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Scheduled disaster-recovery drills.
3
+ *
4
+ * Many companies have their DR plan in a 2019 Word document that nobody has
5
+ * ever executed. This runs a declarative YAML runbook against an isolated test
6
+ * environment, times every recovery step, measures the achieved RTO/RPO and
7
+ * produces the signed drill minutes ("acta") an auditor asks for.
8
+ *
9
+ * Part of Proxmox MCP Server.
10
+ * Crafted by SoyRage Agency — https://soyrage.es/
11
+ * MIT licensed (see LICENSE).
12
+ */
13
+ import type { ResilienceContext } from "./engine.js";
14
+ import type { Runbook } from "./runbook.js";
15
+ import type { DrReport } from "./types.js";
16
+ /** Run a DR drill from a parsed runbook; returns an (unsigned) evidence report. */
17
+ export declare function runDrill(ctx: ResilienceContext, runbook: Runbook): Promise<DrReport>;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Scheduled disaster-recovery drills.
3
+ *
4
+ * Many companies have their DR plan in a 2019 Word document that nobody has
5
+ * ever executed. This runs a declarative YAML runbook against an isolated test
6
+ * environment, times every recovery step, measures the achieved RTO/RPO and
7
+ * produces the signed drill minutes ("acta") an auditor asks for.
8
+ *
9
+ * Part of Proxmox MCP Server.
10
+ * Crafted by SoyRage Agency — https://soyrage.es/
11
+ * MIT licensed (see LICENSE).
12
+ */
13
+ import { CONTROLS } from "./report.js";
14
+ import { nowIso, shortId, sleep, worst } from "./util.js";
15
+ /** Recovery-relevant actions that count toward the measured RTO. */
16
+ const RTO_ACTIONS = new Set(["restore", "start", "failover"]);
17
+ /** Simulated per-action timing (seconds) for demo runs. */
18
+ const DEMO_SECONDS = {
19
+ restore: 96,
20
+ start: 22,
21
+ healthcheck: 6,
22
+ "verify-file": 3,
23
+ failover: 14,
24
+ notify: 1,
25
+ teardown: 8,
26
+ wait: 5,
27
+ };
28
+ function describe(step) {
29
+ const target = step.guest ? `guest ${step.guest}` : step.path ? step.path : step.check ?? "—";
30
+ switch (step.action) {
31
+ case "restore":
32
+ return { target, detail: `restored ${step.guest ?? "guest"} from ${step.from ?? "latest"} backup into the isolated test env` };
33
+ case "start":
34
+ return { target, detail: `booted ${step.guest ?? "guest"}; reached running state` };
35
+ case "healthcheck":
36
+ return { target, detail: `${step.check ?? "service"} check passed` };
37
+ case "verify-file":
38
+ return { target, detail: `checksum of ${step.path ?? "file"} matches baseline` };
39
+ case "failover":
40
+ return { target, detail: `failed over ${step.guest ?? "service"} to the recovery node` };
41
+ case "notify":
42
+ return { target, detail: `notified stakeholders: ${step.note ?? "DR drill in progress"}` };
43
+ case "teardown":
44
+ return { target, detail: `tore down the isolated test env` };
45
+ case "wait":
46
+ return { target, detail: step.note ?? "settle delay" };
47
+ default:
48
+ return { target, detail: step.note ?? "" };
49
+ }
50
+ }
51
+ /** Execute one runbook step (demo simulates; live degrades gracefully). */
52
+ async function runStep(ctx, step, index) {
53
+ const { target, detail } = describe(step);
54
+ if (ctx.client.isDemo) {
55
+ const sec = DEMO_SECONDS[step.action] ?? 5;
56
+ return { index, action: step.action, target, outcome: "pass", detail, ms: sec * 1000 };
57
+ }
58
+ // Live execution is intentionally conservative: it records intent and marks
59
+ // steps needing in-guest access as warnings so the minutes never overstate.
60
+ const t0 = Date.now();
61
+ let outcome = "pass";
62
+ let note = detail;
63
+ try {
64
+ if (step.action === "notify" || step.action === "wait") {
65
+ if (step.action === "wait")
66
+ await sleep(500);
67
+ }
68
+ else {
69
+ outcome = "warn";
70
+ note = `${detail} (requires live execution against ${ctx.config.resilience.isolatedBridge} test env)`;
71
+ }
72
+ }
73
+ catch (err) {
74
+ outcome = "fail";
75
+ note = err.message;
76
+ }
77
+ return { index, action: step.action, target, outcome, detail: note, ms: Date.now() - t0 };
78
+ }
79
+ /**
80
+ * Measure the real Recovery Point Objective: how old the freshest backup on the
81
+ * cluster is, in seconds. Returns null when nothing could be read.
82
+ */
83
+ async function measureRpoSec(ctx) {
84
+ try {
85
+ const node = await ctx.client.resolveNode();
86
+ const now = Math.floor(Date.now() / 1000);
87
+ let freshest = null;
88
+ for (const storage of await ctx.client.backupStorages(node)) {
89
+ for (const item of (await ctx.client.storageContent(node, storage, "backup")) ?? []) {
90
+ const ctime = Number(item.ctime ?? 0);
91
+ if (!ctime)
92
+ continue;
93
+ const age = Math.max(0, now - ctime);
94
+ if (freshest === null || age < freshest)
95
+ freshest = age;
96
+ }
97
+ }
98
+ return freshest;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ /** Run a DR drill from a parsed runbook; returns an (unsigned) evidence report. */
105
+ export async function runDrill(ctx, runbook) {
106
+ const startedAt = nowIso();
107
+ const t0 = Date.now();
108
+ const steps = [];
109
+ for (let i = 0; i < runbook.steps.length; i++) {
110
+ steps.push(await runStep(ctx, runbook.steps[i], i + 1));
111
+ }
112
+ const rtoSec = steps.filter((s) => RTO_ACTIONS.has(s.action)).reduce((a, s) => a + s.ms / 1000, 0);
113
+ // RPO must be MEASURED (age of the freshest recovery point), never echoed back
114
+ // from the objective — otherwise the drill would always claim it met target.
115
+ const rpoSec = ctx.client.isDemo ? 55 * 60 : ((await measureRpoSec(ctx)) ?? -1);
116
+ const rpoKnown = rpoSec >= 0;
117
+ const metTarget = rpoKnown && rpoSec <= runbook.rpoHours * 3600;
118
+ const rpoNote = rpoKnown ? (metTarget ? "RPO within target: yes" : "RPO EXCEEDS target") : "RPO not measured (no backups found)";
119
+ const outcome = worst([...steps.map((s) => s.outcome), rpoKnown && !metTarget ? "warn" : "pass"]);
120
+ return {
121
+ capability: "dr-drill",
122
+ id: shortId("DR"),
123
+ title: `DR drill — ${runbook.name}`,
124
+ startedAt,
125
+ finishedAt: nowIso(),
126
+ durationSec: ctx.client.isDemo ? Math.round(steps.reduce((a, s) => a + s.ms, 0) / 1000) : Math.round((Date.now() - t0) / 1000),
127
+ outcome,
128
+ summary: `${runbook.steps.length}-step runbook executed against "${runbook.environment}"; RTO ${Math.round(rtoSec)}s, ${rpoNote}.`,
129
+ demo: ctx.client.isDemo,
130
+ controls: CONTROLS["dr-drill"],
131
+ runbook: runbook.name,
132
+ environment: runbook.environment,
133
+ rtoSec: Math.round(rtoSec),
134
+ rpoSec,
135
+ steps,
136
+ };
137
+ }
138
+ //# sourceMappingURL=dr-drill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dr-drill.js","sourceRoot":"","sources":["../../src/resilience/dr-drill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Resilience & Compliance engine.
3
+ *
4
+ * The façade the MCP tools and the TUI talk to. It runs the three capabilities
5
+ * (backup verification, patch orchestration, DR drills), signs each resulting
6
+ * report with an Ed25519 key, writes JSON + Markdown + HTML evidence to disk,
7
+ * and surfaces recent runs for dashboards.
8
+ *
9
+ * Part of Proxmox MCP Server.
10
+ * Crafted by SoyRage Agency — https://soyrage.es/
11
+ * MIT licensed (see LICENSE).
12
+ */
13
+ import type { AppConfig } from "../config.js";
14
+ import type { Logger } from "../logger.js";
15
+ import type { ProxmoxClient } from "../proxmox/client.js";
16
+ import { type VerifyOptions } from "./backup-verifier.js";
17
+ import { type PatchOptions } from "./patch-orchestrator.js";
18
+ import { type Runbook } from "./runbook.js";
19
+ import { type ReportPaths } from "./report.js";
20
+ import type { ResilienceReport, RunSummary } from "./types.js";
21
+ /** Everything the capability builders need. */
22
+ export interface ResilienceContext {
23
+ client: ProxmoxClient;
24
+ config: AppConfig;
25
+ logger: Logger;
26
+ }
27
+ /** A finished, signed run plus where its evidence was written. */
28
+ export interface RunResult {
29
+ report: ResilienceReport;
30
+ paths: ReportPaths;
31
+ }
32
+ /** Built-in runbook used for demo drills and as a starting template. */
33
+ export declare const DEMO_RUNBOOK: Runbook;
34
+ export declare class ResilienceEngine {
35
+ private readonly ctx;
36
+ private samplesCache;
37
+ constructor(ctx: ResilienceContext);
38
+ private get keyPath();
39
+ /** Sign, persist and return a finished report. */
40
+ private finalize;
41
+ /** Run the automated backup verifier. */
42
+ verifyBackups(opts?: VerifyOptions): Promise<RunResult>;
43
+ /** Run the patch orchestrator. */
44
+ orchestratePatching(opts?: PatchOptions): Promise<RunResult>;
45
+ /** Run a DR drill from runbook text (YAML or JSON). */
46
+ runDrill(runbookText: string): Promise<RunResult>;
47
+ /** Run a DR drill from an already-parsed runbook. */
48
+ runDrillObject(runbook: Runbook): Promise<RunResult>;
49
+ /** All reports on disk, newest first. */
50
+ private diskReports;
51
+ /**
52
+ * Recent reports for the dashboard: real runs from disk. In DEMO mode only,
53
+ * capabilities that have never been run are back-filled with fabricated
54
+ * in-memory samples so the dashboard looks alive.
55
+ *
56
+ * Against a real cluster we return exactly what is on disk and NOTHING else:
57
+ * the sample builders perform real work (restoring ephemeral VMs, snapshotting
58
+ * guests), so they must never be triggered by a read-only listing.
59
+ */
60
+ recentReports(): Promise<ResilienceReport[]>;
61
+ /** Compact summaries of the most recent run per capability. */
62
+ recentSummaries(): Promise<RunSummary[]>;
63
+ /**
64
+ * Build (and cache) one signed sample report per capability for demos.
65
+ * Refuses to run outside demo mode — the builders touch the real cluster.
66
+ */
67
+ private demoSamples;
68
+ }