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 @@
{
".": "0.4.0"
".": "0.5.0"
}
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## [0.5.0](https://github.com/tembo/sdk-python/compare/v0.4.0...v0.5.0) (2026-10-23)


### ⚠ BREAKING CHANGES

* **api:** Schema `agent_options_input` shape changed.

### Features

* **api:** update schema agent_options_input (+7 more changes) ([1284046](https://github.com/tembo/sdk-python/commit/1284046585d20374b6f94c05393ed468bf45a5b4))

## [0.4.0](https://github.com/tembo/sdk-python/compare/v0.3.0...v0.4.0) (2026-10-21)


Expand Down
7 changes: 4 additions & 3 deletions VERSIONING.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@ not have picked — **edit the release PR title** to the version you want:
release: 1.0.0
```

The `Release PR version` check turns red as soon as you save, because the version in the
The `Release PR version` check goes pending as soon as you save, because the version in the
title no longer matches the version committed in the PR. The Scalar platform then re-renders
the release PR at your version (changelog, manifest, and every version-bearing file), the
title comes back as `release: 1.0.0`, and the check turns green. **Wait for it to be green
before merging** — merging in between would tag a release whose own files still carry the
old version.
old version. The check only turns red if the title is not a full semver version, or if the
re-render has not arrived within 10 minutes.

The git-native equivalent, if you would rather not touch the PR: push an empty commit with a
`Release-As` footer to `scalar-next`. This is exactly what the title edit does for you.
Expand Down Expand Up @@ -95,6 +96,6 @@ Releases work without this; it closes a window where one can go out at the wrong

- **If this repository uses auto-merge, make the `Release PR version` check a required status
check.** Auto-merge merges as soon as the checks that are *required* go green, with no
human present — so a check that is not required but still red at that moment stops
human present — so a check that is not required but still pending at that moment stops
nothing, which is exactly the window between retitling a release PR and the platform
re-rendering it.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "tembo-sdk-python"
version = "0.4.0" # x-release-please-version
version = "0.5.0" # x-release-please-version
description = "Manage agents, sessions, repositories, and organization resources with the Tembo API."
readme = "README.md"
license = "Apache-2.0"
Expand Down
66 changes: 63 additions & 3 deletions scalar-sdk.manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "TemboSdk",
"slug": "temboSdk",
"generatorVersion": "0.36.8",
"generatorVersion": "0.36.9",
"servers": [
"https://api.tembo.io/"
],
Expand Down Expand Up @@ -848,6 +848,16 @@
],
"additionalProperties": false
}
},
{
"name": "ultracode",
"publicName": "ultracode",
"required": false,
"deprecated": false,
"type": {
"kind": "primitive",
"type": "boolean"
}
}
],
"additionalProperties": {
Expand Down Expand Up @@ -966,6 +976,16 @@
],
"additionalProperties": false
}
},
{
"name": "ultracode",
"publicName": "ultracode",
"required": false,
"deprecated": false,
"type": {
"kind": "primitive",
"type": "boolean"
}
}
],
"additionalProperties": false
Expand Down Expand Up @@ -22144,6 +22164,7 @@
"hasTemboSession",
"includeAuthors",
"includeTotal",
"includeStacks",
"repositoryIds",
"reviewerIds",
"mergedAfter",
Expand All @@ -22164,6 +22185,7 @@
"hasTemboSession",
"includeAuthors",
"includeTotal",
"includeStacks",
"repositoryIds",
"reviewerIds",
"mergedAfter",
Expand Down Expand Up @@ -22246,6 +22268,12 @@
"style": "form",
"explode": true
},
{
"name": "includeStacks",
"required": false,
"style": "form",
"explode": true
},
{
"name": "repositoryIds",
"required": false,
Expand Down Expand Up @@ -29503,12 +29531,20 @@
"queryParams": [
"cursor",
"limit",
"sessionId"
"sessionId",
"createdAfter",
"createdBefore",
"createdBy",
"models"
],
"publicQueryParams": [
"cursor",
"limit",
"sessionId"
"sessionId",
"createdAfter",
"createdBefore",
"createdBy",
"models"
],
"headerParams": [],
"publicHeaderParams": [],
Expand All @@ -29535,6 +29571,30 @@
"required": false,
"style": "form",
"explode": true
},
{
"name": "createdAfter",
"required": false,
"style": "form",
"explode": true
},
{
"name": "createdBefore",
"required": false,
"style": "form",
"explode": true
},
{
"name": "createdBy",
"required": false,
"style": "form",
"explode": true
},
{
"name": "models",
"required": false,
"style": "form",
"explode": true
}
],
"headerParamDetails": [],
Expand Down
2 changes: 1 addition & 1 deletion src/tembo/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Scalar. See README.md for details.

__title__ = "temboSdk"
__version__ = "0.4.0" # x-release-please-version
__version__ = "0.5.0" # x-release-please-version
40 changes: 38 additions & 2 deletions src/tembo/resources/billing.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

import httpx

from typing import Union
from datetime import datetime
from .._types import SequenceNotStr

from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from .._utils import maybe_transform, async_maybe_transform
from .._compat import cached_property
Expand Down Expand Up @@ -72,6 +76,10 @@ def list_usage(
cursor: str | Omit = omit,
limit: int | Omit = omit,
session_id: str | Omit = omit,
created_after: Union[str, datetime] | Omit = omit,
created_before: Union[str, datetime] | Omit = omit,
created_by: SequenceNotStr[str] | Omit = omit,
models: SequenceNotStr[str] | Omit = omit,
# 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,
Expand All @@ -86,6 +94,10 @@ def list_usage(
cursor: Continuation cursor from the previous response nextCursor. Omit for the first page; null nextCursor means there are no more pages.
limit: Maximum number of items to return in one page. Use nextCursor from the response to fetch more items.
session_id: Filter billing usage to this session.
created_after: Only sessions created at or after this ISO 8601 timestamp.
created_before: Only sessions created before this ISO 8601 timestamp.
created_by: Filter by creator IDs, supplied as a comma-separated list.
models: Filter by model names, supplied as a comma-separated list.
extra_headers: Send extra headers with the request.
extra_query: Send extra query parameters with the request.
extra_body: Send extra JSON properties with the request.
Expand All @@ -109,7 +121,15 @@ def list_usage(
extra_body=extra_body,
timeout=timeout,
query=maybe_transform(
{"cursor": cursor, "limit": limit, "session_id": session_id},
{
"cursor": cursor,
"limit": limit,
"session_id": session_id,
"created_after": created_after,
"created_before": created_before,
"created_by": created_by,
"models": models,
},
billing_list_usage_params.BillingListUsageParams,
),
),
Expand Down Expand Up @@ -167,6 +187,10 @@ async def list_usage(
cursor: str | Omit = omit,
limit: int | Omit = omit,
session_id: str | Omit = omit,
created_after: Union[str, datetime] | Omit = omit,
created_before: Union[str, datetime] | Omit = omit,
created_by: SequenceNotStr[str] | Omit = omit,
models: SequenceNotStr[str] | Omit = omit,
# 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,
Expand All @@ -181,6 +205,10 @@ async def list_usage(
cursor: Continuation cursor from the previous response nextCursor. Omit for the first page; null nextCursor means there are no more pages.
limit: Maximum number of items to return in one page. Use nextCursor from the response to fetch more items.
session_id: Filter billing usage to this session.
created_after: Only sessions created at or after this ISO 8601 timestamp.
created_before: Only sessions created before this ISO 8601 timestamp.
created_by: Filter by creator IDs, supplied as a comma-separated list.
models: Filter by model names, supplied as a comma-separated list.
extra_headers: Send extra headers with the request.
extra_query: Send extra query parameters with the request.
extra_body: Send extra JSON properties with the request.
Expand All @@ -204,7 +232,15 @@ async def list_usage(
extra_body=extra_body,
timeout=timeout,
query=await async_maybe_transform(
{"cursor": cursor, "limit": limit, "session_id": session_id},
{
"cursor": cursor,
"limit": limit,
"session_id": session_id,
"created_after": created_after,
"created_before": created_before,
"created_by": created_by,
"models": models,
},
billing_list_usage_params.BillingListUsageParams,
),
),
Expand Down
6 changes: 6 additions & 0 deletions src/tembo/resources/pull_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def list(
has_tembo_session: bool | Omit = omit,
include_authors: bool | Omit = omit,
include_total: bool | Omit = omit,
include_stacks: bool | Omit = omit,
repository_ids: SequenceNotStr[str] | Omit = omit,
reviewer_ids: SequenceNotStr[str] | Omit = omit,
merged_after: Union[str, datetime] | Omit = omit,
Expand Down Expand Up @@ -79,6 +80,7 @@ def list(
has_tembo_session: When true, only return pull requests with a linked Tembo session.
include_authors: Request author filter options. Public responses do not include organization-wide author options.
include_total: Include the total count of matching pull requests.
include_stacks: Include each open pull request's position in its stack of dependent pull requests. Public responses do not include stacks.
repository_ids: Filter by repository IDs, supplied as a comma-separated list.
reviewer_ids: Filter by assigned reviewer identifiers, supplied as a comma-separated list.
merged_after: Only pull requests merged after this ISO 8601 timestamp.
Expand Down Expand Up @@ -121,6 +123,7 @@ def list(
"has_tembo_session": has_tembo_session,
"include_authors": include_authors,
"include_total": include_total,
"include_stacks": include_stacks,
"repository_ids": repository_ids,
"reviewer_ids": reviewer_ids,
"merged_after": merged_after,
Expand Down Expand Up @@ -200,6 +203,7 @@ async def list(
has_tembo_session: bool | Omit = omit,
include_authors: bool | Omit = omit,
include_total: bool | Omit = omit,
include_stacks: bool | Omit = omit,
repository_ids: SequenceNotStr[str] | Omit = omit,
reviewer_ids: SequenceNotStr[str] | Omit = omit,
merged_after: Union[str, datetime] | Omit = omit,
Expand Down Expand Up @@ -229,6 +233,7 @@ async def list(
has_tembo_session: When true, only return pull requests with a linked Tembo session.
include_authors: Request author filter options. Public responses do not include organization-wide author options.
include_total: Include the total count of matching pull requests.
include_stacks: Include each open pull request's position in its stack of dependent pull requests. Public responses do not include stacks.
repository_ids: Filter by repository IDs, supplied as a comma-separated list.
reviewer_ids: Filter by assigned reviewer identifiers, supplied as a comma-separated list.
merged_after: Only pull requests merged after this ISO 8601 timestamp.
Expand Down Expand Up @@ -271,6 +276,7 @@ async def list(
"has_tembo_session": has_tembo_session,
"include_authors": include_authors,
"include_total": include_total,
"include_stacks": include_stacks,
"repository_ids": repository_ids,
"reviewer_ids": reviewer_ids,
"merged_after": merged_after,
Expand Down
3 changes: 3 additions & 0 deletions src/tembo/types/agent_options_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ class AgentOptionsInput2(BaseModel):

goal: Optional[AgentOptionsInput2Goal] = None

ultracode: Optional[bool] = None
"""Whether the agent orchestrates multi-agent workflows for every task when supported by the selected runtime and model."""

if TYPE_CHECKING:
# Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
# value to this field, so for compatibility we avoid doing it at runtime.
Expand Down
3 changes: 3 additions & 0 deletions src/tembo/types/agent_options_input_param.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ class Variant(TypedDict, total=False):

goal: VariantGoal

ultracode: bool
"""Whether the agent orchestrates multi-agent workflows for every task when supported by the selected runtime and model."""


AgentOptionsInputParam: TypeAlias = Union[Variant, Dict[str, object]]
15 changes: 15 additions & 0 deletions src/tembo/types/billing_list_usage_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

from __future__ import annotations

from typing import Union
from datetime import datetime
from typing_extensions import Annotated, TypedDict
from .._types import SequenceNotStr

from .._utils import PropertyInfo

Expand All @@ -18,3 +21,15 @@ class BillingListUsageParams(TypedDict, total=False):

session_id: Annotated[str, PropertyInfo(alias="sessionId")]
"""Filter billing usage to this session."""

created_after: Annotated[Union[str, datetime], PropertyInfo(alias="createdAfter", format="iso8601")]
"""Only sessions created at or after this ISO 8601 timestamp."""

created_before: Annotated[Union[str, datetime], PropertyInfo(alias="createdBefore", format="iso8601")]
"""Only sessions created before this ISO 8601 timestamp."""

created_by: Annotated[SequenceNotStr[str], PropertyInfo(alias="createdBy")]
"""Filter by creator IDs, supplied as a comma-separated list."""

models: SequenceNotStr[str]
"""Filter by model names, supplied as a comma-separated list."""
3 changes: 3 additions & 0 deletions src/tembo/types/pull_request_list_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ class PullRequestListParams(TypedDict, total=False):
include_total: Annotated[bool, PropertyInfo(alias="includeTotal")]
"""Include the total count of matching pull requests."""

include_stacks: Annotated[bool, PropertyInfo(alias="includeStacks")]
"""Include each open pull request's position in its stack of dependent pull requests. Public responses do not include stacks."""

repository_ids: Annotated[SequenceNotStr[str], PropertyInfo(alias="repositoryIds")]
"""Filter by repository IDs, supplied as a comma-separated list."""

Expand Down
3 changes: 3 additions & 0 deletions src/tembo/types/runtime_list_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ class ItemRunCapabilities(BaseModel):

supports_goals: bool = FieldInfo(alias="supportsGoals")

ultracode_models: List[str] = FieldInfo(alias="ultracodeModels")
"""Models that support ultracode workflow orchestration."""


class Item(BaseModel):
name: Literal["claudeCode", "codex", "opencode", "cursor", "amp", "fx", "pi"]
Expand Down
3 changes: 3 additions & 0 deletions src/tembo/types/session_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class AgentOptions(TypedDict, total=False):

goal: AgentOptionsGoal

ultracode: bool
"""Whether the agent orchestrates multi-agent workflows for every task when supported by the selected runtime and model."""


from .session_document_node_param import SessionDocumentNodeParam
from .tip_tap_document_param import TipTapDocumentParam
Expand Down
Loading
Loading