@aexhq/sdk 0.46.4-canary → 0.50.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 (337) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +38 -0
  3. package/README.md +23 -31
  4. package/dist/client/aex.d.ts +33 -0
  5. package/dist/client/aex.js +98 -0
  6. package/dist/client/aex.js.map +1 -0
  7. package/dist/client/credentials.d.ts +25 -0
  8. package/dist/client/credentials.js +97 -0
  9. package/dist/client/credentials.js.map +1 -0
  10. package/dist/client/routing.d.ts +7 -0
  11. package/dist/client/routing.js +29 -0
  12. package/dist/client/routing.js.map +1 -0
  13. package/dist/downloads/download.d.ts +25 -0
  14. package/dist/downloads/download.js +53 -0
  15. package/dist/downloads/download.js.map +1 -0
  16. package/dist/generated/errors.d.ts +12 -0
  17. package/dist/generated/errors.js +81 -0
  18. package/dist/generated/errors.js.map +1 -0
  19. package/dist/generated/resources.d.ts +730 -0
  20. package/dist/generated/resources.js +606 -0
  21. package/dist/generated/resources.js.map +1 -0
  22. package/dist/generated/routes.d.ts +42 -0
  23. package/dist/generated/routes.js +2101 -0
  24. package/dist/generated/routes.js.map +1 -0
  25. package/dist/index.d.ts +20 -50
  26. package/dist/index.js +11 -62
  27. package/dist/index.js.map +1 -1
  28. package/dist/observations/stream.d.ts +1 -0
  29. package/dist/observations/stream.js +18 -0
  30. package/dist/observations/stream.js.map +1 -0
  31. package/dist/transport/errors.d.ts +60 -0
  32. package/dist/transport/errors.js +107 -0
  33. package/dist/transport/errors.js.map +1 -0
  34. package/dist/transport/pagination.d.ts +8 -0
  35. package/dist/transport/pagination.js +34 -0
  36. package/dist/transport/pagination.js.map +1 -0
  37. package/dist/transport/retry.d.ts +21 -0
  38. package/dist/transport/retry.js +37 -0
  39. package/dist/transport/retry.js.map +1 -0
  40. package/dist/transport/transport.d.ts +25 -0
  41. package/dist/transport/transport.js +28 -0
  42. package/dist/transport/transport.js.map +1 -0
  43. package/package.json +63 -30
  44. package/dist/_contracts/account-operations.d.ts +0 -101
  45. package/dist/_contracts/account-operations.js +0 -242
  46. package/dist/_contracts/account-types.d.ts +0 -461
  47. package/dist/_contracts/account-types.js +0 -1
  48. package/dist/_contracts/api-key.d.ts +0 -61
  49. package/dist/_contracts/api-key.js +0 -101
  50. package/dist/_contracts/api-routes.d.ts +0 -20
  51. package/dist/_contracts/api-routes.js +0 -109
  52. package/dist/_contracts/archive-limits.d.ts +0 -3
  53. package/dist/_contracts/archive-limits.js +0 -23
  54. package/dist/_contracts/asset-authoring.d.ts +0 -22
  55. package/dist/_contracts/asset-authoring.js +0 -106
  56. package/dist/_contracts/asset-bundle.d.ts +0 -64
  57. package/dist/_contracts/asset-bundle.js +0 -263
  58. package/dist/_contracts/asset-upload-helper.d.ts +0 -31
  59. package/dist/_contracts/asset-upload-helper.js +0 -84
  60. package/dist/_contracts/billing-admission.d.ts +0 -29
  61. package/dist/_contracts/billing-admission.js +0 -28
  62. package/dist/_contracts/bundle-manifest.d.ts +0 -89
  63. package/dist/_contracts/bundle-manifest.js +0 -158
  64. package/dist/_contracts/canonical-sha256.d.ts +0 -8
  65. package/dist/_contracts/canonical-sha256.js +0 -8
  66. package/dist/_contracts/connection-ticket.d.ts +0 -22
  67. package/dist/_contracts/connection-ticket.js +0 -54
  68. package/dist/_contracts/continuation-event.d.ts +0 -31
  69. package/dist/_contracts/continuation-event.js +0 -6
  70. package/dist/_contracts/contract-parse-error.d.ts +0 -12
  71. package/dist/_contracts/contract-parse-error.js +0 -51
  72. package/dist/_contracts/error-codes.d.ts +0 -26
  73. package/dist/_contracts/error-codes.js +0 -116
  74. package/dist/_contracts/error-factory.d.ts +0 -32
  75. package/dist/_contracts/error-factory.js +0 -174
  76. package/dist/_contracts/event-envelope.d.ts +0 -471
  77. package/dist/_contracts/event-envelope.js +0 -501
  78. package/dist/_contracts/event-stream-client.d.ts +0 -122
  79. package/dist/_contracts/event-stream-client.js +0 -445
  80. package/dist/_contracts/event-view.d.ts +0 -44
  81. package/dist/_contracts/event-view.js +0 -69
  82. package/dist/_contracts/failure-class.d.ts +0 -29
  83. package/dist/_contracts/failure-class.js +0 -73
  84. package/dist/_contracts/http.d.ts +0 -135
  85. package/dist/_contracts/http.js +0 -434
  86. package/dist/_contracts/ids.d.ts +0 -66
  87. package/dist/_contracts/ids.js +0 -119
  88. package/dist/_contracts/index.d.ts +0 -42
  89. package/dist/_contracts/index.js +0 -52
  90. package/dist/_contracts/internal.d.ts +0 -55
  91. package/dist/_contracts/internal.js +0 -113
  92. package/dist/_contracts/models.d.ts +0 -30
  93. package/dist/_contracts/models.js +0 -28
  94. package/dist/_contracts/operation-core.d.ts +0 -36
  95. package/dist/_contracts/operation-core.js +0 -70
  96. package/dist/_contracts/operations.d.ts +0 -218
  97. package/dist/_contracts/operations.js +0 -1496
  98. package/dist/_contracts/otlp-projection.d.ts +0 -78
  99. package/dist/_contracts/otlp-projection.js +0 -171
  100. package/dist/_contracts/post-hook.d.ts +0 -31
  101. package/dist/_contracts/post-hook.js +0 -61
  102. package/dist/_contracts/provider-fault.d.ts +0 -34
  103. package/dist/_contracts/provider-fault.js +0 -68
  104. package/dist/_contracts/retry-core.d.ts +0 -29
  105. package/dist/_contracts/retry-core.js +0 -79
  106. package/dist/_contracts/runner-event.d.ts +0 -117
  107. package/dist/_contracts/runner-event.js +0 -172
  108. package/dist/_contracts/runtime-kind.d.ts +0 -60
  109. package/dist/_contracts/runtime-kind.js +0 -70
  110. package/dist/_contracts/runtime-manifest.d.ts +0 -121
  111. package/dist/_contracts/runtime-manifest.js +0 -83
  112. package/dist/_contracts/runtime-security-profile.d.ts +0 -26
  113. package/dist/_contracts/runtime-security-profile.js +0 -73
  114. package/dist/_contracts/runtime-sizes.d.ts +0 -104
  115. package/dist/_contracts/runtime-sizes.js +0 -111
  116. package/dist/_contracts/runtime-types.d.ts +0 -618
  117. package/dist/_contracts/runtime-types.js +0 -58
  118. package/dist/_contracts/schemas/asset-bundle.d.ts +0 -70
  119. package/dist/_contracts/schemas/asset-bundle.js +0 -107
  120. package/dist/_contracts/schemas/asset-ref.d.ts +0 -61
  121. package/dist/_contracts/schemas/asset-ref.js +0 -118
  122. package/dist/_contracts/schemas/bundle-manifest.d.ts +0 -66
  123. package/dist/_contracts/schemas/bundle-manifest.js +0 -77
  124. package/dist/_contracts/schemas/index.d.ts +0 -32
  125. package/dist/_contracts/schemas/index.js +0 -30
  126. package/dist/_contracts/schemas/mcp-server.d.ts +0 -99
  127. package/dist/_contracts/schemas/mcp-server.js +0 -209
  128. package/dist/_contracts/schemas/models.d.ts +0 -29
  129. package/dist/_contracts/schemas/models.js +0 -51
  130. package/dist/_contracts/schemas/numeric.d.ts +0 -18
  131. package/dist/_contracts/schemas/numeric.js +0 -28
  132. package/dist/_contracts/schemas/post-hook.d.ts +0 -45
  133. package/dist/_contracts/schemas/post-hook.js +0 -68
  134. package/dist/_contracts/schemas/response-assets.d.ts +0 -75
  135. package/dist/_contracts/schemas/response-assets.js +0 -81
  136. package/dist/_contracts/schemas/response-billing.d.ts +0 -208
  137. package/dist/_contracts/schemas/response-billing.js +0 -139
  138. package/dist/_contracts/schemas/response-common.d.ts +0 -132
  139. package/dist/_contracts/schemas/response-common.js +0 -162
  140. package/dist/_contracts/schemas/response-identity.d.ts +0 -648
  141. package/dist/_contracts/schemas/response-identity.js +0 -131
  142. package/dist/_contracts/schemas/response-mcp-servers.d.ts +0 -51
  143. package/dist/_contracts/schemas/response-mcp-servers.js +0 -32
  144. package/dist/_contracts/schemas/response-secrets.d.ts +0 -50
  145. package/dist/_contracts/schemas/response-secrets.js +0 -32
  146. package/dist/_contracts/schemas/response-sessions-internal.d.ts +0 -200
  147. package/dist/_contracts/schemas/response-sessions-internal.js +0 -142
  148. package/dist/_contracts/schemas/response-sessions.d.ts +0 -1598
  149. package/dist/_contracts/schemas/response-sessions.js +0 -377
  150. package/dist/_contracts/schemas/response-webhooks.d.ts +0 -76
  151. package/dist/_contracts/schemas/response-webhooks.js +0 -42
  152. package/dist/_contracts/schemas/response-workspace.d.ts +0 -225
  153. package/dist/_contracts/schemas/response-workspace.js +0 -99
  154. package/dist/_contracts/schemas/runtime-kind.d.ts +0 -31
  155. package/dist/_contracts/schemas/runtime-kind.js +0 -29
  156. package/dist/_contracts/schemas/runtime-security-profile.d.ts +0 -28
  157. package/dist/_contracts/schemas/runtime-security-profile.js +0 -26
  158. package/dist/_contracts/schemas/runtime-sizes.d.ts +0 -70
  159. package/dist/_contracts/schemas/runtime-sizes.js +0 -127
  160. package/dist/_contracts/schemas/session-limits.d.ts +0 -34
  161. package/dist/_contracts/schemas/session-limits.js +0 -39
  162. package/dist/_contracts/schemas/session-machine.d.ts +0 -23
  163. package/dist/_contracts/schemas/session-machine.js +0 -24
  164. package/dist/_contracts/schemas/session-request-config.d.ts +0 -58
  165. package/dist/_contracts/schemas/session-request-config.js +0 -134
  166. package/dist/_contracts/schemas/session-webhook.d.ts +0 -11
  167. package/dist/_contracts/schemas/session-webhook.js +0 -38
  168. package/dist/_contracts/schemas/side-effect-audit.d.ts +0 -98
  169. package/dist/_contracts/schemas/side-effect-audit.js +0 -102
  170. package/dist/_contracts/schemas/submission-assets.d.ts +0 -117
  171. package/dist/_contracts/schemas/submission-assets.js +0 -147
  172. package/dist/_contracts/schemas/submission-body.d.ts +0 -251
  173. package/dist/_contracts/schemas/submission-body.js +0 -378
  174. package/dist/_contracts/schemas/submission-environment.d.ts +0 -79
  175. package/dist/_contracts/schemas/submission-environment.js +0 -179
  176. package/dist/_contracts/schemas/submission-request.d.ts +0 -158
  177. package/dist/_contracts/schemas/submission-request.js +0 -49
  178. package/dist/_contracts/schemas/submission-secrets.d.ts +0 -47
  179. package/dist/_contracts/schemas/submission-secrets.js +0 -108
  180. package/dist/_contracts/schemas/wire.d.ts +0 -118
  181. package/dist/_contracts/schemas/wire.js +0 -171
  182. package/dist/_contracts/schemas/workspace-resources.d.ts +0 -50
  183. package/dist/_contracts/schemas/workspace-resources.js +0 -87
  184. package/dist/_contracts/sdk-errors.d.ts +0 -212
  185. package/dist/_contracts/sdk-errors.js +0 -313
  186. package/dist/_contracts/sdk-secrets.d.ts +0 -67
  187. package/dist/_contracts/sdk-secrets.js +0 -427
  188. package/dist/_contracts/session-archive.d.ts +0 -16
  189. package/dist/_contracts/session-archive.js +0 -92
  190. package/dist/_contracts/session-artifacts.d.ts +0 -189
  191. package/dist/_contracts/session-artifacts.js +0 -264
  192. package/dist/_contracts/session-config.d.ts +0 -373
  193. package/dist/_contracts/session-config.js +0 -562
  194. package/dist/_contracts/session-cost-types.d.ts +0 -211
  195. package/dist/_contracts/session-cost-types.js +0 -69
  196. package/dist/_contracts/session-cost.d.ts +0 -8
  197. package/dist/_contracts/session-cost.js +0 -582
  198. package/dist/_contracts/session-custody.d.ts +0 -165
  199. package/dist/_contracts/session-custody.js +0 -345
  200. package/dist/_contracts/session-file-query.d.ts +0 -14
  201. package/dist/_contracts/session-file-query.js +0 -178
  202. package/dist/_contracts/session-record.d.ts +0 -112
  203. package/dist/_contracts/session-record.js +0 -165
  204. package/dist/_contracts/session-retention.d.ts +0 -201
  205. package/dist/_contracts/session-retention.js +0 -450
  206. package/dist/_contracts/side-effect-audit.d.ts +0 -126
  207. package/dist/_contracts/side-effect-audit.js +0 -520
  208. package/dist/_contracts/sse.d.ts +0 -74
  209. package/dist/_contracts/sse.js +0 -227
  210. package/dist/_contracts/stable.d.ts +0 -45
  211. package/dist/_contracts/stable.js +0 -62
  212. package/dist/_contracts/status.d.ts +0 -25
  213. package/dist/_contracts/status.js +0 -57
  214. package/dist/_contracts/submission-limits.d.ts +0 -61
  215. package/dist/_contracts/submission-limits.js +0 -60
  216. package/dist/_contracts/submission.d.ts +0 -547
  217. package/dist/_contracts/submission.js +0 -812
  218. package/dist/_contracts/suggest.d.ts +0 -15
  219. package/dist/_contracts/suggest.js +0 -53
  220. package/dist/_contracts/testing/response-bindings.d.ts +0 -45
  221. package/dist/_contracts/testing/response-bindings.js +0 -256
  222. package/dist/_contracts/testing/wire-conformance-entry.d.ts +0 -10
  223. package/dist/_contracts/testing/wire-conformance-entry.js +0 -8
  224. package/dist/_contracts/testing/wire-conformance.d.ts +0 -169
  225. package/dist/_contracts/testing/wire-conformance.js +0 -276
  226. package/dist/_contracts/turn-trace.d.ts +0 -28
  227. package/dist/_contracts/turn-trace.js +0 -1
  228. package/dist/_contracts/unknown-field-error.d.ts +0 -13
  229. package/dist/_contracts/unknown-field-error.js +0 -21
  230. package/dist/_contracts/value-guards.d.ts +0 -20
  231. package/dist/_contracts/value-guards.js +0 -34
  232. package/dist/_contracts/webhook-verify.d.ts +0 -34
  233. package/dist/_contracts/webhook-verify.js +0 -93
  234. package/dist/_contracts/wire-observer.d.ts +0 -49
  235. package/dist/_contracts/wire-observer.js +0 -34
  236. package/dist/_contracts/workflow-status.d.ts +0 -7
  237. package/dist/_contracts/workflow-status.js +0 -43
  238. package/dist/_contracts/workspace-resources.d.ts +0 -98
  239. package/dist/_contracts/workspace-resources.js +0 -39
  240. package/dist/archive-limits.d.ts +0 -1
  241. package/dist/archive-limits.js +0 -2
  242. package/dist/archive-limits.js.map +0 -1
  243. package/dist/asset-upload.d.ts +0 -47
  244. package/dist/asset-upload.js +0 -269
  245. package/dist/asset-upload.js.map +0 -1
  246. package/dist/bundle.d.ts +0 -9
  247. package/dist/bundle.js +0 -20
  248. package/dist/bundle.js.map +0 -1
  249. package/dist/canonical-zip.d.ts +0 -68
  250. package/dist/canonical-zip.js +0 -355
  251. package/dist/canonical-zip.js.map +0 -1
  252. package/dist/cli.mjs +0 -12048
  253. package/dist/cli.mjs.sha256 +0 -1
  254. package/dist/client-types.d.ts +0 -192
  255. package/dist/client-types.js +0 -2
  256. package/dist/client-types.js.map +0 -1
  257. package/dist/client.d.ts +0 -464
  258. package/dist/client.js +0 -1207
  259. package/dist/client.js.map +0 -1
  260. package/dist/event-projection.d.ts +0 -22
  261. package/dist/event-projection.js +0 -380
  262. package/dist/event-projection.js.map +0 -1
  263. package/dist/fetch-archive.d.ts +0 -16
  264. package/dist/fetch-archive.js +0 -252
  265. package/dist/fetch-archive.js.map +0 -1
  266. package/dist/file.d.ts +0 -96
  267. package/dist/file.js +0 -272
  268. package/dist/file.js.map +0 -1
  269. package/dist/instructions.d.ts +0 -20
  270. package/dist/instructions.js +0 -40
  271. package/dist/instructions.js.map +0 -1
  272. package/dist/legacy-session-provider-fault.d.ts +0 -7
  273. package/dist/legacy-session-provider-fault.js +0 -38
  274. package/dist/legacy-session-provider-fault.js.map +0 -1
  275. package/dist/mcp-server.d.ts +0 -84
  276. package/dist/mcp-server.js +0 -117
  277. package/dist/mcp-server.js.map +0 -1
  278. package/dist/node-fs.d.ts +0 -29
  279. package/dist/node-fs.js +0 -19
  280. package/dist/node-fs.js.map +0 -1
  281. package/dist/node-walk.d.ts +0 -69
  282. package/dist/node-walk.js +0 -151
  283. package/dist/node-walk.js.map +0 -1
  284. package/dist/path-basename.d.ts +0 -5
  285. package/dist/path-basename.js +0 -9
  286. package/dist/path-basename.js.map +0 -1
  287. package/dist/retry.d.ts +0 -70
  288. package/dist/retry.js +0 -155
  289. package/dist/retry.js.map +0 -1
  290. package/dist/secret.d.ts +0 -65
  291. package/dist/secret.js +0 -110
  292. package/dist/secret.js.map +0 -1
  293. package/dist/session-validate.d.ts +0 -100
  294. package/dist/session-validate.js +0 -303
  295. package/dist/session-validate.js.map +0 -1
  296. package/dist/skill.d.ts +0 -99
  297. package/dist/skill.js +0 -169
  298. package/dist/skill.js.map +0 -1
  299. package/dist/submission-wire.d.ts +0 -13
  300. package/dist/submission-wire.js +0 -69
  301. package/dist/submission-wire.js.map +0 -1
  302. package/dist/tool.d.ts +0 -41
  303. package/dist/tool.js +0 -76
  304. package/dist/tool.js.map +0 -1
  305. package/dist/version.d.ts +0 -9
  306. package/dist/version.js +0 -10
  307. package/dist/version.js.map +0 -1
  308. package/docs/authentication.md +0 -125
  309. package/docs/billing.md +0 -164
  310. package/docs/cleanup.md +0 -27
  311. package/docs/concepts/agent-tools.md +0 -47
  312. package/docs/concepts/composition.md +0 -60
  313. package/docs/concepts/providers-and-runtimes.md +0 -121
  314. package/docs/concepts/sessions.md +0 -51
  315. package/docs/concepts/subagents.md +0 -35
  316. package/docs/credentials.md +0 -116
  317. package/docs/defaults.md +0 -51
  318. package/docs/errors.md +0 -258
  319. package/docs/events.md +0 -143
  320. package/docs/files.md +0 -130
  321. package/docs/limits-and-quotas.md +0 -114
  322. package/docs/limits.md +0 -51
  323. package/docs/mcp.md +0 -47
  324. package/docs/networking.md +0 -114
  325. package/docs/provider-runtime-capabilities.md +0 -32
  326. package/docs/public-surface.json +0 -73
  327. package/docs/quickstart.md +0 -135
  328. package/docs/release.md +0 -44
  329. package/docs/retries.md +0 -108
  330. package/docs/secrets.md +0 -141
  331. package/docs/session-config.md +0 -51
  332. package/docs/session-record.md +0 -58
  333. package/docs/skills.md +0 -65
  334. package/docs/telemetry.md +0 -66
  335. package/docs/testing.md +0 -35
  336. package/docs/vision-skills.md +0 -94
  337. package/docs/webhooks.md +0 -143
package/docs/events.md DELETED
@@ -1,143 +0,0 @@
1
- ---
2
- title: Events
3
- ---
4
-
5
- # Events
6
-
7
- Durable event reads use one `AexEventView` shape with CloudEvents identity,
8
- monotonic `sequence`, real AG-UI `threadId`, and real `runId`.
9
- The `AEX_EVENT_TYPES` and `AEX_EVENT_SOURCES` arrays list the events authored by
10
- the current SDK, but the raw envelope accepts future type and source strings.
11
- Unknown events are yielded with their original fields and data intact; `toAGUI`
12
- projects an unknown type through AG-UI's `CUSTOM` carrier without changing the
13
- raw event.
14
-
15
- ```ts
16
- const session = await aex.sessions.open(sessionId);
17
- for await (const event of session.events.iterate()) {
18
- if (event.isTextMessage()) console.log(event.data.text);
19
- if (event.isToolCallStart()) console.log(event.data.name);
20
- }
21
- ```
22
-
23
- `iterate()` follows cursor pages lazily and retains at most one API page. Use
24
- `list()` only when the full history is known to fit comfortably in memory.
25
-
26
- ## Run lifecycle
27
-
28
- The public lifecycle is:
29
-
30
- - `RUN_STARTED`: the accepted run began.
31
- - `RUN_FINISHED`: all run state is committed, including the checkpoint.
32
- - `RUN_ERROR`: the run failed. It may have no checkpoint when failure happened
33
- before a checkpoint could be created.
34
-
35
- Runtime execution ending is internal and is not emitted as a public lifecycle
36
- event. Consumers observe only the committed `RUN_FINISHED` or `RUN_ERROR`
37
- terminal boundary.
38
-
39
- ```ts
40
- const run = session.messages.send("Continue the task.");
41
-
42
- for await (const event of run) {
43
- if (event.isRunFinished()) {
44
- console.log(event.data.checkpoint);
45
- }
46
- }
47
-
48
- const result = await run.finished();
49
- ```
50
-
51
- Message sends do not accept a historical `from` cursor. Their stream and
52
- finished result are scoped to the run accepted by that send, so events from an
53
- earlier run cannot be replayed into the current result. Use
54
- `session.events.iterate()`, `.list()`, `.stream({ from })`, or
55
- `.streamEnvelopes({ from })`
56
- when intentionally reading session history.
57
-
58
- `finished()` and `aex.start()` return the same run outcome vocabulary:
59
- `succeeded`, `failed`, `timed_out`, `cancelled`, or `interrupted`. A run held by
60
- suspension or approval is `interrupted`; the session lifecycle separately says
61
- `suspended` or `awaiting_approval`. Only `succeeded` sets `result.ok` to true.
62
-
63
- ## Live stream
64
-
65
- ```ts
66
- for await (const event of session.events.streamEnvelopes({ from: 0 })) {
67
- if (event.replayable === false) {
68
- console.log("live", event.liveSequence, event.type);
69
- } else {
70
- console.log("durable", event.sequence, event.type);
71
- }
72
- }
73
- ```
74
-
75
- `session.messages.send(...)` and `session.events.streamEnvelopes(...)` yield
76
- `AexStreamEventView`, a discriminated union:
77
-
78
- - Durable events have `sequence` and are replayable. They are the only events
79
- returned by `events.iterate()`, `events.list()`, polling streams, archives,
80
- and finished results.
81
- - Provisional live events have `replayable: false`, a per-run `liveSequence`,
82
- `ephemeral: true`, the coordinator `receivedAt` time, and no durable
83
- `sequence`. They are not replayed from storage.
84
-
85
- The SDK mints a short-lived coordinator ticket, reconnects durable events from
86
- the last sequence after transient transport loss, deduplicates repeated live
87
- frames by event id, and stops on a durable run terminal. The caller can tune
88
- transport watchdogs with `idleTimeoutMs`, `pingIntervalMs`, and
89
- `eventQuietRecheckMs`; these reconnect the event transport and never retry an
90
- application run.
91
-
92
- For a polling snapshot stream, use `session.events.stream()`. At invocation it
93
- targets the session's current run, or its last completed run when idle. Older
94
- run terminals cannot end that poll. The inclusive `from` cursor
95
- (`sequence >= from`) filters yielded history without hiding the target run's
96
- completion boundary:
97
-
98
- ```ts
99
- for await (const event of session.events.stream({ from: 1024 })) {
100
- console.log(event.sequence, event.type);
101
- }
102
- ```
103
-
104
- The cursor must be a non-negative safe integer. A session with no runs returns
105
- one bounded snapshot instead of waiting for a terminal that cannot exist. For
106
- an explicitly bounded read, use `session.events.list()`.
107
-
108
- ## Assistant messages
109
-
110
- Messages are a separate resource from raw events:
111
-
112
- ```ts
113
- const messages = await session.messages.list();
114
- console.log(messages.at(-1)?.text);
115
- ```
116
-
117
- Messages come directly from the messages endpoint. A missing or broken route is
118
- surfaced as an API failure rather than projected from another resource.
119
-
120
- ## Output granularity
121
-
122
- `outputMode: "buffered"` emits coalesced assistant text. `"stream"` first emits
123
- provisional live token deltas, then exactly one durable coalesced
124
- `TEXT_MESSAGE_CONTENT` before the run terminal. Final `result.text`,
125
- `result.messages`, and `result.events` use the durable coalesced event and do
126
- not duplicate provisional deltas. Stream mode is rejected before submission
127
- for providers that do not support it; it is never silently downgraded.
128
-
129
- ## Archives
130
-
131
- ```ts
132
- const link = await session.events.archiveLink({ expiresIn: "1h" });
133
- const archive = await session.events.download();
134
- ```
135
-
136
- The event archive contains the same public events the SDK returns, byte-identical.
137
- `archiveLink()` is a bounded convenience export. A session that exceeds the
138
- bulk-export limits returns a typed `413` API error; an export that cannot finish
139
- inside the server's request budget returns a typed `503` API error. The SDK does
140
- not retry either response automatically. Traverse large histories with
141
- `for await (const event of session.events.iterate())`; iteration follows bounded
142
- cursor pages without retaining the whole history. `events.list()` and
143
- `events.download()` are materializing convenience methods.
package/docs/files.md DELETED
@@ -1,130 +0,0 @@
1
- ---
2
- title: Files
3
- ---
4
-
5
- # Files
6
-
7
- There are two different file concepts:
8
-
9
- - `aex.workspace.files`: reusable, versioned input resources.
10
- - `session.files`: files captured from one session checkpoint.
11
-
12
- Raw uploaded bytes are assets. A workspace file is a typed resource that pins
13
- an asset, logical resource ID, version, hash, name, and mount path.
14
-
15
- `mountPath` is always a destination directory. The runtime preserves each
16
- source/archive filename inside that directory, so an `input.csv` published
17
- with `mountPath: "/workspace/input"` appears at
18
- `/workspace/input/input.csv`. `File.fromBytes({ name })` accepts the filename
19
- stored in the archive; the optional `File.fromPath(path, { name })` override is
20
- a filename-shaped label used only for resource identity while the source
21
- basename remains in the archive. The SDK derives a lowercase, hyphenated 2–64
22
- character value from either input. The result is the resource's storage slug; it never renames the mounted file.
23
- This compatibility slug is distinct from the
24
- directly supplied persisted name used by instructions. Multiple files can
25
- intentionally share one mount directory as long as their resulting paths do not
26
- collide.
27
-
28
- ## Reusable workspace files
29
-
30
- ```ts
31
- import { File } from "@aexhq/sdk";
32
-
33
- const source = await aex.workspace.files.publish(
34
- await File.fromPath("./data/input.csv", { mountPath: "/workspace/input" })
35
- );
36
-
37
- const session = await aex.sessions.create({
38
- model: "anthropic/claude-haiku-4-5",
39
- assets: { files: [source] },
40
- });
41
- ```
42
-
43
- `publish()` uploads immutable bytes, then creates or versions the workspace
44
- resource. `list()`, `get(resourceId, version?)`, and `delete(resourceId)` manage
45
- the catalog. Runs always receive pinned refs; they never resolve a mutable
46
- "latest" version during execution.
47
-
48
- As a run boots, each attached input archive is checked against a separate
49
- runtime materialization envelope: at most 16 MiB compressed, 128 MiB expanded,
50
- and 1,000 materialized files or safe symlinks. The runtime may overlap bulk skill extraction with
51
- the first model call, but it blocks the first tool, any post-run hook, and run
52
- completion until every promised input is ready. These execution-safety bounds
53
- are distinct from the broader raw-asset storage quota. The SDK and workspace
54
- publisher reject known violations before a resource can be pinned, and the
55
- runtime revalidates the immutable archive before use. An invalid input fails explicitly;
56
- tools and terminal results never observe a silently partial input tree.
57
-
58
- ## Session file snapshots
59
-
60
- ```ts
61
- const result = await session.messages.send("Create reports/summary.md").finished();
62
- const snapshot = await session.files.list({
63
- checkpointId: result.checkpoint?.checkpointId
64
- });
65
-
66
- console.log(snapshot.revision);
67
- console.log(snapshot.files);
68
- ```
69
-
70
- `SessionFilesSnapshot` contains both `revision` and `files`. Every file carries
71
- the same `checkpointId` as the revision, plus its exact `sizeBytes` and
72
- lowercase `sha256` digest. After `RUN_FINISHED`, this is the final committed
73
- state for that run. During an active run, an older complete checkpoint may
74
- still be visible.
75
-
76
- ## Find and read
77
-
78
- ```ts
79
- const report = await session.files.findOne({
80
- filename: "summary.md",
81
- extension: "md"
82
- });
83
-
84
- if (report) {
85
- const preview = await session.files.read(report, { maxBytes: 50_000 });
86
- console.log(preview.text, preview.truncated);
87
- }
88
- ```
89
-
90
- Use `list(query?)`, `find(query)`, or `findOne(query)`. Cross-session file
91
- search is not part of the public SDK. Open the owning session and query its
92
- checkpoint instead.
93
-
94
- ## Download and links
95
-
96
- ```ts
97
- const file = snapshot.files[0];
98
- if (file) {
99
- const bytes = await session.files.download(file);
100
- const link = await session.files.link(file, { expiresIn: "15m" });
101
- const response = await session.files.fetch(file);
102
- }
103
- ```
104
-
105
- ID selectors must include their checkpoint:
106
-
107
- ```ts
108
- await session.files.download({ id: "file_123", checkpointId: "cp_123" });
109
- ```
110
-
111
- A string ID alone is intentionally rejected because an ID without a revision
112
- can resolve inconsistently after a later run.
113
-
114
- `download()` resolves the selector against that checkpoint and verifies both
115
- the byte length and SHA-256 digest before returning. An integrity mismatch
116
- fails immediately and is not retried. `read()` remains a bounded prefix read
117
- for large files and verifies integrity when it consumes the complete file.
118
- `link()` returns the resolved file metadata alongside the direct storage URL;
119
- `fetch()` returns only the raw one-shot storage `Response`, so retain metadata
120
- from `list()`, `findOne()`, or `link()` when independently verifying that stream.
121
-
122
- Omit the selector from `session.files.download()` to download the files
123
- namespace archive. `session.download()` returns the complete public session
124
- archive containing metadata, events, and files.
125
-
126
- ## Failed runs
127
-
128
- A `RUN_ERROR` can occur before any checkpoint exists. In that case the result
129
- has `files: []` and `checkpoint === undefined`. A `RUN_FINISHED` without a
130
- checkpoint is a contract error and the SDK fails loudly.
@@ -1,114 +0,0 @@
1
- ---
2
- title: Limits & quotas
3
- ---
4
-
5
- # Limits & quotas
6
-
7
- These public ceilings bound a session, workspace, or request. Defaults that
8
- apply when you omit an option are also summarized in [Defaults](defaults.md).
9
- Your workspace's effective adjustable limits are available from `aex.whoami()`
10
- (CLI: `aex whoami`); contact support when a documented limit is adjustable but
11
- your workspace needs a higher value.
12
-
13
- ## Session scope
14
-
15
- | Limit | Value | Adjustable? |
16
- | --- | --- | --- |
17
- | Session timeout | 1 minute minimum; 8 hours maximum and default | Per session with `overrides.timeout` |
18
- | Per-call exec timeout | 30 minutes by default | Per tool call with `timeoutMs` |
19
- | MCP connect timeout | 30 seconds by default | Per MCP server with `connectTimeoutMs` |
20
- | MCP call timeout | 30 minutes by default | Per MCP server with `callTimeoutMs` |
21
- | Per-session spend cap | None by default | Per session with `overrides.maxSpendUsd` |
22
- | Agent iterations | 20 by default; 200 maximum | Per session with `overrides.maxTurns` |
23
-
24
- ### SessionFile capture
25
-
26
- When a capture cap is reached, remaining files are dropped and counted in the
27
- capture summary.
28
-
29
- | Limit | Value |
30
- | --- | --- |
31
- | Capture wall-clock budget | 1 hour |
32
- | Files captured | 50,000 maximum |
33
- | Bytes per captured file | 500 GB (decimal) maximum |
34
- | Total captured bytes | 500 GB (decimal) maximum |
35
-
36
- These two bound a single session's capture. They are not a workspace storage
37
- cap — see [Workspace scope](#workspace-scope) for what actually bounds stored
38
- bytes.
39
-
40
- ### Tool output
41
-
42
- | Limit | Value | Adjustable? |
43
- | --- | --- | --- |
44
- | `web_fetch` returned body | 500 KB (UTF-8) by default | Per call with `max_bytes` |
45
- | `bash_output` per-read body | 1 MB (UTF-8) | No |
46
- | `grep` maximum file size | 25 MB; use `bash grep` for larger files | No |
47
- | `head`/`tail` maximum file size | 100 MB; use the equivalent shell commands for larger files | No |
48
- | `grep`/`glob` files visited per recursive walk | 100,000, then the result is truncated with a notice | No |
49
-
50
- ### Attached archives
51
-
52
- An archive that exceeds any of these bounds is rejected before its contents are
53
- available to session code; a partial archive is never exposed.
54
-
55
- | Limit | Value |
56
- | --- | --- |
57
- | Compressed archive bytes | 16 MiB maximum |
58
- | Expanded archive bytes | 128 MiB maximum |
59
- | Materialized files and safe symlinks | 1,000 maximum per archive |
60
- | Fidelity metadata | 8 MiB maximum |
61
- | Planned entries across attached workspace-file archives | 10,000 maximum |
62
-
63
- ### Subagents
64
-
65
- Subagent breadth and depth use managed budgets rather than fixed numeric
66
- entitlements. The service supports high recursive depth and workloads ranging
67
- to hundreds or thousands of live child agents, subject to admission at spawn
68
- time. Contact support before relying on unusually large fan-out.
69
-
70
- ## Managed runtime
71
-
72
- - Only `/workspace` persists across turns of the same session. Everything else
73
- is reset between turns and removed when the session ends.
74
- - Declare OS and language packages with `environment.packages`. Packages
75
- installed ad hoc during a turn are best-effort and do not persist to the next
76
- turn. Python environments may enforce PEP 668; prefer declared packages or a
77
- virtual environment under `/workspace`.
78
- - The selected runtime preset's `memoryMb` is the memory ceiling. See the public
79
- [`runtime-sizes.ts`](https://github.com/aexhq/aex/blob/main/packages/contracts/src/runtime-sizes.ts)
80
- definitions and [Defaults](defaults.md).
81
- - `overrides.maxTurns` controls the agent-loop limit (20 by default, 200
82
- maximum).
83
-
84
- ## Workspace scope
85
-
86
- Stored bytes are bounded by your plan's monthly storage grant, not by a fixed
87
- per-workspace number. The Free plan includes 5 GB. An upload that cannot be
88
- paid for is refused at admission with `quota_exhausted` (HTTP 409) and a
89
- remedy telling you which of the two options applies: upgrade the plan, or add
90
- a payment method and enable overage. Paid plans with overage enabled are not
91
- refused; the usage is billed.
92
-
93
- Use `aex.whoami()` to read the effective concurrency and submission limits
94
- attached to the current workspace. Stable admission errors include
95
- `quota_exhausted`, `workspace_concurrency_exceeded` and
96
- `workspace_submit_rate_exceeded`.
97
-
98
- | Limit | Value | Adjustable? |
99
- | --- | --- | --- |
100
- | Runtime asset archive | 16 MiB compressed, 128 MiB expanded, 1,000 materialized entries | No |
101
- | Skill bundle directory depth | 16 | Contact support |
102
- | Skill bundle entry path | 512 characters | No |
103
- | `File.mountPath` | 512 characters | No |
104
-
105
- `File.mountPath` names a directory, not a destination filename. The attached
106
- file retains its source/archive filename below that directory; see
107
- [Files](files.md).
108
-
109
- ## Request scope
110
-
111
- | Limit | Value | Adjustable? |
112
- | --- | --- | --- |
113
- | Signed file URL TTL | 300 seconds at the API layer | Per call with `expiresSeconds` |
114
- | Event-stream connection ticket TTL | 60 seconds | Per mint with `ttlMs` |
package/docs/limits.md DELETED
@@ -1,51 +0,0 @@
1
- ---
2
- title: Limits
3
- ---
4
-
5
- # Limits
6
-
7
- aex sessions autonomous agents on the hosted managed runtime. The SDK opens durable
8
- sessions, sends turns, streams events, captures files, and exposes auth-gated
9
- reads and downloads.
10
-
11
- For what the product supports, see [Features](https://aex.dev/docs/features/).
12
- For the current provider/model set, see the generated
13
- [provider/runtime capability matrix](provider-runtime-capabilities.md).
14
-
15
- ## Current Defaults
16
-
17
- | Area | Default |
18
- | --- | --- |
19
- | Workspace storage | Bounded by the plan's monthly storage grant (Free: 5 GB); paid plans bill beyond the allowance once overage is enabled. |
20
-
21
- ## Product Boundaries
22
-
23
- | Area | Boundary |
24
- | --- | --- |
25
- | Runtime | New submissions run on a managed runtime. `runtime.kind` selects `spot_container` (the default), `container`, or `lambda`; `runtime.size` selects a managed machine-size preset (`Sizes.*`). Both fields are optional. Runtimes differ in capability and delivery semantics, not only in price — each publishes a profile at `whoami().runtimeCapabilities.profilesByRuntimeKind`, and a submission exceeding the selected profile is refused before execution. See [Models & runtimes](../concepts/providers-and-runtimes.md). |
26
- | Single effect | One atomic LLM call or tool call runs for at most 14 minutes on every runtime (`profile.limits.maxSingleEffectMs`). On `lambda` the live budget may be shorter, bounded by the remaining invocation time. An overrun fails that call with a typed error. |
27
- | Provider policy | Provider retention, training exclusion, HIPAA/BAA, data residency, abuse policy, and pricing belong to the selected provider account, endpoint, and contract. |
28
- | Secrets | Provider keys, MCP credentials, and environment secrets are caller-owned. aex excludes secret values from idempotency and uses the explicit secret surfaces described in [Secrets](secrets.md). |
29
- | MCP servers | Remote MCP servers are customer-trusted systems. aex validates declarations and routes credentials; it does not make an untrusted MCP server safe. |
30
- | Files | Captured files, events, and metadata are stored under the session record and downloaded through auth-gated routes. SessionFile content is customer content. |
31
- | Human review | Sessions execute after submission. Cancellation is available, but aex does not pause a session for platform-mediated approval or interactive clarification. |
32
- | Sessions | The durable product primitive is the session record. Sessions can be resumed by id and auto-suspend after the configured idle window; persistent named agent profiles and saved agent definitions are out of scope. |
33
- | Hosting | The SDK and CLI connect to the hosted aex API. `baseUrl` may also target the localhost development stack; self-hosting is not supported. |
34
- | Model cost | Model tokens are served through the platform's managed gateway and billed by aex as a usage dimension on the run. Finished results report the cost and provider usage recorded for that run. |
35
-
36
- ## Provider Policy Links
37
-
38
- These links are starting points for provider-owned policy areas; they do not
39
- create aex guarantees.
40
-
41
- - Anthropic API data retention policy: <https://platform.claude.com/docs/en/manage-claude/api-and-data-retention>
42
- - OpenAI API data controls: <https://platform.openai.com/docs/guides/your-data>
43
- - Mistral privacy and API data handling: <https://docs.mistral.ai/admin/security-access/privacy>
44
- - Gemini API data handling: <https://ai.google.dev/gemini-api/docs/logs-policy>
45
-
46
- ## Unsupported Claims
47
-
48
- Do not describe aex as providing self-hosting, provider-wide retention,
49
- HIPAA/BAA or data-residency guarantees, a general-purpose sandbox for every
50
- downstream service, human-in-the-loop approval checkpoints, or persistent agent
51
- identity.
package/docs/mcp.md DELETED
@@ -1,47 +0,0 @@
1
- ---
2
- title: MCP
3
- ---
4
-
5
- # MCP
6
-
7
- MCP support is remote HTTPS/SSE only. Stdio MCP servers are rejected because aex is a remote session dispatcher, not a local process supervisor.
8
-
9
- Rules:
10
-
11
- - MCP servers are declared in the session request config (`mcpServers`).
12
- - Runtime HITL is disabled.
13
- - Tool policy must be configured before session start.
14
- - Enabled MCP tools use `always_allow` provider permissions.
15
- - `always_ask` is not used by aex MVP.
16
- - Bearer/OAuth-style auth is carried by the `McpServer` instance (its `headers`); the SDK splits it into the vaulted secrets channel server-side.
17
-
18
- Use allowlists for sensitive servers whenever possible.
19
-
20
- ## Large-payload responses
21
-
22
- aex is a session dispatcher, not an MCP runtime. We intentionally do
23
- **not** interpose on the transport between the model and an upstream MCP
24
- server, so we cannot elide MCP responses or write them to the session
25
- filesystem on the user's behalf. Anything an MCP tool returns lands
26
- directly in the model's context.
27
-
28
- For ingestion-style MCP servers that return large JSON blobs (search results,
29
- catalogue dumps, bulk reads), prefer a skill that writes files instead of
30
- putting the whole response in model context:
31
-
32
- 1. Package the upstream helper as a Skill (`Skill.fromDir` / `Skill.fromUrl`)
33
- and pass it via the top-level `skills` option. The skill can include a CLI
34
- binary or script that the agent invokes with its bash tool.
35
- 2. Keep any upstream HTTPS credentials in `environment.secrets`.
36
- 3. Have the CLI write the full payload to the session filesystem. By default,
37
- files it creates or modifies are captured automatically; pass
38
- `fileCapture.allowedDirs` only when you want to narrow capture to specific roots.
39
- Return only a small handle (path, item count, summary) to the model.
40
-
41
- The agent sees the handle in context; the bytes ride out through
42
- `download()` as normal captured files.
43
-
44
- If you genuinely want everything in context (small responses, code
45
- search, etc.), use MCP. If the payload would blow your context budget,
46
- the CLI-as-skill pattern is the supported answer — there is no platform
47
- flag to elide MCP responses.
@@ -1,114 +0,0 @@
1
- ---
2
- title: Networking
3
- ---
4
-
5
- # Networking
6
-
7
- Session networking is managed by aex. Your code can make ordinary outbound HTTP
8
- requests, subject to the session's `environment.networking` policy and the
9
- service-wide safety boundary. Private, loopback, link-local, and otherwise
10
- unsafe destinations remain blocked.
11
-
12
- `environment.networking` has two modes:
13
-
14
- - `open` is the default and does not require a per-session allowlist.
15
- - `limited` restricts supported outbound HTTP clients to the hosts you list in
16
- `allowedHosts`.
17
-
18
- `allowedHosts` is a useful least-privilege control and an auditable statement of
19
- intent. It is not a security boundary against adversarial code executing inside
20
- the session; low-level networking that bypasses supported HTTP client behavior
21
- may fail and remains subject to the service-wide egress policy.
22
-
23
- ## Paths that always work
24
-
25
- These managed capabilities are not subject to `environment.networking`, so you
26
- do not list their hosts:
27
-
28
- - The model/provider call for the session and its subagents.
29
- - The built-in `web_search` and `web_fetch` tools.
30
- - Remote MCP servers declared in `mcpServers`; see [MCP](mcp.md).
31
- - Package registries used by packages declared in `environment.packages`.
32
-
33
- `environment.networking` governs other outbound requests made by your code,
34
- such as `curl` in the `bash` tool, Python `requests`, Node `fetch`, or a
35
- third-party SDK.
36
-
37
- ## Restrict a session to an allowlist
38
-
39
- Set `mode: "limited"` and list the hosts your code needs. A supported HTTP
40
- client is refused when it requests a host that is neither listed nor covered by
41
- one of the managed capabilities above. Package registries implied by
42
- `environment.packages` are allowed automatically.
43
-
44
- ### TypeScript
45
-
46
- ```ts
47
- import { Aex } from "@aexhq/sdk";
48
-
49
- const aex = new Aex({ apiKey: process.env.AEX_API_KEY! });
50
-
51
- await aex.start({
52
- model: "anthropic/claude-haiku-4-5",
53
- message: "Fetch the public status page and summarize it.",
54
- environment: {
55
- networking: {
56
- mode: "limited",
57
- allowedHosts: ["api.example.com", "status.example.com"]
58
- }
59
- },
60
- });
61
- ```
62
-
63
- `allowedHosts` entries are lowercased host names such as `api.example.com`.
64
- Include a non-default port when needed (`api.example.com:8443`); a bare host
65
- covers HTTPS on port 443. Matching is exact, not wildcard or suffix based, so
66
- list each required host.
67
-
68
- Keep the allowlist in your session options so the network policy stays next to
69
- the code that needs it.
70
-
71
- ## Open mode
72
-
73
- A session that omits `environment.networking` uses `open` mode. Set
74
- `mode: "open"` explicitly when you want that choice visible in configuration.
75
- Open mode removes the per-session allowlist, but the service-wide safety
76
- boundary still applies.
77
-
78
- ```ts
79
- await aex.start({
80
- model: "anthropic/claude-haiku-4-5",
81
- message: "Research the topic across the open web.",
82
- environment: { networking: { mode: "open" } },
83
- });
84
- ```
85
-
86
- Built-in web research uses the managed `web_search` and `web_fetch` tools and
87
- does not require an allowlist entry.
88
-
89
- ## Ordinary HTTP clients work without extra setup
90
-
91
- Use normal HTTP clients without configuring a per-request proxy or installing a
92
- custom certificate. For example, in a limited session that allows
93
- `api.example.com`:
94
-
95
- ```bash
96
- curl -sS https://api.example.com/v1/status # works
97
- curl -sS https://other-host.example # refused (not in allowlist)
98
- ```
99
-
100
- Clients that override standard network or certificate behavior, or use a
101
- non-HTTP protocol, may fail even for a listed host. Let the client use its
102
- normal defaults whenever possible.
103
-
104
- ## Limitations
105
-
106
- - `allowedHosts` applies only in `limited` mode.
107
- - A listed host can still be unavailable under the service-wide safety policy.
108
- - Exact host matching means subdomains must be listed separately.
109
- - Contact support when a required public host is unavailable.
110
-
111
- For credentialed HTTP calls, pass the credential through
112
- `environment.secrets` and let your code use its normal HTTP client. For remote
113
- tool servers, see [MCP](mcp.md). For all session configuration fields, see
114
- [Session configuration](session-config.md).
@@ -1,32 +0,0 @@
1
- ---
2
- title: Model access
3
- ---
4
-
5
- # Model access
6
-
7
- Generated from `packages/contracts/src/models.ts`.
8
-
9
- Regenerate with `bun run capabilities:generate`; check with `bun run capabilities:check`.
10
-
11
- Aex routes every model through the managed Vercel AI Gateway. You name a model
12
- by its gateway `creator/model` **slug** and the platform's single managed key
13
- handles the upstream provider relationship — you never supply a provider API
14
- key, and there is no `provider` field.
15
-
16
- ## Model ids are gateway slugs
17
-
18
- - A model id is a `creator/model` slug string, validated at the boundary by `parseModelSlug` against `^[a-z0-9-]+\/[A-Za-z0-9._:-]+$` (lowercase creator, then `/`, then the model segment).
19
- - Examples: `anthropic/claude-haiku-4-5`, `anthropic/claude-sonnet-4-6`, `deepseek/deepseek-v4-flash`, `openai/gpt-4.1`, `google/gemini-2.5-flash`.
20
- - The catalog is OPEN: adding a model the gateway serves needs zero code — a well-formed slug just works. A slug this SDK does not recognize is still accepted at the boundary and arbitrated by the gateway at submit time; a truly unknown model fails there.
21
-
22
- ## Streaming
23
-
24
- `outputMode: "stream"` is honored for ALL models — every model streams through the gateway. There is no per-model streaming-capability gate.
25
-
26
- ## Skills
27
-
28
- Skills are supplied through the top-level `skills` option. Build one with `Skill.fromDir`, `Skill.fromUrl`, `Skill.fromFiles`, `Skill.fromContent`, or `Skill.fromBytes`; each normalizes to a named workspace skill that the platform snapshots into durable session asset storage.
29
-
30
- ## Runtime selection is independent of model
31
-
32
- Runtime selection is independent of the model: `runtime.kind` accepts `container`, `spot_container`, or `lambda`; `runtime.size` accepts the managed size presets.