Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.8.0"
".": "1.8.1"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -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-1ee005e7d8f97067abb96c6a38af53b69d362f2511ca775a9b78580a9643c253.yml
openapi_spec_hash: 9c54d19abf7993fd55714759f3265f9c
config_hash: eb28692edd68a6ae95cf92af931c9976
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
2 changes: 1 addition & 1 deletion api.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Methods:
- <code title="post /v1/devboxes/{id}/remove_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">remove_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_remove_tunnel_params.py">params</a>) -> object</code>
- <code title="post /v1/devboxes/{id}/resume">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">resume</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
- <code title="get /v1/devboxes/{id}/usage">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">retrieve_resource_usage</a>(id) -> <a href="./src/runloop_api_client/types/devbox_resource_usage_view.py">DevboxResourceUsageView</a></code>
- <code title="post /v1/devboxes/{id}/shutdown">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">shutdown</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
- <code title="post /v1/devboxes/{id}/shutdown">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">shutdown</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_shutdown_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
- <code title="post /v1/devboxes/{id}/snapshot_disk">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
- <code title="post /v1/devboxes/{id}/snapshot_disk_async">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk_async</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_async_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
- <code title="post /v1/devboxes/{id}/suspend">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">suspend</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
2 changes: 1 addition & 1 deletion scripts/format
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion src/runloop_api_client/_version.py
Original file line number Diff line number Diff line change
@@ -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
17 changes: 15 additions & 2 deletions src/runloop_api_client/resources/devboxes/devboxes.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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,
)
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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,
)
Expand Down
1 change: 1 addition & 0 deletions src/runloop_api_client/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 11 additions & 5 deletions src/runloop_api_client/types/agent_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
"""
6 changes: 3 additions & 3 deletions src/runloop_api_client/types/benchmark_job_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
8 changes: 4 additions & 4 deletions src/runloop_api_client/types/benchmark_run_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
6 changes: 3 additions & 3 deletions src/runloop_api_client/types/blueprint_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
6 changes: 3 additions & 3 deletions src/runloop_api_client/types/devbox_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
12 changes: 12 additions & 0 deletions src/runloop_api_client/types/devbox_shutdown_params.py
Original file line number Diff line number Diff line change
@@ -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."""
8 changes: 4 additions & 4 deletions src/runloop_api_client/types/devbox_snapshot_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
9 changes: 6 additions & 3 deletions src/runloop_api_client/types/gateway_config_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
"""
9 changes: 6 additions & 3 deletions src/runloop_api_client/types/mcp_config_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
"""
9 changes: 6 additions & 3 deletions src/runloop_api_client/types/network_policy_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
"""
16 changes: 11 additions & 5 deletions src/runloop_api_client/types/object_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
"""
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
8 changes: 4 additions & 4 deletions src/runloop_api_client/types/scenario_definition_list_view.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Loading
Loading