@shardflux/sdk 0.13.1 → 0.15.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.
@@ -125,8 +125,8 @@ export interface paths {
125
125
  cookie?: never;
126
126
  };
127
127
  /**
128
- * Public keys (JWKS) for verifying ES256 workspace tool tokens
129
- * @description Consumed by the cell gateway. Tokens carry `kid`; TTL <= 15 min.
128
+ * Public keys (JWKS) for verifying ES256 workspace tool tokens and port tokens
129
+ * @description Consumed by the cell gateway. Tokens carry `kid`. Tool tokens live at most 15 min; port tokens (`sfp_` + JWS, aud shardflux-ports, contracts §39.3) at most 1 day (bearer) or 7 days (link): keep a rotated-out key in TOOL_TOKEN_KMS_VERIFY_KEYS for 7 days.
130
130
  */
131
131
  get: operations["getV1WellKnownToolTokenKeys"];
132
132
  put?: never;
@@ -602,6 +602,46 @@ export interface paths {
602
602
  patch?: never;
603
603
  trace?: never;
604
604
  };
605
+ "/v1/auth/signup": {
606
+ parameters: {
607
+ query?: never;
608
+ header?: never;
609
+ path?: never;
610
+ cookie?: never;
611
+ };
612
+ get?: never;
613
+ put?: never;
614
+ /**
615
+ * Sign up from an agent, without a browser or an email round-trip
616
+ * @description Returns a CLI session at once. With `codex_id_token` (a Codex CLI login, contracts §44.2) the email is verified and the request signs in to the account of that ChatGPT identity or email, creating it when there is none (201 when created, 200 when it signed in; `mfa_required` when the account has TOTP). With `email` only, a new unverified account is created (201) with `access: provisional` (resource routes on the default plan before verification) or `verification_required`; an address that already has an account is 409 conflict, details.reason `email_registered`. Verify later with POST /v1/auth/verify-email/code.
617
+ */
618
+ post: operations["postV1AuthSignup"];
619
+ delete?: never;
620
+ options?: never;
621
+ head?: never;
622
+ patch?: never;
623
+ trace?: never;
624
+ };
625
+ "/v1/auth/verify-email/code": {
626
+ parameters: {
627
+ query?: never;
628
+ header?: never;
629
+ path?: never;
630
+ cookie?: never;
631
+ };
632
+ get?: never;
633
+ put?: never;
634
+ /**
635
+ * Verify the email with a 6-digit code
636
+ * @description Without `code`: emails a 6-digit code to the account address (202; valid 15 minutes, once; a new one ends the previous). With `code`: verifies the address (200). The code proves that whoever holds this session reads the inbox, so nothing is signed out; the signup trial is granted when it applies. 5 wrong attempts end a code: 400 token_invalid.
637
+ */
638
+ post: operations["postV1AuthVerifyEmailCode"];
639
+ delete?: never;
640
+ options?: never;
641
+ head?: never;
642
+ patch?: never;
643
+ trace?: never;
644
+ };
605
645
  "/v1/auth/login": {
606
646
  parameters: {
607
647
  query?: never;
@@ -724,7 +764,7 @@ export interface paths {
724
764
  put?: never;
725
765
  /**
726
766
  * Re-authenticate for sensitive actions
727
- * @description Password, plus a TOTP or recovery code when MFA is enabled. Rotates the session; valid for STEP_UP_WINDOW_SECONDS.
767
+ * @description Password, or a Codex identity proof (`codex_id_token`) of a Codex login linked to the account (contracts §44.2), plus a TOTP or recovery code when MFA is enabled. Rotates the session; valid for STEP_UP_WINDOW_SECONDS.
728
768
  */
729
769
  post: operations["postV1AuthStepUp"];
730
770
  delete?: never;
@@ -1493,6 +1533,26 @@ export interface paths {
1493
1533
  patch?: never;
1494
1534
  trace?: never;
1495
1535
  };
1536
+ "/v1/workspaces/{workspace_id}/computer-use": {
1537
+ parameters: {
1538
+ query?: never;
1539
+ header?: never;
1540
+ path?: never;
1541
+ cookie?: never;
1542
+ };
1543
+ get?: never;
1544
+ /**
1545
+ * Switch computer use on or off for the workspace (contracts §45.1)
1546
+ * @description enabled: true or false overrides the template’s switch; null follows it. While computer use is on, tool tokens carry the computer tool and the workspace desktop starts on the first computer call. Takes effect on the next tool token. 409 computer_use_unavailable when the workspace’s template version cannot run a desktop, 409 not_supported_for_mode for file-first workspaces (§29), 409 workspace_deleted. Returns the switch.
1547
+ */
1548
+ put: operations["putV1WorkspacesWorkspaceIdComputerUse"];
1549
+ post?: never;
1550
+ delete?: never;
1551
+ options?: never;
1552
+ head?: never;
1553
+ patch?: never;
1554
+ trace?: never;
1555
+ };
1496
1556
  "/v1/workspaces/{workspace_id}/suspend": {
1497
1557
  parameters: {
1498
1558
  query?: never;
@@ -1553,6 +1613,26 @@ export interface paths {
1553
1613
  patch?: never;
1554
1614
  trace?: never;
1555
1615
  };
1616
+ "/v1/workspaces/{workspace_id}/caps": {
1617
+ parameters: {
1618
+ query?: never;
1619
+ header?: never;
1620
+ path?: never;
1621
+ cookie?: never;
1622
+ };
1623
+ get?: never;
1624
+ put?: never;
1625
+ post?: never;
1626
+ delete?: never;
1627
+ options?: never;
1628
+ head?: never;
1629
+ /**
1630
+ * Resize a workspace: memory, its allocation mode, CPU and disk, running or suspended
1631
+ * @description Changes the caps of any workspace, fixed or elastic, running or suspended, without restarting or forking it. Each given field replaces the stored one (omitted fields keep theirs); every later start uses the new caps. Each value is bounded like caps at open: by the plan’s per-workspace maximum and the template’s limit (`limit_reason` plan or template). A running workspace changes live where it can (memory plugged or unplugged, CPU within its boot vCPUs, disk grown online); a suspended one gets the change right after its next resume, before the first call; what cannot apply now says `applies_at: next_start` and applies at the next start. The request is held until the resize finishes, up to `Prefer: wait=<seconds>` (default 20, at most 55): 200 ResizeResult (per resource: `applies_at` now | resume | next_start, requested, target, previous and applied values, `limit_reason`, `reason`) with the workspace caps; otherwise 202 with the `resize` operation, whose `result` carries the same per-resource fields when it succeeds. A resize that fails answers with its error. Errors (nothing changes): 409 conflict reason resize_not_available (not enabled for the organization), workspace_deleted, operation_in_progress (another lifecycle operation is active; details.active_operation_id, retryable); 422 validation_failed reason not_supported_for_mode (file-first workspace), shrink_not_supported (disk_gib below the current disk; details.current_disk_gib), requires_elastic (memory_mib_held without an elastic mode), exceeds_memory_mib (memory_mib_held above the maximum), allocation_mode_not_available (elastic memory is not available to the organization); 402 as for a start (no plan, new starts on hold). Owners, admins and members, and API keys with a tool permission. Supports Idempotency-Key.
1632
+ */
1633
+ patch: operations["patchV1WorkspacesWorkspaceIdCaps"];
1634
+ trace?: never;
1635
+ };
1556
1636
  "/v1/workspaces/{workspace_id}/suspend-when-idle": {
1557
1637
  parameters: {
1558
1638
  query?: never;
@@ -1886,6 +1966,26 @@ export interface paths {
1886
1966
  patch?: never;
1887
1967
  trace?: never;
1888
1968
  };
1969
+ "/api/v1/workspaces/{workspace_id}/computer-use": {
1970
+ parameters: {
1971
+ query?: never;
1972
+ header?: never;
1973
+ path?: never;
1974
+ cookie?: never;
1975
+ };
1976
+ get?: never;
1977
+ /**
1978
+ * Switch computer use on or off for the workspace (contracts §45.1)
1979
+ * @description enabled: true or false overrides the template’s switch; null follows it. While computer use is on, tool tokens carry the computer tool and the workspace desktop starts on the first computer call. Takes effect on the next tool token. 409 computer_use_unavailable when the workspace’s template version cannot run a desktop, 409 not_supported_for_mode for file-first workspaces (§29), 409 workspace_deleted. Returns the switch.
1980
+ */
1981
+ put: operations["putApiV1WorkspacesWorkspaceIdComputerUse"];
1982
+ post?: never;
1983
+ delete?: never;
1984
+ options?: never;
1985
+ head?: never;
1986
+ patch?: never;
1987
+ trace?: never;
1988
+ };
1889
1989
  "/api/v1/workspaces/{workspace_id}/suspend": {
1890
1990
  parameters: {
1891
1991
  query?: never;
@@ -1946,6 +2046,26 @@ export interface paths {
1946
2046
  patch?: never;
1947
2047
  trace?: never;
1948
2048
  };
2049
+ "/api/v1/workspaces/{workspace_id}/caps": {
2050
+ parameters: {
2051
+ query?: never;
2052
+ header?: never;
2053
+ path?: never;
2054
+ cookie?: never;
2055
+ };
2056
+ get?: never;
2057
+ put?: never;
2058
+ post?: never;
2059
+ delete?: never;
2060
+ options?: never;
2061
+ head?: never;
2062
+ /**
2063
+ * Resize a workspace: memory, its allocation mode, CPU and disk, running or suspended
2064
+ * @description Changes the caps of any workspace, fixed or elastic, running or suspended, without restarting or forking it. Each given field replaces the stored one (omitted fields keep theirs); every later start uses the new caps. Each value is bounded like caps at open: by the plan’s per-workspace maximum and the template’s limit (`limit_reason` plan or template). A running workspace changes live where it can (memory plugged or unplugged, CPU within its boot vCPUs, disk grown online); a suspended one gets the change right after its next resume, before the first call; what cannot apply now says `applies_at: next_start` and applies at the next start. The request is held until the resize finishes, up to `Prefer: wait=<seconds>` (default 20, at most 55): 200 ResizeResult (per resource: `applies_at` now | resume | next_start, requested, target, previous and applied values, `limit_reason`, `reason`) with the workspace caps; otherwise 202 with the `resize` operation, whose `result` carries the same per-resource fields when it succeeds. A resize that fails answers with its error. Errors (nothing changes): 409 conflict reason resize_not_available (not enabled for the organization), workspace_deleted, operation_in_progress (another lifecycle operation is active; details.active_operation_id, retryable); 422 validation_failed reason not_supported_for_mode (file-first workspace), shrink_not_supported (disk_gib below the current disk; details.current_disk_gib), requires_elastic (memory_mib_held without an elastic mode), exceeds_memory_mib (memory_mib_held above the maximum), allocation_mode_not_available (elastic memory is not available to the organization); 402 as for a start (no plan, new starts on hold). Owners, admins and members, and API keys with a tool permission. Supports Idempotency-Key.
2065
+ */
2066
+ patch: operations["patchApiV1WorkspacesWorkspaceIdCaps"];
2067
+ trace?: never;
2068
+ };
1949
2069
  "/api/v1/workspaces/{workspace_id}/suspend-when-idle": {
1950
2070
  parameters: {
1951
2071
  query?: never;
@@ -2161,6 +2281,242 @@ export interface paths {
2161
2281
  patch?: never;
2162
2282
  trace?: never;
2163
2283
  };
2284
+ "/v1/workspaces/{workspace_id}/ports/{port}": {
2285
+ parameters: {
2286
+ query?: never;
2287
+ header?: never;
2288
+ path?: never;
2289
+ cookie?: never;
2290
+ };
2291
+ get?: never;
2292
+ /**
2293
+ * Expose a port of the workspace at its own HTTPS URL
2294
+ * @description Serves TCP `port` inside the workspace at `https://<port>-<handle>.<ingress domain>` (contracts §39.3). The port is private: every request needs a port token (POST …/tokens), a signed link (POST …/links) or the port’s callback URL (POST …/callback). A request to a suspended workspace resumes it and is held until it runs; a parked one wakes inside the request. 201 when exposed now, 200 when it already was (unchanged: its tokens, links and callback URL stay valid). The handle is the workspace’s for good (kept when ports are closed and exposed again, across suspend, resume and reset; a fork gets none). At most 10 exposed ports: 409 conflict details.reason port_limit (details.limit 10). Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2295
+ */
2296
+ put: operations["putV1WorkspacesWorkspaceIdPortsPort"];
2297
+ post?: never;
2298
+ /**
2299
+ * Close an exposed port
2300
+ * @description 204, also when the port was not exposed. Its tokens, links and callback URL stop working at once (the gateway caches for at most 5 s), and stay revoked if the port is exposed again. The workspace keeps its URL handle. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2301
+ */
2302
+ delete: operations["deleteV1WorkspacesWorkspaceIdPortsPort"];
2303
+ options?: never;
2304
+ head?: never;
2305
+ patch?: never;
2306
+ trace?: never;
2307
+ };
2308
+ "/v1/workspaces/{workspace_id}/ports": {
2309
+ parameters: {
2310
+ query?: never;
2311
+ header?: never;
2312
+ path?: never;
2313
+ cookie?: never;
2314
+ };
2315
+ /**
2316
+ * List the workspace’s exposed ports
2317
+ * @description Ordered by port. `callback` is set when the port has a callback URL (its secret is never shown again). Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2318
+ */
2319
+ get: operations["getV1WorkspacesWorkspaceIdPorts"];
2320
+ put?: never;
2321
+ post?: never;
2322
+ delete?: never;
2323
+ options?: never;
2324
+ head?: never;
2325
+ patch?: never;
2326
+ trace?: never;
2327
+ };
2328
+ "/v1/workspaces/{workspace_id}/ports/{port}/tokens": {
2329
+ parameters: {
2330
+ query?: never;
2331
+ header?: never;
2332
+ path?: never;
2333
+ cookie?: never;
2334
+ };
2335
+ get?: never;
2336
+ put?: never;
2337
+ /**
2338
+ * Mint a port token for an exposed port
2339
+ * @description A bearer token for requests to the port’s URL: `Authorization: Bearer <token>` (or `X-Shardflux-Token: <token>` when the app uses Authorization itself). `sfp_` + an ES256 JWS (claims iss, aud `shardflux-ports`, sub, pty, org, prj, ws, port, pxid, use `bearer`, iat, exp, jti; keys at GET /v1/.well-known/tool-token-keys). Revoked by closing the port, deleting the workspace, revoking the API key that minted it, or the minting member’s removal or role change. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2340
+ */
2341
+ post: operations["postV1WorkspacesWorkspaceIdPortsPortTokens"];
2342
+ delete?: never;
2343
+ options?: never;
2344
+ head?: never;
2345
+ patch?: never;
2346
+ trace?: never;
2347
+ };
2348
+ "/v1/workspaces/{workspace_id}/ports/{port}/links": {
2349
+ parameters: {
2350
+ query?: never;
2351
+ header?: never;
2352
+ path?: never;
2353
+ cookie?: never;
2354
+ };
2355
+ get?: never;
2356
+ put?: never;
2357
+ /**
2358
+ * Create a signed link that opens an exposed port in a browser
2359
+ * @description Opening the link sets a session cookie for the port’s host (HttpOnly, Secure, until `expires_at`) and redirects to `path`, so a person can use the app in a browser without a header. Share it like a password: anyone with the link can open the port until it expires. Revoked like a port token (closing the port, deleting the workspace, revoking the minting API key). 422 validation_failed details.field path for a path that does not start with one `/` or has characters other than printable ASCII. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2360
+ */
2361
+ post: operations["postV1WorkspacesWorkspaceIdPortsPortLinks"];
2362
+ delete?: never;
2363
+ options?: never;
2364
+ head?: never;
2365
+ patch?: never;
2366
+ trace?: never;
2367
+ };
2368
+ "/v1/workspaces/{workspace_id}/ports/{port}/callback": {
2369
+ parameters: {
2370
+ query?: never;
2371
+ header?: never;
2372
+ path?: never;
2373
+ cookie?: never;
2374
+ };
2375
+ get?: never;
2376
+ put?: never;
2377
+ /**
2378
+ * Create or replace the port’s callback URL (webhooks, OAuth redirects)
2379
+ * @description A URL with a secret in its path that reaches the port without a token header: register `<url><your path>` with GitHub, Slack, Stripe or an OAuth provider; a request to `/__shardflux/callback/<secret>/<rest>` reaches `/<rest>` (query kept) and wakes the workspace like any request. Creating it again replaces it (the previous URL stops working). The secret is shown only in this response (stored as a SHA-256 hash). Revoke it with DELETE, by closing the port, or by deleting the workspace; it also stops waking the workspace when its creator can no longer manage the workspace. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2380
+ */
2381
+ post: operations["postV1WorkspacesWorkspaceIdPortsPortCallback"];
2382
+ /**
2383
+ * Revoke the port’s callback URL
2384
+ * @description 204, also when the port has no callback URL. The URL stops working at once (the gateway caches for at most 5 s). 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2385
+ */
2386
+ delete: operations["deleteV1WorkspacesWorkspaceIdPortsPortCallback"];
2387
+ options?: never;
2388
+ head?: never;
2389
+ patch?: never;
2390
+ trace?: never;
2391
+ };
2392
+ "/api/v1/workspaces/{workspace_id}/ports/{port}": {
2393
+ parameters: {
2394
+ query?: never;
2395
+ header?: never;
2396
+ path?: never;
2397
+ cookie?: never;
2398
+ };
2399
+ get?: never;
2400
+ /**
2401
+ * Expose a port of the workspace at its own HTTPS URL
2402
+ * @description Serves TCP `port` inside the workspace at `https://<port>-<handle>.<ingress domain>` (contracts §39.3). The port is private: every request needs a port token (POST …/tokens), a signed link (POST …/links) or the port’s callback URL (POST …/callback). A request to a suspended workspace resumes it and is held until it runs; a parked one wakes inside the request. 201 when exposed now, 200 when it already was (unchanged: its tokens, links and callback URL stay valid). The handle is the workspace’s for good (kept when ports are closed and exposed again, across suspend, resume and reset; a fork gets none). At most 10 exposed ports: 409 conflict details.reason port_limit (details.limit 10). Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2403
+ */
2404
+ put: operations["putApiV1WorkspacesWorkspaceIdPortsPort"];
2405
+ post?: never;
2406
+ /**
2407
+ * Close an exposed port
2408
+ * @description 204, also when the port was not exposed. Its tokens, links and callback URL stop working at once (the gateway caches for at most 5 s), and stay revoked if the port is exposed again. The workspace keeps its URL handle. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2409
+ */
2410
+ delete: operations["deleteApiV1WorkspacesWorkspaceIdPortsPort"];
2411
+ options?: never;
2412
+ head?: never;
2413
+ patch?: never;
2414
+ trace?: never;
2415
+ };
2416
+ "/api/v1/workspaces/{workspace_id}/ports": {
2417
+ parameters: {
2418
+ query?: never;
2419
+ header?: never;
2420
+ path?: never;
2421
+ cookie?: never;
2422
+ };
2423
+ /**
2424
+ * List the workspace’s exposed ports
2425
+ * @description Ordered by port. `callback` is set when the port has a callback URL (its secret is never shown again). Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2426
+ */
2427
+ get: operations["getApiV1WorkspacesWorkspaceIdPorts"];
2428
+ put?: never;
2429
+ post?: never;
2430
+ delete?: never;
2431
+ options?: never;
2432
+ head?: never;
2433
+ patch?: never;
2434
+ trace?: never;
2435
+ };
2436
+ "/api/v1/workspaces/{workspace_id}/ports/{port}/tokens": {
2437
+ parameters: {
2438
+ query?: never;
2439
+ header?: never;
2440
+ path?: never;
2441
+ cookie?: never;
2442
+ };
2443
+ get?: never;
2444
+ put?: never;
2445
+ /**
2446
+ * Mint a port token for an exposed port
2447
+ * @description A bearer token for requests to the port’s URL: `Authorization: Bearer <token>` (or `X-Shardflux-Token: <token>` when the app uses Authorization itself). `sfp_` + an ES256 JWS (claims iss, aud `shardflux-ports`, sub, pty, org, prj, ws, port, pxid, use `bearer`, iat, exp, jti; keys at GET /v1/.well-known/tool-token-keys). Revoked by closing the port, deleting the workspace, revoking the API key that minted it, or the minting member’s removal or role change. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2448
+ */
2449
+ post: operations["postApiV1WorkspacesWorkspaceIdPortsPortTokens"];
2450
+ delete?: never;
2451
+ options?: never;
2452
+ head?: never;
2453
+ patch?: never;
2454
+ trace?: never;
2455
+ };
2456
+ "/api/v1/workspaces/{workspace_id}/ports/{port}/links": {
2457
+ parameters: {
2458
+ query?: never;
2459
+ header?: never;
2460
+ path?: never;
2461
+ cookie?: never;
2462
+ };
2463
+ get?: never;
2464
+ put?: never;
2465
+ /**
2466
+ * Create a signed link that opens an exposed port in a browser
2467
+ * @description Opening the link sets a session cookie for the port’s host (HttpOnly, Secure, until `expires_at`) and redirects to `path`, so a person can use the app in a browser without a header. Share it like a password: anyone with the link can open the port until it expires. Revoked like a port token (closing the port, deleting the workspace, revoking the minting API key). 422 validation_failed details.field path for a path that does not start with one `/` or has characters other than printable ASCII. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2468
+ */
2469
+ post: operations["postApiV1WorkspacesWorkspaceIdPortsPortLinks"];
2470
+ delete?: never;
2471
+ options?: never;
2472
+ head?: never;
2473
+ patch?: never;
2474
+ trace?: never;
2475
+ };
2476
+ "/api/v1/workspaces/{workspace_id}/ports/{port}/callback": {
2477
+ parameters: {
2478
+ query?: never;
2479
+ header?: never;
2480
+ path?: never;
2481
+ cookie?: never;
2482
+ };
2483
+ get?: never;
2484
+ put?: never;
2485
+ /**
2486
+ * Create or replace the port’s callback URL (webhooks, OAuth redirects)
2487
+ * @description A URL with a secret in its path that reaches the port without a token header: register `<url><your path>` with GitHub, Slack, Stripe or an OAuth provider; a request to `/__shardflux/callback/<secret>/<rest>` reaches `/<rest>` (query kept) and wakes the workspace like any request. Creating it again replaces it (the previous URL stops working). The secret is shown only in this response (stored as a SHA-256 hash). Revoke it with DELETE, by closing the port, or by deleting the workspace; it also stops waking the workspace when its creator can no longer manage the workspace. 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2488
+ */
2489
+ post: operations["postApiV1WorkspacesWorkspaceIdPortsPortCallback"];
2490
+ /**
2491
+ * Revoke the port’s callback URL
2492
+ * @description 204, also when the port has no callback URL. The URL stops working at once (the gateway caches for at most 5 s). 404 not_found details.reason port_not_exposed. Errors: 403 forbidden details.reason inbound_ports_not_available (inbound ports are not enabled for the organization), 409 conflict not_supported_for_mode (file-first workspace) or workspace_deleted, 422 validation_failed for a port outside 1-65535 (details.reason port_reserved for 61001, the workspace desktop’s control port, contracts §45.5).
2493
+ */
2494
+ delete: operations["deleteApiV1WorkspacesWorkspaceIdPortsPortCallback"];
2495
+ options?: never;
2496
+ head?: never;
2497
+ patch?: never;
2498
+ trace?: never;
2499
+ };
2500
+ "/v1/internal/port-wakes": {
2501
+ parameters: {
2502
+ query?: never;
2503
+ header?: never;
2504
+ path?: never;
2505
+ cookie?: never;
2506
+ };
2507
+ get?: never;
2508
+ put?: never;
2509
+ /**
2510
+ * Wake a workspace for an inbound port request (called by the cell gateway)
2511
+ * @description Contracts §39.3. The credential is the ingress request’s port token, forwarded unchanged as `Authorization: Bearer sfp_…` (`use` bearer or link), or the callback URL’s secret in `callback_secret`. The API verifies it as the gateway does: ES256 with its own keys, iss, aud shardflux-ports, iat/exp, workspace and port of the token (403 port_token_scope), the port exposed (404 port_not_exposed) under the token’s exposure (`pxid`), the revocation watermarks of the minting principal and the workspace and the minting API key (401 port_token_revoked), or the callback secret’s SHA-256 and its creator’s lifecycle permission (401 callback_invalid); then the organization’s `policy.inbound_ports` (403 inbound_ports_not_enabled). A deleted workspace is 404 unknown_host. It then resumes the workspace as that principal exactly like POST /v1/workspaces/{id}/resume (joins an active resume/open, recovers a failed workspace with an open, refuses with its admission errors, which the gateway passes through), audited workspace.resume with details.via inbound_port. With `Prefer: wait=<seconds>` (at most 20) it holds like a held resume: 200 {workspace, operation} once the operation succeeded, 202 with the operation otherwise (also without the preference). A running workspace answers 200 at once with operation null. 401 port_auth_required (no credential), port_token_invalid; 429 rate_limited per workspace. `Cache-Control: no-store`.
2512
+ */
2513
+ post: operations["postV1InternalPortWakes"];
2514
+ delete?: never;
2515
+ options?: never;
2516
+ head?: never;
2517
+ patch?: never;
2518
+ trace?: never;
2519
+ };
2164
2520
  "/v1/projects/{project_id}/volumes": {
2165
2521
  parameters: {
2166
2522
  query?: never;
@@ -2441,6 +2797,46 @@ export interface paths {
2441
2797
  patch?: never;
2442
2798
  trace?: never;
2443
2799
  };
2800
+ "/v1/organizations/{organization_id}/templates/{slug}/computer-use": {
2801
+ parameters: {
2802
+ query?: never;
2803
+ header?: never;
2804
+ path?: never;
2805
+ cookie?: never;
2806
+ };
2807
+ get?: never;
2808
+ /**
2809
+ * Switch computer use on or off for the workspaces of an organization template (contracts §45.1)
2810
+ * @description Every workspace of the template follows it unless the workspace sets its own value; takes effect on their next tool token. Owners and admins (sessions) or API keys of the organization with a tool permission. 403 for platform templates (switch a workspace on instead), 404 outside the organization.
2811
+ */
2812
+ put: operations["putV1OrganizationsOrganizationIdTemplatesSlugComputerUse"];
2813
+ post?: never;
2814
+ delete?: never;
2815
+ options?: never;
2816
+ head?: never;
2817
+ patch?: never;
2818
+ trace?: never;
2819
+ };
2820
+ "/v1/templates/{slug}/computer-use": {
2821
+ parameters: {
2822
+ query?: never;
2823
+ header?: never;
2824
+ path?: never;
2825
+ cookie?: never;
2826
+ };
2827
+ get?: never;
2828
+ /**
2829
+ * Switch computer use on or off for the workspaces of an organization template (contracts §45.1) (the API key’s organization)
2830
+ * @description Every workspace of the template follows it unless the workspace sets its own value; takes effect on their next tool token. Owners and admins (sessions) or API keys of the organization with a tool permission. 403 for platform templates (switch a workspace on instead), 404 outside the organization.
2831
+ */
2832
+ put: operations["putV1TemplatesSlugComputerUse"];
2833
+ post?: never;
2834
+ delete?: never;
2835
+ options?: never;
2836
+ head?: never;
2837
+ patch?: never;
2838
+ trace?: never;
2839
+ };
2444
2840
  "/v1/organizations/{organization_id}/template-builds": {
2445
2841
  parameters: {
2446
2842
  query?: never;
@@ -2779,6 +3175,26 @@ export interface paths {
2779
3175
  patch?: never;
2780
3176
  trace?: never;
2781
3177
  };
3178
+ "/api/v1/organizations/{organization_id}/templates/{slug}/computer-use": {
3179
+ parameters: {
3180
+ query?: never;
3181
+ header?: never;
3182
+ path?: never;
3183
+ cookie?: never;
3184
+ };
3185
+ get?: never;
3186
+ /**
3187
+ * Switch computer use on or off for the workspaces of an organization template (contracts §45.1)
3188
+ * @description Every workspace of the template follows it unless the workspace sets its own value; takes effect on their next tool token. Owners and admins (sessions) or API keys of the organization with a tool permission. 403 for platform templates (switch a workspace on instead), 404 outside the organization.
3189
+ */
3190
+ put: operations["putApiV1OrganizationsOrganizationIdTemplatesSlugComputerUse"];
3191
+ post?: never;
3192
+ delete?: never;
3193
+ options?: never;
3194
+ head?: never;
3195
+ patch?: never;
3196
+ trace?: never;
3197
+ };
2782
3198
  "/api/v1/organizations/{organization_id}/template-builds": {
2783
3199
  parameters: {
2784
3200
  query?: never;
@@ -5524,6 +5940,30 @@ export interface paths {
5524
5940
  patch?: never;
5525
5941
  trace?: never;
5526
5942
  };
5943
+ "/api/v1/oauth/authorization": {
5944
+ parameters: {
5945
+ query?: never;
5946
+ header?: never;
5947
+ path?: never;
5948
+ cookie?: never;
5949
+ };
5950
+ /**
5951
+ * Describe a hosted MCP connection request (consent page)
5952
+ * @description Describes the pending authorization request /connect?request=<id> names: the client, where the browser goes afterwards and the projects the user may connect. 422 `validation_failed`: details.reason `request_expired` (unknown, expired after 15 minutes, or already answered), details.oauth_error when the client or its redirect_uri cannot be trusted, or details.redirect_to (the error redirect) for any other problem.
5953
+ */
5954
+ get: operations["getApiV1OauthAuthorization"];
5955
+ put?: never;
5956
+ /**
5957
+ * Approve or decline a hosted MCP connection request
5958
+ * @description Answers the pending request (it is consumed). approve (with project_id, a project where the user is owner or admin; checked before the request is consumed) creates the connection: a project API key named "<client> (MCP connector)" with every tool permission, held by Shardflux for the client, and a single-use authorization code (5 minutes). deny sends access_denied. Either way the answer is redirect_to, where the browser goes next.
5959
+ */
5960
+ post: operations["postApiV1OauthAuthorization"];
5961
+ delete?: never;
5962
+ options?: never;
5963
+ head?: never;
5964
+ patch?: never;
5965
+ trace?: never;
5966
+ };
5527
5967
  }
5528
5968
  export type webhooks = Record<string, never>;
5529
5969
  export interface components {
@@ -6510,7 +6950,7 @@ export interface components {
6510
6950
  disk_gib?: number;
6511
6951
  };
6512
6952
  agent_label?: string;
6513
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
6953
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
6514
6954
  /** @description Open-time inputs of the template version (contracts §24.3): {NAME: string} for its declared text inputs. A new workspace stores each given value, else the declared default; on an existing key `inputs` replaces them all (omitted = unchanged). Secret inputs are not passed here: they bind the stored secret of the same name. 422 input_unknown (undeclared name, details.names), input_invalid (a secret input, a non-string, or a value over 4096 bytes or with CR, LF or NUL; details.names), input_required (details {names, kind}). */
6515
6955
  inputs?: {
6516
6956
  [key: string]: unknown;
@@ -6530,7 +6970,7 @@ export interface components {
6530
6970
  disk_gib?: number;
6531
6971
  };
6532
6972
  agent_label?: string;
6533
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
6973
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
6534
6974
  /** @description Open-time inputs of the template version (contracts §24.3): {NAME: string} for its declared text inputs. A new workspace stores each given value, else the declared default; on an existing key `inputs` replaces them all (omitted = unchanged). Secret inputs are not passed here: they bind the stored secret of the same name. 422 input_unknown (undeclared name, details.names), input_invalid (a secret input, a non-string, or a value over 4096 bytes or with CR, LF or NUL; details.names), input_required (details {names, kind}). */
6535
6975
  inputs?: {
6536
6976
  [key: string]: unknown;
@@ -6725,7 +7165,7 @@ export interface components {
6725
7165
  disk_gib?: number;
6726
7166
  };
6727
7167
  agent_label?: string;
6728
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
7168
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
6729
7169
  /** @description Open-time inputs of the template version (contracts §24.3): {NAME: string} for its declared text inputs. A new workspace stores each given value, else the declared default; on an existing key `inputs` replaces them all (omitted = unchanged). Secret inputs are not passed here: they bind the stored secret of the same name. 422 input_unknown (undeclared name, details.names), input_invalid (a secret input, a non-string, or a value over 4096 bytes or with CR, LF or NUL; details.names), input_required (details {names, kind}). */
6730
7170
  inputs?: {
6731
7171
  [key: string]: unknown;
@@ -6750,6 +7190,111 @@ export interface components {
6750
7190
  */
6751
7191
  not_before: string;
6752
7192
  };
7193
+ /** @description At least one field. Each given value replaces the stored one; omitted fields keep theirs. */
7194
+ ResizeWorkspaceBody: {
7195
+ /** @description Memory (MiB): the size of a fixed workspace, the maximum of an elastic one. Bounded by the plan and the template (`limit_reason`). */
7196
+ memory_mib?: number;
7197
+ /** @description Elastic only: the memory held while idle (MiB), at most the maximum. */
7198
+ memory_mib_held?: number;
7199
+ /**
7200
+ * @description fixed: memory_mib is plugged and held; elastic: the workspace holds memory_mib_held and grows to memory_mib when a command needs it.
7201
+ * @enum {string}
7202
+ */
7203
+ allocation_mode?: "fixed" | "elastic";
7204
+ /** @description CPU (millicores). Bounded by the plan and the template. */
7205
+ cpu_millis?: number;
7206
+ /** @description Disk (GiB). Grow only. Bounded by the plan and the template. */
7207
+ disk_gib?: number;
7208
+ };
7209
+ /** @description Per resource the request named (allocation_mode and memory_mib_held report under memory): what applied now and what applies later. caps: the workspace caps every later start uses. */
7210
+ ResizeResult: {
7211
+ /**
7212
+ * Format: uuid
7213
+ * @description UUIDv7, lowercase canonical form.
7214
+ */
7215
+ workspace_id: string;
7216
+ /**
7217
+ * Format: uuid
7218
+ * @description UUIDv7, lowercase canonical form.
7219
+ */
7220
+ operation_id: string;
7221
+ /** @description The workspace state the resize found (running, suspended, ...). */
7222
+ state: string;
7223
+ memory?: {
7224
+ /**
7225
+ * @description now: live; resume: right after the next resume, before its first call; next_start: at the next start that boots the workspace.
7226
+ * @enum {string}
7227
+ */
7228
+ applies_at: "now" | "resume" | "next_start";
7229
+ /**
7230
+ * @description The memory layout after the resize.
7231
+ * @enum {string}
7232
+ */
7233
+ allocation_mode: "fixed" | "elastic";
7234
+ requested_mib: number | null;
7235
+ target_mib: number | null;
7236
+ previous_mib: number | null;
7237
+ applied_mib: number | null;
7238
+ held_mib: number | null;
7239
+ converged: boolean | null;
7240
+ /** @description Why the target or the applied value is below what was requested: plan or template (bounded like caps at open), host_capacity (the rest did not fit on the host at once), shrink_stalled (the guest kept the memory its processes use). */
7241
+ limit_reason: ("plan" | "template" | "host_capacity" | "shrink_stalled") | null;
7242
+ /** @description Why it does not apply now (null when it does). */
7243
+ reason: ("region" | "below_base" | "legacy_layout" | "boot_vcpus" | "suspended" | "stopped") | null;
7244
+ };
7245
+ cpu?: {
7246
+ /**
7247
+ * @description now: live; resume: right after the next resume, before its first call; next_start: at the next start that boots the workspace.
7248
+ * @enum {string}
7249
+ */
7250
+ applies_at: "now" | "resume" | "next_start";
7251
+ requested_millis: number | null;
7252
+ target_millis: number | null;
7253
+ previous_millis: number | null;
7254
+ applied_millis: number | null;
7255
+ /** @description Why the target or the applied value is below what was requested: plan or template (bounded like caps at open), host_capacity (the rest did not fit on the host at once), shrink_stalled (the guest kept the memory its processes use). */
7256
+ limit_reason: ("plan" | "template" | "host_capacity" | "shrink_stalled") | null;
7257
+ /** @description Why it does not apply now (null when it does). */
7258
+ reason: ("region" | "below_base" | "legacy_layout" | "boot_vcpus" | "suspended" | "stopped") | null;
7259
+ };
7260
+ disk?: {
7261
+ /**
7262
+ * @description now: live; resume: right after the next resume, before its first call; next_start: at the next start that boots the workspace.
7263
+ * @enum {string}
7264
+ */
7265
+ applies_at: "now" | "resume" | "next_start";
7266
+ requested_gib: number | null;
7267
+ target_gib: number | null;
7268
+ previous_gib: number | null;
7269
+ applied_gib: number | null;
7270
+ /** @description Why the target or the applied value is below what was requested: plan or template (bounded like caps at open), host_capacity (the rest did not fit on the host at once), shrink_stalled (the guest kept the memory its processes use). */
7271
+ limit_reason: ("plan" | "template" | "host_capacity" | "shrink_stalled") | null;
7272
+ /** @description Why it does not apply now (null when it does). */
7273
+ reason: ("region" | "below_base" | "legacy_layout" | "boot_vcpus" | "suspended" | "stopped") | null;
7274
+ };
7275
+ /** @description User caps for this workspace (null = no user restriction) and its memory allocation mode. */
7276
+ caps: {
7277
+ cpu_millis: number | null;
7278
+ memory_mib: number | null;
7279
+ disk_gib: number | null;
7280
+ /**
7281
+ * @description Memory allocation (contracts §32): fixed (default) boots memory_mib and holds it; elastic holds memory_mib_held while idle and is grown up to memory_mib (the promise) when a command needs it. The mode the next VM start uses: an elastic request whose promise does not exceed the held floor by at least 512 MiB is fixed at the promise.
7282
+ * @enum {string}
7283
+ */
7284
+ allocation_mode: "fixed" | "elastic";
7285
+ /** @description Elastic only: the memory held while idle (MiB). */
7286
+ memory_mib_held?: number;
7287
+ };
7288
+ };
7289
+ ComputerUse: {
7290
+ /** @description Effective: tool tokens carry the computer tool (the workspace’s value, else the template’s, and the version runs a desktop). */
7291
+ enabled: boolean;
7292
+ workspace: boolean | null;
7293
+ /** @description The template’s switch for its workspaces. */
7294
+ template: boolean;
7295
+ /** @description The workspace’s template version can run a desktop (its guest agent has desktop.v1). */
7296
+ available: boolean;
7297
+ };
6753
7298
  Workspace: {
6754
7299
  /**
6755
7300
  * Format: uuid
@@ -6878,6 +7423,7 @@ export interface components {
6878
7423
  mode: components["schemas"]["WorkspaceMode"];
6879
7424
  /** @description file_first: the latest revision of the file tree (0 = the empty tree the workspace starts with; each mutating file call or execution publishes the next one; cell file responses carry it as X-Tree-Revision). Always 0 for processful workspaces. */
6880
7425
  tree_revision: number;
7426
+ computer_use: components["schemas"]["ComputerUse"];
6881
7427
  /**
6882
7428
  * Format: date-time
6883
7429
  * @description RFC 3339 UTC timestamp with Z.
@@ -6950,9 +7496,28 @@ export interface components {
6950
7496
  */
6951
7497
  agent_session_id: string;
6952
7498
  ownership_epoch: number;
6953
- tools: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
7499
+ tools: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
6954
7500
  cell_endpoint: string;
6955
7501
  };
7502
+ /** @description An exposed port of a workspace (contracts §39.3). Private: every request needs a credential. */
7503
+ Port: {
7504
+ /** @description TCP port inside the workspace (1-65535). */
7505
+ port: number;
7506
+ /** @description https://<port>-<handle>.<ingress domain>: requests need a port token (Authorization: Bearer sfp_…), a signed link’s cookie, or the callback URL. */
7507
+ url: string;
7508
+ /**
7509
+ * Format: date-time
7510
+ * @description RFC 3339 UTC timestamp with Z.
7511
+ */
7512
+ created_at: string;
7513
+ callback: {
7514
+ /**
7515
+ * Format: date-time
7516
+ * @description RFC 3339 UTC timestamp with Z.
7517
+ */
7518
+ created_at: string;
7519
+ } | null;
7520
+ };
6956
7521
  Volume: {
6957
7522
  /**
6958
7523
  * Format: uuid
@@ -7131,6 +7696,39 @@ export interface components {
7131
7696
  /** @description When the charges reach the effective cap at the average burn of this period so far. Null when not accruing or when it would fall after resets_at. */
7132
7697
  projected_reached_at: string | null;
7133
7698
  };
7699
+ OAuthConsentView: {
7700
+ client: {
7701
+ client_id: string;
7702
+ /** @description client_name from its registration or metadata document. Self-declared: show it with redirect_host. */
7703
+ name: string;
7704
+ uri: string | null;
7705
+ logo_uri: string | null;
7706
+ /** @description `metadata_document`: client_id is an https URL its owner serves (the host is verified by that); `registered`: dynamic client registration. */
7707
+ kind: "registered" | "metadata_document";
7708
+ client_id_host: string | null;
7709
+ };
7710
+ /** @description Where the browser goes after the decision (host, or scheme://host for a native app). */
7711
+ redirect_host: string;
7712
+ scope: string;
7713
+ /** @description The MCP endpoint the client will be able to use. */
7714
+ resource: string;
7715
+ /** @description Projects the user may connect (owner or admin of the organization), by organization then project name; at most 200. */
7716
+ projects: {
7717
+ /**
7718
+ * Format: uuid
7719
+ * @description UUIDv7, lowercase canonical form.
7720
+ */
7721
+ organization_id: string;
7722
+ organization_name: string;
7723
+ /**
7724
+ * Format: uuid
7725
+ * @description UUIDv7, lowercase canonical form.
7726
+ */
7727
+ project_id: string;
7728
+ project_name: string;
7729
+ role: "owner" | "admin";
7730
+ }[];
7731
+ };
7134
7732
  };
7135
7733
  responses: never;
7136
7734
  parameters: never;
@@ -8678,7 +9276,7 @@ export interface operations {
8678
9276
  };
8679
9277
  };
8680
9278
  };
8681
- postV1AuthLogin: {
9279
+ postV1AuthSignup: {
8682
9280
  parameters: {
8683
9281
  query?: never;
8684
9282
  header?: never;
@@ -8689,9 +9287,10 @@ export interface operations {
8689
9287
  content: {
8690
9288
  "application/json": {
8691
9289
  /** @description Email address. */
8692
- email: string;
8693
- /** @description Password (12-256 characters). */
8694
- password: string;
9290
+ email?: string;
9291
+ display_name?: string;
9292
+ /** @description The OpenAI ID token of a Codex CLI login (`tokens.id_token` in `~/.codex/auth.json`, refreshed by Codex within CODEX_PROOF_MAX_AGE_SECONDS). Proves a verified email; it is not a credential to OpenAI. */
9293
+ codex_id_token?: string;
8695
9294
  };
8696
9295
  };
8697
9296
  };
@@ -8704,6 +9303,43 @@ export interface operations {
8704
9303
  content: {
8705
9304
  "application/json": {
8706
9305
  status: "authenticated" | "mfa_required";
9306
+ /** @description True when this request created the account; false: it signed in to an existing one (a Codex proof only). */
9307
+ created: boolean;
9308
+ /** @description verified: the email is verified (a Codex proof, or verified before). provisional: unverified, and the account may use resource routes on its default plan now; the signup trial comes when the email is verified. verification_required: unverified, and resource routes answer 403 email_unverified until POST /v1/auth/verify-email/code. */
9309
+ access: "verified" | "provisional" | "verification_required";
9310
+ user: {
9311
+ /**
9312
+ * Format: uuid
9313
+ * @description UUIDv7, lowercase canonical form.
9314
+ */
9315
+ id: string;
9316
+ email: string;
9317
+ email_verified: boolean;
9318
+ display_name: string | null;
9319
+ mfa_enabled: boolean;
9320
+ } | null;
9321
+ /** @description The session: send `Authorization: Bearer <session_token>` from now on (a previous token of this session is revoked). */
9322
+ session_token: string;
9323
+ /**
9324
+ * Format: date-time
9325
+ * @description RFC 3339 UTC timestamp with Z.
9326
+ */
9327
+ session_expires_at: string;
9328
+ };
9329
+ };
9330
+ };
9331
+ /** @description Default Response */
9332
+ 201: {
9333
+ headers: {
9334
+ [name: string]: unknown;
9335
+ };
9336
+ content: {
9337
+ "application/json": {
9338
+ status: "authenticated" | "mfa_required";
9339
+ /** @description True when this request created the account; false: it signed in to an existing one (a Codex proof only). */
9340
+ created: boolean;
9341
+ /** @description verified: the email is verified (a Codex proof, or verified before). provisional: unverified, and the account may use resource routes on its default plan now; the signup trial comes when the email is verified. verification_required: unverified, and resource routes answer 403 email_unverified until POST /v1/auth/verify-email/code. */
9342
+ access: "verified" | "provisional" | "verification_required";
8707
9343
  user: {
8708
9344
  /**
8709
9345
  * Format: uuid
@@ -8745,7 +9381,7 @@ export interface operations {
8745
9381
  };
8746
9382
  };
8747
9383
  };
8748
- postV1AuthMfaChallenge: {
9384
+ postV1AuthVerifyEmailCode: {
8749
9385
  parameters: {
8750
9386
  query?: never;
8751
9387
  header?: never;
@@ -8755,10 +9391,70 @@ export interface operations {
8755
9391
  requestBody: {
8756
9392
  content: {
8757
9393
  "application/json": {
8758
- /** @description Current 6-digit TOTP code. */
9394
+ /** @description The 6-digit code from the email. */
8759
9395
  code?: string;
8760
- /** @description One-time recovery code. */
8761
- recovery_code?: string;
9396
+ };
9397
+ };
9398
+ };
9399
+ responses: {
9400
+ /** @description Default Response */
9401
+ 200: {
9402
+ headers: {
9403
+ [name: string]: unknown;
9404
+ };
9405
+ content: {
9406
+ "application/json": {
9407
+ /** @enum {string} */
9408
+ status: "verified";
9409
+ };
9410
+ };
9411
+ };
9412
+ /** @description Default Response */
9413
+ 202: {
9414
+ headers: {
9415
+ [name: string]: unknown;
9416
+ };
9417
+ content: {
9418
+ "application/json": {
9419
+ /** @enum {string} */
9420
+ status: "accepted";
9421
+ };
9422
+ };
9423
+ };
9424
+ /** @description Default Response */
9425
+ "4XX": {
9426
+ headers: {
9427
+ [name: string]: unknown;
9428
+ };
9429
+ content: {
9430
+ "application/json": components["schemas"]["ErrorBody"];
9431
+ };
9432
+ };
9433
+ /** @description Default Response */
9434
+ "5XX": {
9435
+ headers: {
9436
+ [name: string]: unknown;
9437
+ };
9438
+ content: {
9439
+ "application/json": components["schemas"]["ErrorBody"];
9440
+ };
9441
+ };
9442
+ };
9443
+ };
9444
+ postV1AuthLogin: {
9445
+ parameters: {
9446
+ query?: never;
9447
+ header?: never;
9448
+ path?: never;
9449
+ cookie?: never;
9450
+ };
9451
+ requestBody: {
9452
+ content: {
9453
+ "application/json": {
9454
+ /** @description Email address. */
9455
+ email: string;
9456
+ /** @description Password (12-256 characters). */
9457
+ password: string;
8762
9458
  };
8763
9459
  };
8764
9460
  };
@@ -8812,21 +9508,88 @@ export interface operations {
8812
9508
  };
8813
9509
  };
8814
9510
  };
8815
- postV1AuthLogout: {
9511
+ postV1AuthMfaChallenge: {
8816
9512
  parameters: {
8817
9513
  query?: never;
8818
9514
  header?: never;
8819
9515
  path?: never;
8820
9516
  cookie?: never;
8821
9517
  };
8822
- requestBody?: never;
9518
+ requestBody: {
9519
+ content: {
9520
+ "application/json": {
9521
+ /** @description Current 6-digit TOTP code. */
9522
+ code?: string;
9523
+ /** @description One-time recovery code. */
9524
+ recovery_code?: string;
9525
+ };
9526
+ };
9527
+ };
8823
9528
  responses: {
8824
- /** @description No content. */
8825
- 204: {
9529
+ /** @description Default Response */
9530
+ 200: {
8826
9531
  headers: {
8827
9532
  [name: string]: unknown;
8828
9533
  };
8829
- content?: never;
9534
+ content: {
9535
+ "application/json": {
9536
+ status: "authenticated" | "mfa_required";
9537
+ user: {
9538
+ /**
9539
+ * Format: uuid
9540
+ * @description UUIDv7, lowercase canonical form.
9541
+ */
9542
+ id: string;
9543
+ email: string;
9544
+ email_verified: boolean;
9545
+ display_name: string | null;
9546
+ mfa_enabled: boolean;
9547
+ } | null;
9548
+ /** @description The session: send `Authorization: Bearer <session_token>` from now on (a previous token of this session is revoked). */
9549
+ session_token: string;
9550
+ /**
9551
+ * Format: date-time
9552
+ * @description RFC 3339 UTC timestamp with Z.
9553
+ */
9554
+ session_expires_at: string;
9555
+ };
9556
+ };
9557
+ };
9558
+ /** @description Default Response */
9559
+ "4XX": {
9560
+ headers: {
9561
+ [name: string]: unknown;
9562
+ };
9563
+ content: {
9564
+ "application/json": components["schemas"]["ErrorBody"];
9565
+ };
9566
+ };
9567
+ /** @description Default Response */
9568
+ "5XX": {
9569
+ headers: {
9570
+ [name: string]: unknown;
9571
+ };
9572
+ content: {
9573
+ "application/json": components["schemas"]["ErrorBody"];
9574
+ };
9575
+ };
9576
+ };
9577
+ };
9578
+ postV1AuthLogout: {
9579
+ parameters: {
9580
+ query?: never;
9581
+ header?: never;
9582
+ path?: never;
9583
+ cookie?: never;
9584
+ };
9585
+ requestBody?: never;
9586
+ responses: {
9587
+ /** @description No content. */
9588
+ 204: {
9589
+ headers: {
9590
+ [name: string]: unknown;
9591
+ };
9592
+ content?: never;
8830
9593
  };
8831
9594
  /** @description Default Response */
8832
9595
  "4XX": {
@@ -9002,7 +9765,9 @@ export interface operations {
9002
9765
  content: {
9003
9766
  "application/json": {
9004
9767
  /** @description Password (12-256 characters). */
9005
- password: string;
9768
+ password?: string;
9769
+ /** @description The OpenAI ID token of a Codex CLI login (`tokens.id_token` in `~/.codex/auth.json`, refreshed by Codex within CODEX_PROOF_MAX_AGE_SECONDS). Proves a verified email; it is not a credential to OpenAI. */
9770
+ codex_id_token?: string;
9006
9771
  /** @description Current 6-digit TOTP code. */
9007
9772
  code?: string;
9008
9773
  /** @description One-time recovery code. */
@@ -9543,7 +10308,7 @@ export interface operations {
9543
10308
  * @description UUIDv7, lowercase canonical form.
9544
10309
  */
9545
10310
  project_id: string;
9546
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
10311
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
9547
10312
  } | null;
9548
10313
  };
9549
10314
  };
@@ -10386,7 +11151,7 @@ export interface operations {
10386
11151
  */
10387
11152
  project_id: string;
10388
11153
  name: string;
10389
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
11154
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
10390
11155
  /**
10391
11156
  * Format: date-time
10392
11157
  * @description RFC 3339 UTC timestamp with Z.
@@ -10434,7 +11199,7 @@ export interface operations {
10434
11199
  content: {
10435
11200
  "application/json": {
10436
11201
  name: string;
10437
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
11202
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
10438
11203
  /**
10439
11204
  * Format: date-time
10440
11205
  * @description RFC 3339 UTC timestamp with Z.
@@ -10470,7 +11235,7 @@ export interface operations {
10470
11235
  */
10471
11236
  project_id: string;
10472
11237
  name: string;
10473
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
11238
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
10474
11239
  /**
10475
11240
  * Format: date-time
10476
11241
  * @description RFC 3339 UTC timestamp with Z.
@@ -10602,7 +11367,7 @@ export interface operations {
10602
11367
  * @description UUIDv7, lowercase canonical form.
10603
11368
  */
10604
11369
  project_id: string;
10605
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
11370
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
10606
11371
  } | null;
10607
11372
  };
10608
11373
  };
@@ -11445,7 +12210,7 @@ export interface operations {
11445
12210
  */
11446
12211
  project_id: string;
11447
12212
  name: string;
11448
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12213
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
11449
12214
  /**
11450
12215
  * Format: date-time
11451
12216
  * @description RFC 3339 UTC timestamp with Z.
@@ -11493,7 +12258,7 @@ export interface operations {
11493
12258
  content: {
11494
12259
  "application/json": {
11495
12260
  name: string;
11496
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12261
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
11497
12262
  /**
11498
12263
  * Format: date-time
11499
12264
  * @description RFC 3339 UTC timestamp with Z.
@@ -11529,7 +12294,7 @@ export interface operations {
11529
12294
  */
11530
12295
  project_id: string;
11531
12296
  name: string;
11532
- tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12297
+ tool_permissions: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
11533
12298
  /**
11534
12299
  * Format: date-time
11535
12300
  * @description RFC 3339 UTC timestamp with Z.
@@ -11626,14 +12391,13 @@ export interface operations {
11626
12391
  };
11627
12392
  /** @description Template slug; new workspaces use its latest published version. */
11628
12393
  template: string;
11629
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction (allocation_mode: fixed). Given caps replace the stored ones. */
12394
+ /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. Given caps replace the stored ones (a reopen keeps an elastic workspace’s mode when elastic is the organization’s default and allocation_mode is omitted). */
11630
12395
  caps?: {
11631
12396
  cpu_millis?: number;
11632
12397
  memory_mib?: number;
11633
12398
  disk_gib?: number;
11634
12399
  /**
11635
- * @description Memory allocation (contracts §32): fixed (default) boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Takes effect at the next VM start.
11636
- * @default fixed
12400
+ * @description Memory allocation (contracts §32): fixed boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Omitted: fixed, or elastic where that is the organization’s default (a reopen then keeps the stored mode). Takes effect at the next VM start.
11637
12401
  * @enum {string}
11638
12402
  */
11639
12403
  allocation_mode?: "fixed" | "elastic";
@@ -11647,7 +12411,7 @@ export interface operations {
11647
12411
  project_id?: string;
11648
12412
  /** @description Attribution label; one agent session per (workspace, principal, label). */
11649
12413
  agent_label?: string;
11650
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12414
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
11651
12415
  /** @description Secret names bound to the workspace (max 50, unique): injected as environment variables into every exec and PTY start (terminal sessions included), together with the call’s own `secret_refs`. Each must name a live secret this workspace may use (its project, its id, and allowed_tools including exec and pty), else 422 details.reason secret_not_available with details.names. */
11652
12416
  secrets?: string[];
11653
12417
  /** @description Open-time inputs of the template version (contracts §24.3): {NAME: string} for its declared text inputs. A new workspace stores each given value, else the declared default; on an existing key `inputs` replaces them all (omitted = unchanged). Secret inputs are not passed here: they bind the stored secret of the same name. 422 input_unknown (undeclared name, details.names), input_invalid (a secret input, a non-string, or a value over 4096 bytes or with CR, LF or NUL; details.names), input_required (details {names, kind}). */
@@ -11658,6 +12422,8 @@ export interface operations {
11658
12422
  /** @description adaptive (the learned timeout, default), never, or fixed:<seconds> (60..604800). Contracts §20.7. */
11659
12423
  idle_policy?: string;
11660
12424
  mode?: components["schemas"]["WorkspaceMode"];
12425
+ /** @description Contracts §45.1: the workspace’s computer use switch (null follows the template); set on create, replaced on an existing key when given. */
12426
+ computer_use?: boolean | null;
11661
12427
  };
11662
12428
  };
11663
12429
  };
@@ -11673,6 +12439,8 @@ export interface operations {
11673
12439
  operation: components["schemas"]["Operation"] | null;
11674
12440
  cell_endpoint: string | null;
11675
12441
  tool_token: components["schemas"]["ToolToken"] | null;
12442
+ /** @description Contracts §46.2: true when this request created the workspace (a new key, or a key whose session ended), false when it reconnected to or resumed an existing one. Of concurrent opens of one new key exactly one says true; a replay with the same Idempotency-Key repeats it. */
12443
+ created: boolean;
11676
12444
  };
11677
12445
  };
11678
12446
  };
@@ -11687,6 +12455,8 @@ export interface operations {
11687
12455
  operation: components["schemas"]["Operation"] | null;
11688
12456
  cell_endpoint: string | null;
11689
12457
  tool_token: components["schemas"]["ToolToken"] | null;
12458
+ /** @description Contracts §46.2: true when this request created the workspace (a new key, or a key whose session ended), false when it reconnected to or resumed an existing one. Of concurrent opens of one new key exactly one says true; a replay with the same Idempotency-Key repeats it. */
12459
+ created: boolean;
11690
12460
  };
11691
12461
  };
11692
12462
  };
@@ -12052,6 +12822,54 @@ export interface operations {
12052
12822
  };
12053
12823
  };
12054
12824
  };
12825
+ putV1WorkspacesWorkspaceIdComputerUse: {
12826
+ parameters: {
12827
+ query?: never;
12828
+ header?: never;
12829
+ path: {
12830
+ /** @description UUIDv7, lowercase canonical form. */
12831
+ workspace_id: string;
12832
+ };
12833
+ cookie?: never;
12834
+ };
12835
+ requestBody: {
12836
+ content: {
12837
+ "application/json": {
12838
+ /** @description true or false overrides the template; null follows it. */
12839
+ enabled: boolean | null;
12840
+ };
12841
+ };
12842
+ };
12843
+ responses: {
12844
+ /** @description Default Response */
12845
+ 200: {
12846
+ headers: {
12847
+ [name: string]: unknown;
12848
+ };
12849
+ content: {
12850
+ "application/json": components["schemas"]["ComputerUse"];
12851
+ };
12852
+ };
12853
+ /** @description Default Response */
12854
+ "4XX": {
12855
+ headers: {
12856
+ [name: string]: unknown;
12857
+ };
12858
+ content: {
12859
+ "application/json": components["schemas"]["ErrorBody"];
12860
+ };
12861
+ };
12862
+ /** @description Default Response */
12863
+ "5XX": {
12864
+ headers: {
12865
+ [name: string]: unknown;
12866
+ };
12867
+ content: {
12868
+ "application/json": components["schemas"]["ErrorBody"];
12869
+ };
12870
+ };
12871
+ };
12872
+ };
12055
12873
  postV1WorkspacesWorkspaceIdSuspend: {
12056
12874
  parameters: {
12057
12875
  query?: never;
@@ -12115,7 +12933,7 @@ export interface operations {
12115
12933
  "application/json": {
12116
12934
  /** @description Attribution label; one agent session per (workspace, principal, label). */
12117
12935
  agent_label?: string;
12118
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12936
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
12119
12937
  };
12120
12938
  };
12121
12939
  };
@@ -12216,6 +13034,66 @@ export interface operations {
12216
13034
  };
12217
13035
  };
12218
13036
  };
13037
+ patchV1WorkspacesWorkspaceIdCaps: {
13038
+ parameters: {
13039
+ query?: never;
13040
+ header?: {
13041
+ /** @description RFC 7240 preference, e.g. `wait=30` (at most 55; default 20). */
13042
+ prefer?: string;
13043
+ };
13044
+ path: {
13045
+ /** @description UUIDv7, lowercase canonical form. */
13046
+ workspace_id: string;
13047
+ };
13048
+ cookie?: never;
13049
+ };
13050
+ requestBody: {
13051
+ content: {
13052
+ "application/json": components["schemas"]["ResizeWorkspaceBody"];
13053
+ };
13054
+ };
13055
+ responses: {
13056
+ /** @description Per resource the request named (allocation_mode and memory_mib_held report under memory): what applied now and what applies later. caps: the workspace caps every later start uses. */
13057
+ 200: {
13058
+ headers: {
13059
+ [name: string]: unknown;
13060
+ };
13061
+ content: {
13062
+ "application/json": components["schemas"]["ResizeResult"];
13063
+ };
13064
+ };
13065
+ /** @description Default Response */
13066
+ 202: {
13067
+ headers: {
13068
+ [name: string]: unknown;
13069
+ };
13070
+ content: {
13071
+ "application/json": {
13072
+ operation: components["schemas"]["Operation"];
13073
+ workspace: components["schemas"]["Workspace"];
13074
+ };
13075
+ };
13076
+ };
13077
+ /** @description Default Response */
13078
+ "4XX": {
13079
+ headers: {
13080
+ [name: string]: unknown;
13081
+ };
13082
+ content: {
13083
+ "application/json": components["schemas"]["ErrorBody"];
13084
+ };
13085
+ };
13086
+ /** @description Default Response */
13087
+ "5XX": {
13088
+ headers: {
13089
+ [name: string]: unknown;
13090
+ };
13091
+ content: {
13092
+ "application/json": components["schemas"]["ErrorBody"];
13093
+ };
13094
+ };
13095
+ };
13096
+ };
12219
13097
  postV1WorkspacesWorkspaceIdSuspendWhenIdle: {
12220
13098
  parameters: {
12221
13099
  query?: never;
@@ -12326,14 +13204,13 @@ export interface operations {
12326
13204
  "application/json": {
12327
13205
  /** @description Stable workspace key, unique per organization (e.g. `${customerId}/${projectId}`). */
12328
13206
  key: string;
12329
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction (allocation_mode: fixed). Given caps replace the stored ones. */
13207
+ /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. Given caps replace the stored ones (a reopen keeps an elastic workspace’s mode when elastic is the organization’s default and allocation_mode is omitted). */
12330
13208
  caps?: {
12331
13209
  cpu_millis?: number;
12332
13210
  memory_mib?: number;
12333
13211
  disk_gib?: number;
12334
13212
  /**
12335
- * @description Memory allocation (contracts §32): fixed (default) boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Takes effect at the next VM start.
12336
- * @default fixed
13213
+ * @description Memory allocation (contracts §32): fixed boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Omitted: fixed, or elastic where that is the organization’s default (a reopen then keeps the stored mode). Takes effect at the next VM start.
12337
13214
  * @enum {string}
12338
13215
  */
12339
13216
  allocation_mode?: "fixed" | "elastic";
@@ -12343,7 +13220,7 @@ export interface operations {
12343
13220
  lifetime?: components["schemas"]["WorkspaceLifetime"];
12344
13221
  /** @description Attribution label; one agent session per (workspace, principal, label). */
12345
13222
  agent_label?: string;
12346
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
13223
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
12347
13224
  };
12348
13225
  };
12349
13226
  };
@@ -12651,7 +13528,7 @@ export interface operations {
12651
13528
  "application/json": {
12652
13529
  /** @description Attribution label; one agent session per (workspace, principal, label). */
12653
13530
  agent_label?: string;
12654
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
13531
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
12655
13532
  };
12656
13533
  };
12657
13534
  };
@@ -12852,14 +13729,13 @@ export interface operations {
12852
13729
  };
12853
13730
  /** @description Template slug; new workspaces use its latest published version. */
12854
13731
  template: string;
12855
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction (allocation_mode: fixed). Given caps replace the stored ones. */
13732
+ /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. Given caps replace the stored ones (a reopen keeps an elastic workspace’s mode when elastic is the organization’s default and allocation_mode is omitted). */
12856
13733
  caps?: {
12857
13734
  cpu_millis?: number;
12858
13735
  memory_mib?: number;
12859
13736
  disk_gib?: number;
12860
13737
  /**
12861
- * @description Memory allocation (contracts §32): fixed (default) boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Takes effect at the next VM start.
12862
- * @default fixed
13738
+ * @description Memory allocation (contracts §32): fixed boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Omitted: fixed, or elastic where that is the organization’s default (a reopen then keeps the stored mode). Takes effect at the next VM start.
12863
13739
  * @enum {string}
12864
13740
  */
12865
13741
  allocation_mode?: "fixed" | "elastic";
@@ -12873,7 +13749,7 @@ export interface operations {
12873
13749
  project_id?: string;
12874
13750
  /** @description Attribution label; one agent session per (workspace, principal, label). */
12875
13751
  agent_label?: string;
12876
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
13752
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
12877
13753
  /** @description Secret names bound to the workspace (max 50, unique): injected as environment variables into every exec and PTY start (terminal sessions included), together with the call’s own `secret_refs`. Each must name a live secret this workspace may use (its project, its id, and allowed_tools including exec and pty), else 422 details.reason secret_not_available with details.names. */
12878
13754
  secrets?: string[];
12879
13755
  /** @description Open-time inputs of the template version (contracts §24.3): {NAME: string} for its declared text inputs. A new workspace stores each given value, else the declared default; on an existing key `inputs` replaces them all (omitted = unchanged). Secret inputs are not passed here: they bind the stored secret of the same name. 422 input_unknown (undeclared name, details.names), input_invalid (a secret input, a non-string, or a value over 4096 bytes or with CR, LF or NUL; details.names), input_required (details {names, kind}). */
@@ -12884,6 +13760,8 @@ export interface operations {
12884
13760
  /** @description adaptive (the learned timeout, default), never, or fixed:<seconds> (60..604800). Contracts §20.7. */
12885
13761
  idle_policy?: string;
12886
13762
  mode?: components["schemas"]["WorkspaceMode"];
13763
+ /** @description Contracts §45.1: the workspace’s computer use switch (null follows the template); set on create, replaced on an existing key when given. */
13764
+ computer_use?: boolean | null;
12887
13765
  };
12888
13766
  };
12889
13767
  };
@@ -12899,6 +13777,8 @@ export interface operations {
12899
13777
  operation: components["schemas"]["Operation"] | null;
12900
13778
  cell_endpoint: string | null;
12901
13779
  tool_token: components["schemas"]["ToolToken"] | null;
13780
+ /** @description Contracts §46.2: true when this request created the workspace (a new key, or a key whose session ended), false when it reconnected to or resumed an existing one. Of concurrent opens of one new key exactly one says true; a replay with the same Idempotency-Key repeats it. */
13781
+ created: boolean;
12902
13782
  };
12903
13783
  };
12904
13784
  };
@@ -12913,6 +13793,8 @@ export interface operations {
12913
13793
  operation: components["schemas"]["Operation"] | null;
12914
13794
  cell_endpoint: string | null;
12915
13795
  tool_token: components["schemas"]["ToolToken"] | null;
13796
+ /** @description Contracts §46.2: true when this request created the workspace (a new key, or a key whose session ended), false when it reconnected to or resumed an existing one. Of concurrent opens of one new key exactly one says true; a replay with the same Idempotency-Key repeats it. */
13797
+ created: boolean;
12916
13798
  };
12917
13799
  };
12918
13800
  };
@@ -13278,121 +14160,7 @@ export interface operations {
13278
14160
  };
13279
14161
  };
13280
14162
  };
13281
- postApiV1WorkspacesWorkspaceIdSuspend: {
13282
- parameters: {
13283
- query?: never;
13284
- header?: never;
13285
- path: {
13286
- /** @description UUIDv7, lowercase canonical form. */
13287
- workspace_id: string;
13288
- };
13289
- cookie?: never;
13290
- };
13291
- requestBody?: never;
13292
- responses: {
13293
- /** @description Default Response */
13294
- 202: {
13295
- headers: {
13296
- [name: string]: unknown;
13297
- };
13298
- content: {
13299
- "application/json": {
13300
- operation: components["schemas"]["Operation"];
13301
- workspace: components["schemas"]["Workspace"];
13302
- };
13303
- };
13304
- };
13305
- /** @description Default Response */
13306
- "4XX": {
13307
- headers: {
13308
- [name: string]: unknown;
13309
- };
13310
- content: {
13311
- "application/json": components["schemas"]["ErrorBody"];
13312
- };
13313
- };
13314
- /** @description Default Response */
13315
- "5XX": {
13316
- headers: {
13317
- [name: string]: unknown;
13318
- };
13319
- content: {
13320
- "application/json": components["schemas"]["ErrorBody"];
13321
- };
13322
- };
13323
- };
13324
- };
13325
- postApiV1WorkspacesWorkspaceIdResume: {
13326
- parameters: {
13327
- query?: never;
13328
- header?: {
13329
- /** @description RFC 7240 preference, e.g. `wait=20` (held resume). */
13330
- prefer?: string;
13331
- };
13332
- path: {
13333
- /** @description UUIDv7, lowercase canonical form. */
13334
- workspace_id: string;
13335
- };
13336
- cookie?: never;
13337
- };
13338
- /** @description The tool token a held resume returns (as for open): agent label and tools (default all the principal may use). */
13339
- requestBody?: {
13340
- content: {
13341
- "application/json": {
13342
- /** @description Attribution label; one agent session per (workspace, principal, label). */
13343
- agent_label?: string;
13344
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
13345
- };
13346
- };
13347
- };
13348
- responses: {
13349
- /** @description Held resume (`Prefer: wait`) that ended with the workspace running: the view, the succeeded resume (or the joined open/resume; null when the workspace was already running) and a tool token for the requested tools (null when one could not be issued: request it from POST …/tool-tokens). */
13350
- 200: {
13351
- headers: {
13352
- [name: string]: unknown;
13353
- };
13354
- content: {
13355
- "application/json": {
13356
- workspace: components["schemas"]["Workspace"];
13357
- operation: components["schemas"]["Operation"] | null;
13358
- cell_endpoint: string | null;
13359
- tool_token: components["schemas"]["ToolToken"] | null;
13360
- };
13361
- };
13362
- };
13363
- /** @description Default Response */
13364
- 202: {
13365
- headers: {
13366
- [name: string]: unknown;
13367
- };
13368
- content: {
13369
- "application/json": {
13370
- operation: components["schemas"]["Operation"];
13371
- workspace: components["schemas"]["Workspace"];
13372
- };
13373
- };
13374
- };
13375
- /** @description Default Response */
13376
- "4XX": {
13377
- headers: {
13378
- [name: string]: unknown;
13379
- };
13380
- content: {
13381
- "application/json": components["schemas"]["ErrorBody"];
13382
- };
13383
- };
13384
- /** @description Default Response */
13385
- "5XX": {
13386
- headers: {
13387
- [name: string]: unknown;
13388
- };
13389
- content: {
13390
- "application/json": components["schemas"]["ErrorBody"];
13391
- };
13392
- };
13393
- };
13394
- };
13395
- postApiV1WorkspacesWorkspaceIdSnapshot: {
14163
+ putApiV1WorkspacesWorkspaceIdComputerUse: {
13396
14164
  parameters: {
13397
14165
  query?: never;
13398
14166
  header?: never;
@@ -13405,21 +14173,243 @@ export interface operations {
13405
14173
  requestBody: {
13406
14174
  content: {
13407
14175
  "application/json": {
13408
- label?: string;
14176
+ /** @description true or false overrides the template; null follows it. */
14177
+ enabled: boolean | null;
13409
14178
  };
13410
14179
  };
13411
14180
  };
13412
14181
  responses: {
13413
14182
  /** @description Default Response */
13414
- 202: {
14183
+ 200: {
13415
14184
  headers: {
13416
14185
  [name: string]: unknown;
13417
14186
  };
13418
14187
  content: {
13419
- "application/json": {
13420
- operation: components["schemas"]["Operation"];
13421
- workspace: components["schemas"]["Workspace"];
13422
- };
14188
+ "application/json": components["schemas"]["ComputerUse"];
14189
+ };
14190
+ };
14191
+ /** @description Default Response */
14192
+ "4XX": {
14193
+ headers: {
14194
+ [name: string]: unknown;
14195
+ };
14196
+ content: {
14197
+ "application/json": components["schemas"]["ErrorBody"];
14198
+ };
14199
+ };
14200
+ /** @description Default Response */
14201
+ "5XX": {
14202
+ headers: {
14203
+ [name: string]: unknown;
14204
+ };
14205
+ content: {
14206
+ "application/json": components["schemas"]["ErrorBody"];
14207
+ };
14208
+ };
14209
+ };
14210
+ };
14211
+ postApiV1WorkspacesWorkspaceIdSuspend: {
14212
+ parameters: {
14213
+ query?: never;
14214
+ header?: never;
14215
+ path: {
14216
+ /** @description UUIDv7, lowercase canonical form. */
14217
+ workspace_id: string;
14218
+ };
14219
+ cookie?: never;
14220
+ };
14221
+ requestBody?: never;
14222
+ responses: {
14223
+ /** @description Default Response */
14224
+ 202: {
14225
+ headers: {
14226
+ [name: string]: unknown;
14227
+ };
14228
+ content: {
14229
+ "application/json": {
14230
+ operation: components["schemas"]["Operation"];
14231
+ workspace: components["schemas"]["Workspace"];
14232
+ };
14233
+ };
14234
+ };
14235
+ /** @description Default Response */
14236
+ "4XX": {
14237
+ headers: {
14238
+ [name: string]: unknown;
14239
+ };
14240
+ content: {
14241
+ "application/json": components["schemas"]["ErrorBody"];
14242
+ };
14243
+ };
14244
+ /** @description Default Response */
14245
+ "5XX": {
14246
+ headers: {
14247
+ [name: string]: unknown;
14248
+ };
14249
+ content: {
14250
+ "application/json": components["schemas"]["ErrorBody"];
14251
+ };
14252
+ };
14253
+ };
14254
+ };
14255
+ postApiV1WorkspacesWorkspaceIdResume: {
14256
+ parameters: {
14257
+ query?: never;
14258
+ header?: {
14259
+ /** @description RFC 7240 preference, e.g. `wait=20` (held resume). */
14260
+ prefer?: string;
14261
+ };
14262
+ path: {
14263
+ /** @description UUIDv7, lowercase canonical form. */
14264
+ workspace_id: string;
14265
+ };
14266
+ cookie?: never;
14267
+ };
14268
+ /** @description The tool token a held resume returns (as for open): agent label and tools (default all the principal may use). */
14269
+ requestBody?: {
14270
+ content: {
14271
+ "application/json": {
14272
+ /** @description Attribution label; one agent session per (workspace, principal, label). */
14273
+ agent_label?: string;
14274
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
14275
+ };
14276
+ };
14277
+ };
14278
+ responses: {
14279
+ /** @description Held resume (`Prefer: wait`) that ended with the workspace running: the view, the succeeded resume (or the joined open/resume; null when the workspace was already running) and a tool token for the requested tools (null when one could not be issued: request it from POST …/tool-tokens). */
14280
+ 200: {
14281
+ headers: {
14282
+ [name: string]: unknown;
14283
+ };
14284
+ content: {
14285
+ "application/json": {
14286
+ workspace: components["schemas"]["Workspace"];
14287
+ operation: components["schemas"]["Operation"] | null;
14288
+ cell_endpoint: string | null;
14289
+ tool_token: components["schemas"]["ToolToken"] | null;
14290
+ };
14291
+ };
14292
+ };
14293
+ /** @description Default Response */
14294
+ 202: {
14295
+ headers: {
14296
+ [name: string]: unknown;
14297
+ };
14298
+ content: {
14299
+ "application/json": {
14300
+ operation: components["schemas"]["Operation"];
14301
+ workspace: components["schemas"]["Workspace"];
14302
+ };
14303
+ };
14304
+ };
14305
+ /** @description Default Response */
14306
+ "4XX": {
14307
+ headers: {
14308
+ [name: string]: unknown;
14309
+ };
14310
+ content: {
14311
+ "application/json": components["schemas"]["ErrorBody"];
14312
+ };
14313
+ };
14314
+ /** @description Default Response */
14315
+ "5XX": {
14316
+ headers: {
14317
+ [name: string]: unknown;
14318
+ };
14319
+ content: {
14320
+ "application/json": components["schemas"]["ErrorBody"];
14321
+ };
14322
+ };
14323
+ };
14324
+ };
14325
+ postApiV1WorkspacesWorkspaceIdSnapshot: {
14326
+ parameters: {
14327
+ query?: never;
14328
+ header?: never;
14329
+ path: {
14330
+ /** @description UUIDv7, lowercase canonical form. */
14331
+ workspace_id: string;
14332
+ };
14333
+ cookie?: never;
14334
+ };
14335
+ requestBody: {
14336
+ content: {
14337
+ "application/json": {
14338
+ label?: string;
14339
+ };
14340
+ };
14341
+ };
14342
+ responses: {
14343
+ /** @description Default Response */
14344
+ 202: {
14345
+ headers: {
14346
+ [name: string]: unknown;
14347
+ };
14348
+ content: {
14349
+ "application/json": {
14350
+ operation: components["schemas"]["Operation"];
14351
+ workspace: components["schemas"]["Workspace"];
14352
+ };
14353
+ };
14354
+ };
14355
+ /** @description Default Response */
14356
+ "4XX": {
14357
+ headers: {
14358
+ [name: string]: unknown;
14359
+ };
14360
+ content: {
14361
+ "application/json": components["schemas"]["ErrorBody"];
14362
+ };
14363
+ };
14364
+ /** @description Default Response */
14365
+ "5XX": {
14366
+ headers: {
14367
+ [name: string]: unknown;
14368
+ };
14369
+ content: {
14370
+ "application/json": components["schemas"]["ErrorBody"];
14371
+ };
14372
+ };
14373
+ };
14374
+ };
14375
+ patchApiV1WorkspacesWorkspaceIdCaps: {
14376
+ parameters: {
14377
+ query?: never;
14378
+ header?: {
14379
+ /** @description RFC 7240 preference, e.g. `wait=30` (at most 55; default 20). */
14380
+ prefer?: string;
14381
+ };
14382
+ path: {
14383
+ /** @description UUIDv7, lowercase canonical form. */
14384
+ workspace_id: string;
14385
+ };
14386
+ cookie?: never;
14387
+ };
14388
+ requestBody: {
14389
+ content: {
14390
+ "application/json": components["schemas"]["ResizeWorkspaceBody"];
14391
+ };
14392
+ };
14393
+ responses: {
14394
+ /** @description Per resource the request named (allocation_mode and memory_mib_held report under memory): what applied now and what applies later. caps: the workspace caps every later start uses. */
14395
+ 200: {
14396
+ headers: {
14397
+ [name: string]: unknown;
14398
+ };
14399
+ content: {
14400
+ "application/json": components["schemas"]["ResizeResult"];
14401
+ };
14402
+ };
14403
+ /** @description Default Response */
14404
+ 202: {
14405
+ headers: {
14406
+ [name: string]: unknown;
14407
+ };
14408
+ content: {
14409
+ "application/json": {
14410
+ operation: components["schemas"]["Operation"];
14411
+ workspace: components["schemas"]["Workspace"];
14412
+ };
13423
14413
  };
13424
14414
  };
13425
14415
  /** @description Default Response */
@@ -13552,14 +14542,13 @@ export interface operations {
13552
14542
  "application/json": {
13553
14543
  /** @description Stable workspace key, unique per organization (e.g. `${customerId}/${projectId}`). */
13554
14544
  key: string;
13555
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction (allocation_mode: fixed). Given caps replace the stored ones. */
14545
+ /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. Given caps replace the stored ones (a reopen keeps an elastic workspace’s mode when elastic is the organization’s default and allocation_mode is omitted). */
13556
14546
  caps?: {
13557
14547
  cpu_millis?: number;
13558
14548
  memory_mib?: number;
13559
14549
  disk_gib?: number;
13560
14550
  /**
13561
- * @description Memory allocation (contracts §32): fixed (default) boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Takes effect at the next VM start.
13562
- * @default fixed
14551
+ * @description Memory allocation (contracts §32): fixed boots memory_mib and holds it; elastic makes memory_mib a promise: the VM holds memory_mib_held while idle and is grown towards the promise when a command needs it. Needs the elastic memory entitlement (422 details.reason allocation_mode_not_available). A promise that does not exceed the held floor by at least 512 MiB is fixed at the promise (the response caps say which). Omitted: fixed, or elastic where that is the organization’s default (a reopen then keeps the stored mode). Takes effect at the next VM start.
13563
14552
  * @enum {string}
13564
14553
  */
13565
14554
  allocation_mode?: "fixed" | "elastic";
@@ -13569,7 +14558,7 @@ export interface operations {
13569
14558
  lifetime?: components["schemas"]["WorkspaceLifetime"];
13570
14559
  /** @description Attribution label; one agent session per (workspace, principal, label). */
13571
14560
  agent_label?: string;
13572
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
14561
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
13573
14562
  };
13574
14563
  };
13575
14564
  };
@@ -13877,7 +14866,7 @@ export interface operations {
13877
14866
  "application/json": {
13878
14867
  /** @description Attribution label; one agent session per (workspace, principal, label). */
13879
14868
  agent_label?: string;
13880
- tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
14869
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser" | "computer")[];
13881
14870
  };
13882
14871
  };
13883
14872
  };
@@ -14024,8 +15013,11 @@ export interface operations {
14024
15013
  * @description UUIDv7, lowercase canonical form.
14025
15014
  */
14026
15015
  workspace_id: string;
14027
- /** @enum {string} */
14028
- tool: "exec" | "files" | "pty" | "process" | "git" | "browser";
15016
+ /**
15017
+ * @description computer (contracts §45): the workspace desktop; a tool token carries it only while the workspace’s computer use is on.
15018
+ * @enum {string}
15019
+ */
15020
+ tool: "exec" | "files" | "pty" | "process" | "git" | "browser" | "computer";
14029
15021
  /**
14030
15022
  * Format: uuid
14031
15023
  * @description UUIDv7, lowercase canonical form.
@@ -14130,34 +15122,36 @@ export interface operations {
14130
15122
  };
14131
15123
  };
14132
15124
  };
14133
- getV1ProjectsProjectIdVolumes: {
15125
+ putV1WorkspacesWorkspaceIdPortsPort: {
14134
15126
  parameters: {
14135
- query?: {
14136
- limit?: number;
14137
- cursor?: string;
14138
- /** @description Also list org-shared volumes owned by other projects of the organization (attachable here). */
14139
- include_org_shared?: boolean;
14140
- include_deleted?: boolean;
14141
- };
15127
+ query?: never;
14142
15128
  header?: never;
14143
15129
  path: {
14144
15130
  /** @description UUIDv7, lowercase canonical form. */
14145
- project_id: string;
15131
+ workspace_id: string;
15132
+ /** @description TCP port inside the workspace (1-65535). */
15133
+ port: number;
14146
15134
  };
14147
15135
  cookie?: never;
14148
15136
  };
14149
15137
  requestBody?: never;
14150
15138
  responses: {
14151
- /** @description Default Response */
15139
+ /** @description An exposed port of a workspace (contracts §39.3). Private: every request needs a credential. */
14152
15140
  200: {
14153
15141
  headers: {
14154
15142
  [name: string]: unknown;
14155
15143
  };
14156
15144
  content: {
14157
- "application/json": {
14158
- data: components["schemas"]["Volume"][];
14159
- next_cursor: string | null;
14160
- };
15145
+ "application/json": components["schemas"]["Port"];
15146
+ };
15147
+ };
15148
+ /** @description An exposed port of a workspace (contracts §39.3). Private: every request needs a credential. */
15149
+ 201: {
15150
+ headers: {
15151
+ [name: string]: unknown;
15152
+ };
15153
+ content: {
15154
+ "application/json": components["schemas"]["Port"];
14161
15155
  };
14162
15156
  };
14163
15157
  /** @description Default Response */
@@ -14180,39 +15174,26 @@ export interface operations {
14180
15174
  };
14181
15175
  };
14182
15176
  };
14183
- postV1ProjectsProjectIdVolumes: {
15177
+ deleteV1WorkspacesWorkspaceIdPortsPort: {
14184
15178
  parameters: {
14185
15179
  query?: never;
14186
15180
  header?: never;
14187
15181
  path: {
14188
15182
  /** @description UUIDv7, lowercase canonical form. */
14189
- project_id: string;
15183
+ workspace_id: string;
15184
+ /** @description TCP port inside the workspace (1-65535). */
15185
+ port: number;
14190
15186
  };
14191
15187
  cookie?: never;
14192
15188
  };
14193
- requestBody: {
14194
- content: {
14195
- "application/json": {
14196
- /** @description Unique among the project’s live volumes. */
14197
- name: string;
14198
- quota_gib: number;
14199
- /** @default false */
14200
- org_shared?: boolean;
14201
- };
14202
- };
14203
- };
15189
+ requestBody?: never;
14204
15190
  responses: {
14205
- /** @description Default Response */
14206
- 202: {
15191
+ /** @description No content. */
15192
+ 204: {
14207
15193
  headers: {
14208
15194
  [name: string]: unknown;
14209
15195
  };
14210
- content: {
14211
- "application/json": {
14212
- volume: components["schemas"]["Volume"];
14213
- operation: components["schemas"]["Operation"];
14214
- };
14215
- };
15196
+ content?: never;
14216
15197
  };
14217
15198
  /** @description Default Response */
14218
15199
  "4XX": {
@@ -14234,15 +15215,13 @@ export interface operations {
14234
15215
  };
14235
15216
  };
14236
15217
  };
14237
- getV1ProjectsProjectIdVolumesVolumeId: {
15218
+ getV1WorkspacesWorkspaceIdPorts: {
14238
15219
  parameters: {
14239
15220
  query?: never;
14240
15221
  header?: never;
14241
15222
  path: {
14242
15223
  /** @description UUIDv7, lowercase canonical form. */
14243
- project_id: string;
14244
- /** @description UUIDv7, lowercase canonical form. */
14245
- volume_id: string;
15224
+ workspace_id: string;
14246
15225
  };
14247
15226
  cookie?: never;
14248
15227
  };
@@ -14254,7 +15233,9 @@ export interface operations {
14254
15233
  [name: string]: unknown;
14255
15234
  };
14256
15235
  content: {
14257
- "application/json": components["schemas"]["Volume"];
15236
+ "application/json": {
15237
+ ports: components["schemas"]["Port"][];
15238
+ };
14258
15239
  };
14259
15240
  };
14260
15241
  /** @description Default Response */
@@ -14277,32 +15258,46 @@ export interface operations {
14277
15258
  };
14278
15259
  };
14279
15260
  };
14280
- deleteV1ProjectsProjectIdVolumesVolumeId: {
15261
+ postV1WorkspacesWorkspaceIdPortsPortTokens: {
14281
15262
  parameters: {
14282
- query?: {
14283
- force?: boolean;
14284
- confirm_name?: string;
14285
- };
15263
+ query?: never;
14286
15264
  header?: never;
14287
15265
  path: {
14288
15266
  /** @description UUIDv7, lowercase canonical form. */
14289
- project_id: string;
14290
- /** @description UUIDv7, lowercase canonical form. */
14291
- volume_id: string;
15267
+ workspace_id: string;
15268
+ /** @description TCP port inside the workspace (1-65535). */
15269
+ port: number;
14292
15270
  };
14293
15271
  cookie?: never;
14294
15272
  };
14295
- requestBody?: never;
15273
+ requestBody?: {
15274
+ content: {
15275
+ "application/json": {
15276
+ /**
15277
+ * @description Lifetime in seconds (60-86400, default 3600).
15278
+ * @default 3600
15279
+ */
15280
+ ttl_seconds?: number;
15281
+ };
15282
+ };
15283
+ };
14296
15284
  responses: {
14297
15285
  /** @description Default Response */
14298
- 202: {
15286
+ 201: {
14299
15287
  headers: {
14300
15288
  [name: string]: unknown;
14301
15289
  };
14302
15290
  content: {
14303
15291
  "application/json": {
14304
- volume: components["schemas"]["Volume"];
14305
- operation: components["schemas"]["Operation"];
15292
+ /** @description sfp_…: send as `Authorization: Bearer <token>` (or `X-Shardflux-Token`) to `url`. Revoked when the port is closed. */
15293
+ token: string;
15294
+ /**
15295
+ * Format: date-time
15296
+ * @description RFC 3339 UTC timestamp with Z.
15297
+ */
15298
+ expires_at: string;
15299
+ /** @description The port’s URL. */
15300
+ url: string;
14306
15301
  };
14307
15302
  };
14308
15303
  };
@@ -14326,33 +15321,46 @@ export interface operations {
14326
15321
  };
14327
15322
  };
14328
15323
  };
14329
- getV1ProjectsProjectIdVolumesVolumeIdAttachments: {
15324
+ postV1WorkspacesWorkspaceIdPortsPortLinks: {
14330
15325
  parameters: {
14331
- query?: {
14332
- limit?: number;
14333
- cursor?: string;
14334
- include_detached?: boolean;
14335
- };
15326
+ query?: never;
14336
15327
  header?: never;
14337
15328
  path: {
14338
15329
  /** @description UUIDv7, lowercase canonical form. */
14339
- project_id: string;
14340
- /** @description UUIDv7, lowercase canonical form. */
14341
- volume_id: string;
15330
+ workspace_id: string;
15331
+ /** @description TCP port inside the workspace (1-65535). */
15332
+ port: number;
14342
15333
  };
14343
15334
  cookie?: never;
14344
15335
  };
14345
- requestBody?: never;
15336
+ requestBody?: {
15337
+ content: {
15338
+ "application/json": {
15339
+ /**
15340
+ * @description Lifetime of the link and of the browser session it starts (60-604800 s, default 86400).
15341
+ * @default 86400
15342
+ */
15343
+ ttl_seconds?: number;
15344
+ /** @description Where the link lands (default `/`): a path starting with one `/`, printable ASCII, query allowed. */
15345
+ path?: string;
15346
+ };
15347
+ };
15348
+ };
14346
15349
  responses: {
14347
15350
  /** @description Default Response */
14348
- 200: {
15351
+ 201: {
14349
15352
  headers: {
14350
15353
  [name: string]: unknown;
14351
15354
  };
14352
15355
  content: {
14353
15356
  "application/json": {
14354
- data: components["schemas"]["VolumeAttachment"][];
14355
- next_cursor: string | null;
15357
+ /** @description Open in a browser: it sets a session cookie for the port’s host (until expires_at) and redirects to `path`. */
15358
+ url: string;
15359
+ /**
15360
+ * Format: date-time
15361
+ * @description RFC 3339 UTC timestamp with Z.
15362
+ */
15363
+ expires_at: string;
14356
15364
  };
14357
15365
  };
14358
15366
  };
@@ -14376,31 +15384,34 @@ export interface operations {
14376
15384
  };
14377
15385
  };
14378
15386
  };
14379
- getV1WorkspacesWorkspaceIdVolumes: {
15387
+ postV1WorkspacesWorkspaceIdPortsPortCallback: {
14380
15388
  parameters: {
14381
- query?: {
14382
- limit?: number;
14383
- cursor?: string;
14384
- include_detached?: boolean;
14385
- };
15389
+ query?: never;
14386
15390
  header?: never;
14387
15391
  path: {
14388
15392
  /** @description UUIDv7, lowercase canonical form. */
14389
15393
  workspace_id: string;
15394
+ /** @description TCP port inside the workspace (1-65535). */
15395
+ port: number;
14390
15396
  };
14391
15397
  cookie?: never;
14392
15398
  };
14393
15399
  requestBody?: never;
14394
15400
  responses: {
14395
15401
  /** @description Default Response */
14396
- 200: {
15402
+ 201: {
14397
15403
  headers: {
14398
15404
  [name: string]: unknown;
14399
15405
  };
14400
15406
  content: {
14401
15407
  "application/json": {
14402
- data: components["schemas"]["VolumeAttachment"][];
14403
- next_cursor: string | null;
15408
+ /** @description https://<port>-<handle>.<domain>/__shardflux/callback/sfcb_…/: append your own path. Shown once. */
15409
+ url: string;
15410
+ /**
15411
+ * Format: date-time
15412
+ * @description RFC 3339 UTC timestamp with Z.
15413
+ */
15414
+ created_at: string;
14404
15415
  };
14405
15416
  };
14406
15417
  };
@@ -14424,57 +15435,77 @@ export interface operations {
14424
15435
  };
14425
15436
  };
14426
15437
  };
14427
- postV1WorkspacesWorkspaceIdVolumes: {
15438
+ deleteV1WorkspacesWorkspaceIdPortsPortCallback: {
14428
15439
  parameters: {
14429
15440
  query?: never;
14430
15441
  header?: never;
14431
15442
  path: {
14432
15443
  /** @description UUIDv7, lowercase canonical form. */
14433
15444
  workspace_id: string;
15445
+ /** @description TCP port inside the workspace (1-65535). */
15446
+ port: number;
14434
15447
  };
14435
15448
  cookie?: never;
14436
15449
  };
14437
- requestBody: {
14438
- content: {
14439
- "application/json": {
14440
- /**
14441
- * Format: uuid
14442
- * @description UUIDv7, lowercase canonical form.
14443
- */
14444
- volume_id: string;
14445
- /** @description Absolute guest path (e.g. /mnt/data); segments of A-Z a-z 0-9 . _ - not starting with "."; system directories (/etc, /usr, /proc, /tmp, /var, ...) and nesting with another mount are refused. */
14446
- mount_path: string;
14447
- /**
14448
- * @default rw
14449
- * @enum {string}
14450
- */
14451
- mode?: "ro" | "rw";
15450
+ requestBody?: never;
15451
+ responses: {
15452
+ /** @description No content. */
15453
+ 204: {
15454
+ headers: {
15455
+ [name: string]: unknown;
15456
+ };
15457
+ content?: never;
15458
+ };
15459
+ /** @description Default Response */
15460
+ "4XX": {
15461
+ headers: {
15462
+ [name: string]: unknown;
15463
+ };
15464
+ content: {
15465
+ "application/json": components["schemas"]["ErrorBody"];
14452
15466
  };
14453
15467
  };
15468
+ /** @description Default Response */
15469
+ "5XX": {
15470
+ headers: {
15471
+ [name: string]: unknown;
15472
+ };
15473
+ content: {
15474
+ "application/json": components["schemas"]["ErrorBody"];
15475
+ };
15476
+ };
15477
+ };
15478
+ };
15479
+ putApiV1WorkspacesWorkspaceIdPortsPort: {
15480
+ parameters: {
15481
+ query?: never;
15482
+ header?: never;
15483
+ path: {
15484
+ /** @description UUIDv7, lowercase canonical form. */
15485
+ workspace_id: string;
15486
+ /** @description TCP port inside the workspace (1-65535). */
15487
+ port: number;
15488
+ };
15489
+ cookie?: never;
14454
15490
  };
15491
+ requestBody?: never;
14455
15492
  responses: {
14456
- /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
15493
+ /** @description An exposed port of a workspace (contracts §39.3). Private: every request needs a credential. */
14457
15494
  200: {
14458
15495
  headers: {
14459
15496
  [name: string]: unknown;
14460
15497
  };
14461
15498
  content: {
14462
- "application/json": {
14463
- attachment: components["schemas"]["VolumeAttachment"];
14464
- operation: components["schemas"]["Operation"] | null;
14465
- };
15499
+ "application/json": components["schemas"]["Port"];
14466
15500
  };
14467
15501
  };
14468
- /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
14469
- 202: {
15502
+ /** @description An exposed port of a workspace (contracts §39.3). Private: every request needs a credential. */
15503
+ 201: {
14470
15504
  headers: {
14471
15505
  [name: string]: unknown;
14472
15506
  };
14473
15507
  content: {
14474
- "application/json": {
14475
- attachment: components["schemas"]["VolumeAttachment"];
14476
- operation: components["schemas"]["Operation"] | null;
14477
- };
15508
+ "application/json": components["schemas"]["Port"];
14478
15509
  };
14479
15510
  };
14480
15511
  /** @description Default Response */
@@ -14497,31 +15528,26 @@ export interface operations {
14497
15528
  };
14498
15529
  };
14499
15530
  };
14500
- deleteV1WorkspacesWorkspaceIdVolumesVolumeId: {
15531
+ deleteApiV1WorkspacesWorkspaceIdPortsPort: {
14501
15532
  parameters: {
14502
15533
  query?: never;
14503
15534
  header?: never;
14504
15535
  path: {
14505
15536
  /** @description UUIDv7, lowercase canonical form. */
14506
15537
  workspace_id: string;
14507
- /** @description UUIDv7, lowercase canonical form. */
14508
- volume_id: string;
15538
+ /** @description TCP port inside the workspace (1-65535). */
15539
+ port: number;
14509
15540
  };
14510
15541
  cookie?: never;
14511
15542
  };
14512
15543
  requestBody?: never;
14513
15544
  responses: {
14514
- /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
14515
- 202: {
15545
+ /** @description No content. */
15546
+ 204: {
14516
15547
  headers: {
14517
15548
  [name: string]: unknown;
14518
15549
  };
14519
- content: {
14520
- "application/json": {
14521
- attachment: components["schemas"]["VolumeAttachment"];
14522
- operation: components["schemas"]["Operation"] | null;
14523
- };
14524
- };
15550
+ content?: never;
14525
15551
  };
14526
15552
  /** @description Default Response */
14527
15553
  "4XX": {
@@ -14543,19 +15569,13 @@ export interface operations {
14543
15569
  };
14544
15570
  };
14545
15571
  };
14546
- getApiV1ProjectsProjectIdVolumes: {
15572
+ getApiV1WorkspacesWorkspaceIdPorts: {
14547
15573
  parameters: {
14548
- query?: {
14549
- limit?: number;
14550
- cursor?: string;
14551
- /** @description Also list org-shared volumes owned by other projects of the organization (attachable here). */
14552
- include_org_shared?: boolean;
14553
- include_deleted?: boolean;
14554
- };
15574
+ query?: never;
14555
15575
  header?: never;
14556
15576
  path: {
14557
15577
  /** @description UUIDv7, lowercase canonical form. */
14558
- project_id: string;
15578
+ workspace_id: string;
14559
15579
  };
14560
15580
  cookie?: never;
14561
15581
  };
@@ -14568,8 +15588,7 @@ export interface operations {
14568
15588
  };
14569
15589
  content: {
14570
15590
  "application/json": {
14571
- data: components["schemas"]["Volume"][];
14572
- next_cursor: string | null;
15591
+ ports: components["schemas"]["Port"][];
14573
15592
  };
14574
15593
  };
14575
15594
  };
@@ -14593,37 +15612,46 @@ export interface operations {
14593
15612
  };
14594
15613
  };
14595
15614
  };
14596
- postApiV1ProjectsProjectIdVolumes: {
15615
+ postApiV1WorkspacesWorkspaceIdPortsPortTokens: {
14597
15616
  parameters: {
14598
15617
  query?: never;
14599
15618
  header?: never;
14600
15619
  path: {
14601
15620
  /** @description UUIDv7, lowercase canonical form. */
14602
- project_id: string;
15621
+ workspace_id: string;
15622
+ /** @description TCP port inside the workspace (1-65535). */
15623
+ port: number;
14603
15624
  };
14604
15625
  cookie?: never;
14605
15626
  };
14606
- requestBody: {
15627
+ requestBody?: {
14607
15628
  content: {
14608
15629
  "application/json": {
14609
- /** @description Unique among the project’s live volumes. */
14610
- name: string;
14611
- quota_gib: number;
14612
- /** @default false */
14613
- org_shared?: boolean;
15630
+ /**
15631
+ * @description Lifetime in seconds (60-86400, default 3600).
15632
+ * @default 3600
15633
+ */
15634
+ ttl_seconds?: number;
14614
15635
  };
14615
15636
  };
14616
15637
  };
14617
15638
  responses: {
14618
15639
  /** @description Default Response */
14619
- 202: {
15640
+ 201: {
14620
15641
  headers: {
14621
15642
  [name: string]: unknown;
14622
15643
  };
14623
15644
  content: {
14624
15645
  "application/json": {
14625
- volume: components["schemas"]["Volume"];
14626
- operation: components["schemas"]["Operation"];
15646
+ /** @description sfp_…: send as `Authorization: Bearer <token>` (or `X-Shardflux-Token`) to `url`. Revoked when the port is closed. */
15647
+ token: string;
15648
+ /**
15649
+ * Format: date-time
15650
+ * @description RFC 3339 UTC timestamp with Z.
15651
+ */
15652
+ expires_at: string;
15653
+ /** @description The port’s URL. */
15654
+ url: string;
14627
15655
  };
14628
15656
  };
14629
15657
  };
@@ -14647,27 +15675,47 @@ export interface operations {
14647
15675
  };
14648
15676
  };
14649
15677
  };
14650
- getApiV1ProjectsProjectIdVolumesVolumeId: {
15678
+ postApiV1WorkspacesWorkspaceIdPortsPortLinks: {
14651
15679
  parameters: {
14652
15680
  query?: never;
14653
15681
  header?: never;
14654
15682
  path: {
14655
15683
  /** @description UUIDv7, lowercase canonical form. */
14656
- project_id: string;
14657
- /** @description UUIDv7, lowercase canonical form. */
14658
- volume_id: string;
15684
+ workspace_id: string;
15685
+ /** @description TCP port inside the workspace (1-65535). */
15686
+ port: number;
14659
15687
  };
14660
15688
  cookie?: never;
14661
15689
  };
14662
- requestBody?: never;
15690
+ requestBody?: {
15691
+ content: {
15692
+ "application/json": {
15693
+ /**
15694
+ * @description Lifetime of the link and of the browser session it starts (60-604800 s, default 86400).
15695
+ * @default 86400
15696
+ */
15697
+ ttl_seconds?: number;
15698
+ /** @description Where the link lands (default `/`): a path starting with one `/`, printable ASCII, query allowed. */
15699
+ path?: string;
15700
+ };
15701
+ };
15702
+ };
14663
15703
  responses: {
14664
15704
  /** @description Default Response */
14665
- 200: {
15705
+ 201: {
14666
15706
  headers: {
14667
15707
  [name: string]: unknown;
14668
15708
  };
14669
15709
  content: {
14670
- "application/json": components["schemas"]["Volume"];
15710
+ "application/json": {
15711
+ /** @description Open in a browser: it sets a session cookie for the port’s host (until expires_at) and redirects to `path`. */
15712
+ url: string;
15713
+ /**
15714
+ * Format: date-time
15715
+ * @description RFC 3339 UTC timestamp with Z.
15716
+ */
15717
+ expires_at: string;
15718
+ };
14671
15719
  };
14672
15720
  };
14673
15721
  /** @description Default Response */
@@ -14690,32 +15738,34 @@ export interface operations {
14690
15738
  };
14691
15739
  };
14692
15740
  };
14693
- deleteApiV1ProjectsProjectIdVolumesVolumeId: {
15741
+ postApiV1WorkspacesWorkspaceIdPortsPortCallback: {
14694
15742
  parameters: {
14695
- query?: {
14696
- force?: boolean;
14697
- confirm_name?: string;
14698
- };
15743
+ query?: never;
14699
15744
  header?: never;
14700
15745
  path: {
14701
15746
  /** @description UUIDv7, lowercase canonical form. */
14702
- project_id: string;
14703
- /** @description UUIDv7, lowercase canonical form. */
14704
- volume_id: string;
15747
+ workspace_id: string;
15748
+ /** @description TCP port inside the workspace (1-65535). */
15749
+ port: number;
14705
15750
  };
14706
15751
  cookie?: never;
14707
15752
  };
14708
15753
  requestBody?: never;
14709
15754
  responses: {
14710
15755
  /** @description Default Response */
14711
- 202: {
15756
+ 201: {
14712
15757
  headers: {
14713
15758
  [name: string]: unknown;
14714
15759
  };
14715
15760
  content: {
14716
15761
  "application/json": {
14717
- volume: components["schemas"]["Volume"];
14718
- operation: components["schemas"]["Operation"];
15762
+ /** @description https://<port>-<handle>.<domain>/__shardflux/callback/sfcb_…/: append your own path. Shown once. */
15763
+ url: string;
15764
+ /**
15765
+ * Format: date-time
15766
+ * @description RFC 3339 UTC timestamp with Z.
15767
+ */
15768
+ created_at: string;
14719
15769
  };
14720
15770
  };
14721
15771
  };
@@ -14739,35 +15789,771 @@ export interface operations {
14739
15789
  };
14740
15790
  };
14741
15791
  };
14742
- getApiV1ProjectsProjectIdVolumesVolumeIdAttachments: {
15792
+ deleteApiV1WorkspacesWorkspaceIdPortsPortCallback: {
14743
15793
  parameters: {
14744
- query?: {
14745
- limit?: number;
14746
- cursor?: string;
14747
- include_detached?: boolean;
14748
- };
15794
+ query?: never;
14749
15795
  header?: never;
14750
15796
  path: {
14751
15797
  /** @description UUIDv7, lowercase canonical form. */
14752
- project_id: string;
14753
- /** @description UUIDv7, lowercase canonical form. */
14754
- volume_id: string;
15798
+ workspace_id: string;
15799
+ /** @description TCP port inside the workspace (1-65535). */
15800
+ port: number;
14755
15801
  };
14756
15802
  cookie?: never;
14757
15803
  };
14758
15804
  requestBody?: never;
14759
15805
  responses: {
14760
- /** @description Default Response */
14761
- 200: {
15806
+ /** @description No content. */
15807
+ 204: {
14762
15808
  headers: {
14763
15809
  [name: string]: unknown;
14764
15810
  };
14765
- content: {
14766
- "application/json": {
14767
- data: components["schemas"]["VolumeAttachment"][];
14768
- next_cursor: string | null;
14769
- };
14770
- };
15811
+ content?: never;
15812
+ };
15813
+ /** @description Default Response */
15814
+ "4XX": {
15815
+ headers: {
15816
+ [name: string]: unknown;
15817
+ };
15818
+ content: {
15819
+ "application/json": components["schemas"]["ErrorBody"];
15820
+ };
15821
+ };
15822
+ /** @description Default Response */
15823
+ "5XX": {
15824
+ headers: {
15825
+ [name: string]: unknown;
15826
+ };
15827
+ content: {
15828
+ "application/json": components["schemas"]["ErrorBody"];
15829
+ };
15830
+ };
15831
+ };
15832
+ };
15833
+ postV1InternalPortWakes: {
15834
+ parameters: {
15835
+ query?: never;
15836
+ header?: {
15837
+ /** @description RFC 7240 preference, e.g. `wait=20` (held wake). */
15838
+ prefer?: string;
15839
+ };
15840
+ path?: never;
15841
+ cookie?: never;
15842
+ };
15843
+ requestBody: {
15844
+ content: {
15845
+ "application/json": {
15846
+ /**
15847
+ * Format: uuid
15848
+ * @description UUIDv7, lowercase canonical form.
15849
+ */
15850
+ workspace_id: string;
15851
+ /** @description TCP port inside the workspace (1-65535). */
15852
+ port: number;
15853
+ /** @description The callback URL’s secret (`sfcb_…`) when the request came in on the callback path; omit when Authorization carries a port token. */
15854
+ callback_secret?: string;
15855
+ };
15856
+ };
15857
+ };
15858
+ responses: {
15859
+ /** @description 200: running (operation null: it already was) or the resume succeeded during the hold. 202: the resume/open to wait for. */
15860
+ 200: {
15861
+ headers: {
15862
+ [name: string]: unknown;
15863
+ };
15864
+ content: {
15865
+ "application/json": {
15866
+ workspace: {
15867
+ /**
15868
+ * Format: uuid
15869
+ * @description UUIDv7, lowercase canonical form.
15870
+ */
15871
+ id: string;
15872
+ observed_state: string;
15873
+ ownership_epoch: number;
15874
+ };
15875
+ operation: components["schemas"]["Operation"] | null;
15876
+ };
15877
+ };
15878
+ };
15879
+ /** @description 200: running (operation null: it already was) or the resume succeeded during the hold. 202: the resume/open to wait for. */
15880
+ 202: {
15881
+ headers: {
15882
+ [name: string]: unknown;
15883
+ };
15884
+ content: {
15885
+ "application/json": {
15886
+ workspace: {
15887
+ /**
15888
+ * Format: uuid
15889
+ * @description UUIDv7, lowercase canonical form.
15890
+ */
15891
+ id: string;
15892
+ observed_state: string;
15893
+ ownership_epoch: number;
15894
+ };
15895
+ operation: components["schemas"]["Operation"] | null;
15896
+ };
15897
+ };
15898
+ };
15899
+ /** @description Default Response */
15900
+ "4XX": {
15901
+ headers: {
15902
+ [name: string]: unknown;
15903
+ };
15904
+ content: {
15905
+ "application/json": components["schemas"]["ErrorBody"];
15906
+ };
15907
+ };
15908
+ /** @description Default Response */
15909
+ "5XX": {
15910
+ headers: {
15911
+ [name: string]: unknown;
15912
+ };
15913
+ content: {
15914
+ "application/json": components["schemas"]["ErrorBody"];
15915
+ };
15916
+ };
15917
+ };
15918
+ };
15919
+ getV1ProjectsProjectIdVolumes: {
15920
+ parameters: {
15921
+ query?: {
15922
+ limit?: number;
15923
+ cursor?: string;
15924
+ /** @description Also list org-shared volumes owned by other projects of the organization (attachable here). */
15925
+ include_org_shared?: boolean;
15926
+ include_deleted?: boolean;
15927
+ };
15928
+ header?: never;
15929
+ path: {
15930
+ /** @description UUIDv7, lowercase canonical form. */
15931
+ project_id: string;
15932
+ };
15933
+ cookie?: never;
15934
+ };
15935
+ requestBody?: never;
15936
+ responses: {
15937
+ /** @description Default Response */
15938
+ 200: {
15939
+ headers: {
15940
+ [name: string]: unknown;
15941
+ };
15942
+ content: {
15943
+ "application/json": {
15944
+ data: components["schemas"]["Volume"][];
15945
+ next_cursor: string | null;
15946
+ };
15947
+ };
15948
+ };
15949
+ /** @description Default Response */
15950
+ "4XX": {
15951
+ headers: {
15952
+ [name: string]: unknown;
15953
+ };
15954
+ content: {
15955
+ "application/json": components["schemas"]["ErrorBody"];
15956
+ };
15957
+ };
15958
+ /** @description Default Response */
15959
+ "5XX": {
15960
+ headers: {
15961
+ [name: string]: unknown;
15962
+ };
15963
+ content: {
15964
+ "application/json": components["schemas"]["ErrorBody"];
15965
+ };
15966
+ };
15967
+ };
15968
+ };
15969
+ postV1ProjectsProjectIdVolumes: {
15970
+ parameters: {
15971
+ query?: never;
15972
+ header?: never;
15973
+ path: {
15974
+ /** @description UUIDv7, lowercase canonical form. */
15975
+ project_id: string;
15976
+ };
15977
+ cookie?: never;
15978
+ };
15979
+ requestBody: {
15980
+ content: {
15981
+ "application/json": {
15982
+ /** @description Unique among the project’s live volumes. */
15983
+ name: string;
15984
+ quota_gib: number;
15985
+ /** @default false */
15986
+ org_shared?: boolean;
15987
+ };
15988
+ };
15989
+ };
15990
+ responses: {
15991
+ /** @description Default Response */
15992
+ 202: {
15993
+ headers: {
15994
+ [name: string]: unknown;
15995
+ };
15996
+ content: {
15997
+ "application/json": {
15998
+ volume: components["schemas"]["Volume"];
15999
+ operation: components["schemas"]["Operation"];
16000
+ };
16001
+ };
16002
+ };
16003
+ /** @description Default Response */
16004
+ "4XX": {
16005
+ headers: {
16006
+ [name: string]: unknown;
16007
+ };
16008
+ content: {
16009
+ "application/json": components["schemas"]["ErrorBody"];
16010
+ };
16011
+ };
16012
+ /** @description Default Response */
16013
+ "5XX": {
16014
+ headers: {
16015
+ [name: string]: unknown;
16016
+ };
16017
+ content: {
16018
+ "application/json": components["schemas"]["ErrorBody"];
16019
+ };
16020
+ };
16021
+ };
16022
+ };
16023
+ getV1ProjectsProjectIdVolumesVolumeId: {
16024
+ parameters: {
16025
+ query?: never;
16026
+ header?: never;
16027
+ path: {
16028
+ /** @description UUIDv7, lowercase canonical form. */
16029
+ project_id: string;
16030
+ /** @description UUIDv7, lowercase canonical form. */
16031
+ volume_id: string;
16032
+ };
16033
+ cookie?: never;
16034
+ };
16035
+ requestBody?: never;
16036
+ responses: {
16037
+ /** @description Default Response */
16038
+ 200: {
16039
+ headers: {
16040
+ [name: string]: unknown;
16041
+ };
16042
+ content: {
16043
+ "application/json": components["schemas"]["Volume"];
16044
+ };
16045
+ };
16046
+ /** @description Default Response */
16047
+ "4XX": {
16048
+ headers: {
16049
+ [name: string]: unknown;
16050
+ };
16051
+ content: {
16052
+ "application/json": components["schemas"]["ErrorBody"];
16053
+ };
16054
+ };
16055
+ /** @description Default Response */
16056
+ "5XX": {
16057
+ headers: {
16058
+ [name: string]: unknown;
16059
+ };
16060
+ content: {
16061
+ "application/json": components["schemas"]["ErrorBody"];
16062
+ };
16063
+ };
16064
+ };
16065
+ };
16066
+ deleteV1ProjectsProjectIdVolumesVolumeId: {
16067
+ parameters: {
16068
+ query?: {
16069
+ force?: boolean;
16070
+ confirm_name?: string;
16071
+ };
16072
+ header?: never;
16073
+ path: {
16074
+ /** @description UUIDv7, lowercase canonical form. */
16075
+ project_id: string;
16076
+ /** @description UUIDv7, lowercase canonical form. */
16077
+ volume_id: string;
16078
+ };
16079
+ cookie?: never;
16080
+ };
16081
+ requestBody?: never;
16082
+ responses: {
16083
+ /** @description Default Response */
16084
+ 202: {
16085
+ headers: {
16086
+ [name: string]: unknown;
16087
+ };
16088
+ content: {
16089
+ "application/json": {
16090
+ volume: components["schemas"]["Volume"];
16091
+ operation: components["schemas"]["Operation"];
16092
+ };
16093
+ };
16094
+ };
16095
+ /** @description Default Response */
16096
+ "4XX": {
16097
+ headers: {
16098
+ [name: string]: unknown;
16099
+ };
16100
+ content: {
16101
+ "application/json": components["schemas"]["ErrorBody"];
16102
+ };
16103
+ };
16104
+ /** @description Default Response */
16105
+ "5XX": {
16106
+ headers: {
16107
+ [name: string]: unknown;
16108
+ };
16109
+ content: {
16110
+ "application/json": components["schemas"]["ErrorBody"];
16111
+ };
16112
+ };
16113
+ };
16114
+ };
16115
+ getV1ProjectsProjectIdVolumesVolumeIdAttachments: {
16116
+ parameters: {
16117
+ query?: {
16118
+ limit?: number;
16119
+ cursor?: string;
16120
+ include_detached?: boolean;
16121
+ };
16122
+ header?: never;
16123
+ path: {
16124
+ /** @description UUIDv7, lowercase canonical form. */
16125
+ project_id: string;
16126
+ /** @description UUIDv7, lowercase canonical form. */
16127
+ volume_id: string;
16128
+ };
16129
+ cookie?: never;
16130
+ };
16131
+ requestBody?: never;
16132
+ responses: {
16133
+ /** @description Default Response */
16134
+ 200: {
16135
+ headers: {
16136
+ [name: string]: unknown;
16137
+ };
16138
+ content: {
16139
+ "application/json": {
16140
+ data: components["schemas"]["VolumeAttachment"][];
16141
+ next_cursor: string | null;
16142
+ };
16143
+ };
16144
+ };
16145
+ /** @description Default Response */
16146
+ "4XX": {
16147
+ headers: {
16148
+ [name: string]: unknown;
16149
+ };
16150
+ content: {
16151
+ "application/json": components["schemas"]["ErrorBody"];
16152
+ };
16153
+ };
16154
+ /** @description Default Response */
16155
+ "5XX": {
16156
+ headers: {
16157
+ [name: string]: unknown;
16158
+ };
16159
+ content: {
16160
+ "application/json": components["schemas"]["ErrorBody"];
16161
+ };
16162
+ };
16163
+ };
16164
+ };
16165
+ getV1WorkspacesWorkspaceIdVolumes: {
16166
+ parameters: {
16167
+ query?: {
16168
+ limit?: number;
16169
+ cursor?: string;
16170
+ include_detached?: boolean;
16171
+ };
16172
+ header?: never;
16173
+ path: {
16174
+ /** @description UUIDv7, lowercase canonical form. */
16175
+ workspace_id: string;
16176
+ };
16177
+ cookie?: never;
16178
+ };
16179
+ requestBody?: never;
16180
+ responses: {
16181
+ /** @description Default Response */
16182
+ 200: {
16183
+ headers: {
16184
+ [name: string]: unknown;
16185
+ };
16186
+ content: {
16187
+ "application/json": {
16188
+ data: components["schemas"]["VolumeAttachment"][];
16189
+ next_cursor: string | null;
16190
+ };
16191
+ };
16192
+ };
16193
+ /** @description Default Response */
16194
+ "4XX": {
16195
+ headers: {
16196
+ [name: string]: unknown;
16197
+ };
16198
+ content: {
16199
+ "application/json": components["schemas"]["ErrorBody"];
16200
+ };
16201
+ };
16202
+ /** @description Default Response */
16203
+ "5XX": {
16204
+ headers: {
16205
+ [name: string]: unknown;
16206
+ };
16207
+ content: {
16208
+ "application/json": components["schemas"]["ErrorBody"];
16209
+ };
16210
+ };
16211
+ };
16212
+ };
16213
+ postV1WorkspacesWorkspaceIdVolumes: {
16214
+ parameters: {
16215
+ query?: never;
16216
+ header?: never;
16217
+ path: {
16218
+ /** @description UUIDv7, lowercase canonical form. */
16219
+ workspace_id: string;
16220
+ };
16221
+ cookie?: never;
16222
+ };
16223
+ requestBody: {
16224
+ content: {
16225
+ "application/json": {
16226
+ /**
16227
+ * Format: uuid
16228
+ * @description UUIDv7, lowercase canonical form.
16229
+ */
16230
+ volume_id: string;
16231
+ /** @description Absolute guest path (e.g. /mnt/data); segments of A-Z a-z 0-9 . _ - not starting with "."; system directories (/etc, /usr, /proc, /tmp, /var, ...) and nesting with another mount are refused. */
16232
+ mount_path: string;
16233
+ /**
16234
+ * @default rw
16235
+ * @enum {string}
16236
+ */
16237
+ mode?: "ro" | "rw";
16238
+ };
16239
+ };
16240
+ };
16241
+ responses: {
16242
+ /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
16243
+ 200: {
16244
+ headers: {
16245
+ [name: string]: unknown;
16246
+ };
16247
+ content: {
16248
+ "application/json": {
16249
+ attachment: components["schemas"]["VolumeAttachment"];
16250
+ operation: components["schemas"]["Operation"] | null;
16251
+ };
16252
+ };
16253
+ };
16254
+ /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
16255
+ 202: {
16256
+ headers: {
16257
+ [name: string]: unknown;
16258
+ };
16259
+ content: {
16260
+ "application/json": {
16261
+ attachment: components["schemas"]["VolumeAttachment"];
16262
+ operation: components["schemas"]["Operation"] | null;
16263
+ };
16264
+ };
16265
+ };
16266
+ /** @description Default Response */
16267
+ "4XX": {
16268
+ headers: {
16269
+ [name: string]: unknown;
16270
+ };
16271
+ content: {
16272
+ "application/json": components["schemas"]["ErrorBody"];
16273
+ };
16274
+ };
16275
+ /** @description Default Response */
16276
+ "5XX": {
16277
+ headers: {
16278
+ [name: string]: unknown;
16279
+ };
16280
+ content: {
16281
+ "application/json": components["schemas"]["ErrorBody"];
16282
+ };
16283
+ };
16284
+ };
16285
+ };
16286
+ deleteV1WorkspacesWorkspaceIdVolumesVolumeId: {
16287
+ parameters: {
16288
+ query?: never;
16289
+ header?: never;
16290
+ path: {
16291
+ /** @description UUIDv7, lowercase canonical form. */
16292
+ workspace_id: string;
16293
+ /** @description UUIDv7, lowercase canonical form. */
16294
+ volume_id: string;
16295
+ };
16296
+ cookie?: never;
16297
+ };
16298
+ requestBody?: never;
16299
+ responses: {
16300
+ /** @description operation is null only for an idempotent re-attach of an already attached volume (200). */
16301
+ 202: {
16302
+ headers: {
16303
+ [name: string]: unknown;
16304
+ };
16305
+ content: {
16306
+ "application/json": {
16307
+ attachment: components["schemas"]["VolumeAttachment"];
16308
+ operation: components["schemas"]["Operation"] | null;
16309
+ };
16310
+ };
16311
+ };
16312
+ /** @description Default Response */
16313
+ "4XX": {
16314
+ headers: {
16315
+ [name: string]: unknown;
16316
+ };
16317
+ content: {
16318
+ "application/json": components["schemas"]["ErrorBody"];
16319
+ };
16320
+ };
16321
+ /** @description Default Response */
16322
+ "5XX": {
16323
+ headers: {
16324
+ [name: string]: unknown;
16325
+ };
16326
+ content: {
16327
+ "application/json": components["schemas"]["ErrorBody"];
16328
+ };
16329
+ };
16330
+ };
16331
+ };
16332
+ getApiV1ProjectsProjectIdVolumes: {
16333
+ parameters: {
16334
+ query?: {
16335
+ limit?: number;
16336
+ cursor?: string;
16337
+ /** @description Also list org-shared volumes owned by other projects of the organization (attachable here). */
16338
+ include_org_shared?: boolean;
16339
+ include_deleted?: boolean;
16340
+ };
16341
+ header?: never;
16342
+ path: {
16343
+ /** @description UUIDv7, lowercase canonical form. */
16344
+ project_id: string;
16345
+ };
16346
+ cookie?: never;
16347
+ };
16348
+ requestBody?: never;
16349
+ responses: {
16350
+ /** @description Default Response */
16351
+ 200: {
16352
+ headers: {
16353
+ [name: string]: unknown;
16354
+ };
16355
+ content: {
16356
+ "application/json": {
16357
+ data: components["schemas"]["Volume"][];
16358
+ next_cursor: string | null;
16359
+ };
16360
+ };
16361
+ };
16362
+ /** @description Default Response */
16363
+ "4XX": {
16364
+ headers: {
16365
+ [name: string]: unknown;
16366
+ };
16367
+ content: {
16368
+ "application/json": components["schemas"]["ErrorBody"];
16369
+ };
16370
+ };
16371
+ /** @description Default Response */
16372
+ "5XX": {
16373
+ headers: {
16374
+ [name: string]: unknown;
16375
+ };
16376
+ content: {
16377
+ "application/json": components["schemas"]["ErrorBody"];
16378
+ };
16379
+ };
16380
+ };
16381
+ };
16382
+ postApiV1ProjectsProjectIdVolumes: {
16383
+ parameters: {
16384
+ query?: never;
16385
+ header?: never;
16386
+ path: {
16387
+ /** @description UUIDv7, lowercase canonical form. */
16388
+ project_id: string;
16389
+ };
16390
+ cookie?: never;
16391
+ };
16392
+ requestBody: {
16393
+ content: {
16394
+ "application/json": {
16395
+ /** @description Unique among the project’s live volumes. */
16396
+ name: string;
16397
+ quota_gib: number;
16398
+ /** @default false */
16399
+ org_shared?: boolean;
16400
+ };
16401
+ };
16402
+ };
16403
+ responses: {
16404
+ /** @description Default Response */
16405
+ 202: {
16406
+ headers: {
16407
+ [name: string]: unknown;
16408
+ };
16409
+ content: {
16410
+ "application/json": {
16411
+ volume: components["schemas"]["Volume"];
16412
+ operation: components["schemas"]["Operation"];
16413
+ };
16414
+ };
16415
+ };
16416
+ /** @description Default Response */
16417
+ "4XX": {
16418
+ headers: {
16419
+ [name: string]: unknown;
16420
+ };
16421
+ content: {
16422
+ "application/json": components["schemas"]["ErrorBody"];
16423
+ };
16424
+ };
16425
+ /** @description Default Response */
16426
+ "5XX": {
16427
+ headers: {
16428
+ [name: string]: unknown;
16429
+ };
16430
+ content: {
16431
+ "application/json": components["schemas"]["ErrorBody"];
16432
+ };
16433
+ };
16434
+ };
16435
+ };
16436
+ getApiV1ProjectsProjectIdVolumesVolumeId: {
16437
+ parameters: {
16438
+ query?: never;
16439
+ header?: never;
16440
+ path: {
16441
+ /** @description UUIDv7, lowercase canonical form. */
16442
+ project_id: string;
16443
+ /** @description UUIDv7, lowercase canonical form. */
16444
+ volume_id: string;
16445
+ };
16446
+ cookie?: never;
16447
+ };
16448
+ requestBody?: never;
16449
+ responses: {
16450
+ /** @description Default Response */
16451
+ 200: {
16452
+ headers: {
16453
+ [name: string]: unknown;
16454
+ };
16455
+ content: {
16456
+ "application/json": components["schemas"]["Volume"];
16457
+ };
16458
+ };
16459
+ /** @description Default Response */
16460
+ "4XX": {
16461
+ headers: {
16462
+ [name: string]: unknown;
16463
+ };
16464
+ content: {
16465
+ "application/json": components["schemas"]["ErrorBody"];
16466
+ };
16467
+ };
16468
+ /** @description Default Response */
16469
+ "5XX": {
16470
+ headers: {
16471
+ [name: string]: unknown;
16472
+ };
16473
+ content: {
16474
+ "application/json": components["schemas"]["ErrorBody"];
16475
+ };
16476
+ };
16477
+ };
16478
+ };
16479
+ deleteApiV1ProjectsProjectIdVolumesVolumeId: {
16480
+ parameters: {
16481
+ query?: {
16482
+ force?: boolean;
16483
+ confirm_name?: string;
16484
+ };
16485
+ header?: never;
16486
+ path: {
16487
+ /** @description UUIDv7, lowercase canonical form. */
16488
+ project_id: string;
16489
+ /** @description UUIDv7, lowercase canonical form. */
16490
+ volume_id: string;
16491
+ };
16492
+ cookie?: never;
16493
+ };
16494
+ requestBody?: never;
16495
+ responses: {
16496
+ /** @description Default Response */
16497
+ 202: {
16498
+ headers: {
16499
+ [name: string]: unknown;
16500
+ };
16501
+ content: {
16502
+ "application/json": {
16503
+ volume: components["schemas"]["Volume"];
16504
+ operation: components["schemas"]["Operation"];
16505
+ };
16506
+ };
16507
+ };
16508
+ /** @description Default Response */
16509
+ "4XX": {
16510
+ headers: {
16511
+ [name: string]: unknown;
16512
+ };
16513
+ content: {
16514
+ "application/json": components["schemas"]["ErrorBody"];
16515
+ };
16516
+ };
16517
+ /** @description Default Response */
16518
+ "5XX": {
16519
+ headers: {
16520
+ [name: string]: unknown;
16521
+ };
16522
+ content: {
16523
+ "application/json": components["schemas"]["ErrorBody"];
16524
+ };
16525
+ };
16526
+ };
16527
+ };
16528
+ getApiV1ProjectsProjectIdVolumesVolumeIdAttachments: {
16529
+ parameters: {
16530
+ query?: {
16531
+ limit?: number;
16532
+ cursor?: string;
16533
+ include_detached?: boolean;
16534
+ };
16535
+ header?: never;
16536
+ path: {
16537
+ /** @description UUIDv7, lowercase canonical form. */
16538
+ project_id: string;
16539
+ /** @description UUIDv7, lowercase canonical form. */
16540
+ volume_id: string;
16541
+ };
16542
+ cookie?: never;
16543
+ };
16544
+ requestBody?: never;
16545
+ responses: {
16546
+ /** @description Default Response */
16547
+ 200: {
16548
+ headers: {
16549
+ [name: string]: unknown;
16550
+ };
16551
+ content: {
16552
+ "application/json": {
16553
+ data: components["schemas"]["VolumeAttachment"][];
16554
+ next_cursor: string | null;
16555
+ };
16556
+ };
14771
16557
  };
14772
16558
  /** @description Default Response */
14773
16559
  "4XX": {
@@ -15005,6 +16791,8 @@ export interface operations {
15005
16791
  memory_mib: number | null;
15006
16792
  idle_policy: string | null;
15007
16793
  };
16794
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
16795
+ computer_use: boolean;
15008
16796
  open_version: {
15009
16797
  /**
15010
16798
  * Format: uuid
@@ -15222,6 +17010,8 @@ export interface operations {
15222
17010
  memory_mib: number | null;
15223
17011
  idle_policy: string | null;
15224
17012
  };
17013
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
17014
+ computer_use: boolean;
15225
17015
  open_version: {
15226
17016
  /**
15227
17017
  * Format: uuid
@@ -15570,6 +17360,8 @@ export interface operations {
15570
17360
  memory_mib: number | null;
15571
17361
  idle_policy: string | null;
15572
17362
  };
17363
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
17364
+ computer_use: boolean;
15573
17365
  open_version: {
15574
17366
  /**
15575
17367
  * Format: uuid
@@ -15785,6 +17577,8 @@ export interface operations {
15785
17577
  memory_mib: number | null;
15786
17578
  idle_policy: string | null;
15787
17579
  };
17580
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
17581
+ computer_use: boolean;
15788
17582
  open_version: {
15789
17583
  /**
15790
17584
  * Format: uuid
@@ -16087,6 +17881,104 @@ export interface operations {
16087
17881
  };
16088
17882
  };
16089
17883
  };
17884
+ putV1OrganizationsOrganizationIdTemplatesSlugComputerUse: {
17885
+ parameters: {
17886
+ query?: never;
17887
+ header?: never;
17888
+ path: {
17889
+ /** @description UUIDv7, lowercase canonical form. */
17890
+ organization_id: string;
17891
+ slug: string;
17892
+ };
17893
+ cookie?: never;
17894
+ };
17895
+ requestBody: {
17896
+ content: {
17897
+ "application/json": {
17898
+ enabled: boolean;
17899
+ };
17900
+ };
17901
+ };
17902
+ responses: {
17903
+ /** @description Default Response */
17904
+ 200: {
17905
+ headers: {
17906
+ [name: string]: unknown;
17907
+ };
17908
+ content: {
17909
+ "application/json": {
17910
+ enabled: boolean;
17911
+ };
17912
+ };
17913
+ };
17914
+ /** @description Default Response */
17915
+ "4XX": {
17916
+ headers: {
17917
+ [name: string]: unknown;
17918
+ };
17919
+ content: {
17920
+ "application/json": components["schemas"]["ErrorBody"];
17921
+ };
17922
+ };
17923
+ /** @description Default Response */
17924
+ "5XX": {
17925
+ headers: {
17926
+ [name: string]: unknown;
17927
+ };
17928
+ content: {
17929
+ "application/json": components["schemas"]["ErrorBody"];
17930
+ };
17931
+ };
17932
+ };
17933
+ };
17934
+ putV1TemplatesSlugComputerUse: {
17935
+ parameters: {
17936
+ query?: never;
17937
+ header?: never;
17938
+ path: {
17939
+ slug: string;
17940
+ };
17941
+ cookie?: never;
17942
+ };
17943
+ requestBody: {
17944
+ content: {
17945
+ "application/json": {
17946
+ enabled: boolean;
17947
+ };
17948
+ };
17949
+ };
17950
+ responses: {
17951
+ /** @description Default Response */
17952
+ 200: {
17953
+ headers: {
17954
+ [name: string]: unknown;
17955
+ };
17956
+ content: {
17957
+ "application/json": {
17958
+ enabled: boolean;
17959
+ };
17960
+ };
17961
+ };
17962
+ /** @description Default Response */
17963
+ "4XX": {
17964
+ headers: {
17965
+ [name: string]: unknown;
17966
+ };
17967
+ content: {
17968
+ "application/json": components["schemas"]["ErrorBody"];
17969
+ };
17970
+ };
17971
+ /** @description Default Response */
17972
+ "5XX": {
17973
+ headers: {
17974
+ [name: string]: unknown;
17975
+ };
17976
+ content: {
17977
+ "application/json": components["schemas"]["ErrorBody"];
17978
+ };
17979
+ };
17980
+ };
17981
+ };
16090
17982
  getV1OrganizationsOrganizationIdTemplateBuilds: {
16091
17983
  parameters: {
16092
17984
  query?: {
@@ -18170,6 +20062,8 @@ export interface operations {
18170
20062
  memory_mib: number | null;
18171
20063
  idle_policy: string | null;
18172
20064
  };
20065
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
20066
+ computer_use: boolean;
18173
20067
  open_version: {
18174
20068
  /**
18175
20069
  * Format: uuid
@@ -18516,6 +20410,8 @@ export interface operations {
18516
20410
  memory_mib: number | null;
18517
20411
  idle_policy: string | null;
18518
20412
  };
20413
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
20414
+ computer_use: boolean;
18519
20415
  open_version: {
18520
20416
  /**
18521
20417
  * Format: uuid
@@ -18867,6 +20763,8 @@ export interface operations {
18867
20763
  memory_mib: number | null;
18868
20764
  idle_policy: string | null;
18869
20765
  };
20766
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
20767
+ computer_use: boolean;
18870
20768
  open_version: {
18871
20769
  /**
18872
20770
  * Format: uuid
@@ -19084,6 +20982,8 @@ export interface operations {
19084
20982
  memory_mib: number | null;
19085
20983
  idle_policy: string | null;
19086
20984
  };
20985
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
20986
+ computer_use: boolean;
19087
20987
  open_version: {
19088
20988
  /**
19089
20989
  * Format: uuid
@@ -19386,6 +21286,56 @@ export interface operations {
19386
21286
  };
19387
21287
  };
19388
21288
  };
21289
+ putApiV1OrganizationsOrganizationIdTemplatesSlugComputerUse: {
21290
+ parameters: {
21291
+ query?: never;
21292
+ header?: never;
21293
+ path: {
21294
+ /** @description UUIDv7, lowercase canonical form. */
21295
+ organization_id: string;
21296
+ slug: string;
21297
+ };
21298
+ cookie?: never;
21299
+ };
21300
+ requestBody: {
21301
+ content: {
21302
+ "application/json": {
21303
+ enabled: boolean;
21304
+ };
21305
+ };
21306
+ };
21307
+ responses: {
21308
+ /** @description Default Response */
21309
+ 200: {
21310
+ headers: {
21311
+ [name: string]: unknown;
21312
+ };
21313
+ content: {
21314
+ "application/json": {
21315
+ enabled: boolean;
21316
+ };
21317
+ };
21318
+ };
21319
+ /** @description Default Response */
21320
+ "4XX": {
21321
+ headers: {
21322
+ [name: string]: unknown;
21323
+ };
21324
+ content: {
21325
+ "application/json": components["schemas"]["ErrorBody"];
21326
+ };
21327
+ };
21328
+ /** @description Default Response */
21329
+ "5XX": {
21330
+ headers: {
21331
+ [name: string]: unknown;
21332
+ };
21333
+ content: {
21334
+ "application/json": components["schemas"]["ErrorBody"];
21335
+ };
21336
+ };
21337
+ };
21338
+ };
19389
21339
  getApiV1OrganizationsOrganizationIdTemplateBuilds: {
19390
21340
  parameters: {
19391
21341
  query?: {
@@ -21289,6 +23239,8 @@ export interface operations {
21289
23239
  memory_mib: number | null;
21290
23240
  idle_policy: string | null;
21291
23241
  };
23242
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
23243
+ computer_use: boolean;
21292
23244
  open_version: {
21293
23245
  /**
21294
23246
  * Format: uuid
@@ -21635,6 +23587,8 @@ export interface operations {
21635
23587
  memory_mib: number | null;
21636
23588
  idle_policy: string | null;
21637
23589
  };
23590
+ /** @description Contracts §45.1: the template’s computer use switch for its workspaces (a workspace may override it). Set by the owning organization; platform templates are off. */
23591
+ computer_use: boolean;
21638
23592
  open_version: {
21639
23593
  /**
21640
23594
  * Format: uuid
@@ -24767,8 +26721,11 @@ export interface operations {
24767
26721
  */
24768
26722
  id: string;
24769
26723
  };
24770
- /** @enum {string} */
24771
- tool: "exec" | "files" | "pty" | "process" | "git" | "browser";
26724
+ /**
26725
+ * @description computer (contracts §45): the workspace desktop; a tool token carries it only while the workspace’s computer use is on.
26726
+ * @enum {string}
26727
+ */
26728
+ tool: "exec" | "files" | "pty" | "process" | "git" | "browser" | "computer";
24772
26729
  outcome: "granted" | "denied" | "failed";
24773
26730
  reason: string | null;
24774
26731
  ownership_epoch: number | null;
@@ -24819,8 +26776,11 @@ export interface operations {
24819
26776
  * @description UUIDv7, lowercase canonical form.
24820
26777
  */
24821
26778
  workspace_id: string;
24822
- /** @enum {string} */
24823
- tool: "exec" | "files" | "pty" | "process" | "git" | "browser";
26779
+ /**
26780
+ * @description computer (contracts §45): the workspace desktop; a tool token carries it only while the workspace’s computer use is on.
26781
+ * @enum {string}
26782
+ */
26783
+ tool: "exec" | "files" | "pty" | "process" | "git" | "browser" | "computer";
24824
26784
  /** @description The start’s `secret_refs` together with the workspace’s bound names (app.workspace_secret_bindings), each name once: at most 50 + 50. */
24825
26785
  names: string[];
24826
26786
  /** @description The cell’s exec/PTY session id, recorded for correlation. */
@@ -24841,8 +26801,11 @@ export interface operations {
24841
26801
  * @description UUIDv7, lowercase canonical form.
24842
26802
  */
24843
26803
  workspace_id: string;
24844
- /** @enum {string} */
24845
- tool: "exec" | "files" | "pty" | "process" | "git" | "browser";
26804
+ /**
26805
+ * @description computer (contracts §45): the workspace desktop; a tool token carries it only while the workspace’s computer use is on.
26806
+ * @enum {string}
26807
+ */
26808
+ tool: "exec" | "files" | "pty" | "process" | "git" | "browser" | "computer";
24846
26809
  /**
24847
26810
  * Format: uuid
24848
26811
  * @description UUIDv7, lowercase canonical form.
@@ -25855,8 +27818,11 @@ export interface operations {
25855
27818
  */
25856
27819
  id: string;
25857
27820
  };
25858
- /** @enum {string} */
25859
- tool: "exec" | "files" | "pty" | "process" | "git" | "browser";
27821
+ /**
27822
+ * @description computer (contracts §45): the workspace desktop; a tool token carries it only while the workspace’s computer use is on.
27823
+ * @enum {string}
27824
+ */
27825
+ tool: "exec" | "files" | "pty" | "process" | "git" | "browser" | "computer";
25860
27826
  outcome: "granted" | "denied" | "failed";
25861
27827
  reason: string | null;
25862
27828
  ownership_epoch: number | null;
@@ -35363,6 +37329,18 @@ export interface operations {
35363
37329
  disk_gib: number;
35364
37330
  }[];
35365
37331
  heartbeat_stale_after_seconds: number;
37332
+ /** @description Contracts §42.5: what draining this host costs in memory (cell.hosts.drain_runtime_impact). */
37333
+ runtime_impact?: {
37334
+ /** @description known: recorded by the cell’s capacity tick within 15 minutes; unknown: not recorded; stale: older (both reported, neither blocks). */
37335
+ status: "known" | "unknown" | "stale";
37336
+ memory_lost: number | null;
37337
+ waits: number | null;
37338
+ /** @description Affected snapshot compatibility keys with counts and their outlook without this host (largest first, at most 20). */
37339
+ keys: {
37340
+ [key: string]: unknown;
37341
+ }[];
37342
+ computed_at: string | null;
37343
+ };
35366
37344
  host: {
35367
37345
  /**
35368
37346
  * Format: uuid
@@ -35554,6 +37532,18 @@ export interface operations {
35554
37532
  disk_gib: number;
35555
37533
  }[];
35556
37534
  heartbeat_stale_after_seconds: number;
37535
+ /** @description Contracts §42.5: what draining this host costs in memory (cell.hosts.drain_runtime_impact). */
37536
+ runtime_impact?: {
37537
+ /** @description known: recorded by the cell’s capacity tick within 15 minutes; unknown: not recorded; stale: older (both reported, neither blocks). */
37538
+ status: "known" | "unknown" | "stale";
37539
+ memory_lost: number | null;
37540
+ waits: number | null;
37541
+ /** @description Affected snapshot compatibility keys with counts and their outlook without this host (largest first, at most 20). */
37542
+ keys: {
37543
+ [key: string]: unknown;
37544
+ }[];
37545
+ computed_at: string | null;
37546
+ };
35557
37547
  host: {
35558
37548
  /**
35559
37549
  * Format: uuid
@@ -35742,199 +37732,223 @@ export interface operations {
35742
37732
  disk_gib: number;
35743
37733
  }[];
35744
37734
  heartbeat_stale_after_seconds: number;
35745
- host: {
35746
- /**
35747
- * Format: uuid
35748
- * @description UUIDv7, lowercase canonical form.
35749
- */
35750
- id: string;
35751
- cell_id: string;
35752
- pool: string;
35753
- state: string;
35754
- instance_id: string;
35755
- };
35756
- /**
35757
- * Format: date-time
35758
- * @description RFC 3339 UTC timestamp with Z.
35759
- */
35760
- computed_at: string;
35761
- };
35762
- /**
35763
- * Format: uuid
35764
- * @description UUIDv7, lowercase canonical form.
35765
- */
35766
- requested_by: string;
35767
- request_id: string | null;
35768
- claimed_by: string | null;
35769
- claim_expires_at: string | null;
35770
- attempt: number;
35771
- cell_drain_id: string | null;
35772
- result: {
35773
- [key: string]: unknown;
35774
- } | null;
35775
- canceled_by: string | null;
35776
- cancel_reason: string | null;
35777
- /**
35778
- * Format: date-time
35779
- * @description RFC 3339 UTC timestamp with Z.
35780
- */
35781
- created_at: string;
35782
- /**
35783
- * Format: date-time
35784
- * @description RFC 3339 UTC timestamp with Z.
35785
- */
35786
- updated_at: string;
35787
- accepted_at: string | null;
35788
- completed_at: string | null;
35789
- };
35790
- };
35791
- };
35792
- /** @description Default Response */
35793
- "4XX": {
35794
- headers: {
35795
- [name: string]: unknown;
35796
- };
35797
- content: {
35798
- "application/json": components["schemas"]["ErrorBody"];
35799
- };
35800
- };
35801
- /** @description Default Response */
35802
- "5XX": {
35803
- headers: {
35804
- [name: string]: unknown;
35805
- };
35806
- content: {
35807
- "application/json": components["schemas"]["ErrorBody"];
35808
- };
35809
- };
35810
- };
35811
- };
35812
- postApiV1OperatorDrainRequestsIdCancel: {
35813
- parameters: {
35814
- query?: never;
35815
- header?: never;
35816
- path: {
35817
- /** @description UUIDv7, lowercase canonical form. */
35818
- id: string;
35819
- };
35820
- cookie?: never;
35821
- };
35822
- requestBody: {
35823
- content: {
35824
- "application/json": {
35825
- /** @description Why (audited). */
35826
- reason: string;
35827
- };
35828
- };
35829
- };
35830
- responses: {
35831
- /** @description Default Response */
35832
- 200: {
35833
- headers: {
35834
- [name: string]: unknown;
35835
- };
35836
- content: {
35837
- "application/json": {
35838
- /**
35839
- * Format: uuid
35840
- * @description UUIDv7, lowercase canonical form.
35841
- */
35842
- id: string;
35843
- cell_id: string;
35844
- /**
35845
- * Format: uuid
35846
- * @description UUIDv7, lowercase canonical form.
35847
- */
35848
- host_id: string;
35849
- pool: string;
35850
- instance_id: string | null;
35851
- host_state_at_request: string;
35852
- state: "requested" | "accepted" | "draining" | "completed" | "refused" | "canceled" | "aborted";
35853
- state_reason: string | null;
35854
- reason: string;
35855
- safety: {
35856
- safe: boolean;
35857
- reasons: string[];
35858
- required: {
35859
- cpu_millis: number;
35860
- memory_mib: number;
35861
- disk_gib: number;
35862
- allocations: number;
35863
- };
35864
- /** @description Suspended/deleted workspaces’ host disks: evacuated to durable checkpoints by the cell drain, not re-placed. */
35865
- storage_only: {
35866
- allocations: number;
35867
- disk_gib: number;
35868
- };
35869
- available: {
35870
- cpu_millis: number;
35871
- memory_mib: number;
35872
- disk_gib: number;
35873
- hosts: number;
35874
- };
35875
- shortfall: {
35876
- cpu_millis: number;
35877
- memory_mib: number;
35878
- disk_gib: number;
37735
+ /** @description Contracts §42.5: what draining this host costs in memory (cell.hosts.drain_runtime_impact). */
37736
+ runtime_impact?: {
37737
+ /** @description known: recorded by the cell’s capacity tick within 15 minutes; unknown: not recorded; stale: older (both reported, neither blocks). */
37738
+ status: "known" | "unknown" | "stale";
37739
+ memory_lost: number | null;
37740
+ waits: number | null;
37741
+ /** @description Affected snapshot compatibility keys with counts and their outlook without this host (largest first, at most 20). */
37742
+ keys: {
37743
+ [key: string]: unknown;
37744
+ }[];
37745
+ computed_at: string | null;
37746
+ };
37747
+ host: {
37748
+ /**
37749
+ * Format: uuid
37750
+ * @description UUIDv7, lowercase canonical form.
37751
+ */
37752
+ id: string;
37753
+ cell_id: string;
37754
+ pool: string;
37755
+ state: string;
37756
+ instance_id: string;
37757
+ };
37758
+ /**
37759
+ * Format: date-time
37760
+ * @description RFC 3339 UTC timestamp with Z.
37761
+ */
37762
+ computed_at: string;
37763
+ };
37764
+ /**
37765
+ * Format: uuid
37766
+ * @description UUIDv7, lowercase canonical form.
37767
+ */
37768
+ requested_by: string;
37769
+ request_id: string | null;
37770
+ claimed_by: string | null;
37771
+ claim_expires_at: string | null;
37772
+ attempt: number;
37773
+ cell_drain_id: string | null;
37774
+ result: {
37775
+ [key: string]: unknown;
37776
+ } | null;
37777
+ canceled_by: string | null;
37778
+ cancel_reason: string | null;
37779
+ /**
37780
+ * Format: date-time
37781
+ * @description RFC 3339 UTC timestamp with Z.
37782
+ */
37783
+ created_at: string;
37784
+ /**
37785
+ * Format: date-time
37786
+ * @description RFC 3339 UTC timestamp with Z.
37787
+ */
37788
+ updated_at: string;
37789
+ accepted_at: string | null;
37790
+ completed_at: string | null;
37791
+ };
37792
+ };
37793
+ };
37794
+ /** @description Default Response */
37795
+ "4XX": {
37796
+ headers: {
37797
+ [name: string]: unknown;
37798
+ };
37799
+ content: {
37800
+ "application/json": components["schemas"]["ErrorBody"];
37801
+ };
37802
+ };
37803
+ /** @description Default Response */
37804
+ "5XX": {
37805
+ headers: {
37806
+ [name: string]: unknown;
37807
+ };
37808
+ content: {
37809
+ "application/json": components["schemas"]["ErrorBody"];
37810
+ };
37811
+ };
37812
+ };
37813
+ };
37814
+ postApiV1OperatorDrainRequestsIdCancel: {
37815
+ parameters: {
37816
+ query?: never;
37817
+ header?: never;
37818
+ path: {
37819
+ /** @description UUIDv7, lowercase canonical form. */
37820
+ id: string;
37821
+ };
37822
+ cookie?: never;
37823
+ };
37824
+ requestBody: {
37825
+ content: {
37826
+ "application/json": {
37827
+ /** @description Why (audited). */
37828
+ reason: string;
37829
+ };
37830
+ };
37831
+ };
37832
+ responses: {
37833
+ /** @description Default Response */
37834
+ 200: {
37835
+ headers: {
37836
+ [name: string]: unknown;
37837
+ };
37838
+ content: {
37839
+ "application/json": {
37840
+ /**
37841
+ * Format: uuid
37842
+ * @description UUIDv7, lowercase canonical form.
37843
+ */
37844
+ id: string;
37845
+ cell_id: string;
37846
+ /**
37847
+ * Format: uuid
37848
+ * @description UUIDv7, lowercase canonical form.
37849
+ */
37850
+ host_id: string;
37851
+ pool: string;
37852
+ instance_id: string | null;
37853
+ host_state_at_request: string;
37854
+ state: "requested" | "accepted" | "draining" | "completed" | "refused" | "canceled" | "aborted";
37855
+ state_reason: string | null;
37856
+ reason: string;
37857
+ safety: {
37858
+ safe: boolean;
37859
+ reasons: string[];
37860
+ required: {
37861
+ cpu_millis: number;
37862
+ memory_mib: number;
37863
+ disk_gib: number;
37864
+ allocations: number;
37865
+ };
37866
+ /** @description Suspended/deleted workspaces’ host disks: evacuated to durable checkpoints by the cell drain, not re-placed. */
37867
+ storage_only: {
37868
+ allocations: number;
37869
+ disk_gib: number;
37870
+ };
37871
+ available: {
37872
+ cpu_millis: number;
37873
+ memory_mib: number;
37874
+ disk_gib: number;
37875
+ hosts: number;
37876
+ };
37877
+ shortfall: {
37878
+ cpu_millis: number;
37879
+ memory_mib: number;
37880
+ disk_gib: number;
37881
+ };
37882
+ targets: {
37883
+ /**
37884
+ * Format: uuid
37885
+ * @description UUIDv7, lowercase canonical form.
37886
+ */
37887
+ host_id: string;
37888
+ instance_id: string;
37889
+ free: {
37890
+ cpu_millis: number;
37891
+ memory_mib: number;
37892
+ disk_gib: number;
37893
+ };
37894
+ memory_free_allocatable_mib: number;
37895
+ memory_free_commit_limit_mib: number | null;
37896
+ }[];
37897
+ excluded_hosts: {
37898
+ /**
37899
+ * Format: uuid
37900
+ * @description UUIDv7, lowercase canonical form.
37901
+ */
37902
+ host_id: string;
37903
+ state: string;
37904
+ /** @description not_ready | drain_requested | heartbeat_stale | no_live_incarnation */
37905
+ reason: string;
37906
+ }[];
37907
+ placement: {
37908
+ /**
37909
+ * Format: uuid
37910
+ * @description UUIDv7, lowercase canonical form.
37911
+ */
37912
+ allocation_id: string;
37913
+ /**
37914
+ * Format: uuid
37915
+ * @description UUIDv7, lowercase canonical form.
37916
+ */
37917
+ workspace_id: string;
37918
+ /**
37919
+ * Format: uuid
37920
+ * @description UUIDv7, lowercase canonical form.
37921
+ */
37922
+ host_id: string;
37923
+ }[];
37924
+ unplaceable: {
37925
+ /**
37926
+ * Format: uuid
37927
+ * @description UUIDv7, lowercase canonical form.
37928
+ */
37929
+ allocation_id: string;
37930
+ /**
37931
+ * Format: uuid
37932
+ * @description UUIDv7, lowercase canonical form.
37933
+ */
37934
+ workspace_id: string;
37935
+ cpu_millis: number;
37936
+ memory_mib: number;
37937
+ disk_gib: number;
37938
+ }[];
37939
+ heartbeat_stale_after_seconds: number;
37940
+ /** @description Contracts §42.5: what draining this host costs in memory (cell.hosts.drain_runtime_impact). */
37941
+ runtime_impact?: {
37942
+ /** @description known: recorded by the cell’s capacity tick within 15 minutes; unknown: not recorded; stale: older (both reported, neither blocks). */
37943
+ status: "known" | "unknown" | "stale";
37944
+ memory_lost: number | null;
37945
+ waits: number | null;
37946
+ /** @description Affected snapshot compatibility keys with counts and their outlook without this host (largest first, at most 20). */
37947
+ keys: {
37948
+ [key: string]: unknown;
37949
+ }[];
37950
+ computed_at: string | null;
35879
37951
  };
35880
- targets: {
35881
- /**
35882
- * Format: uuid
35883
- * @description UUIDv7, lowercase canonical form.
35884
- */
35885
- host_id: string;
35886
- instance_id: string;
35887
- free: {
35888
- cpu_millis: number;
35889
- memory_mib: number;
35890
- disk_gib: number;
35891
- };
35892
- memory_free_allocatable_mib: number;
35893
- memory_free_commit_limit_mib: number | null;
35894
- }[];
35895
- excluded_hosts: {
35896
- /**
35897
- * Format: uuid
35898
- * @description UUIDv7, lowercase canonical form.
35899
- */
35900
- host_id: string;
35901
- state: string;
35902
- /** @description not_ready | drain_requested | heartbeat_stale | no_live_incarnation */
35903
- reason: string;
35904
- }[];
35905
- placement: {
35906
- /**
35907
- * Format: uuid
35908
- * @description UUIDv7, lowercase canonical form.
35909
- */
35910
- allocation_id: string;
35911
- /**
35912
- * Format: uuid
35913
- * @description UUIDv7, lowercase canonical form.
35914
- */
35915
- workspace_id: string;
35916
- /**
35917
- * Format: uuid
35918
- * @description UUIDv7, lowercase canonical form.
35919
- */
35920
- host_id: string;
35921
- }[];
35922
- unplaceable: {
35923
- /**
35924
- * Format: uuid
35925
- * @description UUIDv7, lowercase canonical form.
35926
- */
35927
- allocation_id: string;
35928
- /**
35929
- * Format: uuid
35930
- * @description UUIDv7, lowercase canonical form.
35931
- */
35932
- workspace_id: string;
35933
- cpu_millis: number;
35934
- memory_mib: number;
35935
- disk_gib: number;
35936
- }[];
35937
- heartbeat_stale_after_seconds: number;
35938
37952
  host: {
35939
37953
  /**
35940
37954
  * Format: uuid
@@ -37085,4 +39099,99 @@ export interface operations {
37085
39099
  };
37086
39100
  };
37087
39101
  };
39102
+ getApiV1OauthAuthorization: {
39103
+ parameters: {
39104
+ query: {
39105
+ /** @description The `request` parameter of /connect: the pending authorization request /oauth/authorize stored. */
39106
+ request: string;
39107
+ };
39108
+ header?: never;
39109
+ path?: never;
39110
+ cookie?: never;
39111
+ };
39112
+ requestBody?: never;
39113
+ responses: {
39114
+ /** @description Default Response */
39115
+ 200: {
39116
+ headers: {
39117
+ [name: string]: unknown;
39118
+ };
39119
+ content: {
39120
+ "application/json": components["schemas"]["OAuthConsentView"];
39121
+ };
39122
+ };
39123
+ /** @description Default Response */
39124
+ "4XX": {
39125
+ headers: {
39126
+ [name: string]: unknown;
39127
+ };
39128
+ content: {
39129
+ "application/json": components["schemas"]["ErrorBody"];
39130
+ };
39131
+ };
39132
+ /** @description Default Response */
39133
+ "5XX": {
39134
+ headers: {
39135
+ [name: string]: unknown;
39136
+ };
39137
+ content: {
39138
+ "application/json": components["schemas"]["ErrorBody"];
39139
+ };
39140
+ };
39141
+ };
39142
+ };
39143
+ postApiV1OauthAuthorization: {
39144
+ parameters: {
39145
+ query?: never;
39146
+ header?: never;
39147
+ path?: never;
39148
+ cookie?: never;
39149
+ };
39150
+ requestBody: {
39151
+ content: {
39152
+ "application/json": {
39153
+ /** @description The `request` parameter of /connect: the pending authorization request /oauth/authorize stored. */
39154
+ request: string;
39155
+ decision: "approve" | "deny";
39156
+ /**
39157
+ * Format: uuid
39158
+ * @description UUIDv7, lowercase canonical form.
39159
+ */
39160
+ project_id?: string;
39161
+ };
39162
+ };
39163
+ };
39164
+ responses: {
39165
+ /** @description Default Response */
39166
+ 200: {
39167
+ headers: {
39168
+ [name: string]: unknown;
39169
+ };
39170
+ content: {
39171
+ "application/json": {
39172
+ /** @description Send the browser here (the client’s redirect_uri with code or error, state and iss). */
39173
+ redirect_to: string;
39174
+ };
39175
+ };
39176
+ };
39177
+ /** @description Default Response */
39178
+ "4XX": {
39179
+ headers: {
39180
+ [name: string]: unknown;
39181
+ };
39182
+ content: {
39183
+ "application/json": components["schemas"]["ErrorBody"];
39184
+ };
39185
+ };
39186
+ /** @description Default Response */
39187
+ "5XX": {
39188
+ headers: {
39189
+ [name: string]: unknown;
39190
+ };
39191
+ content: {
39192
+ "application/json": components["schemas"]["ErrorBody"];
39193
+ };
39194
+ };
39195
+ };
39196
+ };
37088
39197
  }