cdk-local 0.103.8 → 0.103.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -80,7 +80,7 @@ cdkl invoke MyStack/Fn --from-cfn-stack --assume-role # ...and run as its depl
80
80
  ```
81
81
 
82
82
  - **`start-api`** serves one HTTP server per API; a bare `start-api` in a multi-stack app needs `--all-stacks` or `--stack <name>`.
83
- - **`run-task`** / single-replica **`start-service`** publish declared container ports on the host (`--host-port <container>=<host>` remaps; handy for privileged ports on macOS). **`start-service`** / **`start-alb`** also list each host URL in a `Service endpoints:` banner after boot so the access URL stays visible.
83
+ - **`run-task`** / single-replica **`start-service`** publish declared container ports on the host (a privileged port like 80 auto-remaps to a free high host port with a WARN; `--host-port <container>=<host>` pins a specific one). **`start-service`** / **`start-alb`** also list each host URL in a `Service endpoints:` banner after boot so the access URL stays visible.
84
84
  - **`start-alb`** stands up the ECS service(s) behind an ALB plus a host-side front-door on each listener port, honoring all six listener-rule conditions, weighted forwards, redirect / fixed-response actions, mixed ECS + Lambda targets, `authenticate-cognito` / `authenticate-oidc` actions (local Bearer-JWT enforcement), and WebSocket `Upgrade` proxying to ECS targets ([details](docs/cli-reference.md#cdkl-start-alb-run-an-alb-fronted-service-locally)).
85
85
  - **`invoke-agentcore`** invokes a Bedrock AgentCore Runtime agent locally — container or `fromCodeAsset` / `fromS3` managed runtime, all four runtime protocols (HTTP and AGUI on 8080, MCP on 8000, A2A on 9000; SSE and WebSocket are HTTP wire-shape variants on the same 8080 container), with `customJwtAuthorizer` and `--sigv4` enforcement ([details](docs/cli-reference.md#cdkl-invoke-agentcore-run-bedrock-agentcore-runtime-agents-locally)).
86
86
  - **`studio`** opens a local web console over the same synthesized targets — a point-and-click front over the same CLI runners. Takes no target (it lists them all). Flags + in-UI controls: [Web console — `cdkl studio`](#web-console--cdkl-studio).
@@ -200,7 +200,7 @@ Most CDK ECS apps boot multiple replicas behind an ALB. cdk-local exposes each l
200
200
  **Why the extra flags on the simple case?** The template's `DesiredCount` (typically 3 in production) is honored locally by default, but N replicas can't all bind the same host port — so `start-service` skips host publishing for multi-replica runs and the app is reachable only from inside the `cdkl-svc-` docker network. To get the simple `curl http://127.0.0.1:...` access path:
201
201
 
202
202
  - `--max-tasks 1` clamps the local replica count to 1 without touching your CDK code.
203
- - `--host-port <containerPort>=<hostPort>` remaps the container port to a non-privileged host port (macOS Docker Desktop needs `sudo` for ports < 1024).
203
+ - A privileged declared host port (`< 1024`, e.g. 80) is auto-remapped to a free high host port — with a WARN naming the remap — because macOS Docker Desktop refuses to publish privileged ports and a `< 1024` host port needs root. `--host-port <containerPort>=<hostPort>` pins a specific host port instead.
204
204
 
205
205
  `start-alb` uses the symmetric `--lb-port <listenerPort>=<hostPort>` for privileged listener ports like 80 / 443, and `--tls` (or `--tls-cert` / `--tls-key`) to terminate TLS locally instead of serving the HTTPS listener over plain HTTP (the default). Full resolution model: [docs/cli-reference.md](docs/cli-reference.md#cdkl-start-alb-run-an-alb-fronted-service-locally).
206
206
 
package/dist/cli.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { E as createLocalStartAlbCommand, F as createLocalRunTaskCommand, It as createLocalStartApiCommand, M as createLocalStartServiceCommand, Pt as createLocalInvokeCommand, S as createLocalListCommand, a as createLocalStudioCommand, dt as createLocalInvokeAgentCoreCommand } from "./local-studio-B2LH4E1E.js";
2
+ import { E as createLocalStartAlbCommand, F as createLocalRunTaskCommand, It as createLocalStartApiCommand, M as createLocalStartServiceCommand, Pt as createLocalInvokeCommand, S as createLocalListCommand, a as createLocalStudioCommand, dt as createLocalInvokeAgentCoreCommand } from "./local-studio-BEoOU1Y7.js";
3
3
  import { Command } from "commander";
4
4
 
5
5
  //#region src/cli/index.ts
6
6
  const program = new Command();
7
- program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.103.8");
7
+ program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.103.9");
8
8
  program.addCommand(createLocalInvokeCommand());
9
9
  program.addCommand(createLocalInvokeAgentCoreCommand());
10
10
  program.addCommand(createLocalStartApiCommand());
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { d as setEmbedConfig, l as getEmbedConfig, u as resetEmbedConfig } from "./docker-cmd-GcI_cqY5.js";
2
- import { $n as resolveCfnStackName, C as formatTargetListing, E as createLocalStartAlbCommand, F as createLocalRunTaskCommand, Gn as substituteEnvVarsFromState, It as createLocalStartApiCommand, Jn as createLocalStateProvider, Kn as substituteEnvVarsFromStateAsync, M as createLocalStartServiceCommand, Pt as createLocalInvokeCommand, Qn as resolveCfnRegion, S as createLocalListCommand, Un as substituteAgainstState, Wn as substituteAgainstStateAsync, Xn as rejectExplicitCfnStackWithMultipleStacks, Yn as isCfnFlagPresent, Zn as resolveCfnFallbackRegion, a as createLocalStudioCommand, ar as countTargets, dt as createLocalInvokeAgentCoreCommand, er as CfnLocalStateProvider, nr as resolveSsmParameters, or as listTargets, qn as LocalStateSourceError, tr as collectSsmParameterRefs } from "./local-studio-B2LH4E1E.js";
2
+ import { $n as resolveCfnStackName, C as formatTargetListing, E as createLocalStartAlbCommand, F as createLocalRunTaskCommand, Gn as substituteEnvVarsFromState, It as createLocalStartApiCommand, Jn as createLocalStateProvider, Kn as substituteEnvVarsFromStateAsync, M as createLocalStartServiceCommand, Pt as createLocalInvokeCommand, Qn as resolveCfnRegion, S as createLocalListCommand, Un as substituteAgainstState, Wn as substituteAgainstStateAsync, Xn as rejectExplicitCfnStackWithMultipleStacks, Yn as isCfnFlagPresent, Zn as resolveCfnFallbackRegion, a as createLocalStudioCommand, ar as countTargets, dt as createLocalInvokeAgentCoreCommand, er as CfnLocalStateProvider, nr as resolveSsmParameters, or as listTargets, qn as LocalStateSourceError, tr as collectSsmParameterRefs } from "./local-studio-BEoOU1Y7.js";
3
3
 
4
4
  export { CfnLocalStateProvider, LocalStateSourceError, collectSsmParameterRefs, countTargets, createLocalInvokeAgentCoreCommand, createLocalInvokeCommand, createLocalListCommand, createLocalRunTaskCommand, createLocalStartAlbCommand, createLocalStartApiCommand, createLocalStartServiceCommand, createLocalStateProvider, createLocalStudioCommand, formatTargetListing, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resetEmbedConfig, resolveCfnFallbackRegion, resolveCfnRegion, resolveCfnStackName, resolveSsmParameters, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync };
package/dist/internal.js CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as runImageOverrideBuilds, $t as defaultCredentialsLoader, A as resolveAlbFrontDoor, An as ConnectionRegistry, Ar as resolveProfileCredentials, At as renderCodeDockerfile, B as buildEcsImageResolutionContext, Bn as resolveRuntimeFileExtension, Bt as createFileWatcher, Cn as pickResponseTemplate, Cr as resolveAgentCoreTarget, Ct as AGENTCORE_SESSION_ID_HEADER, D as parseLbPortOverrides, Dn as HOST_GATEWAY_MIN_VERSION, Dr as tryResolveImageFnJoin, Dt as SUPPORTED_CODE_RUNTIMES, En as VtlEvaluationError, Er as substituteImagePlaceholders, Et as downloadAndExtractS3Bundle, Fn as buildDisconnectEvent, Ft as addStartApiSpecificOptions, G as resolveSharedSidecarCredentials, Gt as availableApiIdentifiers, H as parseMaxTasks, Hn as EcsTaskResolutionError, Ht as buildStageMap, I as MAX_TASKS_SUBNET_RANGE_CAP, In as buildMessageEvent, J as buildImageOverrideTag, Jt as groupRoutesByServer, K as runEcsServiceEmulator, Kt as filterRoutesByApiIdentifier, L as addCommonEcsServiceOptions, Ln as architectureToPlatform, Lt as createWatchPredicates, Mn as handleConnectionsRequest, Mt as classifySourceChange, N as serviceStrategy, Nn as parseConnectionsPath, Nt as addInvokeSpecificOptions, O as resolveAlbTarget, On as probeHostGatewaySupport, Or as LocalInvokeBuildError, Ot as buildAgentCoreCodeImage, P as addRunTaskSpecificOptions, Pn as buildConnectEvent, Q as resolveImageOverrides, Qt as resolveServiceIntegrationParameters, R as addEcsAssumeRoleOptions, Rn as buildContainerImage, Rt as resolveApiTargetSubset, Sn as evaluateResponseParameters, Sr as pickAgentCoreCandidateStack, St as signAgentCoreInvocation, T as albStrategy, Tn as tryParseStatus, Tr as formatStateRemedy, Tt as waitForAgentCorePing, U as parseRestartPolicy, Ut as materializeLayerFromArn, V as ecsClusterOption, Vn as resolveRuntimeImage, Vt as attachStageContext, W as resolveEcsAssumeRoleOption, Wt as resolveEnvVars, X as mergeForService, Xt as startApiServer, Y as enforceImageOverrideOrphans, Yt as readMtlsMaterialsFromDisk, Z as parseImageOverrideFlags, Zt as resolveSelectionExpression, _ as toStudioTargetGroups, _n as matchRoute, _r as AGENTCORE_AGUI_PROTOCOL, _t as MCP_PATH, an as verifyJwtViaDiscovery, at as DEFAULT_SHADOW_READY_TIMEOUT_MS, b as StudioEventBus, bn as buildHttpApiV2Event, br as AGENTCORE_RUNTIME_TYPE, bt as parseSseForJsonRpc, c as startStudioProxy, cn as evaluateCachedLambdaPolicy, cr as discoverWebSocketApis, ct as getContainerNetworkIp, d as createStudioDispatcher, dn as attachAuthorizers, dr as parseSelectionExpressionPath, en as buildCognitoJwksUrl, et as describePinnedImageUri, f as filterStudioCustomResources, fn as applyCorsResponseHeaders, fr as webSocketApiMatchesIdentifier, ft as invokeAgentCoreWs, g as startStudioServer, gn as matchPreflight, gr as AGENTCORE_A2A_PROTOCOL, gt as MCP_CONTAINER_PORT, h as filterStudioTargetGroups, hn as isFunctionUrlOacFronted, hr as resolveLambdaArnIntrinsic, ht as a2aInvokeOnce, i as coerceStopRequest, in as verifyJwtAuthorizer, ir as resolveSingleTarget, it as CloudMapRegistry, j as addStartServiceSpecificOptions, jn as buildMgmtEndpointEnvUrl, jt as toCmdArgv, k as isApplicationLoadBalancer, kn as bufferToBody, kr as buildStsClientConfig, kt as computeCodeImageTag, l as relayServeRequest, ln as invokeRequestAuthorizer, lr as discoverWebSocketApisOrThrow, lt as attachContainerLogStreamer, m as annotatePinnedEcsTargets, mn as buildCorsConfigFromCloudFrontChain, mr as pickRefLogicalId, mt as A2A_PATH, n as coerceRunRequest, nn as createJwksCache, nt as listPinnedTargets, o as resolveServeBaseUrl, on as buildMethodArn, ot as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, p as isCustomResourceLambdaTarget, pn as buildCorsConfigByApiId, pr as discoverRoutes, pt as A2A_CONTAINER_PORT, q as ImageOverrideError, qt as filterRoutesByApiIdentifiers, r as coerceServeRequest, rn as verifyCognitoJwt, rr as resolveWatchConfig, rt as buildCloudMapIndex, s as createStudioServeManager, sn as computeRequestIdentityHash, sr as availableWebSocketApiIdentifiers, st as setShadowReadyTimeoutMs, t as addStudioSpecificOptions, tn as buildJwksUrlFromIssuer, tt as isLocalCdkAssetImage, u as reinvoke, un as invokeTokenAuthorizer, ur as filterWebSocketApisByIdentifiers, ut as addInvokeAgentCoreSpecificOptions, v as renderStudioHtml, vn as translateLambdaResponse, vr as AGENTCORE_HTTP_PROTOCOL, vt as MCP_PROTOCOL_VERSION, w as addAlbSpecificOptions, wn as selectIntegrationResponse, wr as derivePseudoParametersFromRegion, wt as invokeAgentCore, x as addListSpecificOptions, xn as buildRestV1Event, xr as AgentCoreResolutionError, xt as AGENTCORE_SIGV4_SERVICE, y as createStudioStore, yn as applyAuthorizerOverlay, yr as AGENTCORE_MCP_PROTOCOL, yt as mcpInvokeOnce, z as addImageOverrideOptions, zn as resolveRuntimeCodeMountPath, zt as createAuthorizerCache } from "./local-studio-B2LH4E1E.js";
1
+ import { $ as runImageOverrideBuilds, $t as defaultCredentialsLoader, A as resolveAlbFrontDoor, An as ConnectionRegistry, Ar as resolveProfileCredentials, At as renderCodeDockerfile, B as buildEcsImageResolutionContext, Bn as resolveRuntimeFileExtension, Bt as createFileWatcher, Cn as pickResponseTemplate, Cr as resolveAgentCoreTarget, Ct as AGENTCORE_SESSION_ID_HEADER, D as parseLbPortOverrides, Dn as HOST_GATEWAY_MIN_VERSION, Dr as tryResolveImageFnJoin, Dt as SUPPORTED_CODE_RUNTIMES, En as VtlEvaluationError, Er as substituteImagePlaceholders, Et as downloadAndExtractS3Bundle, Fn as buildDisconnectEvent, Ft as addStartApiSpecificOptions, G as resolveSharedSidecarCredentials, Gt as availableApiIdentifiers, H as parseMaxTasks, Hn as EcsTaskResolutionError, Ht as buildStageMap, I as MAX_TASKS_SUBNET_RANGE_CAP, In as buildMessageEvent, J as buildImageOverrideTag, Jt as groupRoutesByServer, K as runEcsServiceEmulator, Kt as filterRoutesByApiIdentifier, L as addCommonEcsServiceOptions, Ln as architectureToPlatform, Lt as createWatchPredicates, Mn as handleConnectionsRequest, Mt as classifySourceChange, N as serviceStrategy, Nn as parseConnectionsPath, Nt as addInvokeSpecificOptions, O as resolveAlbTarget, On as probeHostGatewaySupport, Or as LocalInvokeBuildError, Ot as buildAgentCoreCodeImage, P as addRunTaskSpecificOptions, Pn as buildConnectEvent, Q as resolveImageOverrides, Qt as resolveServiceIntegrationParameters, R as addEcsAssumeRoleOptions, Rn as buildContainerImage, Rt as resolveApiTargetSubset, Sn as evaluateResponseParameters, Sr as pickAgentCoreCandidateStack, St as signAgentCoreInvocation, T as albStrategy, Tn as tryParseStatus, Tr as formatStateRemedy, Tt as waitForAgentCorePing, U as parseRestartPolicy, Ut as materializeLayerFromArn, V as ecsClusterOption, Vn as resolveRuntimeImage, Vt as attachStageContext, W as resolveEcsAssumeRoleOption, Wt as resolveEnvVars, X as mergeForService, Xt as startApiServer, Y as enforceImageOverrideOrphans, Yt as readMtlsMaterialsFromDisk, Z as parseImageOverrideFlags, Zt as resolveSelectionExpression, _ as toStudioTargetGroups, _n as matchRoute, _r as AGENTCORE_AGUI_PROTOCOL, _t as MCP_PATH, an as verifyJwtViaDiscovery, at as DEFAULT_SHADOW_READY_TIMEOUT_MS, b as StudioEventBus, bn as buildHttpApiV2Event, br as AGENTCORE_RUNTIME_TYPE, bt as parseSseForJsonRpc, c as startStudioProxy, cn as evaluateCachedLambdaPolicy, cr as discoverWebSocketApis, ct as getContainerNetworkIp, d as createStudioDispatcher, dn as attachAuthorizers, dr as parseSelectionExpressionPath, en as buildCognitoJwksUrl, et as describePinnedImageUri, f as filterStudioCustomResources, fn as applyCorsResponseHeaders, fr as webSocketApiMatchesIdentifier, ft as invokeAgentCoreWs, g as startStudioServer, gn as matchPreflight, gr as AGENTCORE_A2A_PROTOCOL, gt as MCP_CONTAINER_PORT, h as filterStudioTargetGroups, hn as isFunctionUrlOacFronted, hr as resolveLambdaArnIntrinsic, ht as a2aInvokeOnce, i as coerceStopRequest, in as verifyJwtAuthorizer, ir as resolveSingleTarget, it as CloudMapRegistry, j as addStartServiceSpecificOptions, jn as buildMgmtEndpointEnvUrl, jt as toCmdArgv, k as isApplicationLoadBalancer, kn as bufferToBody, kr as buildStsClientConfig, kt as computeCodeImageTag, l as relayServeRequest, ln as invokeRequestAuthorizer, lr as discoverWebSocketApisOrThrow, lt as attachContainerLogStreamer, m as annotatePinnedEcsTargets, mn as buildCorsConfigFromCloudFrontChain, mr as pickRefLogicalId, mt as A2A_PATH, n as coerceRunRequest, nn as createJwksCache, nt as listPinnedTargets, o as resolveServeBaseUrl, on as buildMethodArn, ot as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, p as isCustomResourceLambdaTarget, pn as buildCorsConfigByApiId, pr as discoverRoutes, pt as A2A_CONTAINER_PORT, q as ImageOverrideError, qt as filterRoutesByApiIdentifiers, r as coerceServeRequest, rn as verifyCognitoJwt, rr as resolveWatchConfig, rt as buildCloudMapIndex, s as createStudioServeManager, sn as computeRequestIdentityHash, sr as availableWebSocketApiIdentifiers, st as setShadowReadyTimeoutMs, t as addStudioSpecificOptions, tn as buildJwksUrlFromIssuer, tt as isLocalCdkAssetImage, u as reinvoke, un as invokeTokenAuthorizer, ur as filterWebSocketApisByIdentifiers, ut as addInvokeAgentCoreSpecificOptions, v as renderStudioHtml, vn as translateLambdaResponse, vr as AGENTCORE_HTTP_PROTOCOL, vt as MCP_PROTOCOL_VERSION, w as addAlbSpecificOptions, wn as selectIntegrationResponse, wr as derivePseudoParametersFromRegion, wt as invokeAgentCore, x as addListSpecificOptions, xn as buildRestV1Event, xr as AgentCoreResolutionError, xt as AGENTCORE_SIGV4_SERVICE, y as createStudioStore, yn as applyAuthorizerOverlay, yr as AGENTCORE_MCP_PROTOCOL, yt as mcpInvokeOnce, z as addImageOverrideOptions, zn as resolveRuntimeCodeMountPath, zt as createAuthorizerCache } from "./local-studio-BEoOU1Y7.js";
2
2
 
3
3
  export { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_HTTP_PROTOCOL, AGENTCORE_MCP_PROTOCOL, AGENTCORE_RUNTIME_TYPE, AGENTCORE_SESSION_ID_HEADER, AGENTCORE_SIGV4_SERVICE, AgentCoreResolutionError, CloudMapRegistry, ConnectionRegistry, DEFAULT_SHADOW_READY_TIMEOUT_MS, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, ImageOverrideError, LocalInvokeBuildError, MAX_TASKS_SUBNET_RANGE_CAP, MCP_CONTAINER_PORT, MCP_PATH, MCP_PROTOCOL_VERSION, SOFT_RELOAD_COMPLETION_LOG_SUFFIX, SUPPORTED_CODE_RUNTIMES, StudioEventBus, VtlEvaluationError, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addEcsAssumeRoleOptions, addImageOverrideOptions, addInvokeAgentCoreSpecificOptions, addInvokeSpecificOptions, addListSpecificOptions, addRunTaskSpecificOptions, addStartApiSpecificOptions, addStartServiceSpecificOptions, addStudioSpecificOptions, albStrategy, annotatePinnedEcsTargets, applyAuthorizerOverlay, applyCorsResponseHeaders, architectureToPlatform, attachAuthorizers, attachContainerLogStreamer, attachStageContext, availableApiIdentifiers, availableWebSocketApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCloudMapIndex, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildEcsImageResolutionContext, buildHttpApiV2Event, buildImageOverrideTag, buildJwksUrlFromIssuer, buildMessageEvent, buildMethodArn, buildMgmtEndpointEnvUrl, buildRestV1Event, buildStageMap, buildStsClientConfig, classifySourceChange, coerceRunRequest, coerceServeRequest, coerceStopRequest, computeCodeImageTag, computeRequestIdentityHash, createAuthorizerCache, createFileWatcher, createJwksCache, createStudioDispatcher, createStudioServeManager, createStudioStore, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, describePinnedImageUri, discoverRoutes, discoverWebSocketApis, discoverWebSocketApisOrThrow, downloadAndExtractS3Bundle, ecsClusterOption, enforceImageOverrideOrphans, evaluateCachedLambdaPolicy, evaluateResponseParameters, filterRoutesByApiIdentifier, filterRoutesByApiIdentifiers, filterStudioCustomResources, filterStudioTargetGroups, filterWebSocketApisByIdentifiers, formatStateRemedy, getContainerNetworkIp, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, invokeRequestAuthorizer, invokeTokenAuthorizer, isApplicationLoadBalancer, isCustomResourceLambdaTarget, isFunctionUrlOacFronted, isLocalCdkAssetImage, listPinnedTargets, matchPreflight, matchRoute, materializeLayerFromArn, mcpInvokeOnce, mergeForService, parseConnectionsPath, parseImageOverrideFlags, parseLbPortOverrides, parseMaxTasks, parseRestartPolicy, parseSelectionExpressionPath, parseSseForJsonRpc, pickAgentCoreCandidateStack, pickRefLogicalId, pickResponseTemplate, probeHostGatewaySupport, readMtlsMaterialsFromDisk, reinvoke, relayServeRequest, renderCodeDockerfile, renderStudioHtml, resolveAgentCoreTarget, resolveAlbFrontDoor, resolveAlbTarget, resolveApiTargetSubset, resolveEcsAssumeRoleOption, resolveEnvVars, resolveImageOverrides, resolveLambdaArnIntrinsic, resolveProfileCredentials, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSelectionExpression, resolveServeBaseUrl, resolveServiceIntegrationParameters, resolveSharedSidecarCredentials, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, runImageOverrideBuilds, selectIntegrationResponse, serviceStrategy, setShadowReadyTimeoutMs, signAgentCoreInvocation, startApiServer, startStudioProxy, startStudioServer, substituteImagePlaceholders, toCmdArgv, toStudioTargetGroups, translateLambdaResponse, tryParseStatus, tryResolveImageFnJoin, verifyCognitoJwt, verifyJwtAuthorizer, verifyJwtViaDiscovery, waitForAgentCorePing, webSocketApiMatchesIdentifier };
@@ -20647,6 +20647,24 @@ async function runEcsTask(task, options, state) {
20647
20647
  state.network = await createTaskNetwork(netCreateOpts);
20648
20648
  }
20649
20649
  const volumeByName = await realizeDockerVolumes(task.volumes, state);
20650
+ let effectiveHostPortOverrides = options.hostPortOverrides;
20651
+ let autoRemappedContainerPorts;
20652
+ if (!options.skipHostPortPublish) {
20653
+ const remaps = await resolvePrivilegedHostPortRemaps({
20654
+ task,
20655
+ userOverrides: options.hostPortOverrides,
20656
+ ephemeralPorts: new Set(options.ephemeralPublishContainerPorts ?? []),
20657
+ allocate: options.allocateHostPort ?? pickFreePort
20658
+ });
20659
+ const remapKeys = Object.keys(remaps);
20660
+ if (remapKeys.length > 0) {
20661
+ effectiveHostPortOverrides = {
20662
+ ...options.hostPortOverrides,
20663
+ ...remaps
20664
+ };
20665
+ autoRemappedContainerPorts = new Set(remapKeys.map(Number));
20666
+ }
20667
+ }
20650
20668
  const dockerCmds = /* @__PURE__ */ new Map();
20651
20669
  for (const container of task.containers) {
20652
20670
  const image = imagePlan.get(container.name);
@@ -20665,7 +20683,8 @@ async function runEcsTask(task, options, state) {
20665
20683
  region: options.region,
20666
20684
  sidecarIp: state.network.sidecarIp,
20667
20685
  ...options.skipHostPortPublish ? { skipHostPortPublish: true } : {},
20668
- ...options.hostPortOverrides ? { hostPortOverrides: options.hostPortOverrides } : {},
20686
+ ...effectiveHostPortOverrides ? { hostPortOverrides: effectiveHostPortOverrides } : {},
20687
+ ...autoRemappedContainerPorts ? { autoRemappedContainerPorts } : {},
20669
20688
  ...options.ephemeralPublishContainerPorts && options.ephemeralPublishContainerPorts.length > 0 ? { ephemeralPublishContainerPorts: options.ephemeralPublishContainerPorts } : {},
20670
20689
  ...options.addHostFlags && options.addHostFlags.length > 0 ? { addHostFlags: options.addHostFlags } : {},
20671
20690
  ...(options.networkAliasesByContainer?.get(container.name)?.length ?? 0) > 0 ? { networkAliases: options.networkAliasesByContainer.get(container.name) } : {},
@@ -20992,6 +21011,51 @@ function parseHostPortOverrides(values) {
20992
21011
  return out;
20993
21012
  }
20994
21013
  /**
21014
+ * Issue #357 — auto-remap privileged declared host ports to free high host
21015
+ * ports so `docker run` never tries to publish e.g. `127.0.0.1:80:80`.
21016
+ *
21017
+ * For each container port whose DECLARED host port (`hostPort ?? containerPort`)
21018
+ * is privileged (`< 1024`), is NOT already pinned by a user `--host-port`
21019
+ * override, and is NOT an ephemeral front-door port, a free high host port is
21020
+ * allocated and recorded as an additional override. A loud WARN names the remap
21021
+ * and the `--host-port` escape hatch so the change is never silent. The
21022
+ * returned map is keyed by containerPort and meant to be merged OVER the user
21023
+ * overrides (which always win).
21024
+ *
21025
+ * Why: macOS Docker Desktop rejects publishing a privileged host port through
21026
+ * the `com.docker.vmnetd` helper, and a `< 1024` host port needs root on Linux
21027
+ * — so a single-replica `start-service` / `run-task` / `start-alb` publish of a
21028
+ * task definition that declares container port 80 used to fail at `docker run`.
21029
+ * Remapping makes it work out of the box; the user can still pin a specific
21030
+ * (even privileged) port with `--host-port`.
21031
+ *
21032
+ * Pure except for the injected `allocate` (a free-host-port finder). Callers
21033
+ * skip this entirely when host-port publishing is suppressed (multi-replica).
21034
+ * One remap per containerPort (the override map is flat / keyed by container
21035
+ * port), matching the existing `--host-port` semantics.
21036
+ *
21037
+ * Applied automatically by `runEcsTask`; exported (no leading underscore) so the
21038
+ * unit tests can assert the remap decisions directly with an injected allocator.
21039
+ */
21040
+ async function resolvePrivilegedHostPortRemaps(opts) {
21041
+ const { task, userOverrides, ephemeralPorts, allocate } = opts;
21042
+ const remaps = {};
21043
+ const seen = /* @__PURE__ */ new Set();
21044
+ for (const container of task.containers) for (const pm of container.portMappings) {
21045
+ const cp = pm.containerPort;
21046
+ if (seen.has(cp)) continue;
21047
+ if (ephemeralPorts.has(cp)) continue;
21048
+ if (userOverrides && userOverrides[cp] !== void 0) continue;
21049
+ const declaredHostPort = pm.hostPort ?? cp;
21050
+ if (declaredHostPort >= 1024) continue;
21051
+ seen.add(cp);
21052
+ const freePort = await allocate();
21053
+ remaps[cp] = freePort;
21054
+ getLogger().child("ecs").warn(`Container '${container.name}' container port ${cp} declares a privileged host port ${declaredHostPort}, which cannot be published locally (macOS Docker Desktop rejects privileged-port publishing; a host port < 1024 needs root). Auto-remapped to host port ${freePort}. Pass --host-port ${cp}=<hostPort> to pin a specific host port.`);
21055
+ }
21056
+ return remaps;
21057
+ }
21058
+ /**
20995
21059
  * Build the full `docker run -d` argument list for one container.
20996
21060
  * Exported (no-leading-underscore) so the unit tests can assert against
20997
21061
  * the shape directly without spawning a process.
@@ -21019,7 +21083,7 @@ function buildDockerRunArgs(opts) {
21019
21083
  const declaredHostPort = pm.hostPort ?? pm.containerPort;
21020
21084
  const hostPort = opts.hostPortOverrides?.[pm.containerPort] ?? declaredHostPort;
21021
21085
  const overridden = hostPort !== declaredHostPort;
21022
- const overrideNote = overridden ? " (--host-port override)" : "";
21086
+ const overrideNote = opts.autoRemappedContainerPorts?.has(pm.containerPort) ?? false ? " (privileged-port auto-remap)" : overridden ? " (--host-port override)" : "";
21023
21087
  getLogger().child("ecs").info(`Container '${container.name}' container port ${pm.containerPort} published on ${containerHost}:${hostPort}${overrideNote}. Reach it at ${containerHost}:${hostPort}.`);
21024
21088
  args.push("-p", `${containerHost}:${hostPort}:${pm.containerPort}/${pm.protocol}`);
21025
21089
  publishedEndpoints.push({
@@ -32170,4 +32234,4 @@ function addStudioSpecificOptions(cmd) {
32170
32234
 
32171
32235
  //#endregion
32172
32236
  export { runImageOverrideBuilds as $, resolveCfnStackName as $n, defaultCredentialsLoader as $t, resolveAlbFrontDoor as A, ConnectionRegistry as An, resolveProfileCredentials as Ar, renderCodeDockerfile as At, buildEcsImageResolutionContext$1 as B, resolveRuntimeFileExtension as Bn, createFileWatcher as Bt, formatTargetListing as C, pickResponseTemplate as Cn, resolveAgentCoreTarget as Cr, AGENTCORE_SESSION_ID_HEADER as Ct, parseLbPortOverrides as D, HOST_GATEWAY_MIN_VERSION as Dn, tryResolveImageFnJoin as Dr, SUPPORTED_CODE_RUNTIMES as Dt, createLocalStartAlbCommand as E, VtlEvaluationError as En, substituteImagePlaceholders as Er, downloadAndExtractS3Bundle as Et, createLocalRunTaskCommand as F, buildDisconnectEvent as Fn, addStartApiSpecificOptions as Ft, resolveSharedSidecarCredentials as G, substituteEnvVarsFromState as Gn, availableApiIdentifiers as Gt, parseMaxTasks as H, EcsTaskResolutionError as Hn, buildStageMap as Ht, MAX_TASKS_SUBNET_RANGE_CAP as I, buildMessageEvent as In, createLocalStartApiCommand as It, buildImageOverrideTag as J, createLocalStateProvider as Jn, groupRoutesByServer as Jt, runEcsServiceEmulator as K, substituteEnvVarsFromStateAsync as Kn, filterRoutesByApiIdentifier as Kt, addCommonEcsServiceOptions as L, architectureToPlatform as Ln, createWatchPredicates as Lt, createLocalStartServiceCommand as M, handleConnectionsRequest as Mn, classifySourceChange as Mt, serviceStrategy as N, parseConnectionsPath as Nn, addInvokeSpecificOptions as Nt, resolveAlbTarget as O, probeHostGatewaySupport as On, LocalInvokeBuildError as Or, buildAgentCoreCodeImage as Ot, addRunTaskSpecificOptions as P, buildConnectEvent as Pn, createLocalInvokeCommand as Pt, resolveImageOverrides as Q, resolveCfnRegion as Qn, resolveServiceIntegrationParameters as Qt, addEcsAssumeRoleOptions as R, buildContainerImage as Rn, resolveApiTargetSubset as Rt, createLocalListCommand as S, evaluateResponseParameters as Sn, pickAgentCoreCandidateStack as Sr, signAgentCoreInvocation as St, albStrategy as T, tryParseStatus as Tn, formatStateRemedy as Tr, waitForAgentCorePing as Tt, parseRestartPolicy as U, substituteAgainstState as Un, materializeLayerFromArn as Ut, ecsClusterOption as V, resolveRuntimeImage as Vn, attachStageContext as Vt, resolveEcsAssumeRoleOption as W, substituteAgainstStateAsync as Wn, resolveEnvVars$1 as Wt, mergeForService as X, rejectExplicitCfnStackWithMultipleStacks as Xn, startApiServer as Xt, enforceImageOverrideOrphans as Y, isCfnFlagPresent as Yn, readMtlsMaterialsFromDisk as Yt, parseImageOverrideFlags as Z, resolveCfnFallbackRegion as Zn, resolveSelectionExpression as Zt, toStudioTargetGroups as _, matchRoute as _n, AGENTCORE_AGUI_PROTOCOL as _r, MCP_PATH as _t, createLocalStudioCommand as a, verifyJwtViaDiscovery as an, countTargets as ar, DEFAULT_SHADOW_READY_TIMEOUT_MS as at, StudioEventBus as b, buildHttpApiV2Event as bn, AGENTCORE_RUNTIME_TYPE as br, parseSseForJsonRpc as bt, startStudioProxy as c, evaluateCachedLambdaPolicy as cn, discoverWebSocketApis as cr, getContainerNetworkIp as ct, createStudioDispatcher as d, attachAuthorizers as dn, parseSelectionExpressionPath as dr, createLocalInvokeAgentCoreCommand as dt, buildCognitoJwksUrl as en, CfnLocalStateProvider as er, describePinnedImageUri as et, filterStudioCustomResources as f, applyCorsResponseHeaders as fn, webSocketApiMatchesIdentifier as fr, invokeAgentCoreWs as ft, startStudioServer as g, matchPreflight as gn, AGENTCORE_A2A_PROTOCOL as gr, MCP_CONTAINER_PORT as gt, filterStudioTargetGroups as h, isFunctionUrlOacFronted as hn, resolveLambdaArnIntrinsic as hr, a2aInvokeOnce as ht, coerceStopRequest as i, verifyJwtAuthorizer as in, resolveSingleTarget as ir, CloudMapRegistry as it, addStartServiceSpecificOptions as j, buildMgmtEndpointEnvUrl as jn, toCmdArgv as jt, isApplicationLoadBalancer as k, bufferToBody as kn, buildStsClientConfig as kr, computeCodeImageTag as kt, relayServeRequest as l, invokeRequestAuthorizer as ln, discoverWebSocketApisOrThrow as lr, attachContainerLogStreamer as lt, annotatePinnedEcsTargets as m, buildCorsConfigFromCloudFrontChain as mn, pickRefLogicalId as mr, A2A_PATH as mt, coerceRunRequest as n, createJwksCache as nn, resolveSsmParameters as nr, listPinnedTargets as nt, resolveServeBaseUrl as o, buildMethodArn as on, listTargets as or, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as ot, isCustomResourceLambdaTarget as p, buildCorsConfigByApiId as pn, discoverRoutes as pr, A2A_CONTAINER_PORT as pt, ImageOverrideError as q, LocalStateSourceError as qn, filterRoutesByApiIdentifiers as qt, coerceServeRequest as r, verifyCognitoJwt as rn, resolveWatchConfig as rr, buildCloudMapIndex as rt, createStudioServeManager as s, computeRequestIdentityHash as sn, availableWebSocketApiIdentifiers as sr, setShadowReadyTimeoutMs as st, addStudioSpecificOptions as t, buildJwksUrlFromIssuer as tn, collectSsmParameterRefs as tr, isLocalCdkAssetImage as tt, reinvoke as u, invokeTokenAuthorizer as un, filterWebSocketApisByIdentifiers as ur, addInvokeAgentCoreSpecificOptions as ut, renderStudioHtml as v, translateLambdaResponse as vn, AGENTCORE_HTTP_PROTOCOL as vr, MCP_PROTOCOL_VERSION as vt, addAlbSpecificOptions as w, selectIntegrationResponse as wn, derivePseudoParametersFromRegion as wr, invokeAgentCore as wt, addListSpecificOptions as x, buildRestV1Event as xn, AgentCoreResolutionError as xr, AGENTCORE_SIGV4_SERVICE as xt, createStudioStore as y, applyAuthorizerOverlay as yn, AGENTCORE_MCP_PROTOCOL as yr, mcpInvokeOnce as yt, addImageOverrideOptions as z, resolveRuntimeCodeMountPath as zn, createAuthorizerCache as zt };
32173
- //# sourceMappingURL=local-studio-B2LH4E1E.js.map
32237
+ //# sourceMappingURL=local-studio-BEoOU1Y7.js.map