@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,304 +0,0 @@
1
- /**
2
- * `aex skills <verb>` — workspace skill bundle management. Mirrors
3
- * the SDK's `client.skills` namespace 1:1 so SDK and CLI never drift.
4
- *
5
- * Verbs:
6
- * aex skills upload --from-path <dir> --name <n>
7
- * aex skills upload --file <path> [--file <path> ...] --name <n>
8
- * aex skills list
9
- * aex skills get <skill-id>
10
- * aex skills delete <skill-id>
11
- *
12
- * `--file` stores each path verbatim (relative to cwd) under its
13
- * basename inside the bundle. For directory uploads, use `--from-path`.
14
- */
15
- import { readFile, readdir, stat } from "node:fs/promises";
16
- import { basename, join, posix, relative, resolve as resolvePath, sep } from "node:path";
17
- import { zipSync } from "fflate";
18
- import { SKILL_BUNDLE_LIMITS, operations, validateSkillBundleEntry } from "@aexhq/contracts";
19
- import { SUCCESS, USAGE_ERR, collectRepeated, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun, takeFlagValue } from "./common.js";
20
- export async function runSkillsCmd(io, argv) {
21
- if (await refuseInsideManagedRun(io, "skills"))
22
- return USAGE_ERR;
23
- const [verb, ...rest] = argv;
24
- if (!verb) {
25
- io.stderr("usage: aex skills <upload|list|get|delete> [flags]\n");
26
- return USAGE_ERR;
27
- }
28
- switch (verb) {
29
- case "upload": return runSkillsUpload(io, rest);
30
- case "list": return runSkillsList(io, rest);
31
- case "get": return runSkillsGet(io, rest);
32
- case "delete": return runSkillsDelete(io, rest);
33
- default:
34
- io.stderr(`unknown skills verb: ${verb}\n`);
35
- return USAGE_ERR;
36
- }
37
- }
38
- async function runSkillsUpload(io, argv) {
39
- const common = parseCommonHostFlags(argv);
40
- if (!common.ok) {
41
- io.stderr(`${common.reason}\n`);
42
- return USAGE_ERR;
43
- }
44
- let rest = common.rest;
45
- const nameFlag = takeFlagValue(rest, "--name");
46
- if (nameFlag.error) {
47
- io.stderr(`${nameFlag.error}\n`);
48
- return USAGE_ERR;
49
- }
50
- rest = nameFlag.remaining;
51
- if (!nameFlag.value) {
52
- io.stderr("--name is required\n");
53
- return USAGE_ERR;
54
- }
55
- const fromPath = takeFlagValue(rest, "--from-path");
56
- if (fromPath.error) {
57
- io.stderr(`${fromPath.error}\n`);
58
- return USAGE_ERR;
59
- }
60
- rest = fromPath.remaining;
61
- const fileFlags = collectRepeated(rest, "--file");
62
- if (fileFlags.error) {
63
- io.stderr(`${fileFlags.error}\n`);
64
- return USAGE_ERR;
65
- }
66
- rest = fileFlags.remaining;
67
- const unknown = rest.filter((a) => a.startsWith("--"));
68
- if (unknown.length > 0) {
69
- io.stderr(`unknown flag: ${unknown[0]}\n`);
70
- return USAGE_ERR;
71
- }
72
- if ((fromPath.value && fileFlags.values.length > 0) || (!fromPath.value && fileFlags.values.length === 0)) {
73
- io.stderr("aex skills upload requires exactly one of: --from-path <dir> | --file <path> [--file ...]\n");
74
- return USAGE_ERR;
75
- }
76
- let built;
77
- try {
78
- if (fromPath.value) {
79
- built = await zipDirectory(resolvePath(io.cwd(), fromPath.value));
80
- }
81
- else {
82
- built = await zipFiles(io.cwd(), fileFlags.values);
83
- }
84
- }
85
- catch (err) {
86
- io.stderr(`failed to build skill bundle: ${err.message}\n`);
87
- return USAGE_ERR;
88
- }
89
- const contentHash = `sha256:${await sha256Hex(built.zip)}`;
90
- const http = makeHttpClient(io, common.flags);
91
- try {
92
- // Direct-to-storage upload (bytes bypass the hosted API); falls back to the
93
- // buffered multipart path when object-store presign creds are unconfigured.
94
- const skill = await operations.createSkillBundleDirect(http, io.fetchImpl, {
95
- name: nameFlag.value,
96
- body: built.zip,
97
- contentHash,
98
- manifest: built.manifest,
99
- contentType: "application/zip"
100
- });
101
- io.stdout(JSON.stringify(skill) + "\n");
102
- return SUCCESS;
103
- }
104
- catch (err) {
105
- return emitJsonError(io, "skill_upload_failed", err.message ?? "upload failed");
106
- }
107
- }
108
- async function sha256Hex(bytes) {
109
- const subtle = globalThis.crypto?.subtle;
110
- if (!subtle)
111
- throw new Error("aex skills upload: globalThis.crypto.subtle is required (Node 18+)");
112
- const copy = new Uint8Array(bytes.byteLength);
113
- copy.set(bytes);
114
- const digest = await subtle.digest("SHA-256", copy.buffer);
115
- return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("");
116
- }
117
- async function runSkillsList(io, argv) {
118
- const common = parseCommonHostFlags(argv);
119
- if (!common.ok) {
120
- io.stderr(`${common.reason}\n`);
121
- return USAGE_ERR;
122
- }
123
- const positional = common.rest.filter((a) => !a.startsWith("--"));
124
- const unknown = common.rest.filter((a) => a.startsWith("--"));
125
- if (unknown.length > 0) {
126
- io.stderr(`unknown flag: ${unknown[0]}\n`);
127
- return USAGE_ERR;
128
- }
129
- if (positional.length > 0) {
130
- io.stderr(`aex skills list takes no positional arguments\n`);
131
- return USAGE_ERR;
132
- }
133
- const http = makeHttpClient(io, common.flags);
134
- try {
135
- const skills = await operations.listSkills(http);
136
- for (const s of skills)
137
- io.stdout(JSON.stringify(s) + "\n");
138
- return SUCCESS;
139
- }
140
- catch (err) {
141
- return emitJsonError(io, "skills_list_failed", err.message ?? "list failed");
142
- }
143
- }
144
- async function runSkillsGet(io, argv) {
145
- const common = parseCommonHostFlags(argv);
146
- if (!common.ok) {
147
- io.stderr(`${common.reason}\n`);
148
- return USAGE_ERR;
149
- }
150
- const positional = common.rest.filter((a) => !a.startsWith("--"));
151
- const unknown = common.rest.filter((a) => a.startsWith("--"));
152
- if (unknown.length > 0) {
153
- io.stderr(`unknown flag: ${unknown[0]}\n`);
154
- return USAGE_ERR;
155
- }
156
- if (positional.length !== 1) {
157
- io.stderr("usage: aex skills get <skill-id>\n");
158
- return USAGE_ERR;
159
- }
160
- const skillId = positional[0];
161
- const http = makeHttpClient(io, common.flags);
162
- try {
163
- const skill = await operations.getSkill(http, skillId);
164
- io.stdout(JSON.stringify(skill) + "\n");
165
- return SUCCESS;
166
- }
167
- catch (err) {
168
- return emitJsonError(io, "skill_get_failed", err.message ?? "get failed");
169
- }
170
- }
171
- async function runSkillsDelete(io, argv) {
172
- const common = parseCommonHostFlags(argv);
173
- if (!common.ok) {
174
- io.stderr(`${common.reason}\n`);
175
- return USAGE_ERR;
176
- }
177
- const positional = common.rest.filter((a) => !a.startsWith("--"));
178
- const unknown = common.rest.filter((a) => a.startsWith("--"));
179
- if (unknown.length > 0) {
180
- io.stderr(`unknown flag: ${unknown[0]}\n`);
181
- return USAGE_ERR;
182
- }
183
- if (positional.length !== 1) {
184
- io.stderr("usage: aex skills delete <skill-id>\n");
185
- return USAGE_ERR;
186
- }
187
- const skillId = positional[0];
188
- const http = makeHttpClient(io, common.flags);
189
- try {
190
- await operations.deleteSkill(http, skillId);
191
- io.stdout(JSON.stringify({ skillId, deleted: true }) + "\n");
192
- return SUCCESS;
193
- }
194
- catch (err) {
195
- return emitJsonError(io, "skill_delete_failed", err.message ?? "delete failed");
196
- }
197
- }
198
- /* ---------- bundle building ---------- */
199
- /** Stable mtime for every zip entry — keeps the bundle byte-deterministic
200
- * across machines and re-runs so SDK/CLI hashes match the BFF's
201
- * canonical hash. ZIP's legacy DOS date encoding requires year >= 1980,
202
- * so we anchor to 1980-01-01 UTC rather than the unix epoch. */
203
- const ZIP_EPOCH = new Date(Date.UTC(1980, 0, 1));
204
- function zipEntryFor(bytes) {
205
- return [bytes, { mtime: ZIP_EPOCH }];
206
- }
207
- async function zipDirectory(rootDir) {
208
- const rootStat = await stat(rootDir);
209
- if (!rootStat.isDirectory()) {
210
- throw new Error(`${rootDir} is not a directory`);
211
- }
212
- const collected = new Map();
213
- let totalDecompressed = 0;
214
- let hasSkillMd = false;
215
- await walk(rootDir, rootDir, async (relPathPosix, bytes) => {
216
- const entry = validateSkillBundleEntry({ path: relPathPosix, size: bytes.byteLength });
217
- if (entry.path === "SKILL.md")
218
- hasSkillMd = true;
219
- totalDecompressed += bytes.byteLength;
220
- if (totalDecompressed > SKILL_BUNDLE_LIMITS.maxDecompressedBytes) {
221
- throw new Error(`skill bundle exceeds decompressed cap of ${SKILL_BUNDLE_LIMITS.maxDecompressedBytes} bytes`);
222
- }
223
- if (collected.has(entry.path)) {
224
- throw new Error(`skill bundle contains duplicate path: ${entry.path}`);
225
- }
226
- if (collected.size >= SKILL_BUNDLE_LIMITS.maxFiles) {
227
- throw new Error(`skill bundle exceeds ${SKILL_BUNDLE_LIMITS.maxFiles} file limit`);
228
- }
229
- collected.set(entry.path, bytes);
230
- });
231
- if (collected.size === 0) {
232
- throw new Error(`${rootDir} contains no regular files`);
233
- }
234
- if (!hasSkillMd) {
235
- throw new Error('skill bundle must contain a "SKILL.md" file at the root. ' +
236
- "For AGENTS.md / generic files use the corresponding `aex agentsmd` / " +
237
- "`aex files` commands instead.");
238
- }
239
- // Sort entries for deterministic ordering (zipSync preserves insertion order).
240
- const sorted = [...collected.entries()].sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
241
- const zippable = {};
242
- for (const [path, bytes] of sorted)
243
- zippable[path] = zipEntryFor(bytes);
244
- const out = zipSync(zippable, { level: 6 });
245
- if (out.byteLength > SKILL_BUNDLE_LIMITS.maxCompressedBytes) {
246
- throw new Error(`skill bundle exceeds compressed cap of ${SKILL_BUNDLE_LIMITS.maxCompressedBytes} bytes (got ${out.byteLength})`);
247
- }
248
- return { zip: out, manifest: sorted.map(([path, bytes]) => ({ path, size: bytes.byteLength })) };
249
- }
250
- async function zipFiles(cwd, paths) {
251
- if (paths.length > SKILL_BUNDLE_LIMITS.maxFiles) {
252
- throw new Error(`skill bundle exceeds ${SKILL_BUNDLE_LIMITS.maxFiles} file limit`);
253
- }
254
- const collected = new Map();
255
- let totalDecompressed = 0;
256
- let hasSkillMd = false;
257
- for (const p of paths) {
258
- const abs = resolvePath(cwd, p);
259
- const bytes = await readFile(abs);
260
- const name = basename(p);
261
- const entry = validateSkillBundleEntry({ path: name, size: bytes.byteLength });
262
- if (entry.path === "SKILL.md")
263
- hasSkillMd = true;
264
- totalDecompressed += bytes.byteLength;
265
- if (totalDecompressed > SKILL_BUNDLE_LIMITS.maxDecompressedBytes) {
266
- throw new Error(`skill bundle exceeds decompressed cap of ${SKILL_BUNDLE_LIMITS.maxDecompressedBytes} bytes`);
267
- }
268
- if (collected.has(entry.path)) {
269
- throw new Error(`skill bundle contains duplicate path (basenames must be unique): ${entry.path}`);
270
- }
271
- collected.set(entry.path, bytes);
272
- }
273
- if (!hasSkillMd) {
274
- throw new Error('skill bundle must contain a "SKILL.md" file at the root');
275
- }
276
- const sorted = [...collected.entries()].sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
277
- const zippable = {};
278
- for (const [path, bytes] of sorted)
279
- zippable[path] = zipEntryFor(bytes);
280
- const out = zipSync(zippable, { level: 6 });
281
- if (out.byteLength > SKILL_BUNDLE_LIMITS.maxCompressedBytes) {
282
- throw new Error(`skill bundle exceeds compressed cap of ${SKILL_BUNDLE_LIMITS.maxCompressedBytes} bytes`);
283
- }
284
- return { zip: out, manifest: sorted.map(([path, bytes]) => ({ path, size: bytes.byteLength })) };
285
- }
286
- async function walk(rootDir, currentDir, visit) {
287
- const entries = await readdir(currentDir, { withFileTypes: true });
288
- for (const dirent of entries) {
289
- const full = join(currentDir, dirent.name);
290
- if (dirent.isSymbolicLink())
291
- continue;
292
- if (dirent.isDirectory()) {
293
- await walk(rootDir, full, visit);
294
- continue;
295
- }
296
- if (!dirent.isFile())
297
- continue;
298
- const rel = relative(rootDir, full);
299
- const posixPath = sep === "/" ? rel : rel.split(sep).join(posix.sep);
300
- const bytes = await readFile(full);
301
- await visit(posixPath, bytes);
302
- }
303
- }
304
- //# sourceMappingURL=skills-cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-cmd.js","sourceRoot":"","sources":["../../src/host/skills-cmd.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 runStatusCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,31 +0,0 @@
1
- /**
2
- * `aex status <run-id>` — fetch a single run record via GET
3
- * /api/runs/{id} and print it as JSON.
4
- */
5
- import { operations } from "@aexhq/contracts";
6
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun } from "./common.js";
7
- export async function runStatusCmd(io, argv) {
8
- if (await refuseInsideManagedRun(io, "status"))
9
- return USAGE_ERR;
10
- const common = parseCommonHostFlags(argv);
11
- if (!common.ok) {
12
- io.stderr(`${common.reason}\n`);
13
- return USAGE_ERR;
14
- }
15
- const positional = common.rest.filter((arg) => !arg.startsWith("--"));
16
- if (positional.length !== 1) {
17
- io.stderr("usage: aex status <run-id> [common flags]\n");
18
- return USAGE_ERR;
19
- }
20
- const runId = positional[0];
21
- const http = makeHttpClient(io, common.flags);
22
- try {
23
- const run = await operations.getRun(http, runId);
24
- io.stdout(JSON.stringify(run) + "\n");
25
- return SUCCESS;
26
- }
27
- catch (err) {
28
- return emitJsonError(io, "status_failed", err.message ?? "status fetch failed", { runId });
29
- }
30
- }
31
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/host/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,eAAe,EAAG,GAAa,CAAC,OAAO,IAAI,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxG,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 runWaitCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
package/dist/host/wait.js DELETED
@@ -1,88 +0,0 @@
1
- /**
2
- * `aex wait <run-id> [--timeout <dur>] [--interval <dur>]`
3
- *
4
- * Block until the run reaches a terminal status (the host-side mirror of
5
- * the SDK's `client.waitForRun` / `client.wait`), then print the final
6
- * `Run` record as JSON. Exits 0 when the run `succeeded`, RUNTIME_ERR
7
- * when it reached a non-succeeded terminal status, and TIMEOUT_ERR when
8
- * the `--timeout` deadline elapsed first.
9
- *
10
- * Where `events --follow` streams the event log, `wait` is the quiet
11
- * "tell me when it's done and what the outcome was" verb — one final
12
- * line of JSON, script-friendly exit code.
13
- */
14
- import { operations, TERMINAL_RUN_STATUSES } from "@aexhq/contracts";
15
- import { SUCCESS, RUNTIME_ERR, TIMEOUT_ERR, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, parseDuration, refuseInsideManagedRun, takeOptionFlag } from "./common.js";
16
- // Membership-tested against the loose `string` run status from the BFF, so we
17
- // back it with the canonical terminal set rather than a drift-prone local list.
18
- const TERMINAL_STATUSES = new Set(TERMINAL_RUN_STATUSES);
19
- const DEFAULT_INTERVAL_MS = 2_000;
20
- export async function runWaitCmd(io, argv) {
21
- if (await refuseInsideManagedRun(io, "wait"))
22
- return USAGE_ERR;
23
- const common = parseCommonHostFlags(argv);
24
- if (!common.ok) {
25
- io.stderr(`${common.reason}\n`);
26
- return USAGE_ERR;
27
- }
28
- const timeoutFlag = takeOptionFlag(common.rest, "--timeout");
29
- const intervalFlag = takeOptionFlag(timeoutFlag.remaining, "--interval");
30
- let timeoutMs = null;
31
- if (timeoutFlag.value !== undefined) {
32
- const parsed = parseDuration(timeoutFlag.value);
33
- if (parsed.error) {
34
- io.stderr(`--timeout: ${parsed.error}\n`);
35
- return USAGE_ERR;
36
- }
37
- timeoutMs = parsed.ms;
38
- }
39
- let intervalMs = DEFAULT_INTERVAL_MS;
40
- if (intervalFlag.value !== undefined) {
41
- const parsed = parseDuration(intervalFlag.value);
42
- if (parsed.error) {
43
- io.stderr(`--interval: ${parsed.error}\n`);
44
- return USAGE_ERR;
45
- }
46
- intervalMs = parsed.ms;
47
- }
48
- const positional = intervalFlag.remaining.filter((arg) => !arg.startsWith("--"));
49
- if (positional.length !== 1) {
50
- io.stderr("usage: aex wait <run-id> [--timeout <dur>] [--interval <dur>] [common flags]\n");
51
- return USAGE_ERR;
52
- }
53
- const runId = positional[0];
54
- const http = makeHttpClient(io, common.flags);
55
- const deadline = timeoutMs === null ? Number.POSITIVE_INFINITY : Date.now() + timeoutMs;
56
- // Emit the timeout JSON error body (via emitJsonError's side effect)
57
- // but return the dedicated TIMEOUT_ERR code rather than its RUNTIME_ERR.
58
- const timeout = (extra) => {
59
- emitJsonError(io, "wait_timeout", `timed out after ${timeoutMs}ms waiting for run to finish`, { runId, ...extra });
60
- return TIMEOUT_ERR;
61
- };
62
- while (true) {
63
- let run;
64
- try {
65
- run = await operations.getRun(http, runId);
66
- }
67
- catch (err) {
68
- // Transient read failures are non-fatal until the deadline — a slow
69
- // BFF or a brief network blip shouldn't abort a multi-minute wait.
70
- io.stderr(`(transient) status poll failed: ${err.message}\n`);
71
- if (Date.now() >= deadline)
72
- return timeout({});
73
- await sleep(intervalMs);
74
- continue;
75
- }
76
- if (TERMINAL_STATUSES.has(run.status)) {
77
- io.stdout(JSON.stringify(run) + "\n");
78
- return run.status === "succeeded" ? SUCCESS : RUNTIME_ERR;
79
- }
80
- if (Date.now() >= deadline)
81
- return timeout({ lastStatus: run.status });
82
- await sleep(intervalMs);
83
- }
84
- }
85
- function sleep(ms) {
86
- return new Promise((resolve) => setTimeout(resolve, ms));
87
- }
88
- //# sourceMappingURL=wait.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/host/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAEL,OAAO,EACP,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;AAEjE,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAS,EAAE,IAAuB;IACjE,IAAI,MAAM,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/D,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;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEzE,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,EAAE,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,UAAU,GAAG,mBAAmB,CAAC;IACrC,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,EAAE,CAAC,MAAM,CAAC,eAAe,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,UAAU,GAAG,MAAM,CAAC,EAAG,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,gFAAgF,CAAC,CAAC;QAC5F,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,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExF,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,OAAO,GAAG,CAAC,KAA8B,EAAe,EAAE;QAC9D,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,mBAAmB,SAAS,8BAA8B,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACnH,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oEAAoE;YACpE,mEAAmE;YACnE,EAAE,CAAC,MAAM,CAAC,mCAAoC,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,OAAO,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5D,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { CliIO } from "../internal.js";
2
- import { type CliExitCode } from "./common.js";
3
- export declare function runWhoamiCmd(io: CliIO, argv: readonly string[]): Promise<CliExitCode>;
@@ -1,33 +0,0 @@
1
- /**
2
- * `aex whoami` — GET /api/whoami. Lets agents confirm the token
3
- * resolves to a workspace + scopes before submitting a real run.
4
- *
5
- * `--workspace` is NOT required: the whoami endpoint resolves the
6
- * principal by the bearer alone and tells the caller which workspace
7
- * the token belongs to.
8
- */
9
- import { operations } from "@aexhq/contracts";
10
- import { SUCCESS, USAGE_ERR, emitJsonError, makeHttpClient, parseCommonHostFlags, refuseInsideManagedRun } from "./common.js";
11
- export async function runWhoamiCmd(io, argv) {
12
- if (await refuseInsideManagedRun(io, "whoami"))
13
- return USAGE_ERR;
14
- const common = parseCommonHostFlags(argv);
15
- if (!common.ok) {
16
- io.stderr(`${common.reason}\n`);
17
- return USAGE_ERR;
18
- }
19
- if (common.rest.length > 0) {
20
- io.stderr(`unexpected arguments: ${common.rest.join(" ")}\n`);
21
- return USAGE_ERR;
22
- }
23
- const http = makeHttpClient(io, common.flags);
24
- try {
25
- const me = await operations.whoami(http);
26
- io.stdout(JSON.stringify(me) + "\n");
27
- return SUCCESS;
28
- }
29
- catch (err) {
30
- return emitJsonError(io, "whoami_failed", err.message ?? "whoami failed");
31
- }
32
- }
33
- //# sourceMappingURL=whoami.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/host/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,MAAM,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,eAAe,EAAG,GAAa,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,53 +0,0 @@
1
- /**
2
- * aex CLI — internal IO surface.
3
- *
4
- * This module exports the dependency-injection types and a thin
5
- * `createCli()` factory that the entrypoint (`cli.ts`) calls with real
6
- * IO. Tests import this module directly and inject fakes — there are
7
- * NO `process.env.AEX_*` reads in the production code paths
8
- * (mechanical test in Phase 9 enforces this against the built bundle).
9
- */
10
- import type { ProxyIndexFile, ProxyIndexEntry, ProxyMethod, ProxyResponseMode } from "@aexhq/contracts";
11
- /**
12
- * Manifest file path inside the run container (always present).
13
- *
14
- * The runner writes the manifest to this fixed path before invoking
15
- * in-container `aex` commands.
16
- */
17
- export declare const AEX_INDEX_PATH = "/mnt/session/uploads/aex/index.json";
18
- /** Per-run bearer file path (only present when proxyEndpoints declared). */
19
- export declare const AEX_RUN_TOKEN_PATH = "/mnt/session/uploads/aex/run-token";
20
- /**
21
- * IO surface the CLI depends on. The production entrypoint passes real
22
- * implementations; tests pass fakes. New IO methods must be additive
23
- * and orthogonal: a fake that lacks a method should still satisfy the
24
- * subset of subcommands that don't touch that method.
25
- */
26
- export interface CliIO {
27
- readonly readFile: (path: string) => Promise<string>;
28
- readonly writeFile: (path: string, data: Uint8Array) => Promise<void>;
29
- readonly fetchImpl: typeof fetch;
30
- readonly stdout: (chunk: string) => void;
31
- readonly stderr: (chunk: string) => void;
32
- readonly exit: (code: number) => void;
33
- readonly argv: readonly string[];
34
- /** Current working directory; used to resolve relative `--out` paths. */
35
- readonly cwd: () => string;
36
- /**
37
- * Walk a directory and return every regular-file entry beneath it
38
- * (recursive). Used only by the internal `outputs sync` subcommand
39
- * that the worker invokes from inside a managed run container at
40
- * session terminal. Returns `null` (not throws) when the directory
41
- * does not exist or is unreadable — `outputs sync` records the
42
- * miss in its structured output and continues to the next dir.
43
- */
44
- readonly walkDirectory?: (root: string) => Promise<readonly OutputsSyncFileEntry[] | null>;
45
- }
46
- export interface OutputsSyncFileEntry {
47
- /** Absolute path inside the container. */
48
- readonly path: string;
49
- /** File size in bytes. */
50
- readonly sizeBytes: number;
51
- }
52
- /** Re-exported helpers used by CLI consumers. */
53
- export type { ProxyIndexFile, ProxyIndexEntry, ProxyMethod, ProxyResponseMode };
package/dist/internal.js DELETED
@@ -1,10 +0,0 @@
1
- /**
2
- * Manifest file path inside the run container (always present).
3
- *
4
- * The runner writes the manifest to this fixed path before invoking
5
- * in-container `aex` commands.
6
- */
7
- export const AEX_INDEX_PATH = "/mnt/session/uploads/aex/index.json";
8
- /** Per-run bearer file path (only present when proxyEndpoints declared). */
9
- export const AEX_RUN_TOKEN_PATH = "/mnt/session/uploads/aex/run-token";
10
- //# sourceMappingURL=internal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAEpE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC"}
@@ -1,24 +0,0 @@
1
- /**
2
- * aex outputs sync — IN-CONTAINER ONLY internal subcommand.
3
- *
4
- * This is NOT a user-facing verb. It is a legacy/internal directory walker:
5
- * callers pass explicit absolute directories, and the command emits a
6
- * structured JSON line per file to stdout. Managed runs now capture output by
7
- * filesystem baseline/delta; there is no default output directory and no
8
- * synthetic terminal agent turn.
9
- *
10
- * The subcommand:
11
- * - REFUSES to run outside a managed run (no AEX_INDEX_PATH file).
12
- * - Walks each provided directory recursively.
13
- * - Emits one JSON line per file to stdout:
14
- * {"dir":"/workspace/reports","path":"/workspace/reports/x.txt","sizeBytes":42}
15
- * - Reports missing dirs via stderr (non-fatal). Exits 0 if at least
16
- * one dir contained at least one file; 0 also when ALL dirs were
17
- * empty (best-effort semantics — the worker still records the
18
- * capture attempt either way).
19
- *
20
- * No flags. Each positional argument is one directory to walk.
21
- */
22
- import { type CliIO } from "./internal.js";
23
- import { type CliExitCode } from "./host/common.js";
24
- export declare function runOutputsSyncCmd(io: CliIO, dirs: readonly string[]): Promise<CliExitCode>;