Skip to content

Commit eb3ad2c

Browse files
release: 1.19.0 (#785)
Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent f4b942b commit eb3ad2c

31 files changed

Lines changed: 1524 additions & 28 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.18.1"
2+
".": "1.19.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 110
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-f0eb12cf4df4fa3046bd88aae4966062eb6e9703768a07a0136da2f26a2ebd56.yml
3-
openapi_spec_hash: cdbd63a8162f1e987e937042cbd60eea
4-
config_hash: 526cf0707adc54c690fc687a1c6db728
1+
configured_endpoints: 115
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-5b536a11a713dd4e47b270c130368dbfdf1f30282f262c160cd0411fcd291806.yml
3+
openapi_spec_hash: f94d993a7f34461ebde7d0186e8e3c3a
4+
config_hash: 12de9459ff629b6a3072a75b236b7b70

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
11
# Changelog
22

3+
## 1.19.0 (2026-04-13)
4+
5+
Full Changelog: [v1.18.1...v1.19.0](https://github.com/runloopai/api-client-python/compare/v1.18.1...v1.19.0)
6+
7+
### Features
8+
9+
* Add wake on axon event as an API primitive ([#8681](https://github.com/runloopai/api-client-python/issues/8681)) ([255099a](https://github.com/runloopai/api-client-python/commit/255099a940a7892f3c66e6534517e3545d7daccb))
10+
* Allow API keys to create API and restricted keys ([#8663](https://github.com/runloopai/api-client-python/issues/8663)) ([2e03b55](https://github.com/runloopai/api-client-python/commit/2e03b55638a83a8354481f47a30910e94ff57fc3))
11+
12+
13+
### Bug Fixes
14+
15+
* add missing agent API paths to stainless config ([#8699](https://github.com/runloopai/api-client-python/issues/8699)) ([4f6fe60](https://github.com/runloopai/api-client-python/commit/4f6fe60a63fd31c049e54febb81801031dce2325))
16+
* ensure file data are only sent as 1 parameter ([f7ca2cc](https://github.com/runloopai/api-client-python/commit/f7ca2cc280f1e7a4ab73f331be8fe3e33ae1c611))
17+
18+
19+
### Documentation
20+
21+
* add snapshot, suspend & resume example ([#764](https://github.com/runloopai/api-client-python/issues/764)) ([f4b942b](https://github.com/runloopai/api-client-python/commit/f4b942b3329e98a4ea5182c04d6db90fd0b70308))
22+
* added Async vs Sync tabs, removed top-level class descriptions ([#783](https://github.com/runloopai/api-client-python/issues/783)) ([6a99c56](https://github.com/runloopai/api-client-python/commit/6a99c569914d93e07087ed5003ee7c77f2ab88ff))
23+
* restructure sphinx docs with async-first API reference and full type coverage ([#782](https://github.com/runloopai/api-client-python/issues/782)) ([514cf93](https://github.com/runloopai/api-client-python/commit/514cf93e8ff8b97bfde171a83cf9abf211193e7f))
24+
* show full field descriptions for SDK parameter types ([#784](https://github.com/runloopai/api-client-python/issues/784)) ([f04a506](https://github.com/runloopai/api-client-python/commit/f04a5069c33fceb7a4d3db634bfd77ab789314dc))
25+
326
## 1.18.1 (2026-04-10)
427

528
Full Changelog: [v1.17.0...v1.18.1](https://github.com/runloopai/api-client-python/compare/v1.17.0...v1.18.1)

api.md

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,22 @@ Methods:
7979
Types:
8080

8181
```python
82-
from runloop_api_client.types import AgentCreateParameters, AgentListView, AgentView
82+
from runloop_api_client.types import (
83+
AgentCreateParameters,
84+
AgentDevboxCountsView,
85+
AgentListView,
86+
AgentView,
87+
)
8388
```
8489

8590
Methods:
8691

8792
- <code title="post /v1/agents">client.agents.<a href="./src/runloop_api_client/resources/agents.py">create</a>(\*\*<a href="src/runloop_api_client/types/agent_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">AgentView</a></code>
8893
- <code title="get /v1/agents/{id}">client.agents.<a href="./src/runloop_api_client/resources/agents.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/agent_view.py">AgentView</a></code>
8994
- <code title="get /v1/agents">client.agents.<a href="./src/runloop_api_client/resources/agents.py">list</a>(\*\*<a href="src/runloop_api_client/types/agent_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">SyncAgentsCursorIDPage[AgentView]</a></code>
95+
- <code title="post /v1/agents/{id}/delete">client.agents.<a href="./src/runloop_api_client/resources/agents.py">delete</a>(id) -> object</code>
96+
- <code title="get /v1/agents/devbox_counts">client.agents.<a href="./src/runloop_api_client/resources/agents.py">devbox_counts</a>() -> <a href="./src/runloop_api_client/types/agent_devbox_counts_view.py">AgentDevboxCountsView</a></code>
97+
- <code title="get /v1/agents/list_public">client.agents.<a href="./src/runloop_api_client/resources/agents.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/agent_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">SyncAgentsCursorIDPage[AgentView]</a></code>
9098

9199
# Axons
92100

@@ -439,3 +447,31 @@ Methods:
439447
- <code title="post /v1/mcp-configs/{id}">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/mcp_config_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">McpConfigView</a></code>
440448
- <code title="get /v1/mcp-configs">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">list</a>(\*\*<a href="src/runloop_api_client/types/mcp_config_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">SyncMcpConfigsCursorIDPage[McpConfigView]</a></code>
441449
- <code title="post /v1/mcp-configs/{id}/delete">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">delete</a>(id) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">McpConfigView</a></code>
450+
451+
# Apikeys
452+
453+
Types:
454+
455+
```python
456+
from runloop_api_client.types import APIKeyCreatedView, APIKeyCreateParameters
457+
```
458+
459+
Methods:
460+
461+
- <code title="post /v1/apikeys">client.apikeys.<a href="./src/runloop_api_client/resources/apikeys.py">create</a>(\*\*<a href="src/runloop_api_client/types/apikey_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/api_key_created_view.py">APIKeyCreatedView</a></code>
462+
463+
# RestrictedKeys
464+
465+
Types:
466+
467+
```python
468+
from runloop_api_client.types import (
469+
RestrictedKeyCreatedView,
470+
RestrictedKeyCreateParameters,
471+
ScopeEntryView,
472+
)
473+
```
474+
475+
Methods:
476+
477+
- <code title="post /v1/restricted_keys">client.restricted_keys.<a href="./src/runloop_api_client/resources/restricted_keys.py">create</a>(\*\*<a href="src/runloop_api_client/types/restricted_key_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/restricted_key_created_view.py">RestrictedKeyCreatedView</a></code>

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "runloop_api_client"
3-
version = "1.18.1"
3+
version = "1.19.0"
44
description = "The official Python library for the runloop API"
55
dynamic = ["readme"]
66
license = "MIT"

src/runloop_api_client/_client.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from .resources import (
3535
axons,
3636
agents,
37+
apikeys,
3738
objects,
3839
secrets,
3940
devboxes,
@@ -44,9 +45,11 @@
4445
benchmark_jobs,
4546
benchmark_runs,
4647
gateway_configs,
48+
restricted_keys,
4749
network_policies,
4850
)
4951
from .resources.agents import AgentsResource, AsyncAgentsResource
52+
from .resources.apikeys import ApikeysResource, AsyncApikeysResource
5053
from .resources.objects import ObjectsResource, AsyncObjectsResource
5154
from .resources.secrets import SecretsResource, AsyncSecretsResource
5255
from .resources.benchmarks import BenchmarksResource, AsyncBenchmarksResource
@@ -56,6 +59,7 @@
5659
from .resources.benchmark_jobs import BenchmarkJobsResource, AsyncBenchmarkJobsResource
5760
from .resources.benchmark_runs import BenchmarkRunsResource, AsyncBenchmarkRunsResource
5861
from .resources.gateway_configs import GatewayConfigsResource, AsyncGatewayConfigsResource
62+
from .resources.restricted_keys import RestrictedKeysResource, AsyncRestrictedKeysResource
5963
from .resources.network_policies import NetworkPoliciesResource, AsyncNetworkPoliciesResource
6064
from .resources.devboxes.devboxes import DevboxesResource, AsyncDevboxesResource
6165
from .resources.scenarios.scenarios import ScenariosResource, AsyncScenariosResource
@@ -198,6 +202,18 @@ def mcp_configs(self) -> McpConfigsResource:
198202

199203
return McpConfigsResource(self)
200204

205+
@cached_property
206+
def apikeys(self) -> ApikeysResource:
207+
from .resources.apikeys import ApikeysResource
208+
209+
return ApikeysResource(self)
210+
211+
@cached_property
212+
def restricted_keys(self) -> RestrictedKeysResource:
213+
from .resources.restricted_keys import RestrictedKeysResource
214+
215+
return RestrictedKeysResource(self)
216+
201217
@cached_property
202218
def with_raw_response(self) -> RunloopWithRawResponse:
203219
return RunloopWithRawResponse(self)
@@ -446,6 +462,18 @@ def mcp_configs(self) -> AsyncMcpConfigsResource:
446462

447463
return AsyncMcpConfigsResource(self)
448464

465+
@cached_property
466+
def apikeys(self) -> AsyncApikeysResource:
467+
from .resources.apikeys import AsyncApikeysResource
468+
469+
return AsyncApikeysResource(self)
470+
471+
@cached_property
472+
def restricted_keys(self) -> AsyncRestrictedKeysResource:
473+
from .resources.restricted_keys import AsyncRestrictedKeysResource
474+
475+
return AsyncRestrictedKeysResource(self)
476+
449477
@cached_property
450478
def with_raw_response(self) -> AsyncRunloopWithRawResponse:
451479
return AsyncRunloopWithRawResponse(self)
@@ -643,6 +671,18 @@ def mcp_configs(self) -> mcp_configs.McpConfigsResourceWithRawResponse:
643671

644672
return McpConfigsResourceWithRawResponse(self._client.mcp_configs)
645673

674+
@cached_property
675+
def apikeys(self) -> apikeys.ApikeysResourceWithRawResponse:
676+
from .resources.apikeys import ApikeysResourceWithRawResponse
677+
678+
return ApikeysResourceWithRawResponse(self._client.apikeys)
679+
680+
@cached_property
681+
def restricted_keys(self) -> restricted_keys.RestrictedKeysResourceWithRawResponse:
682+
from .resources.restricted_keys import RestrictedKeysResourceWithRawResponse
683+
684+
return RestrictedKeysResourceWithRawResponse(self._client.restricted_keys)
685+
646686

647687
class AsyncRunloopWithRawResponse:
648688
_client: AsyncRunloop
@@ -728,6 +768,18 @@ def mcp_configs(self) -> mcp_configs.AsyncMcpConfigsResourceWithRawResponse:
728768

729769
return AsyncMcpConfigsResourceWithRawResponse(self._client.mcp_configs)
730770

771+
@cached_property
772+
def apikeys(self) -> apikeys.AsyncApikeysResourceWithRawResponse:
773+
from .resources.apikeys import AsyncApikeysResourceWithRawResponse
774+
775+
return AsyncApikeysResourceWithRawResponse(self._client.apikeys)
776+
777+
@cached_property
778+
def restricted_keys(self) -> restricted_keys.AsyncRestrictedKeysResourceWithRawResponse:
779+
from .resources.restricted_keys import AsyncRestrictedKeysResourceWithRawResponse
780+
781+
return AsyncRestrictedKeysResourceWithRawResponse(self._client.restricted_keys)
782+
731783

732784
class RunloopWithStreamedResponse:
733785
_client: Runloop
@@ -813,6 +865,18 @@ def mcp_configs(self) -> mcp_configs.McpConfigsResourceWithStreamingResponse:
813865

814866
return McpConfigsResourceWithStreamingResponse(self._client.mcp_configs)
815867

868+
@cached_property
869+
def apikeys(self) -> apikeys.ApikeysResourceWithStreamingResponse:
870+
from .resources.apikeys import ApikeysResourceWithStreamingResponse
871+
872+
return ApikeysResourceWithStreamingResponse(self._client.apikeys)
873+
874+
@cached_property
875+
def restricted_keys(self) -> restricted_keys.RestrictedKeysResourceWithStreamingResponse:
876+
from .resources.restricted_keys import RestrictedKeysResourceWithStreamingResponse
877+
878+
return RestrictedKeysResourceWithStreamingResponse(self._client.restricted_keys)
879+
816880

817881
class AsyncRunloopWithStreamedResponse:
818882
_client: AsyncRunloop
@@ -898,6 +962,18 @@ def mcp_configs(self) -> mcp_configs.AsyncMcpConfigsResourceWithStreamingRespons
898962

899963
return AsyncMcpConfigsResourceWithStreamingResponse(self._client.mcp_configs)
900964

965+
@cached_property
966+
def apikeys(self) -> apikeys.AsyncApikeysResourceWithStreamingResponse:
967+
from .resources.apikeys import AsyncApikeysResourceWithStreamingResponse
968+
969+
return AsyncApikeysResourceWithStreamingResponse(self._client.apikeys)
970+
971+
@cached_property
972+
def restricted_keys(self) -> restricted_keys.AsyncRestrictedKeysResourceWithStreamingResponse:
973+
from .resources.restricted_keys import AsyncRestrictedKeysResourceWithStreamingResponse
974+
975+
return AsyncRestrictedKeysResourceWithStreamingResponse(self._client.restricted_keys)
976+
901977

902978
Client = Runloop
903979

src/runloop_api_client/_utils/_utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,9 @@ def _extract_items(
8686
index += 1
8787
if is_dict(obj):
8888
try:
89-
# We are at the last entry in the path so we must remove the field
90-
if (len(path)) == index:
89+
# Remove the field if there are no more dict keys in the path,
90+
# only "<array>" traversal markers or end.
91+
if all(p == "<array>" for p in path[index:]):
9192
item = obj.pop(key)
9293
else:
9394
item = obj[key]

src/runloop_api_client/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "runloop_api_client"
4-
__version__ = "1.18.1" # x-release-please-version
4+
__version__ = "1.19.0" # x-release-please-version

src/runloop_api_client/resources/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
AgentsResourceWithStreamingResponse,
1717
AsyncAgentsResourceWithStreamingResponse,
1818
)
19+
from .apikeys import (
20+
ApikeysResource,
21+
AsyncApikeysResource,
22+
ApikeysResourceWithRawResponse,
23+
AsyncApikeysResourceWithRawResponse,
24+
ApikeysResourceWithStreamingResponse,
25+
AsyncApikeysResourceWithStreamingResponse,
26+
)
1927
from .objects import (
2028
ObjectsResource,
2129
AsyncObjectsResource,
@@ -96,6 +104,14 @@
96104
GatewayConfigsResourceWithStreamingResponse,
97105
AsyncGatewayConfigsResourceWithStreamingResponse,
98106
)
107+
from .restricted_keys import (
108+
RestrictedKeysResource,
109+
AsyncRestrictedKeysResource,
110+
RestrictedKeysResourceWithRawResponse,
111+
AsyncRestrictedKeysResourceWithRawResponse,
112+
RestrictedKeysResourceWithStreamingResponse,
113+
AsyncRestrictedKeysResourceWithStreamingResponse,
114+
)
99115
from .network_policies import (
100116
NetworkPoliciesResource,
101117
AsyncNetworkPoliciesResource,
@@ -184,4 +200,16 @@
184200
"AsyncMcpConfigsResourceWithRawResponse",
185201
"McpConfigsResourceWithStreamingResponse",
186202
"AsyncMcpConfigsResourceWithStreamingResponse",
203+
"ApikeysResource",
204+
"AsyncApikeysResource",
205+
"ApikeysResourceWithRawResponse",
206+
"AsyncApikeysResourceWithRawResponse",
207+
"ApikeysResourceWithStreamingResponse",
208+
"AsyncApikeysResourceWithStreamingResponse",
209+
"RestrictedKeysResource",
210+
"AsyncRestrictedKeysResource",
211+
"RestrictedKeysResourceWithRawResponse",
212+
"AsyncRestrictedKeysResourceWithRawResponse",
213+
"RestrictedKeysResourceWithStreamingResponse",
214+
"AsyncRestrictedKeysResourceWithStreamingResponse",
187215
]

0 commit comments

Comments
 (0)