@shardflux/sdk 0.12.0 → 0.13.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.
@@ -1366,7 +1366,7 @@ export interface paths {
1366
1366
  put?: never;
1367
1367
  /**
1368
1368
  * Open a workspace by key (create on first use, reconnect or resume afterwards)
1369
- * @description New keys resolve `template` to its latest published version; reopening never changes or resets the workspace (the response reports the template version actually used). 200 when the workspace is already running and ready (with `cell_endpoint` and a tool token); otherwise 202 with the operation to poll. A running workspace whose startup failed (`startup.state` failed, contracts §24.4) is not ready: the open is 202 with an `open` operation (input.startup_retry) that runs the failed step again. Concurrent opens of one key share one workspace and one operation. `secrets` (optional) binds secret names injected into every exec/PTY start: it sets the binding of a new key and replaces it on an existing key (omitted = unchanged); an unknown or unusable name is 422 details.reason secret_not_available with details.names (nothing is created or changed). The template version’s secret inputs (contracts §24.3) join the binding on create and whenever `secrets` is given; a required one this workspace may not use is 422 input_required (details.kind secret); a bound name equal to a template env key or text input is 422 env_collision (details.name). `inputs` (optional): the version’s text inputs {NAME: string}; stored on create (else the declared default) and replaced on an existing key (omitted = unchanged); 422 input_unknown, input_invalid or input_required (details.names). `lifetime` (contracts §19.11): omitted = the version’s default (else persistent); `session` workspaces are discarded when the session ends (close(), idle timeout), after which the key opens a NEW workspace; reopening a live key with another lifetime is 409 lifetime_mismatch. A new workspace is `layered` when its version supports it and layered opens are enabled (`disk_layout`). Errors: 404 template/key outside scope, 402 `entitlement_required`, 403 `quota_exceeded` (details.limit), 409 operation in progress, key whose deletion is still in progress (workspace_deleted) or lifetime_mismatch, 422 reserved_key_prefix (keys starting with sf:). Supports Idempotency-Key. Held open (contracts §22.3): with `Prefer: wait=<seconds>` (at most 20) an open whose outcome is an operation is held until the operation is terminal or the wait elapses; success answers 200 with the running workspace, the succeeded operation and a tool token (`Preference-Applied: wait=<seconds>`), anything else 202 with the fresh operation. Without `Preference-Applied` the server did not wait: poll the operation. `mode` (contracts §29): omitted = processful for a new key and the stored mode for an existing one; `file_first` creates a workspace whose state is a versioned file tree with no VM between executions: it is ready at once (200 with a tool token, `observed_state` running, `tree_revision` 0, no operation), needs a layered template version (409 layout_unsupported otherwise) and is persistent (`lifetime: session` or `idle_policy` with it are 422 not_supported_for_mode); each open of a file-first key re-resolves the size of its execution VMs from `caps`, the template and the plan. 422 mode_not_available while the deployment does not offer file-first workspaces; reopening a key with another mode is 409 mode_mismatch.
1369
+ * @description New keys resolve `template` to its latest published version; reopening never changes or resets the workspace (the response reports the template version actually used). 200 when the workspace is already running and ready (with `cell_endpoint` and a tool token); otherwise 202 with the operation to poll. A running workspace whose startup failed (`startup.state` failed, contracts §24.4) is not ready: the open is 202 with an `open` operation (input.startup_retry) that runs the failed step again. Concurrent opens of one key share one workspace and one operation. `secrets` (optional) binds secret names injected into every exec/PTY start: it sets the binding of a new key and replaces it on an existing key (omitted = unchanged); an unknown or unusable name is 422 details.reason secret_not_available with details.names (nothing is created or changed). The template version’s secret inputs (contracts §24.3) join the binding on create and whenever `secrets` is given; a required one this workspace may not use is 422 input_required (details.kind secret); a bound name equal to a template env key or text input is 422 env_collision (details.name). `inputs` (optional): the version’s text inputs {NAME: string}; stored on create (else the declared default) and replaced on an existing key (omitted = unchanged); 422 input_unknown, input_invalid or input_required (details.names). `lifetime` (contracts §19.11): omitted = the version’s default (else persistent); `session` workspaces are discarded when the session ends (close(), idle timeout), after which the key opens a NEW workspace; reopening a live key with another lifetime is 409 lifetime_mismatch. A new workspace is `layered` when its version supports it and layered opens are enabled (`disk_layout`). Errors: 404 template/key outside scope, 402 `entitlement_required`, 403 `quota_exceeded` (details.limit), 409 operation in progress, key whose deletion is still in progress (workspace_deleted) or lifetime_mismatch, 422 reserved_key_prefix (keys starting with sf:). Supports Idempotency-Key. Held open (contracts §22.3): with `Prefer: wait=<seconds>` (at most 20) an open whose outcome is an operation is held until the operation is terminal or the wait elapses; success answers 200 with the running workspace, the succeeded operation and a tool token (`Preference-Applied: wait=<seconds>`), anything else 202 with the fresh operation. Without `Preference-Applied` the server did not wait: poll the operation. `mode` (contracts §29): omitted = processful for a new key and the stored mode for an existing one; `file_first` creates a workspace whose state is a versioned file tree with no VM between executions: it is ready at once (200 with a tool token, `observed_state` running, `tree_revision` 0, no operation), needs a layered template version (409 layout_unsupported otherwise) and is persistent (`lifetime: session` or `idle_policy` with it are 422 not_supported_for_mode); each open of a file-first key re-resolves the size of its execution VMs from `caps`, the template and the plan. 422 mode_not_available while the deployment does not offer file-first workspaces; reopening a key with another mode is 409 mode_mismatch. Memory allocation (contracts §32): caps.allocation_mode elastic with caps.memory_mib_held; 422 validation_failed details.field caps.allocation_mode reason allocation_mode_not_available (the organization lacks elastic memory; nothing is created or changed), reason not_supported_for_mode (file_first); details.field caps.memory_mib_held reason requires_elastic (held without elastic) or exceeds_memory_mib (held above caps.memory_mib).
1370
1370
  */
1371
1371
  post: operations["postV1WorkspacesOpen"];
1372
1372
  delete?: never;
@@ -1588,7 +1588,7 @@ export interface paths {
1588
1588
  put?: never;
1589
1589
  /**
1590
1590
  * Fork a workspace into a new key (independent copy of its committed state)
1591
- * @description Creates the target workspace (same template version and disk layout) and a `fork` operation on it, admitted like a start. Caps default to the source’s. `lifetime` is the fork’s own (default persistent): forking a session keeps its state. A file-first source (contracts §29) is 409 not_supported_for_mode. Supports Idempotency-Key.
1591
+ * @description Creates the target workspace (same template version and disk layout) and a `fork` operation on it, admitted like a start. Caps default to the source’s. `lifetime` is the fork’s own (default persistent): forking a session keeps its state. A file-first source (contracts §29) is 409 not_supported_for_mode. Supports Idempotency-Key. Caps (and the memory allocation mode) default to the source’s. Held fork (contracts §22.7): with Prefer: wait=<seconds> (at most 20), holds through the terminal operation. Success returns 200 with the running target, succeeded operation and a final-epoch tool token for agent_label/tools. Otherwise returns 202 with the fresh operation. Preference-Applied confirms the wait; without it, poll as usual. A token that could not be issued is null; fetch it from the target tool-token route. Memory allocation (contracts §32): caps.allocation_mode elastic with caps.memory_mib_held; 422 validation_failed details.field caps.allocation_mode reason allocation_mode_not_available (the organization lacks elastic memory; nothing is created or changed), reason not_supported_for_mode (file_first); details.field caps.memory_mib_held reason requires_elastic (held without elastic) or exceeds_memory_mib (held above caps.memory_mib).
1592
1592
  */
1593
1593
  post: operations["postV1WorkspacesWorkspaceIdFork"];
1594
1594
  delete?: never;
@@ -1648,7 +1648,7 @@ export interface paths {
1648
1648
  put?: never;
1649
1649
  /**
1650
1650
  * Save a layered workspace as the next version of an organization template
1651
- * @description Everything in the workspace becomes template content (its whole filesystem, minus the sf-scrub.v1 list, the contents of /proc, /sys, /dev, /run and /tmp, and shared-volume contents), stored as one new org layer on the workspace’s template chain. A running workspace is captured briefly (`operation`, layer_snapshot); a suspended one uses its current checkpoint; `checkpoint_id` saves a committed checkpoint instead. 202 SaveAsTemplateResponse: poll the build. Owners/admins and API keys with a tool permission (403 otherwise). Errors: 409 legacy_disk_layout, workspace_not_running, operation_in_progress, not_supported_for_mode (file-first, contracts §29), template_archived, 422 platform_template_slug, invalid_defaults, update_policy_not_available, too_many_acknowledged_findings, invalid_path, 403 quota_exceeded (concurrent_template_builds). Supports Idempotency-Key.
1651
+ * @description Everything in the workspace becomes template content (its whole filesystem, minus the sf-scrub.v1 list, the contents of /proc, /sys, /dev, /run and /tmp, and shared-volume contents), stored as one new org layer on the workspace’s template chain. A running workspace is captured briefly (`operation`, layer_snapshot); a suspended one uses its current checkpoint; `checkpoint_id` saves a committed checkpoint instead. 202 SaveAsTemplateResponse: poll the build. Owners/admins and API keys with a tool permission (403 otherwise). Immutable paths (contracts §34.1): the new version declares the target template’s open version’s immutable paths (else the workspace’s version’s); their content comes from that template’s newest published version, not from the workspace (a draft publish keeps the draft’s own content). Errors: 409 legacy_disk_layout, workspace_not_running, operation_in_progress, not_supported_for_mode (file-first, contracts §29), template_archived, 422 platform_template_slug, invalid_defaults, too_many_acknowledged_findings, invalid_path, immutable_paths_unsupported_base (the workspace’s base has no guest agent with immutable_paths.v1; details.base), 403 quota_exceeded (concurrent_template_builds). Supports Idempotency-Key.
1652
1652
  */
1653
1653
  post: operations["postV1WorkspacesWorkspaceIdSaveAsTemplate"];
1654
1654
  delete?: never;
@@ -1759,7 +1759,7 @@ export interface paths {
1759
1759
  put?: never;
1760
1760
  /**
1761
1761
  * Open a workspace by key (create on first use, reconnect or resume afterwards)
1762
- * @description New keys resolve `template` to its latest published version; reopening never changes or resets the workspace (the response reports the template version actually used). 200 when the workspace is already running and ready (with `cell_endpoint` and a tool token); otherwise 202 with the operation to poll. A running workspace whose startup failed (`startup.state` failed, contracts §24.4) is not ready: the open is 202 with an `open` operation (input.startup_retry) that runs the failed step again. Concurrent opens of one key share one workspace and one operation. `secrets` (optional) binds secret names injected into every exec/PTY start: it sets the binding of a new key and replaces it on an existing key (omitted = unchanged); an unknown or unusable name is 422 details.reason secret_not_available with details.names (nothing is created or changed). The template version’s secret inputs (contracts §24.3) join the binding on create and whenever `secrets` is given; a required one this workspace may not use is 422 input_required (details.kind secret); a bound name equal to a template env key or text input is 422 env_collision (details.name). `inputs` (optional): the version’s text inputs {NAME: string}; stored on create (else the declared default) and replaced on an existing key (omitted = unchanged); 422 input_unknown, input_invalid or input_required (details.names). `lifetime` (contracts §19.11): omitted = the version’s default (else persistent); `session` workspaces are discarded when the session ends (close(), idle timeout), after which the key opens a NEW workspace; reopening a live key with another lifetime is 409 lifetime_mismatch. A new workspace is `layered` when its version supports it and layered opens are enabled (`disk_layout`). Errors: 404 template/key outside scope, 402 `entitlement_required`, 403 `quota_exceeded` (details.limit), 409 operation in progress, key whose deletion is still in progress (workspace_deleted) or lifetime_mismatch, 422 reserved_key_prefix (keys starting with sf:). Supports Idempotency-Key. Held open (contracts §22.3): with `Prefer: wait=<seconds>` (at most 20) an open whose outcome is an operation is held until the operation is terminal or the wait elapses; success answers 200 with the running workspace, the succeeded operation and a tool token (`Preference-Applied: wait=<seconds>`), anything else 202 with the fresh operation. Without `Preference-Applied` the server did not wait: poll the operation. `mode` (contracts §29): omitted = processful for a new key and the stored mode for an existing one; `file_first` creates a workspace whose state is a versioned file tree with no VM between executions: it is ready at once (200 with a tool token, `observed_state` running, `tree_revision` 0, no operation), needs a layered template version (409 layout_unsupported otherwise) and is persistent (`lifetime: session` or `idle_policy` with it are 422 not_supported_for_mode); each open of a file-first key re-resolves the size of its execution VMs from `caps`, the template and the plan. 422 mode_not_available while the deployment does not offer file-first workspaces; reopening a key with another mode is 409 mode_mismatch.
1762
+ * @description New keys resolve `template` to its latest published version; reopening never changes or resets the workspace (the response reports the template version actually used). 200 when the workspace is already running and ready (with `cell_endpoint` and a tool token); otherwise 202 with the operation to poll. A running workspace whose startup failed (`startup.state` failed, contracts §24.4) is not ready: the open is 202 with an `open` operation (input.startup_retry) that runs the failed step again. Concurrent opens of one key share one workspace and one operation. `secrets` (optional) binds secret names injected into every exec/PTY start: it sets the binding of a new key and replaces it on an existing key (omitted = unchanged); an unknown or unusable name is 422 details.reason secret_not_available with details.names (nothing is created or changed). The template version’s secret inputs (contracts §24.3) join the binding on create and whenever `secrets` is given; a required one this workspace may not use is 422 input_required (details.kind secret); a bound name equal to a template env key or text input is 422 env_collision (details.name). `inputs` (optional): the version’s text inputs {NAME: string}; stored on create (else the declared default) and replaced on an existing key (omitted = unchanged); 422 input_unknown, input_invalid or input_required (details.names). `lifetime` (contracts §19.11): omitted = the version’s default (else persistent); `session` workspaces are discarded when the session ends (close(), idle timeout), after which the key opens a NEW workspace; reopening a live key with another lifetime is 409 lifetime_mismatch. A new workspace is `layered` when its version supports it and layered opens are enabled (`disk_layout`). Errors: 404 template/key outside scope, 402 `entitlement_required`, 403 `quota_exceeded` (details.limit), 409 operation in progress, key whose deletion is still in progress (workspace_deleted) or lifetime_mismatch, 422 reserved_key_prefix (keys starting with sf:). Supports Idempotency-Key. Held open (contracts §22.3): with `Prefer: wait=<seconds>` (at most 20) an open whose outcome is an operation is held until the operation is terminal or the wait elapses; success answers 200 with the running workspace, the succeeded operation and a tool token (`Preference-Applied: wait=<seconds>`), anything else 202 with the fresh operation. Without `Preference-Applied` the server did not wait: poll the operation. `mode` (contracts §29): omitted = processful for a new key and the stored mode for an existing one; `file_first` creates a workspace whose state is a versioned file tree with no VM between executions: it is ready at once (200 with a tool token, `observed_state` running, `tree_revision` 0, no operation), needs a layered template version (409 layout_unsupported otherwise) and is persistent (`lifetime: session` or `idle_policy` with it are 422 not_supported_for_mode); each open of a file-first key re-resolves the size of its execution VMs from `caps`, the template and the plan. 422 mode_not_available while the deployment does not offer file-first workspaces; reopening a key with another mode is 409 mode_mismatch. Memory allocation (contracts §32): caps.allocation_mode elastic with caps.memory_mib_held; 422 validation_failed details.field caps.allocation_mode reason allocation_mode_not_available (the organization lacks elastic memory; nothing is created or changed), reason not_supported_for_mode (file_first); details.field caps.memory_mib_held reason requires_elastic (held without elastic) or exceeds_memory_mib (held above caps.memory_mib).
1763
1763
  */
1764
1764
  post: operations["postApiV1WorkspacesOpen"];
1765
1765
  delete?: never;
@@ -1981,7 +1981,7 @@ export interface paths {
1981
1981
  put?: never;
1982
1982
  /**
1983
1983
  * Fork a workspace into a new key (independent copy of its committed state)
1984
- * @description Creates the target workspace (same template version and disk layout) and a `fork` operation on it, admitted like a start. Caps default to the source’s. `lifetime` is the fork’s own (default persistent): forking a session keeps its state. A file-first source (contracts §29) is 409 not_supported_for_mode. Supports Idempotency-Key.
1984
+ * @description Creates the target workspace (same template version and disk layout) and a `fork` operation on it, admitted like a start. Caps default to the source’s. `lifetime` is the fork’s own (default persistent): forking a session keeps its state. A file-first source (contracts §29) is 409 not_supported_for_mode. Supports Idempotency-Key. Caps (and the memory allocation mode) default to the source’s. Held fork (contracts §22.7): with Prefer: wait=<seconds> (at most 20), holds through the terminal operation. Success returns 200 with the running target, succeeded operation and a final-epoch tool token for agent_label/tools. Otherwise returns 202 with the fresh operation. Preference-Applied confirms the wait; without it, poll as usual. A token that could not be issued is null; fetch it from the target tool-token route. Memory allocation (contracts §32): caps.allocation_mode elastic with caps.memory_mib_held; 422 validation_failed details.field caps.allocation_mode reason allocation_mode_not_available (the organization lacks elastic memory; nothing is created or changed), reason not_supported_for_mode (file_first); details.field caps.memory_mib_held reason requires_elastic (held without elastic) or exceeds_memory_mib (held above caps.memory_mib).
1985
1985
  */
1986
1986
  post: operations["postApiV1WorkspacesWorkspaceIdFork"];
1987
1987
  delete?: never;
@@ -2041,7 +2041,7 @@ export interface paths {
2041
2041
  put?: never;
2042
2042
  /**
2043
2043
  * Save a layered workspace as the next version of an organization template
2044
- * @description Everything in the workspace becomes template content (its whole filesystem, minus the sf-scrub.v1 list, the contents of /proc, /sys, /dev, /run and /tmp, and shared-volume contents), stored as one new org layer on the workspace’s template chain. A running workspace is captured briefly (`operation`, layer_snapshot); a suspended one uses its current checkpoint; `checkpoint_id` saves a committed checkpoint instead. 202 SaveAsTemplateResponse: poll the build. Owners/admins and API keys with a tool permission (403 otherwise). Errors: 409 legacy_disk_layout, workspace_not_running, operation_in_progress, not_supported_for_mode (file-first, contracts §29), template_archived, 422 platform_template_slug, invalid_defaults, update_policy_not_available, too_many_acknowledged_findings, invalid_path, 403 quota_exceeded (concurrent_template_builds). Supports Idempotency-Key.
2044
+ * @description Everything in the workspace becomes template content (its whole filesystem, minus the sf-scrub.v1 list, the contents of /proc, /sys, /dev, /run and /tmp, and shared-volume contents), stored as one new org layer on the workspace’s template chain. A running workspace is captured briefly (`operation`, layer_snapshot); a suspended one uses its current checkpoint; `checkpoint_id` saves a committed checkpoint instead. 202 SaveAsTemplateResponse: poll the build. Owners/admins and API keys with a tool permission (403 otherwise). Immutable paths (contracts §34.1): the new version declares the target template’s open version’s immutable paths (else the workspace’s version’s); their content comes from that template’s newest published version, not from the workspace (a draft publish keeps the draft’s own content). Errors: 409 legacy_disk_layout, workspace_not_running, operation_in_progress, not_supported_for_mode (file-first, contracts §29), template_archived, 422 platform_template_slug, invalid_defaults, too_many_acknowledged_findings, invalid_path, immutable_paths_unsupported_base (the workspace’s base has no guest agent with immutable_paths.v1; details.base), 403 quota_exceeded (concurrent_template_builds). Supports Idempotency-Key.
2045
2045
  */
2046
2046
  post: operations["postApiV1WorkspacesWorkspaceIdSaveAsTemplate"];
2047
2047
  delete?: never;
@@ -2453,7 +2453,7 @@ export interface paths {
2453
2453
  put?: never;
2454
2454
  /**
2455
2455
  * Request a custom template build (queued for the isolated builder)
2456
- * @description 202 with the queued build. Takes recipe v1 (a Dockerfile) or recipe v2 (contracts §24.1: validated against the base, compiled to the builder’s steps, uploads locked). Records the canonical recipe and its SHA-256 (provenance input), pins the base version, clamps resources to the plan and assigns `target_version`. The cell executes it (building -> testing -> publishing -> published) and the API then registers the version (published at once unless auto_publish=false); poll GET .../template-builds/{id} until `registration.state` is registered (or the build failed/was canceled). `builder_availability` says whether a builder is running. Errors: 422 when the recipe is outside the host builder Dockerfile dialect or the slug is not a builder slug (`details.reason`: multi_stage_not_supported, from_not_template_base, stage_names_not_supported, from_flags_not_supported, base_mismatch, run_flags_not_supported, heredoc_not_supported, instruction_not_supported, no_build_context, env_invalid, user_invalid, too_many_steps, recipe_too_large, slug_not_supported_by_builder, platform_template_slug, reserved_template_slug, base_not_found, base_not_published, base_archived, architecture_not_supported, ...; `line` for line errors; recipe v2: invalid_recipe (details.field, details.detail), base_not_layered, language_unavailable, language_conflict, invalid_package, too_many_files, platform_owned_path, invalid_path, upload_required, upload_missing, upload_digest_mismatch, upload_too_large, too_many_steps, recipe_too_large, allowlist_empty, allow_hosts_without_allowlist, extra_hosts_without_auto, too_many_hosts, invalid_host, ip_literal_not_allowed, host_not_allowed, invalid_settings, services_unsupported, too_many_acknowledged_findings), 503 dependency_unavailable (uploads_not_configured), 402 entitlement_required, 403 quota_exceeded (concurrent_template_builds), 409 template_archived. Supports Idempotency-Key.
2456
+ * @description 202 with the queued build. Takes recipe v1 (a Dockerfile) or recipe v2 (contracts §24.1: validated against the base, compiled to the builder’s steps, uploads locked). Records the canonical recipe and its SHA-256 (provenance input), pins the base version, clamps resources to the plan and assigns `target_version`. The cell executes it (building -> testing -> publishing -> published) and the API then registers the version (published at once unless auto_publish=false); poll GET .../template-builds/{id} until `registration.state` is registered (or the build failed/was canceled). `builder_availability` says whether a builder is running. Errors: 422 when the recipe is outside the host builder Dockerfile dialect or the slug is not a builder slug (`details.reason`: multi_stage_not_supported, from_not_template_base, stage_names_not_supported, from_flags_not_supported, base_mismatch, run_flags_not_supported, heredoc_not_supported, instruction_not_supported, no_build_context, env_invalid, user_invalid, too_many_steps, recipe_too_large, slug_not_supported_by_builder, platform_template_slug, reserved_template_slug, base_not_found, base_not_published, base_archived, architecture_not_supported, ...; `line` for line errors; recipe v2: invalid_recipe (details.field, details.detail), base_not_layered, language_unavailable, language_conflict, invalid_package, too_many_files, platform_owned_path, invalid_path, upload_required, upload_missing, upload_digest_mismatch, upload_too_large, too_many_steps, recipe_too_large, allowlist_empty, allow_hosts_without_allowlist, extra_hosts_without_auto, too_many_hosts, invalid_host, ip_literal_not_allowed, host_not_allowed, invalid_settings, services_unsupported, too_many_acknowledged_findings; immutable paths (contracts §34.1): invalid_path (details.field recipe.immutable[<i>]), immutable_path_removed (the recipe drops a path of the template’s open version; details.removed), immutable_paths_unsupported_base (a non-empty list on a base whose guest agent lacks immutable_paths.v1, or a recipe v1 build of a template with immutable paths; details.base {name, version})), 503 dependency_unavailable (uploads_not_configured), 402 entitlement_required, 403 quota_exceeded (concurrent_template_builds), 409 template_archived. Supports Idempotency-Key.
2457
2457
  */
2458
2458
  post: operations["postV1OrganizationsOrganizationIdTemplateBuilds"];
2459
2459
  delete?: never;
@@ -2710,7 +2710,7 @@ export interface paths {
2710
2710
  put?: never;
2711
2711
  /**
2712
2712
  * Publish an organization template version
2713
- * @description Only a version produced by a registered `published` build (or a legacy `succeeded` one) whose scan and compatibility checks passed (409 `not_produced_by_succeeded_build` otherwise; 409 `version_archived`). New workspaces of the slug then use the latest published version; existing workspaces keep theirs. Idempotent. Owner/admin.
2713
+ * @description Only a version produced by a registered `published` build (or a legacy `succeeded` one) whose scan and compatibility checks passed (409 `not_produced_by_succeeded_build` otherwise; 409 `version_archived`). New workspaces of the slug then use the latest published version; existing workspaces keep theirs, except their immutable paths (contracts §34), which show the latest published version from their next cold boot or resume. Idempotent. Owner/admin.
2714
2714
  */
2715
2715
  post: operations["postV1OrganizationsOrganizationIdTemplatesSlugVersionsVersionPublish"];
2716
2716
  delete?: never;
@@ -2730,7 +2730,7 @@ export interface paths {
2730
2730
  put?: never;
2731
2731
  /**
2732
2732
  * Archive an organization template version
2733
- * @description Hides the version and stops `open` from picking it for new workspaces; existing workspaces are never changed (versions are immutable). Idempotent. Owner/admin.
2733
+ * @description Hides the version and stops `open` from picking it for new workspaces; existing workspaces keep their version (versions are immutable). Archiving the latest published version rolls immutable paths (contracts §34) back: workspaces show the previous published version there from their next cold boot or resume. Idempotent. Owner/admin.
2734
2734
  */
2735
2735
  post: operations["postV1OrganizationsOrganizationIdTemplatesSlugVersionsVersionArchive"];
2736
2736
  delete?: never;
@@ -2791,7 +2791,7 @@ export interface paths {
2791
2791
  put?: never;
2792
2792
  /**
2793
2793
  * Request a custom template build (queued for the isolated builder)
2794
- * @description 202 with the queued build. Takes recipe v1 (a Dockerfile) or recipe v2 (contracts §24.1: validated against the base, compiled to the builder’s steps, uploads locked). Records the canonical recipe and its SHA-256 (provenance input), pins the base version, clamps resources to the plan and assigns `target_version`. The cell executes it (building -> testing -> publishing -> published) and the API then registers the version (published at once unless auto_publish=false); poll GET .../template-builds/{id} until `registration.state` is registered (or the build failed/was canceled). `builder_availability` says whether a builder is running. Errors: 422 when the recipe is outside the host builder Dockerfile dialect or the slug is not a builder slug (`details.reason`: multi_stage_not_supported, from_not_template_base, stage_names_not_supported, from_flags_not_supported, base_mismatch, run_flags_not_supported, heredoc_not_supported, instruction_not_supported, no_build_context, env_invalid, user_invalid, too_many_steps, recipe_too_large, slug_not_supported_by_builder, platform_template_slug, reserved_template_slug, base_not_found, base_not_published, base_archived, architecture_not_supported, ...; `line` for line errors; recipe v2: invalid_recipe (details.field, details.detail), base_not_layered, language_unavailable, language_conflict, invalid_package, too_many_files, platform_owned_path, invalid_path, upload_required, upload_missing, upload_digest_mismatch, upload_too_large, too_many_steps, recipe_too_large, allowlist_empty, allow_hosts_without_allowlist, extra_hosts_without_auto, too_many_hosts, invalid_host, ip_literal_not_allowed, host_not_allowed, invalid_settings, services_unsupported, too_many_acknowledged_findings), 503 dependency_unavailable (uploads_not_configured), 402 entitlement_required, 403 quota_exceeded (concurrent_template_builds), 409 template_archived. Supports Idempotency-Key.
2794
+ * @description 202 with the queued build. Takes recipe v1 (a Dockerfile) or recipe v2 (contracts §24.1: validated against the base, compiled to the builder’s steps, uploads locked). Records the canonical recipe and its SHA-256 (provenance input), pins the base version, clamps resources to the plan and assigns `target_version`. The cell executes it (building -> testing -> publishing -> published) and the API then registers the version (published at once unless auto_publish=false); poll GET .../template-builds/{id} until `registration.state` is registered (or the build failed/was canceled). `builder_availability` says whether a builder is running. Errors: 422 when the recipe is outside the host builder Dockerfile dialect or the slug is not a builder slug (`details.reason`: multi_stage_not_supported, from_not_template_base, stage_names_not_supported, from_flags_not_supported, base_mismatch, run_flags_not_supported, heredoc_not_supported, instruction_not_supported, no_build_context, env_invalid, user_invalid, too_many_steps, recipe_too_large, slug_not_supported_by_builder, platform_template_slug, reserved_template_slug, base_not_found, base_not_published, base_archived, architecture_not_supported, ...; `line` for line errors; recipe v2: invalid_recipe (details.field, details.detail), base_not_layered, language_unavailable, language_conflict, invalid_package, too_many_files, platform_owned_path, invalid_path, upload_required, upload_missing, upload_digest_mismatch, upload_too_large, too_many_steps, recipe_too_large, allowlist_empty, allow_hosts_without_allowlist, extra_hosts_without_auto, too_many_hosts, invalid_host, ip_literal_not_allowed, host_not_allowed, invalid_settings, services_unsupported, too_many_acknowledged_findings; immutable paths (contracts §34.1): invalid_path (details.field recipe.immutable[<i>]), immutable_path_removed (the recipe drops a path of the template’s open version; details.removed), immutable_paths_unsupported_base (a non-empty list on a base whose guest agent lacks immutable_paths.v1, or a recipe v1 build of a template with immutable paths; details.base {name, version})), 503 dependency_unavailable (uploads_not_configured), 402 entitlement_required, 403 quota_exceeded (concurrent_template_builds), 409 template_archived. Supports Idempotency-Key.
2795
2795
  */
2796
2796
  post: operations["postApiV1OrganizationsOrganizationIdTemplateBuilds"];
2797
2797
  delete?: never;
@@ -2968,7 +2968,7 @@ export interface paths {
2968
2968
  put?: never;
2969
2969
  /**
2970
2970
  * Publish an organization template version
2971
- * @description Only a version produced by a registered `published` build (or a legacy `succeeded` one) whose scan and compatibility checks passed (409 `not_produced_by_succeeded_build` otherwise; 409 `version_archived`). New workspaces of the slug then use the latest published version; existing workspaces keep theirs. Idempotent. Owner/admin.
2971
+ * @description Only a version produced by a registered `published` build (or a legacy `succeeded` one) whose scan and compatibility checks passed (409 `not_produced_by_succeeded_build` otherwise; 409 `version_archived`). New workspaces of the slug then use the latest published version; existing workspaces keep theirs, except their immutable paths (contracts §34), which show the latest published version from their next cold boot or resume. Idempotent. Owner/admin.
2972
2972
  */
2973
2973
  post: operations["postApiV1OrganizationsOrganizationIdTemplatesSlugVersionsVersionPublish"];
2974
2974
  delete?: never;
@@ -2988,7 +2988,7 @@ export interface paths {
2988
2988
  put?: never;
2989
2989
  /**
2990
2990
  * Archive an organization template version
2991
- * @description Hides the version and stops `open` from picking it for new workspaces; existing workspaces are never changed (versions are immutable). Idempotent. Owner/admin.
2991
+ * @description Hides the version and stops `open` from picking it for new workspaces; existing workspaces keep their version (versions are immutable). Archiving the latest published version rolls immutable paths (contracts §34) back: workspaces show the previous published version there from their next cold boot or resume. Idempotent. Owner/admin.
2992
2992
  */
2993
2993
  post: operations["postApiV1OrganizationsOrganizationIdTemplatesSlugVersionsVersionArchive"];
2994
2994
  delete?: never;
@@ -3154,7 +3154,7 @@ export interface paths {
3154
3154
  put?: never;
3155
3155
  /**
3156
3156
  * Publish the draft as the template’s next version (save-as-template from the draft)
3157
- * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3157
+ * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. Immutable paths (contracts §34.1): the new version declares the template’s open version’s immutable paths (else the draft base’s) with the content the draft holds there; 422 immutable_paths_unsupported_base when the draft’s base has no guest agent with immutable_paths.v1 (details.base). 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3158
3158
  */
3159
3159
  post: operations["postV1OrganizationsOrganizationIdTemplatesSlugDraftPublish"];
3160
3160
  delete?: never;
@@ -3174,7 +3174,7 @@ export interface paths {
3174
3174
  put?: never;
3175
3175
  /**
3176
3176
  * Publish the draft as the template’s next version (save-as-template from the draft)
3177
- * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3177
+ * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. Immutable paths (contracts §34.1): the new version declares the template’s open version’s immutable paths (else the draft base’s) with the content the draft holds there; 422 immutable_paths_unsupported_base when the draft’s base has no guest agent with immutable_paths.v1 (details.base). 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3178
3178
  */
3179
3179
  post: operations["postV1TemplatesSlugDraftPublish"];
3180
3180
  delete?: never;
@@ -3267,7 +3267,7 @@ export interface paths {
3267
3267
  put?: never;
3268
3268
  /**
3269
3269
  * Publish the draft as the template’s next version (save-as-template from the draft)
3270
- * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3270
+ * @description Builds one new org layer holding every change since the draft base, from `state_id` or the draft’s current state (a fresh capture when running). `settings` (TemplateSettingsInput, contracts §24.3): each given field replaces that field of the draft base’s settings, each absent one is carried forward (settings.defaults and defaults together: 422 invalid_settings). Refused with 409 draft_stale (details latest_version, draft_base_version) when the template has a version newer than the draft base that this draft did not produce, and 409 build_in_progress while a build from another source is unfinished. Immutable paths (contracts §34.1): the new version declares the template’s open version’s immutable paths (else the draft base’s) with the content the draft holds there; 422 immutable_paths_unsupported_base when the draft’s base has no guest agent with immutable_paths.v1 (details.base). 202 SaveAsTemplateResponse. Supports Idempotency-Key.
3271
3271
  */
3272
3272
  post: operations["postApiV1OrganizationsOrganizationIdTemplatesSlugDraftPublish"];
3273
3273
  delete?: never;
@@ -5649,11 +5649,6 @@ export interface components {
5649
5649
  * @enum {string}
5650
5650
  */
5651
5651
  WorkspacePurpose: "standard" | "template_draft" | "template_test";
5652
- /**
5653
- * @description Reserved (T2). Always `pinned` in T1: a workspace stays on its template version; `auto` is refused with 422 update_policy_not_available.
5654
- * @enum {string}
5655
- */
5656
- UpdatePolicy: "pinned" | "auto";
5657
5652
  /** @description Where the workspace’s disk came from; null for a workspace opened from its template. */
5658
5653
  WorkspaceOrigin: {
5659
5654
  /** @enum {string} */
@@ -5704,7 +5699,6 @@ export interface components {
5704
5699
  } | null;
5705
5700
  egress: components["schemas"]["TemplateEgressDefault"] | null;
5706
5701
  agent_tools: null;
5707
- update_policy: null;
5708
5702
  };
5709
5703
  /** @description The template’s workspace network ceiling (contracts §24.3): the cell intersects it with the effective egress policy. */
5710
5704
  TemplateEgressDefault: {
@@ -5813,7 +5807,7 @@ export interface components {
5813
5807
  ready_timeout_seconds?: number;
5814
5808
  };
5815
5809
  };
5816
- /** @description Manifest defaults (§19.7, §24.3). agent_tools and update_policy stay reserved (null). */
5810
+ /** @description Manifest defaults (§19.7, §24.3). agent_tools stays reserved (null). */
5817
5811
  defaults?: {
5818
5812
  /** @enum {unknown} */
5819
5813
  lifetime?: "persistent" | "session";
@@ -5831,7 +5825,6 @@ export interface components {
5831
5825
  allow_hosts?: string[];
5832
5826
  };
5833
5827
  agent_tools?: null;
5834
- update_policy?: null;
5835
5828
  };
5836
5829
  };
5837
5830
  /** @description Recipe v1: a Dockerfile in the host builder’s dialect (no `schema` field). */
@@ -5864,7 +5857,7 @@ export interface components {
5864
5857
  };
5865
5858
  /**
5866
5859
  * Template recipe v2 (shardflux.template-recipe.v2)
5867
- * @description A template without a Dockerfile (docs/INTEGRATION_CONTRACTS.md §24.1): `build` changes the filesystem through the host builder's structured steps, `settings` goes into the manifest and applies when a workspace opens. This document is the body field `recipe` of POST …/template-builds, the `recipe` of GET …/templates/{slug}/versions/{v}/recipe (export), and the content of template.yaml (the same document in YAML; only clients parse YAML). In template.yaml a file entry may name a local path (`from`) instead of an upload; clients upload it and send `upload` (the API refuses `from`). Rules JSON Schema cannot express, enforced by the API with 422 validation_failed and details.reason (§24.1, §24.6): input names are unique across settings.env and settings.inputs; a secret input has no default; a required input has no default; start command names are unique; `to` is not platform-owned; build.network.allow_hosts only with build "allowlist" and extra_hosts only with "auto"; the sum of every run/command script is at most 262144 bytes; start timeout_seconds sum to at most 3600; languages are in the API's language table for the base; services need a base whose guest agent has services.v1.
5860
+ * @description A template without a Dockerfile (docs/INTEGRATION_CONTRACTS.md §24.1): `build` changes the filesystem through the host builder's structured steps, `settings` goes into the manifest and applies when a workspace opens. This document is the body field `recipe` of POST …/template-builds, the `recipe` of GET …/templates/{slug}/versions/{v}/recipe (export), and the content of template.yaml (the same document in YAML; only clients parse YAML). In template.yaml a file entry may name a local path (`from`) instead of an upload; clients upload it and send `upload` (the API refuses `from`). Rules JSON Schema cannot express, enforced by the API with 422 validation_failed and details.reason (§24.1, §24.6): input names are unique across settings.env and settings.inputs; a secret input has no default; a required input has no default; start command names are unique; `to` is not platform-owned; build.network.allow_hosts only with build "allowlist" and extra_hosts only with "auto"; the sum of every run/command script is at most 262144 bytes; start timeout_seconds sum to at most 3600; languages are in the API's language table for the base; services need a base whose guest agent has services.v1; immutable paths are not platform-owned, do not contain a platform-owned path and do not nest (§34.1).
5868
5861
  */
5869
5862
  TemplateRecipeV2: {
5870
5863
  /** @enum {unknown} */
@@ -5978,7 +5971,7 @@ export interface components {
5978
5971
  ready_timeout_seconds?: number;
5979
5972
  };
5980
5973
  };
5981
- /** @description Manifest defaults (§19.7, §24.3). agent_tools and update_policy stay reserved (null). */
5974
+ /** @description Manifest defaults (§19.7, §24.3). agent_tools stays reserved (null). */
5982
5975
  defaults?: {
5983
5976
  /** @enum {unknown} */
5984
5977
  lifetime?: "persistent" | "session";
@@ -5996,9 +5989,10 @@ export interface components {
5996
5989
  allow_hosts?: string[];
5997
5990
  };
5998
5991
  agent_tools?: null;
5999
- update_policy?: null;
6000
5992
  };
6001
5993
  };
5994
+ /** @description Directories every workspace of the template mounts read-only from the template's newest published version (§34.1): workspaces pick up a newer version when they cold-boot or resume. Not `/`, not equal to or under /proc, /sys, /dev, /run, /tmp, /lost+found or a platform-owned path, not containing a platform-owned path, none equal to or containing another (422 invalid_path). Omitted: the list of the template's newest published version. A version keeps every path of that list (422 immutable_path_removed) and a non-empty list needs a base whose guest agent has immutable_paths.v1 (422 immutable_paths_unsupported_base). Each path is a directory in the built filesystem. */
5995
+ immutable?: string[];
6002
5996
  /** @description Builder VM bounds, exactly as recipe v1 `resources` (not part of recipe_sha256). */
6003
5997
  resources?: {
6004
5998
  cpu_millis?: number;
@@ -6391,6 +6385,8 @@ export interface components {
6391
6385
  kind: "file" | "tar";
6392
6386
  }[];
6393
6387
  };
6388
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
6389
+ immutable: string[];
6394
6390
  };
6395
6391
  result: {
6396
6392
  artifact_sha256: string | null;
@@ -6414,8 +6410,13 @@ export interface components {
6414
6410
  } | null;
6415
6411
  };
6416
6412
  failure: {
6413
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
6417
6414
  code: string;
6418
6415
  message: string;
6416
+ /** @description Code-specific details (immutable_path_missing: {path}). */
6417
+ details?: {
6418
+ [key: string]: unknown;
6419
+ };
6419
6420
  } | null;
6420
6421
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
6421
6422
  log: {
@@ -6453,6 +6454,8 @@ export interface components {
6453
6454
  produced_layer_id: string | null;
6454
6455
  squashed: boolean | null;
6455
6456
  org_bytes: number | null;
6457
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
6458
+ immutable_paths: string[];
6456
6459
  };
6457
6460
  /** @description A disk-only capture of the draft (contracts §19.9). */
6458
6461
  DraftState: {
@@ -6541,7 +6544,6 @@ export interface components {
6541
6544
  } | null;
6542
6545
  /** @description Reserved (T2). */
6543
6546
  agent_tools?: null;
6544
- update_policy?: ("pinned" | "auto") | null;
6545
6547
  };
6546
6548
  settings?: components["schemas"]["TemplateSettingsInput"];
6547
6549
  /** @default true */
@@ -6572,7 +6574,6 @@ export interface components {
6572
6574
  } | null;
6573
6575
  /** @description Reserved (T2). */
6574
6576
  agent_tools?: null;
6575
- update_policy?: ("pinned" | "auto") | null;
6576
6577
  };
6577
6578
  /**
6578
6579
  * Format: uuid
@@ -6760,7 +6761,7 @@ export interface components {
6760
6761
  * @description UUIDv7, lowercase canonical form.
6761
6762
  */
6762
6763
  template_version_id: string;
6763
- /** @description Immutable template version this workspace was created from. */
6764
+ /** @description The template version this workspace was created from (immutable), and the version its immutable paths show. */
6764
6765
  template: {
6765
6766
  /**
6766
6767
  * Format: uuid
@@ -6774,6 +6775,7 @@ export interface components {
6774
6775
  template_id: string;
6775
6776
  slug: string;
6776
6777
  version: number;
6778
+ immutable_version: number | null;
6777
6779
  };
6778
6780
  /** @enum {string} */
6779
6781
  desired_state: "running" | "suspended" | "deleted";
@@ -6782,11 +6784,29 @@ export interface components {
6782
6784
  cell_id: string | null;
6783
6785
  cell_endpoint: string | null;
6784
6786
  ownership_epoch: number;
6785
- /** @description User caps for this workspace (null = no user restriction). */
6787
+ /** @description User caps for this workspace (null = no user restriction) and its memory allocation mode. */
6786
6788
  caps: {
6787
6789
  cpu_millis: number | null;
6788
6790
  memory_mib: number | null;
6789
6791
  disk_gib: number | null;
6792
+ /**
6793
+ * @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.
6794
+ * @enum {string}
6795
+ */
6796
+ allocation_mode: "fixed" | "elastic";
6797
+ /** @description Elastic only: the memory held while idle (MiB). */
6798
+ memory_mib_held?: number;
6799
+ };
6800
+ /** @description Memory of the workspace (contracts §32.6). */
6801
+ memory: {
6802
+ /**
6803
+ * @description The layout of the running VM, else the one the next start uses.
6804
+ * @enum {string}
6805
+ */
6806
+ allocation_mode: "fixed" | "elastic";
6807
+ promised_mib: number | null;
6808
+ held_mib: number | null;
6809
+ plugged_mib: number | null;
6790
6810
  };
6791
6811
  ceilings: {
6792
6812
  cpu_millis: number;
@@ -6839,7 +6859,6 @@ export interface components {
6839
6859
  origin: components["schemas"]["WorkspaceOrigin"] | null;
6840
6860
  ended_reason: ("closed" | "idle_timeout" | "draft_discarded") | null;
6841
6861
  dev_template_id: string | null;
6842
- update_policy: components["schemas"]["UpdatePolicy"];
6843
6862
  startup: components["schemas"]["WorkspaceStartup"] | null;
6844
6863
  mode: components["schemas"]["WorkspaceMode"];
6845
6864
  /** @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. */
@@ -11592,11 +11611,19 @@ export interface operations {
11592
11611
  };
11593
11612
  /** @description Template slug; new workspaces use its latest published version. */
11594
11613
  template: string;
11595
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. */
11614
+ /** @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. */
11596
11615
  caps?: {
11597
11616
  cpu_millis?: number;
11598
11617
  memory_mib?: number;
11599
11618
  disk_gib?: number;
11619
+ /**
11620
+ * @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.
11621
+ * @default fixed
11622
+ * @enum {string}
11623
+ */
11624
+ allocation_mode?: "fixed" | "elastic";
11625
+ /** @description Elastic only: memory held while idle (MiB, default 1024, at most memory_mib). */
11626
+ memory_mib_held?: number;
11600
11627
  };
11601
11628
  /**
11602
11629
  * Format: uuid
@@ -12270,7 +12297,9 @@ export interface operations {
12270
12297
  postV1WorkspacesWorkspaceIdFork: {
12271
12298
  parameters: {
12272
12299
  query?: never;
12273
- header?: never;
12300
+ header?: {
12301
+ prefer?: string;
12302
+ };
12274
12303
  path: {
12275
12304
  /** @description UUIDv7, lowercase canonical form. */
12276
12305
  workspace_id: string;
@@ -12282,17 +12311,47 @@ export interface operations {
12282
12311
  "application/json": {
12283
12312
  /** @description Stable workspace key, unique per organization (e.g. `${customerId}/${projectId}`). */
12284
12313
  key: string;
12285
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. */
12314
+ /** @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. */
12286
12315
  caps?: {
12287
12316
  cpu_millis?: number;
12288
12317
  memory_mib?: number;
12289
12318
  disk_gib?: number;
12319
+ /**
12320
+ * @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.
12321
+ * @default fixed
12322
+ * @enum {string}
12323
+ */
12324
+ allocation_mode?: "fixed" | "elastic";
12325
+ /** @description Elastic only: memory held while idle (MiB, default 1024, at most memory_mib). */
12326
+ memory_mib_held?: number;
12290
12327
  };
12291
12328
  lifetime?: components["schemas"]["WorkspaceLifetime"];
12329
+ /** @description Attribution label; one agent session per (workspace, principal, label). */
12330
+ agent_label?: string;
12331
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
12292
12332
  };
12293
12333
  };
12294
12334
  };
12295
12335
  responses: {
12336
+ /** @description Default Response */
12337
+ 200: {
12338
+ headers: {
12339
+ [name: string]: unknown;
12340
+ };
12341
+ content: {
12342
+ "application/json": {
12343
+ operation: components["schemas"]["Operation"];
12344
+ workspace: components["schemas"]["Workspace"];
12345
+ /**
12346
+ * Format: uuid
12347
+ * @description UUIDv7, lowercase canonical form.
12348
+ */
12349
+ source_workspace_id: string;
12350
+ cell_endpoint: string | null;
12351
+ tool_token: components["schemas"]["ToolToken"] | null;
12352
+ };
12353
+ };
12354
+ };
12296
12355
  /** @description Default Response */
12297
12356
  202: {
12298
12357
  headers: {
@@ -12778,11 +12837,19 @@ export interface operations {
12778
12837
  };
12779
12838
  /** @description Template slug; new workspaces use its latest published version. */
12780
12839
  template: string;
12781
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. */
12840
+ /** @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. */
12782
12841
  caps?: {
12783
12842
  cpu_millis?: number;
12784
12843
  memory_mib?: number;
12785
12844
  disk_gib?: number;
12845
+ /**
12846
+ * @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.
12847
+ * @default fixed
12848
+ * @enum {string}
12849
+ */
12850
+ allocation_mode?: "fixed" | "elastic";
12851
+ /** @description Elastic only: memory held while idle (MiB, default 1024, at most memory_mib). */
12852
+ memory_mib_held?: number;
12786
12853
  };
12787
12854
  /**
12788
12855
  * Format: uuid
@@ -13456,7 +13523,9 @@ export interface operations {
13456
13523
  postApiV1WorkspacesWorkspaceIdFork: {
13457
13524
  parameters: {
13458
13525
  query?: never;
13459
- header?: never;
13526
+ header?: {
13527
+ prefer?: string;
13528
+ };
13460
13529
  path: {
13461
13530
  /** @description UUIDv7, lowercase canonical form. */
13462
13531
  workspace_id: string;
@@ -13468,17 +13537,47 @@ export interface operations {
13468
13537
  "application/json": {
13469
13538
  /** @description Stable workspace key, unique per organization (e.g. `${customerId}/${projectId}`). */
13470
13539
  key: string;
13471
- /** @description Optional user caps; the ceiling is min(template, cap, plan). Absent fields add no restriction. */
13540
+ /** @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. */
13472
13541
  caps?: {
13473
13542
  cpu_millis?: number;
13474
13543
  memory_mib?: number;
13475
13544
  disk_gib?: number;
13545
+ /**
13546
+ * @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.
13547
+ * @default fixed
13548
+ * @enum {string}
13549
+ */
13550
+ allocation_mode?: "fixed" | "elastic";
13551
+ /** @description Elastic only: memory held while idle (MiB, default 1024, at most memory_mib). */
13552
+ memory_mib_held?: number;
13476
13553
  };
13477
13554
  lifetime?: components["schemas"]["WorkspaceLifetime"];
13555
+ /** @description Attribution label; one agent session per (workspace, principal, label). */
13556
+ agent_label?: string;
13557
+ tools?: ("exec" | "files" | "pty" | "process" | "git" | "browser")[];
13478
13558
  };
13479
13559
  };
13480
13560
  };
13481
13561
  responses: {
13562
+ /** @description Default Response */
13563
+ 200: {
13564
+ headers: {
13565
+ [name: string]: unknown;
13566
+ };
13567
+ content: {
13568
+ "application/json": {
13569
+ operation: components["schemas"]["Operation"];
13570
+ workspace: components["schemas"]["Workspace"];
13571
+ /**
13572
+ * Format: uuid
13573
+ * @description UUIDv7, lowercase canonical form.
13574
+ */
13575
+ source_workspace_id: string;
13576
+ cell_endpoint: string | null;
13577
+ tool_token: components["schemas"]["ToolToken"] | null;
13578
+ };
13579
+ };
13580
+ };
13482
13581
  /** @description Default Response */
13483
13582
  202: {
13484
13583
  headers: {
@@ -14985,6 +15084,12 @@ export interface operations {
14985
15084
  } | null;
14986
15085
  defaults: components["schemas"]["TemplateDefaults"];
14987
15086
  settings: components["schemas"]["TemplateSettings"];
15087
+ immutable: {
15088
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
15089
+ paths: string[];
15090
+ /** @description Size of the version’s immutable image (counts toward template storage). */
15091
+ bytes: number;
15092
+ } | null;
14988
15093
  files: components["schemas"]["TemplateFilesSummary"];
14989
15094
  rootfs_bytes: number | null;
14990
15095
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -15028,7 +15133,6 @@ export interface operations {
15028
15133
  */
15029
15134
  created_at: string;
15030
15135
  } | null;
15031
- update_policy: components["schemas"]["UpdatePolicy"];
15032
15136
  category: ("os" | "stack") | null;
15033
15137
  }[];
15034
15138
  next_cursor: string | null;
@@ -15197,6 +15301,12 @@ export interface operations {
15197
15301
  } | null;
15198
15302
  defaults: components["schemas"]["TemplateDefaults"];
15199
15303
  settings: components["schemas"]["TemplateSettings"];
15304
+ immutable: {
15305
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
15306
+ paths: string[];
15307
+ /** @description Size of the version’s immutable image (counts toward template storage). */
15308
+ bytes: number;
15309
+ } | null;
15200
15310
  files: components["schemas"]["TemplateFilesSummary"];
15201
15311
  rootfs_bytes: number | null;
15202
15312
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -15240,7 +15350,6 @@ export interface operations {
15240
15350
  */
15241
15351
  created_at: string;
15242
15352
  } | null;
15243
- update_policy: components["schemas"]["UpdatePolicy"];
15244
15353
  category: ("os" | "stack") | null;
15245
15354
  plan: {
15246
15355
  plan_key: string;
@@ -15356,6 +15465,12 @@ export interface operations {
15356
15465
  } | null;
15357
15466
  defaults: components["schemas"]["TemplateDefaults"];
15358
15467
  settings: components["schemas"]["TemplateSettings"];
15468
+ immutable: {
15469
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
15470
+ paths: string[];
15471
+ /** @description Size of the version’s immutable image (counts toward template storage). */
15472
+ bytes: number;
15473
+ } | null;
15359
15474
  files: components["schemas"]["TemplateFilesSummary"];
15360
15475
  rootfs_bytes: number | null;
15361
15476
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -15534,6 +15649,12 @@ export interface operations {
15534
15649
  } | null;
15535
15650
  defaults: components["schemas"]["TemplateDefaults"];
15536
15651
  settings: components["schemas"]["TemplateSettings"];
15652
+ immutable: {
15653
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
15654
+ paths: string[];
15655
+ /** @description Size of the version’s immutable image (counts toward template storage). */
15656
+ bytes: number;
15657
+ } | null;
15537
15658
  files: components["schemas"]["TemplateFilesSummary"];
15538
15659
  rootfs_bytes: number | null;
15539
15660
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -15577,7 +15698,6 @@ export interface operations {
15577
15698
  */
15578
15699
  created_at: string;
15579
15700
  } | null;
15580
- update_policy: components["schemas"]["UpdatePolicy"];
15581
15701
  category: ("os" | "stack") | null;
15582
15702
  }[];
15583
15703
  next_cursor: string | null;
@@ -15744,6 +15864,12 @@ export interface operations {
15744
15864
  } | null;
15745
15865
  defaults: components["schemas"]["TemplateDefaults"];
15746
15866
  settings: components["schemas"]["TemplateSettings"];
15867
+ immutable: {
15868
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
15869
+ paths: string[];
15870
+ /** @description Size of the version’s immutable image (counts toward template storage). */
15871
+ bytes: number;
15872
+ } | null;
15747
15873
  files: components["schemas"]["TemplateFilesSummary"];
15748
15874
  rootfs_bytes: number | null;
15749
15875
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -15787,7 +15913,6 @@ export interface operations {
15787
15913
  */
15788
15914
  created_at: string;
15789
15915
  } | null;
15790
- update_policy: components["schemas"]["UpdatePolicy"];
15791
15916
  category: ("os" | "stack") | null;
15792
15917
  plan: {
15793
15918
  plan_key: string;
@@ -15903,6 +16028,12 @@ export interface operations {
15903
16028
  } | null;
15904
16029
  defaults: components["schemas"]["TemplateDefaults"];
15905
16030
  settings: components["schemas"]["TemplateSettings"];
16031
+ immutable: {
16032
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
16033
+ paths: string[];
16034
+ /** @description Size of the version’s immutable image (counts toward template storage). */
16035
+ bytes: number;
16036
+ } | null;
15906
16037
  files: components["schemas"]["TemplateFilesSummary"];
15907
16038
  rootfs_bytes: number | null;
15908
16039
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -16167,6 +16298,8 @@ export interface operations {
16167
16298
  kind: "file" | "tar";
16168
16299
  }[];
16169
16300
  };
16301
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
16302
+ immutable: string[];
16170
16303
  };
16171
16304
  result: {
16172
16305
  artifact_sha256: string | null;
@@ -16190,8 +16323,13 @@ export interface operations {
16190
16323
  } | null;
16191
16324
  };
16192
16325
  failure: {
16326
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
16193
16327
  code: string;
16194
16328
  message: string;
16329
+ /** @description Code-specific details (immutable_path_missing: {path}). */
16330
+ details?: {
16331
+ [key: string]: unknown;
16332
+ };
16195
16333
  } | null;
16196
16334
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
16197
16335
  log: {
@@ -16229,6 +16367,8 @@ export interface operations {
16229
16367
  produced_layer_id: string | null;
16230
16368
  squashed: boolean | null;
16231
16369
  org_bytes: number | null;
16370
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
16371
+ immutable_paths: string[];
16232
16372
  }[];
16233
16373
  next_cursor: string | null;
16234
16374
  };
@@ -16493,6 +16633,8 @@ export interface operations {
16493
16633
  kind: "file" | "tar";
16494
16634
  }[];
16495
16635
  };
16636
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
16637
+ immutable: string[];
16496
16638
  };
16497
16639
  result: {
16498
16640
  artifact_sha256: string | null;
@@ -16516,8 +16658,13 @@ export interface operations {
16516
16658
  } | null;
16517
16659
  };
16518
16660
  failure: {
16661
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
16519
16662
  code: string;
16520
16663
  message: string;
16664
+ /** @description Code-specific details (immutable_path_missing: {path}). */
16665
+ details?: {
16666
+ [key: string]: unknown;
16667
+ };
16521
16668
  } | null;
16522
16669
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
16523
16670
  log: {
@@ -16555,6 +16702,8 @@ export interface operations {
16555
16702
  produced_layer_id: string | null;
16556
16703
  squashed: boolean | null;
16557
16704
  org_bytes: number | null;
16705
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
16706
+ immutable_paths: string[];
16558
16707
  };
16559
16708
  };
16560
16709
  };
@@ -16802,6 +16951,8 @@ export interface operations {
16802
16951
  kind: "file" | "tar";
16803
16952
  }[];
16804
16953
  };
16954
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
16955
+ immutable: string[];
16805
16956
  };
16806
16957
  result: {
16807
16958
  artifact_sha256: string | null;
@@ -16825,8 +16976,13 @@ export interface operations {
16825
16976
  } | null;
16826
16977
  };
16827
16978
  failure: {
16979
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
16828
16980
  code: string;
16829
16981
  message: string;
16982
+ /** @description Code-specific details (immutable_path_missing: {path}). */
16983
+ details?: {
16984
+ [key: string]: unknown;
16985
+ };
16830
16986
  } | null;
16831
16987
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
16832
16988
  log: {
@@ -16864,6 +17020,8 @@ export interface operations {
16864
17020
  produced_layer_id: string | null;
16865
17021
  squashed: boolean | null;
16866
17022
  org_bytes: number | null;
17023
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
17024
+ immutable_paths: string[];
16867
17025
  };
16868
17026
  };
16869
17027
  };
@@ -17108,6 +17266,8 @@ export interface operations {
17108
17266
  kind: "file" | "tar";
17109
17267
  }[];
17110
17268
  };
17269
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
17270
+ immutable: string[];
17111
17271
  };
17112
17272
  result: {
17113
17273
  artifact_sha256: string | null;
@@ -17131,8 +17291,13 @@ export interface operations {
17131
17291
  } | null;
17132
17292
  };
17133
17293
  failure: {
17294
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
17134
17295
  code: string;
17135
17296
  message: string;
17297
+ /** @description Code-specific details (immutable_path_missing: {path}). */
17298
+ details?: {
17299
+ [key: string]: unknown;
17300
+ };
17136
17301
  } | null;
17137
17302
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
17138
17303
  log: {
@@ -17170,6 +17335,8 @@ export interface operations {
17170
17335
  produced_layer_id: string | null;
17171
17336
  squashed: boolean | null;
17172
17337
  org_bytes: number | null;
17338
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
17339
+ immutable_paths: string[];
17173
17340
  };
17174
17341
  };
17175
17342
  };
@@ -17380,6 +17547,8 @@ export interface operations {
17380
17547
  kind: "file" | "tar";
17381
17548
  }[];
17382
17549
  };
17550
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
17551
+ immutable: string[];
17383
17552
  };
17384
17553
  result: {
17385
17554
  artifact_sha256: string | null;
@@ -17403,8 +17572,13 @@ export interface operations {
17403
17572
  } | null;
17404
17573
  };
17405
17574
  failure: {
17575
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
17406
17576
  code: string;
17407
17577
  message: string;
17578
+ /** @description Code-specific details (immutable_path_missing: {path}). */
17579
+ details?: {
17580
+ [key: string]: unknown;
17581
+ };
17408
17582
  } | null;
17409
17583
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
17410
17584
  log: {
@@ -17442,6 +17616,8 @@ export interface operations {
17442
17616
  produced_layer_id: string | null;
17443
17617
  squashed: boolean | null;
17444
17618
  org_bytes: number | null;
17619
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
17620
+ immutable_paths: string[];
17445
17621
  };
17446
17622
  };
17447
17623
  };
@@ -18073,6 +18249,12 @@ export interface operations {
18073
18249
  } | null;
18074
18250
  defaults: components["schemas"]["TemplateDefaults"];
18075
18251
  settings: components["schemas"]["TemplateSettings"];
18252
+ immutable: {
18253
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
18254
+ paths: string[];
18255
+ /** @description Size of the version’s immutable image (counts toward template storage). */
18256
+ bytes: number;
18257
+ } | null;
18076
18258
  files: components["schemas"]["TemplateFilesSummary"];
18077
18259
  rootfs_bytes: number | null;
18078
18260
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -18116,7 +18298,6 @@ export interface operations {
18116
18298
  */
18117
18299
  created_at: string;
18118
18300
  } | null;
18119
- update_policy: components["schemas"]["UpdatePolicy"];
18120
18301
  category: ("os" | "stack") | null;
18121
18302
  plan: {
18122
18303
  plan_key: string;
@@ -18232,6 +18413,12 @@ export interface operations {
18232
18413
  } | null;
18233
18414
  defaults: components["schemas"]["TemplateDefaults"];
18234
18415
  settings: components["schemas"]["TemplateSettings"];
18416
+ immutable: {
18417
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
18418
+ paths: string[];
18419
+ /** @description Size of the version’s immutable image (counts toward template storage). */
18420
+ bytes: number;
18421
+ } | null;
18235
18422
  files: components["schemas"]["TemplateFilesSummary"];
18236
18423
  rootfs_bytes: number | null;
18237
18424
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -18408,6 +18595,12 @@ export interface operations {
18408
18595
  } | null;
18409
18596
  defaults: components["schemas"]["TemplateDefaults"];
18410
18597
  settings: components["schemas"]["TemplateSettings"];
18598
+ immutable: {
18599
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
18600
+ paths: string[];
18601
+ /** @description Size of the version’s immutable image (counts toward template storage). */
18602
+ bytes: number;
18603
+ } | null;
18411
18604
  files: components["schemas"]["TemplateFilesSummary"];
18412
18605
  rootfs_bytes: number | null;
18413
18606
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -18451,7 +18644,6 @@ export interface operations {
18451
18644
  */
18452
18645
  created_at: string;
18453
18646
  } | null;
18454
- update_policy: components["schemas"]["UpdatePolicy"];
18455
18647
  category: ("os" | "stack") | null;
18456
18648
  plan: {
18457
18649
  plan_key: string;
@@ -18567,6 +18759,12 @@ export interface operations {
18567
18759
  } | null;
18568
18760
  defaults: components["schemas"]["TemplateDefaults"];
18569
18761
  settings: components["schemas"]["TemplateSettings"];
18762
+ immutable: {
18763
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
18764
+ paths: string[];
18765
+ /** @description Size of the version’s immutable image (counts toward template storage). */
18766
+ bytes: number;
18767
+ } | null;
18570
18768
  files: components["schemas"]["TemplateFilesSummary"];
18571
18769
  rootfs_bytes: number | null;
18572
18770
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -18748,6 +18946,12 @@ export interface operations {
18748
18946
  } | null;
18749
18947
  defaults: components["schemas"]["TemplateDefaults"];
18750
18948
  settings: components["schemas"]["TemplateSettings"];
18949
+ immutable: {
18950
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
18951
+ paths: string[];
18952
+ /** @description Size of the version’s immutable image (counts toward template storage). */
18953
+ bytes: number;
18954
+ } | null;
18751
18955
  files: components["schemas"]["TemplateFilesSummary"];
18752
18956
  rootfs_bytes: number | null;
18753
18957
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -18791,7 +18995,6 @@ export interface operations {
18791
18995
  */
18792
18996
  created_at: string;
18793
18997
  } | null;
18794
- update_policy: components["schemas"]["UpdatePolicy"];
18795
18998
  category: ("os" | "stack") | null;
18796
18999
  }[];
18797
19000
  next_cursor: string | null;
@@ -18960,6 +19163,12 @@ export interface operations {
18960
19163
  } | null;
18961
19164
  defaults: components["schemas"]["TemplateDefaults"];
18962
19165
  settings: components["schemas"]["TemplateSettings"];
19166
+ immutable: {
19167
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
19168
+ paths: string[];
19169
+ /** @description Size of the version’s immutable image (counts toward template storage). */
19170
+ bytes: number;
19171
+ } | null;
18963
19172
  files: components["schemas"]["TemplateFilesSummary"];
18964
19173
  rootfs_bytes: number | null;
18965
19174
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -19003,7 +19212,6 @@ export interface operations {
19003
19212
  */
19004
19213
  created_at: string;
19005
19214
  } | null;
19006
- update_policy: components["schemas"]["UpdatePolicy"];
19007
19215
  category: ("os" | "stack") | null;
19008
19216
  plan: {
19009
19217
  plan_key: string;
@@ -19119,6 +19327,12 @@ export interface operations {
19119
19327
  } | null;
19120
19328
  defaults: components["schemas"]["TemplateDefaults"];
19121
19329
  settings: components["schemas"]["TemplateSettings"];
19330
+ immutable: {
19331
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
19332
+ paths: string[];
19333
+ /** @description Size of the version’s immutable image (counts toward template storage). */
19334
+ bytes: number;
19335
+ } | null;
19122
19336
  files: components["schemas"]["TemplateFilesSummary"];
19123
19337
  rootfs_bytes: number | null;
19124
19338
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -19383,6 +19597,8 @@ export interface operations {
19383
19597
  kind: "file" | "tar";
19384
19598
  }[];
19385
19599
  };
19600
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
19601
+ immutable: string[];
19386
19602
  };
19387
19603
  result: {
19388
19604
  artifact_sha256: string | null;
@@ -19406,8 +19622,13 @@ export interface operations {
19406
19622
  } | null;
19407
19623
  };
19408
19624
  failure: {
19625
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
19409
19626
  code: string;
19410
19627
  message: string;
19628
+ /** @description Code-specific details (immutable_path_missing: {path}). */
19629
+ details?: {
19630
+ [key: string]: unknown;
19631
+ };
19411
19632
  } | null;
19412
19633
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
19413
19634
  log: {
@@ -19445,6 +19666,8 @@ export interface operations {
19445
19666
  produced_layer_id: string | null;
19446
19667
  squashed: boolean | null;
19447
19668
  org_bytes: number | null;
19669
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
19670
+ immutable_paths: string[];
19448
19671
  }[];
19449
19672
  next_cursor: string | null;
19450
19673
  };
@@ -19709,6 +19932,8 @@ export interface operations {
19709
19932
  kind: "file" | "tar";
19710
19933
  }[];
19711
19934
  };
19935
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
19936
+ immutable: string[];
19712
19937
  };
19713
19938
  result: {
19714
19939
  artifact_sha256: string | null;
@@ -19732,8 +19957,13 @@ export interface operations {
19732
19957
  } | null;
19733
19958
  };
19734
19959
  failure: {
19960
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
19735
19961
  code: string;
19736
19962
  message: string;
19963
+ /** @description Code-specific details (immutable_path_missing: {path}). */
19964
+ details?: {
19965
+ [key: string]: unknown;
19966
+ };
19737
19967
  } | null;
19738
19968
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
19739
19969
  log: {
@@ -19771,6 +20001,8 @@ export interface operations {
19771
20001
  produced_layer_id: string | null;
19772
20002
  squashed: boolean | null;
19773
20003
  org_bytes: number | null;
20004
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
20005
+ immutable_paths: string[];
19774
20006
  };
19775
20007
  };
19776
20008
  };
@@ -20018,6 +20250,8 @@ export interface operations {
20018
20250
  kind: "file" | "tar";
20019
20251
  }[];
20020
20252
  };
20253
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
20254
+ immutable: string[];
20021
20255
  };
20022
20256
  result: {
20023
20257
  artifact_sha256: string | null;
@@ -20041,8 +20275,13 @@ export interface operations {
20041
20275
  } | null;
20042
20276
  };
20043
20277
  failure: {
20278
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
20044
20279
  code: string;
20045
20280
  message: string;
20281
+ /** @description Code-specific details (immutable_path_missing: {path}). */
20282
+ details?: {
20283
+ [key: string]: unknown;
20284
+ };
20046
20285
  } | null;
20047
20286
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
20048
20287
  log: {
@@ -20080,6 +20319,8 @@ export interface operations {
20080
20319
  produced_layer_id: string | null;
20081
20320
  squashed: boolean | null;
20082
20321
  org_bytes: number | null;
20322
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
20323
+ immutable_paths: string[];
20083
20324
  };
20084
20325
  };
20085
20326
  };
@@ -20324,6 +20565,8 @@ export interface operations {
20324
20565
  kind: "file" | "tar";
20325
20566
  }[];
20326
20567
  };
20568
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
20569
+ immutable: string[];
20327
20570
  };
20328
20571
  result: {
20329
20572
  artifact_sha256: string | null;
@@ -20347,8 +20590,13 @@ export interface operations {
20347
20590
  } | null;
20348
20591
  };
20349
20592
  failure: {
20593
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
20350
20594
  code: string;
20351
20595
  message: string;
20596
+ /** @description Code-specific details (immutable_path_missing: {path}). */
20597
+ details?: {
20598
+ [key: string]: unknown;
20599
+ };
20352
20600
  } | null;
20353
20601
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
20354
20602
  log: {
@@ -20386,6 +20634,8 @@ export interface operations {
20386
20634
  produced_layer_id: string | null;
20387
20635
  squashed: boolean | null;
20388
20636
  org_bytes: number | null;
20637
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
20638
+ immutable_paths: string[];
20389
20639
  };
20390
20640
  };
20391
20641
  };
@@ -20596,6 +20846,8 @@ export interface operations {
20596
20846
  kind: "file" | "tar";
20597
20847
  }[];
20598
20848
  };
20849
+ /** @description The effective immutable paths (contracts §34.1: the recipe’s, else inherited), in byte order; empty for none. */
20850
+ immutable: string[];
20599
20851
  };
20600
20852
  result: {
20601
20853
  artifact_sha256: string | null;
@@ -20619,8 +20871,13 @@ export interface operations {
20619
20871
  } | null;
20620
20872
  };
20621
20873
  failure: {
20874
+ /** @description build_error, timeout, resource_limit, scan_failed, compatibility_failed, base_unavailable, network_denied, internal_error, publish_failed, source_unavailable, immutable_path_missing (an immutable path is not a directory in the built filesystem: details.path), immutable_image_too_large (the immutable image exceeds 16 GiB). */
20622
20875
  code: string;
20623
20876
  message: string;
20877
+ /** @description Code-specific details (immutable_path_missing: {path}). */
20878
+ details?: {
20879
+ [key: string]: unknown;
20880
+ };
20624
20881
  } | null;
20625
20882
  /** @description Build log: the tail inline, the full log through a short-lived signed URL (log-url). */
20626
20883
  log: {
@@ -20658,6 +20915,8 @@ export interface operations {
20658
20915
  produced_layer_id: string | null;
20659
20916
  squashed: boolean | null;
20660
20917
  org_bytes: number | null;
20918
+ /** @description The immutable paths the produced version declares (contracts §34.1), in byte order: the recipe’s `immutable`, else the list of the template’s open version (a save from a workspace: the target template’s open version’s list, else the workspace’s version’s). Empty for none. */
20919
+ immutable_paths: string[];
20661
20920
  };
20662
20921
  };
20663
20922
  };
@@ -21109,6 +21368,12 @@ export interface operations {
21109
21368
  } | null;
21110
21369
  defaults: components["schemas"]["TemplateDefaults"];
21111
21370
  settings: components["schemas"]["TemplateSettings"];
21371
+ immutable: {
21372
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
21373
+ paths: string[];
21374
+ /** @description Size of the version’s immutable image (counts toward template storage). */
21375
+ bytes: number;
21376
+ } | null;
21112
21377
  files: components["schemas"]["TemplateFilesSummary"];
21113
21378
  rootfs_bytes: number | null;
21114
21379
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -21152,7 +21417,6 @@ export interface operations {
21152
21417
  */
21153
21418
  created_at: string;
21154
21419
  } | null;
21155
- update_policy: components["schemas"]["UpdatePolicy"];
21156
21420
  category: ("os" | "stack") | null;
21157
21421
  plan: {
21158
21422
  plan_key: string;
@@ -21268,6 +21532,12 @@ export interface operations {
21268
21532
  } | null;
21269
21533
  defaults: components["schemas"]["TemplateDefaults"];
21270
21534
  settings: components["schemas"]["TemplateSettings"];
21535
+ immutable: {
21536
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
21537
+ paths: string[];
21538
+ /** @description Size of the version’s immutable image (counts toward template storage). */
21539
+ bytes: number;
21540
+ } | null;
21271
21541
  files: components["schemas"]["TemplateFilesSummary"];
21272
21542
  rootfs_bytes: number | null;
21273
21543
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -21444,6 +21714,12 @@ export interface operations {
21444
21714
  } | null;
21445
21715
  defaults: components["schemas"]["TemplateDefaults"];
21446
21716
  settings: components["schemas"]["TemplateSettings"];
21717
+ immutable: {
21718
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
21719
+ paths: string[];
21720
+ /** @description Size of the version’s immutable image (counts toward template storage). */
21721
+ bytes: number;
21722
+ } | null;
21447
21723
  files: components["schemas"]["TemplateFilesSummary"];
21448
21724
  rootfs_bytes: number | null;
21449
21725
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */
@@ -21487,7 +21763,6 @@ export interface operations {
21487
21763
  */
21488
21764
  created_at: string;
21489
21765
  } | null;
21490
- update_policy: components["schemas"]["UpdatePolicy"];
21491
21766
  category: ("os" | "stack") | null;
21492
21767
  plan: {
21493
21768
  plan_key: string;
@@ -21603,6 +21878,12 @@ export interface operations {
21603
21878
  } | null;
21604
21879
  defaults: components["schemas"]["TemplateDefaults"];
21605
21880
  settings: components["schemas"]["TemplateSettings"];
21881
+ immutable: {
21882
+ /** @description The directories every workspace of the template mounts read-only from its newest published version, in byte order. */
21883
+ paths: string[];
21884
+ /** @description Size of the version’s immutable image (counts toward template storage). */
21885
+ bytes: number;
21886
+ } | null;
21606
21887
  files: components["schemas"]["TemplateFilesSummary"];
21607
21888
  rootfs_bytes: number | null;
21608
21889
  /** @description The org layers of this version’s chain, bottom to top (empty for images). */