@mesh-tech/mesh-cli 0.40.14 → 0.41.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 (58) hide show
  1. package/dist/bin/{mesh.auth-preflight-BGI5LPLN.js → mesh.auth-preflight-JTUNS42O.js} +1 -1
  2. package/dist/bin/{mesh.chunk-3WJGDNHA.js → mesh.chunk-HB2IZKLP.js} +5 -5
  3. package/dist/bin/{mesh.chunk-4XX62O6Z.js → mesh.chunk-HC7V75J3.js} +1 -1
  4. package/dist/bin/{mesh.chunk-GLG5JBI7.js → mesh.chunk-IZLAJATU.js} +61 -34
  5. package/dist/bin/mesh.chunk-IZLAJATU.js.map +6 -0
  6. package/dist/bin/{mesh.chunk-O5CP4NPZ.js → mesh.chunk-LAUSCBV6.js} +2 -2
  7. package/dist/bin/{mesh.chunk-WT27GBE4.js → mesh.chunk-M57BJLLK.js} +1 -1
  8. package/dist/bin/{mesh.chunk-YKW256CK.js → mesh.chunk-PANTMVC3.js} +3 -3
  9. package/dist/bin/{mesh.chunk-2QIVBQX5.js.map → mesh.chunk-PL3P54MY.js.map} +1 -1
  10. package/dist/bin/{mesh.chunk-EHLBX24J.js → mesh.chunk-QUKWWFZI.js} +1 -1
  11. package/dist/bin/{mesh.chunk-DYWR76EO.js → mesh.chunk-TYM27CO3.js} +1 -1
  12. package/dist/bin/{mesh.chunk-O677AU5E.js → mesh.chunk-YB4VOTA7.js} +1 -1
  13. package/dist/bin/{mesh.convert-7N2H2SVK.js → mesh.convert-4BZC5PYA.js} +1 -1
  14. package/dist/bin/{mesh.create-app-GQIGCZNI.js → mesh.create-app-3HYMOLXT.js} +4 -4
  15. package/dist/bin/{mesh.dev-token-server-IJUVRBWI.js → mesh.dev-token-server-4N6HGQAF.js} +3 -3
  16. package/dist/bin/mesh.js +10 -10
  17. package/dist/bin/{mesh.login-N5LPLRRX.js → mesh.login-Q6R5GMVM.js} +3 -3
  18. package/dist/bin/{mesh.platform-setup-PCDLE2EI.js → mesh.platform-setup-LVFHW263.js} +1 -1
  19. package/dist/bin/{mesh.preview-RJGTCTY3.js → mesh.preview-ALFPQCWU.js} +1 -1
  20. package/dist/bin/mesh.program-BZPJOWJK.js +24 -0
  21. package/dist/bin/{mesh.registry-5U4L6256.js → mesh.registry-KA3CNNPZ.js} +5 -5
  22. package/dist/bin/{mesh.registry-identity-6UPUHKO2.js → mesh.registry-identity-DSTAHXUS.js} +4 -4
  23. package/dist/bin/{mesh.review-command-MLBWVHF7.js → mesh.review-command-3ZXPS6Y3.js} +4 -4
  24. package/dist/bin/{mesh.start-24YIFB4O.js → mesh.start-XKQW5DW4.js} +2 -2
  25. package/dist/bin/{mesh.wizard-6HMOBC5L.js → mesh.wizard-I7HPLDDY.js} +8 -8
  26. package/dist/build-info.json +2 -2
  27. package/dist/src/commands/local/seed-hub-catalog.d.ts +4 -0
  28. package/dist/src/commands/local/seed-hub-catalog.js +18 -8
  29. package/dist/src/commands/temporal.js.map +1 -1
  30. package/package.json +3 -3
  31. package/skills/mesh/SKILL.md +1 -1
  32. package/templates/api-auth/api/src/schema.ts.hbs +5 -3
  33. package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +8 -0
  34. package/templates/platform-repo/core/index.ts +3 -0
  35. package/dist/bin/mesh.chunk-GLG5JBI7.js.map +0 -6
  36. package/dist/bin/mesh.program-WSFVQU7P.js +0 -24
  37. /package/dist/bin/{mesh.auth-preflight-BGI5LPLN.js.map → mesh.auth-preflight-JTUNS42O.js.map} +0 -0
  38. /package/dist/bin/{mesh.chunk-3WJGDNHA.js.map → mesh.chunk-HB2IZKLP.js.map} +0 -0
  39. /package/dist/bin/{mesh.chunk-4XX62O6Z.js.map → mesh.chunk-HC7V75J3.js.map} +0 -0
  40. /package/dist/bin/{mesh.chunk-O5CP4NPZ.js.map → mesh.chunk-LAUSCBV6.js.map} +0 -0
  41. /package/dist/bin/{mesh.chunk-WT27GBE4.js.map → mesh.chunk-M57BJLLK.js.map} +0 -0
  42. /package/dist/bin/{mesh.chunk-YKW256CK.js.map → mesh.chunk-PANTMVC3.js.map} +0 -0
  43. /package/dist/bin/{mesh.chunk-2QIVBQX5.js → mesh.chunk-PL3P54MY.js} +0 -0
  44. /package/dist/bin/{mesh.chunk-EHLBX24J.js.map → mesh.chunk-QUKWWFZI.js.map} +0 -0
  45. /package/dist/bin/{mesh.chunk-DYWR76EO.js.map → mesh.chunk-TYM27CO3.js.map} +0 -0
  46. /package/dist/bin/{mesh.chunk-O677AU5E.js.map → mesh.chunk-YB4VOTA7.js.map} +0 -0
  47. /package/dist/bin/{mesh.convert-7N2H2SVK.js.map → mesh.convert-4BZC5PYA.js.map} +0 -0
  48. /package/dist/bin/{mesh.create-app-GQIGCZNI.js.map → mesh.create-app-3HYMOLXT.js.map} +0 -0
  49. /package/dist/bin/{mesh.dev-token-server-IJUVRBWI.js.map → mesh.dev-token-server-4N6HGQAF.js.map} +0 -0
  50. /package/dist/bin/{mesh.login-N5LPLRRX.js.map → mesh.login-Q6R5GMVM.js.map} +0 -0
  51. /package/dist/bin/{mesh.platform-setup-PCDLE2EI.js.map → mesh.platform-setup-LVFHW263.js.map} +0 -0
  52. /package/dist/bin/{mesh.preview-RJGTCTY3.js.map → mesh.preview-ALFPQCWU.js.map} +0 -0
  53. /package/dist/bin/{mesh.program-WSFVQU7P.js.map → mesh.program-BZPJOWJK.js.map} +0 -0
  54. /package/dist/bin/{mesh.registry-5U4L6256.js.map → mesh.registry-KA3CNNPZ.js.map} +0 -0
  55. /package/dist/bin/{mesh.registry-identity-6UPUHKO2.js.map → mesh.registry-identity-DSTAHXUS.js.map} +0 -0
  56. /package/dist/bin/{mesh.review-command-MLBWVHF7.js.map → mesh.review-command-3ZXPS6Y3.js.map} +0 -0
  57. /package/dist/bin/{mesh.start-24YIFB4O.js.map → mesh.start-XKQW5DW4.js.map} +0 -0
  58. /package/dist/bin/{mesh.wizard-6HMOBC5L.js.map → mesh.wizard-I7HPLDDY.js.map} +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  registryPreflight,
22
22
  stripUnscopedCodeArtifactRegistry,
23
23
  upsertNpmrcLines
24
- } from "./mesh.chunk-4XX62O6Z.js";
24
+ } from "./mesh.chunk-HC7V75J3.js";
25
25
  export {
26
26
  REGISTRY_LOGIN_FIX,
27
27
  REGISTRY_LOGIN_FIX_AWS,
@@ -11,7 +11,7 @@ import {
11
11
  parseHubActAsExports,
12
12
  restrictedRoleBase,
13
13
  sandboxModeSchema
14
- } from "./mesh.chunk-2QIVBQX5.js";
14
+ } from "./mesh.chunk-PL3P54MY.js";
15
15
  import {
16
16
  ARTIFACTS_BUCKET,
17
17
  COMPOSE_PROJECT,
@@ -49,7 +49,7 @@ import {
49
49
  isExpiredAwsTokenMessage,
50
50
  probeRegistryToken,
51
51
  registryLoginFix
52
- } from "./mesh.chunk-4XX62O6Z.js";
52
+ } from "./mesh.chunk-HC7V75J3.js";
53
53
 
54
54
  // packages/mesh-cli/src/commands/login.ts
55
55
  import * as http from "http";
@@ -7885,7 +7885,7 @@ function registerDevCommand(program) {
7885
7885
  "tmux"
7886
7886
  );
7887
7887
  dev.command("__token-server <port> <context>", { hidden: true }).action(async (port, context) => {
7888
- const { startTokenServer } = await import("./mesh.dev-token-server-IJUVRBWI.js");
7888
+ const { startTokenServer } = await import("./mesh.dev-token-server-4N6HGQAF.js");
7889
7889
  await startTokenServer(Number(port), context);
7890
7890
  });
7891
7891
  dev.action(async (options) => {
@@ -11023,9 +11023,9 @@ function refuseReservedRegistryContext(context, verb) {
11023
11023
  }
11024
11024
  async function hintRegistryIfMissing() {
11025
11025
  try {
11026
- const { readRegistrySession } = await import("./mesh.registry-identity-6UPUHKO2.js");
11026
+ const { readRegistrySession } = await import("./mesh.registry-identity-DSTAHXUS.js");
11027
11027
  if (readRegistrySession()) return;
11028
- const { probeRegistryToken: probeRegistryToken2 } = await import("./mesh.auth-preflight-BGI5LPLN.js");
11028
+ const { probeRegistryToken: probeRegistryToken2 } = await import("./mesh.auth-preflight-JTUNS42O.js");
11029
11029
  const probe = await probeRegistryToken2();
11030
11030
  if (probe.state === "missing" || probe.state === "expired") {
11031
11031
  logInfo(REGISTRY_SEPARATE_HINT);
@@ -107,7 +107,7 @@ async function registryPreflight(opts) {
107
107
  const probe = await probeRegistryToken(opts);
108
108
  let session = null;
109
109
  try {
110
- const { readRegistrySession } = await import("./mesh.registry-identity-6UPUHKO2.js");
110
+ const { readRegistrySession } = await import("./mesh.registry-identity-DSTAHXUS.js");
111
111
  session = readRegistrySession();
112
112
  } catch {
113
113
  }
@@ -7,22 +7,22 @@ import {
7
7
  parseInstanceIndex,
8
8
  resolveSecretsContext,
9
9
  setCommand
10
- } from "./mesh.chunk-EHLBX24J.js";
10
+ } from "./mesh.chunk-QUKWWFZI.js";
11
11
  import {
12
12
  cliReferenceStaleness,
13
13
  resolveCliRuntime,
14
14
  runPortalCommand
15
- } from "./mesh.chunk-O677AU5E.js";
15
+ } from "./mesh.chunk-YB4VOTA7.js";
16
16
  import {
17
17
  registerAppCommands,
18
18
  registerCreateAppCommand
19
- } from "./mesh.chunk-O5CP4NPZ.js";
19
+ } from "./mesh.chunk-LAUSCBV6.js";
20
20
  import {
21
21
  PLATFORM_SETUP_DEFAULTS
22
- } from "./mesh.chunk-WT27GBE4.js";
22
+ } from "./mesh.chunk-M57BJLLK.js";
23
23
  import {
24
24
  registerRegistryCommands
25
- } from "./mesh.chunk-YKW256CK.js";
25
+ } from "./mesh.chunk-PANTMVC3.js";
26
26
  import {
27
27
  registerSkillsCommands,
28
28
  resolveTargetRoot,
@@ -78,7 +78,7 @@ import {
78
78
  waitForPort,
79
79
  worktreeStackName,
80
80
  writeEnvFile
81
- } from "./mesh.chunk-3WJGDNHA.js";
81
+ } from "./mesh.chunk-HB2IZKLP.js";
82
82
  import {
83
83
  COMPOSE_PROJECT,
84
84
  DEFAULT_HUB_PORT,
@@ -127,7 +127,7 @@ import {
127
127
  homeNpmrcPath,
128
128
  isNpmAuthError,
129
129
  probeRegistryToken
130
- } from "./mesh.chunk-4XX62O6Z.js";
130
+ } from "./mesh.chunk-HC7V75J3.js";
131
131
  import {
132
132
  createVcsFolderReader,
133
133
  deriveVcsBaseUrl,
@@ -1542,7 +1542,7 @@ var DOCS_PREVIEW_PORT = "4410";
1542
1542
  var CLI_REFERENCE_PATH = "docs/portal/generated/cli-reference.md";
1543
1543
  async function renderCliReference() {
1544
1544
  const [{ createProgram: createProgram2 }, { extractCliReference, renderCliReferenceMarkdown }] = await Promise.all([
1545
- import("./mesh.program-WSFVQU7P.js"),
1545
+ import("./mesh.program-BZPJOWJK.js"),
1546
1546
  import("./mesh.cli-reference-H3TOPIET.js")
1547
1547
  ]);
1548
1548
  return renderCliReferenceMarkdown(extractCliReference(createProgram2()));
@@ -1614,7 +1614,7 @@ function registerDocsCommand(program) {
1614
1614
  "Serve the Mesh docs locally \u2014 detached in a tmux session by default; the working tree in a mesh-platform checkout, or the published @mesh-tech/docs artifact (role-gated registry) anywhere else"
1615
1615
  ).option("-v, --version <version>", "docs version to serve (== the @mesh-tech/* baseline it describes); default: latest", void 0).option("-p, --port <port>", "port to serve on (0 picks a free one)", "4400").option("--dev", "in a checkout: run the Zudoku dev server (HMR) in the foreground, for authoring", false).option("--foreground", "serve in the foreground (the agent/CI path; automatic when not a TTY)", false).action(
1616
1616
  (opts) => guarded(async () => {
1617
- const { runDocsStart } = await import("./mesh.start-24YIFB4O.js");
1617
+ const { runDocsStart } = await import("./mesh.start-XKQW5DW4.js");
1618
1618
  await runDocsStart({
1619
1619
  repoRoot: findRepoRoot(process.cwd()),
1620
1620
  version: opts.version,
@@ -1626,13 +1626,13 @@ function registerDocsCommand(program) {
1626
1626
  );
1627
1627
  docs.command("stop").description(`Stop the detached docs server (the tmux session "${"mesh-docs"}")`).action(
1628
1628
  () => guarded(async () => {
1629
- const { runDocsStop } = await import("./mesh.start-24YIFB4O.js");
1629
+ const { runDocsStop } = await import("./mesh.start-XKQW5DW4.js");
1630
1630
  runDocsStop();
1631
1631
  })()
1632
1632
  );
1633
1633
  docs.command("serve-static", { hidden: true }).option("--root <dir>", "built site root", "").option("--port <port>", "port", "4400").action(
1634
1634
  (opts) => guarded(async () => {
1635
- const { runDocsServeStatic } = await import("./mesh.start-24YIFB4O.js");
1635
+ const { runDocsServeStatic } = await import("./mesh.start-XKQW5DW4.js");
1636
1636
  await runDocsServeStatic(opts);
1637
1637
  })()
1638
1638
  );
@@ -1646,7 +1646,7 @@ function registerDocsCommand(program) {
1646
1646
  "the OpenAPI spec to document, overriding docs.yaml's spec \u2014 pass the one the deploy reads (the ApiSurface's docs.spec, or its doc package's openapi.json); default: docs.yaml's spec, else openapi.json beside it"
1647
1647
  ).option("--check", "print the problems and exit 1 when there are any, without serving (CI / pre-deploy)", false).action(
1648
1648
  (dir, opts) => guarded(async () => {
1649
- const { runDocsPreview } = await import("./mesh.preview-RJGTCTY3.js");
1649
+ const { runDocsPreview } = await import("./mesh.preview-ALFPQCWU.js");
1650
1650
  const ok = await runDocsPreview({ target: dir, port: opts.port, out: opts.out, spec: opts.spec, check: opts.check });
1651
1651
  if (!ok) process.exitCode = 1;
1652
1652
  })()
@@ -1668,14 +1668,14 @@ function registerDocsCommand(program) {
1668
1668
  "the block's pages prefix ({ dir, prefix }): the old site served pages under /<prefix>/; the conversion lists the page ids that lose it"
1669
1669
  ).action(
1670
1670
  (opts) => guarded(async () => {
1671
- const { runDocsConvert } = await import("./mesh.convert-7N2H2SVK.js");
1671
+ const { runDocsConvert } = await import("./mesh.convert-4BZC5PYA.js");
1672
1672
  const ok = await runDocsConvert(opts);
1673
1673
  if (!ok) process.exitCode = 1;
1674
1674
  })()
1675
1675
  );
1676
1676
  docs.command("list").description("List the published docs versions (each is an @mesh-tech/* baseline)").action(
1677
1677
  () => guarded(async () => {
1678
- const { runDocsList } = await import("./mesh.start-24YIFB4O.js");
1678
+ const { runDocsList } = await import("./mesh.start-XKQW5DW4.js");
1679
1679
  await runDocsList();
1680
1680
  })()
1681
1681
  );
@@ -2198,7 +2198,7 @@ async function registryChecks(args) {
2198
2198
  const { fix, profile } = args;
2199
2199
  const probe = args.probe ?? probeRegistryToken;
2200
2200
  const login = args.login ?? (async () => {
2201
- const { runRegistryLogin } = await import("./mesh.registry-5U4L6256.js");
2201
+ const { runRegistryLogin } = await import("./mesh.registry-KA3CNNPZ.js");
2202
2202
  await runRegistryLogin(void 0, profile ? { profile } : {});
2203
2203
  });
2204
2204
  const REGISTRY_FIX = registryFixCommand(profile);
@@ -2354,7 +2354,7 @@ function registerInitCommands(program) {
2354
2354
  `nothing deployed yet \u2014 scaffold a tenant platform repo for \`<tenant>.<env>\` (default env: ${PLATFORM_SETUP_DEFAULTS.env}) and print its deploy sequence`
2355
2355
  ).option("--region <region>", `--new-platform: AWS region (default: ${PLATFORM_SETUP_DEFAULTS.region})`).option("--domain <domain>", "--new-platform: base public domain you control; the core stack creates the zone {env}.{domain} and stops at the mesh-gateway Ingress until you delegate its NS records. No default \u2014 a placeholder scaffolds a zone that can never validate").option("--state-bucket <bucket>", "--new-platform: Pulumi state S3 bucket (default: {tenant}-mesh-platform-pulumi-state)").option("--create-state-bucket", "--new-platform: create the state bucket (versioned) if it does not exist").option("--no-create-state-bucket", "--new-platform: never create the state bucket; print the aws command instead").option("--dir <path>", "--new-platform: where to scaffold the platform repo (default: ./{tenant}-mesh-platform)").option("--device", "device-code sign-in for the registry and platform steps (headless / SSH)").option("--profile <aws-profile>", "AWS profile this machine uses: read the registry without the broker (deployers only), and the profile a --new-platform stack config references").option("--skip-repo", "do not bootstrap, check or record anything in the current repo", false).option("--yes", "accept every default and never prompt", false).option("--json", "one JSON document on stdout ({tenant, mode, steps, next}); human output on stderr", false).action(
2356
2356
  async (opts) => {
2357
- const { runInitWizard } = await import("./mesh.wizard-6HMOBC5L.js");
2357
+ const { runInitWizard } = await import("./mesh.wizard-I7HPLDDY.js");
2358
2358
  const code = await runInitWizard(opts);
2359
2359
  if (code !== 0) process.exitCode = code;
2360
2360
  }
@@ -2370,7 +2370,7 @@ function registerInitCommands(program) {
2370
2370
  throw new MeshCliError(`Invalid tenant name '${tenant}' (lowercase alphanumeric + dashes).`);
2371
2371
  }
2372
2372
  const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
2373
- const { resolvePlatformSetup, scaffoldPlatformRepo, ensureStateBucket, renderPlatformNextSteps } = await import("./mesh.platform-setup-PCDLE2EI.js");
2373
+ const { resolvePlatformSetup, scaffoldPlatformRepo, ensureStateBucket, renderPlatformNextSteps } = await import("./mesh.platform-setup-LVFHW263.js");
2374
2374
  const setup = await resolvePlatformSetup(tenant, opts, {
2375
2375
  prompts: interactive && !opts.yes ? await setupPrompts() : void 0,
2376
2376
  interactive
@@ -2879,6 +2879,24 @@ async function buildHubImagesFromSource(repoRoot) {
2879
2879
  return version;
2880
2880
  }
2881
2881
 
2882
+ // packages/api-registry/src/ssm-chunks.ts
2883
+ import { createHash } from "node:crypto";
2884
+ var SSM_CHUNK_MANIFEST_PREFIX = "mesh.ssm-chunks/v1 ";
2885
+ var SSM_CHUNK_PART_PREFIX = "mesh.ssm-chunk ";
2886
+ var SSM_VALUE_MAX_BYTES = 8 * 1024;
2887
+ var SSM_CHUNK_RAW_BYTES = 6e3;
2888
+ var ssmChunkPartPath = (basePath, index) => `${basePath}/part-${index}`;
2889
+ var chunkSsmValue = (body, maxBytes = SSM_VALUE_MAX_BYTES) => {
2890
+ const bytes = Buffer.from(body, "utf8");
2891
+ if (bytes.length <= maxBytes) return { value: body, parts: [] };
2892
+ const parts = [];
2893
+ for (let offset = 0; offset < bytes.length; offset += SSM_CHUNK_RAW_BYTES) {
2894
+ parts.push(SSM_CHUNK_PART_PREFIX + bytes.subarray(offset, offset + SSM_CHUNK_RAW_BYTES).toString("base64"));
2895
+ }
2896
+ const manifest = { parts: parts.length, sha256: createHash("sha256").update(bytes).digest("hex") };
2897
+ return { value: SSM_CHUNK_MANIFEST_PREFIX + JSON.stringify(manifest), parts };
2898
+ };
2899
+
2882
2900
  // packages/mesh-cli/src/commands/local/seed-hub-catalog.ts
2883
2901
  var HUB_AUTHZ_POINTER_PARAM = `/mesh-platform/${LOCAL_TENANT}/${LOCAL_ENV}/apps/hub/stacks/local/authz`;
2884
2902
  var HUB_OPS_HUB_METADATA_PARAM = `${HUB_AUTHZ_POINTER_PARAM}/ops-hub-metadata`;
@@ -2890,21 +2908,30 @@ function withHubCatalogRefs(pointer, metadataRef) {
2890
2908
  mode: typeof pointer.mode === "string" ? pointer.mode : "policy-engine"
2891
2909
  };
2892
2910
  }
2911
+ function catalogParameters(metadata) {
2912
+ const { value, parts } = chunkSsmValue(JSON.stringify(metadata));
2913
+ return [
2914
+ ...parts.map((part, i) => ({ name: ssmChunkPartPath(HUB_OPS_HUB_METADATA_PARAM, i), value: part })),
2915
+ // Parts land before the manifest that names them.
2916
+ { name: HUB_OPS_HUB_METADATA_PARAM, value }
2917
+ ];
2918
+ }
2893
2919
  async function publishHubAuthzCatalog(compiled, awsConfig) {
2894
2920
  const { SSMClient: SSMClient3, GetParameterCommand, PutParameterCommand } = await import("@aws-sdk/client-ssm");
2895
2921
  const ssm = new SSMClient3(awsConfig);
2896
- await ssm.send(
2897
- new PutParameterCommand({
2898
- Name: HUB_OPS_HUB_METADATA_PARAM,
2899
- Type: "String",
2900
- // The blob is ~7.5 KB — past the 4 KB standard tier, within Advanced (8 KB),
2901
- // the tier the platform's Export uses for the same param.
2902
- Tier: "Advanced",
2903
- Overwrite: true,
2904
- Value: JSON.stringify(compiled.metadata),
2905
- Description: "Hub role catalog \u2014 ops-hub-metadata (local analog of MeshHub's SpiceDBSchema export)"
2906
- })
2907
- );
2922
+ for (const { name, value } of catalogParameters(compiled.metadata)) {
2923
+ await ssm.send(
2924
+ new PutParameterCommand({
2925
+ Name: name,
2926
+ Type: "String",
2927
+ // Past the 4 KB standard tier, the tier the platform's Export uses for the same param.
2928
+ Tier: "Advanced",
2929
+ Overwrite: true,
2930
+ Value: value,
2931
+ Description: "Hub role catalog \u2014 ops-hub-metadata (local analog of MeshHub's SpiceDBSchema export)"
2932
+ })
2933
+ );
2934
+ }
2908
2935
  let current = {};
2909
2936
  try {
2910
2937
  const existing = await ssm.send(new GetParameterCommand({ Name: HUB_AUTHZ_POINTER_PARAM }));
@@ -3372,7 +3399,7 @@ function registerMcpCommands(program) {
3372
3399
  "--secret <id>",
3373
3400
  "Secrets Manager secret holding the Integration credential (default: the deployed ExternalService's own secret)"
3374
3401
  ).action(async (manifest, opts) => {
3375
- const { runMcpReviewCommand } = await import("./mesh.review-command-MLBWVHF7.js");
3402
+ const { runMcpReviewCommand } = await import("./mesh.review-command-3ZXPS6Y3.js");
3376
3403
  try {
3377
3404
  await runMcpReviewCommand(manifest, opts);
3378
3405
  } catch (error) {
@@ -3407,7 +3434,7 @@ function registerMcpCommands(program) {
3407
3434
  `No pnpm-workspace.yaml above ${serveDir}: the worker image installs this package from a pnpm workspace, so it must be in one.`
3408
3435
  );
3409
3436
  } else if (!membership.member && membership.suggestedGlob) {
3410
- const { ensureWorkspaceGlobs } = await import("./mesh.create-app-GQIGCZNI.js");
3437
+ const { ensureWorkspaceGlobs } = await import("./mesh.create-app-3HYMOLXT.js");
3411
3438
  const added = ensureWorkspaceGlobs(path9.dirname(membership.workspaceFile), [
3412
3439
  membership.suggestedGlob
3413
3440
  ]);
@@ -3918,7 +3945,7 @@ function registerSecretsCommands(program) {
3918
3945
  }
3919
3946
 
3920
3947
  // packages/mesh-cli/src/commands/site.ts
3921
- import { createHash } from "node:crypto";
3948
+ import { createHash as createHash2 } from "node:crypto";
3922
3949
  import { createReadStream } from "node:fs";
3923
3950
  import { readdir, readFile, stat } from "node:fs/promises";
3924
3951
  import { join as join10, relative as relative4, resolve as resolve5, sep } from "node:path";
@@ -3935,7 +3962,7 @@ async function describeSiteHttpError(res, target, site) {
3935
3962
  return describeHttpError(res, target, { id: site });
3936
3963
  }
3937
3964
  async function hashFile(absolute) {
3938
- const h = createHash("sha256");
3965
+ const h = createHash2("sha256");
3939
3966
  await new Promise((res, rej) => {
3940
3967
  createReadStream(absolute).on("data", (chunk) => h.update(chunk)).on("end", () => res()).on("error", rej);
3941
3968
  });
@@ -6400,7 +6427,7 @@ async function resolveToken(opts) {
6400
6427
  if (opts.token) return opts.token;
6401
6428
  if (process.env.VCS_TOKEN) return process.env.VCS_TOKEN;
6402
6429
  if (opts.context) {
6403
- const { getValidToken: getValidToken2 } = await import("./mesh.login-N5LPLRRX.js");
6430
+ const { getValidToken: getValidToken2 } = await import("./mesh.login-Q6R5GMVM.js");
6404
6431
  const token = await getValidToken2(opts.context);
6405
6432
  if (token) return token;
6406
6433
  }