cdk-local 0.104.0 → 0.104.1

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/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-BQC2kT2L.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-93egoQdO.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.104.0");
7
+ program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.104.1");
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-BQC2kT2L.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-93egoQdO.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-BQC2kT2L.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-93egoQdO.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 };
@@ -32051,6 +32051,111 @@ function resolveBootAssemblyDir(appCmd, output) {
32051
32051
  const outPath = resolve(output);
32052
32052
  if (isDir(outPath)) return outPath;
32053
32053
  }
32054
+ /**
32055
+ * Resolve the {@link StackInfo} an ECS-service target id belongs to.
32056
+ *
32057
+ * A studio ECS target id is a CDK display path (`Stack/Construct/...`) or a
32058
+ * `Stack:LogicalId` form (the same shapes {@link resolveEcsServiceTarget}
32059
+ * accepts). We only need the owning stack so we can build that stack's
32060
+ * {@link EcsImageResolutionContext}. Returns `undefined` when the id has no
32061
+ * stack segment (single-stack app uses the lone stack) or the segment matches
32062
+ * no / multiple stacks — the caller then resolves without an image context,
32063
+ * which is exactly the no-`--from-cfn-stack` behavior.
32064
+ *
32065
+ * Exported for unit testing.
32066
+ */
32067
+ function resolveEcsServiceStack(targetId, stacks) {
32068
+ const parsed = parseEcsTarget(targetId);
32069
+ if (parsed.stackPattern === null) return stacks.length === 1 ? stacks[0] : void 0;
32070
+ const matched = matchStacks(stacks, [parsed.stackPattern]);
32071
+ return matched.length === 1 ? matched[0] : void 0;
32072
+ }
32073
+ /**
32074
+ * Pre-build the per-stack {@link EcsImageResolutionContext} map the boot-time
32075
+ * pin classifier needs (issue #354). `buildEcsImageResolutionContext` is
32076
+ * async (it may load deployed state / call STS), but the classify callback
32077
+ * `annotatePinnedEcsTargets` invokes is synchronous, so the contexts must be
32078
+ * materialized BEFORE classification.
32079
+ *
32080
+ * When `--from-cfn-stack` is NOT set, returns an empty map and the classifier
32081
+ * resolves against the synthed template only (the historical behavior). When
32082
+ * it IS set, for every distinct stack that owns a servable ECS service id this
32083
+ * builds a `LocalStateProvider` bound to THAT stack (so a multi-stack app with
32084
+ * bare `--from-cfn-stack` reads each stack's own CFn counterpart — the CFn
32085
+ * provider is stack-bound at construction, `load()` ignores its stack-name
32086
+ * argument), then builds + caches that stack's image-resolution context once.
32087
+ * Each per-stack provider is disposed before returning.
32088
+ *
32089
+ * A per-stack build failure is logged as a WARN and that stack maps to
32090
+ * `undefined` (resolve without an image context) rather than aborting boot.
32091
+ *
32092
+ * Exported for unit testing.
32093
+ */
32094
+ async function prepareEcsImageContexts(args) {
32095
+ const { serviceIds, stacks, options, logger } = args;
32096
+ const contextByStack = /* @__PURE__ */ new Map();
32097
+ if (!isCfnFlagPresent(options)) return contextByStack;
32098
+ const owningStacks = [];
32099
+ const seen = /* @__PURE__ */ new Set();
32100
+ for (const id of serviceIds) {
32101
+ let stack;
32102
+ try {
32103
+ stack = resolveEcsServiceStack(id, stacks);
32104
+ } catch {
32105
+ continue;
32106
+ }
32107
+ if (stack && !seen.has(stack.stackName)) {
32108
+ seen.add(stack.stackName);
32109
+ owningStacks.push(stack);
32110
+ }
32111
+ }
32112
+ rejectExplicitCfnStackWithMultipleStacks(options, owningStacks.length);
32113
+ for (const stack of owningStacks) {
32114
+ const stateProvider = createLocalStateProvider(options, stack.stackName, await resolveCfnFallbackRegion(options, stack.region));
32115
+ try {
32116
+ const ctx = await buildEcsImageResolutionContext(stack, stateProvider, options);
32117
+ contextByStack.set(stack.stackName, ctx);
32118
+ } catch (err) {
32119
+ logger.warn(`studio: could not build deployed-state image context for stack '${stack.stackName}'; ECS services in it resolve against the synthed template only. ${err instanceof Error ? err.message : String(err)}`);
32120
+ contextByStack.set(stack.stackName, void 0);
32121
+ } finally {
32122
+ stateProvider?.dispose();
32123
+ }
32124
+ }
32125
+ return contextByStack;
32126
+ }
32127
+ /**
32128
+ * Build the boot-time ECS pin classifier `annotatePinnedEcsTargets` calls per
32129
+ * servable service (issue #354). When `--from-cfn-stack` is set, a service
32130
+ * whose container image is an INTRINSIC ECR URI (e.g.
32131
+ * `ContainerImage.fromEcrRepository(repo)`) is only resolvable WITH the
32132
+ * deployed-state image-resolution context — without it the resolver throws
32133
+ * and the service was silently left unmarked, so the UI never offered the
32134
+ * image-override picker even though `cdkl start-service --from-cfn-stack`
32135
+ * detects the very same pin. This threads each service's owning-stack
32136
+ * {@link EcsImageResolutionContext} (pre-built by
32137
+ * {@link prepareEcsImageContexts}) into {@link resolveEcsServiceTarget} so
32138
+ * the pin resolves, and surfaces a WARN (not a silent DEBUG swallow) when a
32139
+ * service still cannot be classified.
32140
+ *
32141
+ * NOTE: the target list + these pinned flags are computed ONCE at boot. A
32142
+ * run-time Session-bar `--from-cfn-stack` change (`PATCH /api/config`) does
32143
+ * NOT re-classify — restart studio to re-detect pins under a new binding.
32144
+ *
32145
+ * Returns a `(id) => boolean` callback (true = pinned). Exported for testing.
32146
+ */
32147
+ function makePinClassifier(args) {
32148
+ const { stacks, contextByStack, logger } = args;
32149
+ return (id) => {
32150
+ try {
32151
+ const stack = resolveEcsServiceStack(id, stacks);
32152
+ return !isLocalCdkAssetImage(resolveEcsServiceTarget(id, stacks, stack ? contextByStack.get(stack.stackName) : void 0));
32153
+ } catch (err) {
32154
+ logger.warn(`studio: could not classify image-pin status for ECS service '${id}'; leaving it unmarked (the image-override picker will not be offered). ${err instanceof Error ? err.message : String(err)}`);
32155
+ return false;
32156
+ }
32157
+ };
32158
+ }
32054
32159
  async function localStudioCommand(options) {
32055
32160
  const logger = getLogger();
32056
32161
  if (options.verbose) logger.setLevel("debug");
@@ -32087,14 +32192,16 @@ async function localStudioCommand(options) {
32087
32192
  }
32088
32193
  const appLabel = stacks.map((s) => s.stackName).join(", ") || appCmd;
32089
32194
  const servableEcs = new Set(targetGroups.filter((g) => g.kind === "ecs").flatMap((g) => g.entries.filter((e) => e.servable).map((e) => e.id)));
32090
- const dockerfiles = annotatePinnedEcsTargets(targetGroups, (id) => {
32091
- try {
32092
- return !isLocalCdkAssetImage(resolveEcsServiceTarget(id, stacks));
32093
- } catch (err) {
32094
- logger.debug(`studio: could not classify pin status for '${id}': ${err instanceof Error ? err.message : String(err)}`);
32095
- return false;
32096
- }
32097
- }) ? discoverDockerfiles(process.cwd()) : [];
32195
+ const dockerfiles = annotatePinnedEcsTargets(targetGroups, makePinClassifier({
32196
+ stacks,
32197
+ contextByStack: await prepareEcsImageContexts({
32198
+ serviceIds: [...servableEcs],
32199
+ stacks,
32200
+ options,
32201
+ logger
32202
+ }),
32203
+ logger
32204
+ })) ? discoverDockerfiles(process.cwd()) : [];
32098
32205
  const bus = new StudioEventBus();
32099
32206
  const childConfig = {
32100
32207
  cliEntry: process.argv[1] ?? "",
@@ -32278,4 +32385,4 @@ function addStudioSpecificOptions(cmd) {
32278
32385
 
32279
32386
  //#endregion
32280
32387
  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 };
32281
- //# sourceMappingURL=local-studio-BQC2kT2L.js.map
32388
+ //# sourceMappingURL=local-studio-93egoQdO.js.map