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.62.0"
".": "0.63.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 117
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-e6c711f0d29a7d956cc8ca621440da966c1f1575b1205d01328b1099edf1c517.yml
openapi_spec_hash: c06e7e36de1c6f9b29b54a6e3dc08ee5
config_hash: 36159c262d293fbeacf513ab600a1729
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-8f84f4214a8024d8ea62ee639eeaf2fa26900fabe23c8b87accb41d529a0bf4f.yml
openapi_spec_hash: db14f415438b3d338d9376bddc83a5cf
config_hash: 590bf8cb85948cf1e63b7b5ef60686c8
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

## 0.63.0 (2026-06-05)

Full Changelog: [v0.62.0...v0.63.0](https://github.com/kernel/kernel-python-sdk/compare/v0.62.0...v0.63.0)

### Features

* **api:** allow setting a custom name on a browser session at create time ([0dea358](https://github.com/kernel/kernel-python-sdk/commit/0dea35847a9559c86038774966bae28911c0a044))
* **api:** allow setting key-value tags on a browser session at create time ([f9ca7c1](https://github.com/kernel/kernel-python-sdk/commit/f9ca7c19aa71326c97b14d723dfd79840e3e8dd7))


### Documentation

* **api:** use neutral example for browser session name field ([01b15f6](https://github.com/kernel/kernel-python-sdk/commit/01b15f602a4c21ab4e757bf46ed2d4c1481c14ce))

## 0.62.0 (2026-06-04)

Full Changelog: [v0.61.0...v0.62.0](https://github.com/kernel/kernel-python-sdk/compare/v0.61.0...v0.62.0)
Expand Down
1 change: 1 addition & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ from kernel.types import (
BrowserPoolRef,
BrowserUsage,
Profile,
Tags,
BrowserCreateResponse,
BrowserRetrieveResponse,
BrowserUpdateResponse,
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.62.0"
version = "0.63.0"
description = "The official Python library for the kernel API"
dynamic = ["readme"]
license = "Apache-2.0"
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.62.0" # x-release-please-version
__version__ = "0.63.0" # x-release-please-version
39 changes: 37 additions & 2 deletions src/kernel/resources/browsers/browsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
)
from ...pagination import SyncOffsetPagination, AsyncOffsetPagination
from ..._base_client import AsyncPaginator, make_request_options
from ...types.tags_param import TagsParam
from ...types.browser_curl_response import BrowserCurlResponse
from ...types.browser_list_response import BrowserListResponse
from ...lib.browser_routing.raw_http import (
Expand Down Expand Up @@ -169,10 +170,12 @@ def create(
headless: bool | Omit = omit,
invocation_id: str | Omit = omit,
kiosk_mode: bool | Omit = omit,
name: str | Omit = omit,
profile: BrowserProfile | Omit = omit,
proxy_id: str | Omit = omit,
start_url: str | Omit = omit,
stealth: bool | Omit = omit,
tags: TagsParam | Omit = omit,
telemetry: Optional[browser_create_params.Telemetry] | Omit = omit,
timeout_seconds: int | Omit = omit,
viewport: BrowserViewport | Omit = omit,
Expand Down Expand Up @@ -205,6 +208,10 @@ def create(
kiosk_mode: If true, launches the browser in kiosk mode to hide address bar and tabs in live
view.

name: Optional human-readable name for the browser session, used to find it later in
the dashboard. Must be unique among active sessions within the project. Set at
creation time only.

profile: Profile selection for the browser session. Provide either id or name. If
specified, the matching profile will be loaded into the browser session.
Profiles must be created beforehand.
Expand All @@ -219,6 +226,9 @@ def create(
stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot
mechanisms.

tags: Optional user-defined key-value tags for the browser session, used to find and
group sessions later. Set at creation time only. Up to 50 pairs.

telemetry: Telemetry configuration for the browser session. Set enabled to true to start
capture using VM defaults, or provide browser category settings. If omitted,
null, set to an empty object ({}), set to enabled: false without browser
Expand Down Expand Up @@ -262,10 +272,12 @@ def create(
"headless": headless,
"invocation_id": invocation_id,
"kiosk_mode": kiosk_mode,
"name": name,
"profile": profile,
"proxy_id": proxy_id,
"start_url": start_url,
"stealth": stealth,
"tags": tags,
"telemetry": telemetry,
"timeout_seconds": timeout_seconds,
"viewport": viewport,
Expand Down Expand Up @@ -393,6 +405,7 @@ def list(
offset: int | Omit = omit,
query: str | 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.
# 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 @@ -413,11 +426,15 @@ def list(

offset: Number of results to skip. Defaults to 0.

query: Search browsers by session ID, profile ID, proxy ID, or pool name.
query: Search browsers by name, session ID, profile ID, proxy ID, or pool name.

status: Filter sessions by status. "active" returns only active sessions (default),
"deleted" returns only soft-deleted sessions, "all" returns both.

tags: Filter sessions by tag key-value pairs using deepObject style, e.g.
?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
match every supplied pair exactly.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -441,6 +458,7 @@ def list(
"offset": offset,
"query": query,
"status": status,
"tags": tags,
},
browser_list_params.BrowserListParams,
),
Expand Down Expand Up @@ -717,10 +735,12 @@ async def create(
headless: bool | Omit = omit,
invocation_id: str | Omit = omit,
kiosk_mode: bool | Omit = omit,
name: str | Omit = omit,
profile: BrowserProfile | Omit = omit,
proxy_id: str | Omit = omit,
start_url: str | Omit = omit,
stealth: bool | Omit = omit,
tags: TagsParam | Omit = omit,
telemetry: Optional[browser_create_params.Telemetry] | Omit = omit,
timeout_seconds: int | Omit = omit,
viewport: BrowserViewport | Omit = omit,
Expand Down Expand Up @@ -753,6 +773,10 @@ async def create(
kiosk_mode: If true, launches the browser in kiosk mode to hide address bar and tabs in live
view.

name: Optional human-readable name for the browser session, used to find it later in
the dashboard. Must be unique among active sessions within the project. Set at
creation time only.

profile: Profile selection for the browser session. Provide either id or name. If
specified, the matching profile will be loaded into the browser session.
Profiles must be created beforehand.
Expand All @@ -767,6 +791,9 @@ async def create(
stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot
mechanisms.

tags: Optional user-defined key-value tags for the browser session, used to find and
group sessions later. Set at creation time only. Up to 50 pairs.

telemetry: Telemetry configuration for the browser session. Set enabled to true to start
capture using VM defaults, or provide browser category settings. If omitted,
null, set to an empty object ({}), set to enabled: false without browser
Expand Down Expand Up @@ -810,10 +837,12 @@ async def create(
"headless": headless,
"invocation_id": invocation_id,
"kiosk_mode": kiosk_mode,
"name": name,
"profile": profile,
"proxy_id": proxy_id,
"start_url": start_url,
"stealth": stealth,
"tags": tags,
"telemetry": telemetry,
"timeout_seconds": timeout_seconds,
"viewport": viewport,
Expand Down Expand Up @@ -941,6 +970,7 @@ def list(
offset: int | Omit = omit,
query: str | 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.
# 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 @@ -961,11 +991,15 @@ def list(

offset: Number of results to skip. Defaults to 0.

query: Search browsers by session ID, profile ID, proxy ID, or pool name.
query: Search browsers by name, session ID, profile ID, proxy ID, or pool name.

status: Filter sessions by status. "active" returns only active sessions (default),
"deleted" returns only soft-deleted sessions, "all" returns both.

tags: Filter sessions by tag key-value pairs using deepObject style, e.g.
?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
match every supplied pair exactly.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -989,6 +1023,7 @@ def list(
"offset": offset,
"query": query,
"status": status,
"tags": tags,
},
browser_list_params.BrowserListParams,
),
Expand Down
2 changes: 2 additions & 0 deletions src/kernel/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from . import browsers
from .. import _compat
from .tags import Tags as Tags
from .shared import (
LogEvent as LogEvent,
AppAction as AppAction,
Expand All @@ -19,6 +20,7 @@
from .profile import Profile as Profile
from .project import Project as Project
from .credential import Credential as Credential
from .tags_param import TagsParam as TagsParam
from .browser_pool import BrowserPool as BrowserPool
from .browser_usage import BrowserUsage as BrowserUsage
from .app_list_params import AppListParams as AppListParams
Expand Down
14 changes: 14 additions & 0 deletions src/kernel/types/browser_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from typing import Dict, Iterable, Optional
from typing_extensions import TypedDict

from .tags_param import TagsParam
from .shared_params.browser_profile import BrowserProfile
from .shared_params.browser_viewport import BrowserViewport
from .shared_params.browser_extension import BrowserExtension
Expand Down Expand Up @@ -49,6 +50,13 @@ class BrowserCreateParams(TypedDict, total=False):
view.
"""

name: str
"""
Optional human-readable name for the browser session, used to find it later in
the dashboard. Must be unique among active sessions within the project. Set at
creation time only.
"""

profile: BrowserProfile
"""Profile selection for the browser session.

Expand All @@ -75,6 +83,12 @@ class BrowserCreateParams(TypedDict, total=False):
mechanisms.
"""

tags: TagsParam
"""
Optional user-defined key-value tags for the browser session, used to find and
group sessions later. Set at creation time only. Up to 50 pairs.
"""

telemetry: Optional[Telemetry]
"""Telemetry configuration for the browser session.

Expand Down
10 changes: 10 additions & 0 deletions src/kernel/types/browser_create_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Dict, Optional
from datetime import datetime

from .tags import Tags
from .profile import Profile
from .._models import BaseModel
from .browser_usage import BrowserUsage
Expand Down Expand Up @@ -63,6 +64,9 @@ class BrowserCreateResponse(BaseModel):
kiosk_mode: Optional[bool] = None
"""Whether the browser session is running in kiosk mode."""

name: Optional[str] = None
"""Human-readable name of the browser session, if one was set at creation."""

pool: Optional[BrowserPoolRef] = None
"""Browser pool this session was acquired from, if any."""

Expand All @@ -81,6 +85,12 @@ class BrowserCreateResponse(BaseModel):
browser actually loaded.
"""

tags: Optional[Tags] = None
"""User-defined key-value tags that were set on this browser session, if any.

Echoed back when present.
"""

telemetry: Optional[BrowserTelemetryConfig] = None
"""Active telemetry configuration for the session, if any."""

Expand Down
10 changes: 9 additions & 1 deletion src/kernel/types/browser_list_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from __future__ import annotations

from typing import Dict
from typing_extensions import Literal, TypedDict

__all__ = ["BrowserListParams"]
Expand All @@ -22,11 +23,18 @@ class BrowserListParams(TypedDict, total=False):
"""Number of results to skip. Defaults to 0."""

query: str
"""Search browsers by session ID, profile ID, proxy ID, or pool name."""
"""Search browsers by name, session ID, profile ID, proxy ID, or pool name."""

status: Literal["active", "deleted", "all"]
"""Filter sessions by status.

"active" returns only active sessions (default), "deleted" returns only
soft-deleted sessions, "all" returns both.
"""

tags: Dict[str, str]
"""Filter sessions by tag key-value pairs using deepObject style, e.g.

?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
match every supplied pair exactly.
"""
10 changes: 10 additions & 0 deletions src/kernel/types/browser_list_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Dict, Optional
from datetime import datetime

from .tags import Tags
from .profile import Profile
from .._models import BaseModel
from .browser_usage import BrowserUsage
Expand Down Expand Up @@ -63,6 +64,9 @@ class BrowserListResponse(BaseModel):
kiosk_mode: Optional[bool] = None
"""Whether the browser session is running in kiosk mode."""

name: Optional[str] = None
"""Human-readable name of the browser session, if one was set at creation."""

pool: Optional[BrowserPoolRef] = None
"""Browser pool this session was acquired from, if any."""

Expand All @@ -81,6 +85,12 @@ class BrowserListResponse(BaseModel):
browser actually loaded.
"""

tags: Optional[Tags] = None
"""User-defined key-value tags that were set on this browser session, if any.

Echoed back when present.
"""

telemetry: Optional[BrowserTelemetryConfig] = None
"""Active telemetry configuration for the session, if any."""

Expand Down
10 changes: 10 additions & 0 deletions src/kernel/types/browser_pool_acquire_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Dict, Optional
from datetime import datetime

from .tags import Tags
from .profile import Profile
from .._models import BaseModel
from .browser_usage import BrowserUsage
Expand Down Expand Up @@ -63,6 +64,9 @@ class BrowserPoolAcquireResponse(BaseModel):
kiosk_mode: Optional[bool] = None
"""Whether the browser session is running in kiosk mode."""

name: Optional[str] = None
"""Human-readable name of the browser session, if one was set at creation."""

pool: Optional[BrowserPoolRef] = None
"""Browser pool this session was acquired from, if any."""

Expand All @@ -81,6 +85,12 @@ class BrowserPoolAcquireResponse(BaseModel):
browser actually loaded.
"""

tags: Optional[Tags] = None
"""User-defined key-value tags that were set on this browser session, if any.

Echoed back when present.
"""

telemetry: Optional[BrowserTelemetryConfig] = None
"""Active telemetry configuration for the session, if any."""

Expand Down
Loading
Loading