@aexhq/sdk 0.30.0 → 0.32.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 (71) hide show
  1. package/README.md +23 -9
  2. package/dist/_contracts/connection-ticket.d.ts +1 -1
  3. package/dist/_contracts/connection-ticket.js +1 -1
  4. package/dist/_contracts/event-envelope.d.ts +5 -8
  5. package/dist/_contracts/event-envelope.js +5 -6
  6. package/dist/_contracts/event-stream-client.d.ts +1 -1
  7. package/dist/_contracts/http.js +1 -1
  8. package/dist/_contracts/models.d.ts +0 -76
  9. package/dist/_contracts/models.js +0 -20
  10. package/dist/_contracts/operations.d.ts +2 -64
  11. package/dist/_contracts/operations.js +9 -152
  12. package/dist/_contracts/provider-support.d.ts +48 -138
  13. package/dist/_contracts/provider-support.js +10 -41
  14. package/dist/_contracts/proxy-protocol.d.ts +7 -7
  15. package/dist/_contracts/proxy-protocol.js +8 -8
  16. package/dist/_contracts/run-config.d.ts +7 -20
  17. package/dist/_contracts/run-config.js +8 -46
  18. package/dist/_contracts/run-cost.d.ts +1 -5
  19. package/dist/_contracts/run-cost.js +0 -8
  20. package/dist/_contracts/run-custody.d.ts +4 -6
  21. package/dist/_contracts/run-custody.js +0 -8
  22. package/dist/_contracts/run-unit.d.ts +1 -1
  23. package/dist/_contracts/run-unit.js +6 -6
  24. package/dist/_contracts/runner-event.d.ts +1 -1
  25. package/dist/_contracts/runner-event.js +1 -1
  26. package/dist/_contracts/runtime-manifest.d.ts +13 -26
  27. package/dist/_contracts/runtime-manifest.js +6 -35
  28. package/dist/_contracts/runtime-types.d.ts +1 -3
  29. package/dist/_contracts/sdk-secrets.js +4 -4
  30. package/dist/_contracts/side-effect-audit.d.ts +2 -4
  31. package/dist/_contracts/side-effect-audit.js +2 -4
  32. package/dist/_contracts/status.d.ts +1 -1
  33. package/dist/_contracts/status.js +1 -1
  34. package/dist/_contracts/submission.d.ts +5 -126
  35. package/dist/_contracts/submission.js +10 -182
  36. package/dist/_contracts/webhook-verify.d.ts +1 -1
  37. package/dist/_contracts/webhook-verify.js +1 -1
  38. package/dist/asset-upload.d.ts +4 -10
  39. package/dist/asset-upload.js +4 -47
  40. package/dist/asset-upload.js.map +1 -1
  41. package/dist/cli.mjs +27 -231
  42. package/dist/cli.mjs.sha256 +1 -1
  43. package/dist/client.d.ts +10 -107
  44. package/dist/client.js +23 -132
  45. package/dist/client.js.map +1 -1
  46. package/dist/index.d.ts +4 -4
  47. package/dist/index.js +3 -4
  48. package/dist/index.js.map +1 -1
  49. package/dist/skill.d.ts +1 -1
  50. package/dist/skill.js +1 -1
  51. package/dist/version.d.ts +1 -1
  52. package/dist/version.js +1 -1
  53. package/docs/cleanup.md +4 -4
  54. package/docs/concepts/agent-tools.md +2 -2
  55. package/docs/concepts/composition.md +1 -1
  56. package/docs/concepts/providers-and-runtimes.md +2 -4
  57. package/docs/concepts/runs.md +3 -6
  58. package/docs/credentials.md +5 -8
  59. package/docs/defaults.md +22 -22
  60. package/docs/limits-and-quotas.md +40 -40
  61. package/docs/limits.md +1 -1
  62. package/docs/networking.md +2 -2
  63. package/docs/outputs.md +3 -3
  64. package/docs/provider-runtime-capabilities.md +37 -65
  65. package/docs/public-surface.json +4 -5
  66. package/docs/quickstart.md +19 -6
  67. package/docs/run-config.md +5 -6
  68. package/docs/secrets.md +9 -7
  69. package/docs/skills.md +8 -16
  70. package/docs/vision-skills.md +3 -3
  71. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * from `@aexhq/contracts`.
9
9
  */
10
10
  export { AgentsMdClient, AgentExecutor, FilesClient, SecretsClient, SkillsClient } from "./client.js";
11
- export type { AgentExecutorOptions, OutputDownloadOptions, OutputFilePathMatch, OutputFilePathSelector, OutputFileSelector, OutputLinkSelector, RunCollectOptions, RunResult, StreamEventsOptions, SubmitOptions, SubmitRunOptions, WaitForRunOptions } from "./client.js";
11
+ export type { AgentExecutorOptions, OutputDownloadOptions, OutputFilePathMatch, OutputFilePathSelector, OutputFileSelector, OutputLinkSelector, RunCollectOptions, RunResult, StreamEventsOptions, SubmitOptions, WaitForRunOptions } from "./client.js";
12
12
  export { Skill } from "./skill.js";
13
13
  export { Tool } from "./tool.js";
14
14
  export { AgentsMd } from "./agents-md.js";
@@ -25,14 +25,14 @@ export type { ChatCorpus, CreateDataToolsOptions, DataChatTool, DataChatToolSche
25
25
  export { AexApiError, AexError, CleanupError, CredentialValidationError, ProviderError, RunConfigValidationError, RunStateError } from "./_contracts/index.js";
26
26
  export { MCP_SERVER_NAME_PATTERN, SKILL_BUNDLE_LIMITS, SkillBundleValidationError, buildPlatformAllowedHosts, normaliseSkillBundlePath, validateSkillBundleEntry, validateSkillBundleManifest, validateProxyAuth } from "./_contracts/index.js";
27
27
  export type { AssetRef, AgentsMdRef, FileRef, McpServerRef, SkillBundleEntry, SkillBundleManifest, SkillRef, ToolInputSchema, ToolRef } from "./_contracts/index.js";
28
- export type { AgentsMdRecord as AgentsMdRecordWire, FileRecord as FileRecordWire, Output, OutputFileType, OutputLink, OutputLinkOptions, OutputQuery, OutputSearchQuery, OutputSearchHit, OutputSearchPage, OutputText, ProviderEvent, ReadOutputTextOptions, Run, RunListPage, RunListQuery, RunSummary, RunRecordArchiveFileV1, RunRecordArchiveFileRoleV1, RunRecordArchiveNamespaceV1, RunRecordCostV1, RunRecordDownloadErrorV1, RunRecordFileStatusV1, RunRecordManifestV1, RunRecordMetadataV1, RunRecordNamespaceV1, RunRecordSubmissionSnapshotV1, RunRecordV1, RunEvent, RunWebhookDelivery, RunWebhookDeliveryStatus, RuntimeManifest, RuntimeProvider, SecretRecord, SecretReveal, SignedOutputLink, Skill as SkillRecord, UsageSummary, WhoAmI } from "./_contracts/index.js";
28
+ export type { AgentsMdRecord as AgentsMdRecordWire, FileRecord as FileRecordWire, Output, OutputFileType, OutputLink, OutputLinkOptions, OutputQuery, OutputSearchQuery, OutputSearchHit, OutputSearchPage, OutputText, ProviderEvent, ReadOutputTextOptions, Run, RunListPage, RunListQuery, RunSummary, RunRecordArchiveFileV1, RunRecordArchiveFileRoleV1, RunRecordArchiveNamespaceV1, RunRecordCostV1, RunRecordDownloadErrorV1, RunRecordFileStatusV1, RunRecordManifestV1, RunRecordMetadataV1, RunRecordNamespaceV1, RunRecordSubmissionSnapshotV1, RunRecordV1, RunEvent, RunWebhookDelivery, RunWebhookDeliveryStatus, RuntimeManifest, SecretRecord, SecretReveal, Skill as SkillRecord, UsageSummary, WhoAmI } from "./_contracts/index.js";
29
29
  export type { PlatformInlineSecrets as InlineSecrets, PlatformMcpServerSecret as McpServerSecret, PlatformProxyEndpoint, PlatformProxyEndpointAuth, PlatformProxyAuthValue as ProxyAuthValue, PlatformEnvironment as RunEnvironment, PlatformRunSubmissionRequest, RunLimits, RunWebhookSpec, ProxyAuthShape, ProxyMethod, ProxyRetryPolicy, ProxyResponseMode } from "./_contracts/index.js";
30
30
  export { CUSTODY_MANIFEST_SCHEMA_VERSION, RUN_RECORD_MANIFEST_SCHEMA_VERSION, RUN_RECORD_SCHEMA_VERSION, DEFAULT_RUNTIME_SIZE, RUNTIME_SIZE_PRESETS, RUNTIME_SIZES, RuntimeSizes } from "./_contracts/index.js";
31
31
  export type { RuntimeResources, RuntimeSize } from "./_contracts/index.js";
32
32
  export { BUILTIN_TOOL_NAMES, BuiltinTools, DEFAULT_BUILTIN_TOOLS, resolveBuiltinToolNames } from "./_contracts/index.js";
33
33
  export type { BuiltinToolName } from "./_contracts/index.js";
34
- export { CREDENTIAL_MODES, DEFAULT_CREDENTIAL_MODE, collectManagedUnsupportedFeatures, DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, RunModels, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, REGIONS, Regions, RUN_PROVIDERS, RUNTIME_KINDS, RUNTIME_VALIDATION_CODES, RuntimeValidationError, selectRuntime } from "./_contracts/index.js";
35
- export type { CredentialMode, RunModel, RunProvider, Region, RuntimeKind, RuntimeValidationCode } from "./_contracts/index.js";
34
+ export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS } from "./_contracts/index.js";
35
+ export type { RunModel, RunProvider } from "./_contracts/index.js";
36
36
  export { AEX_RUN_SETTLED_NAME, isCustom, isEventChannel, isFromSource, isLog, isRunError, isRunFinished, isRunSettled, isRunStarted, isRunTerminal, isTextMessage, isToolCallResult, isToolCallStart } from "./_contracts/index.js";
37
37
  export type { RunFinishedRunEvent, TextMessageRunEvent, ToolCallResultRunEvent, ToolCallStartRunEvent } from "./_contracts/index.js";
38
38
  export { decodeAssistantText, decodeToolCalls, summarizeRunTrace, summarizeRunUsage, textOf } from "./_contracts/index.js";
package/dist/index.js CHANGED
@@ -34,10 +34,9 @@ export { CUSTODY_MANIFEST_SCHEMA_VERSION, RUN_RECORD_MANIFEST_SCHEMA_VERSION, RU
34
34
  // listing their names in `tools`. Prefer the `BuiltinTools` const (e.g.
35
35
  // `BuiltinTools.notebook_edit`) so a typo is a compile error, not a runtime 400.
36
36
  export { BUILTIN_TOOL_NAMES, BuiltinTools, DEFAULT_BUILTIN_TOOLS, resolveBuiltinToolNames } from "./_contracts/index.js";
37
- // Provider + runtime dispatch surface. Agents and SDK consumers
38
- // inspect these to know which (provider, runtime) combos are valid
39
- // and to validate submissions offline before posting.
40
- export { CREDENTIAL_MODES, DEFAULT_CREDENTIAL_MODE, collectManagedUnsupportedFeatures, DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, RunModels, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, REGIONS, Regions, RUN_PROVIDERS, RUNTIME_KINDS, RUNTIME_VALIDATION_CODES, RuntimeValidationError, selectRuntime } from "./_contracts/index.js";
37
+ // Provider/model surface. Provider choice decides the upstream model route;
38
+ // execution uses the managed path.
39
+ export { DEFAULT_RUN_PROVIDER, RUN_MODELS, RUN_MODELS_BY_PROVIDER, MODEL_PROVIDER_IDS, Models, providerForModel, providersForModel, resolveProviderModelId, isRunModel, parseRunModel, Providers, RUN_PROVIDERS } from "./_contracts/index.js";
41
40
  // Event guards. The lifecycle/channel guards (isRunStarted/isRunError/isCustom/
42
41
  // isLog/…) operate on the coordinator `AexEvent` envelope; isTextMessage /
43
42
  // isToolCallStart / isToolCallResult / isRunFinished narrow the loose `RunEvent`
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBtG,yBAAyB;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGhE,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG7G,SAAS;AACT,OAAO,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,yBAAyB,EACzB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,yBAAyB;AACzB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AA8E1B,oEAAoE;AACpE,6EAA6E;AAC7E,6DAA6D;AAC7D,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAG1B,8EAA8E;AAC9E,4EAA4E;AAC5E,wEAAwE;AACxE,iFAAiF;AACjF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGpH,gEAAgE;AAChE,mEAAmE;AACnE,sDAAsD;AACtD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iCAAiC,EACjC,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,OAAO,EACP,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAU1B,gFAAgF;AAChF,2EAA2E;AAC3E,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,KAAK,EACL,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAQ1B,gFAAgF;AAChF,6EAA6E;AAC7E,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACP,MAAM,kBAAkB,CAAC;AAQ1B,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,yEAAyE;AACzE,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAetG,yBAAyB;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGhE,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG7G,SAAS;AACT,OAAO,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,yBAAyB,EACzB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,yBAAyB;AACzB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AA4E1B,oEAAoE;AACpE,6EAA6E;AAC7E,6DAA6D;AAC7D,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAG1B,8EAA8E;AAC9E,4EAA4E;AAC5E,wEAAwE;AACxE,iFAAiF;AACjF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGpH,4EAA4E;AAC5E,mCAAmC;AACnC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,kBAAkB,CAAC;AAM1B,gFAAgF;AAChF,2EAA2E;AAC3E,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,KAAK,EACL,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAQ1B,gFAAgF;AAChF,6EAA6E;AAC7E,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACP,MAAM,kBAAkB,CAAC;AAQ1B,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,yEAAyE;AACzE,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/skill.d.ts CHANGED
@@ -81,7 +81,7 @@ export declare class Skill {
81
81
  }): Promise<Skill>;
82
82
  /**
83
83
  * Reference a skill already uploaded to the workspace catalog
84
- * (`aex skills upload` / `operations.createSkillBundle`) in a run.
84
+ * (`aex skills upload`) in a run.
85
85
  *
86
86
  * A catalog skill's bytes are a content-addressed asset, so referencing it
87
87
  * is just an `{ kind:"asset" }` ref — once a run snapshots the bytes, it is
package/dist/skill.js CHANGED
@@ -118,7 +118,7 @@ export class Skill {
118
118
  }
119
119
  /**
120
120
  * Reference a skill already uploaded to the workspace catalog
121
- * (`aex skills upload` / `operations.createSkillBundle`) in a run.
121
+ * (`aex skills upload`) in a run.
122
122
  *
123
123
  * A catalog skill's bytes are a content-addressed asset, so referencing it
124
124
  * is just an `{ kind:"asset" }` ref — once a run snapshots the bytes, it is
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.30.0";
9
+ export declare const SDK_VERSION = "0.32.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.30.0";
9
+ export const SDK_VERSION = "0.32.0";
10
10
  //# sourceMappingURL=version.js.map
package/docs/cleanup.md CHANGED
@@ -15,12 +15,12 @@ provider-session retention is not a supported run option, and the removed
15
15
  retention field is rejected if supplied.
16
16
 
17
17
  ```ts
18
- import { RunModels } from "@aexhq/sdk";
18
+ import { Models } from "@aexhq/sdk";
19
19
 
20
20
  const runId = await aex.submit({
21
- model: RunModels.CLAUDE_HAIKU_4_5,
21
+ model: Models.CLAUDE_HAIKU_4_5,
22
22
  prompt: "...",
23
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
23
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
24
24
  });
25
25
  ```
26
26
 
@@ -33,7 +33,7 @@ run's tracked resources. It is one of:
33
33
  - `pending` / `running` - cleanup is queued or in progress.
34
34
  - `succeeded` - tracked cleanup work completed for the resources aex
35
35
  controls.
36
- - `failed_retryable` - a step failed in a way the cleanup worker will retry.
36
+ - `failed_retryable` - a step failed in a way the cleanup task will retry.
37
37
  - `failed_terminal` - a step failed past retries; manual intervention may be
38
38
  needed.
39
39
  - `skipped` - cleanup was not applicable for a tracked resource, or the
@@ -47,7 +47,7 @@ await aex.submit({
47
47
  model: Models.CLAUDE_HAIKU_4_5,
48
48
  prompt: "Edit the analysis notebook.",
49
49
  tools: [BuiltinTools.notebook_edit],
50
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
50
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
51
51
  });
52
52
  ```
53
53
 
@@ -69,6 +69,6 @@ await aex.submit({
69
69
  prompt: "Use only the declared MCP tools.",
70
70
  mcpServers,
71
71
  includeBuiltinTools: false,
72
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
72
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
73
73
  });
74
74
  ```
@@ -35,7 +35,7 @@ await aex.submit({
35
35
  allowPathPrefixes: ["/v1/"]
36
36
  })
37
37
  ],
38
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
38
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
39
39
  });
40
40
  ```
41
41
 
@@ -17,9 +17,7 @@ aex exposes one submission shape across supported providers:
17
17
  | Doubao | `Providers.DOUBAO` |
18
18
  | Doubao China | `Providers.DOUBAO_CN` |
19
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.
20
+ All submissions run on the managed runtime. There is no public runtime selector; omit `runtime`.
23
21
 
24
22
  ## Selection
25
23
 
@@ -32,7 +30,7 @@ await aex.submit({
32
30
  provider: Providers.OPENAI,
33
31
  model: Models.GPT_4_1,
34
32
  prompt: "Summarise the attached files.",
35
- secrets: { apiKey: process.env.OPENAI_API_KEY! }
33
+ secrets: { apiKeys: { openai: process.env.OPENAI_API_KEY! } }
36
34
  });
37
35
  ```
38
36
 
@@ -19,7 +19,7 @@ const runId = await aex.submit({
19
19
  provider: "anthropic",
20
20
  model: Models.CLAUDE_HAIKU_4_5,
21
21
  prompt: "Write the report and save it as a file.",
22
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
22
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
23
23
  });
24
24
 
25
25
  for await (const event of aex.stream(runId)) {
@@ -39,8 +39,5 @@ the normalized non-secret submission, so a retry with the same key and same body
39
39
  returns the existing run while a mismatched body fails with an idempotency
40
40
  conflict.
41
41
 
42
- Use the optional `region` submit field when you need a product placement target
43
- such as `eu-west`, `us-west`, or `ap-northeast`. Regions select configured platform
44
- backing for the run; they are not exact city guarantees. When omitted, aex
45
- infers a configured region from request geography and falls back when no hint
46
- matches.
42
+ aex selects product placement server-side. There is no submit-time region
43
+ selector.
@@ -33,9 +33,6 @@ server-side** from the run's vaulted bundle — the keys never transit the
33
33
  container. If the parent holds no key for the child's provider, the child submit
34
34
  is rejected with `parent_missing_provider_key`.
35
35
 
36
- The flat `secrets.apiKey` is still accepted as a back-compat shorthand for the
37
- run's own provider key (equivalent to `apiKeys[provider]`).
38
-
39
36
  MCP credential types:
40
37
 
41
38
  - `static_bearer`;
@@ -58,7 +55,7 @@ The platform's managed HTTP proxy is the agent-first alternative. The caller dec
58
55
  ```ts
59
56
  import {
60
57
  AgentExecutor,
61
- RunModels,
58
+ Models,
62
59
  validateProxyAuth,
63
60
  buildPlatformAllowedHosts
64
61
  } from "@aexhq/sdk";
@@ -101,11 +98,11 @@ const proxyEndpointAuth = [
101
98
  validateProxyAuth(proxyEndpoints, proxyEndpointAuth);
102
99
 
103
100
  const runId = await aex.submit({
104
- model: RunModels.CLAUDE_HAIKU_4_5,
101
+ model: Models.CLAUDE_HAIKU_4_5,
105
102
  prompt: "…",
106
103
  proxyEndpoints,
107
104
  secrets: {
108
- apiKey: process.env.ANTHROPIC_API_KEY!,
105
+ apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! },
109
106
  proxyEndpointAuth
110
107
  }
111
108
  });
@@ -140,10 +137,10 @@ const proxyEndpoints = [
140
137
  ] as const;
141
138
 
142
139
  const runId = await aex.submit({
143
- model: RunModels.CLAUDE_HAIKU_4_5,
140
+ model: Models.CLAUDE_HAIKU_4_5,
144
141
  prompt: "…",
145
142
  proxyEndpoints,
146
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
143
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
147
144
  });
148
145
  ```
149
146
 
package/docs/defaults.md CHANGED
@@ -7,13 +7,12 @@ title: Defaults
7
7
  These are the values aex applies when you **omit** the corresponding option on a
8
8
  run. Every value is mirrored from a single source-of-truth constant; the
9
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,
10
+ second source of truth. If a value here ever disagrees with that constant,
11
11
  the constant wins.
12
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)).
13
+ Each value below is named by its source-of-truth constant. The runtime-size
14
+ presets are defined in the public
15
+ [`packages/contracts/src/runtime-sizes.ts`](https://github.com/aexhq/aex/blob/main/packages/contracts/src/runtime-sizes.ts).
17
16
  For the hard ceilings and who can raise them, see
18
17
  [Limits & quotas](limits-and-quotas.md). For policy boundaries, see
19
18
  [Limits](limits.md).
@@ -22,50 +21,51 @@ For the hard ceilings and who can raise them, see
22
21
 
23
22
  | Option | Default | How to override | Source |
24
23
  | --- | --- | --- | --- |
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-0.25x-1gb` — 0.25 vCPU, 1 GB | 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) |
24
+ | `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` |
25
+ | `runtimeSize` (machine size) | `shared-0.25x-1gb` — 0.25 vCPU, 1 GB | Per-run via `options.runtimeSize` (use `RuntimeSizes.*` in TypeScript). | `RUN_DEFAULT_RUNTIME_SIZE` |
26
+ | `postHook.timeout` | 60 minutes | Per-run via the hook's `timeoutMs`. | `RUN_DEFAULT_POST_HOOK_TIMEOUT_MS` |
27
+ | `postHook.maxTurns` (repair budget) | 10 turns | Per-run via the hook's `maxTurns`. | `RUN_DEFAULT_POST_HOOK_MAX_TURNS` |
28
+ | `limits.maxSpendUsd` (per-run spend cap) | None — no per-run spend cap (the run is still bounded by its `timeout` and any workspace-level cap) | Per-run via `options.limits.maxSpendUsd` (a positive USD amount); the run is stopped once its spend would exceed the cap. | — |
29
29
 
30
30
  ## Tools
31
31
 
32
32
  | Option | Default | How to override | Source |
33
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) |
34
+ | Per-call exec timeout | 30 minutes | Per-call via the tool call's `timeoutMs`. | `RUN_DEFAULT_EXEC_TIMEOUT_MS` |
35
+ | `web_fetch` returned body | 500 KB (UTF-8) | Per-call via the tool's `max_bytes` argument. | `REQUEST_WEB_FETCH_DEFAULT_MAX_BYTES` |
36
36
 
37
37
  ## MCP
38
38
 
39
39
  | Option | Default | How to override | Source |
40
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) |
41
+ | MCP connect timeout (register + initialize + discover) | 30 seconds | Per-port via `connectTimeoutMs`. | `RUN_DEFAULT_MCP_CONNECT_TIMEOUT_MS` |
42
+ | MCP `tools/call` timeout | 30 minutes | Per-port via `callTimeoutMs`. | `RUN_DEFAULT_MCP_CALL_TIMEOUT_MS` |
43
43
 
44
44
  ## Proxy endpoints
45
45
 
46
46
  | Option | Default | How to override | Source |
47
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) |
48
+ | `maxRequestBytes` | 10 MiB | Per-endpoint via the endpoint's `maxRequestBytes`. | `REQUEST_PROXY_DEFAULT_MAX_REQUEST_BYTES` |
49
+ | `maxResponseBytes` | `0` (unlimited — the response is streamed unbuffered) | Per-endpoint via the endpoint's `maxResponseBytes`. | `REQUEST_PROXY_DEFAULT_MAX_RESPONSE_BYTES` |
50
+ | `timeoutMs` (upstream) | 5 minutes | Per-endpoint via the endpoint's `timeoutMs`. | `REQUEST_PROXY_DEFAULT_TIMEOUT_MS` |
51
51
 
52
52
  ## Links (signed URLs and tickets)
53
53
 
54
54
  | Option | Default | How to override | Source |
55
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) |
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` |
57
+ | Event-stream connection ticket TTL | 60 seconds | Per-mint via the `ttlMs` argument. | `REQUEST_TICKET_DEFAULT_TTL_MS` |
58
58
 
59
59
  ## Subagents
60
60
 
61
61
  | Option | Default | How to override | Source |
62
62
  | --- | --- | --- | --- |
63
- | Concurrent child runs per lineage root | 1000 (live, non-terminal child runs) | Per-run via `options.limits.maxConcurrentChildRuns`, clamped to the 4096 platform ceiling. | [`RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L429) |
64
- | Max subagent depth | 5 | Per-run via `options.limits.maxSubagentDepth`, clamped to the same hard ceiling. | [`RUN_MAX_PUBLIC_SUBAGENT_DEPTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L415) |
63
+ | Concurrent child runs per lineage root | 1000 (live, non-terminal child runs) | Per-run via `options.limits.maxConcurrentChildRuns`, clamped to the 4096 platform ceiling. | `RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS` |
64
+ | Max subagent depth | 5 | Per-run via `options.limits.maxSubagentDepth`, clamped to the same hard ceiling. | `RUN_MAX_PUBLIC_SUBAGENT_DEPTH` |
65
65
 
66
66
  ## Workspace
67
67
 
68
68
  | Option | Default | How to override | Source |
69
69
  | --- | --- | --- | --- |
70
- | 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) |
71
- | 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) |
70
+ | 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` |
71
+ | 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` |
@@ -7,12 +7,11 @@ title: Limits & quotas
7
7
  These are the hard ceilings and caps that bound a run, a workspace, and a single
8
8
  request. Every value is mirrored from a single source-of-truth constant; the
9
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,
10
+ second source of truth. If a value here ever disagrees with that constant,
11
11
  the constant wins.
12
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
13
+ Each row is named by its source-of-truth constant. For the values that apply
14
+ when you omit an option, see
16
15
  [Defaults](defaults.md). For product/policy boundaries (what aex does and does
17
16
  not promise), see [Limits](limits.md).
18
17
 
@@ -27,12 +26,13 @@ And whether you can **raise** it: per-run option, per-plan, or no.
27
26
 
28
27
  | Limit | Value | Source | Raisable? | Constant |
29
28
  | --- | --- | --- | --- | --- |
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) |
29
+ | Maximum run timeout | 6 hours | aex policy | Per plan (billing-driven) | `RUN_MAX_TIMEOUT_MS` |
30
+ | Minimum run timeout | 1 minute | aex policy | No (floor) | `RUN_MIN_TIMEOUT_MS` |
31
+ | Per-call exec timeout (default) | 30 minutes | aex policy | Per-call via the tool call's `timeoutMs` | `RUN_DEFAULT_EXEC_TIMEOUT_MS` |
32
+ | Post-hook timeout (default) | 60 minutes | aex policy | Per-run via the hook's `timeoutMs` | `RUN_DEFAULT_POST_HOOK_TIMEOUT_MS` |
33
+ | MCP connect timeout (default) | 30 seconds | aex policy | Per-port via `connectTimeoutMs` | `RUN_DEFAULT_MCP_CONNECT_TIMEOUT_MS` |
34
+ | MCP call timeout (default) | 30 minutes | aex policy | Per-port via `callTimeoutMs` | `RUN_DEFAULT_MCP_CALL_TIMEOUT_MS` |
35
+ | Per-run spend cap | None by default; when set, the run is stopped once its spend would exceed the cap | aex policy | Per-run via `options.limits.maxSpendUsd` (a positive USD amount) | — |
36
36
 
37
37
  ### Output capture (per run)
38
38
 
@@ -42,46 +42,46 @@ silently lost.
42
42
 
43
43
  | Limit | Value | Source | Raisable? | Constant |
44
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) |
45
+ | Capture wall-clock budget | 1 hour | aex policy | No (hard ceiling) | `RUN_CAPTURE_DEFAULT_TIMEOUT_MS` |
46
+ | Max files captured | 50,000 | aex policy | No (hard ceiling) | `RUN_CAPTURE_MAX_FILES` |
47
+ | Max bytes per captured file | 1 TB | aex policy | No (hard ceiling) | `RUN_CAPTURE_MAX_FILE_BYTES` |
48
+ | Max total captured bytes | 1 TB | aex policy | No (hard ceiling) | `RUN_CAPTURE_MAX_TOTAL_BYTES` |
49
49
 
50
50
  ### Tool output caps (per run)
51
51
 
52
52
  | Limit | Value | Source | Raisable? | Constant |
53
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) |
54
+ | `web_fetch` returned body | 500 KB (UTF-8) | aex policy | Per-call via `max_bytes` | `REQUEST_WEB_FETCH_DEFAULT_MAX_BYTES` |
55
+ | `bash_output` per-read body | 1 MB (UTF-8) | aex policy | No (hard ceiling) | `RUN_BASH_BG_OUTPUT_MAX_BYTES` |
56
+ | `grep` max file size (larger files skipped — use `bash grep`) | 25 MB | aex policy | No (hard ceiling) | `RUN_TOOL_GREP_MAX_FILE_BYTES` |
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` |
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` |
59
59
 
60
60
  ### Subagents (per run lineage)
61
61
 
62
62
  | Limit | Value | Source | Raisable? | Constant |
63
63
  | --- | --- | --- | --- | --- |
64
- | Max subagent depth (public submit / `subagent` tool) | 5 (a depth-5 lineage may not spawn deeper) | aex policy | Per-run via `options.limits.maxSubagentDepth` (clamped to this hard ceiling) | [`RUN_MAX_PUBLIC_SUBAGENT_DEPTH`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L415) |
65
- | Concurrent child runs per lineage root | 1000 live (non-terminal); hard ceiling 4096 | aex policy | Per-run via `options.limits.maxConcurrentChildRuns` (clamped to the 4096 ceiling) | [`RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS`](https://github.com/aexhq/aex-platform/blob/main/packages/shared/src/limits.ts#L429) |
64
+ | Max subagent depth (public submit / `subagent` tool) | 5 (a depth-5 lineage may not spawn deeper) | aex policy | Per-run via `options.limits.maxSubagentDepth` (clamped to this hard ceiling) | `RUN_MAX_PUBLIC_SUBAGENT_DEPTH` |
65
+ | Concurrent child runs per lineage root | 1000 live (non-terminal); hard ceiling 4096 | aex policy | Per-run via `options.limits.maxConcurrentChildRuns` (clamped to the 4096 ceiling) | `RUN_DEFAULT_MAX_CONCURRENT_CHILD_RUNS` |
66
66
 
67
67
  ### Retention (per run)
68
68
 
69
69
  | Limit | Value | Source | Raisable? | Constant |
70
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) |
71
+ | Per-run metadata record TTL | 24 hours | aex policy | No (hard ceiling) | `RUN_KV_RECORD_TTL_SECONDS` |
72
+ | Per-run secret-envelope TTL | 24 hours | aex policy | No (hard ceiling) | `RUN_KV_SECRET_TTL_SECONDS` |
73
73
 
74
74
  ## Workspace scope
75
75
 
76
76
  | Limit | Value | Source | Raisable? | Constant |
77
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) |
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` |
79
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) |
80
+ | Skill bundle max compressed size (`.zip`) | 100 GB | Workspace default | Per-workspace (plan/env) | `WORKSPACE_SKILL_BUNDLE_MAX_COMPRESSED_BYTES` |
81
+ | Skill bundle max file entries | 1,000 | Workspace default | Per-workspace (plan/env) | `WORKSPACE_SKILL_BUNDLE_MAX_FILES` |
82
+ | Skill bundle max directory depth (`a/b/c/d` = 4) | 16 | Workspace default | Per-workspace (plan/env) | `WORKSPACE_SKILL_BUNDLE_MAX_DEPTH` |
83
+ | Skill bundle max entry path length | 512 characters | Workspace default | No (hard ceiling) | `WORKSPACE_SKILL_BUNDLE_MAX_PATH_LENGTH` |
84
+ | `File.mountPath` max length | 512 characters | Workspace default | No (hard ceiling) | `WORKSPACE_MOUNT_PATH_MAX_LENGTH` |
85
85
 
86
86
  ### Rate limits (per workspace, per minute)
87
87
 
@@ -90,19 +90,19 @@ Default values; each is overridable per-plane via the matching
90
90
 
91
91
  | Action | Default per minute | Source | Constant |
92
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) |
93
+ | Run submit | 60 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
94
+ | Run cancel | 30 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
95
+ | Run delete | 30 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
96
+ | Signed output link | 120 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
97
+ | API token create | 10 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
98
+ | API token delete | 30 | Workspace default | `WORKSPACE_RATE_LIMIT_DEFAULTS` |
99
99
 
100
100
  ## Request scope (proxy and egress)
101
101
 
102
102
  | Limit | Value | Source | Raisable? | Constant |
103
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) |
104
+ | Proxy request body | 10 MiB | aex policy | Per-endpoint via `maxRequestBytes` | `REQUEST_PROXY_DEFAULT_MAX_REQUEST_BYTES` |
105
+ | Proxy response body | `0` = unlimited (streamed unbuffered) | aex policy | Per-endpoint via `maxResponseBytes` | `REQUEST_PROXY_DEFAULT_MAX_RESPONSE_BYTES` |
106
+ | Proxy upstream timeout | 5 minutes | aex policy | Per-endpoint via `timeoutMs` | `REQUEST_PROXY_DEFAULT_TIMEOUT_MS` |
107
+ | Signed output URL TTL | 300 seconds | aex policy | Per-call via `expiresSeconds` | `REQUEST_PRESIGN_URL_DEFAULT_TTL_SECONDS` |
108
+ | Event-stream connection ticket TTL | 60 seconds | aex policy | Per-mint via `ttlMs` | `REQUEST_TICKET_DEFAULT_TTL_MS` |
package/docs/limits.md CHANGED
@@ -24,7 +24,7 @@ For the current provider/model set, see the generated
24
24
 
25
25
  | Area | Boundary |
26
26
  | --- | --- |
27
- | Runtime | New submissions run on the managed runtime. `runtime: "native"` is rejected. |
27
+ | Runtime | New submissions run on the managed runtime. There is no public runtime selector. |
28
28
  | Provider policy | Provider retention, training exclusion, HIPAA/BAA, data residency, abuse policy, and pricing belong to the selected provider account, endpoint, and contract. |
29
29
  | 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). |
30
30
  | MCP servers | Remote MCP servers are customer-trusted systems. aex validates declarations and routes credentials; it does not make an untrusted MCP server safe. |
@@ -61,7 +61,7 @@ await aex.submit({
61
61
  allowedHosts: ["api.example.com", "status.example.com"]
62
62
  }
63
63
  },
64
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
64
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
65
65
  });
66
66
  ```
67
67
 
@@ -96,7 +96,7 @@ await aex.submit({
96
96
  model: Models.CLAUDE_HAIKU_4_5,
97
97
  prompt: "Research the topic across the open web.",
98
98
  environment: { networking: { mode: "open" } },
99
- secrets: { apiKey: process.env.ANTHROPIC_API_KEY! }
99
+ secrets: { apiKeys: { anthropic: process.env.ANTHROPIC_API_KEY! } }
100
100
  });
101
101
  ```
102
102
 
package/docs/outputs.md CHANGED
@@ -9,12 +9,12 @@ Every run produces durable metadata (status, events, snapshots, cleanup state) a
9
9
  ## Quickstart
10
10
 
11
11
  ```ts
12
- import { RunModels } from "@aexhq/sdk";
12
+ import { Models } from "@aexhq/sdk";
13
13
 
14
14
  const runId = await aex.submit({
15
- model: RunModels.CLAUDE_HAIKU_4_5,
15
+ model: Models.CLAUDE_HAIKU_4_5,
16
16
  prompt: "Produce a report and save it as a file.",
17
- secrets: { apiKey }
17
+ secrets: { apiKeys: { anthropic: apiKey } }
18
18
  });
19
19
 
20
20
  await aex.wait(runId);