@aexhq/sdk 0.38.1 → 0.40.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 +23 -17
- package/dist/_contracts/api-key.d.ts +49 -0
- package/dist/_contracts/api-key.js +87 -0
- package/dist/_contracts/bundle-manifest.d.ts +86 -0
- package/dist/_contracts/bundle-manifest.js +157 -0
- package/dist/_contracts/error-codes.d.ts +26 -0
- package/dist/_contracts/error-codes.js +79 -0
- package/dist/_contracts/error-factory.d.ts +32 -0
- package/dist/_contracts/error-factory.js +142 -0
- package/dist/_contracts/event-envelope.d.ts +33 -10
- package/dist/_contracts/event-envelope.js +46 -10
- package/dist/_contracts/event-view.d.ts +123 -0
- package/dist/_contracts/event-view.js +120 -0
- package/dist/_contracts/http.js +12 -3
- package/dist/_contracts/index.d.ts +8 -4
- package/dist/_contracts/index.js +11 -7
- package/dist/_contracts/models.d.ts +15 -0
- package/dist/_contracts/models.js +33 -0
- package/dist/_contracts/operations.d.ts +70 -2
- package/dist/_contracts/operations.js +143 -7
- package/dist/_contracts/run-config.d.ts +35 -10
- package/dist/_contracts/run-config.js +17 -5
- package/dist/_contracts/run-record.d.ts +3 -2
- package/dist/_contracts/runtime-types.d.ts +148 -36
- package/dist/_contracts/runtime-types.js +33 -1
- package/dist/_contracts/sdk-errors.d.ts +61 -2
- package/dist/_contracts/sdk-errors.js +83 -3
- package/dist/_contracts/sdk-secrets.js +31 -6
- package/dist/_contracts/stable.d.ts +14 -0
- package/dist/_contracts/stable.js +14 -0
- package/dist/_contracts/status.d.ts +28 -1
- package/dist/_contracts/status.js +48 -3
- package/dist/_contracts/submission.d.ts +157 -14
- package/dist/_contracts/submission.js +319 -55
- package/dist/_contracts/suggest.d.ts +15 -0
- package/dist/_contracts/suggest.js +54 -0
- package/dist/asset-upload.d.ts +27 -1
- package/dist/asset-upload.js +219 -4
- package/dist/asset-upload.js.map +1 -1
- package/dist/bundle.d.ts +23 -14
- package/dist/bundle.js +39 -20
- package/dist/bundle.js.map +1 -1
- package/dist/canonical-zip.d.ts +68 -0
- package/dist/canonical-zip.js +307 -0
- package/dist/canonical-zip.js.map +1 -0
- package/dist/cli.mjs +1927 -326
- package/dist/cli.mjs.sha256 +1 -1
- package/dist/client.d.ts +273 -70
- package/dist/client.js +885 -335
- package/dist/client.js.map +1 -1
- package/dist/fetch-archive.js +14 -14
- package/dist/fetch-archive.js.map +1 -1
- package/dist/file.d.ts +33 -6
- package/dist/file.js +120 -54
- package/dist/file.js.map +1 -1
- package/dist/index.d.ts +23 -14
- package/dist/index.js +31 -14
- package/dist/index.js.map +1 -1
- package/dist/node-fs.d.ts +26 -9
- package/dist/node-fs.js +13 -38
- package/dist/node-fs.js.map +1 -1
- package/dist/node-walk.d.ts +69 -0
- package/dist/node-walk.js +146 -0
- package/dist/node-walk.js.map +1 -0
- package/dist/retry.d.ts +9 -13
- package/dist/retry.js +18 -17
- package/dist/retry.js.map +1 -1
- package/dist/skill.d.ts +151 -0
- package/dist/skill.js +298 -0
- package/dist/skill.js.map +1 -0
- package/dist/tool.d.ts +14 -2
- package/dist/tool.js +33 -7
- package/dist/tool.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/authentication.md +29 -5
- package/docs/billing.md +6 -0
- package/docs/concepts/agent-tools.md +11 -0
- package/docs/concepts/composition.md +3 -3
- package/docs/defaults.md +1 -0
- package/docs/errors.md +64 -4
- package/docs/events.md +84 -49
- package/docs/limits-and-quotas.md +24 -0
- package/docs/mcp.md +3 -2
- package/docs/networking.md +7 -1
- package/docs/outputs.md +36 -7
- package/docs/provider-runtime-capabilities.md +1 -1
- package/docs/quickstart.md +17 -7
- package/docs/run-config.md +3 -3
- package/docs/secrets.md +14 -0
- package/docs/skills.md +74 -44
- package/docs/vision-skills.md +3 -3
- package/examples/feature-tour.ts +4 -6
- package/examples/spike-settle-latency.ts +125 -0
- package/package.json +4 -3
- package/dist/_contracts/event-guards.d.ts +0 -67
- package/dist/_contracts/event-guards.js +0 -36
- package/dist/skill-tool.d.ts +0 -102
- package/dist/skill-tool.js +0 -190
- package/dist/skill-tool.js.map +0 -1
package/dist/file.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { DEFAULT_FILE_MOUNT_PATH, assertValidMountPath } from "./_contracts/index.js";
|
|
1
|
+
import { createReadStream } from "node:fs";
|
|
2
|
+
import { readFile, stat } from "node:fs/promises";
|
|
3
|
+
import { DEFAULT_FILE_MOUNT_PATH, RESERVED_META_ENTRY, assertValidMountPath, bundleManifestIsEmpty, serializeBundleManifest } from "./_contracts/index.js";
|
|
4
4
|
import { hashSkillBundle } from "./bundle.js";
|
|
5
|
+
import { frameCanonicalZipSync, streamBundleZip } from "./canonical-zip.js";
|
|
6
|
+
import { walkDirectory } from "./node-walk.js";
|
|
5
7
|
import { zipSync } from "fflate";
|
|
6
8
|
/**
|
|
7
9
|
* File — arbitrary bytes (single file or zipped folder) delivered to
|
|
@@ -19,6 +21,15 @@ import { zipSync } from "fflate";
|
|
|
19
21
|
* `subtitles.srt` becomes `/workspace/subtitles.srt`, a folder lands its entries
|
|
20
22
|
* under `/workspace/`. The resolved path is surfaced back on the Run record.
|
|
21
23
|
*
|
|
24
|
+
* FIDELITY: a directory walk captures executable bits and symlinks into a
|
|
25
|
+
* `.aexmeta.json` sidecar (emitted only when such metadata exists, so a
|
|
26
|
+
* pure-content bundle stays byte-identical → dedup continuity), and honors
|
|
27
|
+
* `.aexignore` (gitignore-compatible) plus always-on defaults (`.git/`,
|
|
28
|
+
* `node_modules/`). SCALE: a large input (total raw size over the streaming
|
|
29
|
+
* threshold, `File.fromPath` only) is uploaded via a streaming two-pass
|
|
30
|
+
* multipart flow that holds only one entry + one part in memory, lifting the
|
|
31
|
+
* old ~2 GiB in-memory ceiling.
|
|
32
|
+
*
|
|
22
33
|
* `client.run` / `openSession` materializes the bytes to the hosted asset store
|
|
23
34
|
* before the run lands; the wire ref becomes `kind:"asset"`. Repeat uploads of the
|
|
24
35
|
* same bytes are deduped.
|
|
@@ -26,11 +37,14 @@ import { zipSync } from "fflate";
|
|
|
26
37
|
export class File {
|
|
27
38
|
#ref;
|
|
28
39
|
#bytes;
|
|
40
|
+
/** Large-input streaming driver — re-runs the deterministic canonical-zip framer per pass. */
|
|
41
|
+
#drive;
|
|
29
42
|
/** Asset id cached after the first use, so reuse skips a re-upload. */
|
|
30
43
|
#assetId;
|
|
31
|
-
constructor(ref, bytes) {
|
|
44
|
+
constructor(ref, bytes, drive) {
|
|
32
45
|
this.#ref = ref;
|
|
33
46
|
this.#bytes = bytes;
|
|
47
|
+
this.#drive = drive;
|
|
34
48
|
}
|
|
35
49
|
get ref() {
|
|
36
50
|
return this.#ref;
|
|
@@ -82,42 +96,83 @@ export class File {
|
|
|
82
96
|
* preserves its real basename (with extension) as the sole zip entry, so the
|
|
83
97
|
* agent finds it at `<mountPath>/<basename>` after unzip. Directories walk
|
|
84
98
|
* recursively into a canonical zip (sorted relative paths, deterministic
|
|
85
|
-
* mtime), landing each entry under `<mountPath>/`.
|
|
86
|
-
*
|
|
87
|
-
*
|
|
99
|
+
* mtime), landing each entry under `<mountPath>/`. Executable bits + symlinks
|
|
100
|
+
* are captured into a `.aexmeta.json` sidecar; `.aexignore` (+ defaults) prune
|
|
101
|
+
* the walk. `mountPath` defaults to `/workspace`. The optional `name` is only
|
|
102
|
+
* the storage slug (dedup label); it never affects the on-disk filename.
|
|
88
103
|
*/
|
|
89
104
|
static async fromPath(path, args) {
|
|
90
105
|
const stats = await stat(path);
|
|
91
106
|
const mountPath = resolveMountPath(args?.mountPath, "File.fromPath");
|
|
92
107
|
// `name` is only the storage slug (dedup label), never the on-disk filename.
|
|
93
|
-
// Slugify a provided name so the stored slug stays DNS-clean; derive from the
|
|
94
|
-
// basename when omitted.
|
|
95
108
|
const slug = args?.name !== undefined ? slugFromFilename(args.name) : inferNameFromPath(path);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
109
|
+
return stats.isDirectory()
|
|
110
|
+
? File.#fromDirectory(path, slug, mountPath, args?.ignore)
|
|
111
|
+
: File.#fromSingleFile(path, slug, mountPath, stats.size, (stats.mode & 0o111) !== 0);
|
|
112
|
+
}
|
|
113
|
+
/** Directory branch: walk + fidelity sidecar + small/streaming path selection. */
|
|
114
|
+
static async #fromDirectory(path, slug, mountPath, ignore) {
|
|
115
|
+
const walk = await walkDirectory(path, ignore);
|
|
116
|
+
if (walk.entries.length === 0 && walk.symlinks.length === 0) {
|
|
117
|
+
throw new Error(`File.fromPath: directory ${JSON.stringify(path)} is empty (no regular files or symlinks)`);
|
|
99
118
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
119
|
+
const meta = { exec: walk.exec, symlinks: walk.symlinks };
|
|
120
|
+
const sidecar = bundleManifestIsEmpty(meta)
|
|
121
|
+
? undefined
|
|
122
|
+
: serializeBundleManifest({ v: 1, exec: walk.exec, symlinks: walk.symlinks });
|
|
123
|
+
if (walk.totalSize <= SMALL_UPLOAD_THRESHOLD_BYTES) {
|
|
124
|
+
// Small: read all bytes and build the canonical zip in memory (single PUT).
|
|
125
|
+
const ordered = [];
|
|
126
|
+
for (const entry of walk.entries) {
|
|
127
|
+
ordered.push([entry.rel, new Uint8Array(await readFile(entry.absPath))]);
|
|
128
|
+
}
|
|
129
|
+
if (sidecar)
|
|
130
|
+
ordered.push([RESERVED_META_ENTRY, sidecar]);
|
|
131
|
+
const zip = frameCanonicalZipSync(ordered);
|
|
132
|
+
const contentHash = await hashSkillBundle(zip);
|
|
133
|
+
return new File({ kind: "draft", name: slug, contentHash, mountPath }, zip);
|
|
105
134
|
}
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
135
|
+
// Large: stream the canonical zip (never materialize the whole bundle).
|
|
136
|
+
const sources = buildEntrySources(walk.entries, sidecar);
|
|
137
|
+
const drive = (sink) => streamBundleZip(sources, sink);
|
|
138
|
+
return new File({ kind: "draft", name: slug, mountPath }, undefined, drive);
|
|
139
|
+
}
|
|
140
|
+
/** Single-file branch: preserve the basename; capture the +x bit; small/streaming by size. */
|
|
141
|
+
static async #fromSingleFile(path, slug, mountPath, size, isExecutable) {
|
|
142
|
+
const basename = path.replace(/\\/g, "/").replace(/\/+$/, "").split("/").at(-1) ?? "";
|
|
143
|
+
const filename = sanitiseFilename(basename) ?? `${slug}`;
|
|
144
|
+
const sidecar = isExecutable
|
|
145
|
+
? serializeBundleManifest({ v: 1, exec: [filename], symlinks: [] })
|
|
146
|
+
: undefined;
|
|
147
|
+
if (size <= SMALL_UPLOAD_THRESHOLD_BYTES) {
|
|
148
|
+
const bytes = new Uint8Array(await readFile(path));
|
|
149
|
+
const ordered = [[filename, bytes]];
|
|
150
|
+
if (sidecar)
|
|
151
|
+
ordered.push([RESERVED_META_ENTRY, sidecar]);
|
|
152
|
+
const zip = frameCanonicalZipSync(ordered);
|
|
153
|
+
const contentHash = await hashSkillBundle(zip);
|
|
154
|
+
return new File({ kind: "draft", name: slug, contentHash, mountPath }, zip);
|
|
155
|
+
}
|
|
156
|
+
const sources = [
|
|
157
|
+
{
|
|
158
|
+
name: filename,
|
|
159
|
+
size,
|
|
160
|
+
read: async () => new Uint8Array(await readFile(path)),
|
|
161
|
+
openStream: () => fileByteStream(path)
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
if (sidecar)
|
|
165
|
+
sources.push({ name: RESERVED_META_ENTRY, size: sidecar.length, read: () => sidecar });
|
|
166
|
+
const drive = (sink) => streamBundleZip(sources, sink);
|
|
167
|
+
return new File({ kind: "draft", name: slug, mountPath }, undefined, drive);
|
|
114
168
|
}
|
|
115
169
|
/**
|
|
116
170
|
* Internal: yield the draft's zipped bytes + metadata so
|
|
117
|
-
* `client.run` / `openSession` can upload it as an asset.
|
|
171
|
+
* `client.run` / `openSession` can upload it as an asset (single PUT).
|
|
172
|
+
* Returns undefined for a streaming (large) draft — use {@link _takeDraftStream}.
|
|
118
173
|
*/
|
|
119
174
|
_takeDraftBundle() {
|
|
120
|
-
if (this.#ref.kind !== "draft" || !this.#bytes) {
|
|
175
|
+
if (this.#ref.kind !== "draft" || !this.#bytes || this.#ref.contentHash === undefined) {
|
|
121
176
|
return undefined;
|
|
122
177
|
}
|
|
123
178
|
return {
|
|
@@ -127,6 +182,16 @@ export class File {
|
|
|
127
182
|
mountPath: this.#ref.mountPath
|
|
128
183
|
};
|
|
129
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Internal: yield the draft's canonical-zip stream driver so `client.run` can
|
|
187
|
+
* upload it via the streaming multipart flow. Returns undefined for the small
|
|
188
|
+
* (in-memory) draft — use {@link _takeDraftBundle}.
|
|
189
|
+
*/
|
|
190
|
+
_takeDraftStream() {
|
|
191
|
+
if (this.#ref.kind !== "draft" || !this.#drive)
|
|
192
|
+
return undefined;
|
|
193
|
+
return { name: this.#ref.name, mountPath: this.#ref.mountPath, drive: this.#drive };
|
|
194
|
+
}
|
|
130
195
|
toJSON() {
|
|
131
196
|
if (this.#ref.kind === "draft") {
|
|
132
197
|
throw new Error("File: draft Files cannot be JSON-serialised — they only become wire refs when " +
|
|
@@ -137,6 +202,34 @@ export class File {
|
|
|
137
202
|
}
|
|
138
203
|
const ZIP_EPOCH = new Date(Date.UTC(1980, 0, 1));
|
|
139
204
|
const WORKSPACE_NAME_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
|
|
205
|
+
/**
|
|
206
|
+
* Total raw input size (via `stat`, before reading bytes) above which
|
|
207
|
+
* `File.fromPath` streams the upload instead of building the whole zip in
|
|
208
|
+
* memory. A pure performance/simplicity switch, NOT a correctness boundary — the
|
|
209
|
+
* streaming framer is byte-identical to the in-memory `zipSync` for Canonical A,
|
|
210
|
+
* so a bundle at the threshold dedups either way.
|
|
211
|
+
*/
|
|
212
|
+
const SMALL_UPLOAD_THRESHOLD_BYTES = 64 * 1024 * 1024;
|
|
213
|
+
/** Build lazy zip entry sources from walked descriptors, appending the sidecar LAST. */
|
|
214
|
+
function buildEntrySources(entries, sidecar) {
|
|
215
|
+
const sources = entries.map((entry) => ({
|
|
216
|
+
name: entry.rel,
|
|
217
|
+
size: entry.size,
|
|
218
|
+
read: async () => new Uint8Array(await readFile(entry.absPath)),
|
|
219
|
+
openStream: () => fileByteStream(entry.absPath)
|
|
220
|
+
}));
|
|
221
|
+
if (sidecar) {
|
|
222
|
+
sources.push({ name: RESERVED_META_ENTRY, size: sidecar.length, read: () => sidecar });
|
|
223
|
+
}
|
|
224
|
+
return sources;
|
|
225
|
+
}
|
|
226
|
+
/** Async-iterate a file's bytes in native stream chunks (for Canonical-B giant entries). */
|
|
227
|
+
async function* fileByteStream(absPath) {
|
|
228
|
+
const stream = createReadStream(absPath);
|
|
229
|
+
for await (const chunk of stream) {
|
|
230
|
+
yield chunk;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
140
233
|
/**
|
|
141
234
|
* Resolve + validate a caller-supplied `mountPath`, defaulting to `/workspace`.
|
|
142
235
|
* Shares {@link assertValidMountPath} with the contracts parser so the SDK and
|
|
@@ -185,31 +278,4 @@ function inferNameFromPath(path) {
|
|
|
185
278
|
const base = normalised.split("/").at(-1) ?? "";
|
|
186
279
|
return slugFromFilename(base);
|
|
187
280
|
}
|
|
188
|
-
async function buildDirZip(dirPath) {
|
|
189
|
-
const files = [];
|
|
190
|
-
await walkDir(dirPath, dirPath, files);
|
|
191
|
-
if (files.length === 0) {
|
|
192
|
-
throw new Error(`File.fromPath: directory ${JSON.stringify(dirPath)} is empty (no regular files)`);
|
|
193
|
-
}
|
|
194
|
-
files.sort((a, b) => (a.rel < b.rel ? -1 : a.rel > b.rel ? 1 : 0));
|
|
195
|
-
const zippable = {};
|
|
196
|
-
for (const { rel, bytes } of files) {
|
|
197
|
-
zippable[rel] = [bytes, { mtime: ZIP_EPOCH }];
|
|
198
|
-
}
|
|
199
|
-
return zipSync(zippable, { level: 6 });
|
|
200
|
-
}
|
|
201
|
-
async function walkDir(base, current, result) {
|
|
202
|
-
const entries = await readdir(current, { withFileTypes: true });
|
|
203
|
-
for (const entry of entries) {
|
|
204
|
-
const fullPath = join(current, entry.name);
|
|
205
|
-
if (entry.isDirectory()) {
|
|
206
|
-
await walkDir(base, fullPath, result);
|
|
207
|
-
}
|
|
208
|
-
else if (entry.isFile()) {
|
|
209
|
-
const bytes = await readFile(fullPath);
|
|
210
|
-
const rel = relative(base, fullPath).replace(/\\/g, "/");
|
|
211
|
-
result.push({ rel, bytes: new Uint8Array(bytes) });
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
281
|
//# sourceMappingURL=file.js.map
|
package/dist/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,37 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public surface of the `aex` SDK.
|
|
3
3
|
*
|
|
4
|
-
* `Aex` is the single SDK client. Composition primitives are `Tool
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* `Aex` is the single SDK client. Composition primitives are `Tool`, `Skill`,
|
|
5
|
+
* `McpServer`, `AgentsMd`, `File`, and `Secret`. Everything else is types,
|
|
6
|
+
* errors, and event type guards re-exported from `@aexhq/contracts`.
|
|
7
7
|
*/
|
|
8
|
-
export { Aex, AgentsMdClient, FilesClient, SecretsClient, SessionClient, SessionHandle, SessionTurnStream } from "./client.js";
|
|
9
|
-
export type { AexOptions, Message, OutputDownloadOptions, OutputFilePathMatch, OutputFilePathSelector, OutputFileSelector, OutputLinkSelector, RunCollectOptions, RunResult, SessionCreateOptions, SessionEnvironmentOptions, SessionEvents, SessionInput, SessionMessages, SessionOutputs, SessionOverrides, SessionRunOptions, SessionRunResult, SessionSendOptions, SessionTurnResult, SessionWebhooks, StreamEventsOptions, WaitForRunOptions } from "./client.js";
|
|
8
|
+
export { Aex, AgentsMdClient, ChildRunHandle, FilesClient, OutputsClient, SecretsClient, SessionClient, SessionHandle, SessionTurnStream, SkillsClient } from "./client.js";
|
|
9
|
+
export type { AexOptions, BatchOptions, Message, OutputDownloadOptions, OutputFilePathMatch, OutputFilePathSelector, OutputFileSelector, OutputLinkSelector, PerSessionOutputSearchQuery, RunCollectOptions, RunEvents, RunOutputs, RunResult, SessionCreateOptions, SessionEnvironmentOptions, SessionEvents, SessionInput, SessionMessages, SessionOutputs, SessionOverrides, SessionRunOptions, SessionRunResult, SessionSendOptions, SessionTerminalRead, SessionTurnResult, SessionWebhooks, SettleAwait, StreamEventsOptions, SubmitResult, WaitForRunOptions } from "./client.js";
|
|
10
10
|
export { Tool } from "./tool.js";
|
|
11
|
-
export {
|
|
11
|
+
export { Skill } from "./skill.js";
|
|
12
12
|
export { AgentsMd } from "./agents-md.js";
|
|
13
13
|
export { File } from "./file.js";
|
|
14
14
|
export { McpServer } from "./mcp-server.js";
|
|
15
15
|
export { Secret } from "./secret.js";
|
|
16
16
|
export type { SecretEnvSubmissionEntry } from "./secret.js";
|
|
17
17
|
export { bundleSkillFiles, hashSkillBundle } from "./bundle.js";
|
|
18
|
-
export type { BundledSkill, BundledTool, SkillFiles, ToolBundleManifest } from "./bundle.js";
|
|
19
|
-
export { AexApiError, AexError, AexNetworkError, CleanupError, CredentialValidationError, ProviderError, RunConfigValidationError, RunStateError } from "./_contracts/index.js";
|
|
18
|
+
export type { BundledSkill, BundledTool, BundleMeta, SkillFiles, ToolBundleManifest } from "./bundle.js";
|
|
19
|
+
export { AEX_API_ERROR_CODES, AEX_API_ERROR_MESSAGES, AEX_API_ERROR_REMEDIES, AexApiError, AexAuthError, AexError, AexIdempotencyConflictError, AexNetworkError, AexNotFoundError, CleanupError, CredentialValidationError, ProviderError, RunConfigValidationError, RunStateError, apiErrorFromResponse, isAexApiErrorCode, isAuthError, isIdempotencyConflict, isInsufficientScope, isNotFound } from "./_contracts/index.js";
|
|
20
|
+
export type { AexApiErrorCode } from "./_contracts/index.js";
|
|
20
21
|
export { AexRateLimitError, isRateLimited, isThrottleFault, parseProviderFault } from "./retry.js";
|
|
21
22
|
export type { ProviderFault, RetryOptions } from "./retry.js";
|
|
22
|
-
export { MCP_SERVER_NAME_PATTERN, SKILL_BUNDLE_LIMITS, SkillBundleValidationError, normaliseSkillBundlePath, validateSkillBundleEntry, validateSkillBundleManifest } from "./_contracts/index.js";
|
|
23
|
-
export type { AssetRef, AgentsMdRef, FileRef, McpServerRef, SkillBundleEntry, SkillBundleManifest,
|
|
24
|
-
export type { AgentsMdRecord as AgentsMdRecordWire, BillingCheckoutPlanKey, BillingCheckoutRequest, BillingHostedSession, BillingLedgerEntry, BillingLedgerPage, BillingLedgerQuery, BillingPortalRequest, BillingSummary, FileRecord as FileRecordWire, Output, OutputFileType, OutputLink, OutputLinkOptions, OutputQuery, OutputSearchQuery, OutputSearchHit, OutputSearchPage, OutputText, ProviderEvent, ReadOutputTextOptions, Run, Session, SessionEvent, SessionListPage, SessionListQuery, SessionRetentionPolicy, SessionStatus, SessionSummary, SessionTurn, RunRecordArchiveFileV1, RunRecordArchiveFileRoleV1, RunRecordArchiveNamespaceV1, RunRecordCostV1, RunRecordDownloadErrorV1, RunRecordFileStatusV1, RunRecordManifestV1, RunRecordMetadataV1, RunRecordNamespaceV1, RunRecordSubmissionSnapshotV1, RunRecordV1,
|
|
23
|
+
export { MCP_SERVER_NAME_PATTERN, SKILL_BUNDLE_LIMITS, SKILL_NAME_PATTERN, SKILL_RESERVED_NAMES, SkillBundleValidationError, normaliseSkillBundlePath, validateSkillBundleEntry, validateSkillBundleManifest } from "./_contracts/index.js";
|
|
24
|
+
export type { AssetRef, AgentsMdRef, FileRef, McpServerRef, SkillBundleEntry, SkillBundleManifest, SkillRecord as SkillRecordWire, SkillRef, ToolInputSchema, ToolRef } from "./_contracts/index.js";
|
|
25
|
+
export type { AgentsMdRecord as AgentsMdRecordWire, BillingCheckoutPlanKey, BillingCheckoutRequest, BillingHostedSession, BillingLedgerEntry, BillingLedgerPage, BillingLedgerQuery, BillingPortalRequest, BillingSummary, FileRecord as FileRecordWire, Output, OutputFileType, OutputLink, OutputLinkOptions, OutputQuery, OutputSearchQuery, OutputSearchHit, OutputSearchPage, OutputText, ProviderEvent, ReadOutputTextOptions, Run, Session, SessionEvent, SessionListPage, SessionListQuery, SessionRetentionPolicy, SessionStatus, SessionSummary, SessionTurn, RunRecordArchiveFileV1, RunRecordArchiveFileRoleV1, RunRecordArchiveNamespaceV1, RunRecordCostV1, RunRecordDownloadErrorV1, RunRecordFileStatusV1, RunRecordManifestV1, RunRecordMetadataV1, RunRecordNamespaceV1, RunRecordSubmissionSnapshotV1, RunRecordV1, RunWebhookDelivery, RunWebhookDeliveryStatus, RuntimeManifest, SecretRecord, UsageSummary, WebhookSigningSecret, WhoAmI } from "./_contracts/index.js";
|
|
25
26
|
export type { PlatformInlineSecrets as InlineSecrets, PlatformMcpServerSecret as McpServerSecret, PlatformEnvironment as RunEnvironment, PlatformRunSubmissionRequest, RunLimits, RunWebhookSpec, } from "./_contracts/index.js";
|
|
26
27
|
export { CUSTODY_MANIFEST_SCHEMA_VERSION, RUN_RECORD_MANIFEST_SCHEMA_VERSION, RUN_RECORD_SCHEMA_VERSION, DEFAULT_RUNTIME_SIZE, RUNTIME_SIZE_PRESETS, RUNTIME_SIZES } from "./_contracts/index.js";
|
|
27
28
|
export { RuntimeSizes as Sizes } from "./_contracts/index.js";
|
|
28
29
|
export type { RuntimeResources, RuntimeSize } from "./_contracts/index.js";
|
|
29
30
|
export { BUILTIN_TOOL_NAMES, BuiltinTools, DEFAULT_BUILTIN_TOOLS, resolveBuiltinToolNames } from "./_contracts/index.js";
|
|
30
31
|
export type { BuiltinToolName } from "./_contracts/index.js";
|
|
31
|
-
export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS } from "./_contracts/index.js";
|
|
32
|
+
export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveModelProvider, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS, suggest } from "./_contracts/index.js";
|
|
32
33
|
export type { RunModel, RunProvider } from "./_contracts/index.js";
|
|
33
|
-
export {
|
|
34
|
-
export type {
|
|
34
|
+
export { usageFromProviderUsage } from "./_contracts/index.js";
|
|
35
|
+
export type { BatchItemResult, BatchResult, ChildRunRef, ResolvableRunRef, RunOutcome, RunRefusalReason, SettledResult } from "./_contracts/index.js";
|
|
36
|
+
export { SESSION_STATUSES, SESSION_TERMINAL_OUTCOMES, isTerminalSessionStatus } from "./_contracts/index.js";
|
|
37
|
+
export type { SessionTerminalOutcome } from "./_contracts/index.js";
|
|
38
|
+
export { PLANE_BASE_URLS, parseApiKey } from "./_contracts/index.js";
|
|
39
|
+
export type { ApiKeyPlane, ParsedApiKey } from "./_contracts/index.js";
|
|
40
|
+
export { RESPONSE_FORMAT_KINDS, STREAMABLE_SHAPES, isStreamableProvider, parseApprovalGate, parseResponseFormat } from "./_contracts/index.js";
|
|
41
|
+
export type { ApprovalGate, ResponseFormat, ResponseFormatKind, StreamableShape } from "./_contracts/index.js";
|
|
42
|
+
export { AEX_RUN_SETTLED_NAME } from "./_contracts/index.js";
|
|
43
|
+
export type { AexEventView, TextMessageEventView, ToolCallResultEventView, ToolCallStartEventView } from "./_contracts/index.js";
|
|
35
44
|
export { SecretString, redactSecrets } from "./_contracts/index.js";
|
|
36
45
|
export { verifyAexWebhook } from "./_contracts/index.js";
|
|
37
46
|
export type { VerifyAexWebhookInput } from "./_contracts/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public surface of the `aex` SDK.
|
|
3
3
|
*
|
|
4
|
-
* `Aex` is the single SDK client. Composition primitives are `Tool
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* `Aex` is the single SDK client. Composition primitives are `Tool`, `Skill`,
|
|
5
|
+
* `McpServer`, `AgentsMd`, `File`, and `Secret`. Everything else is types,
|
|
6
|
+
* errors, and event type guards re-exported from `@aexhq/contracts`.
|
|
7
7
|
*/
|
|
8
|
-
export { Aex, AgentsMdClient, FilesClient, SecretsClient, SessionClient, SessionHandle, SessionTurnStream } from "./client.js";
|
|
8
|
+
export { Aex, AgentsMdClient, ChildRunHandle, FilesClient, OutputsClient, SecretsClient, SessionClient, SessionHandle, SessionTurnStream, SkillsClient } from "./client.js";
|
|
9
9
|
// Composition primitives
|
|
10
10
|
export { Tool } from "./tool.js";
|
|
11
|
-
export {
|
|
11
|
+
export { Skill } from "./skill.js";
|
|
12
12
|
export { AgentsMd } from "./agents-md.js";
|
|
13
13
|
export { File } from "./file.js";
|
|
14
14
|
export { McpServer } from "./mcp-server.js";
|
|
15
15
|
export { Secret } from "./secret.js";
|
|
16
16
|
export { bundleSkillFiles, hashSkillBundle } from "./bundle.js";
|
|
17
|
-
// Errors
|
|
18
|
-
|
|
17
|
+
// Errors. One wire→exception factory (`apiErrorFromResponse`) + a stable
|
|
18
|
+
// `apiCode` on every `AexApiError`; typed subclasses (`AexAuthError` /
|
|
19
|
+
// `AexIdempotencyConflictError` / `AexNotFoundError`) each narrow with a guard.
|
|
20
|
+
export { AEX_API_ERROR_CODES, AEX_API_ERROR_MESSAGES, AEX_API_ERROR_REMEDIES, AexApiError, AexAuthError, AexError, AexIdempotencyConflictError, AexNetworkError, AexNotFoundError, CleanupError, CredentialValidationError, ProviderError, RunConfigValidationError, RunStateError, apiErrorFromResponse, isAexApiErrorCode, isAuthError, isIdempotencyConflict, isInsufficientScope, isNotFound } from "./_contracts/index.js";
|
|
19
21
|
// Built-in transport resilience. Every BFF request is retried on transient
|
|
20
22
|
// failures (429/5xx/529 + network errors) with bounded backoff + jitter,
|
|
21
23
|
// honoring `Retry-After`; tune or disable via the client's `retry` option.
|
|
@@ -23,7 +25,7 @@ export { AexApiError, AexError, AexNetworkError, CleanupError, CredentialValidat
|
|
|
23
25
|
// `isRateLimited`), which can carry an upstream `ProviderFault`.
|
|
24
26
|
export { AexRateLimitError, isRateLimited, isThrottleFault, parseProviderFault } from "./retry.js";
|
|
25
27
|
// Skill-bundle / MCP wire types
|
|
26
|
-
export { MCP_SERVER_NAME_PATTERN, SKILL_BUNDLE_LIMITS, SkillBundleValidationError, normaliseSkillBundlePath, validateSkillBundleEntry, validateSkillBundleManifest } from "./_contracts/index.js";
|
|
28
|
+
export { MCP_SERVER_NAME_PATTERN, SKILL_BUNDLE_LIMITS, SKILL_NAME_PATTERN, SKILL_RESERVED_NAMES, SkillBundleValidationError, normaliseSkillBundlePath, validateSkillBundleEntry, validateSkillBundleManifest } from "./_contracts/index.js";
|
|
27
29
|
// Runtime sizing — the closed set of valid managed runtime presets.
|
|
28
30
|
// Prefer the `Sizes` symbol const (e.g. `Sizes.SHARED_2X_8GB`)
|
|
29
31
|
// so an invalid token is a compile error, not a runtime 400.
|
|
@@ -36,12 +38,27 @@ export { RuntimeSizes as Sizes } from "./_contracts/index.js";
|
|
|
36
38
|
export { BUILTIN_TOOL_NAMES, BuiltinTools, DEFAULT_BUILTIN_TOOLS, resolveBuiltinToolNames } from "./_contracts/index.js";
|
|
37
39
|
// Provider/model surface. Provider choice decides the upstream model route;
|
|
38
40
|
// execution uses the managed path.
|
|
39
|
-
export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS } from "./_contracts/index.js";
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
export {
|
|
41
|
+
export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveModelProvider, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS, suggest } from "./_contracts/index.js";
|
|
42
|
+
// Unified settled-result / batch / typed-decode / lineage surface (WS3/WS8/WS10).
|
|
43
|
+
export { usageFromProviderUsage } from "./_contracts/index.js";
|
|
44
|
+
// Status vocabulary (WS1): the terminal-outcome half + guard, bound to the run
|
|
45
|
+
// outcome SSoT. The bare session `error` is retired — a failed turn is `failed`.
|
|
46
|
+
export { SESSION_STATUSES, SESSION_TERMINAL_OUTCOMES, isTerminalSessionStatus } from "./_contracts/index.js";
|
|
47
|
+
// Self-describing API-key codec + plane routing (WS11): the constructor parses
|
|
48
|
+
// the key to derive the plane baseUrl and fail fast on a plane mismatch.
|
|
49
|
+
export { PLANE_BASE_URLS, parseApiKey } from "./_contracts/index.js";
|
|
50
|
+
// Structured-output (schema-decode), HITL approval-gate, and the streaming
|
|
51
|
+
// capability model (WS9/WS10).
|
|
52
|
+
export { RESPONSE_FORMAT_KINDS, STREAMABLE_SHAPES, isStreamableProvider, parseApprovalGate, parseResponseFormat } from "./_contracts/index.js";
|
|
53
|
+
// Event methods. Every event the SDK yields — the turn stream (`session.send()`),
|
|
54
|
+
// `session.events().list()`, `session.events().streamEnvelopes()`, and
|
|
55
|
+
// `RunResult.events` — is an `AexEventView`: the coordinator envelope enriched
|
|
56
|
+
// with one type-guard METHOD per standardized event type, so a consumer branches
|
|
57
|
+
// with `event.isTextMessage()` / `event.isToolCallStart()` / `event.isRunError()`
|
|
58
|
+
// / … instead of a free-function guard or a raw `event.type === "…"` compare.
|
|
59
|
+
// `isTextMessage()` / `isToolCallStart()` / `isToolCallResult()` additionally
|
|
60
|
+
// NARROW `event.data` to that type's fields (e.g. `event.data.text` is `string`).
|
|
61
|
+
export { AEX_RUN_SETTLED_NAME } from "./_contracts/index.js";
|
|
45
62
|
// Secret utilities
|
|
46
63
|
export { SecretString, redactSecrets } from "./_contracts/index.js";
|
|
47
64
|
// Webhook verification — customers verify inbound run webhooks (Standard
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,GAAG,EACH,cAAc,EACd,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/node-fs.d.ts
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BundleMeta } from "./bundle.js";
|
|
2
|
+
import { type IgnoreOptions } from "./node-walk.js";
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Fidelity-aware read of a local skill/tool directory into an in-memory files map
|
|
5
|
+
* plus its bundle metadata. Delegates to the shared {@link walkDirectory} (the
|
|
6
|
+
* SAME fidelity walk `File.fromPath` uses), so skills/tools now honor `.aexignore`
|
|
7
|
+
* + the always-on defaults (`.git/`, `node_modules/`, …), capture executable bits
|
|
8
|
+
* + symlinks into `meta` (destined for the `.aexmeta.json` sidecar), and never
|
|
9
|
+
* silently vanish a non-regular file (surfaced in `dropped`).
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
11
|
+
* INVARIANT: for a directory with NO exec bits, NO symlinks, and NO ignored paths,
|
|
12
|
+
* `meta` is empty → the downstream bundler emits NO sidecar, so the bundle bytes
|
|
13
|
+
* are byte-identical to the pre-fidelity `readDirectoryAsFiles` output (dedup
|
|
14
|
+
* continuity). Only metadata (or an `.aexignore`/ignored path) changes the bytes.
|
|
15
|
+
*
|
|
16
|
+
* Bun/Node filesystem runtimes only. Browser callers pass a pre-built files map to
|
|
17
|
+
* `bundleSkillFiles` / `bundleToolFiles` directly and never reach this module.
|
|
11
18
|
*/
|
|
12
|
-
export
|
|
19
|
+
export interface DirectoryBundle {
|
|
20
|
+
/** Regular-file bytes, keyed by forward-slash bundle-relative path. */
|
|
21
|
+
readonly files: Record<string, Uint8Array>;
|
|
22
|
+
/** Exec bits + symlinks → the `.aexmeta.json` sidecar (empty ⇒ no sidecar emitted). */
|
|
23
|
+
readonly meta: BundleMeta;
|
|
24
|
+
/** Non-regular files skipped (FIFO/socket/device) — never silently vanished. Sorted. */
|
|
25
|
+
readonly dropped: readonly string[];
|
|
26
|
+
/** Count of paths pruned by the ignore layers (`.aexignore` + defaults). */
|
|
27
|
+
readonly ignoredCount: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function readDirectoryWithFidelity(rootDir: string, ignore?: IgnoreOptions): Promise<DirectoryBundle>;
|
package/dist/node-fs.js
CHANGED
|
@@ -1,44 +1,19 @@
|
|
|
1
|
-
import { readFile
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
* Walk a local directory and load every regular file into an in-memory
|
|
5
|
-
* `SkillFiles` map. Symlinks and non-regular files are skipped (a
|
|
6
|
-
* symlink that points outside the root would still be skipped because
|
|
7
|
-
* we use `lstat` semantics). Paths are normalised to forward-slash
|
|
8
|
-
* relative form so they can flow into `bundleSkillFiles` directly.
|
|
9
|
-
*
|
|
10
|
-
* Bun/Node filesystem runtimes only. Browser callers should use
|
|
11
|
-
* `bundleSkillFiles` with a pre-built files map instead.
|
|
12
|
-
*/
|
|
13
|
-
export async function readDirectoryAsFiles(rootDir) {
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { walkDirectory } from "./node-walk.js";
|
|
3
|
+
export async function readDirectoryWithFidelity(rootDir, ignore) {
|
|
14
4
|
if (typeof rootDir !== "string" || !rootDir) {
|
|
15
|
-
throw new Error("
|
|
16
|
-
}
|
|
17
|
-
const rootStat = await stat(rootDir);
|
|
18
|
-
if (!rootStat.isDirectory()) {
|
|
19
|
-
throw new Error(`readDirectoryAsFiles: ${rootDir} is not a directory`);
|
|
5
|
+
throw new Error("readDirectoryWithFidelity: rootDir is required");
|
|
20
6
|
}
|
|
7
|
+
const walk = await walkDirectory(rootDir, ignore);
|
|
21
8
|
const files = {};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
async function walk(rootDir, currentDir, out) {
|
|
26
|
-
const entries = await readdir(currentDir, { withFileTypes: true });
|
|
27
|
-
for (const dirent of entries) {
|
|
28
|
-
const full = join(currentDir, dirent.name);
|
|
29
|
-
if (dirent.isSymbolicLink()) {
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
if (dirent.isDirectory()) {
|
|
33
|
-
await walk(rootDir, full, out);
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
if (!dirent.isFile()) {
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
const rel = relative(rootDir, full);
|
|
40
|
-
const posixPath = sep === "/" ? rel : rel.split(sep).join(posix.sep);
|
|
41
|
-
out[posixPath] = await readFile(full);
|
|
9
|
+
for (const entry of walk.entries) {
|
|
10
|
+
files[entry.rel] = new Uint8Array(await readFile(entry.absPath));
|
|
42
11
|
}
|
|
12
|
+
return {
|
|
13
|
+
files,
|
|
14
|
+
meta: { exec: walk.exec, symlinks: walk.symlinks },
|
|
15
|
+
dropped: walk.dropped,
|
|
16
|
+
ignoredCount: walk.ignoredCount
|
|
17
|
+
};
|
|
43
18
|
}
|
|
44
19
|
//# sourceMappingURL=node-fs.js.map
|
package/dist/node-fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-fs.js","sourceRoot":"","sources":["../src/node-fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"node-fs.js","sourceRoot":"","sources":["../src/node-fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAC;AA6BnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAe,EAAE,MAAsB;IACrF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAA+B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO;QACL,KAAK;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;QAClD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC"}
|