From 8c0ce1c1533a538483419f4da0937a6153eb5273 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 20:48:05 +0000 Subject: [PATCH 1/4] feat: Support Byteful mobile proxies --- .stats.yml | 4 +- src/kernel/types/proxy_check_response.py | 77 +-------------------- src/kernel/types/proxy_create_params.py | 75 +------------------- src/kernel/types/proxy_create_response.py | 77 +-------------------- src/kernel/types/proxy_list_response.py | 77 +-------------------- src/kernel/types/proxy_retrieve_response.py | 77 +-------------------- 6 files changed, 12 insertions(+), 375 deletions(-) diff --git a/.stats.yml b/.stats.yml index 3cfc09d4..834590a5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 117 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-3b34d85c005a4058ac1faaea092615af577d12cee6e420f102de57339251672d.yml -openapi_spec_hash: fad386b8e8712e6639ed9689e9dfc070 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-a32ac633a8f67f3844b6ccb7b97687aec2cf2e2c611df4157c223dfac16db806.yml +openapi_spec_hash: f8c9aabe60372f28ad9cceed42009274 config_hash: 0f222358f24700d1811c5d27078a3849 diff --git a/src/kernel/types/proxy_check_response.py b/src/kernel/types/proxy_check_response.py index c26d665d..f3cdab80 100644 --- a/src/kernel/types/proxy_check_response.py +++ b/src/kernel/types/proxy_check_response.py @@ -59,87 +59,14 @@ class ConfigResidentialProxyConfig(BaseModel): class ConfigMobileProxyConfig(BaseModel): """Configuration for mobile proxies.""" - asn: Optional[str] = None - """Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html""" - - carrier: Optional[ - Literal[ - "a1", - "aircel", - "airtel", - "att", - "celcom", - "chinamobile", - "claro", - "comcast", - "cox", - "digi", - "dt", - "docomo", - "dtac", - "etisalat", - "idea", - "kyivstar", - "meo", - "megafon", - "mtn", - "mtnza", - "mts", - "optus", - "orange", - "qwest", - "reliance_jio", - "robi", - "sprint", - "telefonica", - "telstra", - "tmobile", - "tigo", - "tim", - "verizon", - "vimpelcom", - "vodacomza", - "vodafone", - "vivo", - "zain", - "vivabo", - "telenormyanmar", - "kcelljsc", - "swisscom", - "singtel", - "asiacell", - "windit", - "cellc", - "ooredoo", - "drei", - "umobile", - "cableone", - "proximus", - "tele2", - "mobitel", - "o2", - "bouygues", - "free", - "sfr", - "digicel", - ] - ] = None - """Mobile carrier.""" - city: Optional[str] = None - """City name (no spaces, e.g. - - `sanfrancisco`). If provided, `country` must also be provided. - """ + """Provider city alias. Mobile carrier routing can make observed geo vary.""" country: Optional[str] = None """ISO 3166 country code""" state: Optional[str] = None - """Two-letter state code.""" - - zip: Optional[str] = None - """US ZIP code.""" + """US-only state code. Mobile carrier routing can make observed geo vary.""" class ConfigCustomProxyConfig(BaseModel): diff --git a/src/kernel/types/proxy_create_params.py b/src/kernel/types/proxy_create_params.py index 175b95ff..331bd776 100644 --- a/src/kernel/types/proxy_create_params.py +++ b/src/kernel/types/proxy_create_params.py @@ -81,85 +81,14 @@ class ConfigResidentialProxyConfig(TypedDict, total=False): class ConfigMobileProxyConfig(TypedDict, total=False): """Configuration for mobile proxies.""" - asn: str - """Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html""" - - carrier: Literal[ - "a1", - "aircel", - "airtel", - "att", - "celcom", - "chinamobile", - "claro", - "comcast", - "cox", - "digi", - "dt", - "docomo", - "dtac", - "etisalat", - "idea", - "kyivstar", - "meo", - "megafon", - "mtn", - "mtnza", - "mts", - "optus", - "orange", - "qwest", - "reliance_jio", - "robi", - "sprint", - "telefonica", - "telstra", - "tmobile", - "tigo", - "tim", - "verizon", - "vimpelcom", - "vodacomza", - "vodafone", - "vivo", - "zain", - "vivabo", - "telenormyanmar", - "kcelljsc", - "swisscom", - "singtel", - "asiacell", - "windit", - "cellc", - "ooredoo", - "drei", - "umobile", - "cableone", - "proximus", - "tele2", - "mobitel", - "o2", - "bouygues", - "free", - "sfr", - "digicel", - ] - """Mobile carrier.""" - city: str - """City name (no spaces, e.g. - - `sanfrancisco`). If provided, `country` must also be provided. - """ + """Provider city alias. Mobile carrier routing can make observed geo vary.""" country: str """ISO 3166 country code""" state: str - """Two-letter state code.""" - - zip: str - """US ZIP code.""" + """US-only state code. Mobile carrier routing can make observed geo vary.""" class ConfigCreateCustomProxyConfig(TypedDict, total=False): diff --git a/src/kernel/types/proxy_create_response.py b/src/kernel/types/proxy_create_response.py index d317662f..d71656c8 100644 --- a/src/kernel/types/proxy_create_response.py +++ b/src/kernel/types/proxy_create_response.py @@ -59,87 +59,14 @@ class ConfigResidentialProxyConfig(BaseModel): class ConfigMobileProxyConfig(BaseModel): """Configuration for mobile proxies.""" - asn: Optional[str] = None - """Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html""" - - carrier: Optional[ - Literal[ - "a1", - "aircel", - "airtel", - "att", - "celcom", - "chinamobile", - "claro", - "comcast", - "cox", - "digi", - "dt", - "docomo", - "dtac", - "etisalat", - "idea", - "kyivstar", - "meo", - "megafon", - "mtn", - "mtnza", - "mts", - "optus", - "orange", - "qwest", - "reliance_jio", - "robi", - "sprint", - "telefonica", - "telstra", - "tmobile", - "tigo", - "tim", - "verizon", - "vimpelcom", - "vodacomza", - "vodafone", - "vivo", - "zain", - "vivabo", - "telenormyanmar", - "kcelljsc", - "swisscom", - "singtel", - "asiacell", - "windit", - "cellc", - "ooredoo", - "drei", - "umobile", - "cableone", - "proximus", - "tele2", - "mobitel", - "o2", - "bouygues", - "free", - "sfr", - "digicel", - ] - ] = None - """Mobile carrier.""" - city: Optional[str] = None - """City name (no spaces, e.g. - - `sanfrancisco`). If provided, `country` must also be provided. - """ + """Provider city alias. Mobile carrier routing can make observed geo vary.""" country: Optional[str] = None """ISO 3166 country code""" state: Optional[str] = None - """Two-letter state code.""" - - zip: Optional[str] = None - """US ZIP code.""" + """US-only state code. Mobile carrier routing can make observed geo vary.""" class ConfigCustomProxyConfig(BaseModel): diff --git a/src/kernel/types/proxy_list_response.py b/src/kernel/types/proxy_list_response.py index bbbe17c7..d1ddc079 100644 --- a/src/kernel/types/proxy_list_response.py +++ b/src/kernel/types/proxy_list_response.py @@ -60,87 +60,14 @@ class ProxyListResponseItemConfigResidentialProxyConfig(BaseModel): class ProxyListResponseItemConfigMobileProxyConfig(BaseModel): """Configuration for mobile proxies.""" - asn: Optional[str] = None - """Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html""" - - carrier: Optional[ - Literal[ - "a1", - "aircel", - "airtel", - "att", - "celcom", - "chinamobile", - "claro", - "comcast", - "cox", - "digi", - "dt", - "docomo", - "dtac", - "etisalat", - "idea", - "kyivstar", - "meo", - "megafon", - "mtn", - "mtnza", - "mts", - "optus", - "orange", - "qwest", - "reliance_jio", - "robi", - "sprint", - "telefonica", - "telstra", - "tmobile", - "tigo", - "tim", - "verizon", - "vimpelcom", - "vodacomza", - "vodafone", - "vivo", - "zain", - "vivabo", - "telenormyanmar", - "kcelljsc", - "swisscom", - "singtel", - "asiacell", - "windit", - "cellc", - "ooredoo", - "drei", - "umobile", - "cableone", - "proximus", - "tele2", - "mobitel", - "o2", - "bouygues", - "free", - "sfr", - "digicel", - ] - ] = None - """Mobile carrier.""" - city: Optional[str] = None - """City name (no spaces, e.g. - - `sanfrancisco`). If provided, `country` must also be provided. - """ + """Provider city alias. Mobile carrier routing can make observed geo vary.""" country: Optional[str] = None """ISO 3166 country code""" state: Optional[str] = None - """Two-letter state code.""" - - zip: Optional[str] = None - """US ZIP code.""" + """US-only state code. Mobile carrier routing can make observed geo vary.""" class ProxyListResponseItemConfigCustomProxyConfig(BaseModel): diff --git a/src/kernel/types/proxy_retrieve_response.py b/src/kernel/types/proxy_retrieve_response.py index 6b0b1bbe..77d113e5 100644 --- a/src/kernel/types/proxy_retrieve_response.py +++ b/src/kernel/types/proxy_retrieve_response.py @@ -59,87 +59,14 @@ class ConfigResidentialProxyConfig(BaseModel): class ConfigMobileProxyConfig(BaseModel): """Configuration for mobile proxies.""" - asn: Optional[str] = None - """Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html""" - - carrier: Optional[ - Literal[ - "a1", - "aircel", - "airtel", - "att", - "celcom", - "chinamobile", - "claro", - "comcast", - "cox", - "digi", - "dt", - "docomo", - "dtac", - "etisalat", - "idea", - "kyivstar", - "meo", - "megafon", - "mtn", - "mtnza", - "mts", - "optus", - "orange", - "qwest", - "reliance_jio", - "robi", - "sprint", - "telefonica", - "telstra", - "tmobile", - "tigo", - "tim", - "verizon", - "vimpelcom", - "vodacomza", - "vodafone", - "vivo", - "zain", - "vivabo", - "telenormyanmar", - "kcelljsc", - "swisscom", - "singtel", - "asiacell", - "windit", - "cellc", - "ooredoo", - "drei", - "umobile", - "cableone", - "proximus", - "tele2", - "mobitel", - "o2", - "bouygues", - "free", - "sfr", - "digicel", - ] - ] = None - """Mobile carrier.""" - city: Optional[str] = None - """City name (no spaces, e.g. - - `sanfrancisco`). If provided, `country` must also be provided. - """ + """Provider city alias. Mobile carrier routing can make observed geo vary.""" country: Optional[str] = None """ISO 3166 country code""" state: Optional[str] = None - """Two-letter state code.""" - - zip: Optional[str] = None - """US ZIP code.""" + """US-only state code. Mobile carrier routing can make observed geo vary.""" class ConfigCustomProxyConfig(BaseModel): From 140eada5369eef70cedf56522cfcf9524f3d4062 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 16:18:51 +0000 Subject: [PATCH 2/4] codegen metadata --- .stats.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index 834590a5..190a6ab6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 117 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-a32ac633a8f67f3844b6ccb7b97687aec2cf2e2c611df4157c223dfac16db806.yml -openapi_spec_hash: f8c9aabe60372f28ad9cceed42009274 -config_hash: 0f222358f24700d1811c5d27078a3849 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-04da2c2ed5f83c54f59f6c148abcf013cc37282fde2b3b5b263dffab927d5ba2.yml +openapi_spec_hash: 9b05d6877797e55051a83222fa7652d0 +config_hash: e0741f8035aea13f71e54e0fdb88eaa4 From 06a2f7babbc8f6ea31e46f3dfeb8d09dbaae88f0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 17:40:24 +0000 Subject: [PATCH 3/4] feat: api: surface category field on browser telemetry events --- .stats.yml | 4 ++-- src/kernel/types/browsers/browser_console_error_event.py | 2 ++ src/kernel/types/browsers/browser_console_log_event.py | 2 ++ src/kernel/types/browsers/browser_interaction_click_event.py | 2 ++ src/kernel/types/browsers/browser_interaction_key_event.py | 2 ++ .../browsers/browser_interaction_scroll_settled_event.py | 2 ++ .../types/browsers/browser_monitor_disconnected_event.py | 2 ++ .../types/browsers/browser_monitor_init_failed_event.py | 2 ++ .../types/browsers/browser_monitor_reconnect_failed_event.py | 2 ++ .../types/browsers/browser_monitor_reconnected_event.py | 2 ++ src/kernel/types/browsers/browser_monitor_screenshot_event.py | 2 ++ src/kernel/types/browsers/browser_network_idle_event.py | 2 ++ .../types/browsers/browser_network_loading_failed_event.py | 2 ++ src/kernel/types/browsers/browser_network_request_event.py | 2 ++ src/kernel/types/browsers/browser_network_response_event.py | 2 ++ .../types/browsers/browser_page_dom_content_loaded_event.py | 2 ++ .../types/browsers/browser_page_layout_settled_event.py | 2 ++ src/kernel/types/browsers/browser_page_layout_shift_event.py | 2 ++ src/kernel/types/browsers/browser_page_lcp_event.py | 2 ++ src/kernel/types/browsers/browser_page_load_event.py | 2 ++ src/kernel/types/browsers/browser_page_navigation_event.py | 2 ++ .../types/browsers/browser_page_navigation_settled_event.py | 2 ++ src/kernel/types/browsers/browser_page_tab_opened_event.py | 2 ++ 23 files changed, 46 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 190a6ab6..f41061ca 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 117 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-04da2c2ed5f83c54f59f6c148abcf013cc37282fde2b3b5b263dffab927d5ba2.yml -openapi_spec_hash: 9b05d6877797e55051a83222fa7652d0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-4bada2a5bdbde93018e5a1b1e80e134acbc5509cfdea94db6e4c5b799eba7b82.yml +openapi_spec_hash: e0d541d480f5663b1e6bd3bb19a0fe61 config_hash: e0741f8035aea13f71e54e0fdb88eaa4 diff --git a/src/kernel/types/browsers/browser_console_error_event.py b/src/kernel/types/browsers/browser_console_error_event.py index a152f944..72a93ede 100644 --- a/src/kernel/types/browsers/browser_console_error_event.py +++ b/src/kernel/types/browsers/browser_console_error_event.py @@ -65,6 +65,8 @@ class BrowserConsoleErrorEvent(BaseModel): Emitted from two distinct CDP sources with different data shapes. Runtime.consoleAPICalled (console.error calls) produces level, text, args, and stack_trace. Runtime.exceptionThrown (uncaught exceptions) produces text, line, column, source_url, and stack_trace. Fields not applicable to the source are absent. """ + category: Literal["console"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_console_log_event.py b/src/kernel/types/browsers/browser_console_log_event.py index 5994c0be..338f6c85 100644 --- a/src/kernel/types/browsers/browser_console_log_event.py +++ b/src/kernel/types/browsers/browser_console_log_event.py @@ -42,6 +42,8 @@ class Data(BrowserEventContext): class BrowserConsoleLogEvent(BaseModel): """A browser console log event (console.log, console.info, console.warn, etc.).""" + category: Literal["console"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_interaction_click_event.py b/src/kernel/types/browsers/browser_interaction_click_event.py index efc76b34..7c4f6119 100644 --- a/src/kernel/types/browsers/browser_interaction_click_event.py +++ b/src/kernel/types/browsers/browser_interaction_click_event.py @@ -35,6 +35,8 @@ class Data(BrowserEventContext): class BrowserInteractionClickEvent(BaseModel): """A browser user click event captured via injected page script.""" + category: Literal["interaction"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_interaction_key_event.py b/src/kernel/types/browsers/browser_interaction_key_event.py index e8860330..93f2c43e 100644 --- a/src/kernel/types/browsers/browser_interaction_key_event.py +++ b/src/kernel/types/browsers/browser_interaction_key_event.py @@ -29,6 +29,8 @@ class Data(BrowserEventContext): class BrowserInteractionKeyEvent(BaseModel): """A browser keyboard event captured via injected page script.""" + category: Literal["interaction"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py b/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py index 16b7536b..2c7ee24c 100644 --- a/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +++ b/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py @@ -37,6 +37,8 @@ class BrowserInteractionScrollSettledEvent(BaseModel): A browser scroll settled event emitted after scroll position stops changing, captured via injected page script. """ + category: Literal["interaction"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_monitor_disconnected_event.py b/src/kernel/types/browsers/browser_monitor_disconnected_event.py index b329ab13..ac37ec6a 100644 --- a/src/kernel/types/browsers/browser_monitor_disconnected_event.py +++ b/src/kernel/types/browsers/browser_monitor_disconnected_event.py @@ -20,6 +20,8 @@ class BrowserMonitorDisconnectedEvent(BaseModel): Telemetry events may be dropped until monitor_reconnected arrives. Treat any in-progress computed state (network_idle, page_layout_settled) as unreliable until then. """ + category: Literal["system"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_monitor_init_failed_event.py b/src/kernel/types/browsers/browser_monitor_init_failed_event.py index a745fb8d..dba0e5da 100644 --- a/src/kernel/types/browsers/browser_monitor_init_failed_event.py +++ b/src/kernel/types/browsers/browser_monitor_init_failed_event.py @@ -17,6 +17,8 @@ class Data(BaseModel): class BrowserMonitorInitFailedEvent(BaseModel): """The CDP session could not be initialized.""" + category: Literal["system"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py b/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py index 79308d2e..57eec69b 100644 --- a/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +++ b/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py @@ -23,6 +23,8 @@ class BrowserMonitorReconnectFailedEvent(BaseModel): The CDP connection to Chrome could not be re-established after exhausting all reconnection attempts. No further telemetry events will arrive on this session. """ + category: Literal["system"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_monitor_reconnected_event.py b/src/kernel/types/browsers/browser_monitor_reconnected_event.py index a49ad351..39363367 100644 --- a/src/kernel/types/browsers/browser_monitor_reconnected_event.py +++ b/src/kernel/types/browsers/browser_monitor_reconnected_event.py @@ -19,6 +19,8 @@ class BrowserMonitorReconnectedEvent(BaseModel): The CDP connection to Chrome was successfully re-established after a disconnection. Events emitted during the gap are lost. Computed state is reset, so navigation and network tracking restart fresh from this point. """ + category: Literal["system"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_monitor_screenshot_event.py b/src/kernel/types/browsers/browser_monitor_screenshot_event.py index 9b446fa9..bd2dc65b 100644 --- a/src/kernel/types/browsers/browser_monitor_screenshot_event.py +++ b/src/kernel/types/browsers/browser_monitor_screenshot_event.py @@ -17,6 +17,8 @@ class Data(BaseModel): class BrowserMonitorScreenshotEvent(BaseModel): """A periodic screenshot of the browser viewport.""" + category: Literal["system"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_network_idle_event.py b/src/kernel/types/browsers/browser_network_idle_event.py index 4b4fae6b..b1877115 100644 --- a/src/kernel/types/browsers/browser_network_idle_event.py +++ b/src/kernel/types/browsers/browser_network_idle_event.py @@ -15,6 +15,8 @@ class BrowserNetworkIdleEvent(BaseModel): A browser network idle event emitted after a 500ms quiet period with no in-flight HTTP requests. """ + category: Literal["network"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_network_loading_failed_event.py b/src/kernel/types/browsers/browser_network_loading_failed_event.py index bf566a6b..ac6b7961 100644 --- a/src/kernel/types/browsers/browser_network_loading_failed_event.py +++ b/src/kernel/types/browsers/browser_network_loading_failed_event.py @@ -39,6 +39,8 @@ class BrowserNetworkLoadingFailedEvent(BaseModel): If the request was already in flight when CDP attached (no prior network_request was emitted for it), url, frame_id, loader_id, and resource_type are absent; BrowserEventContext is partially populated in that case. """ + category: Literal["network"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_network_request_event.py b/src/kernel/types/browsers/browser_network_request_event.py index e1bd9428..efea950b 100644 --- a/src/kernel/types/browsers/browser_network_request_event.py +++ b/src/kernel/types/browsers/browser_network_request_event.py @@ -55,6 +55,8 @@ class Data(BrowserEventContext): class BrowserNetworkRequestEvent(BaseModel): """A browser network request sent event.""" + category: Literal["network"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_network_response_event.py b/src/kernel/types/browsers/browser_network_response_event.py index 8a71d24a..b39fefb8 100644 --- a/src/kernel/types/browsers/browser_network_response_event.py +++ b/src/kernel/types/browsers/browser_network_response_event.py @@ -52,6 +52,8 @@ class BrowserNetworkResponseEvent(BaseModel): Fired after the response body is fully received, not when headers arrive. """ + category: Literal["network"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py b/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py index e917ca32..99393cce 100644 --- a/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +++ b/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py @@ -26,6 +26,8 @@ class Data(BrowserEventContext): class BrowserPageDomContentLoadedEvent(BaseModel): """A browser DOMContentLoaded event (CDP Page.domContentEventFired).""" + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_layout_settled_event.py b/src/kernel/types/browsers/browser_page_layout_settled_event.py index 289b53a5..f0558f12 100644 --- a/src/kernel/types/browsers/browser_page_layout_settled_event.py +++ b/src/kernel/types/browsers/browser_page_layout_settled_event.py @@ -15,6 +15,8 @@ class BrowserPageLayoutSettledEvent(BaseModel): A browser layout settled event emitted 1 second after page load with no intervening layout shifts, indicating visual stability. Each layout shift resets the 1-second timer. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_layout_shift_event.py b/src/kernel/types/browsers/browser_page_layout_shift_event.py index 336bfce2..fb578ac8 100644 --- a/src/kernel/types/browsers/browser_page_layout_shift_event.py +++ b/src/kernel/types/browsers/browser_page_layout_shift_event.py @@ -50,6 +50,8 @@ class BrowserPageLayoutShiftEvent(BaseModel): A browser cumulative layout shift (CLS) event from the Performance Timeline API. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_lcp_event.py b/src/kernel/types/browsers/browser_page_lcp_event.py index 13b9c270..0bcbddaa 100644 --- a/src/kernel/types/browsers/browser_page_lcp_event.py +++ b/src/kernel/types/browsers/browser_page_lcp_event.py @@ -56,6 +56,8 @@ class BrowserPageLcpEvent(BaseModel): A browser Largest Contentful Paint (LCP) event from the Performance Timeline API. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_load_event.py b/src/kernel/types/browsers/browser_page_load_event.py index b4d85c8f..f27658f1 100644 --- a/src/kernel/types/browsers/browser_page_load_event.py +++ b/src/kernel/types/browsers/browser_page_load_event.py @@ -26,6 +26,8 @@ class Data(BrowserEventContext): class BrowserPageLoadEvent(BaseModel): """A browser page load event (CDP Page.loadEventFired).""" + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_navigation_event.py b/src/kernel/types/browsers/browser_page_navigation_event.py index f857398c..5835d6d4 100644 --- a/src/kernel/types/browsers/browser_page_navigation_event.py +++ b/src/kernel/types/browsers/browser_page_navigation_event.py @@ -41,6 +41,8 @@ class BrowserPageNavigationEvent(BaseModel): Carries nav context fields inline but not nav_seq, as this event resets the navigation epoch. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_navigation_settled_event.py b/src/kernel/types/browsers/browser_page_navigation_settled_event.py index b5227ff4..6e5d31c2 100644 --- a/src/kernel/types/browsers/browser_page_navigation_settled_event.py +++ b/src/kernel/types/browsers/browser_page_navigation_settled_event.py @@ -15,6 +15,8 @@ class BrowserPageNavigationSettledEvent(BaseModel): Emitted when page_dom_content_loaded and page_layout_settled have both fired for the same navigation, indicating the page is loaded and visually stable. Independent of network_idle; a single pending request does not block it. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" diff --git a/src/kernel/types/browsers/browser_page_tab_opened_event.py b/src/kernel/types/browsers/browser_page_tab_opened_event.py index 9831aee1..144be476 100644 --- a/src/kernel/types/browsers/browser_page_tab_opened_event.py +++ b/src/kernel/types/browsers/browser_page_tab_opened_event.py @@ -31,6 +31,8 @@ class BrowserPageTabOpenedEvent(BaseModel): A new browser tab or target was opened (CDP Target.attachedToTarget for page targets). Fires before a CDP session is attached to the new target, so session_id, frame_id, loader_id, and nav_seq are absent; this event does not compose BrowserEventContext. Consumers reading context fields generically should treat it as a special case. """ + category: Literal["page"] + source: BrowserEventSource """Provenance metadata identifying which producer emitted the event.""" From 74388de343f496f38c8ea6697beb13ec25c2e671 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 17:40:56 +0000 Subject: [PATCH 4/4] release: 0.59.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 9 +++++++++ pyproject.toml | 2 +- src/kernel/_version.py | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2fbefb94..85c31182 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.58.0" + ".": "0.59.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1969b1..4ab282e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.59.0 (2026-05-29) + +Full Changelog: [v0.58.0...v0.59.0](https://github.com/kernel/kernel-python-sdk/compare/v0.58.0...v0.59.0) + +### Features + +* api: surface category field on browser telemetry events ([06a2f7b](https://github.com/kernel/kernel-python-sdk/commit/06a2f7babbc8f6ea31e46f3dfeb8d09dbaae88f0)) +* Support Byteful mobile proxies ([8c0ce1c](https://github.com/kernel/kernel-python-sdk/commit/8c0ce1c1533a538483419f4da0937a6153eb5273)) + ## 0.58.0 (2026-05-27) Full Changelog: [v0.57.0...v0.58.0](https://github.com/kernel/kernel-python-sdk/compare/v0.57.0...v0.58.0) diff --git a/pyproject.toml b/pyproject.toml index 3ff0ba88..24264fbc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.58.0" +version = "0.59.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 9422de86..86fdb652 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.58.0" # x-release-please-version +__version__ = "0.59.0" # x-release-please-version