cdk-local 0.110.0 → 0.111.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.
@@ -30155,6 +30155,7 @@ const STUDIO_SCRIPT = `
30155
30155
  let shownDetailId = null; // captured request whose read-only detail is shown
30156
30156
  let pendingReqPrefill = null; // {method,path,headers,body} to seed the next serve request composer (re-invoke)
30157
30157
  let studioDockerfiles = []; // Dockerfiles scanned at boot (pinned-ecs image-override picker)
30158
+ let lastAppliedCfn = null; // last-applied --from-cfn-stack (null | true | name) — a change re-loads targets (issue #385)
30158
30159
 
30159
30160
  function el(tag, cls, text) {
30160
30161
  const e = document.createElement(tag);
@@ -30401,7 +30402,7 @@ const STUDIO_SCRIPT = `
30401
30402
  };
30402
30403
  }
30403
30404
 
30404
- // Per-backing-service image-override pickers for a pinned ALB (issue #382):
30405
+ // Per-backing-service image-override pickers for a pinned ALB (issue #384):
30405
30406
  // one Dockerfile select per deployed-registry-pinned service the ALB fronts.
30406
30407
  // collect() returns a { [serviceId]: dockerfile } map threaded as
30407
30408
  // imageOverrides (one --image-override service=df per entry).
@@ -30659,7 +30660,7 @@ const STUDIO_SCRIPT = `
30659
30660
  lines.push('--image-override ' + applied.imageOverride);
30660
30661
  }
30661
30662
  // An alb serve threads a per-backing-service imageOverrides map (issue
30662
- // #382); surface one --image-override line each so the picks do not
30663
+ // #384); surface one --image-override line each so the picks do not
30663
30664
  // silently vanish from the running view (the issue #356 contract).
30664
30665
  if (applied && applied.imageOverrides) {
30665
30666
  Object.keys(applied.imageOverrides).forEach(function (svc) {
@@ -30801,7 +30802,7 @@ const STUDIO_SCRIPT = `
30801
30802
  ws.appendChild(io.node);
30802
30803
  collectImageOverride = io.collect;
30803
30804
  }
30804
- // An ALB boots its backing ECS services (issue #382); a pinned backing
30805
+ // An ALB boots its backing ECS services (issue #384); a pinned backing
30805
30806
  // service has the same "local edits do not take effect" problem, so offer
30806
30807
  // a per-service Dockerfile picker that threads
30807
30808
  // --image-override service=dockerfile to start-alb.
@@ -31754,6 +31755,9 @@ const STUDIO_SCRIPT = `
31754
31755
  cfn.checked = on;
31755
31756
  cfnName.value = typeof c.fromCfnStack === 'string' ? c.fromCfnStack : '';
31756
31757
  cfnName.style.display = on ? '' : 'none';
31758
+ // Seed the last-applied from-cfn-stack signature so the first Session-bar
31759
+ // edit only re-loads targets if it actually changes the binding (#385).
31760
+ lastAppliedCfn = on ? (typeof c.fromCfnStack === 'string' && c.fromCfnStack ? c.fromCfnStack : true) : null;
31757
31761
  // assume-role is now checkbox-gated, symmetric with from-cfn-stack
31758
31762
  // (issue #343): the ARN input appears only when the box is checked.
31759
31763
  const roleOn = document.getElementById('sess-role-on');
@@ -31782,8 +31786,9 @@ const STUDIO_SCRIPT = `
31782
31786
  const role = document.getElementById('sess-role');
31783
31787
  const roleOn = document.getElementById('sess-role-on');
31784
31788
  const msg = document.getElementById('sess-msg');
31789
+ const nextCfn = cfn.checked ? cfnName.value.trim() || true : null;
31785
31790
  const body = {
31786
- fromCfnStack: cfn.checked ? cfnName.value.trim() || true : null,
31791
+ fromCfnStack: nextCfn,
31787
31792
  // assume-role is explicit-ARN-only: checked + empty is simply not bound.
31788
31793
  assumeRole: roleOn.checked ? role.value.trim() || null : null,
31789
31794
  watch: document.getElementById('sess-watch').checked,
@@ -31801,17 +31806,32 @@ const STUDIO_SCRIPT = `
31801
31806
  }
31802
31807
  msg.textContent = '✓ applied';
31803
31808
  setTimeout(function () { msg.textContent = ''; }, 1200);
31804
- // Do NOT re-load from the server here (issue #349): the UI already shows
31805
- // exactly what was just PATCHed, and re-loading CLOBBERS the controls.
31806
- // assume-role has no bare server form, so a checked-but-empty assume-role
31807
- // PATCHes null; re-loading would read that back and immediately UN-check
31808
- // the box + hide the ARN input so clicking the checkbox appeared to do
31809
- // nothing. loadConfig() runs once on init.
31809
+ // Do NOT re-load the SESSION CONTROLS from the server here (issue #349):
31810
+ // the UI already shows exactly what was just PATCHed, and re-loading
31811
+ // CLOBBERS the controls. assume-role has no bare server form, so a
31812
+ // checked-but-empty assume-role PATCHes null; re-loading would read that
31813
+ // back and immediately UN-check the box. loadConfig() runs once on init.
31814
+ //
31815
+ // But a --from-cfn-stack change DID re-classify the targets server-side
31816
+ // (issue #385) — the PATCH response already reflects the new binding, and
31817
+ // the server swapped its target list. Re-fetch /api/targets so the
31818
+ // image-override pickers appear / disappear without restarting studio.
31819
+ // Only when the binding actually changed, so a watch / role toggle does
31820
+ // not needlessly rebuild the target pane. Running-serve rows are
31821
+ // preserved on re-render (serveState + updateServeRow drive them).
31822
+ if (!sameCfn(nextCfn, lastAppliedCfn)) {
31823
+ lastAppliedCfn = nextCfn;
31824
+ await loadTargets();
31825
+ }
31810
31826
  } catch (err) {
31811
31827
  msg.textContent = 'Failed: ' + err;
31812
31828
  }
31813
31829
  }
31814
31830
 
31831
+ // Two --from-cfn-stack values are the same binding when both clear (null),
31832
+ // both bare (true), or the same stack name.
31833
+ function sameCfn(a, b) { return a === b; }
31834
+
31815
31835
  function wireSession() {
31816
31836
  const cfn = document.getElementById('sess-cfn');
31817
31837
  const cfnName = document.getElementById('sess-cfn-name');
@@ -31995,7 +32015,7 @@ function annotatePinnedEcsTargets(groups, classify) {
31995
32015
  }
31996
32016
  /**
31997
32017
  * Annotate each `alb` entry of `groups` with the deployed-registry-pinned ECS
31998
- * services that ALB fronts (issue #382), so the alb composer can offer a
32018
+ * services that ALB fronts (issue #384), so the alb composer can offer a
31999
32019
  * per-service image-override Dockerfile picker. `resolveBackingPinned` maps one
32000
32020
  * ALB entry to its pinned backing services (`{ id, label }`, where `id` is the
32001
32021
  * `--image-override` key — `start-alb`'s `Stack:LogicalId` service-boot
@@ -32054,11 +32074,11 @@ async function startStudioServer(options) {
32054
32074
  const host = options.host ?? "127.0.0.1";
32055
32075
  const maxBump = options.maxPortBump ?? 20;
32056
32076
  const html = renderStudioHtml(options.appLabel, options.cliName);
32057
- const targetsJson = JSON.stringify({
32077
+ let targetsJson = JSON.stringify({
32058
32078
  groups: options.targetGroups,
32059
32079
  dockerfiles: options.dockerfiles ?? []
32060
32080
  });
32061
- const server = createServer$1((req, res) => handleRequest(req, res, options.bus, html, targetsJson, options));
32081
+ const server = createServer$1((req, res) => handleRequest(req, res, options.bus, html, () => targetsJson, options));
32062
32082
  const boundPort = await listenWithBump(server, host, options.port, maxBump);
32063
32083
  return {
32064
32084
  url: `http://${host}:${boundPort}`,
@@ -32066,10 +32086,16 @@ async function startStudioServer(options) {
32066
32086
  close: () => new Promise((resolveClose, reject) => {
32067
32087
  server.close((err) => err ? reject(err) : resolveClose());
32068
32088
  server.closeAllConnections?.();
32069
- })
32089
+ }),
32090
+ setTargets: (groups, dockerfiles) => {
32091
+ targetsJson = JSON.stringify({
32092
+ groups,
32093
+ dockerfiles: dockerfiles ?? []
32094
+ });
32095
+ }
32070
32096
  };
32071
32097
  }
32072
- function handleRequest(req, res, bus, html, targetsJson, options) {
32098
+ function handleRequest(req, res, bus, html, getTargetsJson, options) {
32073
32099
  const url = req.url ?? "/";
32074
32100
  const path = url.split("?")[0];
32075
32101
  if (req.method === "GET" && (path === "/" || path === "/index.html")) {
@@ -32079,7 +32105,7 @@ function handleRequest(req, res, bus, html, targetsJson, options) {
32079
32105
  }
32080
32106
  if (req.method === "GET" && path === "/api/targets") {
32081
32107
  res.writeHead(200, { "content-type": "application/json; charset=utf-8" });
32082
- res.end(targetsJson);
32108
+ res.end(getTargetsJson());
32083
32109
  return;
32084
32110
  }
32085
32111
  if (req.method === "GET" && path === "/api/running") {
@@ -33680,9 +33706,10 @@ async function prepareEcsImageContexts(args) {
33680
33706
  * the pin resolves, and surfaces a WARN (not a silent DEBUG swallow) when a
33681
33707
  * service still cannot be classified.
33682
33708
  *
33683
- * NOTE: the target list + these pinned flags are computed ONCE at boot. A
33684
- * run-time Session-bar `--from-cfn-stack` change (`PATCH /api/config`) does
33685
- * NOT re-classify restart studio to re-detect pins under a new binding.
33709
+ * The classifier is re-run whenever the Session-bar `--from-cfn-stack` binding
33710
+ * changes (`PATCH /api/config`), so the pickers appear / disappear under the
33711
+ * new binding without restarting studio (issue #385) `classifyTargets`
33712
+ * re-invokes this against a fresh clone of the un-annotated target groups.
33686
33713
  *
33687
33714
  * Returns a `(id) => boolean` callback (true = pinned). Exported for testing.
33688
33715
  */
@@ -33700,7 +33727,7 @@ function makePinClassifier(args) {
33700
33727
  }
33701
33728
  /**
33702
33729
  * Build the boot-time resolver `annotateAlbPinnedBackingServices` calls per
33703
- * `alb` entry (issue #382). It resolves the ALB to its backing ECS services
33730
+ * `alb` entry (issue #384). It resolves the ALB to its backing ECS services
33704
33731
  * (`resolveAlbFrontDoor`, template-only) and returns the subset that is in
33705
33732
  * `pinnedEcsByQualifiedId` — the `ecs` services already classified as a
33706
33733
  * deployed-registry pin by {@link makePinClassifier}. Each returned `id` is the
@@ -33740,6 +33767,86 @@ function makeAlbBackingPinnedResolver(args) {
33740
33767
  }
33741
33768
  };
33742
33769
  }
33770
+ /**
33771
+ * Classify the studio target list for a given `--from-cfn-stack` binding
33772
+ * (issue #385): annotate a FRESH clone of the un-annotated base groups with the
33773
+ * `pinned` (ecs services) + `backingPinnedServices` (alb entries) image-override
33774
+ * hints, and scan the app dir for Dockerfiles when at least one target is
33775
+ * pinned. Returns the annotated groups + dockerfiles; the un-annotated
33776
+ * `baseGroups` argument is left untouched so it can be re-classified under a
33777
+ * different binding (the Session-bar `--from-cfn-stack` change path —
33778
+ * `PATCH /api/config` — re-runs this and swaps the served target list, so the
33779
+ * pickers appear without restarting studio). Runs once at boot and again per
33780
+ * binding change.
33781
+ *
33782
+ * The clone means a re-classify never inherits stale pins; the `fromCfnStack`
33783
+ * override is threaded into the state-source options so the pin classifier
33784
+ * resolves INTRINSIC-ECR images against the right (or no) deployed stack
33785
+ * (issue #354). Exported for unit testing.
33786
+ */
33787
+ async function classifyStudioTargets(args) {
33788
+ const { baseGroups, stacks, servableEcs, options, fromCfnStack, logger } = args;
33789
+ const groups = structuredClone(baseGroups);
33790
+ const classifyOptions = {
33791
+ ...options,
33792
+ fromCfnStack
33793
+ };
33794
+ const anyPinned = annotatePinnedEcsTargets(groups, makePinClassifier({
33795
+ stacks,
33796
+ contextByStack: await prepareEcsImageContexts({
33797
+ serviceIds: [...servableEcs],
33798
+ stacks,
33799
+ options: classifyOptions,
33800
+ logger
33801
+ }),
33802
+ logger
33803
+ }));
33804
+ const pinnedEcsByQualifiedId = /* @__PURE__ */ new Map();
33805
+ for (const g of groups) {
33806
+ if (g.kind !== "ecs") continue;
33807
+ for (const e of g.entries) if (e.pinned) pinnedEcsByQualifiedId.set(e.qualifiedId, e.id);
33808
+ }
33809
+ const anyAlbBackingPinned = annotateAlbPinnedBackingServices(groups, makeAlbBackingPinnedResolver({
33810
+ stacks,
33811
+ pinnedEcsByQualifiedId,
33812
+ logger
33813
+ }));
33814
+ return {
33815
+ groups,
33816
+ dockerfiles: anyPinned || anyAlbBackingPinned ? discoverDockerfiles(process.cwd()) : []
33817
+ };
33818
+ }
33819
+ /**
33820
+ * Re-classify the studio target list when the Session-bar `--from-cfn-stack`
33821
+ * binding changes (issue #385), and swap the served list via `applyTargets`.
33822
+ * The orchestration the `PATCH /api/config` handler runs, extracted so its
33823
+ * branches are unit-testable without booting the studio server:
33824
+ *
33825
+ * - **change gate**: returns immediately when `after === before` (a watch /
33826
+ * assume-role toggle does not change the pin classification);
33827
+ * - **latest-wins**: bumps `tokenRef.current` before the async `classify` and
33828
+ * applies the result ONLY if its token is still current — so a slow earlier
33829
+ * re-classify cannot clobber a newer binding's result when patches arrive in
33830
+ * quick succession;
33831
+ * - **fail-soft**: a `classify` rejection is WARN-logged and the previous
33832
+ * target list is kept (never throws — the PATCH still returns the config).
33833
+ *
33834
+ * `after` (the post-patch binding) is threaded into `classify`, never the boot
33835
+ * value, so the pin classifier resolves against the new stack. Exported for
33836
+ * unit testing.
33837
+ */
33838
+ async function reclassifyTargetsOnBindingChange(args) {
33839
+ const { before, after, classify, applyTargets, tokenRef, logger } = args;
33840
+ if (after === before) return;
33841
+ logger.info("--from-cfn-stack binding changed; re-classifying targets...");
33842
+ const myToken = ++tokenRef.current;
33843
+ try {
33844
+ const { groups, dockerfiles } = await classify(after);
33845
+ if (myToken === tokenRef.current) applyTargets(groups, dockerfiles);
33846
+ } catch (err) {
33847
+ logger.warn(`studio: could not re-classify targets after a --from-cfn-stack change; the target list keeps its previous pins (restart studio to retry). ${err instanceof Error ? err.message : String(err)}`);
33848
+ }
33849
+ }
33743
33850
  async function localStudioCommand(options) {
33744
33851
  const logger = getLogger();
33745
33852
  if (options.verbose) logger.setLevel("debug");
@@ -33776,27 +33883,16 @@ async function localStudioCommand(options) {
33776
33883
  }
33777
33884
  const appLabel = stacks.map((s) => s.stackName).join(", ") || appCmd;
33778
33885
  const servableEcs = new Set(targetGroups.filter((g) => g.kind === "ecs").flatMap((g) => g.entries.filter((e) => e.servable).map((e) => e.id)));
33779
- const anyPinned = annotatePinnedEcsTargets(targetGroups, makePinClassifier({
33780
- stacks,
33781
- contextByStack: await prepareEcsImageContexts({
33782
- serviceIds: [...servableEcs],
33783
- stacks,
33784
- options,
33785
- logger
33786
- }),
33787
- logger
33788
- }));
33789
- const pinnedEcsByQualifiedId = /* @__PURE__ */ new Map();
33790
- for (const g of targetGroups) {
33791
- if (g.kind !== "ecs") continue;
33792
- for (const e of g.entries) if (e.pinned) pinnedEcsByQualifiedId.set(e.qualifiedId, e.id);
33793
- }
33794
- const anyAlbBackingPinned = annotateAlbPinnedBackingServices(targetGroups, makeAlbBackingPinnedResolver({
33886
+ const baseTargetGroups = targetGroups;
33887
+ const classifyTargets = (fromCfnStack) => classifyStudioTargets({
33888
+ baseGroups: baseTargetGroups,
33795
33889
  stacks,
33796
- pinnedEcsByQualifiedId,
33890
+ servableEcs,
33891
+ options,
33892
+ fromCfnStack,
33797
33893
  logger
33798
- }));
33799
- const dockerfiles = anyPinned || anyAlbBackingPinned ? discoverDockerfiles(process.cwd()) : [];
33894
+ });
33895
+ const { groups: initialGroups, dockerfiles: initialDockerfiles } = await classifyTargets(options.fromCfnStack);
33800
33896
  const bus = new StudioEventBus();
33801
33897
  const childConfig = {
33802
33898
  cliEntry: process.argv[1] ?? "",
@@ -33824,11 +33920,13 @@ async function localStudioCommand(options) {
33824
33920
  watch: childConfig.watch
33825
33921
  });
33826
33922
  const store = createStudioStore(bus);
33923
+ let serverRef;
33924
+ const reclassifyToken = { current: 0 };
33827
33925
  const server = await startStudioServer({
33828
33926
  port,
33829
33927
  bus,
33830
- targetGroups,
33831
- dockerfiles,
33928
+ targetGroups: initialGroups,
33929
+ dockerfiles: initialDockerfiles,
33832
33930
  appLabel,
33833
33931
  cliName: getEmbedConfig().cliName,
33834
33932
  store,
@@ -33868,11 +33966,21 @@ async function localStudioCommand(options) {
33868
33966
  },
33869
33967
  getRunning: () => ({ running: serveManager.list() }),
33870
33968
  getConfig: () => sessionConfigSnapshot(),
33871
- patchConfig: (body) => {
33969
+ patchConfig: async (body) => {
33970
+ const beforeFromCfn = childConfig.fromCfnStack;
33872
33971
  applyConfigPatch(body, childConfig);
33873
- return Promise.resolve(sessionConfigSnapshot());
33972
+ await reclassifyTargetsOnBindingChange({
33973
+ before: beforeFromCfn,
33974
+ after: childConfig.fromCfnStack,
33975
+ classify: classifyTargets,
33976
+ applyTargets: (groups, dockerfiles) => serverRef?.setTargets(groups, dockerfiles),
33977
+ tokenRef: reclassifyToken,
33978
+ logger
33979
+ });
33980
+ return sessionConfigSnapshot();
33874
33981
  }
33875
33982
  });
33983
+ serverRef = server;
33876
33984
  const cliName = getEmbedConfig().cliName;
33877
33985
  logger.info(`${cliName} studio is running at ${server.url}`);
33878
33986
  if (childConfig.watch) logger.info("Watch mode: ON — serves started from the UI hot-reload on CDK source changes.");
@@ -33979,4 +34087,4 @@ function addStudioSpecificOptions(cmd) {
33979
34087
 
33980
34088
  //#endregion
33981
34089
  export { createLocalRunTaskCommand as $, buildDisconnectEvent as $n, addStartApiSpecificOptions as $t, matchBehavior as A, applyCorsResponseHeaders as An, webSocketApiMatchesIdentifier as Ar, invokeAgentCoreWs as At, runViewerRequest as B, evaluateResponseParameters as Bn, pickAgentCoreCandidateStack as Br, signAgentCoreInvocation as Bt, createLocalListCommand as C, verifyJwtViaDiscovery as Cn, countTargets as Cr, DEFAULT_SHADOW_READY_TIMEOUT_MS as Ct, createLocalStartCloudFrontCommand as D, invokeRequestAuthorizer as Dn, discoverWebSocketApisOrThrow as Dr, attachContainerLogStreamer as Dt, addStartCloudFrontSpecificOptions as E, evaluateCachedLambdaPolicy as En, discoverWebSocketApis as Er, getContainerNetworkIp as Et, isCloudFrontDistribution as F, matchRoute as Fn, AGENTCORE_AGUI_PROTOCOL as Fr, MCP_PATH as Ft, parseLbPortOverrides as G, HOST_GATEWAY_MIN_VERSION as Gn, tryResolveImageFnJoin as Gr, SUPPORTED_CODE_RUNTIMES as Gt, addAlbSpecificOptions as H, selectIntegrationResponse as Hn, derivePseudoParametersFromRegion as Hr, invokeAgentCore as Ht, pickFunctionUrlLogicalIdFromOrigin as I, translateLambdaResponse as In, AGENTCORE_HTTP_PROTOCOL as Ir, MCP_PROTOCOL_VERSION as It, resolveAlbFrontDoor as J, ConnectionRegistry as Jn, resolveProfileCredentials as Jr, renderCodeDockerfile as Jt, resolveAlbTarget as K, probeHostGatewaySupport as Kn, LocalInvokeBuildError as Kr, buildAgentCoreCodeImage as Kt, pickTargetFunctionLogicalId as L, applyAuthorizerOverlay as Ln, AGENTCORE_MCP_PROTOCOL as Lr, mcpInvokeOnce as Lt, serveFromStaticOrigin as M, buildCorsConfigFromCloudFrontChain as Mn, pickRefLogicalId as Mr, A2A_PATH as Mt, serveLambdaUrlOrigin as N, isFunctionUrlOacFronted as Nn, resolveLambdaArnIntrinsic as Nr, a2aInvokeOnce as Nt, parseOriginOverrides as O, invokeTokenAuthorizer as On, filterWebSocketApisByIdentifiers as Or, addInvokeAgentCoreSpecificOptions as Ot, CLOUDFRONT_DISTRIBUTION_TYPE as P, matchPreflight as Pn, AGENTCORE_A2A_PROTOCOL as Pr, MCP_CONTAINER_PORT as Pt, addRunTaskSpecificOptions as Q, buildConnectEvent as Qn, createLocalInvokeCommand as Qt, resolveCloudFrontDistribution as R, buildHttpApiV2Event as Rn, AGENTCORE_RUNTIME_TYPE as Rr, parseSseForJsonRpc as Rt, addListSpecificOptions as S, verifyJwtAuthorizer as Sn, resolveSingleTarget as Sr, CloudMapRegistry as St, LocalStartCloudFrontError as T, computeRequestIdentityHash as Tn, availableWebSocketApiIdentifiers as Tr, setShadowReadyTimeoutMs as Tt, albStrategy as U, tryParseStatus as Un, formatStateRemedy as Ur, waitForAgentCorePing as Ut, runViewerResponse as V, pickResponseTemplate as Vn, resolveAgentCoreTarget as Vr, AGENTCORE_SESSION_ID_HEADER as Vt, createLocalStartAlbCommand as W, VtlEvaluationError as Wn, substituteImagePlaceholders as Wr, downloadAndExtractS3Bundle as Wt, createLocalStartServiceCommand as X, handleConnectionsRequest as Xn, classifySourceChange as Xt, addStartServiceSpecificOptions as Y, buildMgmtEndpointEnvUrl as Yn, toCmdArgv as Yt, serviceStrategy as Z, parseConnectionsPath as Zn, addInvokeSpecificOptions as Zt, startStudioServer as _, defaultCredentialsLoader as _n, resolveCfnStackName as _r, runImageOverrideBuilds as _t, createLocalStudioCommand as a, attachStageContext as an, resolveRuntimeImage as ar, ecsClusterOption as at, createStudioStore as b, createJwksCache as bn, resolveSsmParameters as br, listPinnedTargets as bt, startStudioProxy as c, resolveEnvVars$1 as cn, substituteAgainstStateAsync as cr, resolveEcsAssumeRoleOption as ct, createStudioDispatcher as d, filterRoutesByApiIdentifiers as dn, LocalStateSourceError as dr, ImageOverrideError as dt, createLocalStartApiCommand as en, buildMessageEvent as er, MAX_TASKS_SUBNET_RANGE_CAP as et, filterStudioCustomResources as f, groupRoutesByServer as fn, createLocalStateProvider as fr, buildImageOverrideTag as ft, filterStudioTargetGroups as g, resolveServiceIntegrationParameters as gn, resolveCfnRegion as gr, resolveImageOverrides as gt, annotatePinnedEcsTargets as h, resolveSelectionExpression as hn, resolveCfnFallbackRegion as hr, parseImageOverrideFlags as ht, coerceStopRequest as i, createFileWatcher as in, resolveRuntimeFileExtension as ir, buildEcsImageResolutionContext$1 as it, startCloudFrontServer as j, buildCorsConfigByApiId as jn, discoverRoutes as jr, A2A_CONTAINER_PORT as jt, resolveCloudFrontTarget as k, attachAuthorizers as kn, parseSelectionExpressionPath as kr, createLocalInvokeAgentCoreCommand as kt, relayServeRequest as l, availableApiIdentifiers as ln, substituteEnvVarsFromState as lr, resolveSharedSidecarCredentials as lt, annotateAlbPinnedBackingServices as m, startApiServer as mn, rejectExplicitCfnStackWithMultipleStacks as mr, mergeForService as mt, coerceRunRequest as n, resolveApiTargetSubset as nn, buildContainerImage as nr, addEcsAssumeRoleOptions as nt, resolveServeBaseUrl as o, buildStageMap as on, EcsTaskResolutionError as or, parseMaxTasks as ot, isCustomResourceLambdaTarget as p, readMtlsMaterialsFromDisk as pn, isCfnFlagPresent as pr, enforceImageOverrideOrphans as pt, isApplicationLoadBalancer as q, bufferToBody as qn, buildStsClientConfig as qr, computeCodeImageTag as qt, coerceServeRequest as r, createAuthorizerCache as rn, resolveRuntimeCodeMountPath as rr, addImageOverrideOptions as rt, createStudioServeManager as s, materializeLayerFromArn as sn, substituteAgainstState as sr, parseRestartPolicy as st, addStudioSpecificOptions as t, createWatchPredicates as tn, architectureToPlatform as tr, addCommonEcsServiceOptions as tt, reinvoke as u, filterRoutesByApiIdentifier as un, substituteEnvVarsFromStateAsync as ur, runEcsServiceEmulator as ut, toStudioTargetGroups as v, buildCognitoJwksUrl as vn, CfnLocalStateProvider as vr, describePinnedImageUri as vt, formatTargetListing as w, buildMethodArn as wn, listTargets as wr, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as wt, StudioEventBus as x, verifyCognitoJwt as xn, resolveWatchConfig as xr, buildCloudMapIndex as xt, renderStudioHtml as y, buildJwksUrlFromIssuer as yn, collectSsmParameterRefs as yr, isLocalCdkAssetImage as yt, compileCloudFrontFunction as z, buildRestV1Event as zn, AgentCoreResolutionError as zr, AGENTCORE_SIGV4_SERVICE as zt };
33982
- //# sourceMappingURL=local-studio-8hdH7a_R.js.map
34090
+ //# sourceMappingURL=local-studio-HtgyKdTW.js.map