diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 47dd76c1..ad502a4b 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.84.0" + ".": "0.85.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 748759e3..e1475cae 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 127 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-904fd6fd50970ea07ec05c51b1ae0819ffb64cbf0921fff9daed6792b64f1dc9.yml -openapi_spec_hash: cbd6626bdac7beaa768abb346e03fb74 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-7b03462454d6fa8390eaebc1b411d3e160501bf96abb93b75d38dfc382d4ce51.yml +openapi_spec_hash: ba55400aafb4759cc06ec139fe528dfc config_hash: 77ee715aa17061166f9a02b264a21b8d diff --git a/CHANGELOG.md b/CHANGELOG.md index 53b7644d..fc63ed28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.85.0 (2026-07-29) + +Full Changelog: [v0.84.0...v0.85.0](https://github.com/kernel/kernel-python-sdk/compare/v0.84.0...v0.85.0) + +### Features + +* Add encrypted per-proxy CA bundle for BYO MITM proxies ([c3f4571](https://github.com/kernel/kernel-python-sdk/commit/c3f4571357f66bc38352169f603da1256ea5b152)) +* Stabilize project lifecycle error codes ([5102f24](https://github.com/kernel/kernel-python-sdk/commit/5102f24f2583e0bfa8b21539cb822a65451b3df8)) + ## 0.84.0 (2026-07-27) Full Changelog: [v0.83.0...v0.84.0](https://github.com/kernel/kernel-python-sdk/compare/v0.83.0...v0.84.0) diff --git a/pyproject.toml b/pyproject.toml index 8b7dbfbb..237d3ac1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.84.0" +version = "0.85.0" description = "The official Python library for the kernel API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/kernel/_client.py b/src/kernel/_client.py index 0238b203..64c7136b 100644 --- a/src/kernel/_client.py +++ b/src/kernel/_client.py @@ -266,7 +266,11 @@ def credentials(self) -> CredentialsResource: @cached_property def projects(self) -> ProjectsResource: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import ProjectsResource return ProjectsResource(self) @@ -618,7 +622,11 @@ def credentials(self) -> AsyncCredentialsResource: @cached_property def projects(self) -> AsyncProjectsResource: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import AsyncProjectsResource return AsyncProjectsResource(self) @@ -878,7 +886,11 @@ def credentials(self) -> credentials.CredentialsResourceWithRawResponse: @cached_property def projects(self) -> projects.ProjectsResourceWithRawResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import ProjectsResourceWithRawResponse return ProjectsResourceWithRawResponse(self._client.projects) @@ -988,7 +1000,11 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithRawResponse: @cached_property def projects(self) -> projects.AsyncProjectsResourceWithRawResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import AsyncProjectsResourceWithRawResponse return AsyncProjectsResourceWithRawResponse(self._client.projects) @@ -1098,7 +1114,11 @@ def credentials(self) -> credentials.CredentialsResourceWithStreamingResponse: @cached_property def projects(self) -> projects.ProjectsResourceWithStreamingResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import ProjectsResourceWithStreamingResponse return ProjectsResourceWithStreamingResponse(self._client.projects) @@ -1208,7 +1228,11 @@ def credentials(self) -> credentials.AsyncCredentialsResourceWithStreamingRespon @cached_property def projects(self) -> projects.AsyncProjectsResourceWithStreamingResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ from .resources.projects import AsyncProjectsResourceWithStreamingResponse return AsyncProjectsResourceWithStreamingResponse(self._client.projects) diff --git a/src/kernel/_version.py b/src/kernel/_version.py index c6ab69f7..e7464986 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.84.0" # x-release-please-version +__version__ = "0.85.0" # x-release-please-version diff --git a/src/kernel/resources/projects/limits.py b/src/kernel/resources/projects/limits.py index 1e05711f..f8447024 100644 --- a/src/kernel/resources/projects/limits.py +++ b/src/kernel/resources/projects/limits.py @@ -24,7 +24,11 @@ class LimitsResource(SyncAPIResource): - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ @cached_property def with_raw_response(self) -> LimitsResourceWithRawResponse: @@ -140,7 +144,11 @@ def update( class AsyncLimitsResource(AsyncAPIResource): - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ @cached_property def with_raw_response(self) -> AsyncLimitsResourceWithRawResponse: diff --git a/src/kernel/resources/projects/projects.py b/src/kernel/resources/projects/projects.py index ca3d6189..2c3d3569 100644 --- a/src/kernel/resources/projects/projects.py +++ b/src/kernel/resources/projects/projects.py @@ -33,11 +33,19 @@ class ProjectsResource(SyncAPIResource): - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ @cached_property def limits(self) -> LimitsResource: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return LimitsResource(self._client) @cached_property @@ -266,11 +274,19 @@ def delete( class AsyncProjectsResource(AsyncAPIResource): - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ @cached_property def limits(self) -> AsyncLimitsResource: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return AsyncLimitsResource(self._client) @cached_property @@ -520,7 +536,11 @@ def __init__(self, projects: ProjectsResource) -> None: @cached_property def limits(self) -> LimitsResourceWithRawResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return LimitsResourceWithRawResponse(self._projects.limits) @@ -546,7 +566,11 @@ def __init__(self, projects: AsyncProjectsResource) -> None: @cached_property def limits(self) -> AsyncLimitsResourceWithRawResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return AsyncLimitsResourceWithRawResponse(self._projects.limits) @@ -572,7 +596,11 @@ def __init__(self, projects: ProjectsResource) -> None: @cached_property def limits(self) -> LimitsResourceWithStreamingResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return LimitsResourceWithStreamingResponse(self._projects.limits) @@ -598,5 +626,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None: @cached_property def limits(self) -> AsyncLimitsResourceWithStreamingResponse: - """Create and manage projects for resource isolation within an organization.""" + """ + 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`. + """ return AsyncLimitsResourceWithStreamingResponse(self._projects.limits) diff --git a/src/kernel/types/proxy_check_response.py b/src/kernel/types/proxy_check_response.py index f3cdab80..49833d66 100644 --- a/src/kernel/types/proxy_check_response.py +++ b/src/kernel/types/proxy_check_response.py @@ -78,6 +78,9 @@ class ConfigCustomProxyConfig(BaseModel): port: int """Proxy port.""" + has_ca_bundle: Optional[bool] = None + """Whether the proxy has a custom CA bundle configured.""" + has_password: Optional[bool] = None """Whether the proxy has a password.""" diff --git a/src/kernel/types/proxy_create_params.py b/src/kernel/types/proxy_create_params.py index 331bd776..7069d9b1 100644 --- a/src/kernel/types/proxy_create_params.py +++ b/src/kernel/types/proxy_create_params.py @@ -100,6 +100,13 @@ class ConfigCreateCustomProxyConfig(TypedDict, total=False): port: Required[int] """Proxy port.""" + ca_bundle: str + """PEM-encoded CA certificate bundle the proxy re-signs upstream TLS with. + + Provide when the proxy terminates TLS (MITM) so the browser trusts its + certificates. May contain multiple concatenated certificates. + """ + password: str """Password for proxy authentication.""" diff --git a/src/kernel/types/proxy_create_response.py b/src/kernel/types/proxy_create_response.py index d71656c8..eeddcc3a 100644 --- a/src/kernel/types/proxy_create_response.py +++ b/src/kernel/types/proxy_create_response.py @@ -78,6 +78,9 @@ class ConfigCustomProxyConfig(BaseModel): port: int """Proxy port.""" + has_ca_bundle: Optional[bool] = None + """Whether the proxy has a custom CA bundle configured.""" + has_password: Optional[bool] = None """Whether the proxy has a password.""" diff --git a/src/kernel/types/proxy_list_response.py b/src/kernel/types/proxy_list_response.py index 6d40a8a4..878ad7f2 100644 --- a/src/kernel/types/proxy_list_response.py +++ b/src/kernel/types/proxy_list_response.py @@ -78,6 +78,9 @@ class ConfigCustomProxyConfig(BaseModel): port: int """Proxy port.""" + has_ca_bundle: Optional[bool] = None + """Whether the proxy has a custom CA bundle configured.""" + has_password: Optional[bool] = None """Whether the proxy has a password.""" diff --git a/src/kernel/types/proxy_retrieve_response.py b/src/kernel/types/proxy_retrieve_response.py index 77d113e5..f2eb1487 100644 --- a/src/kernel/types/proxy_retrieve_response.py +++ b/src/kernel/types/proxy_retrieve_response.py @@ -78,6 +78,9 @@ class ConfigCustomProxyConfig(BaseModel): port: int """Proxy port.""" + has_ca_bundle: Optional[bool] = None + """Whether the proxy has a custom CA bundle configured.""" + has_password: Optional[bool] = None """Whether the proxy has a password.""" diff --git a/src/kernel/types/proxy_update_response.py b/src/kernel/types/proxy_update_response.py index d90c3013..bae95bba 100644 --- a/src/kernel/types/proxy_update_response.py +++ b/src/kernel/types/proxy_update_response.py @@ -78,6 +78,9 @@ class ConfigCustomProxyConfig(BaseModel): port: int """Proxy port.""" + has_ca_bundle: Optional[bool] = None + """Whether the proxy has a custom CA bundle configured.""" + has_password: Optional[bool] = None """Whether the proxy has a password."""