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.89.0"
".": "0.90.0"
}
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## [0.90.0](https://github.com/kernel/kernel-python-sdk/compare/v0.89.0...v0.90.0) (2026-08-12)


### Features

* Preserve canonical managed auth input metadata ([3bb6956](https://github.com/kernel/kernel-python-sdk/commit/3bb6956e8021a955cfcbd12fd93d2a3a6b648ed7))
* Support project selection by ID or name ([67970b2](https://github.com/kernel/kernel-python-sdk/commit/67970b2b8cc0312b81d10e6fec6c3a016c79d347))

## [0.89.0](https://github.com/kernel/kernel-python-sdk/compare/v0.88.0...v0.89.0) (2026-08-12)


Expand Down
10 changes: 5 additions & 5 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -432,10 +432,10 @@ from kernel.types import CreateProjectRequest, Project, UpdateProjectRequest
Methods:

- <code title="post /org/projects">client.projects.<a href="./src/kernel/resources/projects/projects.py">create</a>(\*\*<a href="src/kernel/types/project_create_params.py">params</a>) -> <a href="./src/kernel/types/project.py">Project</a></code>
- <code title="get /org/projects/{id}">client.projects.<a href="./src/kernel/resources/projects/projects.py">retrieve</a>(id) -> <a href="./src/kernel/types/project.py">Project</a></code>
- <code title="patch /org/projects/{id}">client.projects.<a href="./src/kernel/resources/projects/projects.py">update</a>(id, \*\*<a href="src/kernel/types/project_update_params.py">params</a>) -> <a href="./src/kernel/types/project.py">Project</a></code>
- <code title="get /org/projects/{id_or_name}">client.projects.<a href="./src/kernel/resources/projects/projects.py">retrieve</a>(id_or_name) -> <a href="./src/kernel/types/project.py">Project</a></code>
- <code title="patch /org/projects/{id_or_name}">client.projects.<a href="./src/kernel/resources/projects/projects.py">update</a>(id_or_name, \*\*<a href="src/kernel/types/project_update_params.py">params</a>) -> <a href="./src/kernel/types/project.py">Project</a></code>
- <code title="get /org/projects">client.projects.<a href="./src/kernel/resources/projects/projects.py">list</a>(\*\*<a href="src/kernel/types/project_list_params.py">params</a>) -> <a href="./src/kernel/types/project.py">SyncOffsetPagination[Project]</a></code>
- <code title="delete /org/projects/{id}">client.projects.<a href="./src/kernel/resources/projects/projects.py">delete</a>(id) -> None</code>
- <code title="delete /org/projects/{id_or_name}">client.projects.<a href="./src/kernel/resources/projects/projects.py">delete</a>(id_or_name) -> None</code>

## Limits

Expand All @@ -447,8 +447,8 @@ from kernel.types.projects import ProjectLimits, UpdateProjectLimitsRequest

Methods:

- <code title="get /org/projects/{id}/limits">client.projects.limits.<a href="./src/kernel/resources/projects/limits.py">retrieve</a>(id) -> <a href="./src/kernel/types/projects/project_limits.py">ProjectLimits</a></code>
- <code title="patch /org/projects/{id}/limits">client.projects.limits.<a href="./src/kernel/resources/projects/limits.py">update</a>(id, \*\*<a href="src/kernel/types/projects/limit_update_params.py">params</a>) -> <a href="./src/kernel/types/projects/project_limits.py">ProjectLimits</a></code>
- <code title="get /org/projects/{id_or_name}/limits">client.projects.limits.<a href="./src/kernel/resources/projects/limits.py">retrieve</a>(id_or_name) -> <a href="./src/kernel/types/projects/project_limits.py">ProjectLimits</a></code>
- <code title="patch /org/projects/{id_or_name}/limits">client.projects.limits.<a href="./src/kernel/resources/projects/limits.py">update</a>(id_or_name, \*\*<a href="src/kernel/types/projects/limit_update_params.py">params</a>) -> <a href="./src/kernel/types/projects/project_limits.py">ProjectLimits</a></code>

# Organization

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 = "kernel"
version = "0.89.0"
version = "0.90.0"
description = "The official Python library for the kernel API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
14 changes: 14 additions & 0 deletions src/kernel/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class Kernel(SyncAPIClient):
browser_route_cache: BrowserRouteCache

project_id: str | None
project: str | None

_environment: Literal["production", "development"] | NotGiven
_browser_routing: BrowserRoutingConfig
Expand All @@ -112,6 +113,7 @@ def __init__(
*,
api_key: str | None = None,
project_id: str | None = None,
project: str | None = None,
environment: Literal["production", "development"] | NotGiven = not_given,
base_url: str | httpx.URL | None | NotGiven = not_given,
timeout: float | Timeout | None | NotGiven = not_given,
Expand Down Expand Up @@ -147,6 +149,8 @@ def __init__(

self.project_id = project_id

self.project = project

self._environment = environment

base_url_env = os.environ.get("KERNEL_BASE_URL")
Expand Down Expand Up @@ -328,6 +332,7 @@ def default_headers(self) -> dict[str, str | Omit]:
**super().default_headers,
"X-Stainless-Async": "false",
"X-Kernel-Project-Id": self.project_id if self.project_id is not None else Omit(),
"X-Kernel-Project": self.project if self.project is not None else Omit(),
**self._custom_headers,
}

Expand Down Expand Up @@ -367,6 +372,7 @@ def copy(
*,
api_key: str | None = None,
project_id: str | None = None,
project: str | None = None,
environment: Literal["production", "development"] | None = None,
base_url: str | httpx.URL | None = None,
timeout: float | Timeout | None | NotGiven = not_given,
Expand Down Expand Up @@ -404,6 +410,7 @@ def copy(
return self.__class__(
api_key=api_key or self.api_key,
project_id=project_id or self.project_id,
project=project or self.project,
base_url=base_url or self.base_url,
environment=environment or self._environment,
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
Expand Down Expand Up @@ -459,6 +466,7 @@ class AsyncKernel(AsyncAPIClient):
browser_route_cache: BrowserRouteCache

project_id: str | None
project: str | None

_environment: Literal["production", "development"] | NotGiven
_browser_routing: BrowserRoutingConfig
Expand All @@ -468,6 +476,7 @@ def __init__(
*,
api_key: str | None = None,
project_id: str | None = None,
project: str | None = None,
environment: Literal["production", "development"] | NotGiven = not_given,
base_url: str | httpx.URL | None | NotGiven = not_given,
timeout: float | Timeout | None | NotGiven = not_given,
Expand Down Expand Up @@ -503,6 +512,8 @@ def __init__(

self.project_id = project_id

self.project = project

self._environment = environment

base_url_env = os.environ.get("KERNEL_BASE_URL")
Expand Down Expand Up @@ -684,6 +695,7 @@ def default_headers(self) -> dict[str, str | Omit]:
**super().default_headers,
"X-Stainless-Async": f"async:{get_async_library()}",
"X-Kernel-Project-Id": self.project_id if self.project_id is not None else Omit(),
"X-Kernel-Project": self.project if self.project is not None else Omit(),
**self._custom_headers,
}

Expand Down Expand Up @@ -723,6 +735,7 @@ def copy(
*,
api_key: str | None = None,
project_id: str | None = None,
project: str | None = None,
environment: Literal["production", "development"] | None = None,
base_url: str | httpx.URL | None = None,
timeout: float | Timeout | None | NotGiven = not_given,
Expand Down Expand Up @@ -760,6 +773,7 @@ def copy(
return self.__class__(
api_key=api_key or self.api_key,
project_id=project_id or self.project_id,
project=project or self.project,
base_url=base_url or self.base_url,
environment=environment or self._environment,
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
Expand Down
2 changes: 1 addition & 1 deletion src/kernel/_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__ = "kernel"
__version__ = "0.89.0" # x-release-please-version
__version__ = "0.90.0" # x-release-please-version
32 changes: 16 additions & 16 deletions src/kernel/resources/projects/limits.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def with_streaming_response(self) -> LimitsResourceWithStreamingResponse:

def retrieve(
self,
id: str,
id_or_name: 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.
Expand All @@ -74,10 +74,10 @@ def retrieve(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
if not id_or_name:
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
return self._get(
path_template("/org/projects/{id}/limits", id=id),
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
Expand All @@ -86,7 +86,7 @@ def retrieve(

def update(
self,
id: str,
id_or_name: str,
*,
max_concurrent_invocations: Optional[int] | Omit = omit,
max_concurrent_sessions: Optional[int] | Omit = omit,
Expand Down Expand Up @@ -123,10 +123,10 @@ def update(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
if not id_or_name:
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
return self._patch(
path_template("/org/projects/{id}/limits", id=id),
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
body=maybe_transform(
{
"max_concurrent_invocations": max_concurrent_invocations,
Expand Down Expand Up @@ -170,7 +170,7 @@ def with_streaming_response(self) -> AsyncLimitsResourceWithStreamingResponse:

async def retrieve(
self,
id: str,
id_or_name: 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.
Expand All @@ -193,10 +193,10 @@ async def retrieve(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
if not id_or_name:
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
return await self._get(
path_template("/org/projects/{id}/limits", id=id),
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
Expand All @@ -205,7 +205,7 @@ async def retrieve(

async def update(
self,
id: str,
id_or_name: str,
*,
max_concurrent_invocations: Optional[int] | Omit = omit,
max_concurrent_sessions: Optional[int] | Omit = omit,
Expand Down Expand Up @@ -242,10 +242,10 @@ async def update(

timeout: Override the client-level default timeout for this request, in seconds
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
if not id_or_name:
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
return await self._patch(
path_template("/org/projects/{id}/limits", id=id),
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
body=await async_maybe_transform(
{
"max_concurrent_invocations": max_concurrent_invocations,
Expand Down
Loading
Loading