@calltelemetry/ct-lab-mcp 0.8.89 → 0.8.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -96,7 +96,7 @@ than use the legacy Node VMID/name slot state when the bridge is unavailable.
96
96
  - **Physical-slot claim custody**: Proxmox claim creation requires the actual canonical node, explicit VMID and VM name in `ct-lab`, with a finite TTL. A shared Kubernetes Lease mutex serializes the physical host/node/VMID; its durable reservation stays occupied through unknown, partial and retiring outcomes. The source stamps a nonce and effective creation-request hash, then independently reads the original CRD UID before binding. Whole effective immutable CRD fields and creation labels are rehashed on bind, retry and deletion; only the declared lifecycle fields and stale label can change. A matching name alone grants no custody.
97
97
  - **One configured Kubernetes claim backend**: ApplianceClaim CRUD and physical-slot Lease operations share one backend resolver. Local stdio deployments must set an absolute `LAB_CLAIM_KUBECONFIG`, the exact `LAB_CLAIM_K8S_CONTEXT`, and an HTTPS-origin `LAB_CLAIM_K8S_SERVER`; the selected kubeconfig is validated against that server before a request. In-cluster deployments must set the context/server and provide the service-account token and CA for that same cluster. Cross-cluster deployments use the explicit kubeconfig path. The process never falls back to `KUBECONFIG`, `~/.kube/config`, or an embedded server, and a missing or mismatched binding is refused before claim or reservation effects. The Flux-managed consumer manifest `ct-infrastructure/clusters/doks-nyc1/apps/ct-lab/deploy-ct-lab-mcp.yaml` is a companion rollout change: the image-roll workflow refuses to update it until all three backend variables are present, and the kubeconfig path must be mounted from the selected cluster's protected configuration.
98
98
  - **Original UID deletion**: `delete_appliance_claim` requires `expectedUid` from the independently observed original claim. It sends UID/resourceVersion `DeleteOptions` preconditions and leaves the physical reservation retiring. The qualified operator/controller must independently prove original guest, owned-volume and original-UID absence before terminal release; an error or expiry-looking record never permits clearing protection.
99
- - **Guarded image import**: `claimed_import_qcow` creates a bare claim, then invokes the canonical `vm provision --source published-qcow` lifecycle. Its actual default bridge keeps host CPU semantics; portable first-power qualification uses the separate explicit canonical source route. Returned, thrown and uncertain import errors retain both claim and reservation protection and preserve diagnostics. This path requires the qualified controller and operator successors; a source pin alone does not establish deployed readiness.
99
+ - **Guarded image import**: `claimed_import_qcow` creates a bare claim, waits for an operator to set it `Ready` (default 120 s, `CT_LAB_CLAIM_RECONCILE_TIMEOUT_MS`; a claim no operator reconciles fails with `CLAIM_NOT_RECONCILED` before any image import, because the claim plane and the operator's cluster differ), then invokes the canonical `vm provision --source published-qcow` lifecycle. Its actual default bridge keeps host CPU semantics; portable first-power qualification uses the separate explicit canonical source route. Returned, thrown and uncertain import errors retain both claim and reservation protection and preserve diagnostics. This path requires the qualified controller and operator successors; a source pin alone does not establish deployed readiness.
100
100
  - **Legacy SDK effects**: Direct SDK guest creation/clone/power/config/destruction, unguarded script guest writes and generic guest SSH authentication/commands are unavailable without the implemented canonical lifecycle. No caller flag or environment switch enables the retired effects. The historical purge daemon reports `authority_required` with zero releases/destruction and keeps all protection records. Provider inventory reads and implemented typed canonical operations remain available.
101
101
 
102
102
  - **Sideloaded Appliance Management Runner**: `sideload_appliance_runner` executes isolated runner actions (`execute`, `container_override`, `systemd_reset`, `diagnostic_bundle`) over SSH (port 2222) using ephemeral runner payloads, eliminating brittleness and version drift from mutating `/home/calltelemetry/cli.sh`.
@@ -784,6 +784,11 @@ the git tag, and the Docker workflow refuses a tag that differs from
784
784
  main push and get a `v<version>-build.<sha8>` tag instead. The image roll PR in
785
785
  ct-infrastructure is opened by the release App from that build.
786
786
 
787
+ The image installs with `npm ci` and must see the repository `.npmrc`
788
+ (`legacy-peer-deps=true`, which resolves the `agents` zod peer): the Dockerfile
789
+ copies it next to `package*.json`, and `test/dockerfile-npm-install.test.ts`
790
+ guards that (REL-1723).
791
+
787
792
  ---
788
793
 
789
794
  ## Appliance licensing
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Claim reconcile gate (UAT-1785).
3
+ *
4
+ * A claim is only a guest's protection if an ApplianceClaim operator is actually
5
+ * watching the cluster the claim was written to. When the claim plane and the
6
+ * operator's cluster differ (for example the operator moved to another cluster
7
+ * and the tooling still writes to the old one), a new claim is never reconciled:
8
+ * its status stays empty, and the operator that is running elsewhere sees the
9
+ * imported guest as unclaimed and destroys it once its grace window elapses,
10
+ * minutes into a UAT run while the claim and lease still look live.
11
+ *
12
+ * A profile=bare claim reaches status.phase=Ready within seconds of an operator
13
+ * seeing it, before any guest exists. Creating the guest only after that
14
+ * observation turns the silent mid-run loss into an immediate, actionable
15
+ * refusal that happens before a guest exists.
16
+ */
17
+ import { type CallToolResult } from "../types/mcp.js";
18
+ export declare const CLAIM_RECONCILE_TIMEOUT_ENV = "CT_LAB_CLAIM_RECONCILE_TIMEOUT_MS";
19
+ export declare const CLAIM_RECONCILE_DEFAULT_TIMEOUT_MS = 120000;
20
+ export declare const CLAIM_RECONCILE_POLL_MS = 3000;
21
+ export interface ClaimReconcileDeps {
22
+ getClaim: (args: {
23
+ name: string;
24
+ namespace: string;
25
+ }) => Promise<CallToolResult>;
26
+ sleep: (ms: number) => Promise<void>;
27
+ now: () => number;
28
+ timeoutMs: number;
29
+ pollMs: number;
30
+ }
31
+ export type ClaimReconcileOutcome = {
32
+ reconciled: true;
33
+ phase: "Ready";
34
+ } | {
35
+ reconciled: false;
36
+ reason: "not_reconciled" | "failed" | "closed";
37
+ phase: string | null;
38
+ detail: string;
39
+ };
40
+ export declare function claimReconcileTimeoutMs(env?: NodeJS.ProcessEnv): number;
41
+ /**
42
+ * Poll the exact claim until an operator has set it Ready. A Failed or Closed
43
+ * phase is final; an empty phase is retried until the timeout and then reported
44
+ * as "not reconciled" (no operator saw the claim).
45
+ */
46
+ export declare function awaitClaimReconciled(name: string, namespace: string, overrides?: Partial<ClaimReconcileDeps>): Promise<ClaimReconcileOutcome>;
47
+ /** Tool error for a claim no operator reconciled. The claim stays; nothing was imported. */
48
+ export declare function claimNotReconciledResult(outcome: Extract<ClaimReconcileOutcome, {
49
+ reconciled: false;
50
+ }>, context: {
51
+ operation: string;
52
+ claimName: string;
53
+ namespace: string;
54
+ timeoutMs: number;
55
+ }): CallToolResult;
56
+ //# sourceMappingURL=claim-reconcile-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-reconcile-gate.d.ts","sourceRoot":"","sources":["../../../src/tools/claim-reconcile-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAG7E,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,kCAAkC,SAAU,CAAC;AAC1D,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAG7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACjF,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,UAAU,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQpF;AAsBD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,OAAO,CAAC,qBAAqB,CAAC,CAiChC;AAED,4FAA4F;AAC5F,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,CAAC,qBAAqB,EAAE;IAAE,UAAU,EAAE,KAAK,CAAA;CAAE,CAAC,EAC9D,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtF,cAAc,CAgBhB"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Claim reconcile gate (UAT-1785).
3
+ *
4
+ * A claim is only a guest's protection if an ApplianceClaim operator is actually
5
+ * watching the cluster the claim was written to. When the claim plane and the
6
+ * operator's cluster differ (for example the operator moved to another cluster
7
+ * and the tooling still writes to the old one), a new claim is never reconciled:
8
+ * its status stays empty, and the operator that is running elsewhere sees the
9
+ * imported guest as unclaimed and destroys it once its grace window elapses,
10
+ * minutes into a UAT run while the claim and lease still look live.
11
+ *
12
+ * A profile=bare claim reaches status.phase=Ready within seconds of an operator
13
+ * seeing it, before any guest exists. Creating the guest only after that
14
+ * observation turns the silent mid-run loss into an immediate, actionable
15
+ * refusal that happens before a guest exists.
16
+ */
17
+ import { createToolErrorResult } from "../types/mcp.js";
18
+ import { handleGetApplianceClaim } from "./appliance-claim-tools.js";
19
+ export const CLAIM_RECONCILE_TIMEOUT_ENV = "CT_LAB_CLAIM_RECONCILE_TIMEOUT_MS";
20
+ export const CLAIM_RECONCILE_DEFAULT_TIMEOUT_MS = 120_000;
21
+ export const CLAIM_RECONCILE_POLL_MS = 3_000;
22
+ const CLAIM_RECONCILE_MAX_TIMEOUT_MS = 900_000;
23
+ export function claimReconcileTimeoutMs(env = process.env) {
24
+ const raw = env[CLAIM_RECONCILE_TIMEOUT_ENV]?.trim();
25
+ if (!raw)
26
+ return CLAIM_RECONCILE_DEFAULT_TIMEOUT_MS;
27
+ const parsed = Number(raw);
28
+ if (!Number.isInteger(parsed) || parsed < 0 || parsed > CLAIM_RECONCILE_MAX_TIMEOUT_MS) {
29
+ return CLAIM_RECONCILE_DEFAULT_TIMEOUT_MS;
30
+ }
31
+ return parsed;
32
+ }
33
+ function defaultDeps() {
34
+ return {
35
+ getClaim: (args) => handleGetApplianceClaim(args),
36
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
37
+ now: () => Date.now(),
38
+ timeoutMs: claimReconcileTimeoutMs(),
39
+ pollMs: CLAIM_RECONCILE_POLL_MS,
40
+ };
41
+ }
42
+ function claimOf(result) {
43
+ const block = result.content?.[0];
44
+ if (!block || block.type !== "text")
45
+ return null;
46
+ try {
47
+ return JSON.parse(block.text)?.claim ?? null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Poll the exact claim until an operator has set it Ready. A Failed or Closed
55
+ * phase is final; an empty phase is retried until the timeout and then reported
56
+ * as "not reconciled" (no operator saw the claim).
57
+ */
58
+ export async function awaitClaimReconciled(name, namespace, overrides = {}) {
59
+ const deps = { ...defaultDeps(), ...overrides };
60
+ const deadline = deps.now() + deps.timeoutMs;
61
+ let phase = null;
62
+ let detail = "the claim has no status; no operator has reconciled it";
63
+ for (;;) {
64
+ let result = null;
65
+ try {
66
+ result = await deps.getClaim({ name, namespace });
67
+ }
68
+ catch (error) {
69
+ detail = `claim read failed: ${String(error?.message ?? error).slice(0, 160)}`;
70
+ }
71
+ if (result && !result.isError) {
72
+ const claim = claimOf(result);
73
+ const live = typeof claim?.status?.phase === "string" && claim.status.phase ? claim.status.phase : null;
74
+ phase = live;
75
+ if (live === "Ready")
76
+ return { reconciled: true, phase: "Ready" };
77
+ if (live === "Failed" || live === "Closed") {
78
+ return {
79
+ reconciled: false,
80
+ reason: live === "Failed" ? "failed" : "closed",
81
+ phase: live,
82
+ detail: String(claim?.status?.message ?? `claim phase is ${live}`).slice(0, 240),
83
+ };
84
+ }
85
+ detail = live ? `claim phase is '${live}', not Ready` : "the claim has no status; no operator has reconciled it";
86
+ }
87
+ else if (result) {
88
+ detail = "claim read returned an error";
89
+ }
90
+ if (deps.now() + deps.pollMs > deadline)
91
+ break;
92
+ await deps.sleep(deps.pollMs);
93
+ }
94
+ return { reconciled: false, reason: "not_reconciled", phase, detail };
95
+ }
96
+ /** Tool error for a claim no operator reconciled. The claim stays; nothing was imported. */
97
+ export function claimNotReconciledResult(outcome, context) {
98
+ const cause = outcome.reason === "not_reconciled"
99
+ ? "No ApplianceClaim operator reconciled it. The cluster this tool writes claims to (LAB_CLAIM_K8S_CONTEXT / LAB_CLAIM_K8S_SERVER) is not the cluster the operator watches, or the operator is not running there. An operator on another cluster would destroy an imported guest as unclaimed."
100
+ : `The operator set the claim to ${outcome.phase}.`;
101
+ return createToolErrorResult("CLAIM_NOT_RECONCILED", `${context.operation}: claim '${context.claimName}' did not reach Ready within ${Math.round(context.timeoutMs / 1000)}s (${outcome.detail}). ${cause} The image was NOT imported and no guest exists. The finite claim is retained; check the claim plane binding and the operator, then retry.`, {
102
+ operation: context.operation,
103
+ claimName: context.claimName,
104
+ namespace: context.namespace,
105
+ phase: outcome.phase,
106
+ guestCreated: false,
107
+ claimProtection: { disposition: "retained", guestAbsentVerified: true },
108
+ });
109
+ }
110
+ //# sourceMappingURL=claim-reconcile-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-reconcile-gate.js","sourceRoot":"","sources":["../../../src/tools/claim-reconcile-gate.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@
26
26
  import { z } from "zod";
27
27
  import { CallToolResult } from "../types/mcp.js";
28
28
  import { ToolContext } from "./list-hosts.js";
29
+ import { type ClaimReconcileOutcome } from "./claim-reconcile-gate.js";
29
30
  export declare const ClaimedImportQcowInputObjectSchema: z.ZodObject<{
30
31
  readonly assetId: z.ZodString;
31
32
  readonly hostAssetId: z.ZodString;
@@ -120,6 +121,8 @@ export interface ClaimedImportDeps {
120
121
  createClaim: (args: unknown) => Promise<CallToolResult>;
121
122
  deleteClaim: (args: unknown) => Promise<CallToolResult>;
122
123
  importQcow: (args: unknown, context: ToolContext) => Promise<CallToolResult>;
124
+ /** Observes the created claim reaching Ready (an operator is watching this plane) before any guest exists. */
125
+ awaitClaimReconciled?: (name: string, namespace: string) => Promise<ClaimReconcileOutcome>;
123
126
  }
124
127
  export declare function handleClaimedImportQcow(rawArgs: ClaimedImportQcowRawInput | undefined, context: ToolContext, deps?: ClaimedImportDeps): Promise<CallToolResult>;
125
128
  export declare const CLAIMED_IMPORT_QCOW_TOOL_DESCRIPTION = "Import a published or private-candidate appliance QCOW2 as a Proxmox lab guest AND claim it, in one sanctioned step. The strict appliance operator destroys every guest no ApplianceClaim names within ~5 minutes, so this tool creates a profile=bare ApplianceClaim (no seed, no license, no bootstrap; names node + VMID + VM name; finite TTL) FIRST, then runs the canonical lab-inventory vm provision --source published-qcow apply (digest-bound, leased, journaled, receipted; the guest then awaits vm_repair, finalize and uat_access), and retains finite claim protection if the import fails, throws or has an uncertain outcome. Reconcile the exact canonical operation before explicit governed teardown. Dry-run is the default: it runs the canonical import plan and previews the claim. Requires vmid, vmPrefix and node (minis|proxmox|ibm64, matching hostAssetId). Renew with renew_appliance_claim; release with delete_appliance_claim. The guest disk is thin-only: thick or undeterminable storage is refused with THICK_STORAGE_REFUSED before the claim is created.";
@@ -1 +1 @@
1
- {"version":3,"file":"claimed-import-qcow.d.ts","sourceRoot":"","sources":["../../../src/tools/claimed-import-qcow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiC9C,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpC,CAAC;AAEZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9E;AAoBD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,GAAG,SAAS,EAC9C,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,iBAA+B,GACpC,OAAO,CAAC,cAAc,CAAC,CAqKzB;AAED,eAAO,MAAM,oCAAoC,siCACo/B,CAAC"}
1
+ {"version":3,"file":"claimed-import-qcow.d.ts","sourceRoot":"","sources":["../../../src/tools/claimed-import-qcow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAA2E,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AA+BhJ,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpC,CAAC;AAEZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,8GAA8G;IAC9G,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC5F;AAqBD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,GAAG,SAAS,EAC9C,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,iBAA+B,GACpC,OAAO,CAAC,cAAc,CAAC,CAqLzB;AAED,eAAO,MAAM,oCAAoC,siCACo/B,CAAC"}
@@ -27,6 +27,7 @@ import { z } from "zod";
27
27
  import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
28
28
  import { canonicalOperationAvailable } from "./canonical-guard.js";
29
29
  import { guardCanonicalThinStorage } from "./thin-storage-policy.js";
30
+ import { awaitClaimReconciled, claimNotReconciledResult, claimReconcileTimeoutMs } from "./claim-reconcile-gate.js";
30
31
  import { reservedIdentityError } from "./sha-channel.js";
31
32
  import { ImportQcowInputObjectSchema, ImportQcowInputSchema, handleProxmoxImportQcow, importQcowVersionFromUrl, } from "./import-qcow.js";
32
33
  import { buildApplianceClaimManifest, handleCreateApplianceClaim, handleDeleteApplianceClaim, normalizeClaimNode, CreateApplianceClaimInputSchema, } from "./appliance-claim-tools.js";
@@ -65,6 +66,7 @@ const defaultDeps = {
65
66
  createClaim: (args) => handleCreateApplianceClaim(args),
66
67
  deleteClaim: (args) => handleDeleteApplianceClaim(args),
67
68
  importQcow: (args, context) => handleProxmoxImportQcow(args, context),
69
+ awaitClaimReconciled: (name, namespace) => awaitClaimReconciled(name, namespace),
68
70
  };
69
71
  function textOf(result) {
70
72
  const block = result.content?.[0];
@@ -165,6 +167,21 @@ export async function handleClaimedImportQcow(rawArgs, context, deps = defaultDe
165
167
  if (created.isError) {
166
168
  return createToolErrorResult(ProxmoxErrorCode.UPSTREAM_API_ERROR, `claim creation failed; the image was NOT imported: ${textOf(created)}`, { operation: "claimed_import_qcow", claimName: built.claimName });
167
169
  }
170
+ // UAT-1785: the claim only protects the guest if an operator watches the plane
171
+ // it was written to. Require the operator to reconcile (Ready) it BEFORE the
172
+ // guest exists; otherwise refuse here instead of losing the guest mid-run.
173
+ const claimNamespace = built.manifest.metadata.namespace ?? "ct-lab";
174
+ if (deps.awaitClaimReconciled) {
175
+ const reconciled = await deps.awaitClaimReconciled(built.claimName, claimNamespace);
176
+ if (!reconciled.reconciled) {
177
+ return claimNotReconciledResult(reconciled, {
178
+ operation: "claimed_import_qcow",
179
+ claimName: built.claimName,
180
+ namespace: claimNamespace,
181
+ timeoutMs: claimReconcileTimeoutMs(),
182
+ });
183
+ }
184
+ }
168
185
  let imported;
169
186
  try {
170
187
  imported = await deps.importQcow(importArgs, context);
@@ -1 +1 @@
1
- {"version":3,"file":"claimed-import-qcow.js","sourceRoot":"","sources":["../../../src/tools/claimed-import-qcow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claimed-import-qcow.js","sourceRoot":"","sources":["../../../src/tools/claimed-import-qcow.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.89",
3
+ "version": "0.8.91",
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",