@aexhq/sdk 0.24.0 → 0.25.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 +36 -125
- package/dist/_contracts/models.js +1 -2
- package/dist/_contracts/operations.d.ts +2 -2
- package/dist/_contracts/operations.js +4 -4
- package/dist/_contracts/provider-support.d.ts +23 -23
- package/dist/_contracts/provider-support.js +7 -14
- package/dist/_contracts/run-config.d.ts +24 -0
- package/dist/_contracts/run-config.js +6 -0
- package/dist/_contracts/run-unit.js +3 -1
- package/dist/_contracts/runtime-types.d.ts +2 -2
- package/dist/_contracts/submission.d.ts +2 -1
- package/dist/_contracts/submission.js +66 -1
- package/dist/bundle.d.ts +13 -0
- package/dist/bundle.js +51 -0
- package/dist/bundle.js.map +1 -1
- package/dist/cli.mjs +12 -18
- package/dist/cli.mjs.sha256 +1 -1
- package/dist/client.d.ts +6 -4
- package/dist/client.js +37 -6
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tool.d.ts +41 -0
- package/dist/tool.js +138 -0
- package/dist/tool.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/concepts/agent-tools.md +48 -0
- package/docs/concepts/composition.md +43 -0
- package/docs/concepts/providers-and-runtimes.md +53 -0
- package/docs/concepts/runs.md +40 -0
- package/docs/credentials.md +3 -1
- package/docs/limits.md +44 -0
- package/docs/provider-runtime-capabilities.md +52 -54
- package/docs/public-surface.json +81 -0
- package/docs/quickstart.md +28 -105
- package/docs/run-config.md +1 -1
- package/docs/secrets.md +123 -0
- package/docs/vision-skills.md +3 -6
- package/package.json +2 -2
- package/docs/product-boundaries.md +0 -57
package/dist/tool.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { TOOL_NAME_PATTERN, normaliseSkillBundlePath } from "./_contracts/index.js";
|
|
2
|
+
import { bundleToolFiles, hashSkillBundle } from "./bundle.js";
|
|
3
|
+
import { readDirectoryAsFiles } from "./node-fs.js";
|
|
4
|
+
export class Tool {
|
|
5
|
+
#ref;
|
|
6
|
+
#inlineBytes;
|
|
7
|
+
#consumed = false;
|
|
8
|
+
constructor(ref, inlineBytes) {
|
|
9
|
+
this.#ref = ref;
|
|
10
|
+
this.#inlineBytes = inlineBytes;
|
|
11
|
+
}
|
|
12
|
+
get ref() {
|
|
13
|
+
return this.#ref;
|
|
14
|
+
}
|
|
15
|
+
get isDraft() {
|
|
16
|
+
return this.#ref.kind === "draft" && !this.#consumed;
|
|
17
|
+
}
|
|
18
|
+
get isConsumed() {
|
|
19
|
+
return this.#consumed;
|
|
20
|
+
}
|
|
21
|
+
static async fromFiles(args) {
|
|
22
|
+
if (!args || typeof args !== "object") {
|
|
23
|
+
throw new Error("Tool.fromFiles: args is required");
|
|
24
|
+
}
|
|
25
|
+
const manifest = normalizeToolManifest("Tool.fromFiles", args);
|
|
26
|
+
const bundled = bundleToolFiles(args.files, manifest);
|
|
27
|
+
const contentHash = await hashSkillBundle(bundled.zip);
|
|
28
|
+
const ref = {
|
|
29
|
+
kind: "draft",
|
|
30
|
+
assetId: `asset_${contentHash.slice("sha256:".length)}`,
|
|
31
|
+
contentHash,
|
|
32
|
+
...manifest
|
|
33
|
+
};
|
|
34
|
+
return new Tool(ref, bundled.zip);
|
|
35
|
+
}
|
|
36
|
+
static async fromPath(rootDir) {
|
|
37
|
+
const files = await readDirectoryAsFiles(rootDir);
|
|
38
|
+
const rawManifest = files["tool.json"];
|
|
39
|
+
if (rawManifest === undefined) {
|
|
40
|
+
throw new Error('Tool.fromPath: tool.json is required at the tool bundle root');
|
|
41
|
+
}
|
|
42
|
+
const text = typeof rawManifest === "string" ? rawManifest : new TextDecoder().decode(rawManifest);
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = JSON.parse(text);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
throw new Error(`Tool.fromPath: tool.json is not valid JSON: ${err.message}`);
|
|
49
|
+
}
|
|
50
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
51
|
+
throw new Error("Tool.fromPath: tool.json must be an object");
|
|
52
|
+
}
|
|
53
|
+
const { ["tool.json"]: _manifest, ...bundleFiles } = files;
|
|
54
|
+
return Tool.fromFiles({
|
|
55
|
+
...parsed,
|
|
56
|
+
files: bundleFiles
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
static fromAsset(ref) {
|
|
60
|
+
return new Tool(normalizeToolRef("Tool.fromAsset", ref));
|
|
61
|
+
}
|
|
62
|
+
_takeDraftBundle() {
|
|
63
|
+
if (this.#consumed) {
|
|
64
|
+
throw new Error("Tool: cannot reuse a consumed Tool in submit. Build a fresh Tool via Tool.fromPath(...) / Tool.fromFiles(...) per submit call.");
|
|
65
|
+
}
|
|
66
|
+
if (this.#ref.kind !== "draft" || !this.#inlineBytes) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
this.#consumed = true;
|
|
70
|
+
const { kind: _kind, contentHash, ...ref } = this.#ref;
|
|
71
|
+
return {
|
|
72
|
+
ref: { kind: "asset", ...ref },
|
|
73
|
+
contentHash,
|
|
74
|
+
bytes: this.#inlineBytes
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
async upload(client) {
|
|
78
|
+
const bundle = this._takeDraftBundle();
|
|
79
|
+
if (!bundle) {
|
|
80
|
+
throw new Error("Tool.upload: only draft Tools can be uploaded. A Tool.fromAsset(...) is already materialized.");
|
|
81
|
+
}
|
|
82
|
+
const uploaded = await client._uploadAsset({
|
|
83
|
+
bytes: bundle.bytes,
|
|
84
|
+
hash: bundle.contentHash,
|
|
85
|
+
contentType: "application/zip"
|
|
86
|
+
});
|
|
87
|
+
return new Tool({ ...bundle.ref, assetId: uploaded.assetId });
|
|
88
|
+
}
|
|
89
|
+
toJSON() {
|
|
90
|
+
if (this.#ref.kind === "draft") {
|
|
91
|
+
throw new Error("Tool: draft Tools cannot be JSON-serialised — they only become wire refs when client.submit uploads the bytes as an asset.");
|
|
92
|
+
}
|
|
93
|
+
return this.#ref;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function normalizeToolManifest(source, input) {
|
|
97
|
+
const name = input.name;
|
|
98
|
+
if (typeof name !== "string" || !TOOL_NAME_PATTERN.test(name)) {
|
|
99
|
+
throw new Error(`${source}: name must match ${TOOL_NAME_PATTERN.source}`);
|
|
100
|
+
}
|
|
101
|
+
if (name.includes("__")) {
|
|
102
|
+
throw new Error(`${source}: name must not contain "__"; that separator is reserved for MCP tools`);
|
|
103
|
+
}
|
|
104
|
+
const description = input.description;
|
|
105
|
+
if (typeof description !== "string" || description.trim().length === 0 || description.length > 2048) {
|
|
106
|
+
throw new Error(`${source}: description must be non-empty and <= 2048 chars`);
|
|
107
|
+
}
|
|
108
|
+
const inputSchema = input.inputSchema ?? input.input_schema;
|
|
109
|
+
if (!inputSchema || typeof inputSchema !== "object" || Array.isArray(inputSchema)) {
|
|
110
|
+
throw new Error(`${source}: inputSchema must be a JSON Schema object`);
|
|
111
|
+
}
|
|
112
|
+
if (inputSchema.type !== "object") {
|
|
113
|
+
throw new Error(`${source}: inputSchema.type must be "object"`);
|
|
114
|
+
}
|
|
115
|
+
const entry = normaliseSkillBundlePath(input.entry);
|
|
116
|
+
return {
|
|
117
|
+
name,
|
|
118
|
+
description,
|
|
119
|
+
input_schema: inputSchema,
|
|
120
|
+
entry
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function normalizeToolRef(source, ref) {
|
|
124
|
+
const manifest = normalizeToolManifest(source, {
|
|
125
|
+
name: ref.name,
|
|
126
|
+
description: ref.description,
|
|
127
|
+
input_schema: ref.input_schema,
|
|
128
|
+
entry: ref.entry
|
|
129
|
+
});
|
|
130
|
+
if (ref.kind !== "asset") {
|
|
131
|
+
throw new Error(`${source}: ref.kind must be "asset"`);
|
|
132
|
+
}
|
|
133
|
+
if (typeof ref.assetId !== "string" || !/^asset_[A-Za-z0-9_-]{8,128}$/.test(ref.assetId)) {
|
|
134
|
+
throw new Error(`${source}: ref.assetId must be an asset id`);
|
|
135
|
+
}
|
|
136
|
+
return { kind: "asset", assetId: ref.assetId, ...manifest };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=tool.js.map
|
package/dist/tool.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Agent tools
|
|
3
|
+
description: The default machine tools available inside managed runs.
|
|
4
|
+
icon: TerminalSquare
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Managed runs expose a fixed set of machine tools to the agent. They are on by
|
|
8
|
+
default. Omit `builtins` or pass any non-empty list to keep them; pass
|
|
9
|
+
`builtins: []` for a pure-MCP run with no machine tools. MCP-derived tools and
|
|
10
|
+
subagent tools are separate surfaces.
|
|
11
|
+
|
|
12
|
+
## Filesystem and shell
|
|
13
|
+
|
|
14
|
+
- `bash` runs shell commands in the run container.
|
|
15
|
+
- `read_file`, `write_file`, and `edit_file` read, write, or patch files.
|
|
16
|
+
- `grep` and `glob` search file contents and paths.
|
|
17
|
+
- `head` and `tail` read bounded file slices.
|
|
18
|
+
|
|
19
|
+
## Background commands
|
|
20
|
+
|
|
21
|
+
`bash` can run detached with `run_in_background: true`. The agent can then poll
|
|
22
|
+
with `bash_output` or stop the job with `bash_kill`. This is useful for dev
|
|
23
|
+
servers, long builds, and log tails.
|
|
24
|
+
|
|
25
|
+
## Planning, notebooks, and web
|
|
26
|
+
|
|
27
|
+
- `todo_write` records the agent's current task list.
|
|
28
|
+
- `notebook_edit` edits Jupyter `.ipynb` cells as JSON.
|
|
29
|
+
- `web_fetch` fetches a URL and returns readable text.
|
|
30
|
+
- `web_search` performs managed web search without requiring a caller-supplied
|
|
31
|
+
search key.
|
|
32
|
+
|
|
33
|
+
Networking policy still applies. Under limited networking, fetched hosts and
|
|
34
|
+
the managed search host must be allowed by the run's networking configuration.
|
|
35
|
+
|
|
36
|
+
## Disable machine tools
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { Models } from "@aexhq/sdk";
|
|
40
|
+
|
|
41
|
+
await aex.submit({
|
|
42
|
+
model: Models.CLAUDE_HAIKU_4_5,
|
|
43
|
+
prompt: "Use only the declared MCP tools.",
|
|
44
|
+
mcpServers,
|
|
45
|
+
builtins: [],
|
|
46
|
+
secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
|
|
47
|
+
});
|
|
48
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Composition
|
|
3
|
+
description: The primitives used to assemble each run.
|
|
4
|
+
icon: Blocks
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
aex composes an agent from explicit per-run inputs. The SDK materializes local
|
|
8
|
+
bytes before submission and the platform mounts them into the managed runtime
|
|
9
|
+
before the first agent turn.
|
|
10
|
+
|
|
11
|
+
| Need | Primitive |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| Executable or instructional bundles | `Skill.fromPath`, `Skill.fromFiles`, `Skill.fromUrl`, `Skill.fromCatalog` |
|
|
14
|
+
| Agent instructions | `AgentsMd.fromPath`, `AgentsMd.fromContent` |
|
|
15
|
+
| Reference files and folders | `File.fromPath`, `File.fromBytes` |
|
|
16
|
+
| Remote tools | `McpServer.remote`, `McpServer.fromId` |
|
|
17
|
+
| Credentialed HTTP APIs | `ProxyEndpoint.none`, `bearer`, `basic`, `header`, `query` |
|
|
18
|
+
| Non-secret runtime settings | `environment.envVars`, `environment.packages`, `environment.networking` |
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { AgentsMd, File, McpServer, Models, ProxyEndpoint, Skill } from "@aexhq/sdk";
|
|
22
|
+
|
|
23
|
+
await aex.submit({
|
|
24
|
+
model: Models.CLAUDE_HAIKU_4_5,
|
|
25
|
+
prompt: "Use the attached docs and tools to produce a report.",
|
|
26
|
+
agentsMd: [AgentsMd.fromContent("Follow the repo conventions.")],
|
|
27
|
+
files: [await File.fromPath("./input")],
|
|
28
|
+
skills: [await Skill.fromPath("./skills/report-writer", { name: "report-writer" })],
|
|
29
|
+
mcpServers: [McpServer.remote({ name: "github", url: "https://example.com/mcp" })],
|
|
30
|
+
proxyEndpoints: [
|
|
31
|
+
ProxyEndpoint.bearer({
|
|
32
|
+
name: "internal-api",
|
|
33
|
+
baseUrl: "https://api.example.com",
|
|
34
|
+
allowMethods: ["GET"],
|
|
35
|
+
allowPathPrefixes: ["/v1/"]
|
|
36
|
+
})
|
|
37
|
+
],
|
|
38
|
+
secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Secrets stay out of reusable configs. Put provider keys, MCP auth, and proxy
|
|
43
|
+
auth in the `secrets` bundle on the concrete submit call.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Providers & runtimes
|
|
3
|
+
description: How provider selection maps to managed runtime execution.
|
|
4
|
+
icon: Network
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
aex exposes one submission shape across supported providers:
|
|
8
|
+
|
|
9
|
+
| Provider | Selector |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Anthropic | `Providers.ANTHROPIC` |
|
|
12
|
+
| DeepSeek | `Providers.DEEPSEEK` |
|
|
13
|
+
| OpenAI | `Providers.OPENAI` |
|
|
14
|
+
| Gemini | `Providers.GEMINI` |
|
|
15
|
+
| Mistral | `Providers.MISTRAL` |
|
|
16
|
+
| OpenRouter | `Providers.OPENROUTER` |
|
|
17
|
+
| Doubao | `Providers.DOUBAO` |
|
|
18
|
+
| Doubao China | `Providers.DOUBAO_CN` |
|
|
19
|
+
|
|
20
|
+
All submissions run on the managed runtime. Omit `runtime` or pass
|
|
21
|
+
`runtime: "managed"`; `runtime: "native"` is rejected before any runtime side
|
|
22
|
+
effect.
|
|
23
|
+
|
|
24
|
+
## Selection
|
|
25
|
+
|
|
26
|
+
### TypeScript
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { Models, Providers } from "@aexhq/sdk";
|
|
30
|
+
|
|
31
|
+
await aex.submit({
|
|
32
|
+
provider: Providers.OPENAI,
|
|
33
|
+
model: Models.GPT_4_1,
|
|
34
|
+
prompt: "Summarise the attached files.",
|
|
35
|
+
secrets: { apiKey: process.env.OPENAI_API_KEY! }
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### CLI
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
aex run \
|
|
43
|
+
--api-token "$AEX_API_TOKEN" \
|
|
44
|
+
--provider openai \
|
|
45
|
+
--openai-api-key "$OPENAI_API_KEY" \
|
|
46
|
+
--model gpt-4.1 \
|
|
47
|
+
--prompt "Summarise the attached files." \
|
|
48
|
+
--follow
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Events, outputs, cleanup, and downloads use the same SDK and CLI surface for
|
|
52
|
+
every provider. For the exact supported model list, use the generated
|
|
53
|
+
[provider/runtime capability matrix](../provider-runtime-capabilities.md).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Runs
|
|
3
|
+
description: The durable unit aex submits, observes, and archives.
|
|
4
|
+
icon: Play
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A run is an immutable request to execute an autonomous agent task. The caller
|
|
8
|
+
submits the model, prompt, optional system message, composition primitives,
|
|
9
|
+
output policy, and one inline secrets bundle. aex snapshots the non-secret
|
|
10
|
+
inputs, holds secrets for the run lifecycle, dispatches through the managed
|
|
11
|
+
runtime, and records status, typed events, and outputs.
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { AgentExecutor, Models } from "@aexhq/sdk";
|
|
15
|
+
|
|
16
|
+
const aex = new AgentExecutor({ apiToken: process.env.AEX_API_TOKEN! });
|
|
17
|
+
|
|
18
|
+
const runId = await aex.submit({
|
|
19
|
+
provider: "anthropic",
|
|
20
|
+
model: Models.CLAUDE_HAIKU_4_5,
|
|
21
|
+
prompt: "Write the report and save it as a file.",
|
|
22
|
+
secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
for await (const event of aex.stream(runId)) {
|
|
26
|
+
console.log(event.type);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
await aex.wait(runId);
|
|
30
|
+
await aex.download(runId, { to: "./run.zip" });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The same durable record backs SDK and CLI reads. Use `getRun`/`get`, `events`,
|
|
34
|
+
`stream`, `streamEnvelopes`, `wait`, `outputs`, and `download` to inspect the
|
|
35
|
+
run live or after completion.
|
|
36
|
+
|
|
37
|
+
Use `idempotencyKey` when retrying a submit from your own workflow. aex hashes
|
|
38
|
+
the normalized non-secret submission, so a retry with the same key and same body
|
|
39
|
+
returns the existing run while a mismatched body fails with an idempotency
|
|
40
|
+
conflict.
|
package/docs/credentials.md
CHANGED
|
@@ -4,7 +4,9 @@ title: Credentials
|
|
|
4
4
|
|
|
5
5
|
# Credentials
|
|
6
6
|
|
|
7
|
-
aex
|
|
7
|
+
aex treats provider keys, MCP credentials, and proxy endpoint auth as per-run
|
|
8
|
+
credentials. Reusable env secrets are documented separately in
|
|
9
|
+
[Secrets](secrets.md).
|
|
8
10
|
|
|
9
11
|
The caller passes a workspace-scoped SDK token and the provider key inline on every `submit` call. aex holds the bundle in run-scoped custody for the run lifecycle and attempts terminal cleanup/revocation for the aex-controlled references. MCP credentials and proxy endpoint auth values travel the same way.
|
|
10
12
|
|
package/docs/limits.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Limits
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Limits
|
|
6
|
+
|
|
7
|
+
aex runs autonomous agents on the hosted managed runtime. The SDK and CLI submit
|
|
8
|
+
runs, stream events, capture outputs, and expose auth-gated reads and downloads.
|
|
9
|
+
|
|
10
|
+
For what the product supports, see [Features](https://aex.dev/docs/features/).
|
|
11
|
+
For the current provider/model set, see the generated
|
|
12
|
+
[provider/runtime capability matrix](provider-runtime-capabilities.md).
|
|
13
|
+
|
|
14
|
+
## Product Boundaries
|
|
15
|
+
|
|
16
|
+
| Area | Boundary |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| Runtime | New submissions run on the managed runtime. `runtime: "native"` is rejected. |
|
|
19
|
+
| Provider policy | Provider retention, training exclusion, HIPAA/BAA, data residency, abuse policy, and pricing belong to the selected provider account, endpoint, and contract. |
|
|
20
|
+
| Secrets | Provider keys, MCP credentials, proxy auth, and env secrets are caller-owned. aex excludes secret values from idempotency and uses the explicit secret surfaces described in [Secrets](secrets.md). |
|
|
21
|
+
| MCP servers | Remote MCP servers are customer-trusted systems. aex validates declarations and routes credentials; it does not make an untrusted MCP server safe. |
|
|
22
|
+
| Proxy endpoints | The proxy enforces declared host/path/method/auth policy for calls routed through it. Upstream side effects and data handling remain with the upstream service and customer. |
|
|
23
|
+
| Outputs | Captured outputs, events, and metadata are stored under the run record and downloaded through auth-gated routes. Output content is customer content. |
|
|
24
|
+
| Human review | Runs execute after submission. Cancellation is available, but aex does not pause a run for platform-mediated approval or interactive clarification. |
|
|
25
|
+
| Agent identity | The durable product primitive is the run record. Persistent agent profiles, stateful memory, reusable sessions, and saved agent definitions are out of scope. |
|
|
26
|
+
| Deployment | The supported product is the hosted aex service plus the SDK and CLI. Alternate `baseUrl` values are for local, staging, or hosted aex API planes, not a self-host product promise. |
|
|
27
|
+
| Cost | BYOK provider-token charges accrue to the customer's provider account. Managed-key billing, free trials, billing-grade cost telemetry, and public pricing documents are not shipped unless documented later. |
|
|
28
|
+
|
|
29
|
+
## Provider Policy Links
|
|
30
|
+
|
|
31
|
+
These links are starting points for provider-owned policy areas; they do not
|
|
32
|
+
create aex guarantees.
|
|
33
|
+
|
|
34
|
+
- Anthropic API data retention policy: <https://platform.claude.com/docs/en/manage-claude/api-and-data-retention>
|
|
35
|
+
- OpenAI API data controls: <https://platform.openai.com/docs/guides/your-data>
|
|
36
|
+
- Mistral privacy and API data handling: <https://docs.mistral.ai/admin/security-access/privacy>
|
|
37
|
+
- Gemini API data handling: <https://ai.google.dev/gemini-api/docs/logs-policy>
|
|
38
|
+
|
|
39
|
+
## Unsupported Claims
|
|
40
|
+
|
|
41
|
+
Do not describe aex as providing true self-host or customer-cloud deployment
|
|
42
|
+
support, provider-wide retention, HIPAA/BAA or data-residency guarantees, free
|
|
43
|
+
trials, a general-purpose sandbox for every downstream service, human-in-the-loop
|
|
44
|
+
approval checkpoints, or persistent agent identity.
|
|
@@ -4,54 +4,52 @@ title: Provider runtime capabilities
|
|
|
4
4
|
|
|
5
5
|
# Provider runtime capabilities
|
|
6
6
|
|
|
7
|
-
Generated from `packages/contracts/src/provider-support.ts`; runtime
|
|
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
9
|
Regenerate with `pnpm capabilities:generate`; check with `pnpm 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
|
|
|
13
|
-
All new submissions run on the managed runtime. Public support
|
|
13
|
+
All new submissions run on the managed runtime. Public support is expressed as supported providers and supported model ids.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## Supported models
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
| Provider | Wire value | Status | Docs | Evidence |
|
|
17
|
+
| Provider | Selector | Supported models | Docs | Evidence |
|
|
20
18
|
| --- | --- | --- | --- | --- |
|
|
21
|
-
| [Anthropic](#anthropic) | `anthropic` |
|
|
22
|
-
| [DeepSeek](#deepseek) | `deepseek` |
|
|
23
|
-
| [OpenAI](#openai) | `openai` |
|
|
24
|
-
| [Gemini](#gemini) | `gemini` |
|
|
25
|
-
| [Mistral](#mistral) | `mistral` |
|
|
26
|
-
| [OpenRouter](#openrouter) | `openrouter` |
|
|
27
|
-
| [Doubao](#doubao) | `doubao` |
|
|
28
|
-
| [Doubao (China)](#doubao-cn) | `doubao-cn` |
|
|
19
|
+
| [Anthropic](#anthropic) | `anthropic` | `claude-haiku-4-5`, `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest`, `claude-sonnet-4-6` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts); [Installed-SDK Anthropic live user test](../../../apps/user-tests/test/live/live-sdk-anthropic-managed.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
20
|
+
| [DeepSeek](#deepseek) | `deepseek` | `deepseek-v4-flash`, `deepseek-v4-pro`, `deepseek-chat`, `deepseek-reasoner` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts); [Installed-SDK DeepSeek live user test](../../../apps/user-tests/test/live/live-sdk-deepseek.test.ts); [Installed-SDK DeepSeek comprehensive live user matrix](../../../apps/user-tests/test/live/live-sdk-comprehensive.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
21
|
+
| [OpenAI](#openai) | `openai` | `gpt-4.1`, `gpt-4o-mini` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
22
|
+
| [Gemini](#gemini) | `gemini` | `gemini-2.0-flash`, `gemini-2.5-flash` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
23
|
+
| [Mistral](#mistral) | `mistral` | `mistral-large-latest`, `mistral-small-latest` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
24
|
+
| [OpenRouter](#openrouter) | `openrouter` | `gpt-4o-mini`, `gpt-4o`, `gemini-2.0-flash` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
25
|
+
| [Doubao](#doubao) | `doubao` | `doubao-seed-pro`, `doubao-seed-flash` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
26
|
+
| [Doubao (China)](#doubao-cn) | `doubao-cn` | `doubao-seed-pro`, `doubao-seed-flash` | [Secrets](secrets.md); [Events](events.md) | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
29
27
|
|
|
30
28
|
## Runtime routing
|
|
31
29
|
|
|
32
|
-
| Provider | Default provider | Auto route |
|
|
30
|
+
| Provider | Default provider | Auto route | Runtime selector |
|
|
31
|
+
| --- | --- | --- | --- |
|
|
32
|
+
| `anthropic` | yes | `managed` | [managed](#anthropic) |
|
|
33
|
+
| `deepseek` | no | `managed` | [managed](#deepseek) |
|
|
34
|
+
| `openai` | no | `managed` | [managed](#openai) |
|
|
35
|
+
| `gemini` | no | `managed` | [managed](#gemini) |
|
|
36
|
+
| `mistral` | no | `managed` | [managed](#mistral) |
|
|
37
|
+
| `openrouter` | no | `managed` | [managed](#openrouter) |
|
|
38
|
+
| `doubao` | no | `managed` | [managed](#doubao) |
|
|
39
|
+
| `doubao-cn` | no | `managed` | [managed](#doubao-cn) |
|
|
40
|
+
|
|
41
|
+
## Runtime evidence
|
|
42
|
+
|
|
43
|
+
| Provider | Runtime | Enforcement path | Evidence |
|
|
33
44
|
| --- | --- | --- | --- |
|
|
34
|
-
| `anthropic` |
|
|
35
|
-
| `deepseek` |
|
|
36
|
-
| `openai` |
|
|
37
|
-
| `gemini` |
|
|
38
|
-
| `mistral` |
|
|
39
|
-
| `openrouter` |
|
|
40
|
-
| `doubao` |
|
|
41
|
-
| `doubao-cn` |
|
|
42
|
-
|
|
43
|
-
## Runtime cell evidence
|
|
44
|
-
|
|
45
|
-
| Provider | Runtime | Status | Ownership | Enforcement path | Evidence |
|
|
46
|
-
| --- | --- | --- | --- | --- | --- |
|
|
47
|
-
| `anthropic` | `managed` | supported | supported | submission parser + managed dispatch | [Installed-SDK Anthropic live user test](../../../apps/user-tests/test/live/live-sdk-anthropic-managed.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
48
|
-
| `deepseek` | `managed` | supported | supported | submission parser + managed dispatch | [Installed-SDK DeepSeek live user test](../../../apps/user-tests/test/live/live-sdk-deepseek.test.ts); [Installed-SDK DeepSeek comprehensive live user matrix](../../../apps/user-tests/test/live/live-sdk-comprehensive.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
49
|
-
| `openai` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
50
|
-
| `gemini` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
51
|
-
| `mistral` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
52
|
-
| `openrouter` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
53
|
-
| `doubao` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
54
|
-
| `doubao-cn` | `managed` | live-unverified | live-unverified | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
45
|
+
| `anthropic` | `managed` | submission parser + managed dispatch | [Installed-SDK Anthropic live user test](../../../apps/user-tests/test/live/live-sdk-anthropic-managed.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
46
|
+
| `deepseek` | `managed` | submission parser + managed dispatch | [Installed-SDK DeepSeek live user test](../../../apps/user-tests/test/live/live-sdk-deepseek.test.ts); [Installed-SDK DeepSeek comprehensive live user matrix](../../../apps/user-tests/test/live/live-sdk-comprehensive.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts) |
|
|
47
|
+
| `openai` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
48
|
+
| `gemini` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
49
|
+
| `mistral` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
50
|
+
| `openrouter` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
51
|
+
| `doubao` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
52
|
+
| `doubao-cn` | `managed` | submission parser + managed dispatch | [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts) |
|
|
55
53
|
|
|
56
54
|
## Validation errors
|
|
57
55
|
|
|
@@ -65,72 +63,72 @@ Provider-hosted skill refs (a `kind:"provider"` skill ref) are rejected because
|
|
|
65
63
|
|
|
66
64
|
Notes:
|
|
67
65
|
|
|
68
|
-
-
|
|
66
|
+
- Supported models are the public SDK model ids accepted for each provider.
|
|
67
|
+
- Runtime routing describes how a validated submission is dispatched.
|
|
69
68
|
- `runtime: "native"` is not a runtime selector; the submission parser rejects it as an invalid enum value.
|
|
70
|
-
- `live-unverified` means the shape is accepted by code but does not yet have equal live user-test evidence.
|
|
71
69
|
|
|
72
70
|
## Provider anchors
|
|
73
71
|
|
|
74
72
|
### Anthropic
|
|
75
73
|
|
|
76
74
|
- Wire provider: `anthropic`
|
|
77
|
-
-
|
|
75
|
+
- Supported models: `claude-haiku-4-5`, `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest`, `claude-sonnet-4-6`
|
|
78
76
|
- Auto route: `managed`
|
|
79
|
-
- Docs: [
|
|
77
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
80
78
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts); [Installed-SDK Anthropic live user test](../../../apps/user-tests/test/live/live-sdk-anthropic-managed.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts)
|
|
81
79
|
|
|
82
80
|
### DeepSeek
|
|
83
81
|
|
|
84
82
|
- Wire provider: `deepseek`
|
|
85
|
-
-
|
|
83
|
+
- Supported models: `deepseek-v4-flash`, `deepseek-v4-pro`, `deepseek-chat`, `deepseek-reasoner`
|
|
86
84
|
- Auto route: `managed`
|
|
87
|
-
- Docs: [
|
|
85
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
88
86
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts); [Installed-SDK DeepSeek live user test](../../../apps/user-tests/test/live/live-sdk-deepseek.test.ts); [Installed-SDK DeepSeek comprehensive live user matrix](../../../apps/user-tests/test/live/live-sdk-comprehensive.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts)
|
|
89
87
|
|
|
90
88
|
### OpenAI
|
|
91
89
|
|
|
92
90
|
- Wire provider: `openai`
|
|
93
|
-
-
|
|
91
|
+
- Supported models: `gpt-4.1`, `gpt-4o-mini`
|
|
94
92
|
- Auto route: `managed`
|
|
95
|
-
- Docs: [
|
|
93
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
96
94
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|
|
97
95
|
|
|
98
96
|
### Gemini
|
|
99
97
|
|
|
100
98
|
- Wire provider: `gemini`
|
|
101
|
-
-
|
|
99
|
+
- Supported models: `gemini-2.0-flash`, `gemini-2.5-flash`
|
|
102
100
|
- Auto route: `managed`
|
|
103
|
-
- Docs: [
|
|
101
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
104
102
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|
|
105
103
|
|
|
106
104
|
### Mistral
|
|
107
105
|
|
|
108
106
|
- Wire provider: `mistral`
|
|
109
|
-
-
|
|
107
|
+
- Supported models: `mistral-large-latest`, `mistral-small-latest`
|
|
110
108
|
- Auto route: `managed`
|
|
111
|
-
- Docs: [
|
|
109
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
112
110
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|
|
113
111
|
|
|
114
112
|
### OpenRouter
|
|
115
113
|
|
|
116
114
|
- Wire provider: `openrouter`
|
|
117
|
-
-
|
|
115
|
+
- Supported models: `gpt-4o-mini`, `gpt-4o`, `gemini-2.0-flash`
|
|
118
116
|
- Auto route: `managed`
|
|
119
|
-
- Docs: [
|
|
117
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
120
118
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|
|
121
119
|
|
|
122
120
|
### Doubao
|
|
123
121
|
|
|
124
122
|
- Wire provider: `doubao`
|
|
125
|
-
-
|
|
123
|
+
- Supported models: `doubao-seed-pro`, `doubao-seed-flash`
|
|
126
124
|
- Auto route: `managed`
|
|
127
|
-
- Docs: [
|
|
125
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
128
126
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|
|
129
127
|
|
|
130
128
|
### Doubao (China)
|
|
131
129
|
|
|
132
130
|
- Wire provider: `doubao-cn`
|
|
133
|
-
-
|
|
131
|
+
- Supported models: `doubao-seed-pro`, `doubao-seed-flash`
|
|
134
132
|
- Auto route: `managed`
|
|
135
|
-
- Docs: [
|
|
133
|
+
- Docs: [Secrets](secrets.md); [Events](events.md)
|
|
136
134
|
- Evidence: [Submission parser and routing parity](../../contracts/test/submission.test.ts); [Runtime support validator](../../contracts/test/runtime-support.test.ts); [Generated matrix freshness](../../../scripts/validate/capability-matrix.test.ts)
|