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
22 changes: 14 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand Down Expand Up @@ -55,14 +57,18 @@ jobs:
run: uv build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/warp-api-python'
if: |-
github.repository == 'stainless-sdks/warp-api-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/warp-api-python'
if: |-
github.repository == 'stainless-sdks/warp-api-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
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 @@
{
".": "0.9.0"
".": "0.10.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 14
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-39e18bbb8b0af73eca7a880f56afbdecd69e3e5bab82a04c4d6429c32d7e6727.yml
openapi_spec_hash: 7a0de988bb37416d6e80f4a4bbe9d0d0
config_hash: 0884847870200ee9d34bb00ce94aaa8e
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-6c175d34cab49d79dbb24289ae516867404c42f3097264bbae171aced72ecc49.yml
openapi_spec_hash: 5abb55a1fc2836207bc88d4815f47f24
config_hash: a4b1ffc5b2e162efb3d557c7461153c1
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Changelog

## 0.10.0 (2026-03-16)

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

### Features

* **api:** error and error_code as types ([9766f85](https://github.com/warpdotdev/oz-sdk-python/commit/9766f85585ff3553f1f366476a3a6806f2534b22))
* **api:** fix ScheduledAgentHistoryItem name ([ac75431](https://github.com/warpdotdev/oz-sdk-python/commit/ac754319e41b73d323cf9a36cbcf1c4dce2902bb))
* **api:** fix schema version issues ([9c2f6a3](https://github.com/warpdotdev/oz-sdk-python/commit/9c2f6a32fa06812860efa1d76893dd8d2b60d176))
* **api:** sorting ([0cc041e](https://github.com/warpdotdev/oz-sdk-python/commit/0cc041edf53d26c4f38c64faa7fd065d7a6760ab))


### Bug Fixes

* **deps:** bump minimum typing-extensions version ([4f3ec38](https://github.com/warpdotdev/oz-sdk-python/commit/4f3ec385748655ca8fde2457ffe402f8bf30db56))
* **pydantic:** do not pass `by_alias` unless set ([45e0377](https://github.com/warpdotdev/oz-sdk-python/commit/45e0377a495aa67b0ee7d4415cbf13b526dbbf7e))


### Chores

* **ci:** skip uploading artifacts on stainless-internal branches ([1ef523c](https://github.com/warpdotdev/oz-sdk-python/commit/1ef523caca4d137def551560de8c8a75c761d0f9))
* **internal:** tweak CI branches ([21f9e2e](https://github.com/warpdotdev/oz-sdk-python/commit/21f9e2e8065a3202a149b3a2440c5adb7d084681))

## 0.9.0 (2026-03-03)

Full Changelog: [v0.8.0...v0.9.0](https://github.com/warpdotdev/oz-sdk-python/compare/v0.8.0...v0.9.0)
Expand Down
2 changes: 2 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ from oz_agent_sdk.types import (
AgentSkill,
AmbientAgentConfig,
CloudEnvironmentConfig,
Error,
ErrorCode,
McpServerConfig,
Scope,
UserProfile,
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "oz-agent-sdk"
version = "0.9.0"
version = "0.10.0"
description = "The official Python library for the oz-api API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand All @@ -11,7 +11,7 @@ authors = [
dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"typing-extensions>=4.14, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
Expand Down
11 changes: 9 additions & 2 deletions src/oz_agent_sdk/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload
from datetime import date, datetime
from typing_extensions import Self, Literal
from typing_extensions import Self, Literal, TypedDict

import pydantic
from pydantic.fields import FieldInfo
Expand Down Expand Up @@ -131,6 +131,10 @@ def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str:
return model.model_dump_json(indent=indent)


class _ModelDumpKwargs(TypedDict, total=False):
by_alias: bool


def model_dump(
model: pydantic.BaseModel,
*,
Expand All @@ -142,14 +146,17 @@ def model_dump(
by_alias: bool | None = None,
) -> dict[str, Any]:
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
kwargs: _ModelDumpKwargs = {}
if by_alias is not None:
kwargs["by_alias"] = by_alias
return model.model_dump(
mode=mode,
exclude=exclude,
exclude_unset=exclude_unset,
exclude_defaults=exclude_defaults,
# warnings are not supported in Pydantic v1
warnings=True if PYDANTIC_V1 else warnings,
by_alias=by_alias,
**kwargs,
)
return cast(
"dict[str, Any]",
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.9.0" # x-release-please-version
__version__ = "0.10.0" # x-release-please-version
34 changes: 30 additions & 4 deletions src/oz_agent_sdk/resources/agent/runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ def list(
schedule_id: str | Omit = omit,
skill: str | Omit = omit,
skill_spec: str | Omit = omit,
sort_by: Literal["updated_at", "created_at", "title", "agent"] | Omit = omit,
sort_order: Literal["asc", "desc"] | Omit = omit,
source: RunSourceType | Omit = omit,
state: List[RunState] | Omit = omit,
updated_after: Union[str, datetime] | Omit = omit,
Expand All @@ -112,8 +114,8 @@ def list(
) -> RunListResponse:
"""Retrieve a paginated list of agent runs with optional filtering.

Results are
ordered by creation time (newest first).
Results default
to `sort_by=updated_at` and `sort_order=desc`.

Args:
artifact_type: Filter runs by artifact type (PLAN or PULL_REQUEST)
Expand Down Expand Up @@ -143,6 +145,15 @@ def list(

skill_spec: Filter runs by skill spec (e.g., "owner/repo:path/to/SKILL.md")

sort_by: Sort field for results.

- `updated_at`: Sort by last update timestamp (default)
- `created_at`: Sort by creation timestamp
- `title`: Sort alphabetically by run title
- `agent`: Sort alphabetically by skill. Runs without a skill are grouped last.

sort_order: Sort direction

source: Filter by run source type

state: Filter by run state. Can be specified multiple times to match any of the given
Expand Down Expand Up @@ -180,6 +191,8 @@ def list(
"schedule_id": schedule_id,
"skill": skill,
"skill_spec": skill_spec,
"sort_by": sort_by,
"sort_order": sort_order,
"source": source,
"state": state,
"updated_after": updated_after,
Expand Down Expand Up @@ -302,6 +315,8 @@ async def list(
schedule_id: str | Omit = omit,
skill: str | Omit = omit,
skill_spec: str | Omit = omit,
sort_by: Literal["updated_at", "created_at", "title", "agent"] | Omit = omit,
sort_order: Literal["asc", "desc"] | Omit = omit,
source: RunSourceType | Omit = omit,
state: List[RunState] | Omit = omit,
updated_after: Union[str, datetime] | Omit = omit,
Expand All @@ -314,8 +329,8 @@ async def list(
) -> RunListResponse:
"""Retrieve a paginated list of agent runs with optional filtering.

Results are
ordered by creation time (newest first).
Results default
to `sort_by=updated_at` and `sort_order=desc`.

Args:
artifact_type: Filter runs by artifact type (PLAN or PULL_REQUEST)
Expand Down Expand Up @@ -345,6 +360,15 @@ async def list(

skill_spec: Filter runs by skill spec (e.g., "owner/repo:path/to/SKILL.md")

sort_by: Sort field for results.

- `updated_at`: Sort by last update timestamp (default)
- `created_at`: Sort by creation timestamp
- `title`: Sort alphabetically by run title
- `agent`: Sort alphabetically by skill. Runs without a skill are grouped last.

sort_order: Sort direction

source: Filter by run source type

state: Filter by run state. Can be specified multiple times to match any of the given
Expand Down Expand Up @@ -382,6 +406,8 @@ async def list(
"schedule_id": schedule_id,
"skill": skill,
"skill_spec": skill_spec,
"sort_by": sort_by,
"sort_order": sort_order,
"source": source,
"state": state,
"updated_after": updated_after,
Expand Down
1 change: 1 addition & 0 deletions src/oz_agent_sdk/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from __future__ import annotations

from .scope import Scope as Scope
from .error_code import ErrorCode as ErrorCode
from .agent_skill import AgentSkill as AgentSkill
from .user_profile import UserProfile as UserProfile
from .agent_run_params import AgentRunParams as AgentRunParams
Expand Down
23 changes: 2 additions & 21 deletions src/oz_agent_sdk/types/agent/run_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

from typing import List, Optional
from datetime import datetime
from typing_extensions import Literal

from ..scope import Scope
from ..._models import BaseModel
from .run_state import RunState
from ..error_code import ErrorCode
from ..user_profile import UserProfile
from .artifact_item import ArtifactItem
from .run_source_type import RunSourceType
Expand Down Expand Up @@ -69,26 +69,7 @@ class StatusMessage(BaseModel):
message: str
"""Human-readable status message"""

error_code: Optional[
Literal[
"insufficient_credits",
"feature_not_available",
"external_authentication_required",
"not_authorized",
"invalid_request",
"resource_not_found",
"budget_exceeded",
"integration_disabled",
"integration_not_configured",
"operation_not_supported",
"environment_setup_failed",
"content_policy_violation",
"conflict",
"authentication_required",
"resource_unavailable",
"internal_error",
]
] = None
error_code: Optional[ErrorCode] = None
"""
Machine-readable error code identifying the problem type. Used in the `type` URI
of Error responses and in the `error_code` field of RunStatusMessage.
Expand Down
12 changes: 12 additions & 0 deletions src/oz_agent_sdk/types/agent/run_list_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,18 @@ class RunListParams(TypedDict, total=False):
skill_spec: str
"""Filter runs by skill spec (e.g., "owner/repo:path/to/SKILL.md")"""

sort_by: Literal["updated_at", "created_at", "title", "agent"]
"""Sort field for results.

- `updated_at`: Sort by last update timestamp (default)
- `created_at`: Sort by creation timestamp
- `title`: Sort alphabetically by run title
- `agent`: Sort alphabetically by skill. Runs without a skill are grouped last.
"""

sort_order: Literal["asc", "desc"]
"""Sort direction"""

source: RunSourceType
"""Filter by run source type"""

Expand Down
24 changes: 24 additions & 0 deletions src/oz_agent_sdk/types/error_code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from typing_extensions import Literal, TypeAlias

__all__ = ["ErrorCode"]

ErrorCode: TypeAlias = Literal[
"insufficient_credits",
"feature_not_available",
"external_authentication_required",
"not_authorized",
"invalid_request",
"resource_not_found",
"budget_exceeded",
"integration_disabled",
"integration_not_configured",
"operation_not_supported",
"environment_setup_failed",
"content_policy_violation",
"conflict",
"authentication_required",
"resource_unavailable",
"internal_error",
]
4 changes: 4 additions & 0 deletions tests/api_resources/agent/test_runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ def test_method_list_with_all_params(self, client: OzAPI) -> None:
schedule_id="schedule_id",
skill="skill",
skill_spec="skill_spec",
sort_by="updated_at",
sort_order="asc",
source="LINEAR",
state=["QUEUED"],
updated_after=parse_datetime("2019-12-27T18:11:19.117Z"),
Expand Down Expand Up @@ -224,6 +226,8 @@ async def test_method_list_with_all_params(self, async_client: AsyncOzAPI) -> No
schedule_id="schedule_id",
skill="skill",
skill_spec="skill_spec",
sort_by="updated_at",
sort_order="asc",
source="LINEAR",
state=["QUEUED"],
updated_after=parse_datetime("2019-12-27T18:11:19.117Z"),
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading