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 @@
{
".": "0.12.0"
".": "0.13.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta/warp-api-1fecc5f5d6ee664d804b81bd1aa6eec4d3f170ffa788d214fead4f7e95ab9d4e.yml
openapi_spec_hash: 82990b03bd5a93e45bfc79db56ae7fc0
config_hash: f52e7636f248f25c4ea0b086e7326816
configured_endpoints: 23
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta/warp-api-f17568757e003a96eb9843fb7f173f5df491bc3aa6b39a5189e9c33602912121.yml
openapi_spec_hash: a391afecf639f9c4993f37e5bbd06369
config_hash: 236823a4936c76818117c16aa5c188df
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## 0.13.0 (2026-05-09)

Full Changelog: [v0.12.0...v0.13.0](https://github.com/warpdotdev/oz-sdk-python/compare/v0.12.0...v0.13.0)

### Features

* **api:** api update ([af81ef3](https://github.com/warpdotdev/oz-sdk-python/commit/af81ef3a2d48f378209cf69a3074997cb02b1b6c))
* **api:** api update ([99b2d31](https://github.com/warpdotdev/oz-sdk-python/commit/99b2d31ba1a4c2c3d79fc11c5eb8d611c55613b8))
* **memory:** agent identity memory store attachments — API layer ([94b5348](https://github.com/warpdotdev/oz-sdk-python/commit/94b5348152c6b0bfb03b0d3887366c4a65e397fb))
* **memory:** wire memory stores into run pipeline and add listing endpoint ([6bb74c2](https://github.com/warpdotdev/oz-sdk-python/commit/6bb74c2b695cd268fe8466fc6099f082370ba54e))
* Retrieve memories in third party harnesses ([7689e12](https://github.com/warpdotdev/oz-sdk-python/commit/7689e121d6f22efad3d81828721f8ed900b9cd28))


### Bug Fixes

* **client:** add missing f-string prefix in file type error message ([17a8e5b](https://github.com/warpdotdev/oz-sdk-python/commit/17a8e5bf17b882a440a067fee1569caf679f8b55))

## 0.12.0 (2026-05-07)

Full Changelog: [v0.11.0...v0.12.0](https://github.com/warpdotdev/oz-sdk-python/compare/v0.11.0...v0.12.0)
Expand Down
1 change: 1 addition & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ Methods:
- <code title="put /agent/identities/{uid}">client.agent.agent.<a href="./src/oz_agent_sdk/resources/agent/agent_.py">update</a>(uid, \*\*<a href="src/oz_agent_sdk/types/agent/agent_update_params.py">params</a>) -> <a href="./src/oz_agent_sdk/types/agent/agent_response.py">AgentResponse</a></code>
- <code title="get /agent/identities">client.agent.agent.<a href="./src/oz_agent_sdk/resources/agent/agent_.py">list</a>() -> <a href="./src/oz_agent_sdk/types/agent/list_agent_identities_response.py">ListAgentIdentitiesResponse</a></code>
- <code title="delete /agent/identities/{uid}">client.agent.agent.<a href="./src/oz_agent_sdk/resources/agent/agent_.py">delete</a>(uid) -> None</code>
- <code title="get /agent/identities/{uid}">client.agent.agent.<a href="./src/oz_agent_sdk/resources/agent/agent_.py">get</a>(uid) -> <a href="./src/oz_agent_sdk/types/agent/agent_response.py">AgentResponse</a></code>

## Sessions

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 = "oz-agent-sdk"
version = "0.12.0"
version = "0.13.0"
description = "The official Python library for the oz-api API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/oz_agent_sdk/_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ async def async_to_httpx_files(files: RequestFiles | None) -> HttpxRequestFiles
elif is_sequence_t(files):
files = [(key, await _async_transform_file(file)) for key, file in files]
else:
raise TypeError("Unexpected file type input {type(files)}, expected mapping or sequence")
raise TypeError(f"Unexpected file type input {type(files)}, expected mapping or sequence")

return files

Expand Down
2 changes: 1 addition & 1 deletion src/oz_agent_sdk/_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__ = "oz_agent_sdk"
__version__ = "0.12.0" # x-release-please-version
__version__ = "0.13.0" # x-release-please-version
132 changes: 128 additions & 4 deletions src/oz_agent_sdk/resources/agent/agent_.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ def create(
self,
*,
name: str,
base_model: Optional[str] | Omit = omit,
description: Optional[str] | Omit = omit,
memory_stores: Iterable[agent_create_params.MemoryStore] | Omit = omit,
secrets: Iterable[agent_create_params.Secret] | Omit = omit,
skills: SequenceNotStr[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
Expand All @@ -68,8 +70,14 @@ def create(
Args:
name: A name for the agent

base_model: Optional base model for runs executed by this agent.

description: Optional description of the agent

memory_stores: Optional list of memory stores to attach to the agent. Each store must be
team-owned by the same team as the agent. Duplicate UIDs within a single request
are rejected.

secrets: Optional list of secrets associated with the agent. Duplicate names within a
single request are rejected. Each entry is unioned into the run-time secret
scope when the agent executes.
Expand All @@ -94,7 +102,9 @@ def create(
body=maybe_transform(
{
"name": name,
"base_model": base_model,
"description": description,
"memory_stores": memory_stores,
"secrets": secrets,
"skills": skills,
},
Expand All @@ -110,7 +120,9 @@ def update(
self,
uid: str,
*,
base_model: Optional[str] | Omit = omit,
description: Optional[str] | Omit = omit,
memory_stores: Optional[Iterable[agent_update_params.MemoryStore]] | Omit = omit,
name: str | Omit = omit,
secrets: Optional[Iterable[agent_update_params.Secret]] | Omit = omit,
skills: Optional[SequenceNotStr[str]] | Omit = omit,
Expand All @@ -124,11 +136,17 @@ def update(
"""Update an existing agent.

Args:
description: Replacement description.
base_model: Replacement base model.

Omit or pass `null` to leave unchanged, or pass an empty
string to clear.

Omit or pass `null` to leave unchanged, or use an empty
description: Replacement description. Omit or pass `null` to leave unchanged, or use an empty
value to clear.

memory_stores: Replacement list of memory stores. Omit to leave unchanged, pass an empty array
to clear, or pass a non-empty array to replace.

name: The new name for the agent

secrets: Replacement list of secrets. Omit to leave unchanged, pass an empty array to
Expand All @@ -151,7 +169,9 @@ def update(
path_template("/agent/identities/{uid}", uid=uid),
body=maybe_transform(
{
"base_model": base_model,
"description": description,
"memory_stores": memory_stores,
"name": name,
"secrets": secrets,
"skills": skills,
Expand Down Expand Up @@ -222,6 +242,42 @@ def delete(
cast_to=NoneType,
)

def get(
self,
uid: str,
*,
# 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,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> AgentResponse:
"""Retrieve a single agent by its unique identifier.

The response includes an
`available` flag indicating whether the agent is within the team's plan limit
and may be used for runs.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not uid:
raise ValueError(f"Expected a non-empty value for `uid` but received {uid!r}")
return self._get(
path_template("/agent/identities/{uid}", uid=uid),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=AgentResponse,
)


class AsyncAgentResource(AsyncAPIResource):
"""Operations for running and managing cloud agents"""
Expand Down Expand Up @@ -249,7 +305,9 @@ async def create(
self,
*,
name: str,
base_model: Optional[str] | Omit = omit,
description: Optional[str] | Omit = omit,
memory_stores: Iterable[agent_create_params.MemoryStore] | Omit = omit,
secrets: Iterable[agent_create_params.Secret] | Omit = omit,
skills: SequenceNotStr[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
Expand All @@ -267,8 +325,14 @@ async def create(
Args:
name: A name for the agent

base_model: Optional base model for runs executed by this agent.

description: Optional description of the agent

memory_stores: Optional list of memory stores to attach to the agent. Each store must be
team-owned by the same team as the agent. Duplicate UIDs within a single request
are rejected.

secrets: Optional list of secrets associated with the agent. Duplicate names within a
single request are rejected. Each entry is unioned into the run-time secret
scope when the agent executes.
Expand All @@ -293,7 +357,9 @@ async def create(
body=await async_maybe_transform(
{
"name": name,
"base_model": base_model,
"description": description,
"memory_stores": memory_stores,
"secrets": secrets,
"skills": skills,
},
Expand All @@ -309,7 +375,9 @@ async def update(
self,
uid: str,
*,
base_model: Optional[str] | Omit = omit,
description: Optional[str] | Omit = omit,
memory_stores: Optional[Iterable[agent_update_params.MemoryStore]] | Omit = omit,
name: str | Omit = omit,
secrets: Optional[Iterable[agent_update_params.Secret]] | Omit = omit,
skills: Optional[SequenceNotStr[str]] | Omit = omit,
Expand All @@ -323,11 +391,17 @@ async def update(
"""Update an existing agent.

Args:
description: Replacement description.
base_model: Replacement base model.

Omit or pass `null` to leave unchanged, or use an empty
Omit or pass `null` to leave unchanged, or pass an empty
string to clear.

description: Replacement description. Omit or pass `null` to leave unchanged, or use an empty
value to clear.

memory_stores: Replacement list of memory stores. Omit to leave unchanged, pass an empty array
to clear, or pass a non-empty array to replace.

name: The new name for the agent

secrets: Replacement list of secrets. Omit to leave unchanged, pass an empty array to
Expand All @@ -350,7 +424,9 @@ async def update(
path_template("/agent/identities/{uid}", uid=uid),
body=await async_maybe_transform(
{
"base_model": base_model,
"description": description,
"memory_stores": memory_stores,
"name": name,
"secrets": secrets,
"skills": skills,
Expand Down Expand Up @@ -421,6 +497,42 @@ async def delete(
cast_to=NoneType,
)

async def get(
self,
uid: str,
*,
# 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,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> AgentResponse:
"""Retrieve a single agent by its unique identifier.

The response includes an
`available` flag indicating whether the agent is within the team's plan limit
and may be used for runs.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not uid:
raise ValueError(f"Expected a non-empty value for `uid` but received {uid!r}")
return await self._get(
path_template("/agent/identities/{uid}", uid=uid),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=AgentResponse,
)


class AgentResourceWithRawResponse:
def __init__(self, agent: AgentResource) -> None:
Expand All @@ -438,6 +550,9 @@ def __init__(self, agent: AgentResource) -> None:
self.delete = to_raw_response_wrapper(
agent.delete,
)
self.get = to_raw_response_wrapper(
agent.get,
)


class AsyncAgentResourceWithRawResponse:
Expand All @@ -456,6 +571,9 @@ def __init__(self, agent: AsyncAgentResource) -> None:
self.delete = async_to_raw_response_wrapper(
agent.delete,
)
self.get = async_to_raw_response_wrapper(
agent.get,
)


class AgentResourceWithStreamingResponse:
Expand All @@ -474,6 +592,9 @@ def __init__(self, agent: AgentResource) -> None:
self.delete = to_streamed_response_wrapper(
agent.delete,
)
self.get = to_streamed_response_wrapper(
agent.get,
)


class AsyncAgentResourceWithStreamingResponse:
Expand All @@ -492,3 +613,6 @@ def __init__(self, agent: AsyncAgentResource) -> None:
self.delete = async_to_streamed_response_wrapper(
agent.delete,
)
self.get = async_to_streamed_response_wrapper(
agent.get,
)
27 changes: 25 additions & 2 deletions src/oz_agent_sdk/types/agent/agent_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,30 @@
from __future__ import annotations

from typing import Iterable, Optional
from typing_extensions import Required, TypedDict
from typing_extensions import Literal, Required, TypedDict

from ..._types import SequenceNotStr

__all__ = ["AgentCreateParams", "Secret"]
__all__ = ["AgentCreateParams", "MemoryStore", "Secret"]


class AgentCreateParams(TypedDict, total=False):
name: Required[str]
"""A name for the agent"""

base_model: Optional[str]
"""Optional base model for runs executed by this agent."""

description: Optional[str]
"""Optional description of the agent"""

memory_stores: Iterable[MemoryStore]
"""
Optional list of memory stores to attach to the agent. Each store must be
team-owned by the same team as the agent. Duplicate UIDs within a single request
are rejected.
"""

secrets: Iterable[Secret]
"""
Optional list of secrets associated with the agent. Duplicate names within a
Expand All @@ -34,6 +44,19 @@ class AgentCreateParams(TypedDict, total=False):
"""


class MemoryStore(TypedDict, total=False):
"""Reference to a memory store to attach to an agent."""

access: Required[Literal["read_write", "read_only"]]
"""Access level for the store."""

instructions: Required[str]
"""Instructions for how the agent should use this memory store. Must not be empty."""

uid: Required[str]
"""UID of the memory store."""


class Secret(TypedDict, total=False):
"""Reference to a managed secret by name."""

Expand Down
Loading
Loading