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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/runloop-python' && 'depot-ubuntu-24.04' || 'ubuntu-slim' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6

Expand All @@ -38,7 +38,7 @@ jobs:
run: uv run python scripts/generate_examples_md.py --check

build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
timeout-minutes: 10
name: build
permissions:
Expand Down
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.13.0"
".": "1.13.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: 122
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-32e4b2dfb75745be076697d252bd80aff21c08464750928ffe2b7dd997d0b443.yml
openapi_spec_hash: eb0ccabfcda0fb8c56b53939b56f6d80
config_hash: c422b761c745873bce8fa5ccf03b7b98
configured_endpoints: 124
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-c576eb67f119a7eb5815d4a3bf413c652cd7e4c257095e3b6b51967fe72fc00e.yml
openapi_spec_hash: 0a4d20adf725a121e39a3442afa34b32
config_hash: a759c23a5a04ad26f8740acc7e094c01
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
# Changelog

## 1.13.1 (2026-03-25)

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

### Features

* Add axon rest endpoints for raw SQL access ([#8287](https://github.com/runloopai/api-client-python/issues/8287)) ([d3135f4](https://github.com/runloopai/api-client-python/commit/d3135f4791d18c685981d3cb959568d36414ac81))
* add BrokerMount to OpenAPI spec ([#8282](https://github.com/runloopai/api-client-python/issues/8282)) ([fc41e95](https://github.com/runloopai/api-client-python/commit/fc41e957a30f1387781d7285489372a617c50967))
* **sdk:** add axons to OO SDK ([#766](https://github.com/runloopai/api-client-python/issues/766)) ([821cf30](https://github.com/runloopai/api-client-python/commit/821cf30a83e05c1d591eaad41485c8acf1ff3c8b))


### Bug Fixes

* **broker:** broker protocol renames for clarity / future proof ([#8285](https://github.com/runloopai/api-client-python/issues/8285)) ([4f07960](https://github.com/runloopai/api-client-python/commit/4f0796094fcc154f88bad8c243a50fbfc7c738b4))


### Chores

* **ci:** skip lint on metadata-only changes ([b276bc4](https://github.com/runloopai/api-client-python/commit/b276bc45e3549f33888df99f589473812fb153e7))
* **tests:** bump steady to v0.19.7 ([2f380b6](https://github.com/runloopai/api-client-python/commit/2f380b6d400d6a8879313a0928eb3a9d4151d560))

## 1.13.0 (2026-03-24)

Full Changelog: [v1.12.1...v1.13.0](https://github.com/runloopai/api-client-python/compare/v1.12.1...v1.13.0)
Expand Down
33 changes: 28 additions & 5 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ from runloop_api_client.types import (
AfterIdle,
AgentMount,
AgentSource,
BrokerMount,
CodeMountParameters,
LaunchParameters,
Mount,
Expand Down Expand Up @@ -104,11 +105,33 @@ from runloop_api_client.types import (

Methods:

- <code title="post /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons.py">create</a>(\*\*<a href="src/runloop_api_client/types/axon_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
- <code title="get /v1/axons/{id}">client.axons.<a href="./src/runloop_api_client/resources/axons.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
- <code title="get /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons.py">list</a>() -> <a href="./src/runloop_api_client/types/axon_list_view.py">AxonListView</a></code>
- <code title="post /v1/axons/{id}/publish">client.axons.<a href="./src/runloop_api_client/resources/axons.py">publish</a>(id, \*\*<a href="src/runloop_api_client/types/axon_publish_params.py">params</a>) -> <a href="./src/runloop_api_client/types/publish_result_view.py">PublishResultView</a></code>
- <code title="get /v1/axons/{id}/subscribe/sse">client.axons.<a href="./src/runloop_api_client/resources/axons.py">subscribe_sse</a>(id) -> <a href="./src/runloop_api_client/types/axon_event_view.py">AxonEventView</a></code>
- <code title="post /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">create</a>(\*\*<a href="src/runloop_api_client/types/axon_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
- <code title="get /v1/axons/{id}">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
- <code title="get /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">list</a>() -> <a href="./src/runloop_api_client/types/axon_list_view.py">AxonListView</a></code>
- <code title="post /v1/axons/{id}/publish">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">publish</a>(id, \*\*<a href="src/runloop_api_client/types/axon_publish_params.py">params</a>) -> <a href="./src/runloop_api_client/types/publish_result_view.py">PublishResultView</a></code>
- <code title="get /v1/axons/{id}/subscribe/sse">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">subscribe_sse</a>(id) -> <a href="./src/runloop_api_client/types/axon_event_view.py">AxonEventView</a></code>

## Sql

Types:

```python
from runloop_api_client.types.axons import (
SqlBatchParams,
SqlBatchResultView,
SqlColumnMetaView,
SqlQueryResultView,
SqlResultMetaView,
SqlStatementParams,
SqlStepErrorView,
SqlStepResultView,
)
```

Methods:

- <code title="post /v1/axons/{id}/sql/batch">client.axons.sql.<a href="./src/runloop_api_client/resources/axons/sql.py">batch</a>(id, \*\*<a href="src/runloop_api_client/types/axons/sql_batch_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axons/sql_batch_result_view.py">SqlBatchResultView</a></code>
- <code title="post /v1/axons/{id}/sql/query">client.axons.sql.<a href="./src/runloop_api_client/resources/axons/sql.py">query</a>(id, \*\*<a href="src/runloop_api_client/types/axons/sql_query_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axons/sql_query_result_view.py">SqlQueryResultView</a></code>

# Blueprints

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.13.0"
version = "1.13.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/[email protected].6 -- steady --version
npm exec --package=@stdy/[email protected].7 -- steady --version

npm exec --package=@stdy/[email protected].6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets "$URL" &> .stdy.log &
npm exec --package=@stdy/[email protected].7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-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/[email protected].6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets "$URL"
npm exec --package=@stdy/[email protected].7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-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/[email protected].6 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets${NC}"
echo -e " \$ ${YELLOW}npm exec --package=@stdy/[email protected].7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets${NC}"
echo

exit 1
Expand Down
2 changes: 1 addition & 1 deletion src/runloop_api_client/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@
gateway_configs,
network_policies,
)
from .resources.axons import AxonsResource, AsyncAxonsResource
from .resources.agents import AgentsResource, AsyncAgentsResource
from .resources.objects import ObjectsResource, AsyncObjectsResource
from .resources.secrets import SecretsResource, AsyncSecretsResource
from .resources.benchmarks import BenchmarksResource, AsyncBenchmarksResource
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
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.13.0" # x-release-please-version
__version__ = "1.13.1" # x-release-please-version
33 changes: 33 additions & 0 deletions src/runloop_api_client/resources/axons/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from .sql import (
SqlResource,
AsyncSqlResource,
SqlResourceWithRawResponse,
AsyncSqlResourceWithRawResponse,
SqlResourceWithStreamingResponse,
AsyncSqlResourceWithStreamingResponse,
)
from .axons import (
AxonsResource,
AsyncAxonsResource,
AxonsResourceWithRawResponse,
AsyncAxonsResourceWithRawResponse,
AxonsResourceWithStreamingResponse,
AsyncAxonsResourceWithStreamingResponse,
)

__all__ = [
"SqlResource",
"AsyncSqlResource",
"SqlResourceWithRawResponse",
"AsyncSqlResourceWithRawResponse",
"SqlResourceWithStreamingResponse",
"AsyncSqlResourceWithStreamingResponse",
"AxonsResource",
"AsyncAxonsResource",
"AxonsResourceWithRawResponse",
"AsyncAxonsResourceWithRawResponse",
"AxonsResourceWithStreamingResponse",
"AsyncAxonsResourceWithStreamingResponse",
]
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,40 @@

import httpx

from ..types import axon_create_params, axon_publish_params
from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from .._utils import path_template, maybe_transform, async_maybe_transform
from .._compat import cached_property
from .._resource import SyncAPIResource, AsyncAPIResource
from .._response import (
from .sql import (
SqlResource,
AsyncSqlResource,
SqlResourceWithRawResponse,
AsyncSqlResourceWithRawResponse,
SqlResourceWithStreamingResponse,
AsyncSqlResourceWithStreamingResponse,
)
from ...types import axon_create_params, axon_publish_params
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from ..._utils import path_template, maybe_transform, async_maybe_transform
from ..._compat import cached_property
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import (
to_raw_response_wrapper,
to_streamed_response_wrapper,
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
from .._streaming import Stream, AsyncStream
from .._base_client import make_request_options
from ..types.axon_view import AxonView
from ..types.axon_list_view import AxonListView
from ..types.axon_event_view import AxonEventView
from ..types.publish_result_view import PublishResultView
from ..._streaming import Stream, AsyncStream
from ..._base_client import make_request_options
from ...types.axon_view import AxonView
from ...types.axon_list_view import AxonListView
from ...types.axon_event_view import AxonEventView
from ...types.publish_result_view import PublishResultView

__all__ = ["AxonsResource", "AsyncAxonsResource"]


class AxonsResource(SyncAPIResource):
@cached_property
def sql(self) -> SqlResource:
return SqlResource(self._client)

@cached_property
def with_raw_response(self) -> AxonsResourceWithRawResponse:
"""
Expand Down Expand Up @@ -241,6 +253,10 @@ def subscribe_sse(


class AsyncAxonsResource(AsyncAPIResource):
@cached_property
def sql(self) -> AsyncSqlResource:
return AsyncSqlResource(self._client)

@cached_property
def with_raw_response(self) -> AsyncAxonsResourceWithRawResponse:
"""
Expand Down Expand Up @@ -472,6 +488,10 @@ def __init__(self, axons: AxonsResource) -> None:
axons.subscribe_sse,
)

@cached_property
def sql(self) -> SqlResourceWithRawResponse:
return SqlResourceWithRawResponse(self._axons.sql)


class AsyncAxonsResourceWithRawResponse:
def __init__(self, axons: AsyncAxonsResource) -> None:
Expand All @@ -493,6 +513,10 @@ def __init__(self, axons: AsyncAxonsResource) -> None:
axons.subscribe_sse,
)

@cached_property
def sql(self) -> AsyncSqlResourceWithRawResponse:
return AsyncSqlResourceWithRawResponse(self._axons.sql)


class AxonsResourceWithStreamingResponse:
def __init__(self, axons: AxonsResource) -> None:
Expand All @@ -514,6 +538,10 @@ def __init__(self, axons: AxonsResource) -> None:
axons.subscribe_sse,
)

@cached_property
def sql(self) -> SqlResourceWithStreamingResponse:
return SqlResourceWithStreamingResponse(self._axons.sql)


class AsyncAxonsResourceWithStreamingResponse:
def __init__(self, axons: AsyncAxonsResource) -> None:
Expand All @@ -534,3 +562,7 @@ def __init__(self, axons: AsyncAxonsResource) -> None:
self.subscribe_sse = async_to_streamed_response_wrapper(
axons.subscribe_sse,
)

@cached_property
def sql(self) -> AsyncSqlResourceWithStreamingResponse:
return AsyncSqlResourceWithStreamingResponse(self._axons.sql)
Loading