cdk-local 0.93.0 → 0.95.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.
- package/README.md +1 -1
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/{local-studio-CRz5S9Iu.d.ts → local-studio-D4xCanIE.d.ts} +3 -1
- package/dist/{local-studio-CRz5S9Iu.d.ts.map → local-studio-D4xCanIE.d.ts.map} +1 -1
- package/dist/{local-studio-A_RFFU4P.js → local-studio-Dd271q0Z.js} +250 -14
- package/dist/local-studio-Dd271q0Z.js.map +1 -0
- package/package.json +1 -1
- package/dist/local-studio-A_RFFU4P.js.map +0 -1
|
@@ -28024,6 +28024,160 @@ function createStudioStore(bus, options = {}) {
|
|
|
28024
28024
|
};
|
|
28025
28025
|
}
|
|
28026
28026
|
|
|
28027
|
+
//#endregion
|
|
28028
|
+
//#region src/local/studio-option-catalog.ts
|
|
28029
|
+
/**
|
|
28030
|
+
* Auto-derived full-flag catalog for `cdkl studio` (issue #301).
|
|
28031
|
+
*
|
|
28032
|
+
* The per-target {@link OPTION_SPECS} in `studio-option-specs.ts` is a
|
|
28033
|
+
* CURATED subset — the handful of flags worth a rich control (a checkbox, a
|
|
28034
|
+
* KV editor, an add-row list). But a command like `cdkl start-api` accepts
|
|
28035
|
+
* many more flags than studio renders a control for, and hiding them makes
|
|
28036
|
+
* the UI strictly less capable than the headless CLI.
|
|
28037
|
+
*
|
|
28038
|
+
* This module closes that gap by INTROSPECTING each runnable kind's Commander
|
|
28039
|
+
* command factory and emitting the complete flag list (name + description).
|
|
28040
|
+
* The studio UI serializes it into the page and renders, inside a collapsed
|
|
28041
|
+
* "All options" section, (a) the full catalog as a read-only reference and
|
|
28042
|
+
* (b) a raw extra-args input (see {@link tokenizeRawArgs}) so any flag the
|
|
28043
|
+
* curated controls don't expose can still be passed verbatim. Auto-derivation
|
|
28044
|
+
* means the catalog can never drift from the command's real option set.
|
|
28045
|
+
*
|
|
28046
|
+
* Session-global flags (handled by the studio Session bar / `studio-child-args`)
|
|
28047
|
+
* and the auto-added `--help` / `--version` are excluded — passing them per-run
|
|
28048
|
+
* would conflict with the session-wide wiring.
|
|
28049
|
+
*/
|
|
28050
|
+
/**
|
|
28051
|
+
* Long flag names handled by the session bar / `studio-child-args` (forwarded
|
|
28052
|
+
* to every spawned child once, session-wide). Excluded from the per-target
|
|
28053
|
+
* catalog so a user does not re-specify them per-run and collide with the
|
|
28054
|
+
* session-wide value. Plus the Commander-managed `--help` / `--version`.
|
|
28055
|
+
*/
|
|
28056
|
+
const CATALOG_EXCLUDED_FLAGS = new Set([
|
|
28057
|
+
"--app",
|
|
28058
|
+
"--profile",
|
|
28059
|
+
"--region",
|
|
28060
|
+
"--context",
|
|
28061
|
+
"--from-cfn-stack",
|
|
28062
|
+
"--assume-role",
|
|
28063
|
+
"--help",
|
|
28064
|
+
"--version"
|
|
28065
|
+
]);
|
|
28066
|
+
const KIND_FACTORIES = {
|
|
28067
|
+
lambda: {
|
|
28068
|
+
command: "invoke",
|
|
28069
|
+
factory: createLocalInvokeCommand
|
|
28070
|
+
},
|
|
28071
|
+
agentcore: {
|
|
28072
|
+
command: "invoke-agentcore",
|
|
28073
|
+
factory: createLocalInvokeAgentCoreCommand
|
|
28074
|
+
},
|
|
28075
|
+
api: {
|
|
28076
|
+
command: "start-api",
|
|
28077
|
+
factory: createLocalStartApiCommand
|
|
28078
|
+
},
|
|
28079
|
+
alb: {
|
|
28080
|
+
command: "start-alb",
|
|
28081
|
+
factory: createLocalStartAlbCommand
|
|
28082
|
+
},
|
|
28083
|
+
ecs: {
|
|
28084
|
+
command: "start-service",
|
|
28085
|
+
factory: createLocalStartServiceCommand
|
|
28086
|
+
}
|
|
28087
|
+
};
|
|
28088
|
+
let cached;
|
|
28089
|
+
/**
|
|
28090
|
+
* Build (and memoize) the full per-kind flag catalog by introspecting each
|
|
28091
|
+
* runnable kind's Commander command factory.
|
|
28092
|
+
*
|
|
28093
|
+
* Each factory calls `setEmbedConfig(opts.embedConfig)` at construction — with
|
|
28094
|
+
* no opts that resets the active embed config to cdk-local defaults, which
|
|
28095
|
+
* would wipe a host CLI's branding. So the active config is snapshotted and
|
|
28096
|
+
* each factory is re-handed it: branding is preserved AND the derived flag
|
|
28097
|
+
* descriptions reflect the host's active branding. The `finally` restore is a
|
|
28098
|
+
* belt-and-suspenders against a factory that ignores the passed config.
|
|
28099
|
+
* Memoized: the factories are instantiated exactly once per process, not per
|
|
28100
|
+
* page render.
|
|
28101
|
+
*/
|
|
28102
|
+
function buildFlagCatalog() {
|
|
28103
|
+
if (cached) return cached;
|
|
28104
|
+
const savedEmbedConfig = getEmbedConfig();
|
|
28105
|
+
try {
|
|
28106
|
+
const out = {};
|
|
28107
|
+
for (const kind of Object.keys(KIND_FACTORIES)) {
|
|
28108
|
+
const { command, factory } = KIND_FACTORIES[kind];
|
|
28109
|
+
const cmd = factory({ embedConfig: savedEmbedConfig });
|
|
28110
|
+
const flags = [];
|
|
28111
|
+
for (const opt of cmd.options) {
|
|
28112
|
+
if (opt.hidden) continue;
|
|
28113
|
+
if (opt.long && CATALOG_EXCLUDED_FLAGS.has(opt.long)) continue;
|
|
28114
|
+
flags.push({
|
|
28115
|
+
flags: opt.flags,
|
|
28116
|
+
description: opt.description ?? ""
|
|
28117
|
+
});
|
|
28118
|
+
}
|
|
28119
|
+
out[kind] = {
|
|
28120
|
+
command,
|
|
28121
|
+
flags
|
|
28122
|
+
};
|
|
28123
|
+
}
|
|
28124
|
+
cached = out;
|
|
28125
|
+
return out;
|
|
28126
|
+
} finally {
|
|
28127
|
+
setEmbedConfig(savedEmbedConfig);
|
|
28128
|
+
}
|
|
28129
|
+
}
|
|
28130
|
+
/**
|
|
28131
|
+
* Tokenize a raw extra-args string into discrete argv elements, honoring
|
|
28132
|
+
* single / double quotes and backslash escaping so values with spaces survive
|
|
28133
|
+
* (`--name "two words"` -> `['--name', 'two words']`). studio spawns children
|
|
28134
|
+
* WITHOUT a shell (argv array), so the tokens are appended verbatim — there is
|
|
28135
|
+
* no shell-injection surface; the child command still validates each arg.
|
|
28136
|
+
*
|
|
28137
|
+
* Returns `[]` for an empty / whitespace-only input. Throws on an unterminated
|
|
28138
|
+
* quote so a malformed raw-args string fails as a clean boundary error rather
|
|
28139
|
+
* than spawning a child with a mis-split argv.
|
|
28140
|
+
*/
|
|
28141
|
+
function tokenizeRawArgs(raw) {
|
|
28142
|
+
if (raw === void 0) return [];
|
|
28143
|
+
const tokens = [];
|
|
28144
|
+
let current = "";
|
|
28145
|
+
let inToken = false;
|
|
28146
|
+
let quote = null;
|
|
28147
|
+
for (let i = 0; i < raw.length; i++) {
|
|
28148
|
+
const ch = raw[i];
|
|
28149
|
+
if (quote) {
|
|
28150
|
+
if (ch === "\\" && quote === "\"" && i + 1 < raw.length) current += raw[++i];
|
|
28151
|
+
else if (ch === quote) quote = null;
|
|
28152
|
+
else current += ch;
|
|
28153
|
+
continue;
|
|
28154
|
+
}
|
|
28155
|
+
if (ch === "\"" || ch === "'") {
|
|
28156
|
+
quote = ch;
|
|
28157
|
+
inToken = true;
|
|
28158
|
+
continue;
|
|
28159
|
+
}
|
|
28160
|
+
if (ch === "\\" && i + 1 < raw.length) {
|
|
28161
|
+
current += raw[++i];
|
|
28162
|
+
inToken = true;
|
|
28163
|
+
continue;
|
|
28164
|
+
}
|
|
28165
|
+
if (ch === " " || ch === " " || ch === "\n" || ch === "\r") {
|
|
28166
|
+
if (inToken) {
|
|
28167
|
+
tokens.push(current);
|
|
28168
|
+
current = "";
|
|
28169
|
+
inToken = false;
|
|
28170
|
+
}
|
|
28171
|
+
continue;
|
|
28172
|
+
}
|
|
28173
|
+
current += ch;
|
|
28174
|
+
inToken = true;
|
|
28175
|
+
}
|
|
28176
|
+
if (quote) throw new Error(`Raw extra args have an unterminated ${quote} quote.`);
|
|
28177
|
+
if (inToken) tokens.push(current);
|
|
28178
|
+
return tokens;
|
|
28179
|
+
}
|
|
28180
|
+
|
|
28027
28181
|
//#endregion
|
|
28028
28182
|
//#region src/local/studio-option-specs.ts
|
|
28029
28183
|
/**
|
|
@@ -28276,7 +28430,6 @@ const STUDIO_CSS = `
|
|
|
28276
28430
|
padding: 5px 14px; background: #141414; border-bottom: 1px solid #2a2a2a;
|
|
28277
28431
|
font-size: 12px;
|
|
28278
28432
|
}
|
|
28279
|
-
#session-bar .sess-title { color: #888; text-transform: uppercase; font-size: 11px; }
|
|
28280
28433
|
#session-bar .sess-bind { color: #bbb; display: inline-flex; align-items: center; gap: 4px; }
|
|
28281
28434
|
#session-bar input[type=text] {
|
|
28282
28435
|
background: #111; color: #ddd; border: 1px solid #333; border-radius: 3px;
|
|
@@ -28408,6 +28561,20 @@ const STUDIO_CSS = `
|
|
|
28408
28561
|
.pair-add { align-self: flex-start; background: #1d1d1d; color: #7bd88f; border: 1px solid #2f4030;
|
|
28409
28562
|
border-radius: 3px; cursor: pointer; padding: 3px 9px; font: 12px ui-monospace, monospace; }
|
|
28410
28563
|
.pair-add:hover { background: #243024; }
|
|
28564
|
+
details.all-options { margin: 8px 0; border-top: 1px solid #2a2a2a; padding-top: 6px; }
|
|
28565
|
+
details.all-options > summary { color: #8a8a8a; font-size: 12px; cursor: pointer; user-select: none; }
|
|
28566
|
+
details.all-options > summary:hover { color: #bbb; }
|
|
28567
|
+
.all-options .opt-row { display: flex; flex-direction: column; align-items: stretch; gap: 4px; margin: 6px 0; }
|
|
28568
|
+
.all-options input.raw-args {
|
|
28569
|
+
width: 100%; box-sizing: border-box; background: #111; color: #ddd; border: 1px solid #333;
|
|
28570
|
+
border-radius: 3px; padding: 4px 6px; font: 12px ui-monospace, Menlo, monospace;
|
|
28571
|
+
}
|
|
28572
|
+
.all-options input.raw-args:focus { outline: none; border-color: #4ec97a; }
|
|
28573
|
+
.opt-hint { color: #777; font-size: 11px; }
|
|
28574
|
+
.flag-catalog { margin-top: 8px; display: flex; flex-direction: column; gap: 2px; }
|
|
28575
|
+
.flag-row { display: flex; gap: 8px; align-items: baseline; font-size: 11px; }
|
|
28576
|
+
.flag-name { color: #7bd88f; font-family: ui-monospace, Menlo, monospace; white-space: nowrap; }
|
|
28577
|
+
.flag-desc { color: #999; }
|
|
28411
28578
|
.envkv-modes { display: flex; gap: 0; }
|
|
28412
28579
|
.envkv-mode { background: #1a1a1a; color: #999; border: 1px solid #333; cursor: pointer;
|
|
28413
28580
|
padding: 3px 12px; font: 11px ui-monospace, monospace; }
|
|
@@ -28448,9 +28615,14 @@ const STUDIO_SCRIPT = `
|
|
|
28448
28615
|
|
|
28449
28616
|
function buildOptions(kind) {
|
|
28450
28617
|
const specs = OPTION_SPECS[kind] || [];
|
|
28451
|
-
|
|
28618
|
+
// The composer always shows an "All options" section (raw extra args + the
|
|
28619
|
+
// auto-derived flag reference), even for kinds with no curated controls.
|
|
28620
|
+
const wrap = el('div', 'options-wrap');
|
|
28452
28621
|
const sec = el('div', 'section options');
|
|
28453
|
-
|
|
28622
|
+
if (specs.length) {
|
|
28623
|
+
sec.appendChild(el('h3', null, 'Options'));
|
|
28624
|
+
wrap.appendChild(sec);
|
|
28625
|
+
}
|
|
28454
28626
|
const getters = [];
|
|
28455
28627
|
const bools = {};
|
|
28456
28628
|
|
|
@@ -28566,12 +28738,62 @@ const STUDIO_SCRIPT = `
|
|
|
28566
28738
|
}
|
|
28567
28739
|
sec.appendChild(row);
|
|
28568
28740
|
});
|
|
28741
|
+
const allOpts = buildAllOptions(kind);
|
|
28742
|
+
wrap.appendChild(allOpts.node);
|
|
28569
28743
|
return {
|
|
28570
|
-
node:
|
|
28744
|
+
node: wrap,
|
|
28571
28745
|
collect: function () {
|
|
28572
28746
|
const out = {};
|
|
28573
28747
|
getters.forEach(function (g) { const kv = g(); out[kv[0]] = kv[1]; });
|
|
28574
|
-
|
|
28748
|
+
// Omit-when-empty: a kind with no curated controls (e.g. api) collects
|
|
28749
|
+
// nothing, so return undefined rather than {} to keep the run/serve
|
|
28750
|
+
// body identical to before this section existed.
|
|
28751
|
+
return Object.keys(out).length ? out : undefined;
|
|
28752
|
+
},
|
|
28753
|
+
collectRaw: allOpts.collectRaw,
|
|
28754
|
+
};
|
|
28755
|
+
}
|
|
28756
|
+
|
|
28757
|
+
// The collapsed "All options" section: a raw extra-args input (appended
|
|
28758
|
+
// verbatim to the spawned child) + the auto-derived, read-only catalog of
|
|
28759
|
+
// every flag the underlying command accepts. The curated controls above
|
|
28760
|
+
// cover the common flags with rich UI; this exposes the rest so the studio
|
|
28761
|
+
// UI is never strictly less capable than the headless CLI (issue #301).
|
|
28762
|
+
const FLAG_CATALOG = window.__FLAG_CATALOG__ || {};
|
|
28763
|
+
|
|
28764
|
+
function buildAllOptions(kind) {
|
|
28765
|
+
const cat = FLAG_CATALOG[kind] || { command: '', flags: [] };
|
|
28766
|
+
const det = el('details', 'all-options');
|
|
28767
|
+
det.appendChild(el('summary', null, 'All options'));
|
|
28768
|
+
|
|
28769
|
+
const rawRow = el('div', 'opt-row opt-col');
|
|
28770
|
+
rawRow.appendChild(el('span', 'opt-label', 'Raw extra args'));
|
|
28771
|
+
const rawIn = el('input', 'raw-args');
|
|
28772
|
+
rawIn.placeholder = '--flag value --other "with spaces"';
|
|
28773
|
+
rawRow.appendChild(rawIn);
|
|
28774
|
+
const hint = cat.command
|
|
28775
|
+
? 'Appended verbatim to the spawned ' + cat.command + ' command. Quote values with spaces.'
|
|
28776
|
+
: 'Appended verbatim to the spawned command. Quote values with spaces.';
|
|
28777
|
+
rawRow.appendChild(el('div', 'opt-hint', hint));
|
|
28778
|
+
det.appendChild(rawRow);
|
|
28779
|
+
|
|
28780
|
+
if (cat.flags.length) {
|
|
28781
|
+
const ref = el('div', 'flag-catalog');
|
|
28782
|
+
ref.appendChild(el('div', 'opt-label', 'Available flags'));
|
|
28783
|
+
cat.flags.forEach(function (f) {
|
|
28784
|
+
const row = el('div', 'flag-row');
|
|
28785
|
+
row.appendChild(el('code', 'flag-name', f.flags));
|
|
28786
|
+
if (f.description) row.appendChild(el('span', 'flag-desc', f.description));
|
|
28787
|
+
ref.appendChild(row);
|
|
28788
|
+
});
|
|
28789
|
+
det.appendChild(ref);
|
|
28790
|
+
}
|
|
28791
|
+
|
|
28792
|
+
return {
|
|
28793
|
+
node: det,
|
|
28794
|
+
collectRaw: function () {
|
|
28795
|
+
const v = rawIn.value.trim();
|
|
28796
|
+
return v === '' ? undefined : v;
|
|
28575
28797
|
},
|
|
28576
28798
|
};
|
|
28577
28799
|
}
|
|
@@ -28697,7 +28919,7 @@ const STUDIO_SCRIPT = `
|
|
|
28697
28919
|
}
|
|
28698
28920
|
}
|
|
28699
28921
|
|
|
28700
|
-
async function startServe(id, options) {
|
|
28922
|
+
async function startServe(id, options, rawArgs) {
|
|
28701
28923
|
// The serve kind (api / alb / ecs) drives which headless command the
|
|
28702
28924
|
// server spawns; it is recorded on the row when the target list loads.
|
|
28703
28925
|
const meta = serveMeta.get(id);
|
|
@@ -28707,6 +28929,7 @@ const STUDIO_SCRIPT = `
|
|
|
28707
28929
|
try {
|
|
28708
28930
|
const body = { targetId: id, kind };
|
|
28709
28931
|
if (options) body.options = options;
|
|
28932
|
+
if (rawArgs) body.rawArgs = rawArgs;
|
|
28710
28933
|
const res = await fetch('/api/run', {
|
|
28711
28934
|
method: 'POST',
|
|
28712
28935
|
headers: { 'content-type': 'application/json' },
|
|
@@ -28763,7 +28986,8 @@ const STUDIO_SCRIPT = `
|
|
|
28763
28986
|
: el('button', null, starting ? 'Starting…' : 'Start');
|
|
28764
28987
|
// Per-run options are only set before a start; collected on the Start click.
|
|
28765
28988
|
let collectOpts = function () { return undefined; };
|
|
28766
|
-
|
|
28989
|
+
let collectRaw = function () { return undefined; };
|
|
28990
|
+
btn.onclick = () => { if (running || starting) stopServe(id); else startServe(id, collectOpts(), collectRaw()); };
|
|
28767
28991
|
head.appendChild(btn);
|
|
28768
28992
|
if (errMsg) {
|
|
28769
28993
|
const m = el('div', 'err', errMsg);
|
|
@@ -28775,6 +28999,7 @@ const STUDIO_SCRIPT = `
|
|
|
28775
28999
|
const opt = buildOptions(kind);
|
|
28776
29000
|
if (opt.node) ws.appendChild(opt.node);
|
|
28777
29001
|
collectOpts = opt.collect;
|
|
29002
|
+
collectRaw = opt.collectRaw;
|
|
28778
29003
|
}
|
|
28779
29004
|
|
|
28780
29005
|
const isEcs = meta && meta.kind === 'ecs';
|
|
@@ -28974,7 +29199,7 @@ const STUDIO_SCRIPT = `
|
|
|
28974
29199
|
ws.appendChild(composer);
|
|
28975
29200
|
ws.appendChild(result);
|
|
28976
29201
|
|
|
28977
|
-
active = { id, kind, ta, btn, msg, result, collectOpts: opt.collect };
|
|
29202
|
+
active = { id, kind, ta, btn, msg, result, collectOpts: opt.collect, collectRaw: opt.collectRaw };
|
|
28978
29203
|
btn.onclick = () => runInvoke();
|
|
28979
29204
|
shownInvId = null;
|
|
28980
29205
|
shownDetailId = null;
|
|
@@ -28999,6 +29224,8 @@ const STUDIO_SCRIPT = `
|
|
|
28999
29224
|
const body = { targetId: id, kind, event };
|
|
29000
29225
|
const options = active.collectOpts ? active.collectOpts() : undefined;
|
|
29001
29226
|
if (options) body.options = options;
|
|
29227
|
+
const rawArgs = active.collectRaw ? active.collectRaw() : undefined;
|
|
29228
|
+
if (rawArgs) body.rawArgs = rawArgs;
|
|
29002
29229
|
const res = await fetch('/api/run', {
|
|
29003
29230
|
method: 'POST',
|
|
29004
29231
|
headers: { 'content-type': 'application/json' },
|
|
@@ -29375,12 +29602,11 @@ function renderStudioHtml(appLabel, cliName) {
|
|
|
29375
29602
|
<span id="conn" class="down">● connecting</span>
|
|
29376
29603
|
</header>
|
|
29377
29604
|
<div id="session-bar">
|
|
29378
|
-
<
|
|
29605
|
+
<label class="sess-bind"><input type="checkbox" id="sess-watch" /> watch</label>
|
|
29379
29606
|
<label class="sess-bind"><input type="checkbox" id="sess-cfn" /> from-cfn-stack</label>
|
|
29380
29607
|
<input id="sess-cfn-name" type="text" placeholder="stack name (blank = auto)" style="display:none" />
|
|
29381
29608
|
<label class="sess-bind" for="sess-role">assume-role</label>
|
|
29382
29609
|
<input id="sess-role" type="text" placeholder="arn:aws:iam::…:role/…" />
|
|
29383
|
-
<label class="sess-bind"><input type="checkbox" id="sess-watch" /> watch</label>
|
|
29384
29610
|
<button id="sess-save" type="button">Save</button>
|
|
29385
29611
|
<span id="sess-msg"></span>
|
|
29386
29612
|
<span id="sess-synth" class="sess-synth"></span>
|
|
@@ -29398,6 +29624,7 @@ function renderStudioHtml(appLabel, cliName) {
|
|
|
29398
29624
|
</section>
|
|
29399
29625
|
</main>
|
|
29400
29626
|
<script>window.__OPTION_SPECS__ = ${JSON.stringify(OPTION_SPECS).replace(/</g, "\\u003c")};<\/script>
|
|
29627
|
+
<script>window.__FLAG_CATALOG__ = ${JSON.stringify(buildFlagCatalog()).replace(/</g, "\\u003c")};<\/script>
|
|
29401
29628
|
<script>${STUDIO_SCRIPT}<\/script>
|
|
29402
29629
|
</body>
|
|
29403
29630
|
</html>`;
|
|
@@ -29817,6 +30044,7 @@ function createStudioDispatcher(config) {
|
|
|
29817
30044
|
writeFileSync(envFile, JSON.stringify(envVars));
|
|
29818
30045
|
args.push("--env-vars", envFile);
|
|
29819
30046
|
}
|
|
30047
|
+
args.push(...tokenizeRawArgs(req.rawArgs));
|
|
29820
30048
|
const { code, stdout, stderr } = await runChild(spawnFn, nodeBin, [config.cliEntry, ...args], config.cwd ?? process.cwd(), invocationId, req.targetId, config.bus, clock);
|
|
29821
30049
|
const durationMs = clock() - startedAt;
|
|
29822
30050
|
const ok = code === 0;
|
|
@@ -30302,7 +30530,8 @@ function createStudioServeManager(config) {
|
|
|
30302
30530
|
...spec.portArgs,
|
|
30303
30531
|
...buildSharedChildArgs(config),
|
|
30304
30532
|
...buildPerRunArgs(req.kind, req.options),
|
|
30305
|
-
...config.watch === true ? ["--watch"] : []
|
|
30533
|
+
...config.watch === true ? ["--watch"] : [],
|
|
30534
|
+
...tokenizeRawArgs(req.rawArgs)
|
|
30306
30535
|
];
|
|
30307
30536
|
}
|
|
30308
30537
|
async function start(req) {
|
|
@@ -30523,7 +30752,7 @@ const STUDIO_TARGET_KINDS = [
|
|
|
30523
30752
|
*/
|
|
30524
30753
|
function coerceRunRequest(body) {
|
|
30525
30754
|
if (typeof body !== "object" || body === null) throw new Error("Request body must be a JSON object.");
|
|
30526
|
-
const { targetId, kind, event, options } = body;
|
|
30755
|
+
const { targetId, kind, event, options, rawArgs } = body;
|
|
30527
30756
|
if (typeof targetId !== "string" || targetId.trim() === "") throw new Error("Request body must include a non-empty \"targetId\" string.");
|
|
30528
30757
|
if (typeof kind !== "string" || !STUDIO_TARGET_KINDS.includes(kind)) throw new Error(`Request body "kind" must be one of: ${STUDIO_TARGET_KINDS.join(", ")}.`);
|
|
30529
30758
|
let runOptions;
|
|
@@ -30533,11 +30762,18 @@ function coerceRunRequest(body) {
|
|
|
30533
30762
|
buildPerRunArgs(kind, runOptions);
|
|
30534
30763
|
resolveEnvVars(kind, runOptions);
|
|
30535
30764
|
}
|
|
30765
|
+
let runRawArgs;
|
|
30766
|
+
if (rawArgs !== void 0) {
|
|
30767
|
+
if (typeof rawArgs !== "string") throw new Error("Request body \"rawArgs\" must be a string.");
|
|
30768
|
+
tokenizeRawArgs(rawArgs);
|
|
30769
|
+
runRawArgs = rawArgs;
|
|
30770
|
+
}
|
|
30536
30771
|
return {
|
|
30537
30772
|
targetId,
|
|
30538
30773
|
kind,
|
|
30539
30774
|
event,
|
|
30540
|
-
...runOptions !== void 0 ? { options: runOptions } : {}
|
|
30775
|
+
...runOptions !== void 0 ? { options: runOptions } : {},
|
|
30776
|
+
...runRawArgs !== void 0 ? { rawArgs: runRawArgs } : {}
|
|
30541
30777
|
};
|
|
30542
30778
|
}
|
|
30543
30779
|
/**
|
|
@@ -30749,4 +30985,4 @@ function addStudioSpecificOptions(cmd) {
|
|
|
30749
30985
|
|
|
30750
30986
|
//#endregion
|
|
30751
30987
|
export { SOFT_RELOAD_COMPLETION_LOG_SUFFIX as $, listTargets as $n, buildMethodArn as $t, addCommonEcsServiceOptions as A, architectureToPlatform as An, createWatchPredicates as At, ImageOverrideError as B, LocalStateSourceError as Bn, filterRoutesByApiIdentifiers as Bt, resolveAlbFrontDoor as C, ConnectionRegistry as Cn, resolveProfileCredentials as Cr, renderCodeDockerfile as Ct, addRunTaskSpecificOptions as D, buildConnectEvent as Dn, createLocalInvokeCommand as Dt, serviceStrategy as E, parseConnectionsPath as En, addInvokeSpecificOptions as Et, parseMaxTasks as F, EcsTaskResolutionError as Fn, buildStageMap as Ft, resolveImageOverrides as G, resolveCfnRegion as Gn, resolveServiceIntegrationParameters as Gt, enforceImageOverrideOrphans as H, isCfnFlagPresent as Hn, readMtlsMaterialsFromDisk as Ht, parseRestartPolicy as I, substituteAgainstState as In, materializeLayerFromArn as It, isLocalCdkAssetImage as J, collectSsmParameterRefs as Jn, buildJwksUrlFromIssuer as Jt, runImageOverrideBuilds as K, resolveCfnStackName as Kn, defaultCredentialsLoader as Kt, resolveEcsAssumeRoleOption as L, substituteAgainstStateAsync as Ln, resolveEnvVars$1 as Lt, addImageOverrideOptions as M, resolveRuntimeCodeMountPath as Mn, createAuthorizerCache as Mt, buildEcsImageResolutionContext$1 as N, resolveRuntimeFileExtension as Nn, createFileWatcher as Nt, createLocalRunTaskCommand as O, buildDisconnectEvent as On, addStartApiSpecificOptions as Ot, ecsClusterOption as P, resolveRuntimeImage as Pn, attachStageContext as Pt, DEFAULT_SHADOW_READY_TIMEOUT_MS as Q, countTargets as Qn, verifyJwtViaDiscovery as Qt, resolveSharedSidecarCredentials as R, substituteEnvVarsFromState as Rn, availableApiIdentifiers as Rt, isApplicationLoadBalancer as S, bufferToBody as Sn, buildStsClientConfig as Sr, computeCodeImageTag as St, createLocalStartServiceCommand as T, handleConnectionsRequest as Tn, classifySourceChange as Tt, mergeForService as U, rejectExplicitCfnStackWithMultipleStacks as Un, startApiServer as Ut, buildImageOverrideTag as V, createLocalStateProvider as Vn, groupRoutesByServer as Vt, parseImageOverrideFlags as W, resolveCfnFallbackRegion as Wn, resolveSelectionExpression as Wt, buildCloudMapIndex as X, resolveWatchConfig as Xn, verifyCognitoJwt as Xt, listPinnedTargets as Y, resolveSsmParameters as Yn, createJwksCache as Yt, CloudMapRegistry as Z, resolveSingleTarget as Zn, verifyJwtAuthorizer as Zt, addAlbSpecificOptions as _, selectIntegrationResponse as _n, derivePseudoParametersFromRegion as _r, invokeAgentCore as _t, createStudioServeManager as a, applyCorsResponseHeaders as an, webSocketApiMatchesIdentifier as ar, invokeAgentCoreWs as at, parseLbPortOverrides as b, HOST_GATEWAY_MIN_VERSION as bn, tryResolveImageFnJoin as br, SUPPORTED_CODE_RUNTIMES as bt, filterStudioTargetGroups as c, isFunctionUrlOacFronted as cn, resolveLambdaArnIntrinsic as cr, a2aInvokeOnce as ct, renderStudioHtml as d, translateLambdaResponse as dn, AGENTCORE_HTTP_PROTOCOL as dr, MCP_PROTOCOL_VERSION as dt, computeRequestIdentityHash as en, availableWebSocketApiIdentifiers as er, setShadowReadyTimeoutMs as et, createStudioStore as f, applyAuthorizerOverlay as fn, AGENTCORE_MCP_PROTOCOL as fr, mcpInvokeOnce as ft, formatTargetListing as g, pickResponseTemplate as gn, resolveAgentCoreTarget as gr, AGENTCORE_SESSION_ID_HEADER as gt, createLocalListCommand as h, evaluateResponseParameters as hn, pickAgentCoreCandidateStack as hr, signAgentCoreInvocation as ht, createLocalStudioCommand as i, attachAuthorizers as in, parseSelectionExpressionPath as ir, createLocalInvokeAgentCoreCommand as it, addEcsAssumeRoleOptions as j, buildContainerImage as jn, resolveApiTargetSubset as jt, MAX_TASKS_SUBNET_RANGE_CAP as k, buildMessageEvent as kn, createLocalStartApiCommand as kt, startStudioServer as l, matchPreflight as ln, AGENTCORE_A2A_PROTOCOL as lr, MCP_CONTAINER_PORT as lt, addListSpecificOptions as m, buildRestV1Event as mn, AgentCoreResolutionError as mr, AGENTCORE_SIGV4_SERVICE as mt, coerceRunRequest as n, invokeRequestAuthorizer as nn, discoverWebSocketApisOrThrow as nr, attachContainerLogStreamer as nt, startStudioProxy as o, buildCorsConfigByApiId as on, discoverRoutes as or, A2A_CONTAINER_PORT as ot, StudioEventBus as p, buildHttpApiV2Event as pn, AGENTCORE_RUNTIME_TYPE as pr, parseSseForJsonRpc as pt, describePinnedImageUri as q, CfnLocalStateProvider as qn, buildCognitoJwksUrl as qt, coerceStopRequest as r, invokeTokenAuthorizer as rn, filterWebSocketApisByIdentifiers as rr, addInvokeAgentCoreSpecificOptions as rt, createStudioDispatcher as s, buildCorsConfigFromCloudFrontChain as sn, pickRefLogicalId as sr, A2A_PATH as st, addStudioSpecificOptions as t, evaluateCachedLambdaPolicy as tn, discoverWebSocketApis as tr, getContainerNetworkIp as tt, toStudioTargetGroups as u, matchRoute as un, AGENTCORE_AGUI_PROTOCOL as ur, MCP_PATH as ut, albStrategy as v, tryParseStatus as vn, formatStateRemedy as vr, waitForAgentCorePing as vt, addStartServiceSpecificOptions as w, buildMgmtEndpointEnvUrl as wn, toCmdArgv as wt, resolveAlbTarget as x, probeHostGatewaySupport as xn, LocalInvokeBuildError as xr, buildAgentCoreCodeImage as xt, createLocalStartAlbCommand as y, VtlEvaluationError as yn, substituteImagePlaceholders as yr, downloadAndExtractS3Bundle as yt, runEcsServiceEmulator as z, substituteEnvVarsFromStateAsync as zn, filterRoutesByApiIdentifier as zt };
|
|
30752
|
-
//# sourceMappingURL=local-studio-
|
|
30988
|
+
//# sourceMappingURL=local-studio-Dd271q0Z.js.map
|