@aexhq/sdk 0.50.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,37 +1,70 @@
1
1
  # @aexhq/sdk
2
2
 
3
- The TypeScript SDK for explicit aex v1 sessions.
3
+ The zero-dependency TypeScript SDK for AEX sessions.
4
4
 
5
5
  ```bash
6
6
  npm i @aexhq/sdk
7
7
  ```
8
8
 
9
9
  ```ts
10
- import { Aex } from "@aexhq/sdk";
10
+ import { Aex, assertId, newId } from "@aexhq/sdk";
11
11
 
12
12
  const aex = new Aex(process.env.AEX_WORKSPACE_API_KEY!);
13
- const runs = await aex.sessions.sessionRunsList({ sessionId: "ses_…" });
14
- console.log(runs);
13
+
14
+ const session = await aex.sessions.sessionCreate({
15
+ body: {
16
+ provider: "openai",
17
+ model: process.env.AEX_MODEL!,
18
+ providerCredentialId: assertId(
19
+ "provider_credential",
20
+ process.env.AEX_PROVIDER_CREDENTIAL_ID,
21
+ ),
22
+ },
23
+ idempotencyKey: crypto.randomUUID(),
24
+ });
25
+
26
+ await aex.sessions.sessionMessageSend({
27
+ sessionId: session.id,
28
+ body: { text: "Inspect the tests and summarize the failures." },
29
+ idempotencyKey: crypto.randomUUID(),
30
+ });
31
+
32
+ await aex.sessions.sessionSuspend({
33
+ sessionId: session.id,
34
+ body: {},
35
+ operationId: newId("operation"),
36
+ });
15
37
  ```
16
38
 
17
- The SDK exposes explicit bootstrap resources (`account`, `organizations`,
18
- `workspaces`, `apiKeys`, and `billing`) and region-pinned workspace resources
19
- (`sessions`, operations, files, registries, secrets, approvals, telemetry, and
20
- usage). Long-running mutations return durable operation handles.
21
-
22
- Every resource method is generated from the published contract, one per
23
- operation the platform serves. An operation the contract declares and nothing
24
- serves yet has **no method**: a method that could only ever fail would put the
25
- platform's answer in the client, where it goes stale the day the route lands.
26
- `ROUTES` still carries all of them with a `deferred` flag, and
27
- `aex.execute(routeId, …)` stays total over every route id, so a deferred
28
- operation remains callable by anyone who wants to see the `501` for themselves.
29
-
30
- The SDK exposes only the strict v1 resource model. Registered inputs are
31
- overwrite-by-name resources whose PUT result reports `created`, `replaced`, or
32
- `unchanged`. Returned byte-bearing values contain checksum/size descriptors,
33
- never inline bytes or upload IDs. Persisted/live file reads, current registered
34
- file downloads, and telemetry exports remain explicit.
39
+ The session is the customer-facing execution unit. It accepts one text message
40
+ at a time and can accept another after the current activity finishes or is
41
+ cancelled. There is no public run resource. One exact provider generation lasts
42
+ at most eight hours from launch, suspends automatically after 180 idle seconds,
43
+ and resumes for the next message or live-file request. Suspension never extends
44
+ the lifetime, and runtime loss terminates the session instead of restoring an
45
+ ambiguous partial activity.
46
+
47
+ The SDK exposes generated resource clients for bootstrap, organizations,
48
+ workspaces, API keys, billing, dedicated BYOK provider credentials, registered
49
+ workspace files, sessions and messages, live files, observations, telemetry
50
+ exports, operations, and usage. Every resource method is generated from the
51
+ published contract. `ROUTES` and `aex.execute(...)` expose that same current
52
+ route set without maintaining a second handwritten table.
53
+
54
+ Registered workspace files are durable opaque inputs. A session pins selected
55
+ file revisions at creation and materializes them into its MicroVM. Files created
56
+ inside the session are generation-local: termination or runtime loss destroys
57
+ them. The `@aexhq/sdk/node/session-files` entry provides bounded, resumable,
58
+ digest-verified upload and download helpers for those live files.
59
+
60
+ Launch has no generic secret vault, typed skill/tool/instruction/MCP registries,
61
+ interactive tool approvals, session snapshots, persistence, clone/fork, trash,
62
+ or restore surface. Provider keys use the dedicated write-only BYOK authority.
63
+ The built-in model tools are exactly `read_file`, `edit_file`, `write_file`, and
64
+ Bash; guidance and configuration can be supplied as opaque workspace files.
65
+
66
+ Telemetry and telemetry exports are durable even though live session files and
67
+ execution state are not.
35
68
 
36
69
  The native `aex` command is distributed as a signed platform archive.
37
70
 
@@ -3,6 +3,7 @@ import { resolveCentralBaseUrl, resolveRegionalBaseUrl } from "./routing.js";
3
3
  import { FetchTransport } from "../transport/transport.js";
4
4
  import { CONTRACT_DIGEST, ROUTES } from "../generated/routes.js";
5
5
  import { GeneratedResources } from "../generated/resources.js";
6
+ const SDK_VERSION = "0.51.0";
6
7
  /**
7
8
  * The client.
8
9
  *
@@ -44,8 +45,8 @@ export class Aex extends GeneratedResources {
44
45
  path = `${path}?${query}`;
45
46
  const headers = new Headers({
46
47
  authorization: this.#credential.authorizationHeader(),
47
- accept: "application/json",
48
- "Aex-Client": "aex-sdk/0.50.0",
48
+ accept: route.transport === "binary" ? "application/octet-stream" : "application/json",
49
+ "Aex-Client": `aex-sdk/${SDK_VERSION}`,
49
50
  });
50
51
  if (options.idempotencyKey)
51
52
  headers.set("Idempotency-Key", options.idempotencyKey);
@@ -53,8 +54,17 @@ export class Aex extends GeneratedResources {
53
54
  headers.set("Aex-Operation-Id", options.operationId);
54
55
  let bytes;
55
56
  if (options.body !== undefined) {
56
- headers.set("content-type", "application/json");
57
- bytes = encodeCanonicalJson(options.body);
57
+ if (route.bodyClass === "binary") {
58
+ if (!(options.body instanceof Uint8Array)) {
59
+ throw new TypeError(`binary route ${routeId} requires a Uint8Array body`);
60
+ }
61
+ headers.set("content-type", "application/octet-stream");
62
+ bytes = options.body;
63
+ }
64
+ else {
65
+ headers.set("content-type", "application/json");
66
+ bytes = encodeCanonicalJson(options.body);
67
+ }
58
68
  }
59
69
  const request = {
60
70
  routeId,
@@ -68,7 +78,7 @@ export class Aex extends GeneratedResources {
68
78
  return response.body;
69
79
  }
70
80
  static buildInfo() {
71
- return Object.freeze({ packageVersion: "0.50.0", contractDigest: CONTRACT_DIGEST, sourceSha: "development" });
81
+ return Object.freeze({ packageVersion: SDK_VERSION, contractDigest: CONTRACT_DIGEST, sourceSha: "development" });
72
82
  }
73
83
  }
74
84
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"aex.js","sourceRoot":"","sources":["../../src/client/aex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aex.js","sourceRoot":"","sources":["../../src/client/aex.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,9 @@
1
+ import type { DownloadGrant as ContractDownloadGrant } from "../generated/models.js";
1
2
  export interface DownloadRange {
2
3
  readonly start: number;
3
4
  readonly endExclusive: number;
4
5
  }
5
- export interface DownloadGrant {
6
- readonly url: string;
7
- readonly headers?: Readonly<Record<string, string>>;
8
- readonly expiresAt: string;
9
- readonly sizeBytes: number;
10
- readonly authorizedBytes: number;
11
- readonly measurementId: string;
12
- readonly sha256: string;
13
- }
6
+ export type DownloadGrant = ContractDownloadGrant;
14
7
  export declare const MAX_SINGLE_GET_BYTES = 5000000000000;
15
8
  type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
16
9
  export declare function planDownloadRanges(sizeBytes: number, selected?: DownloadRange): readonly DownloadRange[];
@@ -29,19 +29,23 @@ export class Download {
29
29
  if (Date.parse(this.grant.expiresAt) <= Date.now()) {
30
30
  throw new AexConfigError("download grant expired");
31
31
  }
32
+ const sizeBytes = parseCanonicalBytes(this.grant.sizeBytes, "sizeBytes");
33
+ const authorizedBytes = parseCanonicalBytes(this.grant.authorizedBytes, "authorizedBytes");
34
+ if (authorizedBytes > sizeBytes) {
35
+ throw new AexConfigError("download grant authorizes more bytes than the object contains");
36
+ }
32
37
  const response = await this.#fetch(this.grant.url, {
33
- ...(this.grant.headers ? { headers: this.grant.headers } : {}),
34
38
  redirect: "error",
35
39
  });
36
40
  if (!response.ok)
37
41
  throw new AexConfigError(`download failed with status ${response.status}`);
38
42
  const bytes = new Uint8Array(await response.arrayBuffer());
39
- if (bytes.byteLength !== this.grant.authorizedBytes) {
40
- throw new AexConfigError(`download length mismatch: expected ${this.grant.authorizedBytes}, received ${bytes.byteLength}`);
43
+ if (bytes.byteLength !== authorizedBytes) {
44
+ throw new AexConfigError(`download length mismatch: expected ${authorizedBytes}, received ${bytes.byteLength}`);
41
45
  }
42
- if (this.grant.authorizedBytes === this.grant.sizeBytes) {
46
+ if (authorizedBytes === sizeBytes) {
43
47
  const digest = await crypto.subtle.digest("SHA-256", bytes);
44
- const actual = Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, "0")).join("");
48
+ const actual = `sha256:${Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, "0")).join("")}`;
45
49
  if (actual !== this.grant.sha256)
46
50
  throw new AexConfigError("download digest mismatch");
47
51
  }
@@ -50,4 +54,14 @@ export class Download {
50
54
  async text() { return new TextDecoder().decode(await this.bytes()); }
51
55
  async json() { return JSON.parse(await this.text()); }
52
56
  }
57
+ function parseCanonicalBytes(value, field) {
58
+ if (!/^(0|[1-9][0-9]*)$/.test(value)) {
59
+ throw new AexConfigError(`download grant ${field} is not a canonical decimal`);
60
+ }
61
+ const parsed = Number(value);
62
+ if (!Number.isSafeInteger(parsed)) {
63
+ throw new AexConfigError(`download grant ${field} exceeds SDK precision`);
64
+ }
65
+ return parsed;
66
+ }
53
67
  //# sourceMappingURL=download.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/downloads/download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/downloads/download.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // @generated by aex-contract-gen; DO NOT EDIT.
2
- // Contract digest: sha256:20d11fdca3dff3d75d7502a60456949b23e16df9094593f0c3f619368ab2218e
2
+ // Contract digest: sha256:dddf87f6715de38e24d77e348f34f1d066254b797719a09a995d660373335a66
3
3
  export const ERROR_METADATA = Object.freeze({
4
4
  unauthenticated: { class: "auth" },
5
5
  forbidden: { class: "auth" },
@@ -25,6 +25,7 @@ export const ERROR_METADATA = Object.freeze({
25
25
  payload_too_large: { class: "validation" },
26
26
  limit_exceeded: { class: "quota" },
27
27
  session_not_idle: { class: "state" },
28
+ session_terminated: { class: "state" },
28
29
  workspace_activation_required: { class: "state" },
29
30
  workspace_not_live: { class: "state" },
30
31
  session_deleting: { class: "state" },
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/generated/errors.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,2FAA2F;AAsB3F,MAAM,CAAC,MAAM,cAAc,GACzB,MAAM,CAAC,MAAM,CAAC;IACZ,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAC5B,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IACrC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACzC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7B,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACjC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IAC5B,oBAAoB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAC3C,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAC5C,0BAA0B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACjD,8BAA8B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACrD,eAAe,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACxC,aAAa,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACtC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACvC,sBAAsB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/C,aAAa,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACtC,sBAAsB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/C,iBAAiB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC1C,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACpC,6BAA6B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACjD,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACpC,eAAe,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACvC,oBAAoB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAC3C,iBAAiB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,mBAAmB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACvC,wBAAwB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5C,kBAAkB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1C,yBAAyB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAChD,wBAAwB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAC/C,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACtC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,gBAAgB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACxC,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACpC,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACtC,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACtC,eAAe,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACzC,sBAAsB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IAC9C,2BAA2B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACpD,iBAAiB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC1C,wBAAwB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5C,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACxC,yBAAyB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAClD,aAAa,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACtC,gCAAgC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACpD,0BAA0B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACnD,sBAAsB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/C,6BAA6B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACtD,yBAAyB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7C,4BAA4B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAChD,0BAA0B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9C,gBAAgB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACzC,aAAa,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IACtC,0BAA0B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9C,6BAA6B,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACrD,2BAA2B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/C,yBAAyB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAClD,uBAAuB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3C,0BAA0B,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACpD,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,yBAAyB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACnD,mBAAmB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;IAC9C,sBAAsB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IAC7C,yBAAyB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACnD,iBAAiB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IAC3C,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,cAAc,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACxC,2BAA2B,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACrD,sBAAsB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IAChD,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;CACtC,CAAC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/generated/errors.ts"],"names":[],"mappings":"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"}