@aexhq/sdk 0.25.2 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/_contracts/connection-ticket.d.ts +2 -2
- package/dist/_contracts/connection-ticket.js +2 -2
- package/dist/_contracts/event-stream-client.d.ts +2 -2
- package/dist/_contracts/event-stream-client.js +2 -2
- package/dist/_contracts/proxy-protocol.js +1 -1
- package/dist/_contracts/runtime-manifest.d.ts +1 -1
- package/dist/_contracts/runtime-sizes.d.ts +5 -0
- package/dist/_contracts/runtime-sizes.js +3 -1
- package/dist/agents-md.d.ts +1 -1
- package/dist/agents-md.js +1 -1
- package/dist/agents-md.js.map +1 -1
- package/dist/asset-upload.js +2 -2
- package/dist/asset-upload.js.map +1 -1
- package/dist/bundle.d.ts +1 -1
- package/dist/bundle.js +2 -2
- package/dist/bundle.js.map +1 -1
- package/dist/cli.mjs +135 -134
- package/dist/cli.mjs.sha256 +1 -1
- package/dist/fetch-archive.js +2 -2
- package/dist/fetch-archive.js.map +1 -1
- package/dist/node-fs.d.ts +2 -2
- package/dist/node-fs.js +2 -2
- package/dist/skill.d.ts +2 -2
- package/dist/skill.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/credentials.md +3 -3
- package/docs/defaults.md +70 -0
- package/docs/limits-and-quotas.md +108 -0
- package/docs/provider-runtime-capabilities.md +1 -1
- package/docs/public-surface.json +1 -1
- package/docs/quickstart.md +1 -1
- package/docs/release.md +69 -101
- package/docs/testing.md +8 -8
- package/docs/vision-skills.md +2 -2
- package/package.json +15 -14
- package/LICENSE +0 -201
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-archive.js","sourceRoot":"","sources":["../src/fetch-archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAkB,MAAM,kBAAkB,CAAC;AAGvE;;;;;;;;;;;;GAYG;AAEH,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAgBlC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,OAAiC,EAAE;IAEnC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAK,UAAoC,CAAC,KAAK,CAAC;IAC5E,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,
|
|
1
|
+
{"version":3,"file":"fetch-archive.js","sourceRoot":"","sources":["../src/fetch-archive.ts"],"names":[],"mappings":"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"}
|
package/dist/node-fs.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { SkillFiles } from "./bundle.js";
|
|
|
6
6
|
* we use `lstat` semantics). Paths are normalised to forward-slash
|
|
7
7
|
* relative form so they can flow into `bundleSkillFiles` directly.
|
|
8
8
|
*
|
|
9
|
-
* Node
|
|
10
|
-
* pre-built files map instead.
|
|
9
|
+
* Bun/Node filesystem runtimes only. Browser callers should use
|
|
10
|
+
* `bundleSkillFiles` with a pre-built files map instead.
|
|
11
11
|
*/
|
|
12
12
|
export declare function readDirectoryAsFiles(rootDir: string): Promise<SkillFiles>;
|
package/dist/node-fs.js
CHANGED
|
@@ -7,8 +7,8 @@ import { join, posix, relative, sep } from "node:path";
|
|
|
7
7
|
* we use `lstat` semantics). Paths are normalised to forward-slash
|
|
8
8
|
* relative form so they can flow into `bundleSkillFiles` directly.
|
|
9
9
|
*
|
|
10
|
-
* Node
|
|
11
|
-
* pre-built files map instead.
|
|
10
|
+
* Bun/Node filesystem runtimes only. Browser callers should use
|
|
11
|
+
* `bundleSkillFiles` with a pre-built files map instead.
|
|
12
12
|
*/
|
|
13
13
|
export async function readDirectoryAsFiles(rootDir) {
|
|
14
14
|
if (typeof rootDir !== "string" || !rootDir) {
|
package/dist/skill.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export declare class Skill {
|
|
|
50
50
|
}): Promise<Skill>;
|
|
51
51
|
/**
|
|
52
52
|
* Read a local directory and build a draft Skill. Symlinks and
|
|
53
|
-
* non-regular files are skipped. Node
|
|
53
|
+
* non-regular files are skipped. Bun/Node filesystem runtimes only.
|
|
54
54
|
*/
|
|
55
55
|
static fromPath(rootDir: string, args: {
|
|
56
56
|
readonly name: string;
|
|
@@ -68,7 +68,7 @@ export declare class Skill {
|
|
|
68
68
|
* top-level folder (which is stripped). The signed URL only needs to be valid
|
|
69
69
|
* for this call; `client.submit` snapshots the bytes into the run.
|
|
70
70
|
*
|
|
71
|
-
* Universal (Node 18+ / browser): requires a global `fetch`, or pass one.
|
|
71
|
+
* Universal (Bun / Node 18+ / browser): requires a global `fetch`, or pass one.
|
|
72
72
|
*/
|
|
73
73
|
static fromUrl(url: string, args: {
|
|
74
74
|
readonly name: string;
|
package/dist/skill.js
CHANGED
|
@@ -75,7 +75,7 @@ export class Skill {
|
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* Read a local directory and build a draft Skill. Symlinks and
|
|
78
|
-
* non-regular files are skipped. Node
|
|
78
|
+
* non-regular files are skipped. Bun/Node filesystem runtimes only.
|
|
79
79
|
*/
|
|
80
80
|
static async fromPath(rootDir, args) {
|
|
81
81
|
const files = await readDirectoryAsFiles(rootDir);
|
|
@@ -94,7 +94,7 @@ export class Skill {
|
|
|
94
94
|
* top-level folder (which is stripped). The signed URL only needs to be valid
|
|
95
95
|
* for this call; `client.submit` snapshots the bytes into the run.
|
|
96
96
|
*
|
|
97
|
-
* Universal (Node 18+ / browser): requires a global `fetch`, or pass one.
|
|
97
|
+
* Universal (Bun / Node 18+ / browser): requires a global `fetch`, or pass one.
|
|
98
98
|
*/
|
|
99
99
|
static async fromUrl(url, args) {
|
|
100
100
|
if (!args || typeof args !== "object") {
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/docs/credentials.md
CHANGED
|
@@ -93,10 +93,10 @@ const runId = await aex.submit({
|
|
|
93
93
|
});
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
Inside the run container, every session has the platform CLI mounted at `/mnt/session/uploads/aex/aex` (a
|
|
96
|
+
Inside the run container, every session has the platform CLI mounted at `/mnt/session/uploads/aex/aex` (a Bun-compatible ESM bundle) and a manifest at `/mnt/session/uploads/aex/index.json` describing the declared endpoints. The skill invokes the CLI through `bun` (the mount has no execute permission so direct invocation fails with `bad interpreter: Permission denied`):
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
|
-
|
|
99
|
+
bun /mnt/session/uploads/aex/aex proxy stripe \
|
|
100
100
|
--method GET \
|
|
101
101
|
--path /v1/charges/ch_123 \
|
|
102
102
|
--response-mode headers_only
|
|
@@ -142,7 +142,7 @@ ProxyEndpoint.none({
|
|
|
142
142
|
});
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
-
`
|
|
145
|
+
`bun /mnt/session/uploads/aex/aex --help` reads endpoint details from `/mnt/session/uploads/aex/index.json`. Runs that do not declare any `proxyEndpoints` still have the CLI and an empty manifest mounted, so agents never need to introspect whether the surface exists.
|
|
146
146
|
|
|
147
147
|
### Networking
|
|
148
148
|
|
package/docs/defaults.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Defaults
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Defaults
|
|
6
|
+
|
|
7
|
+
These are the values aex applies when you **omit** the corresponding option on a
|
|
8
|
+
run. Every value is mirrored from a single source-of-truth constant; the
|
|
9
|
+
constant file is authoritative and this page is generated documentation, not a
|
|
10
|
+
second source of truth. If a value here ever disagrees with the linked constant,
|
|
11
|
+
the constant wins.
|
|
12
|
+
|
|
13
|
+
Source of truth:
|
|
14
|
+
[`packages/shared/src/limits.ts`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts)
|
|
15
|
+
(runtime-size presets:
|
|
16
|
+
[`packages/contracts/src/runtime-sizes.ts`](https://github.com/aexhq/aex/blob/main/packages/contracts/src/runtime-sizes.ts)).
|
|
17
|
+
For the hard ceilings and who can raise them, see
|
|
18
|
+
[Limits & quotas](limits-and-quotas.md). For policy boundaries, see
|
|
19
|
+
[Limits](limits.md).
|
|
20
|
+
|
|
21
|
+
## Run
|
|
22
|
+
|
|
23
|
+
| Option | Default | How to override | Source |
|
|
24
|
+
| --- | --- | --- | --- |
|
|
25
|
+
| `timeout` (run deadline) | 1 hour | Per-run via `options.timeout` (e.g. `"30m"`, `"2h"`), clamped to the run-timeout floor/ceiling. | [`RUN_DEFAULT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L154) |
|
|
26
|
+
| `runtimeSize` (machine size) | `shared-1x-128mb` — 1 vCPU, 128 MB | Per-run via `options.runtimeSize` (use `RuntimeSizes.*` in TypeScript). | [`RUN_DEFAULT_RUNTIME_SIZE`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L143) |
|
|
27
|
+
| `postHook.timeout` | 60 minutes | Per-run via the hook's `timeoutMs`. | [`RUN_DEFAULT_POST_HOOK_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L234) |
|
|
28
|
+
| `postHook.maxTurns` (repair budget) | 10 turns | Per-run via the hook's `maxTurns`. | [`RUN_DEFAULT_POST_HOOK_MAX_TURNS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L244) |
|
|
29
|
+
|
|
30
|
+
## Tools
|
|
31
|
+
|
|
32
|
+
| Option | Default | How to override | Source |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| Per-call exec timeout | 30 minutes | Per-call via the tool call's `timeoutMs`. | [`RUN_DEFAULT_EXEC_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L202) |
|
|
35
|
+
| `web_fetch` returned body | 500 KB (UTF-8) | Per-call via the tool's `max_bytes` argument. | [`REQUEST_WEB_FETCH_DEFAULT_MAX_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L528) |
|
|
36
|
+
|
|
37
|
+
## MCP
|
|
38
|
+
|
|
39
|
+
| Option | Default | How to override | Source |
|
|
40
|
+
| --- | --- | --- | --- |
|
|
41
|
+
| MCP connect timeout (register + initialize + discover) | 30 seconds | Per-port via `connectTimeoutMs`. | [`RUN_DEFAULT_MCP_CONNECT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L255) |
|
|
42
|
+
| MCP `tools/call` timeout | 30 minutes | Per-port via `callTimeoutMs`. | [`RUN_DEFAULT_MCP_CALL_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L265) |
|
|
43
|
+
|
|
44
|
+
## Proxy endpoints
|
|
45
|
+
|
|
46
|
+
| Option | Default | How to override | Source |
|
|
47
|
+
| --- | --- | --- | --- |
|
|
48
|
+
| `maxRequestBytes` | 10 MiB | Per-endpoint via the endpoint's `maxRequestBytes`. | [`REQUEST_PROXY_DEFAULT_MAX_REQUEST_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L499) |
|
|
49
|
+
| `maxResponseBytes` | `0` (unlimited — the response is streamed unbuffered) | Per-endpoint via the endpoint's `maxResponseBytes`. | [`REQUEST_PROXY_DEFAULT_MAX_RESPONSE_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L509) |
|
|
50
|
+
| `timeoutMs` (upstream) | 5 minutes | Per-endpoint via the endpoint's `timeoutMs`. | [`REQUEST_PROXY_DEFAULT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L519) |
|
|
51
|
+
|
|
52
|
+
## Links (signed URLs and tickets)
|
|
53
|
+
|
|
54
|
+
| Option | Default | How to override | Source |
|
|
55
|
+
| --- | --- | --- | --- |
|
|
56
|
+
| Output link / signed-URL TTL | 300 seconds (5 minutes) at the storage layer; `outputLink(...)` defaults to `"1h"` | Per-call via `expiresSeconds` (storage) or `expiresIn` on `outputLink` / `fetchOutput`. | [`REQUEST_PRESIGN_URL_DEFAULT_TTL_SECONDS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L539) |
|
|
57
|
+
| Event-stream connection ticket TTL | 60 seconds | Per-mint via the `ttlMs` argument. | [`REQUEST_TICKET_DEFAULT_TTL_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L549) |
|
|
58
|
+
|
|
59
|
+
## Subagents
|
|
60
|
+
|
|
61
|
+
| Option | Default | How to override | Source |
|
|
62
|
+
| --- | --- | --- | --- |
|
|
63
|
+
| Concurrent child runs per lineage root | 4 | Per-plane via env `AEX_MAX_CONCURRENT_CHILD_RUNS`; not a per-run option. | [`RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L427) |
|
|
64
|
+
|
|
65
|
+
## Workspace
|
|
66
|
+
|
|
67
|
+
| Option | Default | How to override | Source |
|
|
68
|
+
| --- | --- | --- | --- |
|
|
69
|
+
| Per-workspace mutation rate limits (per minute) | run submit 60, run cancel 30, run delete 30, signed link 120, API token create 10, API token delete 30 | Per-plane via the matching `AEX_RATE_LIMIT_<ACTION>_PER_MINUTE` env var. | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
70
|
+
| Workspace storage cap | 50 GiB | Per-plane via env `AEX_WORKSPACE_STORAGE_CAP_BYTES`; admin workspaces are uncapped (not a customer entitlement). | [`WORKSPACE_DEFAULT_STORAGE_CAP_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L52) |
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Limits & quotas
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Limits & quotas
|
|
6
|
+
|
|
7
|
+
These are the hard ceilings and caps that bound a run, a workspace, and a single
|
|
8
|
+
request. Every value is mirrored from a single source-of-truth constant; the
|
|
9
|
+
constant file is authoritative and this page is generated documentation, not a
|
|
10
|
+
second source of truth. If a value here ever disagrees with the linked constant,
|
|
11
|
+
the constant wins.
|
|
12
|
+
|
|
13
|
+
Source of truth:
|
|
14
|
+
[`packages/shared/src/limits.ts`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts).
|
|
15
|
+
For the values that apply when you omit an option, see
|
|
16
|
+
[Defaults](defaults.md). For product/policy boundaries (what aex does and does
|
|
17
|
+
not promise), see [Limits](limits.md).
|
|
18
|
+
|
|
19
|
+
Each row is tagged with its **source**:
|
|
20
|
+
|
|
21
|
+
- **aex policy** — an aex platform ceiling, the same for every workspace.
|
|
22
|
+
- **Workspace default** — a per-workspace value with a configurable override.
|
|
23
|
+
|
|
24
|
+
And whether you can **raise** it: per-run option, per-plan, or no.
|
|
25
|
+
|
|
26
|
+
## Run scope
|
|
27
|
+
|
|
28
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
29
|
+
| --- | --- | --- | --- | --- |
|
|
30
|
+
| Maximum run timeout | 6 hours | aex policy | Per plan (billing-driven) | [`RUN_MAX_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L163) |
|
|
31
|
+
| Minimum run timeout | 1 minute | aex policy | No (floor) | [`RUN_MIN_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L172) |
|
|
32
|
+
| Per-call exec timeout (default) | 30 minutes | aex policy | Per-call via the tool call's `timeoutMs` | [`RUN_DEFAULT_EXEC_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L202) |
|
|
33
|
+
| Post-hook timeout (default) | 60 minutes | aex policy | Per-run via the hook's `timeoutMs` | [`RUN_DEFAULT_POST_HOOK_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L234) |
|
|
34
|
+
| MCP connect timeout (default) | 30 seconds | aex policy | Per-port via `connectTimeoutMs` | [`RUN_DEFAULT_MCP_CONNECT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L255) |
|
|
35
|
+
| MCP call timeout (default) | 30 minutes | aex policy | Per-port via `callTimeoutMs` | [`RUN_DEFAULT_MCP_CALL_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L265) |
|
|
36
|
+
|
|
37
|
+
### Output capture (per run)
|
|
38
|
+
|
|
39
|
+
Files stream from the container to object storage one at a time. When a cap is
|
|
40
|
+
reached, remaining files are **dropped and counted in the summary**, never
|
|
41
|
+
silently lost.
|
|
42
|
+
|
|
43
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
44
|
+
| --- | --- | --- | --- | --- |
|
|
45
|
+
| Capture wall-clock budget | 1 hour | aex policy | No (hard ceiling) | [`RUN_CAPTURE_DEFAULT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L288) |
|
|
46
|
+
| Max files captured | 50,000 | aex policy | No (hard ceiling) | [`RUN_CAPTURE_MAX_FILES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L297) |
|
|
47
|
+
| Max bytes per captured file | 1 TB | aex policy | No (hard ceiling) | [`RUN_CAPTURE_MAX_FILE_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L307) |
|
|
48
|
+
| Max total captured bytes | 1 TB | aex policy | No (hard ceiling) | [`RUN_CAPTURE_MAX_TOTAL_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L315) |
|
|
49
|
+
|
|
50
|
+
### Tool output caps (per run)
|
|
51
|
+
|
|
52
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
53
|
+
| --- | --- | --- | --- | --- |
|
|
54
|
+
| `web_fetch` returned body | 500 KB (UTF-8) | aex policy | Per-call via `max_bytes` | [`REQUEST_WEB_FETCH_DEFAULT_MAX_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L528) |
|
|
55
|
+
| `bash_output` per-read body | 1 MB (UTF-8) | aex policy | No (hard ceiling) | [`RUN_BASH_BG_OUTPUT_MAX_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L327) |
|
|
56
|
+
| `grep` max file size (larger files skipped — use `bash grep`) | 25 MB | aex policy | No (hard ceiling) | [`RUN_TOOL_GREP_MAX_FILE_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L341) |
|
|
57
|
+
| `head`/`tail` max file size (larger files rejected — use `bash head`/`tail`) | 100 MB | aex policy | No (hard ceiling) | [`RUN_TOOL_HEAD_TAIL_MAX_FILE_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L352) |
|
|
58
|
+
| `grep`/`glob` files visited per recursive walk (then truncates with a notice) | 100,000 | aex policy | No (hard ceiling) | [`RUN_TOOL_WALK_MAX_FILES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L364) |
|
|
59
|
+
|
|
60
|
+
### Subagents (per run lineage)
|
|
61
|
+
|
|
62
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
63
|
+
| --- | --- | --- | --- | --- |
|
|
64
|
+
| Max subagent depth (public submit / `subagent` tool) | 1 (a root may spawn one level of child; that child may not spawn) | aex policy | No (hard ceiling) | [`RUN_MAX_PUBLIC_SUBAGENT_DEPTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L417) |
|
|
65
|
+
| Concurrent child runs per lineage root | 4 | aex policy | Per-plane via env `AEX_MAX_CONCURRENT_CHILD_RUNS` | [`RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L427) |
|
|
66
|
+
|
|
67
|
+
### Retention (per run)
|
|
68
|
+
|
|
69
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
70
|
+
| --- | --- | --- | --- | --- |
|
|
71
|
+
| Per-run metadata KV record TTL | 24 hours | aex policy | No (hard ceiling) | [`RUN_KV_RECORD_TTL_SECONDS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L462) |
|
|
72
|
+
| Per-run secret-envelope KV TTL | 24 hours | aex policy | No (hard ceiling) | [`RUN_KV_SECRET_TTL_SECONDS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L474) |
|
|
73
|
+
|
|
74
|
+
## Workspace scope
|
|
75
|
+
|
|
76
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
77
|
+
| --- | --- | --- | --- | --- |
|
|
78
|
+
| Workspace storage cap | 50 GiB (admins uncapped — not a customer entitlement) | Workspace default | Per-plane via env `AEX_WORKSPACE_STORAGE_CAP_BYTES` | [`WORKSPACE_DEFAULT_STORAGE_CAP_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L52) |
|
|
79
|
+
| Max concurrent runs per workspace | Advisory — there is no hard per-workspace concurrent-run cap constant; concurrency is bounded by plan, the subagent child-run cap, and provider/platform throughput rather than a fixed number. | aex policy | n/a | — |
|
|
80
|
+
| Skill bundle max compressed size (`.zip`) | 100 GB | Workspace default | Per-workspace (plan/env) | [`WORKSPACE_SKILL_BUNDLE_MAX_COMPRESSED_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L63) |
|
|
81
|
+
| Skill bundle max file entries | 1,000 | Workspace default | Per-workspace (plan/env) | [`WORKSPACE_SKILL_BUNDLE_MAX_FILES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L72) |
|
|
82
|
+
| Skill bundle max directory depth (`a/b/c/d` = 4) | 16 | Workspace default | Per-workspace (plan/env) | [`WORKSPACE_SKILL_BUNDLE_MAX_DEPTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L81) |
|
|
83
|
+
| Skill bundle max entry path length | 512 characters | Workspace default | No (hard ceiling) | [`WORKSPACE_SKILL_BUNDLE_MAX_PATH_LENGTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L89) |
|
|
84
|
+
| `File.mountPath` max length | 512 characters | Workspace default | No (hard ceiling) | [`WORKSPACE_MOUNT_PATH_MAX_LENGTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L99) |
|
|
85
|
+
|
|
86
|
+
### Rate limits (per workspace, per minute)
|
|
87
|
+
|
|
88
|
+
Default values; each is overridable per-plane via the matching
|
|
89
|
+
`AEX_RATE_LIMIT_<ACTION>_PER_MINUTE` env var.
|
|
90
|
+
|
|
91
|
+
| Action | Default per minute | Source | Constant |
|
|
92
|
+
| --- | --- | --- | --- |
|
|
93
|
+
| Run submit | 60 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
94
|
+
| Run cancel | 30 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
95
|
+
| Run delete | 30 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
96
|
+
| Signed output link | 120 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
97
|
+
| API token create | 10 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
98
|
+
| API token delete | 30 | Workspace default | [`WORKSPACE_RATE_LIMIT_DEFAULTS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L112) |
|
|
99
|
+
|
|
100
|
+
## Request scope (proxy and egress)
|
|
101
|
+
|
|
102
|
+
| Limit | Value | Source | Raisable? | Constant |
|
|
103
|
+
| --- | --- | --- | --- | --- |
|
|
104
|
+
| Proxy request body | 10 MiB | aex policy | Per-endpoint via `maxRequestBytes` | [`REQUEST_PROXY_DEFAULT_MAX_REQUEST_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L499) |
|
|
105
|
+
| Proxy response body | `0` = unlimited (streamed unbuffered) | aex policy | Per-endpoint via `maxResponseBytes` | [`REQUEST_PROXY_DEFAULT_MAX_RESPONSE_BYTES`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L509) |
|
|
106
|
+
| Proxy upstream timeout | 5 minutes | aex policy | Per-endpoint via `timeoutMs` | [`REQUEST_PROXY_DEFAULT_TIMEOUT_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L519) |
|
|
107
|
+
| Signed output URL TTL | 300 seconds | aex policy | Per-call via `expiresSeconds` | [`REQUEST_PRESIGN_URL_DEFAULT_TTL_SECONDS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L539) |
|
|
108
|
+
| Event-stream connection ticket TTL | 60 seconds | aex policy | Per-mint via `ttlMs` | [`REQUEST_TICKET_DEFAULT_TTL_MS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L549) |
|
|
@@ -6,7 +6,7 @@ title: Provider runtime capabilities
|
|
|
6
6
|
|
|
7
7
|
Generated from `packages/contracts/src/provider-support.ts` and `packages/contracts/src/models.ts`; runtime routing is derived through `checkRuntimeSupported` and `selectRuntime` in `packages/contracts/src/submission.ts`.
|
|
8
8
|
|
|
9
|
-
Regenerate with `
|
|
9
|
+
Regenerate with `bun run capabilities:generate`; check with `bun run capabilities:check`.
|
|
10
10
|
|
|
11
11
|
Providers: [Anthropic](#anthropic) (`anthropic`), [DeepSeek](#deepseek) (`deepseek`), [OpenAI](#openai) (`openai`), [Gemini](#gemini) (`gemini`), [Mistral](#mistral) (`mistral`), [OpenRouter](#openrouter) (`openrouter`), [Doubao](#doubao) (`doubao`), [Doubao (China)](#doubao-cn) (`doubao-cn`). Runtime selectors: `managed`.
|
|
12
12
|
|
package/docs/public-surface.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"productName": "Agent Executor",
|
|
4
4
|
"oneLine": "aex is an agent execution platform for launching autonomous agents from a simple TypeScript SDK and CLI.",
|
|
5
5
|
"description": "Submit typed runs, stream durable events, capture outputs, and compose agents with skills, files, MCP, proxy endpoints, and subagents across the managed runtime.",
|
|
6
|
-
"installCommand": "
|
|
6
|
+
"installCommand": "bun add @aexhq/sdk",
|
|
7
7
|
"examples": {
|
|
8
8
|
"typescriptLines": [
|
|
9
9
|
"import { AgentExecutor, Models, Providers } from \"@aexhq/sdk\";",
|
package/docs/quickstart.md
CHANGED
package/docs/release.md
CHANGED
|
@@ -4,79 +4,74 @@ title: Release
|
|
|
4
4
|
|
|
5
5
|
# Release
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
The pre-publish user-test gate catches broken package shape, missing CLI bin,
|
|
71
|
-
workspace dependency leaks, and TypeScript/ESM install regressions before npm
|
|
72
|
-
publish. The post-publish matrix confirms the published registry artifact is
|
|
73
|
-
installable from clean user projects on both Linux and Windows.
|
|
7
|
+
The repository is Bun-first. Build, test, docs, package validation, user tests,
|
|
8
|
+
and SDK packaging run through Bun. Registry publication uses npm on the
|
|
9
|
+
Bun-packed SDK tarball so npm provenance and dist-tag controls stay explicit.
|
|
10
|
+
|
|
11
|
+
## Package gate
|
|
12
|
+
|
|
13
|
+
Before publishing, validate the package locally and in CI:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
bun ci
|
|
17
|
+
bun run lint
|
|
18
|
+
bun run test
|
|
19
|
+
bun run test:user:offline
|
|
20
|
+
bun run docs:build
|
|
21
|
+
bun run pack:sdk
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`bun run pack:sdk` builds the SDK, runs a Bun pack dry-run, and runs the public
|
|
25
|
+
boundary gate. Offline user tests install the packed SDK into a clean Bun
|
|
26
|
+
project and exercise the SDK and CLI from that install tree.
|
|
27
|
+
|
|
28
|
+
## Publish
|
|
29
|
+
|
|
30
|
+
The manual `.github/workflows/release.yml` workflow:
|
|
31
|
+
|
|
32
|
+
- Installs with `bun ci`.
|
|
33
|
+
- Runs lint, unit/security, offline user tests, docs build, and `pack:sdk`.
|
|
34
|
+
- Refuses to publish if `@aexhq/sdk@<package version>` already exists.
|
|
35
|
+
- Packs `packages/sdk` with `bun pm pack`.
|
|
36
|
+
- Runs the publish job in the `npm-release` GitHub Environment and requires its
|
|
37
|
+
`NPM_TOKEN` secret.
|
|
38
|
+
- Publishes the tarball with npm provenance to the selected dist-tag (`canary`
|
|
39
|
+
by default).
|
|
40
|
+
- Waits for npm visibility.
|
|
41
|
+
- Runs live user tests against the exact published version.
|
|
42
|
+
|
|
43
|
+
Publish canary first for release validation. Promote the same immutable version
|
|
44
|
+
only after the downstream platform release gate is green.
|
|
45
|
+
|
|
46
|
+
## npm credentials
|
|
47
|
+
|
|
48
|
+
The current release path uses a GitHub environment secret:
|
|
49
|
+
|
|
50
|
+
- Environment: `npm-release`
|
|
51
|
+
- Secret name: `NPM_TOKEN`
|
|
52
|
+
|
|
53
|
+
The workflow intentionally fails before `npm publish` if that token is absent.
|
|
54
|
+
Do not remove the `environment: npm-release` binding unless the package has been
|
|
55
|
+
migrated to npm trusted publishing.
|
|
56
|
+
|
|
57
|
+
Trusted publishing is the target credential model, but it is a separate npm
|
|
58
|
+
package setting, not just a workflow permission. Before removing `NPM_TOKEN`,
|
|
59
|
+
configure the npm trusted publisher for `aexhq/aex`, workflow file
|
|
60
|
+
`release.yml`, and environment `npm-release`, then run the workflow with an npm
|
|
61
|
+
CLI version that supports OIDC trusted publishing.
|
|
62
|
+
|
|
63
|
+
## Promote
|
|
64
|
+
|
|
65
|
+
The manual `.github/workflows/promote.yml` workflow assigns an npm dist-tag to
|
|
66
|
+
an already-published `@aexhq/sdk` version, usually `latest` after canary and
|
|
67
|
+
platform validation. It also runs in `npm-release`, requires `NPM_TOKEN`, and
|
|
68
|
+
does not rebuild or republish the package.
|
|
74
69
|
|
|
75
70
|
## What ships in the tarball
|
|
76
71
|
|
|
77
|
-
The
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
The SDK tarball is self-contained. It declares zero `@aexhq/*` runtime
|
|
73
|
+
dependencies and is installable from a clean Bun project with no workspace
|
|
74
|
+
access:
|
|
80
75
|
|
|
81
76
|
- `@aexhq/contracts` lives in `packages/sdk/package.json#devDependencies`
|
|
82
77
|
only. At build time, [`packages/sdk/scripts/inline-contracts.mjs`](../scripts/inline-contracts.mjs)
|
|
@@ -89,37 +84,10 @@ with no workspace access:
|
|
|
89
84
|
single `dist/cli.mjs`, which is the `bin: aex` entry in
|
|
90
85
|
`packages/sdk/package.json`.
|
|
91
86
|
- This invariant is mechanically enforced by
|
|
92
|
-
`apps/user-tests/test/offline/install.test.ts`
|
|
93
|
-
runtime dependencies") before publish.
|
|
94
|
-
|
|
95
|
-
## Repository setup
|
|
96
|
-
|
|
97
|
-
Set `NPM_TOKEN` in the protected GitHub `npm-release` environment. The token must
|
|
98
|
-
have publish rights for all four packages. The workflow still publishes with
|
|
99
|
-
provenance.
|
|
100
|
-
|
|
101
|
-
Trusted Publishing can replace the token after every package exists on npm and
|
|
102
|
-
the trusted publisher is configured for each package:
|
|
103
|
-
|
|
104
|
-
- **Organization or user**: `aexhq`
|
|
105
|
-
- **Repository**: `aex`
|
|
106
|
-
- **Workflow filename**: `release.yml`
|
|
107
|
-
- **Environment name**: `npm-release`
|
|
108
|
-
|
|
109
|
-
## Local checklist
|
|
110
|
-
|
|
111
|
-
Before dispatching a release, the same public-safe checks can be run locally:
|
|
112
|
-
|
|
113
|
-
```text
|
|
114
|
-
pnpm lint
|
|
115
|
-
pnpm test
|
|
116
|
-
pnpm run test:user:offline
|
|
117
|
-
pnpm run docs:build
|
|
118
|
-
pnpm run pack:sdk
|
|
119
|
-
```
|
|
87
|
+
`apps/user-tests/test/offline/install.test.ts` before publish.
|
|
120
88
|
|
|
121
89
|
## Rollback
|
|
122
90
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
91
|
+
Published version numbers are immutable. Bad releases are fixed by publishing a
|
|
92
|
+
higher version and moving dist-tags forward; source rollback alone does not
|
|
93
|
+
remove an npm artifact.
|
package/docs/testing.md
CHANGED
|
@@ -12,17 +12,17 @@ reading or changing implementation.
|
|
|
12
12
|
Workspace-wide commands:
|
|
13
13
|
|
|
14
14
|
```text
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
bun run lint # typecheck/build prerequisites + lint
|
|
16
|
+
bun run test # unit, all packages, deterministic
|
|
17
|
+
bun run test:user:offline # clean Bun install of packed/published SDK, no live API
|
|
18
|
+
bun run test:user # live hosted API user tests
|
|
19
|
+
bun run test:user:heavy # explicit heavy live canary
|
|
20
|
+
bun run docs:build # generated docs + Next build
|
|
21
|
+
bun run pack:sdk # SDK pack dry-run + public boundary check
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Unit tests are deterministic and may use fakes. Offline user tests install the
|
|
25
|
-
packed or published SDK into clean temp projects and do not need provider
|
|
25
|
+
packed or published SDK into clean Bun temp projects and do not need provider
|
|
26
26
|
credentials.
|
|
27
27
|
|
|
28
28
|
When neither `AEX_USER_TEST_TARBALL` nor `AEX_USER_TEST_VERSION` is set, the
|
package/docs/vision-skills.md
CHANGED
|
@@ -94,7 +94,7 @@ request_body = {
|
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
Write the body to a file and hand it to the mounted CLI with `--data @<file>`
|
|
97
|
-
(the mount has no execute bit, so invoke through `
|
|
97
|
+
(the mount has no execute bit, so invoke through `bun`; see `credentials.md`):
|
|
98
98
|
|
|
99
99
|
```python
|
|
100
100
|
import subprocess
|
|
@@ -102,7 +102,7 @@ body_path = "/workspace/.aex/_ark_request.json"
|
|
|
102
102
|
open(body_path, "w").write(json.dumps(request_body))
|
|
103
103
|
|
|
104
104
|
result = subprocess.run(
|
|
105
|
-
["
|
|
105
|
+
["bun", "/mnt/session/uploads/aex/aex", "proxy", "doubao-ark",
|
|
106
106
|
"--method", "POST",
|
|
107
107
|
"--path", "/api/v3/chat/completions",
|
|
108
108
|
"--header", "content-type=application/json",
|