diff --git a/.stats.yml b/.stats.yml
index 11f149d6a..5484ced01 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,2 +1,2 @@
configured_endpoints: 14
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-1fdc9bae4fba7d365eca69915191a06ab5b0faec74f80404339e92cba37036f7.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-ad7847a96db411953d1b7601aa60c0da482335255dd581c26b04d533cc99d930.yml
diff --git a/api.md b/api.md
index bb7ee2079..92527588e 100644
--- a/api.md
+++ b/api.md
@@ -17,7 +17,7 @@ Methods:
- client.devboxes.create(\*\*params) -> DevboxView
- client.devboxes.retrieve(id) -> DevboxView
- client.devboxes.list(\*\*params) -> DevboxListView
-- client.devboxes.execute_sync(id) -> DevboxExecutionDetailView
+- client.devboxes.execute_sync(id, \*\*params) -> DevboxExecutionDetailView
- client.devboxes.shutdown(id) -> DevboxView
## Logs
@@ -60,14 +60,6 @@ Methods:
- client.functions.invocations.list() -> FunctionInvocationListView
- client.functions.invocations.kill(invocation_id) -> object
-### Spans
-
-Types:
-
-```python
-from runloop_api_client.types.functions.invocations import InvocationSpanListView
-```
-
# Projects
Types:
diff --git a/src/runloop_api_client/resources/devboxes/devboxes.py b/src/runloop_api_client/resources/devboxes/devboxes.py
index 2bba79483..f88876d2f 100644
--- a/src/runloop_api_client/resources/devboxes/devboxes.py
+++ b/src/runloop_api_client/resources/devboxes/devboxes.py
@@ -14,7 +14,7 @@
LogsResourceWithStreamingResponse,
AsyncLogsResourceWithStreamingResponse,
)
-from ...types import devbox_list_params, devbox_create_params
+from ...types import devbox_list_params, devbox_create_params, devbox_execute_sync_params
from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
from ..._utils import (
maybe_transform,
@@ -185,6 +185,7 @@ def execute_sync(
self,
id: str,
*,
+ command: str | NotGiven = NOT_GIVEN,
# 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,
@@ -196,6 +197,8 @@ def execute_sync(
Synchronously execute a command on a devbox
Args:
+ command: The command to execute on the Devbox.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -208,6 +211,7 @@ def execute_sync(
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
return self._post(
f"/v1/devboxes/{id}/execute_sync",
+ body=maybe_transform({"command": command}, devbox_execute_sync_params.DevboxExecuteSyncParams),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
@@ -396,6 +400,7 @@ async def execute_sync(
self,
id: str,
*,
+ command: str | NotGiven = NOT_GIVEN,
# 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,
@@ -407,6 +412,8 @@ async def execute_sync(
Synchronously execute a command on a devbox
Args:
+ command: The command to execute on the Devbox.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -419,6 +426,7 @@ async def execute_sync(
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
return await self._post(
f"/v1/devboxes/{id}/execute_sync",
+ body=await async_maybe_transform({"command": command}, devbox_execute_sync_params.DevboxExecuteSyncParams),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
diff --git a/src/runloop_api_client/types/__init__.py b/src/runloop_api_client/types/__init__.py
index 8cbd8f02b..f31475c02 100644
--- a/src/runloop_api_client/types/__init__.py
+++ b/src/runloop_api_client/types/__init__.py
@@ -9,6 +9,7 @@
from .devbox_list_params import DevboxListParams as DevboxListParams
from .function_list_view import FunctionListView as FunctionListView
from .devbox_create_params import DevboxCreateParams as DevboxCreateParams
+from .devbox_execute_sync_params import DevboxExecuteSyncParams as DevboxExecuteSyncParams
from .function_invoke_sync_params import FunctionInvokeSyncParams as FunctionInvokeSyncParams
from .devbox_execution_detail_view import DevboxExecutionDetailView as DevboxExecutionDetailView
from .function_invoke_async_params import FunctionInvokeAsyncParams as FunctionInvokeAsyncParams
diff --git a/src/runloop_api_client/types/devbox_execute_sync_params.py b/src/runloop_api_client/types/devbox_execute_sync_params.py
new file mode 100644
index 000000000..12dbc2e0f
--- /dev/null
+++ b/src/runloop_api_client/types/devbox_execute_sync_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__ = ["DevboxExecuteSyncParams"]
+
+
+class DevboxExecuteSyncParams(TypedDict, total=False):
+ command: str
+ """The command to execute on the Devbox."""
diff --git a/tests/api_resources/test_devboxes.py b/tests/api_resources/test_devboxes.py
index e1bea0100..513112570 100644
--- a/tests/api_resources/test_devboxes.py
+++ b/tests/api_resources/test_devboxes.py
@@ -133,6 +133,14 @@ def test_method_execute_sync(self, client: Runloop) -> None:
)
assert_matches_type(DevboxExecutionDetailView, devbox, path=["response"])
+ @parametrize
+ def test_method_execute_sync_with_all_params(self, client: Runloop) -> None:
+ devbox = client.devboxes.execute_sync(
+ "string",
+ command="string",
+ )
+ assert_matches_type(DevboxExecutionDetailView, devbox, path=["response"])
+
@parametrize
def test_raw_response_execute_sync(self, client: Runloop) -> None:
response = client.devboxes.with_raw_response.execute_sync(
@@ -318,6 +326,14 @@ async def test_method_execute_sync(self, async_client: AsyncRunloop) -> None:
)
assert_matches_type(DevboxExecutionDetailView, devbox, path=["response"])
+ @parametrize
+ async def test_method_execute_sync_with_all_params(self, async_client: AsyncRunloop) -> None:
+ devbox = await async_client.devboxes.execute_sync(
+ "string",
+ command="string",
+ )
+ assert_matches_type(DevboxExecutionDetailView, devbox, path=["response"])
+
@parametrize
async def test_raw_response_execute_sync(self, async_client: AsyncRunloop) -> None:
response = await async_client.devboxes.with_raw_response.execute_sync(