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.26.0"
".": "0.27.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 91
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-fc2c80b398a8dd511010ae7cda5e21c353e388ee130aa288974b47af4208b5b8.yml
openapi_spec_hash: 5e06586dbbb9fce12b907f4e32497006
config_hash: cc7fdd701d995d4b3456d77041c604cf
configured_endpoints: 97
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-7427d4bcaba5cad07910da7a222bdd2650b5280e6b889132ed38d230adafb8a5.yml
openapi_spec_hash: e8e3dc1ae54666d544d1fc848b25e7cf
config_hash: b470456b217bb9502f5212311d395a6f
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 0.27.0 (2026-01-21)

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

### Features

* **agent-auth:** add 1Password integration for credential providers ([b26d1a3](https://github.com/kernel/kernel-python-sdk/commit/b26d1a35dce7e8b76d916d7bbd869edb0c44c195))
* **dashboard:** add browser replays support for past browsers ([9d81781](https://github.com/kernel/kernel-python-sdk/commit/9d81781970ed6230844d479bc27893453b34a05e))
* Update browser pool org limits ([7fa6d9b](https://github.com/kernel/kernel-python-sdk/commit/7fa6d9b152e051ed7cbadb9b5760a525fdf1f3b2))


### Refactors

* **agentauth:** enhance discover and submit modules with improve… ([570df3a](https://github.com/kernel/kernel-python-sdk/commit/570df3a0cc4b4e48737729442885959e9bf205ba))

## 0.26.0 (2026-01-17)

Full Changelog: [v0.25.0...v0.26.0](https://github.com/kernel/kernel-python-sdk/compare/v0.25.0...v0.26.0)
Expand Down
25 changes: 24 additions & 1 deletion api.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ from kernel.types import (
Methods:

- <code title="post /browsers">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">create</a>(\*\*<a href="src/kernel/types/browser_create_params.py">params</a>) -> <a href="./src/kernel/types/browser_create_response.py">BrowserCreateResponse</a></code>
- <code title="get /browsers/{id}">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">retrieve</a>(id) -> <a href="./src/kernel/types/browser_retrieve_response.py">BrowserRetrieveResponse</a></code>
- <code title="get /browsers/{id}">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">retrieve</a>(id, \*\*<a href="src/kernel/types/browser_retrieve_params.py">params</a>) -> <a href="./src/kernel/types/browser_retrieve_response.py">BrowserRetrieveResponse</a></code>
- <code title="patch /browsers/{id}">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">update</a>(id, \*\*<a href="src/kernel/types/browser_update_params.py">params</a>) -> <a href="./src/kernel/types/browser_update_response.py">BrowserUpdateResponse</a></code>
- <code title="get /browsers">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">list</a>(\*\*<a href="src/kernel/types/browser_list_params.py">params</a>) -> <a href="./src/kernel/types/browser_list_response.py">SyncOffsetPagination[BrowserListResponse]</a></code>
- <code title="delete /browsers">client.browsers.<a href="./src/kernel/resources/browsers/browsers.py">delete</a>(\*\*<a href="src/kernel/types/browser_delete_params.py">params</a>) -> None</code>
Expand Down Expand Up @@ -344,3 +344,26 @@ Methods:
- <code title="get /credentials">client.credentials.<a href="./src/kernel/resources/credentials.py">list</a>(\*\*<a href="src/kernel/types/credential_list_params.py">params</a>) -> <a href="./src/kernel/types/credential.py">SyncOffsetPagination[Credential]</a></code>
- <code title="delete /credentials/{id_or_name}">client.credentials.<a href="./src/kernel/resources/credentials.py">delete</a>(id_or_name) -> None</code>
- <code title="get /credentials/{id_or_name}/totp-code">client.credentials.<a href="./src/kernel/resources/credentials.py">totp_code</a>(id_or_name) -> <a href="./src/kernel/types/credential_totp_code_response.py">CredentialTotpCodeResponse</a></code>

# CredentialProviders

Types:

```python
from kernel.types import (
CreateCredentialProviderRequest,
CredentialProvider,
CredentialProviderTestResult,
UpdateCredentialProviderRequest,
CredentialProviderListResponse,
)
```

Methods:

- <code title="post /org/credential-providers">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">create</a>(\*\*<a href="src/kernel/types/credential_provider_create_params.py">params</a>) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
- <code title="get /org/credential-providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">retrieve</a>(id) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
- <code title="patch /org/credential-providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">update</a>(id, \*\*<a href="src/kernel/types/credential_provider_update_params.py">params</a>) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
- <code title="get /org/credential-providers">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">list</a>() -> <a href="./src/kernel/types/credential_provider_list_response.py">CredentialProviderListResponse</a></code>
- <code title="delete /org/credential-providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">delete</a>(id) -> None</code>
- <code title="post /org/credential-providers/{id}/test">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">test</a>(id) -> <a href="./src/kernel/types/credential_provider_test_result.py">CredentialProviderTestResult</a></code>
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.26.0"
version = "0.27.0"
description = "The official Python library for the kernel API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
38 changes: 38 additions & 0 deletions src/kernel/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
deployments,
invocations,
browser_pools,
credential_providers,
)
from .resources.apps import AppsResource, AsyncAppsResource
from .resources.proxies import ProxiesResource, AsyncProxiesResource
Expand All @@ -53,6 +54,7 @@
from .resources.agents.agents import AgentsResource, AsyncAgentsResource
from .resources.browser_pools import BrowserPoolsResource, AsyncBrowserPoolsResource
from .resources.browsers.browsers import BrowsersResource, AsyncBrowsersResource
from .resources.credential_providers import CredentialProvidersResource, AsyncCredentialProvidersResource

__all__ = [
"ENVIRONMENTS",
Expand Down Expand Up @@ -211,6 +213,12 @@ def credentials(self) -> CredentialsResource:

return CredentialsResource(self)

@cached_property
def credential_providers(self) -> CredentialProvidersResource:
from .resources.credential_providers import CredentialProvidersResource

return CredentialProvidersResource(self)

@cached_property
def with_raw_response(self) -> KernelWithRawResponse:
return KernelWithRawResponse(self)
Expand Down Expand Up @@ -465,6 +473,12 @@ def credentials(self) -> AsyncCredentialsResource:

return AsyncCredentialsResource(self)

@cached_property
def credential_providers(self) -> AsyncCredentialProvidersResource:
from .resources.credential_providers import AsyncCredentialProvidersResource

return AsyncCredentialProvidersResource(self)

@cached_property
def with_raw_response(self) -> AsyncKernelWithRawResponse:
return AsyncKernelWithRawResponse(self)
Expand Down Expand Up @@ -646,6 +660,12 @@ def credentials(self) -> credentials.CredentialsResourceWithRawResponse:

return CredentialsResourceWithRawResponse(self._client.credentials)

@cached_property
def credential_providers(self) -> credential_providers.CredentialProvidersResourceWithRawResponse:
from .resources.credential_providers import CredentialProvidersResourceWithRawResponse

return CredentialProvidersResourceWithRawResponse(self._client.credential_providers)


class AsyncKernelWithRawResponse:
_client: AsyncKernel
Expand Down Expand Up @@ -713,6 +733,12 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithRawResponse:

return AsyncCredentialsResourceWithRawResponse(self._client.credentials)

@cached_property
def credential_providers(self) -> credential_providers.AsyncCredentialProvidersResourceWithRawResponse:
from .resources.credential_providers import AsyncCredentialProvidersResourceWithRawResponse

return AsyncCredentialProvidersResourceWithRawResponse(self._client.credential_providers)


class KernelWithStreamedResponse:
_client: Kernel
Expand Down Expand Up @@ -780,6 +806,12 @@ def credentials(self) -> credentials.CredentialsResourceWithStreamingResponse:

return CredentialsResourceWithStreamingResponse(self._client.credentials)

@cached_property
def credential_providers(self) -> credential_providers.CredentialProvidersResourceWithStreamingResponse:
from .resources.credential_providers import CredentialProvidersResourceWithStreamingResponse

return CredentialProvidersResourceWithStreamingResponse(self._client.credential_providers)


class AsyncKernelWithStreamedResponse:
_client: AsyncKernel
Expand Down Expand Up @@ -847,6 +879,12 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithStreamingRespon

return AsyncCredentialsResourceWithStreamingResponse(self._client.credentials)

@cached_property
def credential_providers(self) -> credential_providers.AsyncCredentialProvidersResourceWithStreamingResponse:
from .resources.credential_providers import AsyncCredentialProvidersResourceWithStreamingResponse

return AsyncCredentialProvidersResourceWithStreamingResponse(self._client.credential_providers)


Client = Kernel

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.26.0" # x-release-please-version
__version__ = "0.27.0" # x-release-please-version
14 changes: 14 additions & 0 deletions src/kernel/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,14 @@
BrowserPoolsResourceWithStreamingResponse,
AsyncBrowserPoolsResourceWithStreamingResponse,
)
from .credential_providers import (
CredentialProvidersResource,
AsyncCredentialProvidersResource,
CredentialProvidersResourceWithRawResponse,
AsyncCredentialProvidersResourceWithRawResponse,
CredentialProvidersResourceWithStreamingResponse,
AsyncCredentialProvidersResourceWithStreamingResponse,
)

__all__ = [
"DeploymentsResource",
Expand Down Expand Up @@ -142,4 +150,10 @@
"AsyncCredentialsResourceWithRawResponse",
"CredentialsResourceWithStreamingResponse",
"AsyncCredentialsResourceWithStreamingResponse",
"CredentialProvidersResource",
"AsyncCredentialProvidersResource",
"CredentialProvidersResourceWithRawResponse",
"AsyncCredentialProvidersResourceWithRawResponse",
"CredentialProvidersResourceWithStreamingResponse",
"AsyncCredentialProvidersResourceWithStreamingResponse",
]
16 changes: 12 additions & 4 deletions src/kernel/resources/browser_pools.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ def create(
Create a new browser pool with the specified configuration and size.

Args:
size: Number of browsers to create in the pool
size: Number of browsers to maintain in the pool. The maximum size is determined by
your organization's pooled sessions limit (the sum of all pool sizes cannot
exceed your limit).

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

Expand Down Expand Up @@ -206,7 +208,9 @@ def update(
Updates the configuration used to create browsers in the pool.

Args:
size: Number of browsers to create in the pool
size: Number of browsers to maintain in the pool. The maximum size is determined by
your organization's pooled sessions limit (the sum of all pool sizes cannot
exceed your limit).

discard_all_idle: Whether to discard all idle browsers and rebuild the pool immediately. Defaults
to false.
Expand Down Expand Up @@ -513,7 +517,9 @@ async def create(
Create a new browser pool with the specified configuration and size.

Args:
size: Number of browsers to create in the pool
size: Number of browsers to maintain in the pool. The maximum size is determined by
your organization's pooled sessions limit (the sum of all pool sizes cannot
exceed your limit).

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

Expand Down Expand Up @@ -640,7 +646,9 @@ async def update(
Updates the configuration used to create browsers in the pool.

Args:
size: Number of browsers to create in the pool
size: Number of browsers to maintain in the pool. The maximum size is determined by
your organization's pooled sessions limit (the sum of all pool sizes cannot
exceed your limit).

discard_all_idle: Whether to discard all idle browsers and rebuild the pool immediately. Defaults
to false.
Expand Down
Loading