@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.
Files changed (42) hide show
  1. package/README.md +36 -125
  2. package/dist/_contracts/models.js +1 -2
  3. package/dist/_contracts/operations.d.ts +2 -2
  4. package/dist/_contracts/operations.js +4 -4
  5. package/dist/_contracts/provider-support.d.ts +23 -23
  6. package/dist/_contracts/provider-support.js +7 -14
  7. package/dist/_contracts/run-config.d.ts +24 -0
  8. package/dist/_contracts/run-config.js +6 -0
  9. package/dist/_contracts/run-unit.js +3 -1
  10. package/dist/_contracts/runtime-types.d.ts +2 -2
  11. package/dist/_contracts/submission.d.ts +2 -1
  12. package/dist/_contracts/submission.js +66 -1
  13. package/dist/bundle.d.ts +13 -0
  14. package/dist/bundle.js +51 -0
  15. package/dist/bundle.js.map +1 -1
  16. package/dist/cli.mjs +12 -18
  17. package/dist/cli.mjs.sha256 +1 -1
  18. package/dist/client.d.ts +6 -4
  19. package/dist/client.js +37 -6
  20. package/dist/client.js.map +1 -1
  21. package/dist/index.d.ts +3 -2
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/tool.d.ts +41 -0
  25. package/dist/tool.js +138 -0
  26. package/dist/tool.js.map +1 -0
  27. package/dist/version.d.ts +1 -1
  28. package/dist/version.js +1 -1
  29. package/docs/concepts/agent-tools.md +48 -0
  30. package/docs/concepts/composition.md +43 -0
  31. package/docs/concepts/providers-and-runtimes.md +53 -0
  32. package/docs/concepts/runs.md +40 -0
  33. package/docs/credentials.md +3 -1
  34. package/docs/limits.md +44 -0
  35. package/docs/provider-runtime-capabilities.md +52 -54
  36. package/docs/public-surface.json +81 -0
  37. package/docs/quickstart.md +28 -105
  38. package/docs/run-config.md +1 -1
  39. package/docs/secrets.md +123 -0
  40. package/docs/vision-skills.md +3 -6
  41. package/package.json +2 -2
  42. 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
@@ -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
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * Used by the (future) User-Agent header on outbound SDK requests.
8
8
  */
9
- export declare const SDK_VERSION = "0.24.0";
9
+ export declare const SDK_VERSION = "0.25.0";
package/dist/version.js CHANGED
@@ -6,5 +6,5 @@
6
6
  *
7
7
  * Used by the (future) User-Agent header on outbound SDK requests.
8
8
  */
9
- export const SDK_VERSION = "0.24.0";
9
+ export const SDK_VERSION = "0.25.0";
10
10
  //# sourceMappingURL=version.js.map
@@ -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.
@@ -4,7 +4,9 @@ title: Credentials
4
4
 
5
5
  # Credentials
6
6
 
7
- aex does not store provider keys or MCP credential values across runs.
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 cells are derived through `checkRuntimeSupported` and `selectRuntime` in `packages/contracts/src/submission.ts`.
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 facts are listed separately from runtime dispatch facts.
13
+ All new submissions run on the managed runtime. Public support is expressed as supported providers and supported model ids.
14
14
 
15
- Status vocabulary: `supported`, `live-unverified`, `rejected`.
15
+ ## Supported models
16
16
 
17
- ## Public support
18
-
19
- | Provider | Wire value | Status | Docs | Evidence |
17
+ | Provider | Selector | Supported models | Docs | Evidence |
20
18
  | --- | --- | --- | --- | --- |
21
- | [Anthropic](#anthropic) | `anthropic` | supported | [Credentials](credentials.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) |
22
- | [DeepSeek](#deepseek) | `deepseek` | supported | [Credentials](credentials.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) |
23
- | [OpenAI](#openai) | `openai` | live-unverified | [Credentials](credentials.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
- | [Gemini](#gemini) | `gemini` | live-unverified | [Credentials](credentials.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
- | [Mistral](#mistral) | `mistral` | live-unverified | [Credentials](credentials.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
- | [OpenRouter](#openrouter) | `openrouter` | live-unverified | [Credentials](credentials.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) |
27
- | [Doubao](#doubao) | `doubao` | live-unverified | [Credentials](credentials.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) |
28
- | [Doubao (China)](#doubao-cn) | `doubao-cn` | live-unverified | [Credentials](credentials.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) |
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 | `runtime: "managed"` |
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` | yes | `managed` | [supported](#anthropic) |
35
- | `deepseek` | no | `managed` | [supported](#deepseek) |
36
- | `openai` | no | `managed` | [live-unverified](#openai) |
37
- | `gemini` | no | `managed` | [live-unverified](#gemini) |
38
- | `mistral` | no | `managed` | [live-unverified](#mistral) |
39
- | `openrouter` | no | `managed` | [live-unverified](#openrouter) |
40
- | `doubao` | no | `managed` | [live-unverified](#doubao) |
41
- | `doubao-cn` | no | `managed` | [live-unverified](#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
- - Public status describes provider availability on the SDK surface. Runtime routing describes how a validated submission is dispatched.
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
- - Public status: supported
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: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: supported
83
+ - Supported models: `deepseek-v4-flash`, `deepseek-v4-pro`, `deepseek-chat`, `deepseek-reasoner`
86
84
  - Auto route: `managed`
87
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
91
+ - Supported models: `gpt-4.1`, `gpt-4o-mini`
94
92
  - Auto route: `managed`
95
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
99
+ - Supported models: `gemini-2.0-flash`, `gemini-2.5-flash`
102
100
  - Auto route: `managed`
103
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
107
+ - Supported models: `mistral-large-latest`, `mistral-small-latest`
110
108
  - Auto route: `managed`
111
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
115
+ - Supported models: `gpt-4o-mini`, `gpt-4o`, `gemini-2.0-flash`
118
116
  - Auto route: `managed`
119
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
123
+ - Supported models: `doubao-seed-pro`, `doubao-seed-flash`
126
124
  - Auto route: `managed`
127
- - Docs: [Credentials](credentials.md); [Events](events.md)
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
- - Public status: live-unverified
131
+ - Supported models: `doubao-seed-pro`, `doubao-seed-flash`
134
132
  - Auto route: `managed`
135
- - Docs: [Credentials](credentials.md); [Events](events.md)
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)