Skip to content
Merged
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.14.0"
".": "1.14.1"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 124
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-f32de1991bef7651f9b0970b503e2986c7a88708c4a408d54abe6d089795e9f9.yml
openapi_spec_hash: d2005d48f75fba4a5368209cf49641dc
config_hash: 5ffcc19219880e7d9ce43c1e6860568c
configured_endpoints: 116
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-c33fa67077f6f9cc8cb6d82a71657693f7288e1eff48b7b94099f2f11966b67b.yml
openapi_spec_hash: 4329105152eb16bc5d2063038603ea61
config_hash: 6649774d90af30c3559d6a242b6cb4b0
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 1.14.1 (2026-04-01)

Full Changelog: [v1.14.0...v1.14.1](https://github.com/runloopai/api-client-python/compare/v1.14.0...v1.14.1)

### Bug Fixes

* **sdk:** remove incorrect remove_tunnel DeprecationWarning ([#775](https://github.com/runloopai/api-client-python/issues/775)) ([925c735](https://github.com/runloopai/api-client-python/commit/925c7353c5331df1f83052ab42793cc076e1a4ea))


### Chores

* Hide repository connection APIs from public OpenAPI spec ([#8462](https://github.com/runloopai/api-client-python/issues/8462)) ([2eac1fc](https://github.com/runloopai/api-client-python/commit/2eac1fcf5c2d05bcbe7ba596b5f2789f98aae660))
* **tests:** bump steady to v0.20.1 ([c19d63d](https://github.com/runloopai/api-client-python/commit/c19d63d141ef2f60df570ebb2c21d8fcda2a98b9))
* **tests:** bump steady to v0.20.2 ([3c0beeb](https://github.com/runloopai/api-client-python/commit/3c0beeb5b142e30c557aa6e85d407ecf65c78051))

## 1.14.0 (2026-03-31)

Full Changelog: [v1.13.3...v1.14.0](https://github.com/runloopai/api-client-python/compare/v1.13.3...v1.14.0)
Expand Down
25 changes: 0 additions & 25 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -379,31 +379,6 @@ Methods:
- <code title="get /v1/objects/{id}/download">client.objects.<a href="./src/runloop_api_client/resources/objects.py">download</a>(id, \*\*<a href="src/runloop_api_client/types/object_download_params.py">params</a>) -> <a href="./src/runloop_api_client/types/object_download_url_view.py">ObjectDownloadURLView</a></code>
- <code title="get /v1/objects/list_public">client.objects.<a href="./src/runloop_api_client/resources/objects.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/object_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/object_view.py">SyncObjectsCursorIDPage[ObjectView]</a></code>

# Repositories

Types:

```python
from runloop_api_client.types import (
RepositoryConnectionListView,
RepositoryConnectionView,
RepositoryInspectionDetails,
RepositoryInspectionListView,
RepositoryManifestView,
)
```

Methods:

- <code title="post /v1/repositories">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">create</a>(\*\*<a href="src/runloop_api_client/types/repository_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/repository_connection_view.py">RepositoryConnectionView</a></code>
- <code title="get /v1/repositories/{id}">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/repository_connection_view.py">RepositoryConnectionView</a></code>
- <code title="get /v1/repositories">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">list</a>(\*\*<a href="src/runloop_api_client/types/repository_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/repository_connection_view.py">SyncRepositoriesCursorIDPage[RepositoryConnectionView]</a></code>
- <code title="post /v1/repositories/{id}/delete">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">delete</a>(id) -> object</code>
- <code title="post /v1/repositories/{id}/inspect">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">inspect</a>(id, \*\*<a href="src/runloop_api_client/types/repository_inspect_params.py">params</a>) -> <a href="./src/runloop_api_client/types/repository_inspection_details.py">RepositoryInspectionDetails</a></code>
- <code title="get /v1/repositories/{id}/inspections">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">list_inspections</a>(id) -> <a href="./src/runloop_api_client/types/repository_inspection_list_view.py">RepositoryInspectionListView</a></code>
- <code title="post /v1/repositories/{id}/refresh">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">refresh</a>(id, \*\*<a href="src/runloop_api_client/types/repository_refresh_params.py">params</a>) -> object</code>
- <code title="get /v1/repositories/inspections/{id}">client.repositories.<a href="./src/runloop_api_client/resources/repositories.py">retrieve_inspection</a>(id) -> <a href="./src/runloop_api_client/types/repository_inspection_details.py">RepositoryInspectionDetails</a></code>

# Secrets

Types:
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.14.0"
version = "1.14.1"
description = "The official Python library for the runloop API"
dynamic = ["readme"]
license = "MIT"
Expand Down
6 changes: 3 additions & 3 deletions scripts/mock
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}"
# Run steady mock on the given spec
if [ "$1" == "--daemon" ]; then
# Pre-install the package so the download doesn't eat into the startup timeout
npm exec --package=@stdy/cli@0.19.7 -- steady --version
npm exec --package=@stdy/cli@0.20.2 -- steady --version

npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log &
npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log &

# Wait for server to come online via health endpoint (max 30s)
echo -n "Waiting for server"
Expand All @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then

echo
else
npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL"
npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL"
fi
2 changes: 1 addition & 1 deletion scripts/test
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ elif ! steady_is_running ; then
echo -e "To run the server, pass in the path or url of your OpenAPI"
echo -e "spec to the steady command:"
echo
echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}"
echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.2 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}"
echo

exit 1
Expand Down
38 changes: 0 additions & 38 deletions src/runloop_api_client/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
benchmarks,
blueprints,
mcp_configs,
repositories,
benchmark_jobs,
benchmark_runs,
gateway_configs,
Expand All @@ -54,7 +53,6 @@
from .resources.blueprints import BlueprintsResource, AsyncBlueprintsResource
from .resources.axons.axons import AxonsResource, AsyncAxonsResource
from .resources.mcp_configs import McpConfigsResource, AsyncMcpConfigsResource
from .resources.repositories import RepositoriesResource, AsyncRepositoriesResource
from .resources.benchmark_jobs import BenchmarkJobsResource, AsyncBenchmarkJobsResource
from .resources.benchmark_runs import BenchmarkRunsResource, AsyncBenchmarkRunsResource
from .resources.gateway_configs import GatewayConfigsResource, AsyncGatewayConfigsResource
Expand Down Expand Up @@ -176,12 +174,6 @@ def objects(self) -> ObjectsResource:

return ObjectsResource(self)

@cached_property
def repositories(self) -> RepositoriesResource:
from .resources.repositories import RepositoriesResource

return RepositoriesResource(self)

@cached_property
def secrets(self) -> SecretsResource:
from .resources.secrets import SecretsResource
Expand Down Expand Up @@ -430,12 +422,6 @@ def objects(self) -> AsyncObjectsResource:

return AsyncObjectsResource(self)

@cached_property
def repositories(self) -> AsyncRepositoriesResource:
from .resources.repositories import AsyncRepositoriesResource

return AsyncRepositoriesResource(self)

@cached_property
def secrets(self) -> AsyncSecretsResource:
from .resources.secrets import AsyncSecretsResource
Expand Down Expand Up @@ -633,12 +619,6 @@ def objects(self) -> objects.ObjectsResourceWithRawResponse:

return ObjectsResourceWithRawResponse(self._client.objects)

@cached_property
def repositories(self) -> repositories.RepositoriesResourceWithRawResponse:
from .resources.repositories import RepositoriesResourceWithRawResponse

return RepositoriesResourceWithRawResponse(self._client.repositories)

@cached_property
def secrets(self) -> secrets.SecretsResourceWithRawResponse:
from .resources.secrets import SecretsResourceWithRawResponse
Expand Down Expand Up @@ -724,12 +704,6 @@ def objects(self) -> objects.AsyncObjectsResourceWithRawResponse:

return AsyncObjectsResourceWithRawResponse(self._client.objects)

@cached_property
def repositories(self) -> repositories.AsyncRepositoriesResourceWithRawResponse:
from .resources.repositories import AsyncRepositoriesResourceWithRawResponse

return AsyncRepositoriesResourceWithRawResponse(self._client.repositories)

@cached_property
def secrets(self) -> secrets.AsyncSecretsResourceWithRawResponse:
from .resources.secrets import AsyncSecretsResourceWithRawResponse
Expand Down Expand Up @@ -815,12 +789,6 @@ def objects(self) -> objects.ObjectsResourceWithStreamingResponse:

return ObjectsResourceWithStreamingResponse(self._client.objects)

@cached_property
def repositories(self) -> repositories.RepositoriesResourceWithStreamingResponse:
from .resources.repositories import RepositoriesResourceWithStreamingResponse

return RepositoriesResourceWithStreamingResponse(self._client.repositories)

@cached_property
def secrets(self) -> secrets.SecretsResourceWithStreamingResponse:
from .resources.secrets import SecretsResourceWithStreamingResponse
Expand Down Expand Up @@ -906,12 +874,6 @@ def objects(self) -> objects.AsyncObjectsResourceWithStreamingResponse:

return AsyncObjectsResourceWithStreamingResponse(self._client.objects)

@cached_property
def repositories(self) -> repositories.AsyncRepositoriesResourceWithStreamingResponse:
from .resources.repositories import AsyncRepositoriesResourceWithStreamingResponse

return AsyncRepositoriesResourceWithStreamingResponse(self._client.repositories)

@cached_property
def secrets(self) -> secrets.AsyncSecretsResourceWithStreamingResponse:
from .resources.secrets import AsyncSecretsResourceWithStreamingResponse
Expand Down
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.14.0" # x-release-please-version
__version__ = "1.14.1" # x-release-please-version
75 changes: 0 additions & 75 deletions src/runloop_api_client/pagination.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
"AsyncBlueprintsCursorIDPage",
"SyncDevboxesCursorIDPage",
"AsyncDevboxesCursorIDPage",
"SyncRepositoriesCursorIDPage",
"AsyncRepositoriesCursorIDPage",
"SyncDiskSnapshotsCursorIDPage",
"AsyncDiskSnapshotsCursorIDPage",
"SyncBenchmarksCursorIDPage",
Expand Down Expand Up @@ -51,11 +49,6 @@ class DevboxesCursorIDPageItem(Protocol):
id: str


@runtime_checkable
class RepositoriesCursorIDPageItem(Protocol):
id: str


@runtime_checkable
class DiskSnapshotsCursorIDPageItem(Protocol):
id: str
Expand Down Expand Up @@ -252,74 +245,6 @@ def next_page_info(self) -> Optional[PageInfo]:
return PageInfo(params={"starting_after": item.id})


class SyncRepositoriesCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
repositories: List[_T]
has_more: Optional[bool] = None
total_count: Optional[int] = None

@override
def _get_page_items(self) -> List[_T]:
repositories = self.repositories
if not repositories:
return []
return repositories

@override
def has_next_page(self) -> bool:
has_more = self.has_more
if has_more is not None and has_more is False:
return False

return super().has_next_page()

@override
def next_page_info(self) -> Optional[PageInfo]:
repositories = self.repositories
if not repositories:
return None

item = cast(Any, repositories[-1])
if not isinstance(item, RepositoriesCursorIDPageItem) or item.id is None: # pyright: ignore[reportUnnecessaryComparison]
# TODO emit warning log
return None

return PageInfo(params={"starting_after": item.id})


class AsyncRepositoriesCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
repositories: List[_T]
has_more: Optional[bool] = None
total_count: Optional[int] = None

@override
def _get_page_items(self) -> List[_T]:
repositories = self.repositories
if not repositories:
return []
return repositories

@override
def has_next_page(self) -> bool:
has_more = self.has_more
if has_more is not None and has_more is False:
return False

return super().has_next_page()

@override
def next_page_info(self) -> Optional[PageInfo]:
repositories = self.repositories
if not repositories:
return None

item = cast(Any, repositories[-1])
if not isinstance(item, RepositoriesCursorIDPageItem) or item.id is None: # pyright: ignore[reportUnnecessaryComparison]
# TODO emit warning log
return None

return PageInfo(params={"starting_after": item.id})


class SyncDiskSnapshotsCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
snapshots: List[_T]
has_more: Optional[bool] = None
Expand Down
14 changes: 0 additions & 14 deletions src/runloop_api_client/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,6 @@
McpConfigsResourceWithStreamingResponse,
AsyncMcpConfigsResourceWithStreamingResponse,
)
from .repositories import (
RepositoriesResource,
AsyncRepositoriesResource,
RepositoriesResourceWithRawResponse,
AsyncRepositoriesResourceWithRawResponse,
RepositoriesResourceWithStreamingResponse,
AsyncRepositoriesResourceWithStreamingResponse,
)
from .benchmark_jobs import (
BenchmarkJobsResource,
AsyncBenchmarkJobsResource,
Expand Down Expand Up @@ -168,12 +160,6 @@
"AsyncObjectsResourceWithRawResponse",
"ObjectsResourceWithStreamingResponse",
"AsyncObjectsResourceWithStreamingResponse",
"RepositoriesResource",
"AsyncRepositoriesResource",
"RepositoriesResourceWithRawResponse",
"AsyncRepositoriesResourceWithRawResponse",
"RepositoriesResourceWithStreamingResponse",
"AsyncRepositoriesResourceWithStreamingResponse",
"SecretsResource",
"AsyncSecretsResource",
"SecretsResourceWithRawResponse",
Expand Down
Loading
Loading