cdk-local 0.162.0 → 0.163.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.
@@ -1,7 +1,7 @@
1
1
  import { a as displayIdent, c as getEmbedConfig, i as STACK_REF_MAX_CODE_POINTS, o as displayStackName, s as displayToolOutput, t as getLogger, u as setEmbedConfig } from "./logger-Co5XVwco.js";
2
- import { C as effectiveLoopbackPorts, G as isWildcardHostname, H as proxyAwareFetch, J as hostFromAuthority, K as formatAuthority, P as resolveHostDefaultCredentials, W as isLoopbackHostname, b as awsEmulatorEnvName, d as workloadStsClientConfig, l as warnWorkloadCredentialsStripped, n as accountLookupStsClientConfig, q as formatHostForAuthority, r as applyWorkloadEnvCredentials, u as workloadClientConfig, v as activateWorkloadAwsWiring, w as getActiveWorkloadAwsWiring, y as applyWorkloadAwsWiringToEnv, z as buildProxyClientConfig } from "./workload-identity-ITM3p2Ed.js";
2
+ import { $ as buildProxyClientConfig, C as effectiveLoopbackPorts, F as resolveHostDefaultCredentials, G as createMixedModeStateProvider, Q as awsEndpointOverrideClientConfig, at as isWildcardHostname, b as awsEmulatorEnvName, ct as hostFromAuthority, d as workloadStsClientConfig, it as isLoopbackHostname, l as warnWorkloadCredentialsStripped, n as accountLookupStsClientConfig, nt as proxyAwareFetch, ot as formatAuthority, r as applyWorkloadEnvCredentials, st as formatHostForAuthority, u as workloadClientConfig, v as activateWorkloadAwsWiring, w as getActiveWorkloadAwsWiring, y as applyWorkloadAwsWiringToEnv } from "./workload-identity-D5zkhVcF.js";
3
3
  import { c as clampErrorName, d as flattenToOneLine, f as isAwsServiceException, l as describeAwsFailureForWarn, m as stringifyThrown, o as renderAssemblyPathEscape, p as sanitizeServiceExceptionMessage, r as displayUntrustedValue, s as resolveAssemblyPath, t as absoluteAssemblyPathEscape, u as describeCredentialLoadFailure } from "./assembly-path-R96uhMm1.js";
4
- import { $ as resolveProfileCredentials, A as resolveAssetSourcePath, B as LocalInvokeBuildError, C as architectureToPlatform, D as parseEcrUri, E as isImageInLocalCache, F as formatStateRemedy, G as defineOwnKey, H as RouteDiscoveryError, I as substituteImagePlaceholders, J as assumeRoleCredentials, K as AssumeRoleFailure, L as tryResolveImageFnJoin, M as parseEcrRegistryHost, N as derivePartitionAndUrlSuffix, O as pullEcrImage, P as derivePseudoParametersFromRegion, Q as buildStsClientConfig, R as CdkLocalError, T as warnIfEmulatedPlatform, U as TargetSelectionCancelledError, V as LocalStartServiceError, W as withErrorHandling, X as isIamRoleArn, Y as describeRejectedRoleArn, Z as refusedRoleArnMessage, a as describeRefusedSensitiveEnvKeys, c as execEnvForSecrets, d as pullImage, f as removeContainer, i as attachLoopbackForwarder, j as describeExitWithoutArgv, k as buildDockerImage, l as pickFreePort, m as streamLogs, n as SENSITIVE_ENV_KEYS, p as runDetached, q as applyRoleArnIfSet, r as appendEnvFlags, s as ensureDockerAvailable, t as DockerRunnerError, u as prepareLoopbackForwarder, w as buildContainerImage, z as InteractiveTtyRequiredError } from "./docker-runner-BkrDB60P.js";
4
+ import { $ as buildStsClientConfig, A as buildDockerImage, B as InteractiveTtyRequiredError, D as isImageInLocalCache, E as warnIfEmulatedPlatform, F as derivePseudoParametersFromRegion, G as withErrorHandling, H as LocalStartServiceError, I as formatStateRemedy, J as applyRoleArnIfSet, K as defineOwnKey, L as substituteImagePlaceholders, M as describeExitWithoutArgv, N as parseEcrRegistryHost, O as parseEcrUri, P as derivePartitionAndUrlSuffix, Q as refusedRoleArnMessage, R as tryResolveImageFnJoin, T as buildContainerImage, U as RouteDiscoveryError, V as LocalInvokeBuildError, W as TargetSelectionCancelledError, X as describeRejectedRoleArn, Y as assumeRoleCredentials, Z as isIamRoleArn, a as describeRefusedSensitiveEnvKeys, c as execEnvForSecrets, d as rememberForwardedPorts, et as resolveProfileCredentials, f as removeContainer, h as streamLogs, i as attachLoopbackForwarder, j as resolveAssetSourcePath, k as pullEcrImage, l as pickFreePort, m as startNamespaceOwnerForwarder, n as SENSITIVE_ENV_KEYS, p as runDetached, q as AssumeRoleFailure, r as appendEnvFlags, s as ensureDockerAvailable, t as DockerRunnerError, u as pullImage, w as architectureToPlatform, z as CdkLocalError } from "./docker-runner-DzPTb4Ai.js";
5
5
  import { a as isDockerClientEnvKey, c as runDockerStreaming, i as getDockerCmd, n as finchSecretArgvRefusal, o as isMalformedEnvKey, u as warnFinchArgvExposure } from "./docker-cmd-Cjg3jGYF.js";
6
6
  import { chmodSync, cpSync, createWriteStream, existsSync, lstatSync, mkdirSync, mkdtempSync, promises, readFileSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
7
7
  import { Command, InvalidArgumentError, Option } from "commander";
@@ -2983,7 +2983,7 @@ async function resolveSsmParameters(client, refs, label) {
2983
2983
  //#endregion
2984
2984
  //#region src/local/cfn-local-state-provider.ts
2985
2985
  var CfnLocalStateProvider = class {
2986
- label = "--from-cfn-stack";
2986
+ label;
2987
2987
  cfnStackName;
2988
2988
  region;
2989
2989
  client;
@@ -2991,18 +2991,25 @@ var CfnLocalStateProvider = class {
2991
2991
  ssmClient;
2992
2992
  agentCoreControlClient;
2993
2993
  clientOptions;
2994
+ endpointOverride;
2994
2995
  disposed = false;
2995
2996
  lastLoadError;
2996
2997
  constructor(opts) {
2997
2998
  this.cfnStackName = opts.cfnStackName;
2998
2999
  this.region = opts.region;
2999
3000
  this.clientOptions = { region: opts.region };
3000
- if (opts.profile !== void 0) this.clientOptions.profile = opts.profile;
3001
+ this.endpointOverride = opts.endpointOverride;
3002
+ this.label = opts.label ?? "--from-cfn-stack";
3003
+ if (opts.profile !== void 0 && !opts.endpointOverride) this.clientOptions.profile = opts.profile;
3004
+ }
3005
+ overrideClientConfig() {
3006
+ return this.endpointOverride ? awsEndpointOverrideClientConfig(this.endpointOverride) : {};
3001
3007
  }
3002
3008
  getClient() {
3003
3009
  if (this.disposed) throw new Error("CfnLocalStateProvider used after dispose()");
3004
3010
  if (!this.client) this.client = new CloudFormationClient({
3005
3011
  ...workloadClientConfig({ profile: this.clientOptions.profile }),
3012
+ ...this.overrideClientConfig(),
3006
3013
  region: this.region,
3007
3014
  ...this.clientOptions.profile !== void 0 && { profile: this.clientOptions.profile }
3008
3015
  });
@@ -3012,6 +3019,7 @@ var CfnLocalStateProvider = class {
3012
3019
  if (this.disposed) throw new Error("CfnLocalStateProvider used after dispose()");
3013
3020
  if (!this.lambdaClient) this.lambdaClient = new LambdaClient({
3014
3021
  ...workloadClientConfig({ profile: this.clientOptions.profile }),
3022
+ ...this.overrideClientConfig(),
3015
3023
  region: this.region,
3016
3024
  ...this.clientOptions.profile !== void 0 && { profile: this.clientOptions.profile }
3017
3025
  });
@@ -3021,6 +3029,7 @@ var CfnLocalStateProvider = class {
3021
3029
  if (this.disposed) throw new Error("CfnLocalStateProvider used after dispose()");
3022
3030
  if (!this.agentCoreControlClient) this.agentCoreControlClient = new BedrockAgentCoreControlClient({
3023
3031
  ...workloadClientConfig({ profile: this.clientOptions.profile }),
3032
+ ...this.overrideClientConfig(),
3024
3033
  region: this.region,
3025
3034
  ...this.clientOptions.profile !== void 0 && { profile: this.clientOptions.profile }
3026
3035
  });
@@ -3030,6 +3039,7 @@ var CfnLocalStateProvider = class {
3030
3039
  if (this.disposed) throw new Error("CfnLocalStateProvider used after dispose()");
3031
3040
  if (!this.ssmClient) this.ssmClient = new SSMClient({
3032
3041
  ...workloadClientConfig({ profile: this.clientOptions.profile }),
3042
+ ...this.overrideClientConfig(),
3033
3043
  region: this.region,
3034
3044
  ...this.clientOptions.profile !== void 0 && { profile: this.clientOptions.profile }
3035
3045
  });
@@ -3292,7 +3302,7 @@ function rejectExplicitCfnStackWithMultipleStacks(options, routedStackCount) {
3292
3302
  if (typeof options.fromCfnStack !== "string") return;
3293
3303
  throw new LocalStateSourceError(`--from-cfn-stack <name> cannot be used with multiple routed stacks (got ${routedStackCount}). An explicit CFn stack name applies to one stack only and would silently mismap logical IDs across siblings. Use bare --from-cfn-stack (each stack uses its own name as the CFn stack name) or run one ${getEmbedConfig().binaryName} invocation per stack.`);
3294
3304
  }
3295
- function createLocalStateProvider(options, stackName, synthRegion, extraStateProviders) {
3305
+ function createLocalStateProvider(options, stackName, synthRegion, extraStateProviders, behavior = {}) {
3296
3306
  const cfnStackOpt = options.fromCfnStack;
3297
3307
  const cfnFlagPresent = isCfnFlagPresent(options);
3298
3308
  const activeExtras = [];
@@ -3302,11 +3312,27 @@ function createLocalStateProvider(options, stackName, synthRegion, extraStatePro
3302
3312
  if (cfnFlagPresent && activeExtras.length > 0) throw new LocalStateSourceError(`--from-cfn-stack is mutually exclusive with ${activeExtras.map(toFlagName).join(", ")}. Pick one state source.`);
3303
3313
  if (activeExtras.length > 1) throw new LocalStateSourceError(`state-source flags are mutually exclusive: ${activeExtras.map(toFlagName).join(", ")}. Pick one.`);
3304
3314
  if (cfnStackOpt === "") throw new LocalStateSourceError("--from-cfn-stack requires a non-empty stack name when an explicit value is provided. Drop the value to use the resolved stack name, or pass --from-cfn-stack <name>.");
3305
- if (cfnFlagPresent) return new CfnLocalStateProvider({
3306
- cfnStackName: resolveCfnStackName(cfnStackOpt, stackName),
3307
- region: resolveCfnRegion(options, synthRegion),
3308
- ...options.profile !== void 0 && { profile: options.profile }
3309
- });
3315
+ if (cfnFlagPresent) {
3316
+ const cfnStackName = resolveCfnStackName(cfnStackOpt, stackName);
3317
+ const region = resolveCfnRegion(options, synthRegion);
3318
+ const real = new CfnLocalStateProvider({
3319
+ cfnStackName,
3320
+ region,
3321
+ ...options.profile !== void 0 && { profile: options.profile }
3322
+ });
3323
+ const mixed = behavior.realAwsOnly ? void 0 : getActiveWorkloadAwsWiring()?.mixed;
3324
+ if (!mixed) return real;
3325
+ return createMixedModeStateProvider({
3326
+ real,
3327
+ emulator: new CfnLocalStateProvider({
3328
+ cfnStackName,
3329
+ region,
3330
+ endpointOverride: mixed.emulatorClientOverride,
3331
+ label: "--from-cfn-stack (AWS Emulator)"
3332
+ }),
3333
+ emulatedServices: mixed.services
3334
+ });
3335
+ }
3310
3336
  if (activeExtras.length === 1) {
3311
3337
  const factory = extraStateProviders[activeExtras[0]];
3312
3338
  return factory(options);
@@ -14929,7 +14955,8 @@ function createEcsRunState() {
14929
14955
  dockerVolumeNames: [],
14930
14956
  startedContainers: [],
14931
14957
  logStoppers: [],
14932
- publishedEndpoints: []
14958
+ publishedEndpoints: [],
14959
+ forwarders: []
14933
14960
  };
14934
14961
  }
14935
14962
  async function cleanupEcsRun(state, options) {
@@ -14940,6 +14967,8 @@ async function cleanupEcsRun(state, options) {
14940
14967
  logger.debug(`log stream stop failed: ${err instanceof Error ? err.message : String(err)}`);
14941
14968
  }
14942
14969
  state.logStoppers = [];
14970
+ await removeForwarders((state.forwarders ?? []).filter((f) => !f.joined));
14971
+ state.forwarders = (state.forwarders ?? []).filter((f) => f.joined);
14943
14972
  if (!options.keepRunning) {
14944
14973
  for (const c of state.startedContainers) {
14945
14974
  try {
@@ -14954,6 +14983,8 @@ async function cleanupEcsRun(state, options) {
14954
14983
  }
14955
14984
  }
14956
14985
  state.startedContainers = [];
14986
+ await removeForwarders(state.forwarders);
14987
+ state.forwarders = [];
14957
14988
  }
14958
14989
  if (state.network && !state.network.ownedByCaller) await destroyTaskNetwork(state.network);
14959
14990
  state.network = void 0;
@@ -14969,6 +15000,9 @@ async function cleanupEcsRun(state, options) {
14969
15000
  }
14970
15001
  state.dockerVolumeNames = [];
14971
15002
  }
15003
+ async function removeForwarders(forwarders) {
15004
+ for (const f of forwarders) await removeContainer(f.id || f.name);
15005
+ }
14972
15006
  function mergeHostGatewayAddHostFlags(addHostFlags, hostGatewayExtraHosts) {
14973
15007
  return [...addHostFlags ?? [], ...(hostGatewayExtraHosts ?? []).flatMap((h) => ["--add-host", `${h.host}:${h.ip}`])];
14974
15008
  }
@@ -15106,7 +15140,8 @@ async function runEcsTask(task, options, state) {
15106
15140
  dockerCmds.set(container.name, {
15107
15141
  args: built.args,
15108
15142
  sensitiveEnv: built.sensitiveEnv,
15109
- loopbackPorts: built.loopbackPorts
15143
+ loopbackPorts: built.loopbackPorts,
15144
+ ...built.forwarder ? { forwarder: built.forwarder } : {}
15110
15145
  });
15111
15146
  if (built.collisions.length > 0) logger.warn(describeRefusedSensitiveEnvKeys(`Container ${displayUntrustedValue(container.name)}`, built.collisions));
15112
15147
  for (const ep of built.publishedEndpoints) state.publishedEndpoints.push(ep);
@@ -15115,9 +15150,31 @@ async function runEcsTask(task, options, state) {
15115
15150
  for (const containerName of startOrder) {
15116
15151
  const container = task.containers.find((c) => c.name === containerName);
15117
15152
  await awaitDependencies(container, startedByName);
15118
- const { args, sensitiveEnv, loopbackPorts } = dockerCmds.get(container.name);
15119
- const forwarderWiring = getActiveWorkloadAwsWiring();
15120
- if (loopbackPorts.length > 0 && forwarderWiring) await prepareLoopbackForwarder(forwarderWiring);
15153
+ const cmd = dockerCmds.get(container.name);
15154
+ const { sensitiveEnv, loopbackPorts } = cmd;
15155
+ let args = cmd.args;
15156
+ const wiring = getActiveWorkloadAwsWiring();
15157
+ let joined;
15158
+ if (cmd.forwarder && wiring && loopbackPorts.length > 0) {
15159
+ const fwd = cmd.forwarder;
15160
+ const fwdId = await startNamespaceOwnerForwarder({
15161
+ name: fwd.name,
15162
+ namespace: fwd.namespace,
15163
+ ports: loopbackPorts,
15164
+ wiring,
15165
+ workloadLabel: `container ${displayIdent(container.name)}`
15166
+ });
15167
+ if (fwdId !== void 0) {
15168
+ joined = {
15169
+ containerName: container.name,
15170
+ name: fwd.name,
15171
+ id: fwdId,
15172
+ joined: false
15173
+ };
15174
+ state.forwarders.push(joined);
15175
+ args = fwd.args;
15176
+ }
15177
+ }
15121
15178
  logger.info(`Starting container ${displayIdent(container.name)} (image=${displayIdent(imagePlan.get(container.name))})`);
15122
15179
  let id;
15123
15180
  warnFinchArgvExposure(Object.keys(sensitiveEnv));
@@ -15135,12 +15192,12 @@ async function runEcsTask(task, options, state) {
15135
15192
  name: container.name,
15136
15193
  id
15137
15194
  });
15195
+ if (joined) joined.joined = true;
15196
+ else if (wiring) rememberForwardedPorts(id, wiring, loopbackPorts);
15138
15197
  startedByName.set(container.name, {
15139
15198
  id,
15140
15199
  container
15141
15200
  });
15142
- const wiring = getActiveWorkloadAwsWiring();
15143
- if (wiring) await attachLoopbackForwarder(id, wiring, loopbackPorts);
15144
15201
  if (!options.detach) state.logStoppers.push(attachContainerLogStreamer(`[${displayIdent(container.name)}] `, id));
15145
15202
  }
15146
15203
  if (options.detach) return {
@@ -15419,23 +15476,42 @@ async function resolvePrivilegedHostPortRemaps(opts) {
15419
15476
  function buildDockerRunArgs(opts) {
15420
15477
  const { task, container, image, network, volumeByName, secrets, containerHost, roleArn } = opts;
15421
15478
  const args = ["run", "-d"];
15479
+ const joinArgs = ["run", "-d"];
15480
+ const both = (...xs) => {
15481
+ args.push(...xs);
15482
+ joinArgs.push(...xs);
15483
+ };
15484
+ const ownerAliases = [];
15485
+ const ownerPublish = [];
15486
+ const ownerAddHosts = [];
15487
+ const ownerLinks = [];
15422
15488
  const publishedEndpoints = [];
15423
- args.push("--name", `${getEmbedConfig().resourceNamePrefix}-${task.family}-${container.name}-${randHex(3)}`);
15489
+ const dockerName = `${getEmbedConfig().resourceNamePrefix}-${task.family}-${container.name}-${randHex(3)}`;
15490
+ const forwarderName = `${dockerName}-awsfwd`;
15491
+ both("--name", dockerName);
15424
15492
  args.push("--network", network);
15425
- if (!opts.omitContainerNameAlias) args.push("--network-alias", container.name);
15493
+ joinArgs.push("--network", `container:${forwarderName}`);
15494
+ if (!opts.omitContainerNameAlias) {
15495
+ args.push("--network-alias", container.name);
15496
+ ownerAliases.push(container.name);
15497
+ }
15426
15498
  if (opts.networkAliases && opts.networkAliases.length > 0) {
15427
15499
  const seen = /* @__PURE__ */ new Set([container.name]);
15428
15500
  for (const a of opts.networkAliases) if (!seen.has(a)) {
15429
15501
  args.push("--network-alias", a);
15502
+ ownerAliases.push(a);
15430
15503
  seen.add(a);
15431
15504
  }
15432
15505
  }
15433
- if (opts.addHostFlags && opts.addHostFlags.length > 0) for (const f of opts.addHostFlags) args.push(f);
15506
+ if (opts.addHostFlags && opts.addHostFlags.length > 0) {
15507
+ for (const f of opts.addHostFlags) args.push(f);
15508
+ for (let i = 0; i + 1 < opts.addHostFlags.length; i++) if (opts.addHostFlags[i] === "--add-host") ownerAddHosts.push(opts.addHostFlags[++i]);
15509
+ }
15434
15510
  let resolvedPlatform;
15435
15511
  if (opts.platformOverride) resolvedPlatform = opts.platformOverride;
15436
15512
  else if (task.runtimePlatform) resolvedPlatform = task.runtimePlatform.cpuArchitecture === "ARM64" ? "linux/arm64" : "linux/amd64";
15437
15513
  if (resolvedPlatform) {
15438
- args.push("--platform", resolvedPlatform);
15514
+ both("--platform", resolvedPlatform);
15439
15515
  warnIfEmulatedPlatform(resolvedPlatform, { label: `${task.family}/${container.name}` });
15440
15516
  }
15441
15517
  const ephemeralPorts = new Set(opts.ephemeralPublishContainerPorts ?? []);
@@ -15446,7 +15522,9 @@ function buildDockerRunArgs(opts) {
15446
15522
  const overridden = hostPort !== declaredHostPort;
15447
15523
  const overrideNote = opts.autoRemappedContainerPorts?.has(pm.containerPort) ?? false ? " (privileged-port auto-remap)" : overridden ? " (--host-port override)" : "";
15448
15524
  getLogger().child("ecs").info(`Container ${displayIdent(container.name)} container port ${pm.containerPort} published on ${formatAuthority(containerHost, hostPort)}${overrideNote}. Reach it at ${formatAuthority(containerHost, hostPort)}.`);
15449
- args.push("-p", `${containerHost}:${hostPort}:${pm.containerPort}/${pm.protocol}`);
15525
+ const publish = `${containerHost}:${hostPort}:${pm.containerPort}/${pm.protocol}`;
15526
+ args.push("-p", publish);
15527
+ ownerPublish.push(publish);
15450
15528
  publishedEndpoints.push({
15451
15529
  containerName: container.name,
15452
15530
  containerPort: pm.containerPort,
@@ -15461,24 +15539,26 @@ function buildDockerRunArgs(opts) {
15461
15539
  for (const pm of container.portMappings) {
15462
15540
  if (!ephemeralPorts.has(pm.containerPort) || alreadyEphemeral.has(pm.containerPort)) continue;
15463
15541
  alreadyEphemeral.add(pm.containerPort);
15464
- args.push("-p", `${containerHost}::${pm.containerPort}/${pm.protocol}`);
15542
+ const publish = `${containerHost}::${pm.containerPort}/${pm.protocol}`;
15543
+ args.push("-p", publish);
15544
+ ownerPublish.push(publish);
15465
15545
  }
15466
15546
  }
15467
15547
  const wiring = getActiveWorkloadAwsWiring();
15468
15548
  const profileCredentialsFile = wiring?.mode === "emulator" ? void 0 : opts.profileCredentialsFile;
15469
- if (profileCredentialsFile) args.push("-v", `${profileCredentialsFile.hostPath}:${profileCredentialsFile.containerPath}:ro`);
15470
- for (const m of wiring?.mounts ?? []) if (!container.mountPoints.some((mp) => mp.containerPath === m.containerPath)) args.push("-v", `${m.hostPath}:${m.containerPath}:ro`);
15549
+ if (profileCredentialsFile) both("-v", `${profileCredentialsFile.hostPath}:${profileCredentialsFile.containerPath}:ro`);
15550
+ for (const m of wiring?.mounts ?? []) if (!container.mountPoints.some((mp) => mp.containerPath === m.containerPath)) both("-v", `${m.hostPath}:${m.containerPath}:ro`);
15471
15551
  for (const mp of container.mountPoints) {
15472
15552
  const v = volumeByName.get(mp.sourceVolume);
15473
15553
  if (!v) continue;
15474
15554
  if (v.kind === "host") if (v.hostPath) {
15475
15555
  const ro = mp.readOnly ? ":ro" : "";
15476
- args.push("-v", `${v.hostPath}:${mp.containerPath}${ro}`);
15477
- } else args.push("-v", mp.containerPath);
15556
+ both("-v", `${v.hostPath}:${mp.containerPath}${ro}`);
15557
+ } else both("-v", mp.containerPath);
15478
15558
  else {
15479
15559
  const name = v.dockerVolumeName ?? v.name;
15480
15560
  const ro = mp.readOnly ? ":ro" : "";
15481
- args.push("-v", `${name}:${mp.containerPath}${ro}`);
15561
+ both("-v", `${name}:${mp.containerPath}${ro}`);
15482
15562
  }
15483
15563
  }
15484
15564
  let finalEnv = {};
@@ -15510,32 +15590,49 @@ function buildDockerRunArgs(opts) {
15510
15590
  for (const s of container.secrets) sensitiveEnvKeys.add(s.name);
15511
15591
  for (const n of container.droppedSecretNames ?? []) sensitiveEnvKeys.add(n);
15512
15592
  for (const k of container.sensitiveEnvKeys) sensitiveEnvKeys.add(k);
15513
- const { passthrough: sensitiveEnv, collisions } = appendEnvFlags(args, finalEnv, sensitiveEnvKeys);
15514
- if (container.user) args.push("--user", container.user);
15515
- if (container.privileged) args.push("--privileged");
15516
- if (container.readonlyRootFilesystem) args.push("--read-only");
15517
- if (container.workingDirectory) args.push("--workdir", container.workingDirectory);
15518
- for (const u of container.ulimits) args.push("--ulimit", `${u.name}=${u.softLimit}:${u.hardLimit}`);
15519
- for (const link of container.links) args.push("--link", link);
15593
+ const envFlags = [];
15594
+ const { passthrough: sensitiveEnv, collisions } = appendEnvFlags(envFlags, finalEnv, sensitiveEnvKeys);
15595
+ both(...envFlags);
15596
+ if (container.user) both("--user", container.user);
15597
+ if (container.privileged) both("--privileged");
15598
+ if (container.readonlyRootFilesystem) both("--read-only");
15599
+ if (container.workingDirectory) both("--workdir", container.workingDirectory);
15600
+ for (const u of container.ulimits) both("--ulimit", `${u.name}=${u.softLimit}:${u.hardLimit}`);
15601
+ for (const link of container.links) {
15602
+ args.push("--link", link);
15603
+ ownerLinks.push(link);
15604
+ }
15520
15605
  if (container.healthCheck) {
15521
- args.push("--health-cmd", shellJoin(container.healthCheck.command));
15522
- if (container.healthCheck.interval !== void 0) args.push("--health-interval", `${container.healthCheck.interval}s`);
15523
- if (container.healthCheck.timeout !== void 0) args.push("--health-timeout", `${container.healthCheck.timeout}s`);
15524
- if (container.healthCheck.retries !== void 0) args.push("--health-retries", String(container.healthCheck.retries));
15525
- if (container.healthCheck.startPeriod !== void 0) args.push("--health-start-period", `${container.healthCheck.startPeriod}s`);
15606
+ both("--health-cmd", shellJoin(container.healthCheck.command));
15607
+ if (container.healthCheck.interval !== void 0) both("--health-interval", `${container.healthCheck.interval}s`);
15608
+ if (container.healthCheck.timeout !== void 0) both("--health-timeout", `${container.healthCheck.timeout}s`);
15609
+ if (container.healthCheck.retries !== void 0) both("--health-retries", String(container.healthCheck.retries));
15610
+ if (container.healthCheck.startPeriod !== void 0) both("--health-start-period", `${container.healthCheck.startPeriod}s`);
15526
15611
  }
15527
15612
  let entryPointTail = [];
15528
15613
  if (container.entryPoint && container.entryPoint.length > 0) {
15529
- args.push("--entrypoint", container.entryPoint[0]);
15614
+ both("--entrypoint", container.entryPoint[0]);
15530
15615
  entryPointTail = container.entryPoint.slice(1);
15531
15616
  }
15532
- args.push(image, ...entryPointTail, ...container.command ?? []);
15617
+ both(image, ...entryPointTail, ...container.command ?? []);
15618
+ const loopbackPorts = wiring ? effectiveLoopbackPorts(finalEnv, wiring) : [];
15533
15619
  return {
15534
15620
  args,
15535
15621
  sensitiveEnv,
15536
15622
  collisions,
15537
15623
  publishedEndpoints,
15538
- loopbackPorts: wiring ? effectiveLoopbackPorts(finalEnv, wiring) : []
15624
+ loopbackPorts,
15625
+ ...loopbackPorts.length > 0 && { forwarder: {
15626
+ name: forwarderName,
15627
+ namespace: {
15628
+ network,
15629
+ networkAliases: ownerAliases,
15630
+ publish: ownerPublish,
15631
+ addHosts: ownerAddHosts,
15632
+ links: ownerLinks
15633
+ },
15634
+ args: joinArgs
15635
+ } }
15539
15636
  };
15540
15637
  }
15541
15638
  function shellJoin(parts) {
@@ -15978,6 +16075,12 @@ function containerPublishesHostPorts(container, opts) {
15978
16075
  if (!opts.skipHostPortPublish) return true;
15979
16076
  return container.portMappings.some((pm) => opts.ephemeralPublishContainerPorts.includes(pm.containerPort));
15980
16077
  }
16078
+ function networkEndpointId(state, containerName, containerId) {
16079
+ return (state.forwarders ?? []).find((f) => f.containerName === containerName && f.joined)?.id ?? containerId;
16080
+ }
16081
+ function joinsForwarder(state, containerName) {
16082
+ return (state.forwarders ?? []).some((f) => f.containerName === containerName && f.joined);
16083
+ }
15981
16084
  async function publishGatedReplica(service, options, instance, deadline, isShuttingDown, label = `Shadow replica r${instance.index} (gen ${instance.generation})`) {
15982
16085
  const network = instance.state.network;
15983
16086
  const withheld = instance.withheldAliasContainers ?? [];
@@ -15996,12 +16099,13 @@ async function publishGatedReplica(service, options, instance, deadline, isShutt
15996
16099
  }
15997
16100
  }
15998
16101
  if (isShuttingDown()) return;
15999
- const ip = await getContainerNetworkIp(started.id, network.networkName);
16102
+ const endpoint = networkEndpointId(instance.state, name, started.id);
16103
+ const ip = await getContainerNetworkIp(endpoint, network.networkName);
16000
16104
  if (!ip) throw new EcsServiceRunnerError(`${label}: no docker IP for ${displayIdent(name)} on ${network.networkName}; cannot attach its Service Connect aliases.`);
16001
16105
  const aliases = [name];
16002
16106
  for (const a of fullAliases.get(name) ?? []) if (!aliases.includes(a)) aliases.push(a);
16003
- await dockerNetworkDisconnectImpl(network.networkName, started.id);
16004
- await dockerNetworkConnectImpl(network.networkName, started.id, {
16107
+ await dockerNetworkDisconnectImpl(network.networkName, endpoint);
16108
+ await dockerNetworkConnectImpl(network.networkName, endpoint, {
16005
16109
  ip,
16006
16110
  aliases
16007
16111
  });
@@ -16034,7 +16138,7 @@ async function publishReplicaToCloudMap(service, instance, discovery, ownerKeyPr
16034
16138
  if (!started) return;
16035
16139
  let ip;
16036
16140
  try {
16037
- ip = await getContainerNetworkIp(started.id, networkName);
16141
+ ip = await getContainerNetworkIp(networkEndpointId(instance.state, started.name, started.id), networkName);
16038
16142
  } catch (err) {
16039
16143
  logger.warn(`Replica ${instance.index}: docker inspect failed before Cloud Map publish: ${err instanceof Error ? err.message : String(err)}`);
16040
16144
  return;
@@ -16101,7 +16205,7 @@ async function publishReplicaToFrontDoor(service, instance, frontDoor, container
16101
16205
  }
16102
16206
  let hostPort;
16103
16207
  try {
16104
- hostPort = await getPublishedHostPort(started.id, target.targetContainerPort);
16208
+ hostPort = await getPublishedHostPort(networkEndpointId(instance.state, started.name, started.id), target.targetContainerPort);
16105
16209
  } catch (err) {
16106
16210
  logger.warn(`Replica ${instance.index}: docker inspect failed before front-door publish: ${err instanceof Error ? err.message : String(err)}`);
16107
16211
  continue;
@@ -16244,6 +16348,8 @@ async function softReloadReplica(args) {
16244
16348
  targets.push({
16245
16349
  name: container.name,
16246
16350
  id,
16351
+ endpoint: networkEndpointId(instance.state, container.name, id),
16352
+ joined: joinsForwarder(instance.state, container.name),
16247
16353
  aliases,
16248
16354
  ...port !== void 0 ? { port } : {}
16249
16355
  });
@@ -16288,12 +16394,12 @@ async function softReloadReplica(args) {
16288
16394
  const plan = attachPlans.get(target.id);
16289
16395
  if (plan && (plan.publishesHostPorts || !plan.attached)) {
16290
16396
  if (plan.attached) {
16291
- await dockerNetworkDisconnectImpl(plan.networkName, target.id);
16397
+ await dockerNetworkDisconnectImpl(plan.networkName, plan.endpointId);
16292
16398
  plan.attached = false;
16293
16399
  }
16294
- await attachToSharedNetwork(target.id, plan, plan.publishesHostPorts);
16400
+ await attachToSharedNetwork(plan, plan.publishesHostPorts);
16295
16401
  }
16296
- await dockerStartImpl(target.id);
16402
+ await dockerStartImpl(target.id, { joinedForwarder: target.joined });
16297
16403
  } catch (err) {
16298
16404
  throw new EcsServiceRunnerError(`softReloadReplica: docker stop / start of ${displayIdent(target.name)} (${target.id}) failed: ${err instanceof Error ? err.message : String(err)}. This replica is unregistered from Cloud Map + the front-door pool until the next save triggers another reload.`);
16299
16405
  }
@@ -16308,9 +16414,9 @@ async function softReloadReplica(args) {
16308
16414
  if (!plan || plan.aliasesAttached) continue;
16309
16415
  if (target.port !== void 0) await waitForContainerListening(target.id, target.port, aliasDeadline);
16310
16416
  try {
16311
- await dockerNetworkDisconnectImpl(plan.networkName, target.id);
16417
+ await dockerNetworkDisconnectImpl(plan.networkName, plan.endpointId);
16312
16418
  plan.attached = false;
16313
- await attachToSharedNetwork(target.id, plan, true);
16419
+ await attachToSharedNetwork(plan, true);
16314
16420
  } catch (err) {
16315
16421
  throw new EcsServiceRunnerError(`softReloadReplica: restoring the network aliases of ${displayIdent(target.name)} (${target.id}) failed: ${err instanceof Error ? err.message : String(err)}. This replica is unregistered from Cloud Map + the front-door pool until the next save triggers another reload.`);
16316
16422
  }
@@ -16321,7 +16427,8 @@ async function softReloadReplica(args) {
16321
16427
  instance.lastDeployedAssetHash = pickEssentialAssetHash(newService);
16322
16428
  logger.info(`Soft-reloaded replica r${instance.index} (gen ${instance.generation}): ` + (ready ? SOFT_RELOAD_COMPLETION_LOG_SUFFIX : SOFT_RELOAD_PROBE_TIMEOUT_LOG_SUFFIX));
16323
16429
  } catch (err) {
16324
- for (const [id, plan] of attachPlans) {
16430
+ for (const plan of attachPlans.values()) {
16431
+ const id = plan.endpointId;
16325
16432
  if (plan.aliasesAttached) continue;
16326
16433
  try {
16327
16434
  if (plan.attached) {
@@ -16329,7 +16436,7 @@ async function softReloadReplica(args) {
16329
16436
  plan.attached = false;
16330
16437
  }
16331
16438
  try {
16332
- await attachToSharedNetwork(id, plan, true);
16439
+ await attachToSharedNetwork(plan, true);
16333
16440
  } catch {
16334
16441
  await dockerNetworkConnectImpl(plan.networkName, id, { aliases: plan.aliases });
16335
16442
  plan.attached = true;
@@ -16374,15 +16481,16 @@ const defaultDockerStopImpl = async (containerId) => {
16374
16481
  const { getDockerCmd } = await import("./docker-cmd-Cjg3jGYF.js").then((n) => n.t);
16375
16482
  await promisify(execFile)(getDockerCmd(), ["stop", containerId]);
16376
16483
  };
16377
- const defaultDockerStartImpl = async (containerId) => {
16484
+ const defaultDockerStartImpl = async (containerId, opts = {}) => {
16378
16485
  const { execFile } = await import("node:child_process");
16379
16486
  const { promisify } = await import("node:util");
16380
16487
  const { getDockerCmd } = await import("./docker-cmd-Cjg3jGYF.js").then((n) => n.t);
16381
16488
  await promisify(execFile)(getDockerCmd(), ["start", containerId]);
16382
- const { getActiveWorkloadAwsWiring } = await import("./workload-identity-ITM3p2Ed.js").then((n) => n.L);
16489
+ if (opts.joinedForwarder) return;
16490
+ const { getActiveWorkloadAwsWiring } = await import("./workload-identity-D5zkhVcF.js").then((n) => n.R);
16383
16491
  const wiring = getActiveWorkloadAwsWiring();
16384
16492
  if (wiring) {
16385
- const { attachLoopbackForwarder } = await import("./docker-runner-BkrDB60P.js").then((n) => n.o);
16493
+ const { attachLoopbackForwarder } = await import("./docker-runner-DzPTb4Ai.js").then((n) => n.o);
16386
16494
  await attachLoopbackForwarder(containerId, wiring);
16387
16495
  }
16388
16496
  };
@@ -16392,7 +16500,7 @@ async function detachFromSharedNetwork(target, networkName) {
16392
16500
  const logger = getLogger().child("ecs-service");
16393
16501
  let ip;
16394
16502
  try {
16395
- ip = await getContainerNetworkIp(target.id, networkName);
16503
+ ip = await getContainerNetworkIp(target.endpoint, networkName);
16396
16504
  } catch {
16397
16505
  ip = void 0;
16398
16506
  }
@@ -16402,17 +16510,22 @@ async function detachFromSharedNetwork(target, networkName) {
16402
16510
  }
16403
16511
  let publishesHostPorts;
16404
16512
  try {
16405
- publishesHostPorts = await dockerInspectPublishesHostPortsImpl(target.id);
16513
+ publishesHostPorts = await dockerInspectPublishesHostPortsImpl(target.endpoint);
16406
16514
  } catch {
16407
16515
  publishesHostPorts = true;
16408
16516
  }
16517
+ if (target.joined && publishesHostPorts) {
16518
+ logger.debug(`Soft-reload: ${displayIdent(target.name)} (${target.id}) publishes host ports through its loopback forwarder; restarting it in place without detaching its network aliases first.`);
16519
+ return;
16520
+ }
16409
16521
  try {
16410
- await dockerNetworkDisconnectImpl(networkName, target.id);
16522
+ await dockerNetworkDisconnectImpl(networkName, target.endpoint);
16411
16523
  } catch (err) {
16412
16524
  logger.debug(`Soft-reload: detaching ${displayIdent(target.name)} (${target.id}) from ${networkName} failed: ${err instanceof Error ? err.message : String(err)}. Restarting it in place.`);
16413
16525
  return;
16414
16526
  }
16415
16527
  return {
16528
+ endpointId: target.endpoint,
16416
16529
  networkName,
16417
16530
  ip,
16418
16531
  aliases: target.aliases,
@@ -16425,16 +16538,19 @@ const DEFAULT_RELOAD_DRAIN_MS = 1e3;
16425
16538
  let reloadDrainMs = DEFAULT_RELOAD_DRAIN_MS;
16426
16539
  async function reattachForDrain(plans) {
16427
16540
  let any = false;
16428
- for (const [id, plan] of plans) try {
16429
- await attachToSharedNetwork(id, plan, false);
16430
- any = true;
16431
- } catch (err) {
16432
- getLogger().child("ecs-service").debug(`Soft-reload: drain re-attach of ${id} to ${plan.networkName} failed: ${err instanceof Error ? err.message : String(err)}. Stopping it without a drain.`);
16541
+ for (const plan of plans.values()) {
16542
+ const id = plan.endpointId;
16543
+ try {
16544
+ await attachToSharedNetwork(plan, false);
16545
+ any = true;
16546
+ } catch (err) {
16547
+ getLogger().child("ecs-service").debug(`Soft-reload: drain re-attach of ${id} to ${plan.networkName} failed: ${err instanceof Error ? err.message : String(err)}. Stopping it without a drain.`);
16548
+ }
16433
16549
  }
16434
16550
  return any;
16435
16551
  }
16436
- async function attachToSharedNetwork(containerId, plan, withAliases) {
16437
- await dockerNetworkConnectImpl(plan.networkName, containerId, {
16552
+ async function attachToSharedNetwork(plan, withAliases) {
16553
+ await dockerNetworkConnectImpl(plan.networkName, plan.endpointId, {
16438
16554
  ip: plan.ip,
16439
16555
  aliases: withAliases ? plan.aliases : []
16440
16556
  });
@@ -16471,12 +16587,12 @@ async function disconnectOldFromSharedNetwork(oldInstance, opts = {}) {
16471
16587
  const network = oldInstance.state.network;
16472
16588
  if (!network || !network.ownedByCaller) return;
16473
16589
  const networkName = network.networkName;
16590
+ const targets = [...new Set(oldInstance.state.startedContainers.map((c) => networkEndpointId(oldInstance.state, c.name, c.id)))];
16474
16591
  const drainIps = /* @__PURE__ */ new Map();
16475
- if (opts.drain) for (const c of oldInstance.state.startedContainers) {
16476
- const ip = await getContainerNetworkIp(c.id, networkName).catch(() => void 0);
16477
- if (ip) drainIps.set(c.id, ip);
16592
+ if (opts.drain) for (const id of targets) {
16593
+ const ip = await getContainerNetworkIp(id, networkName).catch(() => void 0);
16594
+ if (ip) drainIps.set(id, ip);
16478
16595
  }
16479
- const targets = oldInstance.state.startedContainers.map((c) => c.id);
16480
16596
  for (const id of targets) try {
16481
16597
  await dockerNetworkDisconnectImpl(networkName, id);
16482
16598
  } catch (err) {}
@@ -16541,7 +16657,7 @@ async function waitForReplicaTcpReady(service, replica, opts) {
16541
16657
  } else {
16542
16658
  if (ip === void 0) {
16543
16659
  try {
16544
- ip = await getContainerNetworkIp(started.id, networkName);
16660
+ ip = await getContainerNetworkIp(networkEndpointId(replica.state, started.name, started.id), networkName);
16545
16661
  } catch (err) {
16546
16662
  logger.warn(`${label}: TCP-ready probe could not resolve docker IP: ${err instanceof Error ? err.message : String(err)}. Proceeding.`);
16547
16663
  return "not-ready";
@@ -20110,6 +20226,12 @@ async function localRunTaskCommand(target, options, extraStateProviders) {
20110
20226
  if (options.detach) {
20111
20227
  logger.info(`Task containers started in detached mode; ${getEmbedConfig().binaryName} is exiting.`);
20112
20228
  logger.info(`Use 'docker ps --filter network=${result.state.network?.networkName ?? "<network>"}' to inspect; tear down with 'docker rm -f' and 'docker network rm'.`);
20229
+ const joinedForwarders = result.state.forwarders.filter((f) => f.joined);
20230
+ if (joinedForwarders.length > 0) {
20231
+ const joinedNames = new Set(joinedForwarders.map((f) => f.containerName));
20232
+ const containers = result.state.startedContainers.filter((c) => joinedNames.has(c.name)).map((c) => c.id.slice(0, 12)).join(", ");
20233
+ logger.info(`Under the loopback AWS endpoint, task containers share the network of a forwarder container, so that filter does not list them. Task container ids: ${containers}. Remove them before the forwarders (${joinedForwarders.map((f) => f.name).join(", ")}).`);
20234
+ }
20113
20235
  sigintCount = 99;
20114
20236
  return;
20115
20237
  }
@@ -24131,7 +24253,7 @@ async function resolveDeployedS3Origins(distribution, stacks, options, profileCr
24131
24253
  buckets
24132
24254
  };
24133
24255
  const synthRegion = stacks.find((s) => s.stackName === distribution.stackName)?.region;
24134
- const provider = createLocalStateProvider(options, distribution.stackName, synthRegion, extraStateProviders);
24256
+ const provider = createLocalStateProvider(options, distribution.stackName, synthRegion, extraStateProviders, { realAwsOnly: true });
24135
24257
  let record;
24136
24258
  try {
24137
24259
  record = provider ? await provider.load(distribution.stackName, synthRegion) : void 0;
@@ -31651,4 +31773,4 @@ function addStudioSpecificOptions(cmd) {
31651
31773
 
31652
31774
  //#endregion
31653
31775
  export { postHook as $, addAwsEndpointOptions as $a, parseConnectionsPath as $i, addImageOverrideOptions as $n, addStartApiSpecificOptions as $r, classifyS3Error as $t, microvmFidelityWarnings as A, parseSelectionExpressionPath as Aa, applyCorsResponseHeaders as Ai, stripCloudFrontImport as An, A2A_CONTAINER_PORT as Ar, readContainerLogTail as At, MICROVM_WS_BASE_PROTOCOL as B, AgentCoreResolutionError as Ba, evaluateResponseParameters as Bi, createLocalStartAlbCommand as Bn, AGENTCORE_SESSION_ID_HEADER as Br, parseWebFunctionBuildConfig as Bt, addListSpecificOptions as C, resolveSingleTarget as Ca, verifyJwtViaDiscovery as Ci, WEB_FUNCTION_REVISION_TYPE as Cn, setShadowReadyTimeoutMs as Cr, parseKvsFileOverrides as Ct, buildMicrovmLambdaView as D, discoverWebSocketApis as Da, invokeRequestAuthorizer as Di, compileCloudFrontFunction as Dn, createLocalInvokeAgentCoreCommand as Dr, WEB_FUNCTION_CONTAINER_PORT as Dt, addStartMicrovmSpecificOptions as E, availableWebSocketApiIdentifiers as Ea, evaluateCachedLambdaPolicy as Ei, resolveWebFunctionTarget as En, addInvokeAgentCoreSpecificOptions as Er, RecentOutput as Et, microvmImageTag as F, AGENTCORE_A2A_PROTOCOL as Fa, matchRoute as Fi, findFileAssetForObjectKey as Fn, MCP_PROTOCOL_VERSION as Fr, buildNodeEntryFileStart as Ft, startMicrovmFrontDoor as G, containsDynamicReference as Ga, HOST_DOCKER_INTERNAL_GATEWAY as Gi, addStartServiceSpecificOptions as Gn, SUPPORTED_CODE_RUNTIMES as Gr, readWebFunctionServiceConfig as Gt, PROXY_PORT_HEADER as H, resolveAgentCoreTarget as Ha, selectIntegrationResponse as Hi, resolveAlbTarget as Hn, waitForAgentCoreHttpReady as Hr, WEB_FUNCTION_HTTP_ENDPOINT_ENV as Ht, planMicrovmPorts as I, AGENTCORE_AGUI_PROTOCOL as Ia, translateLambdaResponse as Ii, isBucketDeploymentResource as In, mcpInvokeOnce as Ir, defaultWebFunctionPlatform as It, MICROVM_HOOK_PATH_PREFIX as J, keysNotFromTemplate as Ja, resolveHostGatewayExtraHosts as Ji, addRunTaskSpecificOptions as Jn, renderCodeDockerfile as Jr, idFromArn as Jt, stripMicrovmProxyHeaders as K, deployedFillMayBeSecret as Ka, HOST_GATEWAY_MIN_VERSION as Ki, createLocalStartServiceCommand as Kn, buildAgentCoreCodeImage as Kr, webFunctionAssumeRole as Kt, readExposedPorts as L, AGENTCORE_HTTP_PROTOCOL as La, applyAuthorizerOverlay as Li, resolveBucketDeploymentObjectKey as Ln, parseSseForJsonRpc as Lr, resolveWebFunctionRuntime as Lt, DEFAULT_TERMINATE_HOOK_TIMEOUT_MS as M, discoverRoutes as Ma, buildCorsConfigFromCloudFrontChain as Mi, createLocalFileKvsDataSource as Mn, a2aInvokeOnce as Mr, waitForWebFunctionReady as Mt, LocalMicrovm as N, pickRefLogicalId as Na, isFunctionUrlOacFronted as Ni, createUnboundCloudFrontModule as Nn, MCP_CONTAINER_PORT as Nr, watchContainerExit as Nt, createLocalStartMicrovmCommand as O, discoverWebSocketApisOrThrow as Oa, invokeTokenAuthorizer as Oi, runViewerRequest as On, bridgeAgentCoreWs as Or, containerFailure as Ot, buildMicrovmImage as P, resolveLambdaArnIntrinsic as Pa, matchPreflight as Pi, bucketDeploymentSourceObjectKeys as Pn, MCP_PATH as Pr, WEB_FUNCTION_RUNTIMES as Pt, pollBuildHook as Q, withoutKeys as Qa, handleConnectionsRequest as Qi, addEcsAssumeRoleOptions as Qn, createLocalInvokeCommand as Qr, resolveDeployedOriginBucket as Qt, setContainerPaused as R, AGENTCORE_MCP_PROTOCOL as Ra, buildHttpApiV2Event as Ri, addAlbSpecificOptions as Rn, AGENTCORE_SIGV4_SERVICE as Rr, supportedWebFunctionRuntimes as Rt, StudioEventBus as S, resolveWatchConfig as Sa, verifyJwtAuthorizer as Si, WEB_FUNCTION_ENDPOINT_TYPE as Sn, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as Sr, normalizeKvsFileKeys as St, formatTargetListing as T, listTargets as Ta, computeRequestIdentityHash as Ti, WebFunctionResolutionError as Tn, attachContainerLogStreamer as Tr, resolveCloudFrontTarget as Tt, rewriteUpgradeResponseHead as U, DynamicReferenceResolutionError as Ua, tryParseStatus as Ui, isApplicationLoadBalancer as Un, waitForAgentCorePing as Ur, buildWebFunctionLambdaView as Ut, MicrovmStateError as V, pickAgentCoreCandidateStack as Va, pickResponseTemplate as Vi, parseLbPortOverrides as Vn, invokeAgentCore as Vr, resolveWebFunctionArtifact as Vt, selectTargetPort as W, DynamicReferenceResolver as Wa, VtlEvaluationError as Wi, resolveAlbFrontDoor as Wn, downloadAndExtractS3Bundle as Wr, finalizeWebFunctionEnv as Wt, callRuntimeHook as X, parseDynamicReference as Xa, ConnectionRegistry as Xi, MAX_TASKS_SUBNET_RANGE_CAP as Xn, classifySourceChange as Xr, createDeployedKvsDataSource as Xt, MicrovmHookError as Y, keysOverriddenBy as Ya, bufferToBody as Yi, createLocalRunTaskCommand as Yn, toCmdArgv as Yr, resolveKvsModulesForDistribution as Yt, generateMicrovmId as Z, resolveDynamicReferencesInEnv as Za, buildMgmtEndpointEnvUrl as Zi, addCommonEcsServiceOptions as Zn, addInvokeSpecificOptions as Zr, resolveDeployedKvsArnByName as Zt, filterStudioTargetGroups as _, resolveCfnRegion as _a, defaultCredentialsLoader as _i, pickKvsLogicalIdFromArn as _n, isLocalCdkAssetImage as _r, attachAgentCoreWsBridge as _t, createLocalStudioCommand as a, resolveRuntimeImage as aa, attachStageContext as ai, serveLambdaUrlOrigin as an, resolveSharedSidecarCredentials as ar, disposeMicrovmCodeArtifact as at, renderStudioHtml as b, collectSsmParameterRefs as ba, createJwksCache as bi, pickWebFunctionEndpointLogicalIdFromOrigin as bn, CloudMapRegistry as br, addStartCloudFrontSpecificOptions as bt, startStudioProxy as c, substituteAgainstState as ca, resolveEnvVars$1 as ci, buildEdgeRequestEvent as cn, buildImageOverrideTag as cr, resolveMicrovmImageTarget as ct, createStudioDispatcher as d, substituteEnvVarsFromStateAsync as da, filterRoutesByApiIdentifiers as di, httpHeadersToEdge as dn, mergeForService as dr, createLocalStartWebFunctionCommand as dt, buildConnectEvent as ea, createLocalStartApiCommand as ei, createS3OriginReader as en, awsEndpointOptions as eo, buildEcsImageResolutionContext$1 as er, runHookBody as et, filterStudioCustomResources as f, LocalStateSourceError as fa, groupRoutesByServer as fi, CLOUDFRONT_DISTRIBUTION_TYPE as fn, parseImageOverrideFlags as fr, addStartAgentCoreSpecificOptions as ft, annotatePinnedEcsTargets as g, resolveCfnFallbackRegion as ga, resolveServiceIntegrationParameters as gi, pickFunctionUrlLogicalIdFromOrigin as gn, imageOverrideKeyAliases as gr, startAgentCoreHttpServer as gt, annotateEcsTaskPinnedTargets as h, rejectExplicitCfnStackWithMultipleStacks as ha, resolveSelectionExpression as hi, isCloudFrontDistribution as hn, describePinnedImageUri as hr, selectServeInboundAuth as ht, coerceStopRequest as i, resolveRuntimeFileExtension as ia, createFileWatcher as ii, serveFromStaticOrigin as in, resolveEcsAssumeRoleOption as ir, MicrovmResolutionError as it, readRunHookPayload as j, webSocketApiMatchesIdentifier as ja, buildCorsConfigByApiId as ji, createCloudFrontModule as jn, A2A_PATH as jr, startWebFunctionContainer as jt, finalizeMicrovmEnv as k, filterWebSocketApisByIdentifiers as ka, attachAuthorizers as ki, runViewerResponse as kn, invokeAgentCoreWs as kr, planWebFunctionContainer as kt, relayServeRequest as l, substituteAgainstStateAsync as la, availableApiIdentifiers as li, buildEdgeResponseEvent as ln, canonicalizeImageOverrideKeys as lr, s3KeyOfUri as lt, annotateAlbPinnedBackingServices as m, isCfnFlagPresent as ma, startApiServer as mi, extractKvsAssociations as mn, runImageOverrideBuilds as mr, buildAgentCoreServeAuthCheck as mt, coerceRunRequest as n, buildMessageEvent as na, resolveApiTargetSubset as ni, startCloudFrontServer as nn, parseMaxTasks as nr, MICROVM_DEFAULT_INGRESS_PORT as nt, resolveServeBaseUrl as o, EcsTaskResolutionError as oa, buildStageMap as oi, applyEdgeRequestResult as on, runEcsServiceEmulator as or, readMicrovmImageConfig as ot, isCustomResourceLambdaTarget as p, createLocalStateProvider as pa, readMtlsMaterialsFromDisk as pi, describeS3OriginDomain as pn, resolveImageOverrides as pr, createLocalStartAgentCoreCommand as pt, MAX_RUN_HOOK_PAYLOAD_BYTES as q, firstUsableRegion as qa, probeHostGatewaySupport as qi, serviceStrategy as qn, computeCodeImageTag as qr, webFunctionFidelityWarnings as qt, coerceServeRequest as r, resolveRuntimeCodeMountPath as ra, createAuthorizerCache as ri, resolveErrorResponseCandidates as rn, parseRestartPolicy as rr, MICROVM_IMAGE_TYPE as rt, createStudioServeManager as s, assertEcsTaskImagesResolvable as sa, materializeLayerFromArn as si, applyEdgeResponseResult as sn, ImageOverrideError as sr, resolveMicrovmCodeArtifact as st, addStudioSpecificOptions as t, buildDisconnectEvent as ta, createWatchPredicates as ti, matchBehavior as tn, ecsClusterOption as tr, waitForAppAnswer as tt, reinvoke as u, substituteEnvVarsFromState as ua, filterRoutesByApiIdentifier as ui, edgeHeadersToHttp as un, enforceImageOverrideOrphans as ur, addStartWebFunctionSpecificOptions as ut, startStudioServer as v, resolveCfnStackName as va, buildCognitoJwksUrl as vi, pickLambdaEdgeFunctionLogicalId as vn, listPinnedTargets as vr, startAgentCoreWsBridge as vt, createLocalListCommand as w, countTargets as wa, buildMethodArn as wi, WEB_FUNCTION_TYPE as wn, getContainerNetworkIp as wr, parseOriginOverrides as wt, createStudioStore as x, resolveSsmParameters as xa, verifyCognitoJwt as xi, resolveCloudFrontDistribution as xn, DEFAULT_SHADOW_READY_TIMEOUT_MS as xr, createLocalStartCloudFrontCommand as xt, toStudioTargetGroups as y, CfnLocalStateProvider as ya, buildJwksUrlFromIssuer as yi, pickTargetFunctionLogicalId as yn, buildCloudMapIndex as yr, LocalStartCloudFrontError as yt, MICROVM_CONTROL_PATH as z, AGENTCORE_RUNTIME_TYPE as za, buildRestV1Event as zi, albStrategy as zn, signAgentCoreInvocation as zr, disposeWebFunctionArtifact as zt };
31654
- //# sourceMappingURL=local-studio-CRKQ1Uhu.js.map
31776
+ //# sourceMappingURL=local-studio-aUkwJL4M.js.map