cdk-local 0.140.0 → 0.142.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.
@@ -30769,6 +30769,20 @@ function warnUnsupported(distribution) {
30769
30769
  else if (origin.kind === "s3-unresolved") logger.warn(`Origin '${origin.originId}' is an S3 origin with no resolvable local source (no BucketDeployment found, or its source could not be located in the cloud assembly). Pass --from-cfn-stack to serve the deployed bucket from real S3 on demand, or point it at a local directory with --origin ${origin.originId}=<dir>. Requests routed to it return 502.`);
30770
30770
  }
30771
30771
  /**
30772
+ * WARN once at boot when `--cache-origin` is set but `--from-cfn-stack` is not.
30773
+ * `--cache-origin` only feeds the deployed-S3 read-through reader, which is built
30774
+ * exclusively under `--from-cfn-stack` (see {@link resolveDeployedS3Origins}); a
30775
+ * local-BucketDeployment / `--origin <id>=<dir>` distribution serves from disk and
30776
+ * never caches. So without the state flag the flag is a silent no-op — surface that
30777
+ * (loud-but-non-fatal, like the ECR-pin / intrinsic-env-drop WARNs) so the user is
30778
+ * not misled into thinking caching is active. Not an error: `--cache-origin` is
30779
+ * harmless on its own, and in `cdkl studio` the `--from-cfn-stack` binding is
30780
+ * editable per-session, so a hard failure here would be brittle.
30781
+ */
30782
+ function warnUnusedCacheOrigin(options) {
30783
+ if (options.cacheOrigin === true && !isCfnFlagPresent(options)) getLogger().warn("--cache-origin has no effect without --from-cfn-stack: it caches a deployed-S3 read-through origin, which is only built under --from-cfn-stack. A local BucketDeployment / --origin <id>=<dir> origin serves from disk and is not cached. Pass --from-cfn-stack to enable the deployed-S3 origin (then --cache-origin applies), or drop --cache-origin.");
30784
+ }
30785
+ /**
30772
30786
  * Promote each S3 origin with no local BucketDeployment source (`s3-unresolved`)
30773
30787
  * to a deployed-S3 read-through origin (issue #405), building one
30774
30788
  * {@link S3OriginReader} per origin. This is the front/back-split path: the CDK
@@ -30897,6 +30911,7 @@ async function localStartCloudFrontCommand(target, options, extraStateProviders)
30897
30911
  const profileCredentials = options.profile ? await resolveProfileCredentials(options.profile) : void 0;
30898
30912
  const deployedS3 = await resolveDeployedS3Origins(initial.distribution, initial.stacks, options, profileCredentials, logger, extraStateProviders);
30899
30913
  warnUnsupported(initial.distribution);
30914
+ warnUnusedCacheOrigin(options);
30900
30915
  const envOptions = {
30901
30916
  ...options.fromCfnStack !== void 0 && { fromCfnStack: options.fromCfnStack },
30902
30917
  ...options.assumeRole !== void 0 && { assumeRole: options.assumeRole },
@@ -31977,172 +31992,6 @@ function createStudioStore(bus, options = {}) {
31977
31992
  };
31978
31993
  }
31979
31994
 
31980
- //#endregion
31981
- //#region src/local/studio-option-catalog.ts
31982
- /**
31983
- * Auto-derived full-flag catalog for `cdkl studio` (issue #301).
31984
- *
31985
- * The per-target {@link OPTION_SPECS} in `studio-option-specs.ts` is a
31986
- * CURATED subset — the handful of flags worth a rich control (a checkbox, a
31987
- * KV editor, an add-row list). But a command like `cdkl start-api` accepts
31988
- * many more flags than studio renders a control for, and hiding them makes
31989
- * the UI strictly less capable than the headless CLI.
31990
- *
31991
- * This module closes that gap by INTROSPECTING each runnable kind's Commander
31992
- * command factory and emitting the complete flag list (name + description).
31993
- * The studio UI serializes it into the page and renders, inside a collapsed
31994
- * "All options" section, (a) the full catalog as a read-only reference and
31995
- * (b) a raw extra-args input (see {@link tokenizeRawArgs}) so any flag the
31996
- * curated controls don't expose can still be passed verbatim. Auto-derivation
31997
- * means the catalog can never drift from the command's real option set.
31998
- *
31999
- * Session-global flags (handled by the studio Session bar / `studio-child-args`)
32000
- * and the auto-added `--help` / `--version` are excluded — passing them per-run
32001
- * would conflict with the session-wide wiring.
32002
- */
32003
- /**
32004
- * Long flag names handled by the session bar / `studio-child-args` (forwarded
32005
- * to every spawned child once, session-wide). Excluded from the per-target
32006
- * catalog so a user does not re-specify them per-run and collide with the
32007
- * session-wide value. Plus the Commander-managed `--help` / `--version`.
32008
- */
32009
- const CATALOG_EXCLUDED_FLAGS = new Set([
32010
- "--app",
32011
- "--profile",
32012
- "--region",
32013
- "--context",
32014
- "--from-cfn-stack",
32015
- "--assume-role",
32016
- "--help",
32017
- "--version"
32018
- ]);
32019
- const KIND_FACTORIES = {
32020
- lambda: {
32021
- command: "invoke",
32022
- factory: createLocalInvokeCommand
32023
- },
32024
- agentcore: {
32025
- command: "invoke-agentcore",
32026
- factory: createLocalInvokeAgentCoreCommand
32027
- },
32028
- api: {
32029
- command: "start-api",
32030
- factory: createLocalStartApiCommand
32031
- },
32032
- alb: {
32033
- command: "start-alb",
32034
- factory: createLocalStartAlbCommand
32035
- },
32036
- ecs: {
32037
- command: "start-service",
32038
- factory: createLocalStartServiceCommand
32039
- },
32040
- "ecs-task": {
32041
- command: "run-task",
32042
- factory: createLocalRunTaskCommand
32043
- },
32044
- cloudfront: {
32045
- command: "start-cloudfront",
32046
- factory: createLocalStartCloudFrontCommand
32047
- },
32048
- "agentcore-ws": {
32049
- command: "start-agentcore",
32050
- factory: createLocalStartAgentCoreCommand
32051
- }
32052
- };
32053
- let cached;
32054
- /**
32055
- * Build (and memoize) the full per-kind flag catalog by introspecting each
32056
- * runnable kind's Commander command factory.
32057
- *
32058
- * Each factory calls `setEmbedConfig(opts.embedConfig)` at construction — with
32059
- * no opts that resets the active embed config to cdk-local defaults, which
32060
- * would wipe a host CLI's branding. So the active config is snapshotted and
32061
- * each factory is re-handed it: branding is preserved AND the derived flag
32062
- * descriptions reflect the host's active branding. The `finally` restore is a
32063
- * belt-and-suspenders against a factory that ignores the passed config.
32064
- * Memoized: the factories are instantiated exactly once per process, not per
32065
- * page render.
32066
- */
32067
- function buildFlagCatalog() {
32068
- if (cached) return cached;
32069
- const savedEmbedConfig = getEmbedConfig();
32070
- try {
32071
- const out = {};
32072
- for (const kind of Object.keys(KIND_FACTORIES)) {
32073
- const { command, factory } = KIND_FACTORIES[kind];
32074
- const cmd = factory({ embedConfig: savedEmbedConfig });
32075
- const flags = [];
32076
- for (const opt of cmd.options) {
32077
- if (opt.hidden) continue;
32078
- if (opt.long && CATALOG_EXCLUDED_FLAGS.has(opt.long)) continue;
32079
- flags.push({
32080
- flags: opt.flags,
32081
- description: opt.description ?? ""
32082
- });
32083
- }
32084
- out[kind] = {
32085
- command,
32086
- flags
32087
- };
32088
- }
32089
- cached = out;
32090
- return out;
32091
- } finally {
32092
- setEmbedConfig(savedEmbedConfig);
32093
- }
32094
- }
32095
- /**
32096
- * Tokenize a raw extra-args string into discrete argv elements, honoring
32097
- * single / double quotes and backslash escaping so values with spaces survive
32098
- * (`--name "two words"` -> `['--name', 'two words']`). studio spawns children
32099
- * WITHOUT a shell (argv array), so the tokens are appended verbatim — there is
32100
- * no shell-injection surface; the child command still validates each arg.
32101
- *
32102
- * Returns `[]` for an empty / whitespace-only input. Throws on an unterminated
32103
- * quote so a malformed raw-args string fails as a clean boundary error rather
32104
- * than spawning a child with a mis-split argv.
32105
- */
32106
- function tokenizeRawArgs(raw) {
32107
- if (raw === void 0) return [];
32108
- const tokens = [];
32109
- let current = "";
32110
- let inToken = false;
32111
- let quote = null;
32112
- for (let i = 0; i < raw.length; i++) {
32113
- const ch = raw[i];
32114
- if (quote) {
32115
- if (ch === "\\" && quote === "\"" && i + 1 < raw.length) current += raw[++i];
32116
- else if (ch === quote) quote = null;
32117
- else current += ch;
32118
- continue;
32119
- }
32120
- if (ch === "\"" || ch === "'") {
32121
- quote = ch;
32122
- inToken = true;
32123
- continue;
32124
- }
32125
- if (ch === "\\" && i + 1 < raw.length) {
32126
- current += raw[++i];
32127
- inToken = true;
32128
- continue;
32129
- }
32130
- if (ch === " " || ch === " " || ch === "\n" || ch === "\r") {
32131
- if (inToken) {
32132
- tokens.push(current);
32133
- current = "";
32134
- inToken = false;
32135
- }
32136
- continue;
32137
- }
32138
- current += ch;
32139
- inToken = true;
32140
- }
32141
- if (quote) throw new Error(`Raw extra args have an unterminated ${quote} quote.`);
32142
- if (inToken) tokens.push(current);
32143
- return tokens;
32144
- }
32145
-
32146
31995
  //#endregion
32147
31996
  //#region src/local/studio-option-specs.ts
32148
31997
  /**
@@ -32446,6 +32295,264 @@ function resolveEnvVars(kind, values) {
32446
32295
  throw new Error(`Option '${spec.flag}' must be KEY/VALUE rows or a JSON object string.`);
32447
32296
  }
32448
32297
 
32298
+ //#endregion
32299
+ //#region src/local/studio-option-catalog.ts
32300
+ /**
32301
+ * Auto-derived full-flag catalog for `cdkl studio` (issue #301).
32302
+ *
32303
+ * The per-target {@link OPTION_SPECS} in `studio-option-specs.ts` is a
32304
+ * CURATED subset — the handful of flags worth a rich control (a checkbox, a
32305
+ * KV editor, an add-row list). But a command like `cdkl start-api` accepts
32306
+ * many more flags than studio renders a control for, and hiding them makes
32307
+ * the UI strictly less capable than the headless CLI.
32308
+ *
32309
+ * This module closes that gap by INTROSPECTING each runnable kind's Commander
32310
+ * command factory and emitting the complete flag list (name + description).
32311
+ * The studio UI serializes it into the page and renders, inside a collapsed
32312
+ * "All options" section, (a) the full catalog as a read-only reference and
32313
+ * (b) a raw extra-args input (see {@link tokenizeRawArgs}) so any flag the
32314
+ * curated controls don't expose can still be passed verbatim. Auto-derivation
32315
+ * means the catalog can never drift from the command's real option set.
32316
+ *
32317
+ * Session-global flags (handled by the studio Session bar / `studio-child-args`)
32318
+ * and the auto-added `--help` / `--version` are excluded — passing them per-run
32319
+ * would conflict with the session-wide wiring.
32320
+ */
32321
+ /**
32322
+ * Long flag names handled by the session bar / `studio-child-args` (forwarded
32323
+ * to every spawned child once, session-wide). Excluded from the per-target
32324
+ * catalog so a user does not re-specify them per-run and collide with the
32325
+ * session-wide value. Plus the Commander-managed `--help` / `--version`.
32326
+ */
32327
+ const CATALOG_EXCLUDED_FLAGS = new Set([
32328
+ "--app",
32329
+ "--profile",
32330
+ "--region",
32331
+ "--context",
32332
+ "--from-cfn-stack",
32333
+ "--assume-role",
32334
+ "--help",
32335
+ "--version"
32336
+ ]);
32337
+ /**
32338
+ * Long flags studio INJECTS or binds itself per run, so the "All options"
32339
+ * section must NOT auto-render an editable control for them (a user-set value
32340
+ * would collide with — or break — studio's own wiring). They still appear in
32341
+ * the catalog (so it stays a complete reference), just `renderable: false`; a
32342
+ * power user can still force one via the raw extra-args input, which is
32343
+ * appended last.
32344
+ *
32345
+ * - `--event` / `--response-file`: studio writes the composed event /
32346
+ * response-capture file and passes these itself (the invoke kinds).
32347
+ * - `--host` / `--port`: the serve-manager binds the listen host/port and the
32348
+ * capture proxy fronts it; a user override would desync the proxy URL.
32349
+ * - `--watch`: the session-global Session-bar toggle (appended by the
32350
+ * serve-manager from the mutable config), not a per-run flag.
32351
+ * - the `--image-*` override family: handled by the dedicated Dockerfile
32352
+ * picker (a partial control here would produce a half-wired override).
32353
+ */
32354
+ const CATALOG_MANAGED_FLAGS = new Set([
32355
+ "--event",
32356
+ "--response-file",
32357
+ "--host",
32358
+ "--port",
32359
+ "--watch",
32360
+ "--image-override",
32361
+ "--image-build-arg",
32362
+ "--image-build-secret",
32363
+ "--image-target",
32364
+ "--no-interactive-overrides",
32365
+ "--strict-overrides"
32366
+ ]);
32367
+ const KIND_FACTORIES = {
32368
+ lambda: {
32369
+ command: "invoke",
32370
+ factory: createLocalInvokeCommand
32371
+ },
32372
+ agentcore: {
32373
+ command: "invoke-agentcore",
32374
+ factory: createLocalInvokeAgentCoreCommand
32375
+ },
32376
+ api: {
32377
+ command: "start-api",
32378
+ factory: createLocalStartApiCommand
32379
+ },
32380
+ alb: {
32381
+ command: "start-alb",
32382
+ factory: createLocalStartAlbCommand
32383
+ },
32384
+ ecs: {
32385
+ command: "start-service",
32386
+ factory: createLocalStartServiceCommand
32387
+ },
32388
+ "ecs-task": {
32389
+ command: "run-task",
32390
+ factory: createLocalRunTaskCommand
32391
+ },
32392
+ cloudfront: {
32393
+ command: "start-cloudfront",
32394
+ factory: createLocalStartCloudFrontCommand
32395
+ },
32396
+ "agentcore-ws": {
32397
+ command: "start-agentcore",
32398
+ factory: createLocalStartAgentCoreCommand
32399
+ }
32400
+ };
32401
+ let cached;
32402
+ /**
32403
+ * Parse the value-token placeholder out of a Commander flags string for a
32404
+ * value-taking option: `-e, --event <file>` -> `file`,
32405
+ * `--platform <platform>` -> `platform`, `--lb-port <listener=host>` ->
32406
+ * `listener=host`. The trailing `...` of a variadic token is dropped. Returns
32407
+ * undefined for a boolean flag (no `<...>` / `[...]` token), so the input
32408
+ * placeholder falls back to a generic hint.
32409
+ */
32410
+ function parseFlagPlaceholder(flags) {
32411
+ const m = /[<[]([^>\]]+)[>\]]/.exec(flags);
32412
+ if (!m || m[1] === void 0) return void 0;
32413
+ return m[1].replace(/\.\.\.$/, "").trim() || void 0;
32414
+ }
32415
+ /**
32416
+ * Build (and memoize) the full per-kind flag catalog by introspecting each
32417
+ * runnable kind's Commander command factory.
32418
+ *
32419
+ * Each factory calls `setEmbedConfig(opts.embedConfig)` at construction — with
32420
+ * no opts that resets the active embed config to cdk-local defaults, which
32421
+ * would wipe a host CLI's branding. So the active config is snapshotted and
32422
+ * each factory is re-handed it: branding is preserved AND the derived flag
32423
+ * descriptions reflect the host's active branding. The `finally` restore is a
32424
+ * belt-and-suspenders against a factory that ignores the passed config.
32425
+ * Memoized: the factories are instantiated exactly once per process, not per
32426
+ * page render.
32427
+ */
32428
+ function buildFlagCatalog() {
32429
+ if (cached) return cached;
32430
+ const savedEmbedConfig = getEmbedConfig();
32431
+ try {
32432
+ const out = {};
32433
+ for (const kind of Object.keys(KIND_FACTORIES)) {
32434
+ const { command, factory } = KIND_FACTORIES[kind];
32435
+ const cmd = factory({ embedConfig: savedEmbedConfig });
32436
+ const curated = new Set((OPTION_SPECS[kind] ?? []).map((s) => s.flag));
32437
+ const flags = [];
32438
+ for (const opt of cmd.options) {
32439
+ if (opt.hidden) continue;
32440
+ if (opt.long && CATALOG_EXCLUDED_FLAGS.has(opt.long)) continue;
32441
+ const long = opt.long ?? "";
32442
+ const takesValue = Boolean(opt.required || opt.optional);
32443
+ const negate = Boolean(opt.negate);
32444
+ const variadic = Boolean(opt.variadic);
32445
+ const choices = Array.isArray(opt.argChoices) ? [...opt.argChoices] : void 0;
32446
+ const placeholder = parseFlagPlaceholder(opt.flags);
32447
+ const renderable = long !== "" && !curated.has(long) && !CATALOG_MANAGED_FLAGS.has(long);
32448
+ const info = {
32449
+ flags: opt.flags,
32450
+ description: opt.description ?? "",
32451
+ long,
32452
+ takesValue,
32453
+ negate,
32454
+ variadic,
32455
+ renderable
32456
+ };
32457
+ if (placeholder !== void 0) info.placeholder = placeholder;
32458
+ if (choices) info.choices = choices;
32459
+ flags.push(info);
32460
+ }
32461
+ out[kind] = {
32462
+ command,
32463
+ flags
32464
+ };
32465
+ }
32466
+ cached = out;
32467
+ return out;
32468
+ } finally {
32469
+ setEmbedConfig(savedEmbedConfig);
32470
+ }
32471
+ }
32472
+ /**
32473
+ * Tokenize a raw extra-args string into discrete argv elements, honoring
32474
+ * single / double quotes and backslash escaping so values with spaces survive
32475
+ * (`--name "two words"` -> `['--name', 'two words']`). studio spawns children
32476
+ * WITHOUT a shell (argv array), so the tokens are appended verbatim — there is
32477
+ * no shell-injection surface; the child command still validates each arg.
32478
+ *
32479
+ * Returns `[]` for an empty / whitespace-only input. Throws on an unterminated
32480
+ * quote so a malformed raw-args string fails as a clean boundary error rather
32481
+ * than spawning a child with a mis-split argv.
32482
+ */
32483
+ function tokenizeRawArgs(raw) {
32484
+ if (raw === void 0) return [];
32485
+ const tokens = [];
32486
+ let current = "";
32487
+ let inToken = false;
32488
+ let quote = null;
32489
+ for (let i = 0; i < raw.length; i++) {
32490
+ const ch = raw[i];
32491
+ if (quote) {
32492
+ if (ch === "\\" && quote === "\"" && i + 1 < raw.length) current += raw[++i];
32493
+ else if (ch === quote) quote = null;
32494
+ else current += ch;
32495
+ continue;
32496
+ }
32497
+ if (ch === "\"" || ch === "'") {
32498
+ quote = ch;
32499
+ inToken = true;
32500
+ continue;
32501
+ }
32502
+ if (ch === "\\" && i + 1 < raw.length) {
32503
+ current += raw[++i];
32504
+ inToken = true;
32505
+ continue;
32506
+ }
32507
+ if (ch === " " || ch === " " || ch === "\n" || ch === "\r") {
32508
+ if (inToken) {
32509
+ tokens.push(current);
32510
+ current = "";
32511
+ inToken = false;
32512
+ }
32513
+ continue;
32514
+ }
32515
+ current += ch;
32516
+ inToken = true;
32517
+ }
32518
+ if (quote) throw new Error(`Raw extra args have an unterminated ${quote} quote.`);
32519
+ if (inToken) tokens.push(current);
32520
+ return tokens;
32521
+ }
32522
+ /**
32523
+ * Build the argv fragment for the auto-rendered "All options" controls from the
32524
+ * UI-posted {@link CatalogValues}, validating each key against the kind's flag
32525
+ * catalog. Emits `--flag` for a checked boolean (bare/negate) flag and
32526
+ * `--flag <value>` for a non-empty value flag. Blank / false values are
32527
+ * omitted.
32528
+ *
32529
+ * Throws (→ a clean 400 at the `/api/run` boundary) on a key that is not a
32530
+ * RENDERABLE catalog flag for the kind — an unknown flag, a session-global /
32531
+ * studio-managed flag, or a curated flag (which belongs to the `options` path,
32532
+ * not here). The studio UI only ever posts renderable flags; the validation
32533
+ * guards a hand-rolled curl body. studio spawns children WITHOUT a shell, so
32534
+ * each emitted token is a discrete argv element with no injection surface.
32535
+ */
32536
+ function buildCatalogArgs(kind, values) {
32537
+ if (values === void 0) return [];
32538
+ const catalog = buildFlagCatalog()[kind];
32539
+ const byFlag = new Map((catalog?.flags ?? []).filter((f) => f.renderable).map((f) => [f.long, f]));
32540
+ const args = [];
32541
+ for (const [flag, value] of Object.entries(values)) {
32542
+ const info = byFlag.get(flag);
32543
+ if (!info) throw new Error(`Unknown / non-overridable option '${flag}' for target kind '${kind}'.`);
32544
+ if (info.takesValue) {
32545
+ if (typeof value !== "string") throw new Error(`Option '${flag}' must be a string value.`);
32546
+ const trimmed = value.trim();
32547
+ if (trimmed !== "") args.push(flag, trimmed);
32548
+ } else {
32549
+ if (typeof value !== "boolean") throw new Error(`Option '${flag}' must be a boolean.`);
32550
+ if (value) args.push(flag);
32551
+ }
32552
+ }
32553
+ return args;
32554
+ }
32555
+
32449
32556
  //#endregion
32450
32557
  //#region src/local/studio-ui.ts
32451
32558
  /**
@@ -32781,10 +32888,18 @@ const STUDIO_CSS = `
32781
32888
  read — kept small as it is secondary. */
32782
32889
  .io-label { color: #d7dde5; font-weight: 500; overflow-wrap: anywhere; min-width: 0; }
32783
32890
  .io-hint { color: #e3b34a; font-size: 11px; }
32784
- .flag-catalog { margin-top: 8px; display: flex; flex-direction: column; gap: 2px; }
32785
- .flag-row { display: flex; gap: 8px; align-items: baseline; font-size: 11px; }
32786
- .flag-name { color: #7bd88f; font-family: ui-monospace, Menlo, monospace; white-space: nowrap; }
32787
- .flag-desc { color: #999; }
32891
+ /* Auto-rendered controls for the residual (non-curated) command flags in the
32892
+ "All options" section: one stacked row per flag (label + input/select +
32893
+ description hint), styled to match the curated .options controls. */
32894
+ .flag-controls { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; }
32895
+ .all-options input.flag-control, .all-options select.flag-control {
32896
+ width: 100%; box-sizing: border-box; background: #111; color: #ddd; border: 1px solid #333;
32897
+ border-radius: 3px; padding: 4px 6px; font: 12px ui-monospace, Menlo, monospace;
32898
+ }
32899
+ .all-options input.flag-control:focus, .all-options select.flag-control:focus {
32900
+ outline: none; border-color: #4ec97a;
32901
+ }
32902
+ .all-options .opt-label { color: #9aa4ad; }
32788
32903
  .started-list { display: flex; flex-direction: column; gap: 3px; margin-top: 4px; }
32789
32904
  .started-flag { color: #7bd88f; font-family: ui-monospace, Menlo, monospace; font-size: 11px; white-space: pre-wrap; word-break: break-all; }
32790
32905
  .envkv-modes { display: flex; gap: 0; }
@@ -32878,7 +32993,7 @@ const STUDIO_SCRIPT = `
32878
32993
  // prefill (issue #398): the option map a stopped serve was last Started with
32879
32994
  // (serveApplied.options), so the re-rendered composer comes back filled.
32880
32995
  // rawPrefill is the raw-extra-args string (serveApplied.rawArgs).
32881
- function buildOptions(kind, prefill, rawPrefill) {
32996
+ function buildOptions(kind, prefill, rawPrefill, catalogPrefill) {
32882
32997
  const specs = OPTION_SPECS[kind] || [];
32883
32998
  // The composer always shows an "All options" section (raw extra args + the
32884
32999
  // auto-derived flag reference), even for kinds with no curated controls.
@@ -33029,7 +33144,7 @@ const STUDIO_SCRIPT = `
33029
33144
  }
33030
33145
  sec.appendChild(row);
33031
33146
  });
33032
- const allOpts = buildAllOptions(kind, rawPrefill);
33147
+ const allOpts = buildAllOptions(kind, rawPrefill, catalogPrefill);
33033
33148
  wrap.appendChild(allOpts.node);
33034
33149
  return {
33035
33150
  node: wrap,
@@ -33041,22 +33156,97 @@ const STUDIO_SCRIPT = `
33041
33156
  // body identical to before this section existed.
33042
33157
  return Object.keys(out).length ? out : undefined;
33043
33158
  },
33159
+ collectCatalog: allOpts.collectCatalog,
33044
33160
  collectRaw: allOpts.collectRaw,
33045
33161
  };
33046
33162
  }
33047
33163
 
33048
- // The collapsed "All options" section: a raw extra-args input (appended
33049
- // verbatim to the spawned child) + the auto-derived, read-only catalog of
33050
- // every flag the underlying command accepts. The curated controls above
33051
- // cover the common flags with rich UI; this exposes the rest so the studio
33052
- // UI is never strictly less capable than the headless CLI (issue #301).
33164
+ // The collapsed "All options" section. The curated controls above cover the
33165
+ // common flags with rich UI; this section auto-renders a real control
33166
+ // (checkbox / input / select) for EVERY other flag the underlying command
33167
+ // accepts (the catalog's renderable flags), so the studio UI is never
33168
+ // strictly less capable than the headless CLI AND a user does not have to
33169
+ // hand-type "--flag value" for the long tail of simple flags. A raw
33170
+ // extra-args input remains as the final escape hatch for anything the
33171
+ // auto-render cannot express (issue #301 + the all-options-controls slice).
33053
33172
  const FLAG_CATALOG = window.__FLAG_CATALOG__ || {};
33054
33173
 
33055
- function buildAllOptions(kind, rawPrefill) {
33174
+ function buildAllOptions(kind, rawPrefill, catalogPrefill) {
33056
33175
  const cat = FLAG_CATALOG[kind] || { command: '', flags: [] };
33057
33176
  const det = el('details', 'all-options');
33058
33177
  det.appendChild(el('summary', null, 'All options'));
33059
33178
 
33179
+ // Auto-rendered controls for every renderable (non-curated, non-managed)
33180
+ // flag. The collected value map is keyed by the long flag.
33181
+ const catGetters = [];
33182
+ const renderable = (cat.flags || []).filter(function (f) {
33183
+ return f.renderable;
33184
+ });
33185
+ const preCat = function (flag) {
33186
+ return catalogPrefill ? catalogPrefill[flag] : undefined;
33187
+ };
33188
+ if (renderable.length) {
33189
+ const grid = el('div', 'flag-controls');
33190
+ renderable.forEach(function (f) {
33191
+ const row = el('div', 'opt-row opt-col');
33192
+ if (!f.takesValue) {
33193
+ // Boolean (bare / negate) flag -> checkbox; emits the bare flag.
33194
+ const cb = el('input');
33195
+ cb.type = 'checkbox';
33196
+ if (preCat(f.long) === true) {
33197
+ cb.checked = true;
33198
+ det.open = true;
33199
+ }
33200
+ const lab = el('label', 'opt-bool');
33201
+ lab.appendChild(cb);
33202
+ lab.appendChild(document.createTextNode(' ' + f.long));
33203
+ row.appendChild(lab);
33204
+ catGetters.push(function () {
33205
+ return [f.long, cb.checked];
33206
+ });
33207
+ } else if (f.choices && f.choices.length) {
33208
+ // Value flag with a fixed choice set -> select (blank = unset).
33209
+ row.appendChild(el('span', 'opt-label', f.long));
33210
+ const sel = el('select', 'flag-control');
33211
+ const none = el('option', null, '(default)');
33212
+ none.value = '';
33213
+ sel.appendChild(none);
33214
+ f.choices.forEach(function (c) {
33215
+ const o = el('option', null, c);
33216
+ o.value = c;
33217
+ sel.appendChild(o);
33218
+ });
33219
+ const pv = preCat(f.long);
33220
+ if (pv != null && pv !== '') {
33221
+ sel.value = String(pv);
33222
+ det.open = true;
33223
+ }
33224
+ row.appendChild(sel);
33225
+ catGetters.push(function () {
33226
+ return [f.long, sel.value];
33227
+ });
33228
+ } else {
33229
+ // Value flag -> text input. The placeholder is the flag's own value
33230
+ // token (e.g. file, from the flags' angle-bracket token).
33231
+ row.appendChild(el('span', 'opt-label', f.long));
33232
+ const inp = el('input', 'flag-control');
33233
+ inp.placeholder = f.placeholder || 'value';
33234
+ const pv = preCat(f.long);
33235
+ if (pv != null && pv !== '') {
33236
+ inp.value = String(pv);
33237
+ det.open = true;
33238
+ }
33239
+ row.appendChild(inp);
33240
+ catGetters.push(function () {
33241
+ return [f.long, inp.value];
33242
+ });
33243
+ }
33244
+ if (f.description) row.appendChild(el('div', 'opt-hint', f.description));
33245
+ grid.appendChild(row);
33246
+ });
33247
+ det.appendChild(grid);
33248
+ }
33249
+
33060
33250
  const rawRow = el('div', 'opt-row opt-col');
33061
33251
  rawRow.appendChild(el('span', 'opt-label', 'Raw extra args'));
33062
33252
  const rawIn = el('input', 'raw-args');
@@ -33073,20 +33263,25 @@ const STUDIO_SCRIPT = `
33073
33263
  rawRow.appendChild(el('div', 'opt-hint', hint));
33074
33264
  det.appendChild(rawRow);
33075
33265
 
33076
- if (cat.flags.length) {
33077
- const ref = el('div', 'flag-catalog');
33078
- ref.appendChild(el('div', 'opt-label', 'Available flags'));
33079
- cat.flags.forEach(function (f) {
33080
- const row = el('div', 'flag-row');
33081
- row.appendChild(el('code', 'flag-name', f.flags));
33082
- if (f.description) row.appendChild(el('span', 'flag-desc', f.description));
33083
- ref.appendChild(row);
33084
- });
33085
- det.appendChild(ref);
33086
- }
33087
-
33088
33266
  return {
33089
33267
  node: det,
33268
+ // Collect the auto-rendered control values, omitting unset ones (an
33269
+ // unchecked checkbox / a blank input or select) so the posted map carries
33270
+ // only flags the user actually set. Returns undefined when nothing is set.
33271
+ collectCatalog: function () {
33272
+ const out = {};
33273
+ catGetters.forEach(function (g) {
33274
+ const kv = g();
33275
+ const flag = kv[0];
33276
+ const val = kv[1];
33277
+ if (typeof val === 'boolean') {
33278
+ if (val) out[flag] = true;
33279
+ } else if (typeof val === 'string' && val.trim() !== '') {
33280
+ out[flag] = val.trim();
33281
+ }
33282
+ });
33283
+ return Object.keys(out).length ? out : undefined;
33284
+ },
33090
33285
  collectRaw: function () {
33091
33286
  const v = rawIn.value.trim();
33092
33287
  return v === '' ? undefined : v;
@@ -33505,6 +33700,16 @@ const STUDIO_SCRIPT = `
33505
33700
  }
33506
33701
  });
33507
33702
  }
33703
+ // Auto-rendered "All options" controls (the catalog flags). Surface each
33704
+ // set flag so the running view does not look like the picks vanished (the
33705
+ // issue #356 contract): the bare flag for a checked boolean, flag + value
33706
+ // otherwise.
33707
+ if (applied && applied.catalogArgs) {
33708
+ Object.keys(applied.catalogArgs).forEach(function (flag) {
33709
+ const v = applied.catalogArgs[flag];
33710
+ lines.push(v === true ? flag : flag + ' ' + v);
33711
+ });
33712
+ }
33508
33713
  if (applied && applied.imageOverride) {
33509
33714
  lines.push('--image-override ' + applied.imageOverride);
33510
33715
  }
@@ -33523,7 +33728,7 @@ const STUDIO_SCRIPT = `
33523
33728
  return lines;
33524
33729
  }
33525
33730
 
33526
- async function startServe(id, options, rawArgs, imageOverride, imageOverrides) {
33731
+ async function startServe(id, options, catalogArgs, rawArgs, imageOverride, imageOverrides) {
33527
33732
  // The serve kind (api / alb / ecs) drives which headless command the
33528
33733
  // server spawns; it is recorded on the row when the target list loads.
33529
33734
  const meta = serveMeta.get(id);
@@ -33539,6 +33744,7 @@ const STUDIO_SCRIPT = `
33539
33744
  const watchEl = document.getElementById('sess-watch');
33540
33745
  serveApplied.set(id, {
33541
33746
  options: options,
33747
+ catalogArgs: catalogArgs,
33542
33748
  rawArgs: rawArgs,
33543
33749
  imageOverride: imageOverride,
33544
33750
  imageOverrides: imageOverrides,
@@ -33553,6 +33759,7 @@ const STUDIO_SCRIPT = `
33553
33759
  try {
33554
33760
  const body = { targetId: id, kind };
33555
33761
  if (options) body.options = options;
33762
+ if (catalogArgs) body.catalogArgs = catalogArgs;
33556
33763
  if (rawArgs) body.rawArgs = rawArgs;
33557
33764
  if (imageOverride) body.imageOverride = imageOverride;
33558
33765
  if (imageOverrides) body.imageOverrides = imageOverrides;
@@ -33659,6 +33866,7 @@ const STUDIO_SCRIPT = `
33659
33866
  }
33660
33867
  // Per-run options are only set before a start; collected on the Start click.
33661
33868
  let collectOpts = function () { return undefined; };
33869
+ let collectCatalog = function () { return undefined; };
33662
33870
  let collectRaw = function () { return undefined; };
33663
33871
  let collectImageOverride = function () { return undefined; };
33664
33872
  let collectImageOverrides = function () { return undefined; };
@@ -33672,7 +33880,14 @@ const STUDIO_SCRIPT = `
33672
33880
  serveState.set(id, { status: 'stopped', endpoints: [] });
33673
33881
  renderServeWorkspace(id);
33674
33882
  } else {
33675
- startServe(id, collectOpts(), collectRaw(), collectImageOverride(), collectImageOverrides());
33883
+ startServe(
33884
+ id,
33885
+ collectOpts(),
33886
+ collectCatalog(),
33887
+ collectRaw(),
33888
+ collectImageOverride(),
33889
+ collectImageOverrides()
33890
+ );
33676
33891
  }
33677
33892
  };
33678
33893
  head.appendChild(btn);
@@ -33712,9 +33927,15 @@ const STUDIO_SCRIPT = `
33712
33927
  ws.appendChild(io.node);
33713
33928
  collectImageOverrides = io.collect;
33714
33929
  }
33715
- const opt = buildOptions(kind, applied && applied.options, applied && applied.rawArgs);
33930
+ const opt = buildOptions(
33931
+ kind,
33932
+ applied && applied.options,
33933
+ applied && applied.rawArgs,
33934
+ applied && applied.catalogArgs
33935
+ );
33716
33936
  if (opt.node) ws.appendChild(opt.node);
33717
33937
  collectOpts = opt.collect;
33938
+ collectCatalog = opt.collectCatalog;
33718
33939
  collectRaw = opt.collectRaw;
33719
33940
  }
33720
33941
 
@@ -34333,7 +34554,7 @@ const STUDIO_SCRIPT = `
34333
34554
  // target; per-run options are not carried over, so the options section is
34334
34555
  // omitted (the payload is the thing being tweaked). A fresh invoke keeps
34335
34556
  // the per-run options (e.g. env vars) below the event, above Invoke.
34336
- let opt = { collect: undefined, collectRaw: undefined };
34557
+ let opt = { collect: undefined, collectCatalog: undefined, collectRaw: undefined };
34337
34558
  if (reinvokeOf) {
34338
34559
  composer.appendChild(
34339
34560
  el('div', 'opt-hint', 'Re-invoke runs the edited event through the same target (per-run options use defaults).')
@@ -34361,6 +34582,7 @@ const STUDIO_SCRIPT = `
34361
34582
  msg,
34362
34583
  result,
34363
34584
  collectOpts: opt.collect,
34585
+ collectCatalog: opt.collectCatalog,
34364
34586
  collectRaw: opt.collectRaw,
34365
34587
  reinvokeOf: reinvokeOf || null,
34366
34588
  };
@@ -34399,6 +34621,8 @@ const STUDIO_SCRIPT = `
34399
34621
  body = { targetId: id, kind, event };
34400
34622
  const options = active.collectOpts ? active.collectOpts() : undefined;
34401
34623
  if (options) body.options = options;
34624
+ const catalogArgs = active.collectCatalog ? active.collectCatalog() : undefined;
34625
+ if (catalogArgs) body.catalogArgs = catalogArgs;
34402
34626
  const rawArgs = active.collectRaw ? active.collectRaw() : undefined;
34403
34627
  if (rawArgs) body.rawArgs = rawArgs;
34404
34628
  }
@@ -35593,6 +35817,7 @@ function createStudioDispatcher(config) {
35593
35817
  eventFile,
35594
35818
  ...buildSharedChildArgs(config, { preferAssembly: true }),
35595
35819
  ...buildPerRunArgs(req.kind, req.options),
35820
+ ...buildCatalogArgs(req.kind, req.catalogArgs),
35596
35821
  ...responseFilePath ? ["--response-file", responseFilePath] : []
35597
35822
  ];
35598
35823
  const envVars = resolveEnvVars(req.kind, req.options);
@@ -36259,6 +36484,7 @@ function createStudioServeManager(config) {
36259
36484
  ...spec.portArgs,
36260
36485
  ...buildSharedChildArgs(config, { preferAssembly }),
36261
36486
  ...buildPerRunArgs(req.kind, req.options),
36487
+ ...buildCatalogArgs(req.kind, req.catalogArgs),
36262
36488
  ...envFile ? ["--env-vars", envFile] : [],
36263
36489
  ...req.imageOverride && req.imageOverride.trim() !== "" ? ["--image-override", req.targetId + "=" + req.imageOverride.trim()] : [],
36264
36490
  ...Object.entries(req.imageOverrides ?? {}).flatMap(([svc, df]) => df && df.trim() !== "" ? ["--image-override", svc + "=" + df.trim()] : []),
@@ -36525,7 +36751,7 @@ const STUDIO_TARGET_KINDS = [
36525
36751
  */
36526
36752
  function coerceRunRequest(body) {
36527
36753
  if (typeof body !== "object" || body === null) throw new Error("Request body must be a JSON object.");
36528
- const { targetId, kind, event, options, rawArgs, imageOverride, imageOverrides } = body;
36754
+ const { targetId, kind, event, options, catalogArgs, rawArgs, imageOverride, imageOverrides } = body;
36529
36755
  if (typeof targetId !== "string" || targetId.trim() === "") throw new Error("Request body must include a non-empty \"targetId\" string.");
36530
36756
  if (typeof kind !== "string" || !STUDIO_TARGET_KINDS.includes(kind)) throw new Error(`Request body "kind" must be one of: ${STUDIO_TARGET_KINDS.join(", ")}.`);
36531
36757
  let runOptions;
@@ -36535,6 +36761,12 @@ function coerceRunRequest(body) {
36535
36761
  buildPerRunArgs(kind, runOptions);
36536
36762
  resolveEnvVars(kind, runOptions);
36537
36763
  }
36764
+ let runCatalogArgs;
36765
+ if (catalogArgs !== void 0) {
36766
+ if (typeof catalogArgs !== "object" || catalogArgs === null || Array.isArray(catalogArgs)) throw new Error("Request body \"catalogArgs\" must be a JSON object keyed by flag.");
36767
+ runCatalogArgs = catalogArgs;
36768
+ buildCatalogArgs(kind, runCatalogArgs);
36769
+ }
36538
36770
  let runRawArgs;
36539
36771
  if (rawArgs !== void 0) {
36540
36772
  if (typeof rawArgs !== "string") throw new Error("Request body \"rawArgs\" must be a string.");
@@ -36561,6 +36793,7 @@ function coerceRunRequest(body) {
36561
36793
  kind,
36562
36794
  event,
36563
36795
  ...runOptions !== void 0 ? { options: runOptions } : {},
36796
+ ...runCatalogArgs !== void 0 ? { catalogArgs: runCatalogArgs } : {},
36564
36797
  ...runRawArgs !== void 0 ? { rawArgs: runRawArgs } : {},
36565
36798
  ...runImageOverride !== void 0 ? { imageOverride: runImageOverride } : {},
36566
36799
  ...runImageOverrides !== void 0 ? { imageOverrides: runImageOverrides } : {}
@@ -37367,4 +37600,4 @@ function addStudioSpecificOptions(cmd) {
37367
37600
 
37368
37601
  //#endregion
37369
37602
  export { applyEdgeResponseResult as $, buildJwksUrlFromIssuer as $n, collectSsmParameterRefs as $r, buildCloudMapIndex as $t, startAgentCoreHttpServer as A, classifySourceChange as An, handleConnectionsRequest as Ar, addRunTaskSpecificOptions as At, idFromArn as B, buildStageMap as Bn, EcsTaskResolutionError as Br, resolveEcsAssumeRoleOption as Bt, addListSpecificOptions as C, formatStateRemedy as Ci, waitForAgentCorePing as Cn, tryParseStatus as Cr, parseLbPortOverrides as Ct, createLocalStartAgentCoreCommand as D, buildStsClientConfig as Di, computeCodeImageTag as Dn, bufferToBody as Dr, addStartServiceSpecificOptions as Dt, addStartAgentCoreSpecificOptions as E, LocalInvokeBuildError as Ei, buildAgentCoreCodeImage as En, probeHostGatewaySupport as Er, resolveAlbFrontDoor as Et, createLocalStartCloudFrontCommand as F, createWatchPredicates as Fn, architectureToPlatform as Fr, addImageOverrideOptions as Ft, classifyS3Error as G, filterRoutesByApiIdentifiers as Gn, LocalStateSourceError as Gr, enforceImageOverrideOrphans as Gt, createDeployedKvsDataSource as H, resolveEnvVars$1 as Hn, substituteAgainstStateAsync as Hr, runEcsServiceEmulator as Ht, normalizeKvsFileKeys as I, resolveApiTargetSubset as In, buildContainerImage as Ir, buildEcsImageResolutionContext$1 as It, startCloudFrontServer as J, startApiServer as Jn, rejectExplicitCfnStackWithMultipleStacks as Jr, resolveImageOverrides as Jt, createS3OriginReader as K, groupRoutesByServer as Kn, createLocalStateProvider as Kr, mergeForService as Kt, parseKvsFileOverrides as L, createAuthorizerCache as Ln, resolveRuntimeCodeMountPath as Lr, ecsClusterOption as Lt, startAgentCoreWsBridge as M, createLocalInvokeCommand as Mn, buildConnectEvent as Mr, MAX_TASKS_SUBNET_RANGE_CAP as Mt, LocalStartCloudFrontError as N, addStartApiSpecificOptions as Nn, buildDisconnectEvent as Nr, addCommonEcsServiceOptions as Nt, buildAgentCoreServeAuthCheck as O, resolveProfileCredentials as Oi, renderCodeDockerfile as On, ConnectionRegistry as Or, createLocalStartServiceCommand as Ot, addStartCloudFrontSpecificOptions as P, createLocalStartApiCommand as Pn, buildMessageEvent as Pr, addEcsAssumeRoleOptions as Pt, applyEdgeRequestResult as Q, buildCognitoJwksUrl as Qn, CfnLocalStateProvider as Qr, listPinnedTargets as Qt, parseOriginOverrides as R, createFileWatcher as Rn, resolveRuntimeFileExtension as Rr, parseMaxTasks as Rt, StudioEventBus as S, derivePseudoParametersFromRegion as Si, waitForAgentCoreHttpReady as Sn, selectIntegrationResponse as Sr, createLocalStartAlbCommand as St, formatTargetListing as T, tryResolveImageFnJoin as Ti, SUPPORTED_CODE_RUNTIMES as Tn, HOST_GATEWAY_MIN_VERSION as Tr, isApplicationLoadBalancer as Tt, resolveDeployedKvsArnByName as U, availableApiIdentifiers as Un, substituteEnvVarsFromState as Ur, ImageOverrideError as Ut, resolveKvsModulesForDistribution as V, materializeLayerFromArn as Vn, substituteAgainstState as Vr, resolveSharedSidecarCredentials as Vt, resolveDeployedOriginBucket as W, filterRoutesByApiIdentifier as Wn, substituteEnvVarsFromStateAsync as Wr, buildImageOverrideTag as Wt, serveFromStaticOrigin as X, resolveServiceIntegrationParameters as Xn, resolveCfnRegion as Xr, describePinnedImageUri as Xt, resolveErrorResponseCandidates as Y, resolveSelectionExpression as Yn, resolveCfnFallbackRegion as Yr, runImageOverrideBuilds as Yt, serveLambdaUrlOrigin as Z, defaultCredentialsLoader as Zn, resolveCfnStackName as Zr, isLocalCdkAssetImage as Zt, filterStudioTargetGroups as _, AGENTCORE_MCP_PROTOCOL as _i, parseSseForJsonRpc as _n, applyAuthorizerOverlay as _r, createCloudFrontModule as _t, createLocalStudioCommand as a, availableWebSocketApiIdentifiers as ai, attachContainerLogStreamer as an, computeRequestIdentityHash as ar, describeS3OriginDomain as at, renderStudioHtml as b, pickAgentCoreCandidateStack as bi, AGENTCORE_SESSION_ID_HEADER as bn, evaluateResponseParameters as br, addAlbSpecificOptions as bt, startStudioProxy as c, filterWebSocketApisByIdentifiers as ci, bridgeAgentCoreWs as cn, invokeTokenAuthorizer as cr, pickFunctionUrlLogicalIdFromOrigin as ct, createStudioDispatcher as d, discoverRoutes as di, A2A_PATH as dn, buildCorsConfigByApiId as dr, pickTargetFunctionLogicalId as dt, resolveSsmParameters as ei, CloudMapRegistry as en, createJwksCache as er, buildEdgeRequestEvent as et, filterStudioCustomResources as f, pickRefLogicalId as fi, a2aInvokeOnce as fn, buildCorsConfigFromCloudFrontChain as fr, resolveCloudFrontDistribution as ft, annotatePinnedEcsTargets as g, AGENTCORE_HTTP_PROTOCOL as gi, mcpInvokeOnce as gn, translateLambdaResponse as gr, stripCloudFrontImport as gt, annotateEcsTaskPinnedTargets as h, AGENTCORE_AGUI_PROTOCOL as hi, MCP_PROTOCOL_VERSION as hn, matchRoute as hr, runViewerResponse as ht, coerceStopRequest as i, listTargets as ii, getContainerNetworkIp as in, buildMethodArn as ir, CLOUDFRONT_DISTRIBUTION_TYPE as it, attachAgentCoreWsBridge as j, addInvokeSpecificOptions as jn, parseConnectionsPath as jr, createLocalRunTaskCommand as jt, selectServeInboundAuth as k, toCmdArgv as kn, buildMgmtEndpointEnvUrl as kr, serviceStrategy as kt, relayServeRequest as l, parseSelectionExpressionPath as li, invokeAgentCoreWs as ln, attachAuthorizers as lr, pickKvsLogicalIdFromArn as lt, annotateAlbPinnedBackingServices as m, AGENTCORE_A2A_PROTOCOL as mi, MCP_PATH as mn, matchPreflight as mr, runViewerRequest as mt, coerceRunRequest as n, resolveSingleTarget as ni, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as nn, verifyJwtAuthorizer as nr, edgeHeadersToHttp as nt, resolveServeBaseUrl as o, discoverWebSocketApis as oi, addInvokeAgentCoreSpecificOptions as on, evaluateCachedLambdaPolicy as or, extractKvsAssociations as ot, isCustomResourceLambdaTarget as p, resolveLambdaArnIntrinsic as pi, MCP_CONTAINER_PORT as pn, isFunctionUrlOacFronted as pr, compileCloudFrontFunction as pt, matchBehavior as q, readMtlsMaterialsFromDisk as qn, isCfnFlagPresent as qr, parseImageOverrideFlags as qt, coerceServeRequest as r, countTargets as ri, setShadowReadyTimeoutMs as rn, verifyJwtViaDiscovery as rr, httpHeadersToEdge as rt, createStudioServeManager as s, discoverWebSocketApisOrThrow as si, createLocalInvokeAgentCoreCommand as sn, invokeRequestAuthorizer as sr, isCloudFrontDistribution as st, addStudioSpecificOptions as t, resolveWatchConfig as ti, DEFAULT_SHADOW_READY_TIMEOUT_MS as tn, verifyCognitoJwt as tr, buildEdgeResponseEvent as tt, reinvoke as u, webSocketApiMatchesIdentifier as ui, A2A_CONTAINER_PORT as un, applyCorsResponseHeaders as ur, pickLambdaEdgeFunctionLogicalId as ut, startStudioServer as v, AGENTCORE_RUNTIME_TYPE as vi, AGENTCORE_SIGV4_SERVICE as vn, buildHttpApiV2Event as vr, createLocalFileKvsDataSource as vt, createLocalListCommand as w, substituteImagePlaceholders as wi, downloadAndExtractS3Bundle as wn, VtlEvaluationError as wr, resolveAlbTarget as wt, createStudioStore as x, resolveAgentCoreTarget as xi, invokeAgentCore as xn, pickResponseTemplate as xr, albStrategy as xt, toStudioTargetGroups as y, AgentCoreResolutionError as yi, signAgentCoreInvocation as yn, buildRestV1Event as yr, createUnboundCloudFrontModule as yt, resolveCloudFrontTarget as z, attachStageContext as zn, resolveRuntimeImage as zr, parseRestartPolicy as zt };
37370
- //# sourceMappingURL=local-studio-BeiTYBHR.js.map
37603
+ //# sourceMappingURL=local-studio-CJ9NTLcC.js.map