@shardflux/sdk 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +42 -22
  2. package/README.md +99 -1
  3. package/dist/account.d.ts +2 -0
  4. package/dist/account.js +6 -0
  5. package/dist/cell.d.ts +2 -0
  6. package/dist/cell.js +2 -0
  7. package/dist/client.d.ts +25 -1
  8. package/dist/client.js +44 -3
  9. package/dist/computer.d.ts +11 -1
  10. package/dist/computer.js +89 -6
  11. package/dist/errors.d.ts +5 -1
  12. package/dist/errors.js +9 -0
  13. package/dist/executions.d.ts +2 -6
  14. package/dist/executions.js +9 -0
  15. package/dist/exit-code.d.ts +7 -0
  16. package/dist/exit-code.js +12 -0
  17. package/dist/generated/app-api.d.ts +565 -13
  18. package/dist/generated/cell-api.d.ts +2 -0
  19. package/dist/http.d.ts +7 -1
  20. package/dist/http.js +34 -13
  21. package/dist/index.d.ts +8 -5
  22. package/dist/index.js +4 -2
  23. package/dist/ports.d.ts +7 -0
  24. package/dist/ports.js +1 -1
  25. package/dist/progress.d.ts +2 -2
  26. package/dist/progress.js +1 -1
  27. package/dist/testing/index.d.ts +62 -0
  28. package/dist/testing/index.js +585 -0
  29. package/dist/testing/seed.d.ts +433 -0
  30. package/dist/testing/seed.js +449 -0
  31. package/dist/tools.d.ts +5 -0
  32. package/dist/tools.js +4 -2
  33. package/dist/tunnel-assets/linux-amd64.gz +0 -0
  34. package/dist/tunnel-assets/linux-arm64.gz +0 -0
  35. package/dist/tunnel-assets.d.ts +10 -0
  36. package/dist/tunnel-assets.js +11 -0
  37. package/dist/tunnel-packet.d.ts +3 -0
  38. package/dist/tunnel-packet.js +43 -0
  39. package/dist/tunnel-pty.d.ts +86 -0
  40. package/dist/tunnel-pty.js +243 -0
  41. package/dist/tunnels.d.ts +47 -0
  42. package/dist/tunnels.js +454 -0
  43. package/dist/workspace-ref.d.ts +4 -0
  44. package/dist/workspace-ref.js +24 -0
  45. package/dist/workspace.d.ts +18 -1
  46. package/dist/workspace.js +76 -3
  47. package/package.json +7 -2
@@ -1133,6 +1133,27 @@ export interface paths {
1133
1133
  patch?: never;
1134
1134
  trace?: never;
1135
1135
  };
1136
+ "/v1/projects/{project_id}/retention": {
1137
+ parameters: {
1138
+ query?: never;
1139
+ header?: never;
1140
+ path?: never;
1141
+ cookie?: never;
1142
+ };
1143
+ /** Get project idle deletion default */
1144
+ get: operations["getV1ProjectsProjectIdRetention"];
1145
+ /**
1146
+ * Set or clear project idle deletion default
1147
+ * @description Policy {delete_after_idle_days: 1..3650, labels?: exact-match map}, or null to clear. Applies to persistent workspaces with no own policy. All labels must match. Owner/admin/member role or own project API key required.
1148
+ */
1149
+ put: operations["putV1ProjectsProjectIdRetention"];
1150
+ post?: never;
1151
+ delete?: never;
1152
+ options?: never;
1153
+ head?: never;
1154
+ patch?: never;
1155
+ trace?: never;
1156
+ };
1136
1157
  "/v1/projects/{project_id}/api-keys": {
1137
1158
  parameters: {
1138
1159
  query?: never;
@@ -1354,6 +1375,27 @@ export interface paths {
1354
1375
  patch?: never;
1355
1376
  trace?: never;
1356
1377
  };
1378
+ "/api/v1/projects/{project_id}/retention": {
1379
+ parameters: {
1380
+ query?: never;
1381
+ header?: never;
1382
+ path?: never;
1383
+ cookie?: never;
1384
+ };
1385
+ /** Get project idle deletion default */
1386
+ get: operations["getApiV1ProjectsProjectIdRetention"];
1387
+ /**
1388
+ * Set or clear project idle deletion default
1389
+ * @description Policy {delete_after_idle_days: 1..3650, labels?: exact-match map}, or null to clear. Applies to persistent workspaces with no own policy. All labels must match. Owner/admin/member role or own project API key required.
1390
+ */
1391
+ put: operations["putApiV1ProjectsProjectIdRetention"];
1392
+ post?: never;
1393
+ delete?: never;
1394
+ options?: never;
1395
+ head?: never;
1396
+ patch?: never;
1397
+ trace?: never;
1398
+ };
1357
1399
  "/api/v1/projects/{project_id}/api-keys": {
1358
1400
  parameters: {
1359
1401
  query?: never;
@@ -1513,6 +1555,26 @@ export interface paths {
1513
1555
  patch?: never;
1514
1556
  trace?: never;
1515
1557
  };
1558
+ "/v1/workspaces/{workspace_id}/retention": {
1559
+ parameters: {
1560
+ query?: never;
1561
+ header?: never;
1562
+ path?: never;
1563
+ cookie?: never;
1564
+ };
1565
+ get?: never;
1566
+ /**
1567
+ * Set or clear idle deletion retention
1568
+ * @description JSON policy {delete_after_idle_days: 1..3650}, or null to follow the project default. Persistent only (422 retention_requires_persistent); deleted workspace 409 workspace_deleted. Returns the workspace with projected deletion time.
1569
+ */
1570
+ put: operations["putV1WorkspacesWorkspaceIdRetention"];
1571
+ post?: never;
1572
+ delete?: never;
1573
+ options?: never;
1574
+ head?: never;
1575
+ patch?: never;
1576
+ trace?: never;
1577
+ };
1516
1578
  "/v1/workspaces/{workspace_id}/idle-policy": {
1517
1579
  parameters: {
1518
1580
  query?: never;
@@ -1613,6 +1675,26 @@ export interface paths {
1613
1675
  patch?: never;
1614
1676
  trace?: never;
1615
1677
  };
1678
+ "/v1/workspaces/{workspace_id}/upgrade": {
1679
+ parameters: {
1680
+ query?: never;
1681
+ header?: never;
1682
+ path?: never;
1683
+ cookie?: never;
1684
+ };
1685
+ get?: never;
1686
+ put?: never;
1687
+ /**
1688
+ * Upgrade a workspace in place, preserving its disk
1689
+ * @description Opt-in cold start: preserves files, installed package files and home; drops memory and processes. now boots immediately; next_resume schedules a pinned target. Layered disks refresh the template base and guest; legacy disks upgrade memory only. Returns an upgrade operation. Errors: 409 already_current, legacy_disk_layout, upgrade_base_unavailable, not_upgradable, operation_in_progress, workspace_deleted; 422 not_supported_for_mode. Supports Idempotency-Key.
1690
+ */
1691
+ post: operations["postV1WorkspacesWorkspaceIdUpgrade"];
1692
+ delete?: never;
1693
+ options?: never;
1694
+ head?: never;
1695
+ patch?: never;
1696
+ trace?: never;
1697
+ };
1616
1698
  "/v1/workspaces/{workspace_id}/caps": {
1617
1699
  parameters: {
1618
1700
  query?: never;
@@ -1946,6 +2028,26 @@ export interface paths {
1946
2028
  patch?: never;
1947
2029
  trace?: never;
1948
2030
  };
2031
+ "/api/v1/workspaces/{workspace_id}/retention": {
2032
+ parameters: {
2033
+ query?: never;
2034
+ header?: never;
2035
+ path?: never;
2036
+ cookie?: never;
2037
+ };
2038
+ get?: never;
2039
+ /**
2040
+ * Set or clear idle deletion retention
2041
+ * @description JSON policy {delete_after_idle_days: 1..3650}, or null to follow the project default. Persistent only (422 retention_requires_persistent); deleted workspace 409 workspace_deleted. Returns the workspace with projected deletion time.
2042
+ */
2043
+ put: operations["putApiV1WorkspacesWorkspaceIdRetention"];
2044
+ post?: never;
2045
+ delete?: never;
2046
+ options?: never;
2047
+ head?: never;
2048
+ patch?: never;
2049
+ trace?: never;
2050
+ };
1949
2051
  "/api/v1/workspaces/{workspace_id}/idle-policy": {
1950
2052
  parameters: {
1951
2053
  query?: never;
@@ -2046,6 +2148,26 @@ export interface paths {
2046
2148
  patch?: never;
2047
2149
  trace?: never;
2048
2150
  };
2151
+ "/api/v1/workspaces/{workspace_id}/upgrade": {
2152
+ parameters: {
2153
+ query?: never;
2154
+ header?: never;
2155
+ path?: never;
2156
+ cookie?: never;
2157
+ };
2158
+ get?: never;
2159
+ put?: never;
2160
+ /**
2161
+ * Upgrade a workspace in place, preserving its disk
2162
+ * @description Opt-in cold start: preserves files, installed package files and home; drops memory and processes. now boots immediately; next_resume schedules a pinned target. Layered disks refresh the template base and guest; legacy disks upgrade memory only. Returns an upgrade operation. Errors: 409 already_current, legacy_disk_layout, upgrade_base_unavailable, not_upgradable, operation_in_progress, workspace_deleted; 422 not_supported_for_mode. Supports Idempotency-Key.
2163
+ */
2164
+ post: operations["postApiV1WorkspacesWorkspaceIdUpgrade"];
2165
+ delete?: never;
2166
+ options?: never;
2167
+ head?: never;
2168
+ patch?: never;
2169
+ trace?: never;
2170
+ };
2049
2171
  "/api/v1/workspaces/{workspace_id}/caps": {
2050
2172
  parameters: {
2051
2173
  query?: never;
@@ -2356,7 +2478,7 @@ export interface paths {
2356
2478
  put?: never;
2357
2479
  /**
2358
2480
  * 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).
2481
+ * @description Opt-in `embed: {origins: ["https://app.example.com"]}` creates a partitioned browser session with a frame-ancestors allowlist (contracts §48). 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
2482
  */
2361
2483
  post: operations["postV1WorkspacesWorkspaceIdPortsPortLinks"];
2362
2484
  delete?: never;
@@ -2464,7 +2586,7 @@ export interface paths {
2464
2586
  put?: never;
2465
2587
  /**
2466
2588
  * 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).
2589
+ * @description Opt-in `embed: {origins: ["https://app.example.com"]}` creates a partitioned browser session with a frame-ancestors allowlist (contracts §48). 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
2590
  */
2469
2591
  post: operations["postApiV1WorkspacesWorkspaceIdPortsPortLinks"];
2470
2592
  delete?: never;
@@ -5996,7 +6118,7 @@ export interface components {
5996
6118
  */
5997
6119
  id: string;
5998
6120
  /** @enum {string} */
5999
- kind: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
6121
+ kind: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "upgrade" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
6000
6122
  /** @enum {string} */
6001
6123
  state: "queued" | "capacity_pending" | "running" | "succeeded" | "failed" | "canceled";
6002
6124
  workspace_id: string | null;
@@ -7203,8 +7325,10 @@ export interface components {
7203
7325
  allocation_mode?: "fixed" | "elastic";
7204
7326
  /** @description CPU (millicores). Bounded by the plan and the template. */
7205
7327
  cpu_millis?: number;
7206
- /** @description Disk (GiB). Grow only. Bounded by the plan and the template. */
7328
+ /** @description Disk (GiB). Grow only. With at_least, a smaller or equal disk is unchanged. Bounded by the plan and the template. */
7207
7329
  disk_gib?: number;
7330
+ /** @description Only increase each named numeric resource; values at or below its current configured size leave it unchanged. The explicit allocation mode still switches. */
7331
+ at_least?: boolean;
7208
7332
  };
7209
7333
  /** @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
7334
  ResizeResult: {
@@ -7316,12 +7440,16 @@ export interface components {
7316
7440
  labels: {
7317
7441
  [key: string]: string;
7318
7442
  };
7443
+ retention?: {
7444
+ delete_after_idle_days: number;
7445
+ delete_at: string | null;
7446
+ } | null;
7319
7447
  /**
7320
7448
  * Format: uuid
7321
7449
  * @description UUIDv7, lowercase canonical form.
7322
7450
  */
7323
7451
  template_version_id: string;
7324
- /** @description The template version this workspace was created from (immutable), and the version its immutable paths show. */
7452
+ /** @description The workspace’s current template base (changed only by an explicit upgrade), and the version its immutable paths show. */
7325
7453
  template: {
7326
7454
  /**
7327
7455
  * Format: uuid
@@ -7423,6 +7551,14 @@ export interface components {
7423
7551
  mode: components["schemas"]["WorkspaceMode"];
7424
7552
  /** @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. */
7425
7553
  tree_revision: number;
7554
+ upgrade_available?: {
7555
+ memory_layout: number | null;
7556
+ guest_revision: number | null;
7557
+ template_version: number | null;
7558
+ } | null;
7559
+ upgrade_pending?: {
7560
+ [key: string]: unknown;
7561
+ } | null;
7426
7562
  computer_use: components["schemas"]["ComputerUse"];
7427
7563
  /**
7428
7564
  * Format: date-time
@@ -11110,6 +11246,107 @@ export interface operations {
11110
11246
  };
11111
11247
  };
11112
11248
  };
11249
+ getV1ProjectsProjectIdRetention: {
11250
+ parameters: {
11251
+ query?: never;
11252
+ header?: never;
11253
+ path: {
11254
+ /** @description UUIDv7, lowercase canonical form. */
11255
+ project_id: string;
11256
+ };
11257
+ cookie?: never;
11258
+ };
11259
+ requestBody?: never;
11260
+ responses: {
11261
+ /** @description Default Response */
11262
+ 200: {
11263
+ headers: {
11264
+ [name: string]: unknown;
11265
+ };
11266
+ content: {
11267
+ "application/json": {
11268
+ delete_after_idle_days: number;
11269
+ labels?: {
11270
+ [key: string]: string;
11271
+ };
11272
+ } | null;
11273
+ };
11274
+ };
11275
+ /** @description Default Response */
11276
+ "4XX": {
11277
+ headers: {
11278
+ [name: string]: unknown;
11279
+ };
11280
+ content: {
11281
+ "application/json": components["schemas"]["ErrorBody"];
11282
+ };
11283
+ };
11284
+ /** @description Default Response */
11285
+ "5XX": {
11286
+ headers: {
11287
+ [name: string]: unknown;
11288
+ };
11289
+ content: {
11290
+ "application/json": components["schemas"]["ErrorBody"];
11291
+ };
11292
+ };
11293
+ };
11294
+ };
11295
+ putV1ProjectsProjectIdRetention: {
11296
+ parameters: {
11297
+ query?: never;
11298
+ header?: never;
11299
+ path: {
11300
+ /** @description UUIDv7, lowercase canonical form. */
11301
+ project_id: string;
11302
+ };
11303
+ cookie?: never;
11304
+ };
11305
+ requestBody: {
11306
+ content: {
11307
+ "application/json": {
11308
+ delete_after_idle_days: number;
11309
+ labels?: {
11310
+ [key: string]: string;
11311
+ };
11312
+ } | null;
11313
+ };
11314
+ };
11315
+ responses: {
11316
+ /** @description Default Response */
11317
+ 200: {
11318
+ headers: {
11319
+ [name: string]: unknown;
11320
+ };
11321
+ content: {
11322
+ "application/json": {
11323
+ delete_after_idle_days: number;
11324
+ labels?: {
11325
+ [key: string]: string;
11326
+ };
11327
+ } | null;
11328
+ };
11329
+ };
11330
+ /** @description Default Response */
11331
+ "4XX": {
11332
+ headers: {
11333
+ [name: string]: unknown;
11334
+ };
11335
+ content: {
11336
+ "application/json": components["schemas"]["ErrorBody"];
11337
+ };
11338
+ };
11339
+ /** @description Default Response */
11340
+ "5XX": {
11341
+ headers: {
11342
+ [name: string]: unknown;
11343
+ };
11344
+ content: {
11345
+ "application/json": components["schemas"]["ErrorBody"];
11346
+ };
11347
+ };
11348
+ };
11349
+ };
11113
11350
  getV1ProjectsProjectIdApiKeys: {
11114
11351
  parameters: {
11115
11352
  query?: {
@@ -12169,6 +12406,107 @@ export interface operations {
12169
12406
  };
12170
12407
  };
12171
12408
  };
12409
+ getApiV1ProjectsProjectIdRetention: {
12410
+ parameters: {
12411
+ query?: never;
12412
+ header?: never;
12413
+ path: {
12414
+ /** @description UUIDv7, lowercase canonical form. */
12415
+ project_id: string;
12416
+ };
12417
+ cookie?: never;
12418
+ };
12419
+ requestBody?: never;
12420
+ responses: {
12421
+ /** @description Default Response */
12422
+ 200: {
12423
+ headers: {
12424
+ [name: string]: unknown;
12425
+ };
12426
+ content: {
12427
+ "application/json": {
12428
+ delete_after_idle_days: number;
12429
+ labels?: {
12430
+ [key: string]: string;
12431
+ };
12432
+ } | null;
12433
+ };
12434
+ };
12435
+ /** @description Default Response */
12436
+ "4XX": {
12437
+ headers: {
12438
+ [name: string]: unknown;
12439
+ };
12440
+ content: {
12441
+ "application/json": components["schemas"]["ErrorBody"];
12442
+ };
12443
+ };
12444
+ /** @description Default Response */
12445
+ "5XX": {
12446
+ headers: {
12447
+ [name: string]: unknown;
12448
+ };
12449
+ content: {
12450
+ "application/json": components["schemas"]["ErrorBody"];
12451
+ };
12452
+ };
12453
+ };
12454
+ };
12455
+ putApiV1ProjectsProjectIdRetention: {
12456
+ parameters: {
12457
+ query?: never;
12458
+ header?: never;
12459
+ path: {
12460
+ /** @description UUIDv7, lowercase canonical form. */
12461
+ project_id: string;
12462
+ };
12463
+ cookie?: never;
12464
+ };
12465
+ requestBody: {
12466
+ content: {
12467
+ "application/json": {
12468
+ delete_after_idle_days: number;
12469
+ labels?: {
12470
+ [key: string]: string;
12471
+ };
12472
+ } | null;
12473
+ };
12474
+ };
12475
+ responses: {
12476
+ /** @description Default Response */
12477
+ 200: {
12478
+ headers: {
12479
+ [name: string]: unknown;
12480
+ };
12481
+ content: {
12482
+ "application/json": {
12483
+ delete_after_idle_days: number;
12484
+ labels?: {
12485
+ [key: string]: string;
12486
+ };
12487
+ } | null;
12488
+ };
12489
+ };
12490
+ /** @description Default Response */
12491
+ "4XX": {
12492
+ headers: {
12493
+ [name: string]: unknown;
12494
+ };
12495
+ content: {
12496
+ "application/json": components["schemas"]["ErrorBody"];
12497
+ };
12498
+ };
12499
+ /** @description Default Response */
12500
+ "5XX": {
12501
+ headers: {
12502
+ [name: string]: unknown;
12503
+ };
12504
+ content: {
12505
+ "application/json": components["schemas"]["ErrorBody"];
12506
+ };
12507
+ };
12508
+ };
12509
+ };
12172
12510
  getApiV1ProjectsProjectIdApiKeys: {
12173
12511
  parameters: {
12174
12512
  query?: {
@@ -12394,10 +12732,11 @@ export interface operations {
12394
12732
  /** @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). */
12395
12733
  caps?: {
12396
12734
  cpu_millis?: number;
12735
+ /** @description Fixed: size in MiB; omitted uses the template default (template defaults.memory_mib, else manifest default_caps.memory_mib_base, else 1024), bounded by plan and template. Elastic: maximum memory promise. */
12397
12736
  memory_mib?: number;
12398
12737
  disk_gib?: number;
12399
12738
  /**
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.
12739
+ * @description Memory allocation (contracts §32): fixed boots memory_mib (the template default when omitted) 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.
12401
12740
  * @enum {string}
12402
12741
  */
12403
12742
  allocation_mode?: "fixed" | "elastic";
@@ -12421,6 +12760,9 @@ export interface operations {
12421
12760
  lifetime?: components["schemas"]["WorkspaceLifetime"];
12422
12761
  /** @description adaptive (the learned timeout, default), never, or fixed:<seconds> (60..604800). Contracts §20.7. */
12423
12762
  idle_policy?: string;
12763
+ retention?: {
12764
+ delete_after_idle_days: number;
12765
+ };
12424
12766
  mode?: components["schemas"]["WorkspaceMode"];
12425
12767
  /** @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
12768
  computer_use?: boolean | null;
@@ -12775,6 +13117,53 @@ export interface operations {
12775
13117
  };
12776
13118
  };
12777
13119
  };
13120
+ putV1WorkspacesWorkspaceIdRetention: {
13121
+ parameters: {
13122
+ query?: never;
13123
+ header?: never;
13124
+ path: {
13125
+ /** @description UUIDv7, lowercase canonical form. */
13126
+ workspace_id: string;
13127
+ };
13128
+ cookie?: never;
13129
+ };
13130
+ requestBody: {
13131
+ content: {
13132
+ "application/json": {
13133
+ delete_after_idle_days: number;
13134
+ } | null;
13135
+ };
13136
+ };
13137
+ responses: {
13138
+ /** @description Default Response */
13139
+ 200: {
13140
+ headers: {
13141
+ [name: string]: unknown;
13142
+ };
13143
+ content: {
13144
+ "application/json": components["schemas"]["Workspace"];
13145
+ };
13146
+ };
13147
+ /** @description Default Response */
13148
+ "4XX": {
13149
+ headers: {
13150
+ [name: string]: unknown;
13151
+ };
13152
+ content: {
13153
+ "application/json": components["schemas"]["ErrorBody"];
13154
+ };
13155
+ };
13156
+ /** @description Default Response */
13157
+ "5XX": {
13158
+ headers: {
13159
+ [name: string]: unknown;
13160
+ };
13161
+ content: {
13162
+ "application/json": components["schemas"]["ErrorBody"];
13163
+ };
13164
+ };
13165
+ };
13166
+ };
12778
13167
  putV1WorkspacesWorkspaceIdIdlePolicy: {
12779
13168
  parameters: {
12780
13169
  query?: never;
@@ -13034,6 +13423,57 @@ export interface operations {
13034
13423
  };
13035
13424
  };
13036
13425
  };
13426
+ postV1WorkspacesWorkspaceIdUpgrade: {
13427
+ parameters: {
13428
+ query?: never;
13429
+ header?: never;
13430
+ path: {
13431
+ /** @description UUIDv7, lowercase canonical form. */
13432
+ workspace_id: string;
13433
+ };
13434
+ cookie?: never;
13435
+ };
13436
+ requestBody: {
13437
+ content: {
13438
+ "application/json": {
13439
+ /** @enum {string} */
13440
+ at?: "now" | "next_resume";
13441
+ };
13442
+ };
13443
+ };
13444
+ responses: {
13445
+ /** @description Default Response */
13446
+ 202: {
13447
+ headers: {
13448
+ [name: string]: unknown;
13449
+ };
13450
+ content: {
13451
+ "application/json": {
13452
+ operation: components["schemas"]["Operation"];
13453
+ workspace: components["schemas"]["Workspace"];
13454
+ };
13455
+ };
13456
+ };
13457
+ /** @description Default Response */
13458
+ "4XX": {
13459
+ headers: {
13460
+ [name: string]: unknown;
13461
+ };
13462
+ content: {
13463
+ "application/json": components["schemas"]["ErrorBody"];
13464
+ };
13465
+ };
13466
+ /** @description Default Response */
13467
+ "5XX": {
13468
+ headers: {
13469
+ [name: string]: unknown;
13470
+ };
13471
+ content: {
13472
+ "application/json": components["schemas"]["ErrorBody"];
13473
+ };
13474
+ };
13475
+ };
13476
+ };
13037
13477
  patchV1WorkspacesWorkspaceIdCaps: {
13038
13478
  parameters: {
13039
13479
  query?: never;
@@ -13207,10 +13647,11 @@ export interface operations {
13207
13647
  /** @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). */
13208
13648
  caps?: {
13209
13649
  cpu_millis?: number;
13650
+ /** @description Fixed: size in MiB; omitted uses the template default (template defaults.memory_mib, else manifest default_caps.memory_mib_base, else 1024), bounded by plan and template. Elastic: maximum memory promise. */
13210
13651
  memory_mib?: number;
13211
13652
  disk_gib?: number;
13212
13653
  /**
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.
13654
+ * @description Memory allocation (contracts §32): fixed boots memory_mib (the template default when omitted) 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.
13214
13655
  * @enum {string}
13215
13656
  */
13216
13657
  allocation_mode?: "fixed" | "elastic";
@@ -13470,7 +13911,7 @@ export interface operations {
13470
13911
  limit?: number;
13471
13912
  cursor?: string;
13472
13913
  state?: "queued" | "capacity_pending" | "running" | "succeeded" | "failed" | "canceled";
13473
- kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
13914
+ kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "upgrade" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
13474
13915
  };
13475
13916
  header?: never;
13476
13917
  path: {
@@ -13732,10 +14173,11 @@ export interface operations {
13732
14173
  /** @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). */
13733
14174
  caps?: {
13734
14175
  cpu_millis?: number;
14176
+ /** @description Fixed: size in MiB; omitted uses the template default (template defaults.memory_mib, else manifest default_caps.memory_mib_base, else 1024), bounded by plan and template. Elastic: maximum memory promise. */
13735
14177
  memory_mib?: number;
13736
14178
  disk_gib?: number;
13737
14179
  /**
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.
14180
+ * @description Memory allocation (contracts §32): fixed boots memory_mib (the template default when omitted) 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.
13739
14181
  * @enum {string}
13740
14182
  */
13741
14183
  allocation_mode?: "fixed" | "elastic";
@@ -13759,6 +14201,9 @@ export interface operations {
13759
14201
  lifetime?: components["schemas"]["WorkspaceLifetime"];
13760
14202
  /** @description adaptive (the learned timeout, default), never, or fixed:<seconds> (60..604800). Contracts §20.7. */
13761
14203
  idle_policy?: string;
14204
+ retention?: {
14205
+ delete_after_idle_days: number;
14206
+ };
13762
14207
  mode?: components["schemas"]["WorkspaceMode"];
13763
14208
  /** @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
14209
  computer_use?: boolean | null;
@@ -14113,6 +14558,53 @@ export interface operations {
14113
14558
  };
14114
14559
  };
14115
14560
  };
14561
+ putApiV1WorkspacesWorkspaceIdRetention: {
14562
+ parameters: {
14563
+ query?: never;
14564
+ header?: never;
14565
+ path: {
14566
+ /** @description UUIDv7, lowercase canonical form. */
14567
+ workspace_id: string;
14568
+ };
14569
+ cookie?: never;
14570
+ };
14571
+ requestBody: {
14572
+ content: {
14573
+ "application/json": {
14574
+ delete_after_idle_days: number;
14575
+ } | null;
14576
+ };
14577
+ };
14578
+ responses: {
14579
+ /** @description Default Response */
14580
+ 200: {
14581
+ headers: {
14582
+ [name: string]: unknown;
14583
+ };
14584
+ content: {
14585
+ "application/json": components["schemas"]["Workspace"];
14586
+ };
14587
+ };
14588
+ /** @description Default Response */
14589
+ "4XX": {
14590
+ headers: {
14591
+ [name: string]: unknown;
14592
+ };
14593
+ content: {
14594
+ "application/json": components["schemas"]["ErrorBody"];
14595
+ };
14596
+ };
14597
+ /** @description Default Response */
14598
+ "5XX": {
14599
+ headers: {
14600
+ [name: string]: unknown;
14601
+ };
14602
+ content: {
14603
+ "application/json": components["schemas"]["ErrorBody"];
14604
+ };
14605
+ };
14606
+ };
14607
+ };
14116
14608
  putApiV1WorkspacesWorkspaceIdIdlePolicy: {
14117
14609
  parameters: {
14118
14610
  query?: never;
@@ -14372,6 +14864,57 @@ export interface operations {
14372
14864
  };
14373
14865
  };
14374
14866
  };
14867
+ postApiV1WorkspacesWorkspaceIdUpgrade: {
14868
+ parameters: {
14869
+ query?: never;
14870
+ header?: never;
14871
+ path: {
14872
+ /** @description UUIDv7, lowercase canonical form. */
14873
+ workspace_id: string;
14874
+ };
14875
+ cookie?: never;
14876
+ };
14877
+ requestBody: {
14878
+ content: {
14879
+ "application/json": {
14880
+ /** @enum {string} */
14881
+ at?: "now" | "next_resume";
14882
+ };
14883
+ };
14884
+ };
14885
+ responses: {
14886
+ /** @description Default Response */
14887
+ 202: {
14888
+ headers: {
14889
+ [name: string]: unknown;
14890
+ };
14891
+ content: {
14892
+ "application/json": {
14893
+ operation: components["schemas"]["Operation"];
14894
+ workspace: components["schemas"]["Workspace"];
14895
+ };
14896
+ };
14897
+ };
14898
+ /** @description Default Response */
14899
+ "4XX": {
14900
+ headers: {
14901
+ [name: string]: unknown;
14902
+ };
14903
+ content: {
14904
+ "application/json": components["schemas"]["ErrorBody"];
14905
+ };
14906
+ };
14907
+ /** @description Default Response */
14908
+ "5XX": {
14909
+ headers: {
14910
+ [name: string]: unknown;
14911
+ };
14912
+ content: {
14913
+ "application/json": components["schemas"]["ErrorBody"];
14914
+ };
14915
+ };
14916
+ };
14917
+ };
14375
14918
  patchApiV1WorkspacesWorkspaceIdCaps: {
14376
14919
  parameters: {
14377
14920
  query?: never;
@@ -14545,10 +15088,11 @@ export interface operations {
14545
15088
  /** @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). */
14546
15089
  caps?: {
14547
15090
  cpu_millis?: number;
15091
+ /** @description Fixed: size in MiB; omitted uses the template default (template defaults.memory_mib, else manifest default_caps.memory_mib_base, else 1024), bounded by plan and template. Elastic: maximum memory promise. */
14548
15092
  memory_mib?: number;
14549
15093
  disk_gib?: number;
14550
15094
  /**
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.
15095
+ * @description Memory allocation (contracts §32): fixed boots memory_mib (the template default when omitted) 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.
14552
15096
  * @enum {string}
14553
15097
  */
14554
15098
  allocation_mode?: "fixed" | "elastic";
@@ -14808,7 +15352,7 @@ export interface operations {
14808
15352
  limit?: number;
14809
15353
  cursor?: string;
14810
15354
  state?: "queued" | "capacity_pending" | "running" | "succeeded" | "failed" | "canceled";
14811
- kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
15355
+ kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "upgrade" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
14812
15356
  };
14813
15357
  header?: never;
14814
15358
  path: {
@@ -15341,6 +15885,10 @@ export interface operations {
15341
15885
  * @default 86400
15342
15886
  */
15343
15887
  ttl_seconds?: number;
15888
+ /** @description Embed in these 1–10 canonical HTTPS origins, at most 2048 total origin characters. */
15889
+ embed?: {
15890
+ origins: string[];
15891
+ };
15344
15892
  /** @description Where the link lands (default `/`): a path starting with one `/`, printable ASCII, query allowed. */
15345
15893
  path?: string;
15346
15894
  };
@@ -15695,6 +16243,10 @@ export interface operations {
15695
16243
  * @default 86400
15696
16244
  */
15697
16245
  ttl_seconds?: number;
16246
+ /** @description Embed in these 1–10 canonical HTTPS origins, at most 2048 total origin characters. */
16247
+ embed?: {
16248
+ origins: string[];
16249
+ };
15698
16250
  /** @description Where the link lands (default `/`): a path starting with one `/`, printable ASCII, query allowed. */
15699
16251
  path?: string;
15700
16252
  };
@@ -36351,7 +36903,7 @@ export interface operations {
36351
36903
  parameters: {
36352
36904
  query?: {
36353
36905
  state?: "queued" | "capacity_pending" | "running" | "failed" | "canceled";
36354
- kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
36906
+ kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "upgrade" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
36355
36907
  /** @description UUIDv7, lowercase canonical form. */
36356
36908
  organization_id?: string;
36357
36909
  /** @description UUIDv7, lowercase canonical form. */
@@ -38345,7 +38897,7 @@ export interface operations {
38345
38897
  /** @description latency: per operation kind; psi: fleet and top hosts. */
38346
38898
  metric: "latency" | "psi";
38347
38899
  window?: "7d" | "30d" | "90d";
38348
- kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
38900
+ kind?: "open" | "suspend" | "resume" | "fork" | "snapshot" | "restore" | "delete" | "move" | "resize" | "upgrade" | "volume_create" | "volume_attach" | "volume_detach" | "volume_delete" | "reset" | "layer_snapshot";
38349
38901
  };
38350
38902
  header?: never;
38351
38903
  path?: never;