From c5f21ecf3e1081c774ba58ad32b10e8cd5b0a94a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 24 May 2026 21:26:08 +0000 Subject: [PATCH 1/4] feat: api: dual-route /projects under /org/projects, deprecate /projects --- .stats.yml | 6 +++--- api.md | 14 +++++++------- src/kernel/resources/projects/limits.py | 8 ++++---- src/kernel/resources/projects/projects.py | 20 ++++++++++---------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6f5d31f..dbf097f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 112 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-5d96fec7a84722f300bd99db7352d6284141826f3412f6d370ac0926edf03d42.yml -openapi_spec_hash: d4e1a29ac06f9543e0ef69372eb3ff35 -config_hash: ae3dea7997fb5d36fa41979f9585ed78 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-a0ad160eb0fb11e201e240de8487c12992a474076aeed1c1167ee54ade43edfb.yml +openapi_spec_hash: 84a7075fddbe17b1446a759e8cc39047 +config_hash: 26beac3050665664d5d74d2bbfe9e808 diff --git a/api.md b/api.md index b652f86..4785c2d 100644 --- a/api.md +++ b/api.md @@ -395,11 +395,11 @@ from kernel.types import CreateProjectRequest, Project, UpdateProjectRequest Methods: -- client.projects.create(\*\*params) -> Project -- client.projects.retrieve(id) -> Project -- client.projects.update(id, \*\*params) -> Project -- client.projects.list(\*\*params) -> SyncOffsetPagination[Project] -- client.projects.delete(id) -> None +- client.projects.create(\*\*params) -> Project +- client.projects.retrieve(id) -> Project +- client.projects.update(id, \*\*params) -> Project +- client.projects.list(\*\*params) -> SyncOffsetPagination[Project] +- client.projects.delete(id) -> None ## Limits @@ -411,8 +411,8 @@ from kernel.types.projects import ProjectLimits, UpdateProjectLimitsRequest Methods: -- client.projects.limits.retrieve(id) -> ProjectLimits -- client.projects.limits.update(id, \*\*params) -> ProjectLimits +- client.projects.limits.retrieve(id) -> ProjectLimits +- client.projects.limits.update(id, \*\*params) -> ProjectLimits # CredentialProviders diff --git a/src/kernel/resources/projects/limits.py b/src/kernel/resources/projects/limits.py index 04ac314..ade9302 100644 --- a/src/kernel/resources/projects/limits.py +++ b/src/kernel/resources/projects/limits.py @@ -73,7 +73,7 @@ def retrieve( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return self._get( - path_template("/projects/{id}/limits", id=id), + path_template("/org/projects/{id}/limits", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -121,7 +121,7 @@ def update( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return self._patch( - path_template("/projects/{id}/limits", id=id), + path_template("/org/projects/{id}/limits", id=id), body=maybe_transform( { "max_concurrent_invocations": max_concurrent_invocations, @@ -187,7 +187,7 @@ async def retrieve( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return await self._get( - path_template("/projects/{id}/limits", id=id), + path_template("/org/projects/{id}/limits", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -235,7 +235,7 @@ async def update( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return await self._patch( - path_template("/projects/{id}/limits", id=id), + path_template("/org/projects/{id}/limits", id=id), body=await async_maybe_transform( { "max_concurrent_invocations": max_concurrent_invocations, diff --git a/src/kernel/resources/projects/projects.py b/src/kernel/resources/projects/projects.py index 87fae1b..ea97768 100644 --- a/src/kernel/resources/projects/projects.py +++ b/src/kernel/resources/projects/projects.py @@ -85,7 +85,7 @@ def create( timeout: Override the client-level default timeout for this request, in seconds """ return self._post( - "/projects", + "/org/projects", body=maybe_transform({"name": name}, project_create_params.ProjectCreateParams), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout @@ -119,7 +119,7 @@ def retrieve( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return self._get( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -158,7 +158,7 @@ def update( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return self._patch( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), body=maybe_transform( { "name": name, @@ -204,7 +204,7 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ return self._get_api_list( - "/projects", + "/org/projects", page=SyncOffsetPagination[Project], options=make_request_options( extra_headers=extra_headers, @@ -251,7 +251,7 @@ def delete( raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") extra_headers = {"Accept": "*/*", **(extra_headers or {})} return self._delete( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -312,7 +312,7 @@ async def create( timeout: Override the client-level default timeout for this request, in seconds """ return await self._post( - "/projects", + "/org/projects", body=await async_maybe_transform({"name": name}, project_create_params.ProjectCreateParams), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout @@ -346,7 +346,7 @@ async def retrieve( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return await self._get( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -385,7 +385,7 @@ async def update( if not id: raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return await self._patch( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), body=await async_maybe_transform( { "name": name, @@ -431,7 +431,7 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ return self._get_api_list( - "/projects", + "/org/projects", page=AsyncOffsetPagination[Project], options=make_request_options( extra_headers=extra_headers, @@ -478,7 +478,7 @@ async def delete( raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") extra_headers = {"Accept": "*/*", **(extra_headers or {})} return await self._delete( - path_template("/projects/{id}", id=id), + path_template("/org/projects/{id}", id=id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), From f48cbee40aee158615972e6f39b92179e06efbce Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 17:42:46 +0000 Subject: [PATCH 2/4] feat: Support telemetry enabled request config --- .stats.yml | 6 +-- api.md | 1 + src/kernel/resources/browsers/browsers.py | 40 +++++++++++-------- src/kernel/types/browser_create_params.py | 10 +++-- src/kernel/types/browser_update_params.py | 11 ++--- src/kernel/types/browsers/__init__.py | 4 +- .../browsers/browser_telemetry_config.py | 4 +- .../browser_telemetry_config_param.py | 16 -------- .../browser_telemetry_request_config_param.py | 28 +++++++++++++ tests/api_resources/test_browsers.py | 12 ++++-- 10 files changed, 80 insertions(+), 52 deletions(-) delete mode 100644 src/kernel/types/browsers/browser_telemetry_config_param.py create mode 100644 src/kernel/types/browsers/browser_telemetry_request_config_param.py diff --git a/.stats.yml b/.stats.yml index dbf097f..47ab7c1 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 112 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-a0ad160eb0fb11e201e240de8487c12992a474076aeed1c1167ee54ade43edfb.yml -openapi_spec_hash: 84a7075fddbe17b1446a759e8cc39047 -config_hash: 26beac3050665664d5d74d2bbfe9e808 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-e9c99662d29710f105847d461f8919e06f6aa2e43b0e1a6285d0b137643a7907.yml +openapi_spec_hash: 4415cb4790c7a5ec892f4e3521217cb4 +config_hash: 27b38657d9a3b33328be930eeb319628 diff --git a/api.md b/api.md index 4785c2d..106e3cd 100644 --- a/api.md +++ b/api.md @@ -137,6 +137,7 @@ from kernel.types.browsers import ( BrowserTelemetryCategoryConfig, BrowserTelemetryConfig, BrowserTelemetryEvent, + BrowserTelemetryRequestConfig, TelemetryStreamResponse, ) ``` diff --git a/src/kernel/resources/browsers/browsers.py b/src/kernel/resources/browsers/browsers.py index d346a70..ad8087f 100644 --- a/src/kernel/resources/browsers/browsers.py +++ b/src/kernel/resources/browsers/browsers.py @@ -99,7 +99,7 @@ from ...types.shared_params.browser_profile import BrowserProfile from ...types.shared_params.browser_viewport import BrowserViewport from ...types.shared_params.browser_extension import BrowserExtension -from ...types.browsers.browser_telemetry_config_param import BrowserTelemetryConfigParam +from ...types.browsers.browser_telemetry_request_config_param import BrowserTelemetryRequestConfigParam __all__ = ["BrowsersResource", "AsyncBrowsersResource"] @@ -173,7 +173,7 @@ def create( proxy_id: str | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, - telemetry: Optional[BrowserTelemetryConfigParam] | Omit = omit, + telemetry: Optional[BrowserTelemetryRequestConfigParam] | Omit = omit, timeout_seconds: int | Omit = omit, viewport: BrowserViewport | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -219,9 +219,11 @@ def create( stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot mechanisms. - telemetry: Telemetry configuration for the browser session. If provided, telemetry capture - starts with the specified category filter when the session is created. If - omitted, no telemetry capture is started. + 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 + category settings, or all four categories are explicitly disabled, capture is + not started. timeout_seconds: The number of seconds of inactivity before the browser session is terminated. Activity includes CDP connections and live view connections. Defaults to 60 @@ -325,7 +327,7 @@ def update( disable_default_proxy: bool | Omit = omit, profile: BrowserProfile | Omit = omit, proxy_id: Optional[str] | Omit = omit, - telemetry: Optional[BrowserTelemetryConfigParam] | Omit = omit, + telemetry: Optional[BrowserTelemetryRequestConfigParam] | Omit = omit, viewport: browser_update_params.Viewport | 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. @@ -348,9 +350,10 @@ def update( proxy. telemetry: Telemetry configuration. Omit, set to null, or set to an empty object ({}) to - leave the existing configuration unchanged (no-op). To enable capture for all - categories using VM defaults, set browser to an empty object ({"browser": {}}). - To stop capture, set every category's enabled to false. + leave the existing configuration unchanged. Set enabled to true to enable + capture using VM defaults. Set enabled to false to stop capture. Provide browser + category settings for per-category updates. Explicitly disabling all four + categories also stops capture. viewport: Viewport configuration to apply to the browser session. @@ -717,7 +720,7 @@ async def create( proxy_id: str | Omit = omit, start_url: str | Omit = omit, stealth: bool | Omit = omit, - telemetry: Optional[BrowserTelemetryConfigParam] | Omit = omit, + telemetry: Optional[BrowserTelemetryRequestConfigParam] | Omit = omit, timeout_seconds: int | Omit = omit, viewport: BrowserViewport | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -763,9 +766,11 @@ async def create( stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot mechanisms. - telemetry: Telemetry configuration for the browser session. If provided, telemetry capture - starts with the specified category filter when the session is created. If - omitted, no telemetry capture is started. + 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 + category settings, or all four categories are explicitly disabled, capture is + not started. timeout_seconds: The number of seconds of inactivity before the browser session is terminated. Activity includes CDP connections and live view connections. Defaults to 60 @@ -869,7 +874,7 @@ async def update( disable_default_proxy: bool | Omit = omit, profile: BrowserProfile | Omit = omit, proxy_id: Optional[str] | Omit = omit, - telemetry: Optional[BrowserTelemetryConfigParam] | Omit = omit, + telemetry: Optional[BrowserTelemetryRequestConfigParam] | Omit = omit, viewport: browser_update_params.Viewport | 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. @@ -892,9 +897,10 @@ async def update( proxy. telemetry: Telemetry configuration. Omit, set to null, or set to an empty object ({}) to - leave the existing configuration unchanged (no-op). To enable capture for all - categories using VM defaults, set browser to an empty object ({"browser": {}}). - To stop capture, set every category's enabled to false. + leave the existing configuration unchanged. Set enabled to true to enable + capture using VM defaults. Set enabled to false to stop capture. Provide browser + category settings for per-category updates. Explicitly disabling all four + categories also stops capture. viewport: Viewport configuration to apply to the browser session. diff --git a/src/kernel/types/browser_create_params.py b/src/kernel/types/browser_create_params.py index 1c2ed5e..82406a5 100644 --- a/src/kernel/types/browser_create_params.py +++ b/src/kernel/types/browser_create_params.py @@ -8,7 +8,7 @@ from .shared_params.browser_profile import BrowserProfile from .shared_params.browser_viewport import BrowserViewport from .shared_params.browser_extension import BrowserExtension -from .browsers.browser_telemetry_config_param import BrowserTelemetryConfigParam +from .browsers.browser_telemetry_request_config_param import BrowserTelemetryRequestConfigParam __all__ = ["BrowserCreateParams"] @@ -75,11 +75,13 @@ class BrowserCreateParams(TypedDict, total=False): mechanisms. """ - telemetry: Optional[BrowserTelemetryConfigParam] + telemetry: Optional[BrowserTelemetryRequestConfigParam] """Telemetry configuration for the browser session. - If provided, telemetry capture starts with the specified category filter when - the session is created. If omitted, no telemetry capture is started. + 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 category settings, or all four categories are + explicitly disabled, capture is not started. """ timeout_seconds: int diff --git a/src/kernel/types/browser_update_params.py b/src/kernel/types/browser_update_params.py index 297d038..c883089 100644 --- a/src/kernel/types/browser_update_params.py +++ b/src/kernel/types/browser_update_params.py @@ -7,7 +7,7 @@ from .shared_params.browser_profile import BrowserProfile from .shared_params.browser_viewport import BrowserViewport -from .browsers.browser_telemetry_config_param import BrowserTelemetryConfigParam +from .browsers.browser_telemetry_request_config_param import BrowserTelemetryRequestConfigParam __all__ = ["BrowserUpdateParams", "Viewport"] @@ -31,13 +31,14 @@ class BrowserUpdateParams(TypedDict, total=False): Omit to leave unchanged, set to empty string to remove proxy. """ - telemetry: Optional[BrowserTelemetryConfigParam] + telemetry: Optional[BrowserTelemetryRequestConfigParam] """Telemetry configuration. Omit, set to null, or set to an empty object ({}) to leave the existing - configuration unchanged (no-op). To enable capture for all categories using VM - defaults, set browser to an empty object ({"browser": {}}). To stop capture, set - every category's enabled to false. + configuration unchanged. Set enabled to true to enable capture using VM + defaults. Set enabled to false to stop capture. Provide browser category + settings for per-category updates. Explicitly disabling all four categories also + stops capture. """ viewport: Viewport diff --git a/src/kernel/types/browsers/__init__.py b/src/kernel/types/browsers/__init__.py index a3bca41..619a59c 100644 --- a/src/kernel/types/browsers/__init__.py +++ b/src/kernel/types/browsers/__init__.py @@ -57,7 +57,6 @@ from .browser_page_tab_opened_event import BrowserPageTabOpenedEvent as BrowserPageTabOpenedEvent from .f_set_file_permissions_params import FSetFilePermissionsParams as FSetFilePermissionsParams from .browser_network_response_event import BrowserNetworkResponseEvent as BrowserNetworkResponseEvent -from .browser_telemetry_config_param import BrowserTelemetryConfigParam as BrowserTelemetryConfigParam from .process_stdout_stream_response import ProcessStdoutStreamResponse as ProcessStdoutStreamResponse from .browser_interaction_click_event import BrowserInteractionClickEvent as BrowserInteractionClickEvent from .browser_page_layout_shift_event import BrowserPageLayoutShiftEvent as BrowserPageLayoutShiftEvent @@ -83,6 +82,9 @@ from .browser_monitor_reconnect_failed_event import ( BrowserMonitorReconnectFailedEvent as BrowserMonitorReconnectFailedEvent, ) +from .browser_telemetry_request_config_param import ( + BrowserTelemetryRequestConfigParam as BrowserTelemetryRequestConfigParam, +) from .browser_telemetry_category_config_param import ( BrowserTelemetryCategoryConfigParam as BrowserTelemetryCategoryConfigParam, ) diff --git a/src/kernel/types/browsers/browser_telemetry_config.py b/src/kernel/types/browsers/browser_telemetry_config.py index d4365ee..2fae7a3 100644 --- a/src/kernel/types/browsers/browser_telemetry_config.py +++ b/src/kernel/types/browsers/browser_telemetry_config.py @@ -9,7 +9,7 @@ class BrowserTelemetryConfig(BaseModel): - """Telemetry configuration for a browser session.""" + """Active telemetry configuration for a browser session.""" browser: Optional[BrowserTelemetryCategoriesConfig] = None - """Per-category enable/disable flags. If omitted, all categories are captured.""" + """Per-category enable/disable flags.""" diff --git a/src/kernel/types/browsers/browser_telemetry_config_param.py b/src/kernel/types/browsers/browser_telemetry_config_param.py deleted file mode 100644 index 3346434..0000000 --- a/src/kernel/types/browsers/browser_telemetry_config_param.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import TypedDict - -from .browser_telemetry_categories_config_param import BrowserTelemetryCategoriesConfigParam - -__all__ = ["BrowserTelemetryConfigParam"] - - -class BrowserTelemetryConfigParam(TypedDict, total=False): - """Telemetry configuration for a browser session.""" - - browser: BrowserTelemetryCategoriesConfigParam - """Per-category enable/disable flags. If omitted, all categories are captured.""" diff --git a/src/kernel/types/browsers/browser_telemetry_request_config_param.py b/src/kernel/types/browsers/browser_telemetry_request_config_param.py new file mode 100644 index 0000000..d901a74 --- /dev/null +++ b/src/kernel/types/browsers/browser_telemetry_request_config_param.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +from .browser_telemetry_categories_config_param import BrowserTelemetryCategoriesConfigParam + +__all__ = ["BrowserTelemetryRequestConfigParam"] + + +class BrowserTelemetryRequestConfigParam(TypedDict, total=False): + """Telemetry request configuration for a browser session.""" + + browser: BrowserTelemetryCategoriesConfigParam + """Per-category enable/disable flags. + + If enabled is true and browser is omitted or empty, the VM default category set + is used. Explicitly disabling all four categories stops capture on update and + starts no capture on create. + """ + + enabled: bool + """Request shortcut for browser telemetry capture. + + True enables capture using VM defaults. False stops capture on update and starts + no capture on create. Cannot be combined with browser category settings. + """ diff --git a/tests/api_resources/test_browsers.py b/tests/api_resources/test_browsers.py index 57aa89f..c845e52 100644 --- a/tests/api_resources/test_browsers.py +++ b/tests/api_resources/test_browsers.py @@ -59,7 +59,8 @@ def test_method_create_with_all_params(self, client: Kernel) -> None: "interaction": {"enabled": True}, "network": {"enabled": True}, "page": {"enabled": True}, - } + }, + "enabled": True, }, timeout_seconds=10, viewport={ @@ -169,7 +170,8 @@ def test_method_update_with_all_params(self, client: Kernel) -> None: "interaction": {"enabled": True}, "network": {"enabled": True}, "page": {"enabled": True}, - } + }, + "enabled": True, }, viewport={ "height": 800, @@ -463,7 +465,8 @@ async def test_method_create_with_all_params(self, async_client: AsyncKernel) -> "interaction": {"enabled": True}, "network": {"enabled": True}, "page": {"enabled": True}, - } + }, + "enabled": True, }, timeout_seconds=10, viewport={ @@ -573,7 +576,8 @@ async def test_method_update_with_all_params(self, async_client: AsyncKernel) -> "interaction": {"enabled": True}, "network": {"enabled": True}, "page": {"enabled": True}, - } + }, + "enabled": True, }, viewport={ "height": 800, From 805946f1d2405cba4698ad5012541edd65736337 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 17:59:58 +0000 Subject: [PATCH 3/4] release: 0.57.0 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9649399..4df91e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.57.0 (2026-05-26) + +Full Changelog: [v0.57.0...v0.57.0](https://github.com/kernel/kernel-python-sdk/compare/v0.57.0...v0.57.0) + +### Features + +* api: dual-route /projects under /org/projects, deprecate /projects ([c5f21ec](https://github.com/kernel/kernel-python-sdk/commit/c5f21ecf3e1081c774ba58ad32b10e8cd5b0a94a)) +* Support telemetry enabled request config ([f48cbee](https://github.com/kernel/kernel-python-sdk/commit/f48cbee40aee158615972e6f39b92179e06efbce)) + ## 0.57.0 (2026-05-22) Full Changelog: [v0.56.0...v0.57.0](https://github.com/kernel/kernel-python-sdk/compare/v0.56.0...v0.57.0) From 1181567c19b43dc72953aaad50898e1d70d72dc7 Mon Sep 17 00:00:00 2001 From: IlyaasK <86218345+IlyaasK@users.noreply.github.com> Date: Tue, 26 May 2026 14:12:15 -0400 Subject: [PATCH 4/4] Fix browser routing project path mock --- tests/test_browser_routing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser_routing.py b/tests/test_browser_routing.py index 810de80..ac84152 100644 --- a/tests/test_browser_routing.py +++ b/tests/test_browser_routing.py @@ -180,7 +180,7 @@ async def test_async_raw_browser_create_warms_route_cache() -> None: @respx.mock def test_only_browser_metadata_endpoints_warm_route_cache() -> None: - projects_route = respx.get(f"{base_url}/projects").mock(return_value=httpx.Response(200, json=_fake_browser())) + projects_route = respx.get(f"{base_url}/org/projects").mock(return_value=httpx.Response(200, json=_fake_browser())) with Kernel(base_url=base_url, api_key=api_key, _strict_response_validation=True) as client: response = client.projects.with_raw_response.list() with pytest.raises(ValueError, match="route cache"):