From ee5d5773d408ac8e61101fd0187ec071709bebab Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 18:25:42 +0000 Subject: [PATCH 1/4] chore: format all `api.md` files --- scripts/format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/format b/scripts/format index 3f910b784..c8e1f69d2 100755 --- a/scripts/format +++ b/scripts/format @@ -11,4 +11,4 @@ uv run ruff check --fix . uv run ruff format echo "==> Formatting docs" -uv run python scripts/utils/ruffen-docs.py README.md api.md README-SDK.md +uv run python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md) From 8b16ebe7aba9f96592f03ed2844211209b35d9e6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 01:44:10 +0000 Subject: [PATCH 2/4] refactor: deprecate and make Nullable total_count and remaining_count of ListViews (#7533) --- .stats.yml | 4 +-- api.md | 2 +- .../resources/devboxes/devboxes.py | 17 ++++++++-- src/runloop_api_client/types/__init__.py | 1 + .../types/agent_list_view.py | 16 +++++++--- .../types/benchmark_job_list_view.py | 6 ++-- .../types/benchmark_run_list_view.py | 8 ++--- .../types/blueprint_list_view.py | 6 ++-- .../types/devbox_list_view.py | 6 ++-- .../types/devbox_shutdown_params.py | 12 +++++++ .../types/devbox_snapshot_list_view.py | 8 ++--- .../types/gateway_config_list_view.py | 9 ++++-- .../types/mcp_config_list_view.py | 9 ++++-- .../types/network_policy_list_view.py | 9 ++++-- .../types/object_list_view.py | 16 +++++++--- .../types/repository_connection_list_view.py | 8 ++--- .../types/scenario_definition_list_view.py | 8 ++--- .../types/scenario_run_list_view.py | 8 ++--- src/runloop_api_client/types/scenario_view.py | 3 ++ .../types/secret_list_view.py | 18 +++++++---- tests/api_resources/test_devboxes.py | 32 ++++++++++++++----- 21 files changed, 139 insertions(+), 67 deletions(-) create mode 100644 src/runloop_api_client/types/devbox_shutdown_params.py diff --git a/.stats.yml b/.stats.yml index 3e985df2f..44040dae9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 117 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-c8d61a0c8b88fa30666ba021d1239eb0d549902354513c4741e9216bcbfa8e6d.yml -openapi_spec_hash: 433e6fb4ce076012b696f69ae7596c67 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-8704a652545c3831c8b7e246ec17f1a626b59911eb5701ddc922ca6cae1c8d57.yml +openapi_spec_hash: e609bc5ed3fdce498bc7d16921bbba5e config_hash: eb28692edd68a6ae95cf92af931c9976 diff --git a/api.md b/api.md index 6cbe1e604..2c8438e72 100644 --- a/api.md +++ b/api.md @@ -160,7 +160,7 @@ Methods: - client.devboxes.remove_tunnel(id, \*\*params) -> object - client.devboxes.resume(id) -> DevboxView - client.devboxes.retrieve_resource_usage(id) -> DevboxResourceUsageView -- client.devboxes.shutdown(id) -> DevboxView +- client.devboxes.shutdown(id, \*\*params) -> DevboxView - client.devboxes.snapshot_disk(id, \*\*params) -> DevboxSnapshotView - client.devboxes.snapshot_disk_async(id, \*\*params) -> DevboxSnapshotView - client.devboxes.suspend(id) -> DevboxView diff --git a/src/runloop_api_client/resources/devboxes/devboxes.py b/src/runloop_api_client/resources/devboxes/devboxes.py index 79ac29f11..84a286521 100644 --- a/src/runloop_api_client/resources/devboxes/devboxes.py +++ b/src/runloop_api_client/resources/devboxes/devboxes.py @@ -24,6 +24,7 @@ devbox_create_params, devbox_update_params, devbox_execute_params, + devbox_shutdown_params, devbox_upload_file_params, devbox_execute_sync_params, devbox_create_tunnel_params, @@ -1415,6 +1416,7 @@ def shutdown( self, id: str, *, + force: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -1427,9 +1429,13 @@ def shutdown( This will permanently stop the Devbox. If you want to save the state of the Devbox, you should take a snapshot before shutting down or - should suspend the Devbox instead of shutting down. + should suspend the Devbox instead of shutting down. If the Devbox has any + in-progress snapshots, the shutdown will be rejected with a 409 Conflict unless + force=true is specified. Args: + force: If true, force shutdown even if snapshots are in progress. Defaults to false. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1450,6 +1456,7 @@ def shutdown( extra_body=extra_body, timeout=timeout, idempotency_key=idempotency_key, + query=maybe_transform({"force": force}, devbox_shutdown_params.DevboxShutdownParams), ), cast_to=DevboxView, ) @@ -3077,6 +3084,7 @@ async def shutdown( self, id: str, *, + force: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -3089,9 +3097,13 @@ async def shutdown( This will permanently stop the Devbox. If you want to save the state of the Devbox, you should take a snapshot before shutting down or - should suspend the Devbox instead of shutting down. + should suspend the Devbox instead of shutting down. If the Devbox has any + in-progress snapshots, the shutdown will be rejected with a 409 Conflict unless + force=true is specified. Args: + force: If true, force shutdown even if snapshots are in progress. Defaults to false. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -3112,6 +3124,7 @@ async def shutdown( extra_body=extra_body, timeout=timeout, idempotency_key=idempotency_key, + query=await async_maybe_transform({"force": force}, devbox_shutdown_params.DevboxShutdownParams), ), cast_to=DevboxView, ) diff --git a/src/runloop_api_client/types/__init__.py b/src/runloop_api_client/types/__init__.py index e6543484f..2cd10b43d 100644 --- a/src/runloop_api_client/types/__init__.py +++ b/src/runloop_api_client/types/__init__.py @@ -55,6 +55,7 @@ from .blueprint_list_params import BlueprintListParams as BlueprintListParams from .devbox_execute_params import DevboxExecuteParams as DevboxExecuteParams from .blueprint_preview_view import BlueprintPreviewView as BlueprintPreviewView +from .devbox_shutdown_params import DevboxShutdownParams as DevboxShutdownParams from .mcp_config_list_params import McpConfigListParams as McpConfigListParams from .object_download_params import ObjectDownloadParams as ObjectDownloadParams from .repository_list_params import RepositoryListParams as RepositoryListParams diff --git a/src/runloop_api_client/types/agent_list_view.py b/src/runloop_api_client/types/agent_list_view.py index bfb1560e1..9e57a9769 100644 --- a/src/runloop_api_client/types/agent_list_view.py +++ b/src/runloop_api_client/types/agent_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .agent_view import AgentView @@ -17,8 +17,14 @@ class AgentListView(BaseModel): has_more: bool """Whether there are more Agents to fetch.""" - remaining_count: int - """The count of remaining Agents.""" + remaining_count: Optional[int] = None + """The count of remaining Agents. - total_count: int - """The total count of Agents.""" + Deprecated: will be removed in a future breaking change. + """ + + total_count: Optional[int] = None + """The total count of Agents. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/src/runloop_api_client/types/benchmark_job_list_view.py b/src/runloop_api_client/types/benchmark_job_list_view.py index 5090fe8e8..f0e1da7d0 100644 --- a/src/runloop_api_client/types/benchmark_job_list_view.py +++ b/src/runloop_api_client/types/benchmark_job_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .benchmark_job_view import BenchmarkJobView @@ -14,6 +14,6 @@ class BenchmarkJobListView(BaseModel): jobs: List[BenchmarkJobView] """List of BenchmarkJobs matching filter.""" - remaining_count: int + remaining_count: Optional[int] = None - total_count: int + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/benchmark_run_list_view.py b/src/runloop_api_client/types/benchmark_run_list_view.py index 0d0ca11e1..e85506bab 100644 --- a/src/runloop_api_client/types/benchmark_run_list_view.py +++ b/src/runloop_api_client/types/benchmark_run_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .benchmark_run_view import BenchmarkRunView @@ -11,9 +11,9 @@ class BenchmarkRunListView(BaseModel): has_more: bool - remaining_count: int - runs: List[BenchmarkRunView] """List of BenchmarkRuns matching filter.""" - total_count: int + remaining_count: Optional[int] = None + + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/blueprint_list_view.py b/src/runloop_api_client/types/blueprint_list_view.py index ba7c6066f..7d97314f5 100644 --- a/src/runloop_api_client/types/blueprint_list_view.py +++ b/src/runloop_api_client/types/blueprint_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .blueprint_view import BlueprintView @@ -14,6 +14,6 @@ class BlueprintListView(BaseModel): has_more: bool - remaining_count: int + remaining_count: Optional[int] = None - total_count: int + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/devbox_list_view.py b/src/runloop_api_client/types/devbox_list_view.py index f4f266240..6bd522ee5 100644 --- a/src/runloop_api_client/types/devbox_list_view.py +++ b/src/runloop_api_client/types/devbox_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .devbox_view import DevboxView @@ -14,6 +14,6 @@ class DevboxListView(BaseModel): has_more: bool - remaining_count: int + remaining_count: Optional[int] = None - total_count: int + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/devbox_shutdown_params.py b/src/runloop_api_client/types/devbox_shutdown_params.py new file mode 100644 index 000000000..1a6af9336 --- /dev/null +++ b/src/runloop_api_client/types/devbox_shutdown_params.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["DevboxShutdownParams"] + + +class DevboxShutdownParams(TypedDict, total=False): + force: str + """If true, force shutdown even if snapshots are in progress. Defaults to false.""" diff --git a/src/runloop_api_client/types/devbox_snapshot_list_view.py b/src/runloop_api_client/types/devbox_snapshot_list_view.py index 3e687f0cc..ca54f2eb1 100644 --- a/src/runloop_api_client/types/devbox_snapshot_list_view.py +++ b/src/runloop_api_client/types/devbox_snapshot_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .devbox_snapshot_view import DevboxSnapshotView @@ -11,9 +11,9 @@ class DevboxSnapshotListView(BaseModel): has_more: bool - remaining_count: int - snapshots: List[DevboxSnapshotView] """List of snapshots matching filter.""" - total_count: int + remaining_count: Optional[int] = None + + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/gateway_config_list_view.py b/src/runloop_api_client/types/gateway_config_list_view.py index 77fce4455..05511971f 100644 --- a/src/runloop_api_client/types/gateway_config_list_view.py +++ b/src/runloop_api_client/types/gateway_config_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .gateway_config_view import GatewayConfigView @@ -17,5 +17,8 @@ class GatewayConfigListView(BaseModel): has_more: bool """Whether there are more results available beyond this page.""" - total_count: int - """Total count of GatewayConfigs that match the query.""" + total_count: Optional[int] = None + """Total count of GatewayConfigs that match the query. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/src/runloop_api_client/types/mcp_config_list_view.py b/src/runloop_api_client/types/mcp_config_list_view.py index 72075a255..4992698c5 100644 --- a/src/runloop_api_client/types/mcp_config_list_view.py +++ b/src/runloop_api_client/types/mcp_config_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .mcp_config_view import McpConfigView @@ -17,5 +17,8 @@ class McpConfigListView(BaseModel): mcp_configs: List[McpConfigView] """The list of McpConfigs.""" - total_count: int - """Total count of McpConfigs that match the query.""" + total_count: Optional[int] = None + """Total count of McpConfigs that match the query. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/src/runloop_api_client/types/network_policy_list_view.py b/src/runloop_api_client/types/network_policy_list_view.py index 17bc7868f..ba031d0a9 100644 --- a/src/runloop_api_client/types/network_policy_list_view.py +++ b/src/runloop_api_client/types/network_policy_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .network_policy_view import NetworkPolicyView @@ -17,5 +17,8 @@ class NetworkPolicyListView(BaseModel): network_policies: List[NetworkPolicyView] """The list of NetworkPolicies.""" - total_count: int - """Total count of items in this response.""" + total_count: Optional[int] = None + """Total count of items in this response. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/src/runloop_api_client/types/object_list_view.py b/src/runloop_api_client/types/object_list_view.py index cfd546c0c..689c0899b 100644 --- a/src/runloop_api_client/types/object_list_view.py +++ b/src/runloop_api_client/types/object_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .object_view import ObjectView @@ -17,8 +17,14 @@ class ObjectListView(BaseModel): objects: List[ObjectView] """List of Object entities.""" - remaining_count: int - """Number of Objects remaining after this page.""" + remaining_count: Optional[int] = None + """Number of Objects remaining after this page. - total_count: int - """Total number of Objects across all pages.""" + Deprecated: will be removed in a future breaking change. + """ + + total_count: Optional[int] = None + """Total number of Objects across all pages. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/src/runloop_api_client/types/repository_connection_list_view.py b/src/runloop_api_client/types/repository_connection_list_view.py index 8085c4718..eea040bc4 100644 --- a/src/runloop_api_client/types/repository_connection_list_view.py +++ b/src/runloop_api_client/types/repository_connection_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .repository_connection_view import RepositoryConnectionView @@ -11,9 +11,9 @@ class RepositoryConnectionListView(BaseModel): has_more: bool - remaining_count: int - repositories: List[RepositoryConnectionView] """List of repositories matching filter.""" - total_count: int + remaining_count: Optional[int] = None + + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/scenario_definition_list_view.py b/src/runloop_api_client/types/scenario_definition_list_view.py index 5aa4ac3e4..f39cf1ed9 100644 --- a/src/runloop_api_client/types/scenario_definition_list_view.py +++ b/src/runloop_api_client/types/scenario_definition_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .scenario_view import ScenarioView @@ -11,9 +11,9 @@ class ScenarioDefinitionListView(BaseModel): has_more: bool - remaining_count: int - scenarios: List[ScenarioView] """List of Scenarios matching filter.""" - total_count: int + remaining_count: Optional[int] = None + + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/scenario_run_list_view.py b/src/runloop_api_client/types/scenario_run_list_view.py index db0d16d31..142292dda 100644 --- a/src/runloop_api_client/types/scenario_run_list_view.py +++ b/src/runloop_api_client/types/scenario_run_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .scenario_run_view import ScenarioRunView @@ -11,9 +11,9 @@ class ScenarioRunListView(BaseModel): has_more: bool - remaining_count: int - runs: List[ScenarioRunView] """List of ScenarioRuns matching filter.""" - total_count: int + remaining_count: Optional[int] = None + + total_count: Optional[int] = None diff --git a/src/runloop_api_client/types/scenario_view.py b/src/runloop_api_client/types/scenario_view.py index 4604bd957..6685bbce2 100644 --- a/src/runloop_api_client/types/scenario_view.py +++ b/src/runloop_api_client/types/scenario_view.py @@ -31,6 +31,9 @@ class ScenarioView(BaseModel): scoring_contract: ScoringContract """The scoring contract for the Scenario.""" + status: str + """The state of the scenario.""" + environment: Optional[ScenarioEnvironment] = None """The Environment in which the Scenario is run.""" diff --git a/src/runloop_api_client/types/secret_list_view.py b/src/runloop_api_client/types/secret_list_view.py index 4d66fa2e4..2f10bae2c 100644 --- a/src/runloop_api_client/types/secret_list_view.py +++ b/src/runloop_api_client/types/secret_list_view.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from .._models import BaseModel from .secret_view import SecretView @@ -14,11 +14,17 @@ class SecretListView(BaseModel): has_more: bool """True if there are more results available beyond this page.""" - remaining_count: int - """Number of Secrets remaining after this page.""" - secrets: List[SecretView] """List of Secret objects. Values are omitted for security.""" - total_count: int - """Total number of Secrets across all pages.""" + remaining_count: Optional[int] = None + """Number of Secrets remaining after this page. + + Deprecated: will be removed in a future breaking change. + """ + + total_count: Optional[int] = None + """Total number of Secrets across all pages. + + Deprecated: will be removed in a future breaking change. + """ diff --git a/tests/api_resources/test_devboxes.py b/tests/api_resources/test_devboxes.py index eef022a71..12c9f5187 100644 --- a/tests/api_resources/test_devboxes.py +++ b/tests/api_resources/test_devboxes.py @@ -893,14 +893,22 @@ def test_path_params_retrieve_resource_usage(self, client: Runloop) -> None: @parametrize def test_method_shutdown(self, client: Runloop) -> None: devbox = client.devboxes.shutdown( - "id", + id="id", + ) + assert_matches_type(DevboxView, devbox, path=["response"]) + + @parametrize + def test_method_shutdown_with_all_params(self, client: Runloop) -> None: + devbox = client.devboxes.shutdown( + id="id", + force="force", ) assert_matches_type(DevboxView, devbox, path=["response"]) @parametrize def test_raw_response_shutdown(self, client: Runloop) -> None: response = client.devboxes.with_raw_response.shutdown( - "id", + id="id", ) assert response.is_closed is True @@ -911,7 +919,7 @@ def test_raw_response_shutdown(self, client: Runloop) -> None: @parametrize def test_streaming_response_shutdown(self, client: Runloop) -> None: with client.devboxes.with_streaming_response.shutdown( - "id", + id="id", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -925,7 +933,7 @@ def test_streaming_response_shutdown(self, client: Runloop) -> None: def test_path_params_shutdown(self, client: Runloop) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): client.devboxes.with_raw_response.shutdown( - "", + id="", ) @parametrize @@ -2549,14 +2557,22 @@ async def test_path_params_retrieve_resource_usage(self, async_client: AsyncRunl @parametrize async def test_method_shutdown(self, async_client: AsyncRunloop) -> None: devbox = await async_client.devboxes.shutdown( - "id", + id="id", + ) + assert_matches_type(DevboxView, devbox, path=["response"]) + + @parametrize + async def test_method_shutdown_with_all_params(self, async_client: AsyncRunloop) -> None: + devbox = await async_client.devboxes.shutdown( + id="id", + force="force", ) assert_matches_type(DevboxView, devbox, path=["response"]) @parametrize async def test_raw_response_shutdown(self, async_client: AsyncRunloop) -> None: response = await async_client.devboxes.with_raw_response.shutdown( - "id", + id="id", ) assert response.is_closed is True @@ -2567,7 +2583,7 @@ async def test_raw_response_shutdown(self, async_client: AsyncRunloop) -> None: @parametrize async def test_streaming_response_shutdown(self, async_client: AsyncRunloop) -> None: async with async_client.devboxes.with_streaming_response.shutdown( - "id", + id="id", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -2581,7 +2597,7 @@ async def test_streaming_response_shutdown(self, async_client: AsyncRunloop) -> async def test_path_params_shutdown(self, async_client: AsyncRunloop) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): await async_client.devboxes.with_raw_response.shutdown( - "", + id="", ) @parametrize From e6e5208c19360f24f10b3c0da84119f7eb356bb1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 01:02:11 +0000 Subject: [PATCH 3/4] chore(scenarios): make scenario status enum instead of string (#7552) --- .stats.yml | 4 ++-- src/runloop_api_client/types/scenario_view.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.stats.yml b/.stats.yml index 44040dae9..27e05a0be 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 117 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-8704a652545c3831c8b7e246ec17f1a626b59911eb5701ddc922ca6cae1c8d57.yml -openapi_spec_hash: e609bc5ed3fdce498bc7d16921bbba5e +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-1ee005e7d8f97067abb96c6a38af53b69d362f2511ca775a9b78580a9643c253.yml +openapi_spec_hash: 9c54d19abf7993fd55714759f3265f9c config_hash: eb28692edd68a6ae95cf92af931c9976 diff --git a/src/runloop_api_client/types/scenario_view.py b/src/runloop_api_client/types/scenario_view.py index 6685bbce2..3bb470708 100644 --- a/src/runloop_api_client/types/scenario_view.py +++ b/src/runloop_api_client/types/scenario_view.py @@ -31,8 +31,11 @@ class ScenarioView(BaseModel): scoring_contract: ScoringContract """The scoring contract for the Scenario.""" - status: str - """The state of the scenario.""" + status: Literal["active", "archived"] + """Whether the scenario is active or archived. + + Archived scenarios are excluded from listings and cannot be updated. + """ environment: Optional[ScenarioEnvironment] = None """The Environment in which the Scenario is run.""" From 568b9e2b29773000fedc2cd38b72851212a84453 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 01:02:31 +0000 Subject: [PATCH 4/4] release: 1.8.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ pyproject.toml | 2 +- src/runloop_api_client/_version.py | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c523ce19f..7e334b0f0 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.8.0" + ".": "1.8.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 78604da88..21b6ee1db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 1.8.1 (2026-02-20) + +Full Changelog: [v1.8.0...v1.8.1](https://github.com/runloopai/api-client-python/compare/v1.8.0...v1.8.1) + +### Chores + +* **benchmarks:** removed scorer ([#740](https://github.com/runloopai/api-client-python/issues/740)) ([1033264](https://github.com/runloopai/api-client-python/commit/1033264b0ed34cc47e2e16cac3ae5986f2a4e381)) +* format all `api.md` files ([ee5d577](https://github.com/runloopai/api-client-python/commit/ee5d5773d408ac8e61101fd0187ec071709bebab)) +* **scenarios:** make scenario status enum instead of string ([#7552](https://github.com/runloopai/api-client-python/issues/7552)) ([e6e5208](https://github.com/runloopai/api-client-python/commit/e6e5208c19360f24f10b3c0da84119f7eb356bb1)) + + +### Refactors + +* deprecate and make Nullable total_count and remaining_count of ListViews ([#7533](https://github.com/runloopai/api-client-python/issues/7533)) ([8b16ebe](https://github.com/runloopai/api-client-python/commit/8b16ebe7aba9f96592f03ed2844211209b35d9e6)) + ## 1.8.0 (2026-02-12) Full Changelog: [v1.7.0...v1.8.0](https://github.com/runloopai/api-client-python/compare/v1.7.0...v1.8.0) diff --git a/pyproject.toml b/pyproject.toml index c872715e3..2e23bfe7f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "runloop_api_client" -version = "1.8.0" +version = "1.8.1" description = "The official Python library for the runloop API" dynamic = ["readme"] license = "MIT" diff --git a/src/runloop_api_client/_version.py b/src/runloop_api_client/_version.py index da91dc1ce..034a79f4c 100644 --- a/src/runloop_api_client/_version.py +++ b/src/runloop_api_client/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "runloop_api_client" -__version__ = "1.8.0" # x-release-please-version +__version__ = "1.8.1" # x-release-please-version