diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 91393ed8..2292ca70 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.94.0" + ".": "0.95.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ccd152aa..6416998e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.95.0](https://github.com/kernel/kernel-python-sdk/compare/v0.94.0...v0.95.0) (2026-08-26) + + +### Features + +* Add OTLP destination delivery health storage ([516cbce](https://github.com/kernel/kernel-python-sdk/commit/516cbce77afab43b346d9e95df2e4a25757c474b)) +* route process calls directly to browser VMs ([f833c55](https://github.com/kernel/kernel-python-sdk/commit/f833c55fee9e7c33c444af6366890a9c876e149c)) + ## [0.94.0](https://github.com/kernel/kernel-python-sdk/compare/v0.93.0...v0.94.0) (2026-08-24) diff --git a/pyproject.toml b/pyproject.toml index 420e8de4..d7125601 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.94.0" +version = "0.95.0" description = "The official Python library for the kernel API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/kernel/_version.py b/src/kernel/_version.py index 54fa859a..258c1cb0 100644 --- a/src/kernel/_version.py +++ b/src/kernel/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "kernel" -__version__ = "0.94.0" # x-release-please-version +__version__ = "0.95.0" # x-release-please-version diff --git a/src/kernel/resources/auth/connections.py b/src/kernel/resources/auth/connections.py index ccc3d890..62858fdd 100644 --- a/src/kernel/resources/auth/connections.py +++ b/src/kernel/resources/auth/connections.py @@ -95,8 +95,10 @@ def create( profile_name: Name of the profile to manage authentication for. If the profile does not exist, it is created automatically. - allowed_domains: Additional domains valid for this auth flow (besides the primary domain). Useful - when login pages redirect to different domains. + allowed_domains: Additional hostname roots valid for this auth flow, besides the primary domain. + Each value allows credential entry on that exact hostname and its subdomains. + Leading `www.` and `*.` labels are normalized away. When omitted or empty, + credential entry is unrestricted. The following SSO/OAuth provider domains are automatically allowed by default and do not need to be specified: @@ -254,7 +256,10 @@ def update( updated. Args: - allowed_domains: Additional domains valid for this auth flow (replaces existing list) + allowed_domains: Additional hostname roots valid for this auth flow. Each value allows credential + entry on that exact hostname and its subdomains; leading `www.` and `*.` labels + are normalized away. An empty list leaves credential entry unrestricted. + Replaces the existing list. auto_reauth: Whether automatic re-authentication is permitted for this connection. This is an opt-in flag only — it does not check whether re-auth is actually feasible. Even @@ -713,8 +718,10 @@ async def create( profile_name: Name of the profile to manage authentication for. If the profile does not exist, it is created automatically. - allowed_domains: Additional domains valid for this auth flow (besides the primary domain). Useful - when login pages redirect to different domains. + allowed_domains: Additional hostname roots valid for this auth flow, besides the primary domain. + Each value allows credential entry on that exact hostname and its subdomains. + Leading `www.` and `*.` labels are normalized away. When omitted or empty, + credential entry is unrestricted. The following SSO/OAuth provider domains are automatically allowed by default and do not need to be specified: @@ -872,7 +879,10 @@ async def update( updated. Args: - allowed_domains: Additional domains valid for this auth flow (replaces existing list) + allowed_domains: Additional hostname roots valid for this auth flow. Each value allows credential + entry on that exact hostname and its subdomains; leading `www.` and `*.` labels + are normalized away. An empty list leaves credential entry unrestricted. + Replaces the existing list. auto_reauth: Whether automatic re-authentication is permitted for this connection. This is an opt-in flag only — it does not check whether re-auth is actually feasible. Even diff --git a/src/kernel/resources/browser_pools.py b/src/kernel/resources/browser_pools.py index 99bda961..5351d638 100644 --- a/src/kernel/resources/browser_pools.py +++ b/src/kernel/resources/browser_pools.py @@ -73,7 +73,7 @@ def create( profile: browser_pool_create_params.Profile | Omit = omit, proxy_id: str | Omit = omit, refresh_on_profile_update: bool | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, telemetry: Optional[browser_pool_create_params.Telemetry] | Omit = omit, @@ -406,7 +406,7 @@ def list( name: str | Omit = omit, offset: int | Omit = omit, query: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | 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, @@ -703,7 +703,7 @@ async def create( profile: browser_pool_create_params.Profile | Omit = omit, proxy_id: str | Omit = omit, refresh_on_profile_update: bool | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, telemetry: Optional[browser_pool_create_params.Telemetry] | Omit = omit, @@ -1036,7 +1036,7 @@ def list( name: str | Omit = omit, offset: int | Omit = omit, query: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | 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, diff --git a/src/kernel/resources/browsers/browsers.py b/src/kernel/resources/browsers/browsers.py index 0a15061a..920a65cf 100644 --- a/src/kernel/resources/browsers/browsers.py +++ b/src/kernel/resources/browsers/browsers.py @@ -182,7 +182,7 @@ def create( profile: BrowserProfile | Omit = omit, proxy: BrowserProxyConfigParam | Omit = omit, proxy_id: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, tags: TagsParam | Omit = omit, @@ -459,7 +459,7 @@ def list( limit: int | Omit = omit, offset: int | Omit = omit, query: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, status: Literal["active", "deleted", "all"] | Omit = omit, tags: Dict[str, str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -694,8 +694,8 @@ def load_extensions( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> None: """ - Loads one or more unpacked extensions and restarts Chromium on the browser - instance. + Loads one or more unpacked extensions using live CDP activation when eligible. + Chromium restarts when enterprise policy requires it or live activation fails. Args: extensions: List of extensions to upload and activate @@ -802,7 +802,7 @@ async def create( profile: BrowserProfile | Omit = omit, proxy: BrowserProxyConfigParam | Omit = omit, proxy_id: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, tags: TagsParam | Omit = omit, @@ -1079,7 +1079,7 @@ def list( limit: int | Omit = omit, offset: int | Omit = omit, query: str | Omit = omit, - region: Literal["us-east", "eu-west"] | Omit = omit, + region: Literal["us-east", "eu-west", "ap-southeast"] | Omit = omit, status: Literal["active", "deleted", "all"] | Omit = omit, tags: Dict[str, str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1314,8 +1314,8 @@ async def load_extensions( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> None: """ - Loads one or more unpacked extensions and restarts Chromium on the browser - instance. + Loads one or more unpacked extensions using live CDP activation when eligible. + Chromium restarts when enterprise policy requires it or live activation fails. Args: extensions: List of extensions to upload and activate diff --git a/src/kernel/types/auth/connection_create_params.py b/src/kernel/types/auth/connection_create_params.py index 54995d37..0ea02cbd 100644 --- a/src/kernel/types/auth/connection_create_params.py +++ b/src/kernel/types/auth/connection_create_params.py @@ -31,9 +31,11 @@ class ConnectionCreateParams(TypedDict, total=False): """ allowed_domains: SequenceNotStr[str] - """Additional domains valid for this auth flow (besides the primary domain). + """Additional hostname roots valid for this auth flow, besides the primary domain. - Useful when login pages redirect to different domains. + Each value allows credential entry on that exact hostname and its subdomains. + Leading `www.` and `*.` labels are normalized away. When omitted or empty, + credential entry is unrestricted. The following SSO/OAuth provider domains are automatically allowed by default and do not need to be specified: diff --git a/src/kernel/types/auth/connection_update_params.py b/src/kernel/types/auth/connection_update_params.py index 829cf489..21977396 100644 --- a/src/kernel/types/auth/connection_update_params.py +++ b/src/kernel/types/auth/connection_update_params.py @@ -22,7 +22,12 @@ class ConnectionUpdateParams(TypedDict, total=False): allowed_domains: SequenceNotStr[str] - """Additional domains valid for this auth flow (replaces existing list)""" + """Additional hostname roots valid for this auth flow. + + Each value allows credential entry on that exact hostname and its subdomains; + leading `www.` and `*.` labels are normalized away. An empty list leaves + credential entry unrestricted. Replaces the existing list. + """ auto_reauth: bool """Whether automatic re-authentication is permitted for this connection. diff --git a/src/kernel/types/auth/managed_auth.py b/src/kernel/types/auth/managed_auth.py index 7c4ba7d6..7c4f9668 100644 --- a/src/kernel/types/auth/managed_auth.py +++ b/src/kernel/types/auth/managed_auth.py @@ -309,9 +309,11 @@ class ManagedAuth(BaseModel): """Current authentication status of the managed profile""" allowed_domains: Optional[List[str]] = None - """ - Additional domains that are valid for this auth flow (besides the primary - domain). Useful when login pages redirect to different domains. + """Additional hostname roots valid for this auth flow, besides the primary domain. + + Each value allows credential entry on that exact hostname and its subdomains. + Leading `www.` and `*.` labels are normalized away. When omitted or empty, + credential entry is unrestricted. The following SSO/OAuth provider domains are automatically allowed by default and do not need to be specified: diff --git a/src/kernel/types/browser_create_params.py b/src/kernel/types/browser_create_params.py index 85e0b9bd..da890722 100644 --- a/src/kernel/types/browser_create_params.py +++ b/src/kernel/types/browser_create_params.py @@ -101,7 +101,7 @@ class BrowserCreateParams(TypedDict, total=False): favor of proxy. """ - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region for the browser session. It is fixed once the session is created. Region selection requires a Start-Up or diff --git a/src/kernel/types/browser_create_response.py b/src/kernel/types/browser_create_response.py index dcc96f43..e5f63b6c 100644 --- a/src/kernel/types/browser_create_response.py +++ b/src/kernel/types/browser_create_response.py @@ -31,7 +31,7 @@ class BrowserCreateResponse(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str diff --git a/src/kernel/types/browser_list_params.py b/src/kernel/types/browser_list_params.py index 8b829a8d..eb5b91dc 100644 --- a/src/kernel/types/browser_list_params.py +++ b/src/kernel/types/browser_list_params.py @@ -27,7 +27,7 @@ class BrowserListParams(TypedDict, total=False): Search browsers by name, session ID, profile name or ID, proxy ID, or pool name. """ - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Filter sessions by geographic region. Omit to list sessions in all regions.""" status: Literal["active", "deleted", "all"] diff --git a/src/kernel/types/browser_list_response.py b/src/kernel/types/browser_list_response.py index 0ef81b9a..da294a61 100644 --- a/src/kernel/types/browser_list_response.py +++ b/src/kernel/types/browser_list_response.py @@ -31,7 +31,7 @@ class BrowserListResponse(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str diff --git a/src/kernel/types/browser_pool.py b/src/kernel/types/browser_pool.py index 4504fc5d..68f96450 100644 --- a/src/kernel/types/browser_pool.py +++ b/src/kernel/types/browser_pool.py @@ -174,7 +174,7 @@ class BrowserPool(BaseModel): (echoed as sent on create). """ - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser pool. Fixed once the pool is created.""" name: Optional[str] = None diff --git a/src/kernel/types/browser_pool_acquire_response.py b/src/kernel/types/browser_pool_acquire_response.py index d9638105..755f5838 100644 --- a/src/kernel/types/browser_pool_acquire_response.py +++ b/src/kernel/types/browser_pool_acquire_response.py @@ -31,7 +31,7 @@ class BrowserPoolAcquireResponse(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str diff --git a/src/kernel/types/browser_pool_create_params.py b/src/kernel/types/browser_pool_create_params.py index 3a736fbc..33cff052 100644 --- a/src/kernel/types/browser_pool_create_params.py +++ b/src/kernel/types/browser_pool_create_params.py @@ -87,7 +87,7 @@ class BrowserPoolCreateParams(TypedDict, total=False): creation, this defaults to true. Requires a profile to be set on the pool. """ - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region for the browser pool. It is fixed once the pool is created. Region selection requires a Start-Up or diff --git a/src/kernel/types/browser_pool_list_params.py b/src/kernel/types/browser_pool_list_params.py index 36f2f8ca..7d7a268c 100644 --- a/src/kernel/types/browser_pool_list_params.py +++ b/src/kernel/types/browser_pool_list_params.py @@ -28,5 +28,5 @@ class BrowserPoolListParams(TypedDict, total=False): IDs match by exact value. """ - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Filter pools by geographic region. Omit to list pools in all regions.""" diff --git a/src/kernel/types/browser_retrieve_response.py b/src/kernel/types/browser_retrieve_response.py index 8292024b..332585ca 100644 --- a/src/kernel/types/browser_retrieve_response.py +++ b/src/kernel/types/browser_retrieve_response.py @@ -31,7 +31,7 @@ class BrowserRetrieveResponse(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str diff --git a/src/kernel/types/browser_update_response.py b/src/kernel/types/browser_update_response.py index 7dd7de88..7af24aee 100644 --- a/src/kernel/types/browser_update_response.py +++ b/src/kernel/types/browser_update_response.py @@ -31,7 +31,7 @@ class BrowserUpdateResponse(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str diff --git a/src/kernel/types/invocation_list_browsers_response.py b/src/kernel/types/invocation_list_browsers_response.py index db32954d..e31194b8 100644 --- a/src/kernel/types/invocation_list_browsers_response.py +++ b/src/kernel/types/invocation_list_browsers_response.py @@ -31,7 +31,7 @@ class Browser(BaseModel): memory: BrowserMemory """Memory allocated to the browser session.""" - region: Literal["us-east", "eu-west"] + region: Literal["us-east", "eu-west", "ap-southeast"] """Geographic region of the browser session. Fixed once the session is created.""" session_id: str