@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.
Files changed (93) hide show
  1. package/README.md +12 -0
  2. package/dist/index.d.ts +2 -7
  3. package/dist/index.js +233 -7
  4. package/package.json +26 -29
  5. package/LICENSE +0 -201
  6. package/dist/cli.d.ts +0 -1
  7. package/dist/cli.js +0 -51
  8. package/dist/cli.js.map +0 -1
  9. package/dist/cli.mjs +0 -4657
  10. package/dist/cli.mjs.sha256 +0 -1
  11. package/dist/host/cancel.d.ts +0 -3
  12. package/dist/host/cancel.js +0 -30
  13. package/dist/host/cancel.js.map +0 -1
  14. package/dist/host/common.d.ts +0 -135
  15. package/dist/host/common.js +0 -281
  16. package/dist/host/common.js.map +0 -1
  17. package/dist/host/delete-asset.d.ts +0 -3
  18. package/dist/host/delete-asset.js +0 -34
  19. package/dist/host/delete-asset.js.map +0 -1
  20. package/dist/host/delete.d.ts +0 -3
  21. package/dist/host/delete.js +0 -30
  22. package/dist/host/delete.js.map +0 -1
  23. package/dist/host/download.d.ts +0 -3
  24. package/dist/host/download.js +0 -80
  25. package/dist/host/download.js.map +0 -1
  26. package/dist/host/events.d.ts +0 -3
  27. package/dist/host/events.js +0 -97
  28. package/dist/host/events.js.map +0 -1
  29. package/dist/host/index.d.ts +0 -17
  30. package/dist/host/index.js +0 -18
  31. package/dist/host/index.js.map +0 -1
  32. package/dist/host/outputs.d.ts +0 -3
  33. package/dist/host/outputs.js +0 -36
  34. package/dist/host/outputs.js.map +0 -1
  35. package/dist/host/run-cmd.d.ts +0 -3
  36. package/dist/host/run-cmd.js +0 -549
  37. package/dist/host/run-cmd.js.map +0 -1
  38. package/dist/host/skills-cmd.d.ts +0 -3
  39. package/dist/host/skills-cmd.js +0 -304
  40. package/dist/host/skills-cmd.js.map +0 -1
  41. package/dist/host/status.d.ts +0 -3
  42. package/dist/host/status.js +0 -31
  43. package/dist/host/status.js.map +0 -1
  44. package/dist/host/wait.d.ts +0 -3
  45. package/dist/host/wait.js +0 -88
  46. package/dist/host/wait.js.map +0 -1
  47. package/dist/host/whoami.d.ts +0 -3
  48. package/dist/host/whoami.js +0 -33
  49. package/dist/host/whoami.js.map +0 -1
  50. package/dist/index.js.map +0 -1
  51. package/dist/internal.d.ts +0 -53
  52. package/dist/internal.js +0 -10
  53. package/dist/internal.js.map +0 -1
  54. package/dist/outputs-sync.d.ts +0 -24
  55. package/dist/outputs-sync.js +0 -70
  56. package/dist/outputs-sync.js.map +0 -1
  57. package/dist/proxy.d.ts +0 -16
  58. package/dist/proxy.js +0 -316
  59. package/dist/proxy.js.map +0 -1
  60. package/dist/run.d.ts +0 -10
  61. package/dist/run.js +0 -166
  62. package/dist/run.js.map +0 -1
  63. package/dist/runtime.d.ts +0 -5
  64. package/dist/runtime.js +0 -4
  65. package/dist/runtime.js.map +0 -1
  66. package/scripts/finalize-bundle.mjs +0 -72
  67. package/src/cli.ts +0 -51
  68. package/src/host/cancel.ts +0 -39
  69. package/src/host/common.ts +0 -329
  70. package/src/host/delete-asset.ts +0 -43
  71. package/src/host/delete.ts +0 -39
  72. package/src/host/download.ts +0 -97
  73. package/src/host/events.ts +0 -113
  74. package/src/host/index.ts +0 -25
  75. package/src/host/outputs.ts +0 -45
  76. package/src/host/run-cmd.ts +0 -578
  77. package/src/host/skills-cmd.ts +0 -317
  78. package/src/host/status.ts +0 -40
  79. package/src/host/wait.ts +0 -110
  80. package/src/host/whoami.ts +0 -42
  81. package/src/index.ts +0 -7
  82. package/src/internal.ts +0 -63
  83. package/src/outputs-sync.ts +0 -76
  84. package/src/proxy.ts +0 -359
  85. package/src/run.ts +0 -187
  86. package/src/runtime.ts +0 -15
  87. package/test/cli.test.ts +0 -519
  88. package/test/host.test.ts +0 -1154
  89. package/test/no-env-vars.test.ts +0 -59
  90. package/test/outputs-sync.test.ts +0 -107
  91. package/tsconfig.build.json +0 -9
  92. package/tsconfig.json +0 -4
  93. package/vitest.config.ts +0 -14
@@ -1 +0,0 @@
1
- 1b28b0b2c5ae5867dad0581510c232cf2cf956226db8efc20e66d97549a0d3b0 cli.mjs
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runCancelCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,30 +0,0 @@
1
- /**
2
- * `aex cancel <run-id>` — POST /api/runs/{id}/cancel.
3
- */
4
- import { operations } from "@aexhq/contracts";
5
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun } from "./common.js";
6
- export async function runCancelCmd(io, argv) {
7
- if (await refuseInsideManagedRun(io, "cancel"))
8
- return USAGE_ERR;
9
- const common = parseCommonHostFlags(argv);
10
- if (!common.ok) {
11
- io.stderr(`${common.reason}\n`);
12
- return USAGE_ERR;
13
- }
14
- const positional = common.rest.filter((arg) => !arg.startsWith("--"));
15
- if (positional.length !== 1) {
16
- io.stderr("usage: aex cancel <run-id> [common flags]\n");
17
- return USAGE_ERR;
18
- }
19
- const runId = positional[0];
20
- const http = makeHttpClient(io, common.flags);
21
- try {
22
- await operations.cancelRun(http, runId);
23
- io.stdout(JSON.stringify({ runId, status: "cancel_requested" }) + "\n");
24
- return SUCCESS;
25
- }
26
- catch (err) {
27
- return emitJsonError(io, "cancel_failed", err.message ?? "cancel failed", { runId });
28
- }
29
- }
30
- //# sourceMappingURL=cancel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/host/cancel.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAEL,OAAO,EACP,SAAS,EACT,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAS,EAAE,IAAuB;IACnE,IAAI,MAAM,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAEjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,eAAe,EAAG,GAAa,CAAC,OAAO,IAAI,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
@@ -1,135 +0,0 @@
1
- /**
2
- * Shared helpers for every host-side aex subcommand. Common flag
3
- * parsing, HttpClient construction, manifest detection so we can refuse
4
- * to run host commands inside a managed run container, and exit codes
5
- * shared with the in-container proxy command.
6
- */
7
- import { HttpClient } from "@aexhq/contracts";
8
- import { type CliIO } from "../internal.js";
9
- export interface CliExitCode {
10
- readonly code: number;
11
- }
12
- export declare const SUCCESS: CliExitCode;
13
- export declare const USAGE_ERR: CliExitCode;
14
- export declare const RUNTIME_ERR: CliExitCode;
15
- /**
16
- * Distinct exit code for "the wait/follow deadline elapsed before the
17
- * run reached a terminal status". Separated from RUNTIME_ERR (1) so a
18
- * script can tell a timeout apart from a run that finished non-succeeded
19
- * (which is also RUNTIME_ERR). Mirrors the SDK's `waitForRun` throwing a
20
- * dedicated timeout error.
21
- */
22
- export declare const TIMEOUT_ERR: CliExitCode;
23
- export interface CommonHostFlags {
24
- readonly apiToken: string;
25
- readonly aexUrl: string;
26
- /** `--debug`: print a redacted per-request trace to stderr. Uploads nothing. */
27
- readonly debug: boolean;
28
- }
29
- export type ParseCommonResult = {
30
- readonly ok: true;
31
- readonly flags: CommonHostFlags;
32
- readonly rest: readonly string[];
33
- } | {
34
- readonly ok: false;
35
- readonly reason: string;
36
- };
37
- /**
38
- * Parse and remove the common flags every host-side subcommand needs,
39
- * leaving the rest for the caller.
40
- *
41
- * The CLI is `flags_only` — no `AEX_*` env reads. `--api-token` is
42
- * required; `--aex-url` defaults to `AEX_DEFAULT_BASE_URL`
43
- * (`https://api.aex.dev`) so SaaS users never need to supply it.
44
- *
45
- * There is no `--workspace` flag: workspace identity is derived
46
- * server-side from the API token.
47
- */
48
- export declare function parseCommonHostFlags(argv: readonly string[]): ParseCommonResult;
49
- export declare function makeHttpClient(io: CliIO, flags: CommonHostFlags): HttpClient;
50
- /**
51
- * Host subcommands refuse to run inside a managed run container. The
52
- * heuristic: presence of the per-run manifest at AEX_INDEX_PATH
53
- * (`/mnt/session/uploads/aex/index.json`) means we're inside a
54
- * run and should expose `proxy`, not the platform-management verbs.
55
- *
56
- * Fails *closed* on read errors that are not "file not found": if the
57
- * manifest exists but is unreadable for any other reason (permissions,
58
- * IO error, etc.) we refuse to run the host verb rather than risk
59
- * leaking workspace-management calls into a sandboxed container.
60
- */
61
- export declare function refuseInsideManagedRun(io: CliIO, verb: string): Promise<boolean>;
62
- /**
63
- * Emit a JSON error body and return RUNTIME_ERR. The shape mirrors the
64
- * in-container proxy error envelope so a script-shaped consumer can
65
- * parse both surfaces the same way.
66
- */
67
- export declare function emitJsonError(io: CliIO, code: string, message: string, extra?: Record<string, unknown>): CliExitCode;
68
- /**
69
- * Repeatable `--var key=value` / `--mcp-secret name=value` /
70
- * `--proxy-auth name=value`-style flag parser. Returns the values in
71
- * insertion order (last-wins on duplicate keys).
72
- */
73
- export declare function collectRepeatedKv(rest: readonly string[], flag: string): {
74
- readonly entries: Record<string, string>;
75
- readonly remaining: readonly string[];
76
- readonly error: string | null;
77
- };
78
- /**
79
- * Repeatable `--flag <value>` collector. Each occurrence consumes one
80
- * argv slot. Returns the collected values in insertion order alongside
81
- * the remaining argv.
82
- */
83
- export declare function collectRepeated(rest: readonly string[], flag: string): {
84
- readonly values: readonly string[];
85
- readonly remaining: readonly string[];
86
- readonly error: string | null;
87
- };
88
- /**
89
- * Repeatable `--flag KEY=VALUE` collector that PRESERVES every
90
- * occurrence (no key-collision collapse). Use this when the same key
91
- * may legitimately appear multiple times — for example,
92
- * `--mcp-auth github=Authorization:Bearer t --mcp-auth github=X-Api-Key:k`
93
- * needs to register both headers, not just the last one.
94
- *
95
- * Returns `[key, value]` pairs in argv order alongside the remaining
96
- * argv with the consumed flags removed.
97
- */
98
- export declare function collectRepeatedKvList(rest: readonly string[], flag: string): {
99
- readonly entries: ReadonlyArray<readonly [string, string]>;
100
- readonly remaining: readonly string[];
101
- readonly error: string | null;
102
- };
103
- export declare function takeFlagValue(rest: readonly string[], flag: string): {
104
- value: string | null;
105
- remaining: readonly string[];
106
- error: string | null;
107
- };
108
- /**
109
- * Parse a human-friendly duration into milliseconds. Accepts a bare
110
- * integer (interpreted as milliseconds) or `<number><unit>` where unit
111
- * is one of `ms`, `s`, `m`, `h` — e.g. `500ms`, `30s`, `8m`, `1h`.
112
- *
113
- * Returns the millisecond count, or an `error` string describing the
114
- * malformed input (the value is never silently coerced to 0). Rejects
115
- * negatives and non-finite values so a `--timeout` can never disable the
116
- * deadline by accident.
117
- */
118
- export declare function parseDuration(input: string): {
119
- readonly ms: number | null;
120
- readonly error: string | null;
121
- };
122
- export declare function takeBooleanFlag(rest: readonly string[], flag: string): {
123
- readonly present: boolean;
124
- readonly remaining: readonly string[];
125
- };
126
- /**
127
- * Take an option flag in either `--flag value` or `--flag=value` form.
128
- * Returns the trailing value (or undefined when the flag is absent)
129
- * plus the remaining args. Unlike `takeFlagValue`, this is permissive
130
- * about the `=` form which CLI users frequently expect.
131
- */
132
- export declare function takeOptionFlag(rest: readonly string[], flag: string): {
133
- readonly value: string | undefined;
134
- readonly remaining: readonly string[];
135
- };
@@ -1,281 +0,0 @@
1
- /**
2
- * Shared helpers for every host-side aex subcommand. Common flag
3
- * parsing, HttpClient construction, manifest detection so we can refuse
4
- * to run host commands inside a managed run container, and exit codes
5
- * shared with the in-container proxy command.
6
- */
7
- import { AEX_DEFAULT_BASE_URL, HttpClient } from "@aexhq/contracts";
8
- import { AEX_INDEX_PATH } from "../internal.js";
9
- export const SUCCESS = { code: 0 };
10
- export const USAGE_ERR = { code: 2 };
11
- export const RUNTIME_ERR = { code: 1 };
12
- /**
13
- * Distinct exit code for "the wait/follow deadline elapsed before the
14
- * run reached a terminal status". Separated from RUNTIME_ERR (1) so a
15
- * script can tell a timeout apart from a run that finished non-succeeded
16
- * (which is also RUNTIME_ERR). Mirrors the SDK's `waitForRun` throwing a
17
- * dedicated timeout error.
18
- */
19
- export const TIMEOUT_ERR = { code: 3 };
20
- /**
21
- * Parse and remove the common flags every host-side subcommand needs,
22
- * leaving the rest for the caller.
23
- *
24
- * The CLI is `flags_only` — no `AEX_*` env reads. `--api-token` is
25
- * required; `--aex-url` defaults to `AEX_DEFAULT_BASE_URL`
26
- * (`https://api.aex.dev`) so SaaS users never need to supply it.
27
- *
28
- * There is no `--workspace` flag: workspace identity is derived
29
- * server-side from the API token.
30
- */
31
- export function parseCommonHostFlags(argv) {
32
- let apiToken = null;
33
- let aexUrl = null;
34
- let debug = false;
35
- const rest = [];
36
- for (let i = 0; i < argv.length; i++) {
37
- const arg = argv[i];
38
- if (arg === "--debug") {
39
- debug = true;
40
- continue;
41
- }
42
- if (arg === "--api-token") {
43
- const v = argv[++i];
44
- if (v === undefined)
45
- return { ok: false, reason: "--api-token requires a value" };
46
- apiToken = v;
47
- continue;
48
- }
49
- if (arg === "--aex-url") {
50
- const v = argv[++i];
51
- if (v === undefined)
52
- return { ok: false, reason: "--aex-url requires a value" };
53
- aexUrl = v;
54
- continue;
55
- }
56
- if (arg === "--workspace" || arg === "--workspace-id") {
57
- // Removed in favor of server-side derivation from the API token.
58
- // Bail out early with an actionable message instead of letting
59
- // the flag fall through and produce a confusing positional-arg
60
- // count error from the calling subcommand.
61
- return {
62
- ok: false,
63
- reason: `unknown flag ${arg}: workspace is derived from --api-token on the server; drop this flag`
64
- };
65
- }
66
- rest.push(arg);
67
- }
68
- if (!apiToken)
69
- return { ok: false, reason: "--api-token is required" };
70
- return {
71
- ok: true,
72
- flags: { apiToken, aexUrl: aexUrl ?? AEX_DEFAULT_BASE_URL, debug },
73
- rest
74
- };
75
- }
76
- export function makeHttpClient(io, flags) {
77
- return new HttpClient({
78
- baseUrl: flags.aexUrl,
79
- apiToken: flags.apiToken,
80
- fetch: io.fetchImpl,
81
- // `--debug`: route the transport's redacted per-request traces to stderr.
82
- ...(flags.debug ? { debug: (line) => io.stderr(`${line}\n`) } : {})
83
- });
84
- }
85
- /**
86
- * Host subcommands refuse to run inside a managed run container. The
87
- * heuristic: presence of the per-run manifest at AEX_INDEX_PATH
88
- * (`/mnt/session/uploads/aex/index.json`) means we're inside a
89
- * run and should expose `proxy`, not the platform-management verbs.
90
- *
91
- * Fails *closed* on read errors that are not "file not found": if the
92
- * manifest exists but is unreadable for any other reason (permissions,
93
- * IO error, etc.) we refuse to run the host verb rather than risk
94
- * leaking workspace-management calls into a sandboxed container.
95
- */
96
- export async function refuseInsideManagedRun(io, verb) {
97
- try {
98
- await io.readFile(AEX_INDEX_PATH);
99
- io.stderr(`\`aex ${verb}\` is a host command and cannot run inside a managed run container.\n` +
100
- "Use `aex proxy ...` to call your declared upstream endpoints from inside the run.\n");
101
- return true;
102
- }
103
- catch (err) {
104
- const code = err?.code;
105
- if (code === "ENOENT" || code === "ENOTDIR") {
106
- // Manifest definitively absent; we are on a host. Allow the verb.
107
- return false;
108
- }
109
- io.stderr(`\`aex ${verb}\` could not determine whether it is running inside a managed run ` +
110
- `container (error reading ${AEX_INDEX_PATH}: ${err.message ?? "unknown"}). ` +
111
- `Refusing to proceed.\n`);
112
- return true;
113
- }
114
- }
115
- /**
116
- * Emit a JSON error body and return RUNTIME_ERR. The shape mirrors the
117
- * in-container proxy error envelope so a script-shaped consumer can
118
- * parse both surfaces the same way.
119
- */
120
- export function emitJsonError(io, code, message, extra = {}) {
121
- io.stderr(JSON.stringify({ error: code, message, ...extra }) + "\n");
122
- return RUNTIME_ERR;
123
- }
124
- /**
125
- * Repeatable `--var key=value` / `--mcp-secret name=value` /
126
- * `--proxy-auth name=value`-style flag parser. Returns the values in
127
- * insertion order (last-wins on duplicate keys).
128
- */
129
- export function collectRepeatedKv(rest, flag) {
130
- const entries = {};
131
- const remaining = [];
132
- for (let i = 0; i < rest.length; i++) {
133
- const arg = rest[i];
134
- if (arg === flag) {
135
- const kv = rest[++i];
136
- if (kv === undefined) {
137
- return { entries, remaining, error: `${flag} requires a KEY=VALUE argument` };
138
- }
139
- const eq = kv.indexOf("=");
140
- if (eq <= 0) {
141
- return { entries, remaining, error: `${flag} must be in the form KEY=VALUE (got: ${kv})` };
142
- }
143
- entries[kv.slice(0, eq)] = kv.slice(eq + 1);
144
- continue;
145
- }
146
- remaining.push(arg);
147
- }
148
- return { entries, remaining, error: null };
149
- }
150
- /**
151
- * Repeatable `--flag <value>` collector. Each occurrence consumes one
152
- * argv slot. Returns the collected values in insertion order alongside
153
- * the remaining argv.
154
- */
155
- export function collectRepeated(rest, flag) {
156
- const values = [];
157
- const remaining = [];
158
- for (let i = 0; i < rest.length; i++) {
159
- const arg = rest[i];
160
- if (arg === flag) {
161
- const v = rest[++i];
162
- if (v === undefined) {
163
- return { values, remaining, error: `${flag} requires a value` };
164
- }
165
- values.push(v);
166
- continue;
167
- }
168
- remaining.push(arg);
169
- }
170
- return { values, remaining, error: null };
171
- }
172
- /**
173
- * Repeatable `--flag KEY=VALUE` collector that PRESERVES every
174
- * occurrence (no key-collision collapse). Use this when the same key
175
- * may legitimately appear multiple times — for example,
176
- * `--mcp-auth github=Authorization:Bearer t --mcp-auth github=X-Api-Key:k`
177
- * needs to register both headers, not just the last one.
178
- *
179
- * Returns `[key, value]` pairs in argv order alongside the remaining
180
- * argv with the consumed flags removed.
181
- */
182
- export function collectRepeatedKvList(rest, flag) {
183
- const entries = [];
184
- const remaining = [];
185
- for (let i = 0; i < rest.length; i++) {
186
- const arg = rest[i];
187
- if (arg === flag) {
188
- const kv = rest[++i];
189
- if (kv === undefined) {
190
- return { entries, remaining, error: `${flag} requires a KEY=VALUE argument` };
191
- }
192
- const eq = kv.indexOf("=");
193
- if (eq <= 0) {
194
- return { entries, remaining, error: `${flag} must be in the form KEY=VALUE (got: ${kv})` };
195
- }
196
- entries.push([kv.slice(0, eq), kv.slice(eq + 1)]);
197
- continue;
198
- }
199
- remaining.push(arg);
200
- }
201
- return { entries, remaining, error: null };
202
- }
203
- export function takeFlagValue(rest, flag) {
204
- let value = null;
205
- const remaining = [];
206
- for (let i = 0; i < rest.length; i++) {
207
- const arg = rest[i];
208
- if (arg === flag) {
209
- const v = rest[++i];
210
- if (v === undefined) {
211
- return { value, remaining, error: `${flag} requires a value` };
212
- }
213
- value = v;
214
- continue;
215
- }
216
- remaining.push(arg);
217
- }
218
- return { value, remaining, error: null };
219
- }
220
- /**
221
- * Parse a human-friendly duration into milliseconds. Accepts a bare
222
- * integer (interpreted as milliseconds) or `<number><unit>` where unit
223
- * is one of `ms`, `s`, `m`, `h` — e.g. `500ms`, `30s`, `8m`, `1h`.
224
- *
225
- * Returns the millisecond count, or an `error` string describing the
226
- * malformed input (the value is never silently coerced to 0). Rejects
227
- * negatives and non-finite values so a `--timeout` can never disable the
228
- * deadline by accident.
229
- */
230
- export function parseDuration(input) {
231
- const match = /^(\d+(?:\.\d+)?)(ms|s|m|h)?$/.exec(input.trim());
232
- if (!match) {
233
- return { ms: null, error: `invalid duration "${input}" (expected e.g. 500ms, 30s, 8m, 1h, or a bare ms integer)` };
234
- }
235
- const value = Number(match[1]);
236
- if (!Number.isFinite(value) || value < 0) {
237
- return { ms: null, error: `invalid duration "${input}" (must be a non-negative number)` };
238
- }
239
- const unit = match[2] ?? "ms";
240
- const factor = unit === "h" ? 3_600_000 : unit === "m" ? 60_000 : unit === "s" ? 1_000 : 1;
241
- return { ms: Math.round(value * factor), error: null };
242
- }
243
- export function takeBooleanFlag(rest, flag) {
244
- const remaining = [];
245
- let present = false;
246
- for (const arg of rest) {
247
- if (arg === flag) {
248
- present = true;
249
- continue;
250
- }
251
- remaining.push(arg);
252
- }
253
- return { present, remaining };
254
- }
255
- /**
256
- * Take an option flag in either `--flag value` or `--flag=value` form.
257
- * Returns the trailing value (or undefined when the flag is absent)
258
- * plus the remaining args. Unlike `takeFlagValue`, this is permissive
259
- * about the `=` form which CLI users frequently expect.
260
- */
261
- export function takeOptionFlag(rest, flag) {
262
- const remaining = [];
263
- let value;
264
- const prefix = `${flag}=`;
265
- for (let i = 0; i < rest.length; i++) {
266
- const arg = rest[i];
267
- if (arg === flag) {
268
- const next = rest[++i];
269
- if (next !== undefined)
270
- value = next;
271
- continue;
272
- }
273
- if (arg.startsWith(prefix)) {
274
- value = arg.slice(prefix.length);
275
- continue;
276
- }
277
- remaining.push(arg);
278
- }
279
- return { value, remaining };
280
- }
281
- //# sourceMappingURL=common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/host/common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAM5D,MAAM,CAAC,MAAM,OAAO,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,SAAS,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAapD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;YAClF,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;YAChF,MAAM,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YACtD,iEAAiE;YACjE,+DAA+D;YAC/D,+DAA+D;YAC/D,2CAA2C;YAC3C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,gBAAgB,GAAG,uEAAuE;aACnG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACvE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,oBAAoB,EAAE,KAAK,EAAE;QAClE,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAS,EAAE,KAAsB;IAC9D,OAAO,IAAI,UAAU,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC,MAAM;QACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,EAAE,CAAC,SAAsB;QAChC,0EAA0E;QAC1E,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAS,EAAE,IAAY;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,EAAE,CAAC,MAAM,CACP,SAAS,IAAI,uEAAuE;YACpF,qFAAqF,CACtF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAAyC,EAAE,IAAI,CAAC;QAC9D,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5C,kEAAkE;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,EAAE,CAAC,MAAM,CACP,SAAS,IAAI,oEAAoE;YACjF,4BAA4B,cAAc,KAAM,GAAa,CAAC,OAAO,IAAI,SAAS,KAAK;YACvF,wBAAwB,CACzB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAS,EAAE,IAAY,EAAE,OAAe,EAAE,QAAiC,EAAE;IACzG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,IAAY;IAKrE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,gCAAgC,EAAE,CAAC;YAChF,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,wCAAwC,EAAE,GAAG,EAAE,CAAC;YAC7F,CAAC;YACD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAuB,EAAE,IAAY;IAKnE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAClE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAuB,EAAE,IAAY;IAKzE,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,gCAAgC,EAAE,CAAC;YAChF,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,wCAAwC,EAAE,GAAG,EAAE,CAAC;YAC7F,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAU,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAuB,EACvB,IAAY;IAEZ,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACjE,CAAC;YACD,KAAK,GAAG,CAAC,CAAC;YACV,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,KAAK,4DAA4D,EAAE,CAAC;IACrH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,KAAK,mCAAmC,EAAE,CAAC;IAC5F,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAuB,EAAE,IAAY;IAInE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,IAAY;IAEZ,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,KAAyB,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,SAAS;gBAAE,KAAK,GAAG,IAAI,CAAC;YACrC,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runDeleteAssetCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,34 +0,0 @@
1
- /**
2
- * `aex delete-asset <assetId|hash>` — DELETE /assets/{assetId}.
3
- *
4
- * Removes a workspace asset blob from the shared content-addressed store.
5
- * Runs that already snapshotted the asset into their own prefix are
6
- * unaffected. Accepts `sha256:<hex>` or a bare 64-hex digest.
7
- */
8
- import { operations } from "@aexhq/contracts";
9
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun } from "./common.js";
10
- export async function runDeleteAssetCmd(io, argv) {
11
- if (await refuseInsideManagedRun(io, "delete-asset"))
12
- return USAGE_ERR;
13
- const common = parseCommonHostFlags(argv);
14
- if (!common.ok) {
15
- io.stderr(`${common.reason}\n`);
16
- return USAGE_ERR;
17
- }
18
- const positional = common.rest.filter((arg) => !arg.startsWith("--"));
19
- if (positional.length !== 1) {
20
- io.stderr("usage: aex delete-asset <hash> [common flags]\n");
21
- return USAGE_ERR;
22
- }
23
- const hash = positional[0];
24
- const http = makeHttpClient(io, common.flags);
25
- try {
26
- await operations.deleteWorkspaceAsset(http, hash);
27
- io.stdout(JSON.stringify({ hash, deleted: true }) + "\n");
28
- return SUCCESS;
29
- }
30
- catch (err) {
31
- return emitJsonError(io, "delete_asset_failed", err.message ?? "delete-asset failed", { hash });
32
- }
33
- }
34
- //# sourceMappingURL=delete-asset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete-asset.js","sourceRoot":"","sources":["../../src/host/delete-asset.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAEL,OAAO,EACP,SAAS,EACT,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAS,EAAE,IAAuB;IACxE,IAAI,MAAM,sBAAsB,CAAC,EAAE,EAAE,cAAc,CAAC;QAAE,OAAO,SAAS,CAAC;IAEvE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAE5B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,qBAAqB,EAAG,GAAa,CAAC,OAAO,IAAI,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runDeleteCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,30 +0,0 @@
1
- /**
2
- * `aex delete <run-id>` — DELETE /api/runs/{id}.
3
- */
4
- import { operations } from "@aexhq/contracts";
5
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun } from "./common.js";
6
- export async function runDeleteCmd(io, argv) {
7
- if (await refuseInsideManagedRun(io, "delete"))
8
- return USAGE_ERR;
9
- const common = parseCommonHostFlags(argv);
10
- if (!common.ok) {
11
- io.stderr(`${common.reason}\n`);
12
- return USAGE_ERR;
13
- }
14
- const positional = common.rest.filter((arg) => !arg.startsWith("--"));
15
- if (positional.length !== 1) {
16
- io.stderr("usage: aex delete <run-id> [common flags]\n");
17
- return USAGE_ERR;
18
- }
19
- const runId = positional[0];
20
- const http = makeHttpClient(io, common.flags);
21
- try {
22
- await operations.deleteRun(http, runId);
23
- io.stdout(JSON.stringify({ runId, deleted: true }) + "\n");
24
- return SUCCESS;
25
- }
26
- catch (err) {
27
- return emitJsonError(io, "delete_failed", err.message ?? "delete failed", { runId });
28
- }
29
- }
30
- //# sourceMappingURL=delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/host/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAEL,OAAO,EACP,SAAS,EACT,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAS,EAAE,IAAuB;IACnE,IAAI,MAAM,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAEjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,eAAe,EAAG,GAAa,CAAC,OAAO,IAAI,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runDownloadCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,80 +0,0 @@
1
- /**
2
- * `aex download <run-id> [--only namespace] [--out path]` — download
3
- * a run's content as a zip, assembled client-side from the public read
4
- * endpoints (no per-output id required).
5
- *
6
- * Without `--only`, downloads everything public — organised into
7
- * `metadata/run.json`, typed `events/events.jsonl`, `outputs/<rel>`
8
- * (deliverables), plus `manifest.json`.
9
- *
10
- * `--only outputs|events|metadata` downloads just that one
11
- * namespace (files at the zip root).
12
- *
13
- * `--out` resolves relative to the host CWD; if omitted the file is
14
- * written to `aex-run-<run-id>[-<namespace>].zip` in the current
15
- * directory.
16
- */
17
- import { resolve as resolvePath } from "node:path";
18
- import { operations } from "@aexhq/contracts";
19
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun, takeFlagValue } from "./common.js";
20
- const NAMESPACE_DOWNLOADERS = {
21
- outputs: operations.downloadOutputs,
22
- events: operations.downloadEvents,
23
- metadata: operations.downloadMetadata
24
- };
25
- export async function runDownloadCmd(io, argv) {
26
- if (await refuseInsideManagedRun(io, "download"))
27
- return USAGE_ERR;
28
- const common = parseCommonHostFlags(argv);
29
- if (!common.ok) {
30
- io.stderr(`${common.reason}\n`);
31
- return USAGE_ERR;
32
- }
33
- const outFlag = takeFlagValue(common.rest, "--out");
34
- if (outFlag.error) {
35
- io.stderr(`${outFlag.error}\n`);
36
- return USAGE_ERR;
37
- }
38
- const onlyFlag = takeFlagValue(outFlag.remaining, "--only");
39
- if (onlyFlag.error) {
40
- io.stderr(`${onlyFlag.error}\n`);
41
- return USAGE_ERR;
42
- }
43
- if (onlyFlag.value !== null && !(onlyFlag.value in NAMESPACE_DOWNLOADERS)) {
44
- io.stderr(`--only must be one of: ${Object.keys(NAMESPACE_DOWNLOADERS).join(", ")}\n`);
45
- return USAGE_ERR;
46
- }
47
- const namespace = onlyFlag.value;
48
- const positional = onlyFlag.remaining.filter((arg) => !arg.startsWith("--"));
49
- if (positional.length !== 1) {
50
- io.stderr("usage: aex download <run-id> [--only outputs|events|metadata] [--out path] [common flags]\n");
51
- return USAGE_ERR;
52
- }
53
- const runId = positional[0];
54
- const http = makeHttpClient(io, common.flags);
55
- const downloader = namespace ? NAMESPACE_DOWNLOADERS[namespace] : operations.download;
56
- let bytes;
57
- try {
58
- bytes = await downloader(http, runId);
59
- }
60
- catch (err) {
61
- return emitJsonError(io, "download_failed", err.message ?? "download failed", { runId });
62
- }
63
- const destination = resolveDestination(io, outFlag.value, runId, namespace);
64
- try {
65
- await io.writeFile(destination, bytes);
66
- }
67
- catch (err) {
68
- return emitJsonError(io, "write_failed", `failed to write archive: ${err.message}`, { destination });
69
- }
70
- io.stdout(JSON.stringify({ runId, namespace: namespace ?? "all", path: destination, bytes: bytes.byteLength }) + "\n");
71
- return SUCCESS;
72
- }
73
- function resolveDestination(io, out, runId, namespace) {
74
- if (out) {
75
- return resolvePath(io.cwd(), out);
76
- }
77
- const suffix = namespace ? `-${namespace}` : "";
78
- return resolvePath(io.cwd(), `aex-run-${runId}${suffix}.zip`);
79
- }
80
- //# sourceMappingURL=download.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/host/download.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runEventsCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;