@calltelemetry/ct-lab-mcp 0.8.126 → 0.8.128

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 (38) hide show
  1. package/dist/src/generated-version.d.ts +1 -1
  2. package/dist/src/generated-version.js +1 -1
  3. package/dist/src/lab-exec/claim-resolve.d.ts +392 -1
  4. package/dist/src/lab-exec/claim-resolve.d.ts.map +1 -1
  5. package/dist/src/lab-exec/claim-resolve.js +57 -9
  6. package/dist/src/lab-exec/claim-resolve.js.map +1 -1
  7. package/dist/src/lab-exec/contract.d.ts +35 -0
  8. package/dist/src/lab-exec/contract.d.ts.map +1 -1
  9. package/dist/src/lab-exec/contract.js +28 -0
  10. package/dist/src/lab-exec/contract.js.map +1 -1
  11. package/dist/src/lab-exec/executor.d.ts +13 -1
  12. package/dist/src/lab-exec/executor.d.ts.map +1 -1
  13. package/dist/src/lab-exec/executor.js +25 -2
  14. package/dist/src/lab-exec/executor.js.map +1 -1
  15. package/dist/src/lab-exec/remote.d.ts +13 -1
  16. package/dist/src/lab-exec/remote.d.ts.map +1 -1
  17. package/dist/src/lab-exec/remote.js +48 -2
  18. package/dist/src/lab-exec/remote.js.map +1 -1
  19. package/dist/src/lab-exec/result.d.ts +12 -0
  20. package/dist/src/lab-exec/result.d.ts.map +1 -1
  21. package/dist/src/lab-exec/result.js +26 -0
  22. package/dist/src/lab-exec/result.js.map +1 -1
  23. package/dist/src/lab-exec/server.d.ts +2 -0
  24. package/dist/src/lab-exec/server.d.ts.map +1 -1
  25. package/dist/src/lab-exec/server.js +102 -6
  26. package/dist/src/lab-exec/server.js.map +1 -1
  27. package/dist/src/tools/appliance-claim-tools.d.ts +4 -4
  28. package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
  29. package/dist/src/tools/appliance-claim-tools.js +35 -12
  30. package/dist/src/tools/appliance-claim-tools.js.map +1 -1
  31. package/dist/src/tools/index.d.ts.map +1 -1
  32. package/dist/src/tools/index.js +2 -0
  33. package/dist/src/tools/index.js.map +1 -1
  34. package/dist/src/tools/lab-host-key-enroll.d.ts +6 -0
  35. package/dist/src/tools/lab-host-key-enroll.d.ts.map +1 -0
  36. package/dist/src/tools/lab-host-key-enroll.js +37 -0
  37. package/dist/src/tools/lab-host-key-enroll.js.map +1 -0
  38. package/package.json +1 -1
@@ -2,5 +2,5 @@
2
2
  * Auto-synced package version fallback for non-filesystem runtimes (Cloudflare Workers).
3
3
  * Updated automatically during release publication in .github/workflows/publish.yml.
4
4
  */
5
- export declare const PACKAGE_VERSION = "0.8.126";
5
+ export declare const PACKAGE_VERSION = "0.8.128";
6
6
  //# sourceMappingURL=generated-version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  * Auto-synced package version fallback for non-filesystem runtimes (Cloudflare Workers).
3
3
  * Updated automatically during release publication in .github/workflows/publish.yml.
4
4
  */
5
- export const PACKAGE_VERSION = "0.8.126";
5
+ export const PACKAGE_VERSION = "0.8.128";
6
6
  //# sourceMappingURL=generated-version.js.map
@@ -5,7 +5,7 @@
5
5
  * canonical asset ID. An unresolvable claim yields a structured ct-lab-vm-ssh-result/v1
6
6
  * envelope and no ssh attempt.
7
7
  */
8
- import type { LabSshInput } from "./contract.js";
8
+ import type { LabHostKeyEnrollInput, LabSshInput } from "./contract.js";
9
9
  import type { LabExecCaller, LabExecOutcome, LabExecutor } from "./executor.js";
10
10
  export interface ClaimReader {
11
11
  getClaim(name: string): Promise<any>;
@@ -209,6 +209,397 @@ export declare class ClaimResolvingExecutor implements LabExecutor {
209
209
  } | undefined;
210
210
  isError?: boolean | undefined;
211
211
  }>;
212
+ claimsCreate(input: unknown, caller?: LabExecCaller): Promise<{
213
+ [x: string]: unknown;
214
+ content: ({
215
+ type: "text";
216
+ text: string;
217
+ annotations?: {
218
+ audience?: ("user" | "assistant")[] | undefined;
219
+ priority?: number | undefined;
220
+ lastModified?: string | undefined;
221
+ } | undefined;
222
+ _meta?: {
223
+ [x: string]: unknown;
224
+ } | undefined;
225
+ } | {
226
+ type: "image";
227
+ data: string;
228
+ mimeType: string;
229
+ annotations?: {
230
+ audience?: ("user" | "assistant")[] | undefined;
231
+ priority?: number | undefined;
232
+ lastModified?: string | undefined;
233
+ } | undefined;
234
+ _meta?: {
235
+ [x: string]: unknown;
236
+ } | undefined;
237
+ } | {
238
+ type: "audio";
239
+ data: string;
240
+ mimeType: string;
241
+ annotations?: {
242
+ audience?: ("user" | "assistant")[] | undefined;
243
+ priority?: number | undefined;
244
+ lastModified?: string | undefined;
245
+ } | undefined;
246
+ _meta?: {
247
+ [x: string]: unknown;
248
+ } | undefined;
249
+ } | {
250
+ uri: string;
251
+ name: string;
252
+ type: "resource_link";
253
+ description?: string | undefined;
254
+ mimeType?: string | undefined;
255
+ size?: number | undefined;
256
+ annotations?: {
257
+ audience?: ("user" | "assistant")[] | undefined;
258
+ priority?: number | undefined;
259
+ lastModified?: string | undefined;
260
+ } | undefined;
261
+ _meta?: {
262
+ [x: string]: unknown;
263
+ } | undefined;
264
+ icons?: {
265
+ src: string;
266
+ mimeType?: string | undefined;
267
+ sizes?: string[] | undefined;
268
+ theme?: "light" | "dark" | undefined;
269
+ }[] | undefined;
270
+ title?: string | undefined;
271
+ } | {
272
+ type: "resource";
273
+ resource: {
274
+ uri: string;
275
+ text: string;
276
+ mimeType?: string | undefined;
277
+ _meta?: {
278
+ [x: string]: unknown;
279
+ } | undefined;
280
+ } | {
281
+ uri: string;
282
+ blob: string;
283
+ mimeType?: string | undefined;
284
+ _meta?: {
285
+ [x: string]: unknown;
286
+ } | undefined;
287
+ };
288
+ annotations?: {
289
+ audience?: ("user" | "assistant")[] | undefined;
290
+ priority?: number | undefined;
291
+ lastModified?: string | undefined;
292
+ } | undefined;
293
+ _meta?: {
294
+ [x: string]: unknown;
295
+ } | undefined;
296
+ })[];
297
+ _meta?: {
298
+ [x: string]: unknown;
299
+ progressToken?: string | number | undefined;
300
+ "io.modelcontextprotocol/related-task"?: {
301
+ taskId: string;
302
+ } | undefined;
303
+ } | undefined;
304
+ structuredContent?: {
305
+ [x: string]: unknown;
306
+ } | undefined;
307
+ isError?: boolean | undefined;
308
+ }>;
309
+ claimsRenew(input: unknown, caller?: LabExecCaller): Promise<{
310
+ [x: string]: unknown;
311
+ content: ({
312
+ type: "text";
313
+ text: string;
314
+ annotations?: {
315
+ audience?: ("user" | "assistant")[] | undefined;
316
+ priority?: number | undefined;
317
+ lastModified?: string | undefined;
318
+ } | undefined;
319
+ _meta?: {
320
+ [x: string]: unknown;
321
+ } | undefined;
322
+ } | {
323
+ type: "image";
324
+ data: string;
325
+ mimeType: string;
326
+ annotations?: {
327
+ audience?: ("user" | "assistant")[] | undefined;
328
+ priority?: number | undefined;
329
+ lastModified?: string | undefined;
330
+ } | undefined;
331
+ _meta?: {
332
+ [x: string]: unknown;
333
+ } | undefined;
334
+ } | {
335
+ type: "audio";
336
+ data: string;
337
+ mimeType: string;
338
+ annotations?: {
339
+ audience?: ("user" | "assistant")[] | undefined;
340
+ priority?: number | undefined;
341
+ lastModified?: string | undefined;
342
+ } | undefined;
343
+ _meta?: {
344
+ [x: string]: unknown;
345
+ } | undefined;
346
+ } | {
347
+ uri: string;
348
+ name: string;
349
+ type: "resource_link";
350
+ description?: string | undefined;
351
+ mimeType?: string | undefined;
352
+ size?: number | undefined;
353
+ annotations?: {
354
+ audience?: ("user" | "assistant")[] | undefined;
355
+ priority?: number | undefined;
356
+ lastModified?: string | undefined;
357
+ } | undefined;
358
+ _meta?: {
359
+ [x: string]: unknown;
360
+ } | undefined;
361
+ icons?: {
362
+ src: string;
363
+ mimeType?: string | undefined;
364
+ sizes?: string[] | undefined;
365
+ theme?: "light" | "dark" | undefined;
366
+ }[] | undefined;
367
+ title?: string | undefined;
368
+ } | {
369
+ type: "resource";
370
+ resource: {
371
+ uri: string;
372
+ text: string;
373
+ mimeType?: string | undefined;
374
+ _meta?: {
375
+ [x: string]: unknown;
376
+ } | undefined;
377
+ } | {
378
+ uri: string;
379
+ blob: string;
380
+ mimeType?: string | undefined;
381
+ _meta?: {
382
+ [x: string]: unknown;
383
+ } | undefined;
384
+ };
385
+ annotations?: {
386
+ audience?: ("user" | "assistant")[] | undefined;
387
+ priority?: number | undefined;
388
+ lastModified?: string | undefined;
389
+ } | undefined;
390
+ _meta?: {
391
+ [x: string]: unknown;
392
+ } | undefined;
393
+ })[];
394
+ _meta?: {
395
+ [x: string]: unknown;
396
+ progressToken?: string | number | undefined;
397
+ "io.modelcontextprotocol/related-task"?: {
398
+ taskId: string;
399
+ } | undefined;
400
+ } | undefined;
401
+ structuredContent?: {
402
+ [x: string]: unknown;
403
+ } | undefined;
404
+ isError?: boolean | undefined;
405
+ }>;
406
+ claimsDelete(input: unknown, caller?: LabExecCaller): Promise<{
407
+ [x: string]: unknown;
408
+ content: ({
409
+ type: "text";
410
+ text: string;
411
+ annotations?: {
412
+ audience?: ("user" | "assistant")[] | undefined;
413
+ priority?: number | undefined;
414
+ lastModified?: string | undefined;
415
+ } | undefined;
416
+ _meta?: {
417
+ [x: string]: unknown;
418
+ } | undefined;
419
+ } | {
420
+ type: "image";
421
+ data: string;
422
+ mimeType: string;
423
+ annotations?: {
424
+ audience?: ("user" | "assistant")[] | undefined;
425
+ priority?: number | undefined;
426
+ lastModified?: string | undefined;
427
+ } | undefined;
428
+ _meta?: {
429
+ [x: string]: unknown;
430
+ } | undefined;
431
+ } | {
432
+ type: "audio";
433
+ data: string;
434
+ mimeType: string;
435
+ annotations?: {
436
+ audience?: ("user" | "assistant")[] | undefined;
437
+ priority?: number | undefined;
438
+ lastModified?: string | undefined;
439
+ } | undefined;
440
+ _meta?: {
441
+ [x: string]: unknown;
442
+ } | undefined;
443
+ } | {
444
+ uri: string;
445
+ name: string;
446
+ type: "resource_link";
447
+ description?: string | undefined;
448
+ mimeType?: string | undefined;
449
+ size?: number | undefined;
450
+ annotations?: {
451
+ audience?: ("user" | "assistant")[] | undefined;
452
+ priority?: number | undefined;
453
+ lastModified?: string | undefined;
454
+ } | undefined;
455
+ _meta?: {
456
+ [x: string]: unknown;
457
+ } | undefined;
458
+ icons?: {
459
+ src: string;
460
+ mimeType?: string | undefined;
461
+ sizes?: string[] | undefined;
462
+ theme?: "light" | "dark" | undefined;
463
+ }[] | undefined;
464
+ title?: string | undefined;
465
+ } | {
466
+ type: "resource";
467
+ resource: {
468
+ uri: string;
469
+ text: string;
470
+ mimeType?: string | undefined;
471
+ _meta?: {
472
+ [x: string]: unknown;
473
+ } | undefined;
474
+ } | {
475
+ uri: string;
476
+ blob: string;
477
+ mimeType?: string | undefined;
478
+ _meta?: {
479
+ [x: string]: unknown;
480
+ } | undefined;
481
+ };
482
+ annotations?: {
483
+ audience?: ("user" | "assistant")[] | undefined;
484
+ priority?: number | undefined;
485
+ lastModified?: string | undefined;
486
+ } | undefined;
487
+ _meta?: {
488
+ [x: string]: unknown;
489
+ } | undefined;
490
+ })[];
491
+ _meta?: {
492
+ [x: string]: unknown;
493
+ progressToken?: string | number | undefined;
494
+ "io.modelcontextprotocol/related-task"?: {
495
+ taskId: string;
496
+ } | undefined;
497
+ } | undefined;
498
+ structuredContent?: {
499
+ [x: string]: unknown;
500
+ } | undefined;
501
+ isError?: boolean | undefined;
502
+ }>;
503
+ claimsPause(input: unknown, caller?: LabExecCaller): Promise<{
504
+ [x: string]: unknown;
505
+ content: ({
506
+ type: "text";
507
+ text: string;
508
+ annotations?: {
509
+ audience?: ("user" | "assistant")[] | undefined;
510
+ priority?: number | undefined;
511
+ lastModified?: string | undefined;
512
+ } | undefined;
513
+ _meta?: {
514
+ [x: string]: unknown;
515
+ } | undefined;
516
+ } | {
517
+ type: "image";
518
+ data: string;
519
+ mimeType: string;
520
+ annotations?: {
521
+ audience?: ("user" | "assistant")[] | undefined;
522
+ priority?: number | undefined;
523
+ lastModified?: string | undefined;
524
+ } | undefined;
525
+ _meta?: {
526
+ [x: string]: unknown;
527
+ } | undefined;
528
+ } | {
529
+ type: "audio";
530
+ data: string;
531
+ mimeType: string;
532
+ annotations?: {
533
+ audience?: ("user" | "assistant")[] | undefined;
534
+ priority?: number | undefined;
535
+ lastModified?: string | undefined;
536
+ } | undefined;
537
+ _meta?: {
538
+ [x: string]: unknown;
539
+ } | undefined;
540
+ } | {
541
+ uri: string;
542
+ name: string;
543
+ type: "resource_link";
544
+ description?: string | undefined;
545
+ mimeType?: string | undefined;
546
+ size?: number | undefined;
547
+ annotations?: {
548
+ audience?: ("user" | "assistant")[] | undefined;
549
+ priority?: number | undefined;
550
+ lastModified?: string | undefined;
551
+ } | undefined;
552
+ _meta?: {
553
+ [x: string]: unknown;
554
+ } | undefined;
555
+ icons?: {
556
+ src: string;
557
+ mimeType?: string | undefined;
558
+ sizes?: string[] | undefined;
559
+ theme?: "light" | "dark" | undefined;
560
+ }[] | undefined;
561
+ title?: string | undefined;
562
+ } | {
563
+ type: "resource";
564
+ resource: {
565
+ uri: string;
566
+ text: string;
567
+ mimeType?: string | undefined;
568
+ _meta?: {
569
+ [x: string]: unknown;
570
+ } | undefined;
571
+ } | {
572
+ uri: string;
573
+ blob: string;
574
+ mimeType?: string | undefined;
575
+ _meta?: {
576
+ [x: string]: unknown;
577
+ } | undefined;
578
+ };
579
+ annotations?: {
580
+ audience?: ("user" | "assistant")[] | undefined;
581
+ priority?: number | undefined;
582
+ lastModified?: string | undefined;
583
+ } | undefined;
584
+ _meta?: {
585
+ [x: string]: unknown;
586
+ } | undefined;
587
+ })[];
588
+ _meta?: {
589
+ [x: string]: unknown;
590
+ progressToken?: string | number | undefined;
591
+ "io.modelcontextprotocol/related-task"?: {
592
+ taskId: string;
593
+ } | undefined;
594
+ } | undefined;
595
+ structuredContent?: {
596
+ [x: string]: unknown;
597
+ } | undefined;
598
+ isError?: boolean | undefined;
599
+ }>;
600
+ /** Resolve a claim to its guest asset ID, or return the refusal reason. */
601
+ private resolveAsset;
602
+ hostKeyEnroll(input: LabHostKeyEnrollInput, caller?: LabExecCaller): Promise<LabExecOutcome>;
212
603
  ssh(input: LabSshInput, caller?: LabExecCaller): Promise<LabExecOutcome>;
213
604
  }
214
605
  //# sourceMappingURL=claim-resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claim-resolve.d.ts","sourceRoot":"","sources":["../../../src/lab-exec/claim-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGhF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC;AAyBD,qBAAa,sBAAuB,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAe,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAA3C,KAAK,EAAE,WAAW,EAAmB,MAAM,EAAE,WAAW;IAErF,IAAI,QAAQ,uBAAkC;IAE9C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKjD,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAK1C,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;CAkB/E"}
1
+ {"version":3,"file":"claim-resolve.d.ts","sourceRoot":"","sources":["../../../src/lab-exec/claim-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGhF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC;AAyBD,qBAAa,sBAAuB,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAe,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAA3C,KAAK,EAAE,WAAW,EAAmB,MAAM,EAAE,WAAW;IAErF,IAAI,QAAQ,uBAAkC;IAE9C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKjD,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKhD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKnD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKlD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKnD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKlD,2EAA2E;YAC7D,YAAY;IAiBpB,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB5F,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;CAO/E"}
@@ -1,5 +1,5 @@
1
1
  import { labSshCommandSha256, LAB_SSH_ASSET_ID } from "./contract.js";
2
- import { VM_SSH_RESULT_SCHEMA } from "./result.js";
2
+ import { HOST_KEY_ENROLL_RESULT_SCHEMA, VM_SSH_RESULT_SCHEMA } from "./result.js";
3
3
  function notFound(error) {
4
4
  const e = error;
5
5
  return e?.status === 404 || String(e?.message ?? "").includes("(404)");
@@ -39,26 +39,74 @@ export class ClaimResolvingExecutor {
39
39
  throw new Error("inner executor has no claim plane");
40
40
  return this.inner.claimsGet(input, caller);
41
41
  }
42
- async ssh(input, caller) {
43
- if (!input.claimId)
44
- return this.inner.ssh(input, caller);
42
+ claimsCreate(input, caller) {
43
+ if (!this.inner.claimsCreate)
44
+ throw new Error("inner executor has no claim plane");
45
+ return this.inner.claimsCreate(input, caller);
46
+ }
47
+ claimsRenew(input, caller) {
48
+ if (!this.inner.claimsRenew)
49
+ throw new Error("inner executor has no claim plane");
50
+ return this.inner.claimsRenew(input, caller);
51
+ }
52
+ claimsDelete(input, caller) {
53
+ if (!this.inner.claimsDelete)
54
+ throw new Error("inner executor has no claim plane");
55
+ return this.inner.claimsDelete(input, caller);
56
+ }
57
+ claimsPause(input, caller) {
58
+ if (!this.inner.claimsPause)
59
+ throw new Error("inner executor has no claim plane");
60
+ return this.inner.claimsPause(input, caller);
61
+ }
62
+ /** Resolve a claim to its guest asset ID, or return the refusal reason. */
63
+ async resolveAsset(claimId) {
45
64
  let claim;
46
65
  try {
47
- claim = await this.claims.getClaim(input.claimId);
66
+ claim = await this.claims.getClaim(claimId);
48
67
  }
49
68
  catch (error) {
50
69
  if (!notFound(error))
51
70
  throw error;
52
71
  }
53
- if (!claim || claim.__notFound || claim.metadata?.deletionTimestamp || claim.metadata?.name !== input.claimId) {
54
- return refusal(input, "claim_not_found", `no live ApplianceClaim named '${input.claimId}'`);
72
+ if (!claim || claim.__notFound || claim.metadata?.deletionTimestamp || claim.metadata?.name !== claimId) {
73
+ return { classification: "claim_not_found", message: `no live ApplianceClaim named '${claimId}'` };
55
74
  }
56
75
  const assetId = claim.spec?.vmName;
57
76
  if (typeof assetId !== "string" || !LAB_SSH_ASSET_ID.test(assetId)) {
58
- return refusal(input, "claim_has_no_asset", `ApplianceClaim '${input.claimId}' does not name a guest (spec.vmName); use assetId from list_inventory`);
77
+ return { classification: "claim_has_no_asset", message: `ApplianceClaim '${claimId}' does not name a guest (spec.vmName); use assetId from list_inventory` };
59
78
  }
79
+ return { assetId };
80
+ }
81
+ async hostKeyEnroll(input, caller) {
82
+ if (!this.inner.hostKeyEnroll)
83
+ throw new Error("inner executor has no host-key enrollment");
84
+ if (!input.claimId)
85
+ return this.inner.hostKeyEnroll(input, caller);
86
+ const resolved = await this.resolveAsset(input.claimId);
87
+ if (!("assetId" in resolved)) {
88
+ const receipt = {
89
+ schema: HOST_KEY_ENROLL_RESULT_SCHEMA,
90
+ asset_id: input.claimId,
91
+ claim_id: input.claimId,
92
+ apply: input.apply,
93
+ status: "refused",
94
+ reason: resolved.classification,
95
+ detail: resolved.message,
96
+ };
97
+ return { exitCode: 0, stdout: JSON.stringify(receipt), stderr: "" };
98
+ }
99
+ const { claimId: _claimId, ...rest } = input;
100
+ return this.inner.hostKeyEnroll({ ...rest, assetId: resolved.assetId }, caller);
101
+ }
102
+ async ssh(input, caller) {
103
+ if (!input.claimId)
104
+ return this.inner.ssh(input, caller);
105
+ const resolved = await this.resolveAsset(input.claimId);
106
+ if (!("assetId" in resolved))
107
+ return refusal(input, resolved.classification, resolved.message);
60
108
  const { claimId: _claimId, ...rest } = input;
61
- return this.inner.ssh({ ...rest, assetId }, caller);
109
+ return this.inner.ssh({ ...rest, assetId: resolved.assetId }, caller);
62
110
  }
63
111
  }
64
112
  //# sourceMappingURL=claim-resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claim-resolve.js","sourceRoot":"","sources":["../../../src/lab-exec/claim-resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claim-resolve.js","sourceRoot":"","sources":["../../../src/lab-exec/claim-resolve.ts"],"names":[],"mappings":"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"}
@@ -94,4 +94,39 @@ export type LabSshInput = z.output<typeof LabSshInputSchema>;
94
94
  export declare function labSshRemoteTokens(command: string): string[];
95
95
  export declare function labSshCommandSha256(command: string): string;
96
96
  export declare function labSshArgv(input: LabSshInput): string[];
97
+ /**
98
+ * lab_host_key_enroll input contract (REL-1971). Runs the canonical `vm enroll-host-key`
99
+ * ladder for one claimed guest. A dry run is the default; `apply` publishes the ADR 0918
100
+ * v2 claim-store access entry after the pin is proven.
101
+ */
102
+ export declare const LabHostKeyEnrollInputShape: {
103
+ assetId: z.ZodOptional<z.ZodString>;
104
+ claimId: z.ZodOptional<z.ZodString>;
105
+ apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
106
+ };
107
+ export declare const LabHostKeyEnrollInputSchema: z.ZodEffects<z.ZodObject<{
108
+ assetId: z.ZodOptional<z.ZodString>;
109
+ claimId: z.ZodOptional<z.ZodString>;
110
+ apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
111
+ }, "strict", z.ZodTypeAny, {
112
+ apply: boolean;
113
+ claimId?: string | undefined;
114
+ assetId?: string | undefined;
115
+ }, {
116
+ claimId?: string | undefined;
117
+ assetId?: string | undefined;
118
+ apply?: boolean | undefined;
119
+ }>, {
120
+ apply: boolean;
121
+ claimId?: string | undefined;
122
+ assetId?: string | undefined;
123
+ }, {
124
+ claimId?: string | undefined;
125
+ assetId?: string | undefined;
126
+ apply?: boolean | undefined;
127
+ }>;
128
+ export type LabHostKeyEnrollInput = z.output<typeof LabHostKeyEnrollInputSchema>;
129
+ /** The ladder can read the host key over the pinned serial console, so allow a long run. */
130
+ export declare const LAB_HOST_KEY_ENROLL_TIMEOUT_MS = 180000;
131
+ export declare function labHostKeyEnrollArgv(input: LabHostKeyEnrollInput): string[];
97
132
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/lab-exec/contract.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,QAAiC,CAAC;AAC/D,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,QAA6C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAC7D,eAAO,MAAM,YAAY,QAAwE,CAAC;AAClG,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,eAAO,MAAM,kBAAkB;;;;;;;;;EAKpB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAY5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB1B,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE7D,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQvD"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/lab-exec/contract.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,QAAiC,CAAC;AAC/D,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,QAA6C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAC7D,eAAO,MAAM,YAAY,QAAwE,CAAC;AAClG,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,eAAO,MAAM,kBAAkB;;;;;;;;;EAKpB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAY5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB1B,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE7D,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQvD;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;CAOtC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;EAOpC,CAAC;AAEL,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEjF,4FAA4F;AAC5F,eAAO,MAAM,8BAA8B,SAAU,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAG3E"}
@@ -65,4 +65,32 @@ export function labSshArgv(input) {
65
65
  argv.push("--", ...labSshRemoteTokens(input.command));
66
66
  return argv;
67
67
  }
68
+ /**
69
+ * lab_host_key_enroll input contract (REL-1971). Runs the canonical `vm enroll-host-key`
70
+ * ladder for one claimed guest. A dry run is the default; `apply` publishes the ADR 0918
71
+ * v2 claim-store access entry after the pin is proven.
72
+ */
73
+ export const LabHostKeyEnrollInputShape = {
74
+ assetId: z.string().regex(LAB_SSH_ASSET_ID).optional()
75
+ .describe("Exact lab asset ID of the claimed runtime guest. Provide exactly one of assetId or claimId."),
76
+ claimId: z.string().regex(LAB_SSH_CLAIM_ID).optional()
77
+ .describe("ApplianceClaim name (for example claim-uat-1815-302). The MCP resolves the claim's guest asset ID itself. Provide exactly one of assetId or claimId."),
78
+ apply: z.boolean().optional().default(false)
79
+ .describe("false (default): read-only dry run that reports the observed pin and what would be published. true: publish the v2 access entry after the pin is proven; an already-enrolled guest is left untouched."),
80
+ };
81
+ export const LabHostKeyEnrollInputSchema = z
82
+ .object(LabHostKeyEnrollInputShape)
83
+ .strict()
84
+ .superRefine((value, ctx) => {
85
+ if ((value.assetId === undefined) === (value.claimId === undefined)) {
86
+ ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["assetId"], message: "provide exactly one of assetId or claimId" });
87
+ }
88
+ });
89
+ /** The ladder can read the host key over the pinned serial console, so allow a long run. */
90
+ export const LAB_HOST_KEY_ENROLL_TIMEOUT_MS = 180_000;
91
+ export function labHostKeyEnrollArgv(input) {
92
+ if (!input.assetId)
93
+ throw new Error("labHostKeyEnrollArgv requires a resolved assetId");
94
+ return ["vm", "enroll-host-key", "--asset-id", input.assetId, ...(input.apply ? ["--apply"] : [])];
95
+ }
68
96
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/lab-exec/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/lab-exec/contract.ts"],"names":[],"mappings":"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"}