kernel 0.58.0__tar.gz → 0.60.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. kernel-0.60.0/.release-please-manifest.json +3 -0
  2. {kernel-0.58.0 → kernel-0.60.0}/CHANGELOG.md +31 -0
  3. {kernel-0.58.0 → kernel-0.60.0}/PKG-INFO +1 -1
  4. {kernel-0.58.0 → kernel-0.60.0}/api.md +1 -1
  5. kernel-0.60.0/examples/browser_telemetry.py +32 -0
  6. {kernel-0.58.0 → kernel-0.60.0}/pyproject.toml +1 -1
  7. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_streaming.py +6 -1
  8. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_version.py +1 -1
  9. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/routing.py +1 -1
  10. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/api_keys.py +27 -0
  11. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browser_pools.py +12 -12
  12. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/browsers.py +6 -0
  13. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/computer.py +4 -0
  14. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/telemetry.py +2 -2
  15. kernel-0.60.0/src/kernel/types/api_key_list_params.py +27 -0
  16. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_update_params.py +8 -8
  17. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_console_error_event.py +2 -0
  18. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_console_log_event.py +2 -0
  19. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_click_event.py +2 -0
  20. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_key_event.py +2 -0
  21. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +2 -0
  22. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py +2 -0
  23. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py +2 -0
  24. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +2 -0
  25. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py +2 -0
  26. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py +2 -0
  27. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_idle_event.py +2 -0
  28. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py +2 -0
  29. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_request_event.py +2 -0
  30. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_response_event.py +2 -0
  31. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +2 -0
  32. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py +2 -0
  33. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py +2 -0
  34. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_lcp_event.py +2 -0
  35. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_load_event.py +2 -0
  36. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_navigation_event.py +2 -0
  37. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_navigation_settled_event.py +2 -0
  38. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_tab_opened_event.py +2 -0
  39. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_check_response.py +2 -75
  40. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_create_params.py +2 -73
  41. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_create_response.py +2 -75
  42. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_list_response.py +2 -75
  43. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_retrieve_response.py +2 -75
  44. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_api_keys.py +6 -0
  45. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_browser_pools.py +2 -10
  46. {kernel-0.58.0 → kernel-0.60.0}/tests/test_browser_routing.py +23 -1
  47. {kernel-0.58.0 → kernel-0.60.0}/tests/test_streaming.py +26 -0
  48. kernel-0.58.0/.release-please-manifest.json +0 -3
  49. kernel-0.58.0/src/kernel/types/api_key_list_params.py +0 -15
  50. {kernel-0.58.0 → kernel-0.60.0}/.gitignore +0 -0
  51. {kernel-0.58.0 → kernel-0.60.0}/CONTRIBUTING.md +0 -0
  52. {kernel-0.58.0 → kernel-0.60.0}/LICENSE +0 -0
  53. {kernel-0.58.0 → kernel-0.60.0}/README.md +0 -0
  54. {kernel-0.58.0 → kernel-0.60.0}/SECURITY.md +0 -0
  55. {kernel-0.58.0 → kernel-0.60.0}/bin/check-release-environment +0 -0
  56. {kernel-0.58.0 → kernel-0.60.0}/bin/publish-pypi +0 -0
  57. {kernel-0.58.0 → kernel-0.60.0}/examples/.keep +0 -0
  58. {kernel-0.58.0 → kernel-0.60.0}/examples/browser_routing.py +0 -0
  59. {kernel-0.58.0 → kernel-0.60.0}/noxfile.py +0 -0
  60. {kernel-0.58.0 → kernel-0.60.0}/release-please-config.json +0 -0
  61. {kernel-0.58.0 → kernel-0.60.0}/requirements-dev.lock +0 -0
  62. {kernel-0.58.0 → kernel-0.60.0}/requirements.lock +0 -0
  63. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/__init__.py +0 -0
  64. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_base_client.py +0 -0
  65. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_client.py +0 -0
  66. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_compat.py +0 -0
  67. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_constants.py +0 -0
  68. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_exceptions.py +0 -0
  69. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_files.py +0 -0
  70. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_models.py +0 -0
  71. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_qs.py +0 -0
  72. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_resource.py +0 -0
  73. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_response.py +0 -0
  74. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_types.py +0 -0
  75. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/__init__.py +0 -0
  76. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_compat.py +0 -0
  77. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_datetime_parse.py +0 -0
  78. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_json.py +0 -0
  79. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_logs.py +0 -0
  80. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_path.py +0 -0
  81. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_proxy.py +0 -0
  82. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_reflection.py +0 -0
  83. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_resources_proxy.py +0 -0
  84. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_streams.py +0 -0
  85. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_sync.py +0 -0
  86. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_transform.py +0 -0
  87. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_typing.py +0 -0
  88. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_utils.py +0 -0
  89. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/app_framework.py +0 -0
  90. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/.keep +0 -0
  91. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/__init__.py +0 -0
  92. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/raw_http.py +0 -0
  93. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/util.py +0 -0
  94. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/pagination.py +0 -0
  95. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/py.typed +0 -0
  96. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/__init__.py +0 -0
  97. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/apps.py +0 -0
  98. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/__init__.py +0 -0
  99. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/auth.py +0 -0
  100. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/connections.py +0 -0
  101. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/__init__.py +0 -0
  102. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/__init__.py +0 -0
  103. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/fs.py +0 -0
  104. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/watch.py +0 -0
  105. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/logs.py +0 -0
  106. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/playwright.py +0 -0
  107. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/process.py +0 -0
  108. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/replays.py +0 -0
  109. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/credential_providers.py +0 -0
  110. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/credentials.py +0 -0
  111. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/deployments.py +0 -0
  112. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/extensions.py +0 -0
  113. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/invocations.py +0 -0
  114. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/profiles.py +0 -0
  115. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/__init__.py +0 -0
  116. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/limits.py +0 -0
  117. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/projects.py +0 -0
  118. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/proxies.py +0 -0
  119. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/__init__.py +0 -0
  120. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key.py +0 -0
  121. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key_create_params.py +0 -0
  122. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key_update_params.py +0 -0
  123. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/app_list_params.py +0 -0
  124. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/app_list_response.py +0 -0
  125. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/__init__.py +0 -0
  126. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_create_params.py +0 -0
  127. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_follow_response.py +0 -0
  128. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_list_params.py +0 -0
  129. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_login_params.py +0 -0
  130. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_submit_params.py +0 -0
  131. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_update_params.py +0 -0
  132. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/login_response.py +0 -0
  133. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/managed_auth.py +0 -0
  134. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/submit_fields_response.py +0 -0
  135. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_create_params.py +0 -0
  136. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_create_response.py +0 -0
  137. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_curl_params.py +0 -0
  138. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_curl_response.py +0 -0
  139. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_list_params.py +0 -0
  140. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_list_response.py +0 -0
  141. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_load_extensions_params.py +0 -0
  142. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool.py +0 -0
  143. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_acquire_params.py +0 -0
  144. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_acquire_response.py +0 -0
  145. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_create_params.py +0 -0
  146. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_delete_params.py +0 -0
  147. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_list_response.py +0 -0
  148. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_ref.py +0 -0
  149. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_release_params.py +0 -0
  150. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_retrieve_params.py +0 -0
  151. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_retrieve_response.py +0 -0
  152. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_update_params.py +0 -0
  153. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_update_response.py +0 -0
  154. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_usage.py +0 -0
  155. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/__init__.py +0 -0
  156. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_call_stack.py +0 -0
  157. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_event_context.py +0 -0
  158. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_event_source.py +0 -0
  159. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_http_headers.py +0 -0
  160. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_categories_config.py +0 -0
  161. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_categories_config_param.py +0 -0
  162. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_category_config.py +0 -0
  163. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_category_config_param.py +0 -0
  164. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_config.py +0 -0
  165. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_event.py +0 -0
  166. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_batch_params.py +0 -0
  167. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_capture_screenshot_params.py +0 -0
  168. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_click_mouse_params.py +0 -0
  169. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_drag_mouse_params.py +0 -0
  170. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_get_mouse_position_response.py +0 -0
  171. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_move_mouse_params.py +0 -0
  172. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_press_key_params.py +0 -0
  173. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_read_clipboard_response.py +0 -0
  174. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_scroll_params.py +0 -0
  175. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_set_cursor_visibility_params.py +0 -0
  176. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_set_cursor_visibility_response.py +0 -0
  177. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_type_text_params.py +0 -0
  178. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_write_clipboard_params.py +0 -0
  179. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_create_directory_params.py +0 -0
  180. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_delete_directory_params.py +0 -0
  181. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_delete_file_params.py +0 -0
  182. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_download_dir_zip_params.py +0 -0
  183. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_file_info_params.py +0 -0
  184. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_file_info_response.py +0 -0
  185. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_list_files_params.py +0 -0
  186. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_list_files_response.py +0 -0
  187. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_move_params.py +0 -0
  188. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_read_file_params.py +0 -0
  189. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_set_file_permissions_params.py +0 -0
  190. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_upload_params.py +0 -0
  191. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_upload_zip_params.py +0 -0
  192. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_write_file_params.py +0 -0
  193. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/__init__.py +0 -0
  194. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_events_response.py +0 -0
  195. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_start_params.py +0 -0
  196. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_start_response.py +0 -0
  197. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/log_stream_params.py +0 -0
  198. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/playwright_execute_params.py +0 -0
  199. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/playwright_execute_response.py +0 -0
  200. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_exec_params.py +0 -0
  201. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_exec_response.py +0 -0
  202. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_kill_params.py +0 -0
  203. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_kill_response.py +0 -0
  204. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_resize_params.py +0 -0
  205. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_resize_response.py +0 -0
  206. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_spawn_params.py +0 -0
  207. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_spawn_response.py +0 -0
  208. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_status_response.py +0 -0
  209. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdin_params.py +0 -0
  210. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdin_response.py +0 -0
  211. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdout_stream_response.py +0 -0
  212. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_list_response.py +0 -0
  213. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_start_params.py +0 -0
  214. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_start_response.py +0 -0
  215. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/telemetry_stream_response.py +0 -0
  216. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/created_api_key.py +0 -0
  217. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential.py +0 -0
  218. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_create_params.py +0 -0
  219. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_list_params.py +0 -0
  220. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider.py +0 -0
  221. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_create_params.py +0 -0
  222. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_item.py +0 -0
  223. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_list_items_response.py +0 -0
  224. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_list_response.py +0 -0
  225. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_test_result.py +0 -0
  226. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_update_params.py +0 -0
  227. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_totp_code_response.py +0 -0
  228. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_update_params.py +0 -0
  229. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_create_params.py +0 -0
  230. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_create_response.py +0 -0
  231. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_follow_params.py +0 -0
  232. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_follow_response.py +0 -0
  233. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_list_params.py +0 -0
  234. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_list_response.py +0 -0
  235. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_retrieve_response.py +0 -0
  236. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_state_event.py +0 -0
  237. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_download_from_chrome_store_params.py +0 -0
  238. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_list_response.py +0 -0
  239. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_upload_params.py +0 -0
  240. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_upload_response.py +0 -0
  241. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_create_params.py +0 -0
  242. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_create_response.py +0 -0
  243. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_follow_params.py +0 -0
  244. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_follow_response.py +0 -0
  245. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_browsers_response.py +0 -0
  246. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_params.py +0 -0
  247. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_response.py +0 -0
  248. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_retrieve_response.py +0 -0
  249. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_state_event.py +0 -0
  250. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_update_params.py +0 -0
  251. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_update_response.py +0 -0
  252. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile.py +0 -0
  253. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile_create_params.py +0 -0
  254. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile_list_params.py +0 -0
  255. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project.py +0 -0
  256. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_create_params.py +0 -0
  257. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_list_params.py +0 -0
  258. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_update_params.py +0 -0
  259. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/__init__.py +0 -0
  260. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/limit_update_params.py +0 -0
  261. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/project_limits.py +0 -0
  262. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_check_params.py +0 -0
  263. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/__init__.py +0 -0
  264. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/app_action.py +0 -0
  265. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_extension.py +0 -0
  266. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_profile.py +0 -0
  267. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_viewport.py +0 -0
  268. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_detail.py +0 -0
  269. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_event.py +0 -0
  270. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_model.py +0 -0
  271. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/heartbeat_event.py +0 -0
  272. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/log_event.py +0 -0
  273. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/__init__.py +0 -0
  274. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_extension.py +0 -0
  275. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_profile.py +0 -0
  276. {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_viewport.py +0 -0
  277. {kernel-0.58.0 → kernel-0.60.0}/tests/__init__.py +0 -0
  278. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/__init__.py +0 -0
  279. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/auth/__init__.py +0 -0
  280. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/auth/test_connections.py +0 -0
  281. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/__init__.py +0 -0
  282. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/fs/__init__.py +0 -0
  283. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/fs/test_watch.py +0 -0
  284. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_computer.py +0 -0
  285. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_fs.py +0 -0
  286. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_logs.py +0 -0
  287. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_playwright.py +0 -0
  288. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_process.py +0 -0
  289. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_replays.py +0 -0
  290. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_telemetry.py +0 -0
  291. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/projects/__init__.py +0 -0
  292. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/projects/test_limits.py +0 -0
  293. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_apps.py +0 -0
  294. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_browsers.py +0 -0
  295. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_credential_providers.py +0 -0
  296. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_credentials.py +0 -0
  297. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_deployments.py +0 -0
  298. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_extensions.py +0 -0
  299. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_invocations.py +0 -0
  300. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_profiles.py +0 -0
  301. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_projects.py +0 -0
  302. {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_proxies.py +0 -0
  303. {kernel-0.58.0 → kernel-0.60.0}/tests/conftest.py +0 -0
  304. {kernel-0.58.0 → kernel-0.60.0}/tests/sample_file.txt +0 -0
  305. {kernel-0.58.0 → kernel-0.60.0}/tests/test_client.py +0 -0
  306. {kernel-0.58.0 → kernel-0.60.0}/tests/test_extract_files.py +0 -0
  307. {kernel-0.58.0 → kernel-0.60.0}/tests/test_files.py +0 -0
  308. {kernel-0.58.0 → kernel-0.60.0}/tests/test_models.py +0 -0
  309. {kernel-0.58.0 → kernel-0.60.0}/tests/test_qs.py +0 -0
  310. {kernel-0.58.0 → kernel-0.60.0}/tests/test_required_args.py +0 -0
  311. {kernel-0.58.0 → kernel-0.60.0}/tests/test_response.py +0 -0
  312. {kernel-0.58.0 → kernel-0.60.0}/tests/test_transform.py +0 -0
  313. {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_datetime_parse.py +0 -0
  314. {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_json.py +0 -0
  315. {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_path.py +0 -0
  316. {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_proxy.py +0 -0
  317. {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_typing.py +0 -0
  318. {kernel-0.58.0 → kernel-0.60.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.60.0"
3
+ }
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.60.0 (2026-06-03)
4
+
5
+ Full Changelog: [v0.59.0...v0.60.0](https://github.com/kernel/kernel-python-sdk/compare/v0.59.0...v0.60.0)
6
+
7
+ ### Features
8
+
9
+ * Add API-backed API key management endpoints ([55bd31e](https://github.com/kernel/kernel-python-sdk/commit/55bd31edfed74f3bc4b08f83e07448e2e53378b0))
10
+ * **examples:** add browser-telemetry example ([4c29993](https://github.com/kernel/kernel-python-sdk/commit/4c29993cdda50fcde19ee7bf696a268cd8b0eb0b))
11
+ * Fix browser pool update schema ([903fe13](https://github.com/kernel/kernel-python-sdk/commit/903fe13b84242acea9c27bc451c16fb5cd58e40c))
12
+ * route browser telemetry directly to the VM by default ([cb50725](https://github.com/kernel/kernel-python-sdk/commit/cb5072516416627ffde7198900484c46dda5b9dc))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **streaming:** don't dispatch empty SSE keepalive comment frames ([a0ee2b2](https://github.com/kernel/kernel-python-sdk/commit/a0ee2b2653c581839be11bb29be5b68166e80658))
18
+
19
+ ## 0.59.0 (2026-06-03)
20
+
21
+ Full Changelog: [v0.58.0...v0.59.0](https://github.com/kernel/kernel-python-sdk/compare/v0.58.0...v0.59.0)
22
+
23
+ ### Features
24
+
25
+ * api: surface category field on browser telemetry events ([06a2f7b](https://github.com/kernel/kernel-python-sdk/commit/06a2f7babbc8f6ea31e46f3dfeb8d09dbaae88f0))
26
+ * **api:** move browser telemetry SSE stream to /browsers/{id}/telemetry/stream ([5de851a](https://github.com/kernel/kernel-python-sdk/commit/5de851a5ff708a3e42e276e3cf9e2fe7ef0f2ed6))
27
+ * Support Byteful mobile proxies ([8c0ce1c](https://github.com/kernel/kernel-python-sdk/commit/8c0ce1c1533a538483419f4da0937a6153eb5273))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * **api:** move batch + get_mouse_position into Browser Computer Controls tag ([7cbc848](https://github.com/kernel/kernel-python-sdk/commit/7cbc848fe33394ee05f5eb96d62cdc8b5b9b9d9c))
33
+
3
34
  ## 0.58.0 (2026-05-27)
4
35
 
5
36
  Full Changelog: [v0.57.0...v0.58.0](https://github.com/kernel/kernel-python-sdk/compare/v0.57.0...v0.58.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kernel
3
- Version: 0.58.0
3
+ Version: 0.60.0
4
4
  Summary: The official Python library for the kernel API
5
5
  Project-URL: Homepage, https://github.com/kernel/kernel-python-sdk
6
6
  Project-URL: Repository, https://github.com/kernel/kernel-python-sdk
@@ -143,7 +143,7 @@ from kernel.types.browsers import (
143
143
 
144
144
  Methods:
145
145
 
146
- - <code title="get /browsers/{id}/telemetry">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
146
+ - <code title="get /browsers/{id}/telemetry/stream">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
147
147
 
148
148
  ## Replays
149
149
 
@@ -0,0 +1,32 @@
1
+ """Example: stream live browser telemetry events from a session."""
2
+
3
+ from kernel import Kernel
4
+
5
+
6
+ def main() -> None:
7
+ client = Kernel()
8
+
9
+ # Enable telemetry capture when creating the browser.
10
+ browser = client.browsers.create(telemetry={"enabled": True})
11
+
12
+ try:
13
+ # Telemetry is a default direct-to-VM routing subresource, so the stream
14
+ # connects straight to the browser VM automatically.
15
+ stream = client.browsers.telemetry.stream(browser.session_id)
16
+
17
+ # Make a few browser activity calls to generate events. The "api" telemetry
18
+ # category emits an event per VM API call, so events arrive within ~1s.
19
+ for _ in range(3):
20
+ client.browsers.curl(browser.session_id, url="https://example.com", method="GET")
21
+
22
+ # Print a few events, then stop so we don't wait on the 15s keepalive.
23
+ for count, message in enumerate(stream, start=1):
24
+ print(message.seq, message.event.type)
25
+ if count >= 3:
26
+ break
27
+ finally:
28
+ client.browsers.delete_by_id(browser.session_id)
29
+
30
+
31
+ if __name__ == "__main__":
32
+ main()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kernel"
3
- version = "0.58.0"
3
+ version = "0.60.0"
4
4
  description = "The official Python library for the kernel API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -251,7 +251,12 @@ class SSEDecoder:
251
251
  # See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501
252
252
 
253
253
  if not line:
254
- if not self._event and not self._data and not self._last_event_id and self._retry is None:
254
+ # Whether to dispatch depends only on what was set in the *current* block. last_event_id
255
+ # is sticky across events (per the SSE spec, it is intentionally not reset below), so it
256
+ # must not be part of this check -- otherwise, once any event carries an id, every
257
+ # subsequent comment-only block (e.g. a ``:\n\n`` keepalive) would dispatch an empty
258
+ # event, which then fails to JSON-decode in the typed Stream wrapper.
259
+ if not self._event and not self._data and self._retry is None:
255
260
  return None
256
261
 
257
262
  sse = ServerSentEvent(
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "kernel"
4
- __version__ = "0.58.0" # x-release-please-version
4
+ __version__ = "0.60.0" # x-release-please-version
@@ -41,7 +41,7 @@ _BROWSER_POOL_RELEASE_PATH = re.compile(r"^/(?:v\d+/)?browser_pools/[^/]+/releas
41
41
  def browser_routing_config_from_env() -> BrowserRoutingConfig:
42
42
  raw = os.environ.get("KERNEL_BROWSER_ROUTING_SUBRESOURCES")
43
43
  if raw is None:
44
- return BrowserRoutingConfig(subresources=("curl",))
44
+ return BrowserRoutingConfig(subresources=("curl", "telemetry"))
45
45
  if raw.strip() == "":
46
46
  return BrowserRoutingConfig()
47
47
 
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from typing import Optional
6
+ from typing_extensions import Literal
6
7
 
7
8
  import httpx
8
9
 
@@ -171,6 +172,9 @@ class APIKeysResource(SyncAPIResource):
171
172
  *,
172
173
  limit: int | Omit = omit,
173
174
  offset: int | Omit = omit,
175
+ query: str | Omit = omit,
176
+ sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
177
+ sort_direction: Literal["asc", "desc"] | Omit = omit,
174
178
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
175
179
  # The extra values given here take precedence over values defined on the client or passed to this method.
176
180
  extra_headers: Headers | None = None,
@@ -187,6 +191,13 @@ class APIKeysResource(SyncAPIResource):
187
191
 
188
192
  offset: Number of results to skip
189
193
 
194
+ query: Case-insensitive substring match against API key name, creator, and project. API
195
+ key identifiers and masked keys match by exact value or prefix.
196
+
197
+ sort_by: Field to sort API keys by.
198
+
199
+ sort_direction: Sort direction for API keys.
200
+
190
201
  extra_headers: Send extra headers
191
202
 
192
203
  extra_query: Add additional query parameters to the request
@@ -207,6 +218,9 @@ class APIKeysResource(SyncAPIResource):
207
218
  {
208
219
  "limit": limit,
209
220
  "offset": offset,
221
+ "query": query,
222
+ "sort_by": sort_by,
223
+ "sort_direction": sort_direction,
210
224
  },
211
225
  api_key_list_params.APIKeyListParams,
212
226
  ),
@@ -395,6 +409,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
395
409
  *,
396
410
  limit: int | Omit = omit,
397
411
  offset: int | Omit = omit,
412
+ query: str | Omit = omit,
413
+ sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
414
+ sort_direction: Literal["asc", "desc"] | Omit = omit,
398
415
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
399
416
  # The extra values given here take precedence over values defined on the client or passed to this method.
400
417
  extra_headers: Headers | None = None,
@@ -411,6 +428,13 @@ class AsyncAPIKeysResource(AsyncAPIResource):
411
428
 
412
429
  offset: Number of results to skip
413
430
 
431
+ query: Case-insensitive substring match against API key name, creator, and project. API
432
+ key identifiers and masked keys match by exact value or prefix.
433
+
434
+ sort_by: Field to sort API keys by.
435
+
436
+ sort_direction: Sort direction for API keys.
437
+
414
438
  extra_headers: Send extra headers
415
439
 
416
440
  extra_query: Add additional query parameters to the request
@@ -431,6 +455,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
431
455
  {
432
456
  "limit": limit,
433
457
  "offset": offset,
458
+ "query": query,
459
+ "sort_by": sort_by,
460
+ "sort_direction": sort_direction,
434
461
  },
435
462
  api_key_list_params.APIKeyListParams,
436
463
  ),
@@ -206,7 +206,6 @@ class BrowserPoolsResource(SyncAPIResource):
206
206
  self,
207
207
  id_or_name: str,
208
208
  *,
209
- size: int,
210
209
  chrome_policy: Dict[str, object] | Omit = omit,
211
210
  discard_all_idle: bool | Omit = omit,
212
211
  extensions: Iterable[BrowserExtension] | Omit = omit,
@@ -216,6 +215,7 @@ class BrowserPoolsResource(SyncAPIResource):
216
215
  name: str | Omit = omit,
217
216
  profile: BrowserProfile | Omit = omit,
218
217
  proxy_id: str | Omit = omit,
218
+ size: int | Omit = omit,
219
219
  start_url: str | Omit = omit,
220
220
  stealth: bool | Omit = omit,
221
221
  timeout_seconds: int | Omit = omit,
@@ -231,10 +231,6 @@ class BrowserPoolsResource(SyncAPIResource):
231
231
  Updates the configuration used to create browsers in the pool.
232
232
 
233
233
  Args:
234
- size: Number of browsers to maintain in the pool. The maximum size is determined by
235
- your organization's pooled sessions limit (the sum of all pool sizes cannot
236
- exceed your limit).
237
-
238
234
  chrome_policy: Custom Chrome enterprise policy overrides applied to all browsers in this pool.
239
235
  Keys are Chrome enterprise policy names; values must match their expected types.
240
236
  Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
@@ -261,6 +257,10 @@ class BrowserPoolsResource(SyncAPIResource):
261
257
  proxy_id: Optional proxy to associate to the browser session. Must reference a proxy
262
258
  belonging to the caller's org.
263
259
 
260
+ size: Number of browsers to maintain in the pool. The maximum size is determined by
261
+ your organization's pooled sessions limit (the sum of all pool sizes cannot
262
+ exceed your limit).
263
+
264
264
  start_url: Optional URL to navigate to when a new browser is warmed into the pool.
265
265
  Best-effort: failures to navigate do not fail pool fill. Only applied to
266
266
  newly-warmed browsers; browsers reused via release/acquire keep whatever URL the
@@ -300,7 +300,6 @@ class BrowserPoolsResource(SyncAPIResource):
300
300
  path_template("/browser_pools/{id_or_name}", id_or_name=id_or_name),
301
301
  body=maybe_transform(
302
302
  {
303
- "size": size,
304
303
  "chrome_policy": chrome_policy,
305
304
  "discard_all_idle": discard_all_idle,
306
305
  "extensions": extensions,
@@ -310,6 +309,7 @@ class BrowserPoolsResource(SyncAPIResource):
310
309
  "name": name,
311
310
  "profile": profile,
312
311
  "proxy_id": proxy_id,
312
+ "size": size,
313
313
  "start_url": start_url,
314
314
  "stealth": stealth,
315
315
  "timeout_seconds": timeout_seconds,
@@ -684,7 +684,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
684
684
  self,
685
685
  id_or_name: str,
686
686
  *,
687
- size: int,
688
687
  chrome_policy: Dict[str, object] | Omit = omit,
689
688
  discard_all_idle: bool | Omit = omit,
690
689
  extensions: Iterable[BrowserExtension] | Omit = omit,
@@ -694,6 +693,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
694
693
  name: str | Omit = omit,
695
694
  profile: BrowserProfile | Omit = omit,
696
695
  proxy_id: str | Omit = omit,
696
+ size: int | Omit = omit,
697
697
  start_url: str | Omit = omit,
698
698
  stealth: bool | Omit = omit,
699
699
  timeout_seconds: int | Omit = omit,
@@ -709,10 +709,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
709
709
  Updates the configuration used to create browsers in the pool.
710
710
 
711
711
  Args:
712
- size: Number of browsers to maintain in the pool. The maximum size is determined by
713
- your organization's pooled sessions limit (the sum of all pool sizes cannot
714
- exceed your limit).
715
-
716
712
  chrome_policy: Custom Chrome enterprise policy overrides applied to all browsers in this pool.
717
713
  Keys are Chrome enterprise policy names; values must match their expected types.
718
714
  Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
@@ -739,6 +735,10 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
739
735
  proxy_id: Optional proxy to associate to the browser session. Must reference a proxy
740
736
  belonging to the caller's org.
741
737
 
738
+ size: Number of browsers to maintain in the pool. The maximum size is determined by
739
+ your organization's pooled sessions limit (the sum of all pool sizes cannot
740
+ exceed your limit).
741
+
742
742
  start_url: Optional URL to navigate to when a new browser is warmed into the pool.
743
743
  Best-effort: failures to navigate do not fail pool fill. Only applied to
744
744
  newly-warmed browsers; browsers reused via release/acquire keep whatever URL the
@@ -778,7 +778,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
778
778
  path_template("/browser_pools/{id_or_name}", id_or_name=id_or_name),
779
779
  body=await async_maybe_transform(
780
780
  {
781
- "size": size,
782
781
  "chrome_policy": chrome_policy,
783
782
  "discard_all_idle": discard_all_idle,
784
783
  "extensions": extensions,
@@ -788,6 +787,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
788
787
  "name": name,
789
788
  "profile": profile,
790
789
  "proxy_id": proxy_id,
790
+ "size": size,
791
791
  "start_url": start_url,
792
792
  "stealth": stealth,
793
793
  "timeout_seconds": timeout_seconds,
@@ -133,6 +133,7 @@ class BrowsersResource(SyncAPIResource):
133
133
 
134
134
  @cached_property
135
135
  def computer(self) -> ComputerResource:
136
+ """Control mouse, keyboard, and screen on the browser instance."""
136
137
  return ComputerResource(self._client)
137
138
 
138
139
  @cached_property
@@ -680,6 +681,7 @@ class AsyncBrowsersResource(AsyncAPIResource):
680
681
 
681
682
  @cached_property
682
683
  def computer(self) -> AsyncComputerResource:
684
+ """Control mouse, keyboard, and screen on the browser instance."""
683
685
  return AsyncComputerResource(self._client)
684
686
 
685
687
  @cached_property
@@ -1250,6 +1252,7 @@ class BrowsersResourceWithRawResponse:
1250
1252
 
1251
1253
  @cached_property
1252
1254
  def computer(self) -> ComputerResourceWithRawResponse:
1255
+ """Control mouse, keyboard, and screen on the browser instance."""
1253
1256
  return ComputerResourceWithRawResponse(self._browsers.computer)
1254
1257
 
1255
1258
  @cached_property
@@ -1311,6 +1314,7 @@ class AsyncBrowsersResourceWithRawResponse:
1311
1314
 
1312
1315
  @cached_property
1313
1316
  def computer(self) -> AsyncComputerResourceWithRawResponse:
1317
+ """Control mouse, keyboard, and screen on the browser instance."""
1314
1318
  return AsyncComputerResourceWithRawResponse(self._browsers.computer)
1315
1319
 
1316
1320
  @cached_property
@@ -1372,6 +1376,7 @@ class BrowsersResourceWithStreamingResponse:
1372
1376
 
1373
1377
  @cached_property
1374
1378
  def computer(self) -> ComputerResourceWithStreamingResponse:
1379
+ """Control mouse, keyboard, and screen on the browser instance."""
1375
1380
  return ComputerResourceWithStreamingResponse(self._browsers.computer)
1376
1381
 
1377
1382
  @cached_property
@@ -1433,6 +1438,7 @@ class AsyncBrowsersResourceWithStreamingResponse:
1433
1438
 
1434
1439
  @cached_property
1435
1440
  def computer(self) -> AsyncComputerResourceWithStreamingResponse:
1441
+ """Control mouse, keyboard, and screen on the browser instance."""
1436
1442
  return AsyncComputerResourceWithStreamingResponse(self._browsers.computer)
1437
1443
 
1438
1444
  @cached_property
@@ -46,6 +46,8 @@ __all__ = ["ComputerResource", "AsyncComputerResource"]
46
46
 
47
47
 
48
48
  class ComputerResource(SyncAPIResource):
49
+ """Control mouse, keyboard, and screen on the browser instance."""
50
+
49
51
  @cached_property
50
52
  def with_raw_response(self) -> ComputerResourceWithRawResponse:
51
53
  """
@@ -649,6 +651,8 @@ class ComputerResource(SyncAPIResource):
649
651
 
650
652
 
651
653
  class AsyncComputerResource(AsyncAPIResource):
654
+ """Control mouse, keyboard, and screen on the browser instance."""
655
+
652
656
  @cached_property
653
657
  def with_raw_response(self) -> AsyncComputerResourceWithRawResponse:
654
658
  """
@@ -80,7 +80,7 @@ class TelemetryResource(SyncAPIResource):
80
80
  extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
81
81
  extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
82
82
  return self._get(
83
- path_template("/browsers/{id}/telemetry", id=id),
83
+ path_template("/browsers/{id}/telemetry/stream", id=id),
84
84
  options=make_request_options(
85
85
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
86
86
  ),
@@ -149,7 +149,7 @@ class AsyncTelemetryResource(AsyncAPIResource):
149
149
  extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
150
150
  extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
151
151
  return await self._get(
152
- path_template("/browsers/{id}/telemetry", id=id),
152
+ path_template("/browsers/{id}/telemetry/stream", id=id),
153
153
  options=make_request_options(
154
154
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
155
155
  ),
@@ -0,0 +1,27 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Literal, TypedDict
6
+
7
+ __all__ = ["APIKeyListParams"]
8
+
9
+
10
+ class APIKeyListParams(TypedDict, total=False):
11
+ limit: int
12
+ """Maximum number of results to return"""
13
+
14
+ offset: int
15
+ """Number of results to skip"""
16
+
17
+ query: str
18
+ """Case-insensitive substring match against API key name, creator, and project.
19
+
20
+ API key identifiers and masked keys match by exact value or prefix.
21
+ """
22
+
23
+ sort_by: Literal["created_at", "name", "expires_at"]
24
+ """Field to sort API keys by."""
25
+
26
+ sort_direction: Literal["asc", "desc"]
27
+ """Sort direction for API keys."""
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from typing import Dict, Iterable
6
- from typing_extensions import Required, TypedDict
6
+ from typing_extensions import TypedDict
7
7
 
8
8
  from .shared_params.browser_profile import BrowserProfile
9
9
  from .shared_params.browser_viewport import BrowserViewport
@@ -13,13 +13,6 @@ __all__ = ["BrowserPoolUpdateParams"]
13
13
 
14
14
 
15
15
  class BrowserPoolUpdateParams(TypedDict, total=False):
16
- size: Required[int]
17
- """Number of browsers to maintain in the pool.
18
-
19
- The maximum size is determined by your organization's pooled sessions limit (the
20
- sum of all pool sizes cannot exceed your limit).
21
- """
22
-
23
16
  chrome_policy: Dict[str, object]
24
17
  """Custom Chrome enterprise policy overrides applied to all browsers in this pool.
25
18
 
@@ -68,6 +61,13 @@ class BrowserPoolUpdateParams(TypedDict, total=False):
68
61
  Must reference a proxy belonging to the caller's org.
69
62
  """
70
63
 
64
+ size: int
65
+ """Number of browsers to maintain in the pool.
66
+
67
+ The maximum size is determined by your organization's pooled sessions limit (the
68
+ sum of all pool sizes cannot exceed your limit).
69
+ """
70
+
71
71
  start_url: str
72
72
  """Optional URL to navigate to when a new browser is warmed into the pool.
73
73
 
@@ -65,6 +65,8 @@ class BrowserConsoleErrorEvent(BaseModel):
65
65
  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.
66
66
  """
67
67
 
68
+ category: Literal["console"]
69
+
68
70
  source: BrowserEventSource
69
71
  """Provenance metadata identifying which producer emitted the event."""
70
72
 
@@ -42,6 +42,8 @@ class Data(BrowserEventContext):
42
42
  class BrowserConsoleLogEvent(BaseModel):
43
43
  """A browser console log event (console.log, console.info, console.warn, etc.)."""
44
44
 
45
+ category: Literal["console"]
46
+
45
47
  source: BrowserEventSource
46
48
  """Provenance metadata identifying which producer emitted the event."""
47
49
 
@@ -35,6 +35,8 @@ class Data(BrowserEventContext):
35
35
  class BrowserInteractionClickEvent(BaseModel):
36
36
  """A browser user click event captured via injected page script."""
37
37
 
38
+ category: Literal["interaction"]
39
+
38
40
  source: BrowserEventSource
39
41
  """Provenance metadata identifying which producer emitted the event."""
40
42
 
@@ -29,6 +29,8 @@ class Data(BrowserEventContext):
29
29
  class BrowserInteractionKeyEvent(BaseModel):
30
30
  """A browser keyboard event captured via injected page script."""
31
31
 
32
+ category: Literal["interaction"]
33
+
32
34
  source: BrowserEventSource
33
35
  """Provenance metadata identifying which producer emitted the event."""
34
36
 
@@ -37,6 +37,8 @@ class BrowserInteractionScrollSettledEvent(BaseModel):
37
37
  A browser scroll settled event emitted after scroll position stops changing, captured via injected page script.
38
38
  """
39
39
 
40
+ category: Literal["interaction"]
41
+
40
42
  source: BrowserEventSource
41
43
  """Provenance metadata identifying which producer emitted the event."""
42
44
 
@@ -20,6 +20,8 @@ class BrowserMonitorDisconnectedEvent(BaseModel):
20
20
  Telemetry events may be dropped until monitor_reconnected arrives. Treat any in-progress computed state (network_idle, page_layout_settled) as unreliable until then.
21
21
  """
22
22
 
23
+ category: Literal["system"]
24
+
23
25
  source: BrowserEventSource
24
26
  """Provenance metadata identifying which producer emitted the event."""
25
27
 
@@ -17,6 +17,8 @@ class Data(BaseModel):
17
17
  class BrowserMonitorInitFailedEvent(BaseModel):
18
18
  """The CDP session could not be initialized."""
19
19
 
20
+ category: Literal["system"]
21
+
20
22
  source: BrowserEventSource
21
23
  """Provenance metadata identifying which producer emitted the event."""
22
24
 
@@ -23,6 +23,8 @@ class BrowserMonitorReconnectFailedEvent(BaseModel):
23
23
  The CDP connection to Chrome could not be re-established after exhausting all reconnection attempts. No further telemetry events will arrive on this session.
24
24
  """
25
25
 
26
+ category: Literal["system"]
27
+
26
28
  source: BrowserEventSource
27
29
  """Provenance metadata identifying which producer emitted the event."""
28
30
 
@@ -19,6 +19,8 @@ class BrowserMonitorReconnectedEvent(BaseModel):
19
19
  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.
20
20
  """
21
21
 
22
+ category: Literal["system"]
23
+
22
24
  source: BrowserEventSource
23
25
  """Provenance metadata identifying which producer emitted the event."""
24
26
 
@@ -17,6 +17,8 @@ class Data(BaseModel):
17
17
  class BrowserMonitorScreenshotEvent(BaseModel):
18
18
  """A periodic screenshot of the browser viewport."""
19
19
 
20
+ category: Literal["system"]
21
+
20
22
  source: BrowserEventSource
21
23
  """Provenance metadata identifying which producer emitted the event."""
22
24
 
@@ -15,6 +15,8 @@ class BrowserNetworkIdleEvent(BaseModel):
15
15
  A browser network idle event emitted after a 500ms quiet period with no in-flight HTTP requests.
16
16
  """
17
17
 
18
+ category: Literal["network"]
19
+
18
20
  source: BrowserEventSource
19
21
  """Provenance metadata identifying which producer emitted the event."""
20
22
 
@@ -39,6 +39,8 @@ class BrowserNetworkLoadingFailedEvent(BaseModel):
39
39
  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.
40
40
  """
41
41
 
42
+ category: Literal["network"]
43
+
42
44
  source: BrowserEventSource
43
45
  """Provenance metadata identifying which producer emitted the event."""
44
46
 
@@ -55,6 +55,8 @@ class Data(BrowserEventContext):
55
55
  class BrowserNetworkRequestEvent(BaseModel):
56
56
  """A browser network request sent event."""
57
57
 
58
+ category: Literal["network"]
59
+
58
60
  source: BrowserEventSource
59
61
  """Provenance metadata identifying which producer emitted the event."""
60
62
 
@@ -52,6 +52,8 @@ class BrowserNetworkResponseEvent(BaseModel):
52
52
  Fired after the response body is fully received, not when headers arrive.
53
53
  """
54
54
 
55
+ category: Literal["network"]
56
+
55
57
  source: BrowserEventSource
56
58
  """Provenance metadata identifying which producer emitted the event."""
57
59
 
@@ -26,6 +26,8 @@ class Data(BrowserEventContext):
26
26
  class BrowserPageDomContentLoadedEvent(BaseModel):
27
27
  """A browser DOMContentLoaded event (CDP Page.domContentEventFired)."""
28
28
 
29
+ category: Literal["page"]
30
+
29
31
  source: BrowserEventSource
30
32
  """Provenance metadata identifying which producer emitted the event."""
31
33
 
@@ -15,6 +15,8 @@ class BrowserPageLayoutSettledEvent(BaseModel):
15
15
  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.
16
16
  """
17
17
 
18
+ category: Literal["page"]
19
+
18
20
  source: BrowserEventSource
19
21
  """Provenance metadata identifying which producer emitted the event."""
20
22
 
@@ -50,6 +50,8 @@ class BrowserPageLayoutShiftEvent(BaseModel):
50
50
  A browser cumulative layout shift (CLS) event from the Performance Timeline API.
51
51
  """
52
52
 
53
+ category: Literal["page"]
54
+
53
55
  source: BrowserEventSource
54
56
  """Provenance metadata identifying which producer emitted the event."""
55
57
 
@@ -56,6 +56,8 @@ class BrowserPageLcpEvent(BaseModel):
56
56
  A browser Largest Contentful Paint (LCP) event from the Performance Timeline API.
57
57
  """
58
58
 
59
+ category: Literal["page"]
60
+
59
61
  source: BrowserEventSource
60
62
  """Provenance metadata identifying which producer emitted the event."""
61
63