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

## [0.137.0](https://github.com/kernel/kernel-python-sdk/compare/v0.136.0...v0.137.0) (2026-10-29)


### Features

* Add request-only fingerprint beta contract ([bca5a05](https://github.com/kernel/kernel-python-sdk/commit/bca5a056f486104f3a9f145c65b78df29a104898))
* Read Shop Pay card status one read at a time and report outcome details ([888e8a2](https://github.com/kernel/kernel-python-sdk/commit/888e8a2d2a64e672941c2c420a0726115727ef42))
* Remove the projects_enabled flag from the API ([bfb22ed](https://github.com/kernel/kernel-python-sdk/commit/bfb22ed009fa5cbe81781ad6fb3d81023571b643))
* route browser REPL and WebMCP calls directly to browser VMs ([1974522](https://github.com/kernel/kernel-python-sdk/commit/1974522e499d2dd7a3cf39713229ef9dd9f70d34))
* Route Evervault alias payment windows through per-window upstreams ([845e6c6](https://github.com/kernel/kernel-python-sdk/commit/845e6c6219be1ec937179236359909aff4137eaf))
* Wire Shop Pay into the vault API ([e5e6b25](https://github.com/kernel/kernel-python-sdk/commit/e5e6b2541b1360a42fbad61acdfd58d5767fa409))

## [0.136.0](https://github.com/kernel/kernel-python-sdk/compare/v0.135.0...v0.136.0) (2026-10-28)


Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,9 @@ from kernel import Kernel
client = Kernel()

browser = client.browsers.create(
location={},
fingerprint={"os": "macos"},
)
print(browser.location)
print(browser.fingerprint)
```

## File uploads
Expand Down
5 changes: 5 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ Types:
```python
from kernel.types import (
BrowserAllowlistState,
BrowserFingerprint,
BrowserLocation,
BrowserLocationRequest,
BrowserLocationSource,
Expand Down Expand Up @@ -634,6 +635,10 @@ from kernel.types.vaults import (
RemovePaymentMethodVaultItemOperationRequest,
RemovePaymentMethodVaultItemOperationResult,
RestartVerificationVaultItemOperationRequest,
ShopPayCardState,
ShopPayCardVaultItemSpec,
ShopPayWalletState,
ShopPayWalletVaultItemSpec,
VaultCardAliases,
VaultCardFillField,
VaultCheckoutContext,
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.136.0"
version = "0.137.0"
description = "The official Python library for the kernel API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
36 changes: 6 additions & 30 deletions src/kernel/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,11 +316,7 @@ def credentials(self) -> CredentialsResource:

@cached_property
def projects(self) -> ProjectsResource:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import ProjectsResource

return ProjectsResource(self)
Expand Down Expand Up @@ -729,11 +725,7 @@ def credentials(self) -> AsyncCredentialsResource:

@cached_property
def projects(self) -> AsyncProjectsResource:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import AsyncProjectsResource

return AsyncProjectsResource(self)
Expand Down Expand Up @@ -1042,11 +1034,7 @@ def credentials(self) -> credentials.CredentialsResourceWithRawResponse:

@cached_property
def projects(self) -> projects.ProjectsResourceWithRawResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import ProjectsResourceWithRawResponse

return ProjectsResourceWithRawResponse(self._client.projects)
Expand Down Expand Up @@ -1187,11 +1175,7 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithRawResponse:

@cached_property
def projects(self) -> projects.AsyncProjectsResourceWithRawResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import AsyncProjectsResourceWithRawResponse

return AsyncProjectsResourceWithRawResponse(self._client.projects)
Expand Down Expand Up @@ -1332,11 +1316,7 @@ def credentials(self) -> credentials.CredentialsResourceWithStreamingResponse:

@cached_property
def projects(self) -> projects.ProjectsResourceWithStreamingResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import ProjectsResourceWithStreamingResponse

return ProjectsResourceWithStreamingResponse(self._client.projects)
Expand Down Expand Up @@ -1477,11 +1457,7 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithStreamingRespon

@cached_property
def projects(self) -> projects.AsyncProjectsResourceWithStreamingResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
from .resources.projects import AsyncProjectsResourceWithStreamingResponse

return AsyncProjectsResourceWithStreamingResponse(self._client.projects)
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.136.0" # x-release-please-version
__version__ = "0.137.0" # x-release-please-version
2 changes: 2 additions & 0 deletions src/kernel/lib/browser_routing/routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ def browser_routing_config_from_env() -> BrowserRoutingConfig:
"process",
"fs",
"logs/stream",
"repl",
"webmcp",
)
)
if raw.strip() == "":
Expand Down
15 changes: 15 additions & 0 deletions src/kernel/resources/browsers/browsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@
from ...types.browser_memory_request import BrowserMemoryRequest
from ...types.browser_create_response import BrowserCreateResponse
from ...types.browser_update_response import BrowserUpdateResponse
from ...types.browser_fingerprint_param import BrowserFingerprintParam
from ...types.browser_retrieve_response import BrowserRetrieveResponse
from ...types.browser_proxy_config_param import BrowserProxyConfigParam
from ...types.browser_network_config_param import BrowserNetworkConfigParam
Expand Down Expand Up @@ -195,6 +196,7 @@ def create(
*,
chrome_policy: Dict[str, object] | Omit = omit,
extensions: Iterable[BrowserExtension] | Omit = omit,
fingerprint: BrowserFingerprintParam | Omit = omit,
gpu: bool | Omit = omit,
headless: bool | Omit = omit,
invocation_id: str | Omit = omit,
Expand Down Expand Up @@ -234,6 +236,11 @@ def create(

extensions: List of browser extensions to load into the session. Provide each by id or name.

fingerprint: Closed beta: contact Kernel to enable fingerprint overrides for your
organization. Overrides browser attributes presented to websites for this
session. Currently supports macos and requires stealth=true, headless=false,
gpu=false, and default memory. Omit to preserve the default browser behavior.

gpu: If true, enables GPU acceleration for the browser session. Requires Start-Up or
Enterprise plan, headless=false, and region=us-east.

Expand Down Expand Up @@ -340,6 +347,7 @@ def create(
{
"chrome_policy": chrome_policy,
"extensions": extensions,
"fingerprint": fingerprint,
"gpu": gpu,
"headless": headless,
"invocation_id": invocation_id,
Expand Down Expand Up @@ -1049,6 +1057,7 @@ async def create(
*,
chrome_policy: Dict[str, object] | Omit = omit,
extensions: Iterable[BrowserExtension] | Omit = omit,
fingerprint: BrowserFingerprintParam | Omit = omit,
gpu: bool | Omit = omit,
headless: bool | Omit = omit,
invocation_id: str | Omit = omit,
Expand Down Expand Up @@ -1088,6 +1097,11 @@ async def create(

extensions: List of browser extensions to load into the session. Provide each by id or name.

fingerprint: Closed beta: contact Kernel to enable fingerprint overrides for your
organization. Overrides browser attributes presented to websites for this
session. Currently supports macos and requires stealth=true, headless=false,
gpu=false, and default memory. Omit to preserve the default browser behavior.

gpu: If true, enables GPU acceleration for the browser session. Requires Start-Up or
Enterprise plan, headless=false, and region=us-east.

Expand Down Expand Up @@ -1194,6 +1208,7 @@ async def create(
{
"chrome_policy": chrome_policy,
"extensions": extensions,
"fingerprint": fingerprint,
"gpu": gpu,
"headless": headless,
"invocation_id": invocation_id,
Expand Down
12 changes: 2 additions & 10 deletions src/kernel/resources/projects/limits.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,7 @@


class LimitsResource(SyncAPIResource):
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""

@cached_property
def with_raw_response(self) -> LimitsResourceWithRawResponse:
Expand Down Expand Up @@ -150,11 +146,7 @@ def update(


class AsyncLimitsResource(AsyncAPIResource):
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""

@cached_property
def with_raw_response(self) -> AsyncLimitsResourceWithRawResponse:
Expand Down
48 changes: 8 additions & 40 deletions src/kernel/resources/projects/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,11 @@


class ProjectsResource(SyncAPIResource):
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""

@cached_property
def limits(self) -> LimitsResource:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return LimitsResource(self._client)

@cached_property
Expand Down Expand Up @@ -295,19 +287,11 @@ def delete(


class AsyncProjectsResource(AsyncAPIResource):
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""

@cached_property
def limits(self) -> AsyncLimitsResource:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return AsyncLimitsResource(self._client)

@cached_property
Expand Down Expand Up @@ -578,11 +562,7 @@ def __init__(self, projects: ProjectsResource) -> None:

@cached_property
def limits(self) -> LimitsResourceWithRawResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return LimitsResourceWithRawResponse(self._projects.limits)


Expand All @@ -608,11 +588,7 @@ def __init__(self, projects: AsyncProjectsResource) -> None:

@cached_property
def limits(self) -> AsyncLimitsResourceWithRawResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return AsyncLimitsResourceWithRawResponse(self._projects.limits)


Expand All @@ -638,11 +614,7 @@ def __init__(self, projects: ProjectsResource) -> None:

@cached_property
def limits(self) -> LimitsResourceWithStreamingResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return LimitsResourceWithStreamingResponse(self._projects.limits)


Expand All @@ -668,9 +640,5 @@ def __init__(self, projects: AsyncProjectsResource) -> None:

@cached_property
def limits(self) -> AsyncLimitsResourceWithStreamingResponse:
"""
Create and manage projects for resource isolation within an organization.
When projects are disabled for the organization, project operations return
`404` with code `projects_disabled`.
"""
"""Create and manage projects for resource isolation within an organization."""
return AsyncLimitsResourceWithStreamingResponse(self._projects.limits)
Loading
Loading