Skip to content

Commit 9605d5c

Browse files
Merge pull request #154 from kernel/release-please--branches--main--changes--next
release: 0.90.0
2 parents ef3343b + eeb74df commit 9605d5c

14 files changed

Lines changed: 160 additions & 102 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.89.0"
2+
".": "0.90.0"
33
}

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## [0.90.0](https://github.com/kernel/kernel-python-sdk/compare/v0.89.0...v0.90.0) (2026-08-12)
4+
5+
6+
### Features
7+
8+
* Preserve canonical managed auth input metadata ([3bb6956](https://github.com/kernel/kernel-python-sdk/commit/3bb6956e8021a955cfcbd12fd93d2a3a6b648ed7))
9+
* Support project selection by ID or name ([67970b2](https://github.com/kernel/kernel-python-sdk/commit/67970b2b8cc0312b81d10e6fec6c3a016c79d347))
10+
311
## [0.89.0](https://github.com/kernel/kernel-python-sdk/compare/v0.88.0...v0.89.0) (2026-08-12)
412

513

api.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,10 @@ from kernel.types import CreateProjectRequest, Project, UpdateProjectRequest
432432
Methods:
433433

434434
- <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>
435-
- <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>
436-
- <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>
435+
- <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>
436+
- <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>
437437
- <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>
438-
- <code title="delete /org/projects/{id}">client.projects.<a href="./src/kernel/resources/projects/projects.py">delete</a>(id) -> None</code>
438+
- <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>
439439

440440
## Limits
441441

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

448448
Methods:
449449

450-
- <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>
451-
- <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>
450+
- <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>
451+
- <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>
452452

453453
# Organization
454454

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "kernel"
3-
version = "0.89.0"
3+
version = "0.90.0"
44
description = "The official Python library for the kernel API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

src/kernel/_client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class Kernel(SyncAPIClient):
103103
browser_route_cache: BrowserRouteCache
104104

105105
project_id: str | None
106+
project: str | None
106107

107108
_environment: Literal["production", "development"] | NotGiven
108109
_browser_routing: BrowserRoutingConfig
@@ -112,6 +113,7 @@ def __init__(
112113
*,
113114
api_key: str | None = None,
114115
project_id: str | None = None,
116+
project: str | None = None,
115117
environment: Literal["production", "development"] | NotGiven = not_given,
116118
base_url: str | httpx.URL | None | NotGiven = not_given,
117119
timeout: float | Timeout | None | NotGiven = not_given,
@@ -147,6 +149,8 @@ def __init__(
147149

148150
self.project_id = project_id
149151

152+
self.project = project
153+
150154
self._environment = environment
151155

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

@@ -367,6 +372,7 @@ def copy(
367372
*,
368373
api_key: str | None = None,
369374
project_id: str | None = None,
375+
project: str | None = None,
370376
environment: Literal["production", "development"] | None = None,
371377
base_url: str | httpx.URL | None = None,
372378
timeout: float | Timeout | None | NotGiven = not_given,
@@ -404,6 +410,7 @@ def copy(
404410
return self.__class__(
405411
api_key=api_key or self.api_key,
406412
project_id=project_id or self.project_id,
413+
project=project or self.project,
407414
base_url=base_url or self.base_url,
408415
environment=environment or self._environment,
409416
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
@@ -459,6 +466,7 @@ class AsyncKernel(AsyncAPIClient):
459466
browser_route_cache: BrowserRouteCache
460467

461468
project_id: str | None
469+
project: str | None
462470

463471
_environment: Literal["production", "development"] | NotGiven
464472
_browser_routing: BrowserRoutingConfig
@@ -468,6 +476,7 @@ def __init__(
468476
*,
469477
api_key: str | None = None,
470478
project_id: str | None = None,
479+
project: str | None = None,
471480
environment: Literal["production", "development"] | NotGiven = not_given,
472481
base_url: str | httpx.URL | None | NotGiven = not_given,
473482
timeout: float | Timeout | None | NotGiven = not_given,
@@ -503,6 +512,8 @@ def __init__(
503512

504513
self.project_id = project_id
505514

515+
self.project = project
516+
506517
self._environment = environment
507518

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

@@ -723,6 +735,7 @@ def copy(
723735
*,
724736
api_key: str | None = None,
725737
project_id: str | None = None,
738+
project: str | None = None,
726739
environment: Literal["production", "development"] | None = None,
727740
base_url: str | httpx.URL | None = None,
728741
timeout: float | Timeout | None | NotGiven = not_given,
@@ -760,6 +773,7 @@ def copy(
760773
return self.__class__(
761774
api_key=api_key or self.api_key,
762775
project_id=project_id or self.project_id,
776+
project=project or self.project,
763777
base_url=base_url or self.base_url,
764778
environment=environment or self._environment,
765779
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,

src/kernel/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "kernel"
4-
__version__ = "0.89.0" # x-release-please-version
4+
__version__ = "0.90.0" # x-release-please-version

src/kernel/resources/projects/limits.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def with_streaming_response(self) -> LimitsResourceWithStreamingResponse:
5151

5252
def retrieve(
5353
self,
54-
id: str,
54+
id_or_name: str,
5555
*,
5656
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
5757
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -74,10 +74,10 @@ def retrieve(
7474
7575
timeout: Override the client-level default timeout for this request, in seconds
7676
"""
77-
if not id:
78-
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
77+
if not id_or_name:
78+
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
7979
return self._get(
80-
path_template("/org/projects/{id}/limits", id=id),
80+
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
8181
options=make_request_options(
8282
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
8383
),
@@ -86,7 +86,7 @@ def retrieve(
8686

8787
def update(
8888
self,
89-
id: str,
89+
id_or_name: str,
9090
*,
9191
max_concurrent_invocations: Optional[int] | Omit = omit,
9292
max_concurrent_sessions: Optional[int] | Omit = omit,
@@ -123,10 +123,10 @@ def update(
123123
124124
timeout: Override the client-level default timeout for this request, in seconds
125125
"""
126-
if not id:
127-
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
126+
if not id_or_name:
127+
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
128128
return self._patch(
129-
path_template("/org/projects/{id}/limits", id=id),
129+
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
130130
body=maybe_transform(
131131
{
132132
"max_concurrent_invocations": max_concurrent_invocations,
@@ -170,7 +170,7 @@ def with_streaming_response(self) -> AsyncLimitsResourceWithStreamingResponse:
170170

171171
async def retrieve(
172172
self,
173-
id: str,
173+
id_or_name: str,
174174
*,
175175
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
176176
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -193,10 +193,10 @@ async def retrieve(
193193
194194
timeout: Override the client-level default timeout for this request, in seconds
195195
"""
196-
if not id:
197-
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
196+
if not id_or_name:
197+
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
198198
return await self._get(
199-
path_template("/org/projects/{id}/limits", id=id),
199+
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
200200
options=make_request_options(
201201
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
202202
),
@@ -205,7 +205,7 @@ async def retrieve(
205205

206206
async def update(
207207
self,
208-
id: str,
208+
id_or_name: str,
209209
*,
210210
max_concurrent_invocations: Optional[int] | Omit = omit,
211211
max_concurrent_sessions: Optional[int] | Omit = omit,
@@ -242,10 +242,10 @@ async def update(
242242
243243
timeout: Override the client-level default timeout for this request, in seconds
244244
"""
245-
if not id:
246-
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
245+
if not id_or_name:
246+
raise ValueError(f"Expected a non-empty value for `id_or_name` but received {id_or_name!r}")
247247
return await self._patch(
248-
path_template("/org/projects/{id}/limits", id=id),
248+
path_template("/org/projects/{id_or_name}/limits", id_or_name=id_or_name),
249249
body=await async_maybe_transform(
250250
{
251251
"max_concurrent_invocations": max_concurrent_invocations,

0 commit comments

Comments
 (0)