@aexhq/cli 0.25.1 → 0.26.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 +12 -0
- package/dist/index.d.ts +2 -7
- package/dist/index.js +233 -7
- package/package.json +26 -29
- package/LICENSE +0 -201
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -51
- package/dist/cli.js.map +0 -1
- package/dist/cli.mjs +0 -4657
- package/dist/cli.mjs.sha256 +0 -1
- package/dist/host/cancel.d.ts +0 -3
- package/dist/host/cancel.js +0 -30
- package/dist/host/cancel.js.map +0 -1
- package/dist/host/common.d.ts +0 -135
- package/dist/host/common.js +0 -281
- package/dist/host/common.js.map +0 -1
- package/dist/host/delete-asset.d.ts +0 -3
- package/dist/host/delete-asset.js +0 -34
- package/dist/host/delete-asset.js.map +0 -1
- package/dist/host/delete.d.ts +0 -3
- package/dist/host/delete.js +0 -30
- package/dist/host/delete.js.map +0 -1
- package/dist/host/download.d.ts +0 -3
- package/dist/host/download.js +0 -80
- package/dist/host/download.js.map +0 -1
- package/dist/host/events.d.ts +0 -3
- package/dist/host/events.js +0 -97
- package/dist/host/events.js.map +0 -1
- package/dist/host/index.d.ts +0 -17
- package/dist/host/index.js +0 -18
- package/dist/host/index.js.map +0 -1
- package/dist/host/outputs.d.ts +0 -3
- package/dist/host/outputs.js +0 -36
- package/dist/host/outputs.js.map +0 -1
- package/dist/host/run-cmd.d.ts +0 -3
- package/dist/host/run-cmd.js +0 -549
- package/dist/host/run-cmd.js.map +0 -1
- package/dist/host/skills-cmd.d.ts +0 -3
- package/dist/host/skills-cmd.js +0 -304
- package/dist/host/skills-cmd.js.map +0 -1
- package/dist/host/status.d.ts +0 -3
- package/dist/host/status.js +0 -31
- package/dist/host/status.js.map +0 -1
- package/dist/host/wait.d.ts +0 -3
- package/dist/host/wait.js +0 -88
- package/dist/host/wait.js.map +0 -1
- package/dist/host/whoami.d.ts +0 -3
- package/dist/host/whoami.js +0 -33
- package/dist/host/whoami.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal.d.ts +0 -53
- package/dist/internal.js +0 -10
- package/dist/internal.js.map +0 -1
- package/dist/outputs-sync.d.ts +0 -24
- package/dist/outputs-sync.js +0 -70
- package/dist/outputs-sync.js.map +0 -1
- package/dist/proxy.d.ts +0 -16
- package/dist/proxy.js +0 -316
- package/dist/proxy.js.map +0 -1
- package/dist/run.d.ts +0 -10
- package/dist/run.js +0 -166
- package/dist/run.js.map +0 -1
- package/dist/runtime.d.ts +0 -5
- package/dist/runtime.js +0 -4
- package/dist/runtime.js.map +0 -1
- package/scripts/finalize-bundle.mjs +0 -72
- package/src/cli.ts +0 -51
- package/src/host/cancel.ts +0 -39
- package/src/host/common.ts +0 -329
- package/src/host/delete-asset.ts +0 -43
- package/src/host/delete.ts +0 -39
- package/src/host/download.ts +0 -97
- package/src/host/events.ts +0 -113
- package/src/host/index.ts +0 -25
- package/src/host/outputs.ts +0 -45
- package/src/host/run-cmd.ts +0 -578
- package/src/host/skills-cmd.ts +0 -317
- package/src/host/status.ts +0 -40
- package/src/host/wait.ts +0 -110
- package/src/host/whoami.ts +0 -42
- package/src/index.ts +0 -7
- package/src/internal.ts +0 -63
- package/src/outputs-sync.ts +0 -76
- package/src/proxy.ts +0 -359
- package/src/run.ts +0 -187
- package/src/runtime.ts +0 -15
- package/test/cli.test.ts +0 -519
- package/test/host.test.ts +0 -1154
- package/test/no-env-vars.test.ts +0 -59
- package/test/outputs-sync.test.ts +0 -107
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -4
- package/vitest.config.ts +0 -14
package/dist/host/run-cmd.js
DELETED
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `aex run` — submit a flat run via the dashboard BFF using the
|
|
3
|
-
* same operations module the SDK uses.
|
|
4
|
-
*
|
|
5
|
-
* Two input modes (mutually exclusive):
|
|
6
|
-
*
|
|
7
|
-
* 1. `--config <path>` — plain run-request JSON:
|
|
8
|
-
* `{ model, system?, prompt, skills?, mcpServers?, environment?,
|
|
9
|
-
* runtimeSize?, timeout?, postHook?, proxyEndpoints?, metadata? }`. Skill
|
|
10
|
-
* entries use storage-neutral asset refs (`{ kind: "asset", ... }`).
|
|
11
|
-
* MCP entries may include `headers` — the CLI splits them into the
|
|
12
|
-
* `secrets.mcpServers` bag before posting.
|
|
13
|
-
*
|
|
14
|
-
* 2. Flat flags — for ad-hoc / scriptable invocations:
|
|
15
|
-
* --model <id> REQUIRED in flag mode
|
|
16
|
-
* --system @file | --system "literal" optional system message
|
|
17
|
-
* --prompt @file | --prompt "literal" REQUIRED in flag mode (repeatable)
|
|
18
|
-
* --mcp name=url MCP server (repeatable)
|
|
19
|
-
* --mcp-auth name=Header:Value adds a header on the matching --mcp (repeatable)
|
|
20
|
-
* --metadata key=value string metadata entry (repeatable)
|
|
21
|
-
*
|
|
22
|
-
* Always required (both modes):
|
|
23
|
-
* --anthropic-api-key <key> provider key (never stored)
|
|
24
|
-
* --api-token <token> see `parseCommonHostFlags`
|
|
25
|
-
*
|
|
26
|
-
* Optional (both modes):
|
|
27
|
-
* --runtime-size <size> managed runtime preset (e.g. shared-2x-2gb); default shared-1x-512mb
|
|
28
|
-
* --run-timeout <dur> server-side run deadline (e.g. 1h); bounded [1m, 6h], default 1h
|
|
29
|
-
* --idempotency-key <key> defaults to a fresh UUID
|
|
30
|
-
* --proxy-endpoint '<json>' PlatformProxyEndpoint JSON (repeatable)
|
|
31
|
-
* --proxy-auth name=<spec> bearer:tok | basic:u:p | header:v | query:v (repeatable)
|
|
32
|
-
* --follow poll events to stdout until terminal status
|
|
33
|
-
* --timeout <dur> with --follow: give up after this long (e.g. 8m); exit code 3
|
|
34
|
-
*/
|
|
35
|
-
import { AEX_DEFAULT_BASE_URL, DEFAULT_RUN_PROVIDER, operations, parseRunRequestConfig, RUN_MODELS, RUNTIME_SIZES, RUN_PROVIDERS, RUNTIME_KINDS, TERMINAL_RUN_STATUSES, validateProxyAuth } from "@aexhq/contracts";
|
|
36
|
-
import { resolve as resolvePath } from "node:path";
|
|
37
|
-
import { RUNTIME_ERR, SUCCESS, TIMEOUT_ERR, USAGE_ERR, collectRepeated, collectRepeatedKv, collectRepeatedKvList, emitJsonError, makeHttpClient, parseCommonHostFlags, parseDuration, refuseInsideManagedRun, takeBooleanFlag, takeFlagValue, takeOptionFlag } from "./common.js";
|
|
38
|
-
// Membership-tested against the loose `string` run status from the BFF, so we
|
|
39
|
-
// back it with the canonical terminal set rather than a drift-prone local list.
|
|
40
|
-
const TERMINAL_STATUSES = new Set(TERMINAL_RUN_STATUSES);
|
|
41
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */ // AEX_DEFAULT_BASE_URL is re-exported only for assertion clarity.
|
|
42
|
-
void AEX_DEFAULT_BASE_URL;
|
|
43
|
-
export async function runRunCmd(io, argv) {
|
|
44
|
-
if (await refuseInsideManagedRun(io, "run"))
|
|
45
|
-
return USAGE_ERR;
|
|
46
|
-
const common = parseCommonHostFlags(argv);
|
|
47
|
-
if (!common.ok) {
|
|
48
|
-
io.stderr(`${common.reason}\n`);
|
|
49
|
-
return USAGE_ERR;
|
|
50
|
-
}
|
|
51
|
-
let rest = common.rest;
|
|
52
|
-
const providerFlag = takeFlagValue(rest, "--provider");
|
|
53
|
-
if (providerFlag.error) {
|
|
54
|
-
io.stderr(`${providerFlag.error}\n`);
|
|
55
|
-
return USAGE_ERR;
|
|
56
|
-
}
|
|
57
|
-
rest = providerFlag.remaining;
|
|
58
|
-
let provider = DEFAULT_RUN_PROVIDER;
|
|
59
|
-
if (providerFlag.value !== null) {
|
|
60
|
-
if (!RUN_PROVIDERS.includes(providerFlag.value)) {
|
|
61
|
-
io.stderr(`--provider must be one of: ${RUN_PROVIDERS.join(", ")} (got: ${providerFlag.value})\n`);
|
|
62
|
-
return USAGE_ERR;
|
|
63
|
-
}
|
|
64
|
-
provider = providerFlag.value;
|
|
65
|
-
}
|
|
66
|
-
// Provider key flag handling: each provider in RUN_PROVIDERS has its
|
|
67
|
-
// own `--<provider>-api-key` flag. Exactly the flag matching the
|
|
68
|
-
// selected provider must be supplied; every other provider's flag
|
|
69
|
-
// must be absent (mirrors the secrets-coupling rule the parser
|
|
70
|
-
// re-enforces server-side).
|
|
71
|
-
const providerKeyValues = {};
|
|
72
|
-
for (const p of RUN_PROVIDERS) {
|
|
73
|
-
const flag = takeFlagValue(rest, `--${p}-api-key`);
|
|
74
|
-
if (flag.error) {
|
|
75
|
-
io.stderr(`${flag.error}\n`);
|
|
76
|
-
return USAGE_ERR;
|
|
77
|
-
}
|
|
78
|
-
rest = flag.remaining;
|
|
79
|
-
if (flag.value !== null)
|
|
80
|
-
providerKeyValues[p] = flag.value;
|
|
81
|
-
}
|
|
82
|
-
if (!providerKeyValues[provider]) {
|
|
83
|
-
io.stderr(`--${provider}-api-key is required when --provider is ${provider} (the platform does not store provider keys on your behalf)\n`);
|
|
84
|
-
return USAGE_ERR;
|
|
85
|
-
}
|
|
86
|
-
for (const p of RUN_PROVIDERS) {
|
|
87
|
-
if (p === provider)
|
|
88
|
-
continue;
|
|
89
|
-
if (providerKeyValues[p] !== undefined) {
|
|
90
|
-
io.stderr(`--${p}-api-key is not allowed when --provider is ${provider}\n`);
|
|
91
|
-
return USAGE_ERR;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Optional runtime selector. Validate the value against the wire enum
|
|
95
|
-
// here so the user gets an early error from the CLI; the shared parser
|
|
96
|
-
// re-runs the check when the request lands at the API plane.
|
|
97
|
-
const runtimeFlag = takeFlagValue(rest, "--runtime");
|
|
98
|
-
if (runtimeFlag.error) {
|
|
99
|
-
io.stderr(`${runtimeFlag.error}\n`);
|
|
100
|
-
return USAGE_ERR;
|
|
101
|
-
}
|
|
102
|
-
rest = runtimeFlag.remaining;
|
|
103
|
-
let runtime;
|
|
104
|
-
if (runtimeFlag.value !== null) {
|
|
105
|
-
if (!RUNTIME_KINDS.includes(runtimeFlag.value)) {
|
|
106
|
-
io.stderr(`--runtime must be one of: ${RUNTIME_KINDS.join(", ")} (got: ${runtimeFlag.value})\n`);
|
|
107
|
-
return USAGE_ERR;
|
|
108
|
-
}
|
|
109
|
-
runtime = runtimeFlag.value;
|
|
110
|
-
}
|
|
111
|
-
const idempotency = takeFlagValue(rest, "--idempotency-key");
|
|
112
|
-
if (idempotency.error) {
|
|
113
|
-
io.stderr(`${idempotency.error}\n`);
|
|
114
|
-
return USAGE_ERR;
|
|
115
|
-
}
|
|
116
|
-
rest = idempotency.remaining;
|
|
117
|
-
// `--runtime-size` selects a managed runtime size from the closed preset set.
|
|
118
|
-
const runtimeSizeFlag = takeFlagValue(rest, "--runtime-size");
|
|
119
|
-
if (runtimeSizeFlag.error) {
|
|
120
|
-
io.stderr(`${runtimeSizeFlag.error}\n`);
|
|
121
|
-
return USAGE_ERR;
|
|
122
|
-
}
|
|
123
|
-
rest = runtimeSizeFlag.remaining;
|
|
124
|
-
if (runtimeSizeFlag.value && !RUNTIME_SIZES.includes(runtimeSizeFlag.value)) {
|
|
125
|
-
io.stderr(`--runtime-size must be one of: ${RUNTIME_SIZES.join(", ")}\n`);
|
|
126
|
-
return USAGE_ERR;
|
|
127
|
-
}
|
|
128
|
-
// `--run-timeout` is the SERVER-side run deadline (distinct from `--timeout`,
|
|
129
|
-
// which bounds the client-side --follow loop). Format-checked locally for
|
|
130
|
-
// fast feedback; the server applies the [1m, 6h] bounds + default.
|
|
131
|
-
const runTimeoutFlag = takeFlagValue(rest, "--run-timeout");
|
|
132
|
-
if (runTimeoutFlag.error) {
|
|
133
|
-
io.stderr(`${runTimeoutFlag.error}\n`);
|
|
134
|
-
return USAGE_ERR;
|
|
135
|
-
}
|
|
136
|
-
rest = runTimeoutFlag.remaining;
|
|
137
|
-
if (runTimeoutFlag.value) {
|
|
138
|
-
const parsed = parseDuration(runTimeoutFlag.value);
|
|
139
|
-
if (parsed.error) {
|
|
140
|
-
io.stderr(`--run-timeout: ${parsed.error}\n`);
|
|
141
|
-
return USAGE_ERR;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
const follow = takeBooleanFlag(rest, "--follow");
|
|
145
|
-
rest = follow.remaining;
|
|
146
|
-
const timeoutFlag = takeOptionFlag(rest, "--timeout");
|
|
147
|
-
rest = timeoutFlag.remaining;
|
|
148
|
-
let followTimeoutMs = null;
|
|
149
|
-
if (timeoutFlag.value !== undefined) {
|
|
150
|
-
const parsed = parseDuration(timeoutFlag.value);
|
|
151
|
-
if (parsed.error) {
|
|
152
|
-
io.stderr(`--timeout: ${parsed.error}\n`);
|
|
153
|
-
return USAGE_ERR;
|
|
154
|
-
}
|
|
155
|
-
followTimeoutMs = parsed.ms;
|
|
156
|
-
}
|
|
157
|
-
const config = takeFlagValue(rest, "--config");
|
|
158
|
-
if (config.error) {
|
|
159
|
-
io.stderr(`${config.error}\n`);
|
|
160
|
-
return USAGE_ERR;
|
|
161
|
-
}
|
|
162
|
-
rest = config.remaining;
|
|
163
|
-
// Flat flags
|
|
164
|
-
const modelFlag = takeFlagValue(rest, "--model");
|
|
165
|
-
if (modelFlag.error) {
|
|
166
|
-
io.stderr(`${modelFlag.error}\n`);
|
|
167
|
-
return USAGE_ERR;
|
|
168
|
-
}
|
|
169
|
-
rest = modelFlag.remaining;
|
|
170
|
-
const systemFlag = takeFlagValue(rest, "--system");
|
|
171
|
-
if (systemFlag.error) {
|
|
172
|
-
io.stderr(`${systemFlag.error}\n`);
|
|
173
|
-
return USAGE_ERR;
|
|
174
|
-
}
|
|
175
|
-
rest = systemFlag.remaining;
|
|
176
|
-
const promptFlags = collectRepeated(rest, "--prompt");
|
|
177
|
-
if (promptFlags.error) {
|
|
178
|
-
io.stderr(`${promptFlags.error}\n`);
|
|
179
|
-
return USAGE_ERR;
|
|
180
|
-
}
|
|
181
|
-
rest = promptFlags.remaining;
|
|
182
|
-
const mcpFlags = collectRepeatedKv(rest, "--mcp");
|
|
183
|
-
if (mcpFlags.error) {
|
|
184
|
-
io.stderr(`${mcpFlags.error}\n`);
|
|
185
|
-
return USAGE_ERR;
|
|
186
|
-
}
|
|
187
|
-
rest = mcpFlags.remaining;
|
|
188
|
-
const mcpAuthFlags = collectRepeatedKvList(rest, "--mcp-auth");
|
|
189
|
-
if (mcpAuthFlags.error) {
|
|
190
|
-
io.stderr(`${mcpAuthFlags.error}\n`);
|
|
191
|
-
return USAGE_ERR;
|
|
192
|
-
}
|
|
193
|
-
rest = mcpAuthFlags.remaining;
|
|
194
|
-
const metadataFlags = collectRepeatedKv(rest, "--metadata");
|
|
195
|
-
if (metadataFlags.error) {
|
|
196
|
-
io.stderr(`${metadataFlags.error}\n`);
|
|
197
|
-
return USAGE_ERR;
|
|
198
|
-
}
|
|
199
|
-
rest = metadataFlags.remaining;
|
|
200
|
-
const proxyEndpointFlags = collectRepeated(rest, "--proxy-endpoint");
|
|
201
|
-
if (proxyEndpointFlags.error) {
|
|
202
|
-
io.stderr(`${proxyEndpointFlags.error}\n`);
|
|
203
|
-
return USAGE_ERR;
|
|
204
|
-
}
|
|
205
|
-
rest = proxyEndpointFlags.remaining;
|
|
206
|
-
const proxyAuthFlags = collectRepeatedKv(rest, "--proxy-auth");
|
|
207
|
-
if (proxyAuthFlags.error) {
|
|
208
|
-
io.stderr(`${proxyAuthFlags.error}\n`);
|
|
209
|
-
return USAGE_ERR;
|
|
210
|
-
}
|
|
211
|
-
rest = proxyAuthFlags.remaining;
|
|
212
|
-
const positional = rest.filter((a) => !a.startsWith("--"));
|
|
213
|
-
const unknownFlags = rest.filter((a) => a.startsWith("--"));
|
|
214
|
-
if (unknownFlags.length > 0) {
|
|
215
|
-
io.stderr(`unknown flag: ${unknownFlags[0]}\n`);
|
|
216
|
-
return USAGE_ERR;
|
|
217
|
-
}
|
|
218
|
-
if (positional.length > 0) {
|
|
219
|
-
io.stderr(`aex run takes no positional arguments (got: ${positional.join(" ")})\n`);
|
|
220
|
-
return USAGE_ERR;
|
|
221
|
-
}
|
|
222
|
-
// ---------------- Resolve run config (config XOR flat flags) ----------------
|
|
223
|
-
let runConfig;
|
|
224
|
-
let mcpHeadersFromConfig = new Map();
|
|
225
|
-
if (config.value) {
|
|
226
|
-
if (modelFlag.value || systemFlag.value || promptFlags.values.length || Object.keys(mcpFlags.entries).length || Object.keys(metadataFlags.entries).length) {
|
|
227
|
-
io.stderr("--config cannot be combined with --model/--system/--prompt/--mcp/--metadata\n");
|
|
228
|
-
return USAGE_ERR;
|
|
229
|
-
}
|
|
230
|
-
try {
|
|
231
|
-
const absPath = resolvePath(io.cwd(), config.value);
|
|
232
|
-
const text = await io.readFile(absPath);
|
|
233
|
-
const raw = JSON.parse(text);
|
|
234
|
-
const { mcpHeaders, normalised } = stripMcpHeadersForParsing(raw);
|
|
235
|
-
mcpHeadersFromConfig = mcpHeaders;
|
|
236
|
-
runConfig = parseRunRequestConfig(normalised);
|
|
237
|
-
}
|
|
238
|
-
catch (err) {
|
|
239
|
-
io.stderr(`failed to load --config: ${err.message}\n`);
|
|
240
|
-
return USAGE_ERR;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
if (!modelFlag.value) {
|
|
245
|
-
io.stderr("--model is required when --config is not provided\n");
|
|
246
|
-
return USAGE_ERR;
|
|
247
|
-
}
|
|
248
|
-
if (!RUN_MODELS.includes(modelFlag.value)) {
|
|
249
|
-
io.stderr(`--model must be one of: ${RUN_MODELS.join(", ")} (got: ${modelFlag.value})\n`);
|
|
250
|
-
return USAGE_ERR;
|
|
251
|
-
}
|
|
252
|
-
if (promptFlags.values.length === 0) {
|
|
253
|
-
io.stderr("--prompt is required (repeatable)\n");
|
|
254
|
-
return USAGE_ERR;
|
|
255
|
-
}
|
|
256
|
-
let resolvedPrompt;
|
|
257
|
-
try {
|
|
258
|
-
resolvedPrompt = await Promise.all(promptFlags.values.map((v) => readMaybeFile(io, v)));
|
|
259
|
-
}
|
|
260
|
-
catch (err) {
|
|
261
|
-
io.stderr(`failed to read --prompt file: ${err.message}\n`);
|
|
262
|
-
return USAGE_ERR;
|
|
263
|
-
}
|
|
264
|
-
let resolvedSystem;
|
|
265
|
-
if (systemFlag.value !== null) {
|
|
266
|
-
try {
|
|
267
|
-
resolvedSystem = await readMaybeFile(io, systemFlag.value);
|
|
268
|
-
}
|
|
269
|
-
catch (err) {
|
|
270
|
-
io.stderr(`failed to read --system file: ${err.message}\n`);
|
|
271
|
-
return USAGE_ERR;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
const mcpRefs = [];
|
|
275
|
-
for (const [name, url] of Object.entries(mcpFlags.entries)) {
|
|
276
|
-
mcpRefs.push({ name, url });
|
|
277
|
-
}
|
|
278
|
-
runConfig = {
|
|
279
|
-
model: modelFlag.value,
|
|
280
|
-
...(resolvedSystem ? { system: resolvedSystem } : {}),
|
|
281
|
-
prompt: resolvedPrompt,
|
|
282
|
-
...(mcpRefs.length > 0 ? { mcpServers: mcpRefs } : {}),
|
|
283
|
-
...(Object.keys(metadataFlags.entries).length > 0
|
|
284
|
-
? { metadata: { ...metadataFlags.entries } }
|
|
285
|
-
: {})
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
// ---------------- Resolve MCP secrets (--mcp-auth + config headers) ----------------
|
|
289
|
-
const mcpServersForSubmission = [...(runConfig.mcpServers ?? [])];
|
|
290
|
-
const mcpServerSecrets = [];
|
|
291
|
-
const mcpHeaderBag = new Map(mcpHeadersFromConfig);
|
|
292
|
-
for (const [name, headerSpec] of mcpAuthFlags.entries) {
|
|
293
|
-
const colon = headerSpec.indexOf(":");
|
|
294
|
-
if (colon <= 0 || colon >= headerSpec.length - 1) {
|
|
295
|
-
io.stderr(`--mcp-auth ${name}: expected 'HeaderName:Value' (got: ${headerSpec})\n`);
|
|
296
|
-
return USAGE_ERR;
|
|
297
|
-
}
|
|
298
|
-
const headerName = headerSpec.slice(0, colon).trim();
|
|
299
|
-
const headerValue = headerSpec.slice(colon + 1).trim();
|
|
300
|
-
if (!headerName || !headerValue) {
|
|
301
|
-
io.stderr(`--mcp-auth ${name}: header name and value must be non-empty\n`);
|
|
302
|
-
return USAGE_ERR;
|
|
303
|
-
}
|
|
304
|
-
const existing = mcpHeaderBag.get(name) ?? {};
|
|
305
|
-
if (Object.prototype.hasOwnProperty.call(existing, headerName)) {
|
|
306
|
-
io.stderr(`--mcp-auth ${name}: duplicate header "${headerName}" — ` +
|
|
307
|
-
`each header may be set only once per server\n`);
|
|
308
|
-
return USAGE_ERR;
|
|
309
|
-
}
|
|
310
|
-
existing[headerName] = headerValue;
|
|
311
|
-
mcpHeaderBag.set(name, existing);
|
|
312
|
-
}
|
|
313
|
-
for (const ref of mcpServersForSubmission) {
|
|
314
|
-
const headers = mcpHeaderBag.get(ref.name);
|
|
315
|
-
if (headers && Object.keys(headers).length > 0) {
|
|
316
|
-
mcpServerSecrets.push({ name: ref.name, url: ref.url, headers });
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
// Reject auth flags that reference an unknown MCP server.
|
|
320
|
-
for (const name of mcpHeaderBag.keys()) {
|
|
321
|
-
if (!mcpServersForSubmission.some((m) => m.name === name)) {
|
|
322
|
-
io.stderr(`--mcp-auth ${name}: no matching --mcp / mcpServers entry declared\n`);
|
|
323
|
-
return USAGE_ERR;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
// ---------------- Proxy endpoints + auth ----------------
|
|
327
|
-
let proxyEndpoints = runConfig.proxyEndpoints ?? [];
|
|
328
|
-
if (proxyEndpointFlags.values.length > 0) {
|
|
329
|
-
try {
|
|
330
|
-
proxyEndpoints = proxyEndpointFlags.values.map((raw, i) => parseJsonOrThrow(raw, `--proxy-endpoint[${i}]`));
|
|
331
|
-
}
|
|
332
|
-
catch (err) {
|
|
333
|
-
io.stderr(`${err.message}\n`);
|
|
334
|
-
return USAGE_ERR;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
const proxyAuth = [];
|
|
338
|
-
for (const [name, spec] of Object.entries(proxyAuthFlags.entries)) {
|
|
339
|
-
const parsed = parseProxyAuth(spec);
|
|
340
|
-
if (!parsed.ok) {
|
|
341
|
-
io.stderr(`--proxy-auth ${name}: ${parsed.reason}\n`);
|
|
342
|
-
return USAGE_ERR;
|
|
343
|
-
}
|
|
344
|
-
proxyAuth.push({ name, value: parsed.value });
|
|
345
|
-
}
|
|
346
|
-
if (proxyEndpoints.length > 0) {
|
|
347
|
-
try {
|
|
348
|
-
validateProxyAuth(proxyEndpoints, proxyAuth);
|
|
349
|
-
}
|
|
350
|
-
catch (err) {
|
|
351
|
-
io.stderr(`proxy auth validation failed: ${err.message}\n`);
|
|
352
|
-
return USAGE_ERR;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
// ---------------- Build submission ----------------
|
|
356
|
-
const promptArray = Array.isArray(runConfig.prompt) ? [...runConfig.prompt] : [runConfig.prompt];
|
|
357
|
-
const skills = runConfig.skills ? [...runConfig.skills] : [];
|
|
358
|
-
const submission = {
|
|
359
|
-
model: runConfig.model,
|
|
360
|
-
...(runConfig.system ? { system: runConfig.system } : {}),
|
|
361
|
-
prompt: promptArray,
|
|
362
|
-
skills,
|
|
363
|
-
agentsMd: [],
|
|
364
|
-
files: [],
|
|
365
|
-
mcpServers: mcpServersForSubmission,
|
|
366
|
-
tools: [],
|
|
367
|
-
...(runConfig.environment ? { environment: runConfig.environment } : {}),
|
|
368
|
-
...(runConfig.metadata ? { metadata: runConfig.metadata } : {})
|
|
369
|
-
};
|
|
370
|
-
const secrets = {
|
|
371
|
-
apiKey: providerKeyValues[provider],
|
|
372
|
-
...(mcpServerSecrets.length > 0 ? { mcpServers: mcpServerSecrets } : {}),
|
|
373
|
-
...(proxyAuth.length > 0 ? { proxyEndpointAuth: proxyAuth } : {})
|
|
374
|
-
};
|
|
375
|
-
const request = {
|
|
376
|
-
idempotencyKey: idempotency.value ?? generateIdempotencyKey(),
|
|
377
|
-
provider,
|
|
378
|
-
...(runtime ? { runtime } : {}),
|
|
379
|
-
submission,
|
|
380
|
-
secrets,
|
|
381
|
-
...(runtimeSizeFlag.value
|
|
382
|
-
? { runtimeSize: runtimeSizeFlag.value }
|
|
383
|
-
: runConfig.runtimeSize
|
|
384
|
-
? { runtimeSize: runConfig.runtimeSize }
|
|
385
|
-
: {}),
|
|
386
|
-
...(runTimeoutFlag.value
|
|
387
|
-
? { timeout: runTimeoutFlag.value }
|
|
388
|
-
: runConfig.timeout
|
|
389
|
-
? { timeout: runConfig.timeout }
|
|
390
|
-
: {}),
|
|
391
|
-
...(runConfig.postHook ? { postHook: runConfig.postHook } : {}),
|
|
392
|
-
...(proxyEndpoints.length > 0 ? { proxyEndpoints } : {})
|
|
393
|
-
};
|
|
394
|
-
const http = makeHttpClient(io, common.flags);
|
|
395
|
-
let run;
|
|
396
|
-
try {
|
|
397
|
-
run = await operations.submitRun(http, request);
|
|
398
|
-
}
|
|
399
|
-
catch (err) {
|
|
400
|
-
return emitJsonError(io, "submit_failed", err.message ?? "submission failed");
|
|
401
|
-
}
|
|
402
|
-
io.stdout(JSON.stringify(run) + "\n");
|
|
403
|
-
if (!follow.present)
|
|
404
|
-
return SUCCESS;
|
|
405
|
-
let emittedEventCount = 0;
|
|
406
|
-
let currentStatus = run.status;
|
|
407
|
-
const deadline = followTimeoutMs === null ? Number.POSITIVE_INFINITY : Date.now() + followTimeoutMs;
|
|
408
|
-
while (!TERMINAL_STATUSES.has(currentStatus)) {
|
|
409
|
-
await sleep(2000);
|
|
410
|
-
try {
|
|
411
|
-
const events = await operations.listRunEvents(http, run.id);
|
|
412
|
-
for (let i = emittedEventCount; i < events.length; i++) {
|
|
413
|
-
io.stdout(JSON.stringify(events[i]) + "\n");
|
|
414
|
-
}
|
|
415
|
-
emittedEventCount = events.length;
|
|
416
|
-
}
|
|
417
|
-
catch (err) {
|
|
418
|
-
io.stderr(`(transient) event poll failed: ${err.message}\n`);
|
|
419
|
-
}
|
|
420
|
-
try {
|
|
421
|
-
const updated = await operations.getRun(http, run.id);
|
|
422
|
-
currentStatus = updated.status;
|
|
423
|
-
}
|
|
424
|
-
catch (err) {
|
|
425
|
-
io.stderr(`(transient) status poll failed: ${err.message}\n`);
|
|
426
|
-
}
|
|
427
|
-
if (!TERMINAL_STATUSES.has(currentStatus) && Date.now() >= deadline) {
|
|
428
|
-
emitJsonError(io, "run_follow_timeout", `timed out after ${followTimeoutMs}ms following run`, { runId: run.id });
|
|
429
|
-
return TIMEOUT_ERR;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
try {
|
|
433
|
-
const final = await operations.getRun(http, run.id);
|
|
434
|
-
io.stdout(JSON.stringify(final) + "\n");
|
|
435
|
-
return final.status === "succeeded" ? SUCCESS : RUNTIME_ERR;
|
|
436
|
-
}
|
|
437
|
-
catch (err) {
|
|
438
|
-
io.stderr(`final status fetch failed: ${err.message}\n`);
|
|
439
|
-
return RUNTIME_ERR;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
function parseProxyAuth(spec) {
|
|
443
|
-
const idx = spec.indexOf(":");
|
|
444
|
-
if (idx <= 0) {
|
|
445
|
-
return { ok: false, reason: `expected '<type>:<value>' (got: ${spec})` };
|
|
446
|
-
}
|
|
447
|
-
const type = spec.slice(0, idx);
|
|
448
|
-
const restValue = spec.slice(idx + 1);
|
|
449
|
-
switch (type) {
|
|
450
|
-
case "bearer":
|
|
451
|
-
if (!restValue)
|
|
452
|
-
return { ok: false, reason: "bearer requires a token value" };
|
|
453
|
-
return { ok: true, value: { type: "bearer", token: restValue } };
|
|
454
|
-
case "header":
|
|
455
|
-
if (!restValue)
|
|
456
|
-
return { ok: false, reason: "header requires a value" };
|
|
457
|
-
return { ok: true, value: { type: "header", value: restValue } };
|
|
458
|
-
case "query":
|
|
459
|
-
if (!restValue)
|
|
460
|
-
return { ok: false, reason: "query requires a value" };
|
|
461
|
-
return { ok: true, value: { type: "query", value: restValue } };
|
|
462
|
-
case "basic": {
|
|
463
|
-
const sep = restValue.indexOf(":");
|
|
464
|
-
if (sep <= 0 || sep >= restValue.length - 1) {
|
|
465
|
-
return { ok: false, reason: "basic requires <username>:<password>" };
|
|
466
|
-
}
|
|
467
|
-
return {
|
|
468
|
-
ok: true,
|
|
469
|
-
value: { type: "basic", username: restValue.slice(0, sep), password: restValue.slice(sep + 1) }
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
default:
|
|
473
|
-
return { ok: false, reason: `unknown auth type '${type}' (expected bearer|basic|header|query)` };
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
function parseJsonOrThrow(raw, label) {
|
|
477
|
-
try {
|
|
478
|
-
return JSON.parse(raw);
|
|
479
|
-
}
|
|
480
|
-
catch (err) {
|
|
481
|
-
throw new Error(`${label} is not valid JSON: ${err.message}`);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Strip `headers` from each `mcpServers[i]` so the value can pass
|
|
486
|
-
* `parseRunRequestConfig` (which forbids headers on the non-secret submission
|
|
487
|
-
* shape). Returns the stripped object plus a name->headers map the
|
|
488
|
-
* caller can fold into `secrets.mcpServers`.
|
|
489
|
-
*/
|
|
490
|
-
function stripMcpHeadersForParsing(input) {
|
|
491
|
-
const mcpHeaders = new Map();
|
|
492
|
-
if (input === null || typeof input !== "object" || Array.isArray(input)) {
|
|
493
|
-
return { normalised: input, mcpHeaders };
|
|
494
|
-
}
|
|
495
|
-
const record = input;
|
|
496
|
-
if (!Array.isArray(record.mcpServers)) {
|
|
497
|
-
return { normalised: input, mcpHeaders };
|
|
498
|
-
}
|
|
499
|
-
const stripped = record.mcpServers.map((entry, i) => {
|
|
500
|
-
if (!entry || typeof entry !== "object")
|
|
501
|
-
return entry;
|
|
502
|
-
const r = entry;
|
|
503
|
-
if (r.headers && typeof r.headers === "object" && !Array.isArray(r.headers)) {
|
|
504
|
-
const name = typeof r.name === "string" ? r.name : `__index_${i}__`;
|
|
505
|
-
const headerObj = {};
|
|
506
|
-
for (const [k, v] of Object.entries(r.headers)) {
|
|
507
|
-
if (typeof v !== "string") {
|
|
508
|
-
throw new Error(`mcpServers[${i}].headers["${k}"] must be a string`);
|
|
509
|
-
}
|
|
510
|
-
headerObj[k] = v;
|
|
511
|
-
}
|
|
512
|
-
mcpHeaders.set(name, headerObj);
|
|
513
|
-
const { headers: _omit, ...rest } = r;
|
|
514
|
-
void _omit;
|
|
515
|
-
return rest;
|
|
516
|
-
}
|
|
517
|
-
return r;
|
|
518
|
-
});
|
|
519
|
-
return { normalised: { ...record, mcpServers: stripped }, mcpHeaders };
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Resolve a `--system` / `--prompt` argument that may be either a
|
|
523
|
-
* literal string or a file reference. Conventions:
|
|
524
|
-
*
|
|
525
|
-
* plain text -> the text itself
|
|
526
|
-
* "@path/to/file" -> contents of the file (relative to cwd)
|
|
527
|
-
* "@@literal" -> the literal "@literal" (escape for content
|
|
528
|
-
* that genuinely starts with `@`)
|
|
529
|
-
*/
|
|
530
|
-
async function readMaybeFile(io, value) {
|
|
531
|
-
if (value.startsWith("@@")) {
|
|
532
|
-
return value.slice(1);
|
|
533
|
-
}
|
|
534
|
-
if (value.startsWith("@")) {
|
|
535
|
-
const path = resolvePath(io.cwd(), value.slice(1));
|
|
536
|
-
return io.readFile(path);
|
|
537
|
-
}
|
|
538
|
-
return value;
|
|
539
|
-
}
|
|
540
|
-
function generateIdempotencyKey() {
|
|
541
|
-
const c = globalThis.crypto;
|
|
542
|
-
if (c?.randomUUID)
|
|
543
|
-
return c.randomUUID();
|
|
544
|
-
return `idem-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
545
|
-
}
|
|
546
|
-
function sleep(ms) {
|
|
547
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
548
|
-
}
|
|
549
|
-
//# sourceMappingURL=run-cmd.js.map
|
package/dist/host/run-cmd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-cmd.js","sourceRoot":"","sources":["../../src/host/run-cmd.ts"],"names":[],"mappings":"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"}
|