kernel 0.107.0__tar.gz → 0.108.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.
- kernel-0.108.0/.release-please-manifest.json +3 -0
- {kernel-0.107.0 → kernel-0.108.0}/CHANGELOG.md +7 -0
- {kernel-0.107.0 → kernel-0.108.0}/PKG-INFO +1 -1
- {kernel-0.107.0 → kernel-0.108.0}/pyproject.toml +1 -1
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_version.py +1 -1
- kernel-0.108.0/src/kernel/lib/config_registry_wait.py +63 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/config_registry/analyses.py +107 -0
- kernel-0.108.0/tests/test_config_registry_wait.py +181 -0
- kernel-0.107.0/.release-please-manifest.json +0 -3
- {kernel-0.107.0 → kernel-0.108.0}/.gitignore +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/CONTRIBUTING.md +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/LICENSE +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/README.md +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/SECURITY.md +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/api.md +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/bin/check-release-environment +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/bin/publish-pypi +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/examples/.keep +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/examples/browser_routing.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/examples/browser_telemetry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/noxfile.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/release-please-config.json +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/requirements-dev.lock +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/requirements.lock +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_base_client.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_client.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_compat.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_constants.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_exceptions.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_files.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_models.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_qs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_resource.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_streaming.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_types.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_compat.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_datetime_parse.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_json.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_logs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_path.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_proxy.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_reflection.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_resources_proxy.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_streams.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_sync.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_transform.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_typing.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/_utils/_utils.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/app_framework.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/.keep +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/audit_log_download.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/browser_routing/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/browser_routing/raw_http.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/browser_routing/routing.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/browser_routing/util.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/lib/multipart.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/pagination.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/py.typed +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/api_keys.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/apps.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/audit_logs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/audit_logs/audit_logs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/audit_logs/export_destinations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/auth/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/auth/auth.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/auth/connections.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/auth/context.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browser_pools.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/browsers.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/computer.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/fs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/fs/fs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/fs/watch.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/logs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/playwright.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/process.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/replays.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/telemetry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/browsers/webmcp.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/config_registry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/config_registry/config_registry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/credential_providers.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/credentials.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/deployments.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/extensions.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/invocations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/organization/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/organization/entitlements.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/organization/limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/organization/organization.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/profiles.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/projects/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/projects/limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/projects/projects.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/proxies.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/telemetry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/telemetry/destinations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/telemetry/telemetry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/vault_provider_configs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/vaults/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/vaults/items.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/resources/vaults/vaults.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/analysis.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/analysis_summary.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key_retrieve_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key_rotate_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/api_key_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/app_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/app_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_log_entry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_log_export_chunk_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_log_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/audit_log_export_destination.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/audit_log_export_destination_test_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/export_destination_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/export_destination_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/audit_logs/export_destination_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/auth_context.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_follow_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_login_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_submit_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_timeline_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/connection_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/login_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/managed_auth.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/managed_auth_browser_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/managed_auth_browser_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/managed_auth_timeline_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/auth/submit_fields_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_create_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_curl_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_curl_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_load_extensions_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_memory.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_memory_request.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_network_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_network_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_acquire_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_acquire_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_delete_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_ref.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_release_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_pool_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_proxy.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_proxy_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_proxy_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_proxy_mode.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_repl_content.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_repl_image_content.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_repl_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_repl_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_repl_text_content.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_retrieve_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_retrieve_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_update_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browser_usage.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_api_call_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_call_stack.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_captcha_challenge_result_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_captcha_solve_result_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_captcha_solve_started_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_cdp_command_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_cdp_command_method.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_cdp_connect_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_cdp_disconnect_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_console_error_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_console_log_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_event_context.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_event_source.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_http_headers.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_interaction_click_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_interaction_key_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_live_view_connect_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_live_view_disconnect_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_network_idle_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_network_request_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_network_response_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_crashed_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_lcp_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_load_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_navigation_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_navigation_settled_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_page_tab_opened_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_platform_api_call_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_proxy_error_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_service_crashed_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_system_oom_kill_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_categories_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_categories_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_category_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_category_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_cdp_control_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_cdp_control_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_control_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_control_config_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_export_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/browser_telemetry_otlp_export_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_batch_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_capture_screenshot_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_click_mouse_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_drag_mouse_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_get_mouse_position_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_move_mouse_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_press_key_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_read_clipboard_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_scroll_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_set_cursor_visibility_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_set_cursor_visibility_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_type_text_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/computer_write_clipboard_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_create_directory_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_delete_directory_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_delete_file_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_download_dir_zip_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_file_info_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_file_info_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_list_files_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_list_files_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_move_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_read_file_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_set_file_permissions_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_upload_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_upload_zip_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/f_write_file_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/fs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/fs/watch_events_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/fs/watch_start_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/fs/watch_start_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/invocation_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/log_stream_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/playwright_execute_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/playwright_execute_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_exec_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_exec_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_kill_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_kill_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_resize_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_resize_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_spawn_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_spawn_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_status_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_stdin_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_stdin_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/process_stdout_stream_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/replay_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/replay_start_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/replay_start_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/telemetry_events_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/telemetry_events_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/telemetry_stream_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/telemetry_stream_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/tool.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/tool_annotations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/tool_frame.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/tool_source.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/tools_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/browsers/webmcp_invoke_tool_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry/analysis_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry_lookup_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry_resolve_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/config_registry_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/created_api_key.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_item.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_list_items_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_test_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_provider_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_totp_code_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/credential_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_create_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_follow_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_follow_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_retrieve_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/deployment_state_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/evidence.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_download_from_chrome_store_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_get_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_upload_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/extension_upload_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_create_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_follow_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_follow_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_list_browsers_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_retrieve_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_state_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/invocation_update_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/lookup_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/no_recommendation.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/organization/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/organization/limit_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/organization/org_entitlements.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/organization/org_limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/profile.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/profile_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/profile_download_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/profile_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/profile_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/project.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/project_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/project_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/project_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/projects/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/projects/limit_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/projects/project_limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_check_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_check_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_create_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_retrieve_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/proxy_update_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/recommendation.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/recommendation_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/recommendation_summary.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/app_action.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/browser_extension.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/browser_profile.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/browser_viewport.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/error_detail.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/error_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/error_model.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/heartbeat_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared/log_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared_params/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared_params/browser_extension.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared_params/browser_profile.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/shared_params/browser_viewport.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/tags.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/tags_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/target.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/telemetry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/telemetry/destination_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/telemetry/destination_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/telemetry/destination_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/telemetry/otlp_destination.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_provider_config.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_provider_config_create_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_provider_config_list_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_provider_config_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_reference.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_reference_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vault_upsert_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/agentcard_checkout_authorization.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/agentcard_checkout_preparation.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/agentcard_prepared_processor.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/authorize_vault_item_operation_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/card_vault_item_spec.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/card_vault_item_spec_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/card_vault_item_state.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/collect_vault_item_operation_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_collection_action.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_field_definition.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_field_input_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_field_state.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_field_type.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_field_update_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_spec.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_spec_input_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_spec_update_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_state.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/credential_vault_item_update_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/fill_vault_item_operation_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/fill_vault_item_operation_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_events_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_events_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_list_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_perform_operation_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_retrieve_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_update_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/item_upsert_params.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/prepare_checkout_vault_item_operation_request_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_card_aliases.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_checkout_context_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_fill_field_param.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_fill_field_result.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_item.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_item_action.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_item_event.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_item_operation_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/vault_payment_method.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/wallet_vault_item_spec.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/src/kernel/types/vaults/wallet_vault_item_state.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/audit_logs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/audit_logs/test_export_destinations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/auth/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/auth/test_connections.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/auth/test_context.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/fs/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/fs/test_watch.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_computer.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_fs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_logs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_playwright.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_process.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_replays.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_telemetry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/browsers/test_webmcp.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/config_registry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/config_registry/test_analyses.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/organization/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/organization/test_entitlements.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/organization/test_limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/projects/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/projects/test_limits.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/telemetry/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/telemetry/test_destinations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_api_keys.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_apps.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_audit_logs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_browser_pools.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_browsers.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_config_registry.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_credential_providers.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_credentials.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_deployments.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_extensions.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_invocations.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_profiles.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_projects.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_proxies.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_vault_provider_configs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/test_vaults.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/vaults/__init__.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/api_resources/vaults/test_items.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/conftest.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/sample_file.txt +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_audit_log_download.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_browser_routing.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_client.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_extract_files.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_files.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_models.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_pagination.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_qs.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_required_args.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_response.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_streaming.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_transform.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_utils/test_json.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_utils/test_path.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_utils/test_proxy.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_utils/test_typing.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/test_vault_operation_retries.py +0 -0
- {kernel-0.107.0 → kernel-0.108.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.108.0](https://github.com/kernel/kernel-python-sdk/compare/v0.107.0...v0.108.0) (2026-09-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* feat: add config registry analysis waiter ([e38c887](https://github.com/kernel/kernel-python-sdk/commit/e38c8878f9f80f5d28fce9f92df6f0a18a48e2bb))
|
|
9
|
+
|
|
3
10
|
## [0.107.0](https://github.com/kernel/kernel-python-sdk/compare/v0.106.0...v0.107.0) (2026-09-16)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.108.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
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import math
|
|
4
|
+
import time
|
|
5
|
+
import random
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
|
|
8
|
+
from .._types import Omit, Headers
|
|
9
|
+
from .._exceptions import KernelError
|
|
10
|
+
from ..types.config_registry_response import ConfigRegistryResponse
|
|
11
|
+
|
|
12
|
+
DEFAULT_CONFIG_REGISTRY_POLL_INTERVAL = 5.0
|
|
13
|
+
_TERMINAL_STATUSES = frozenset({"completed", "failed", "canceled", "expired"})
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_wait_options(poll_interval: float, max_wait_seconds: float | None) -> None:
|
|
17
|
+
if not math.isfinite(poll_interval) or poll_interval <= 0:
|
|
18
|
+
raise ValueError("Expected a finite, positive value for `poll_interval`")
|
|
19
|
+
if max_wait_seconds is not None and (not math.isfinite(max_wait_seconds) or max_wait_seconds < 0):
|
|
20
|
+
raise ValueError("Expected a finite, non-negative value for `max_wait_seconds`")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def poll_headers(extra_headers: Headers | None) -> Headers:
|
|
24
|
+
headers: dict[str, str | Omit] = dict(extra_headers or {})
|
|
25
|
+
headers["X-Stainless-Poll-Helper"] = "true"
|
|
26
|
+
return headers
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def poll_delay(poll_interval: float) -> float:
|
|
30
|
+
return poll_interval * random.uniform(0.9, 1.1)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def wait_timeout_error(id: str, polls: int, last_status: str | None, started_at: float) -> TimeoutError:
|
|
34
|
+
elapsed = time.monotonic() - started_at
|
|
35
|
+
return TimeoutError(
|
|
36
|
+
f"Timed out waiting for config registry analysis {id!r} after {elapsed:.1f}s "
|
|
37
|
+
f"and {polls} polls; last status was {last_status!r}"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def analysis_finished(response: ConfigRegistryResponse, requested_id: str) -> tuple[bool, str]:
|
|
42
|
+
analysis = response.analysis
|
|
43
|
+
if analysis is None:
|
|
44
|
+
raise KernelError(f"Config registry response for {requested_id!r} is missing an analysis")
|
|
45
|
+
|
|
46
|
+
analysis_id = getattr(analysis, "id", None)
|
|
47
|
+
if not isinstance(analysis_id, str) or not analysis_id:
|
|
48
|
+
raise KernelError(f"Config registry response for {requested_id!r} has no valid analysis ID")
|
|
49
|
+
if analysis_id != requested_id:
|
|
50
|
+
raise KernelError(f"Config registry response for {requested_id!r} returned analysis {analysis_id!r}")
|
|
51
|
+
|
|
52
|
+
status = getattr(analysis, "status", None)
|
|
53
|
+
if not isinstance(status, str) or not status:
|
|
54
|
+
raise KernelError(f"Config registry analysis {requested_id!r} has no valid status")
|
|
55
|
+
|
|
56
|
+
if "finished_at" not in analysis.model_fields_set:
|
|
57
|
+
raise KernelError(f"Config registry analysis {requested_id!r} is missing `finished_at`")
|
|
58
|
+
|
|
59
|
+
finished_at = getattr(analysis, "finished_at", None)
|
|
60
|
+
if finished_at is not None and not isinstance(finished_at, datetime):
|
|
61
|
+
raise KernelError(f"Config registry analysis {requested_id!r} has an invalid `finished_at`")
|
|
62
|
+
|
|
63
|
+
return finished_at is not None or status in _TERMINAL_STATUSES, status
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import time
|
|
6
|
+
|
|
5
7
|
import httpx
|
|
6
8
|
|
|
7
9
|
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
@@ -18,6 +20,14 @@ from ...pagination import SyncOffsetPagination, AsyncOffsetPagination
|
|
|
18
20
|
from ..._base_client import AsyncPaginator, make_request_options
|
|
19
21
|
from ...types.config_registry import analysis_list_params
|
|
20
22
|
from ...types.analysis_summary import AnalysisSummary
|
|
23
|
+
from ...lib.config_registry_wait import (
|
|
24
|
+
DEFAULT_CONFIG_REGISTRY_POLL_INTERVAL,
|
|
25
|
+
poll_delay,
|
|
26
|
+
poll_headers,
|
|
27
|
+
analysis_finished,
|
|
28
|
+
wait_timeout_error,
|
|
29
|
+
validate_wait_options,
|
|
30
|
+
)
|
|
21
31
|
from ...types.config_registry_response import ConfigRegistryResponse
|
|
22
32
|
|
|
23
33
|
__all__ = ["AnalysesResource", "AsyncAnalysesResource"]
|
|
@@ -79,6 +89,54 @@ class AnalysesResource(SyncAPIResource):
|
|
|
79
89
|
cast_to=ConfigRegistryResponse,
|
|
80
90
|
)
|
|
81
91
|
|
|
92
|
+
def wait_for_result(
|
|
93
|
+
self,
|
|
94
|
+
id: str,
|
|
95
|
+
*,
|
|
96
|
+
poll_interval: float = DEFAULT_CONFIG_REGISTRY_POLL_INTERVAL,
|
|
97
|
+
max_wait_seconds: float | None = None,
|
|
98
|
+
extra_headers: Headers | None = None,
|
|
99
|
+
extra_query: Query | None = None,
|
|
100
|
+
extra_body: Body | None = None,
|
|
101
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
102
|
+
) -> ConfigRegistryResponse:
|
|
103
|
+
"""Wait for an analysis to finish and return its complete result.
|
|
104
|
+
|
|
105
|
+
The first retrieval happens immediately. ``max_wait_seconds`` is a soft
|
|
106
|
+
polling deadline: an in-flight request and its normal retries may finish
|
|
107
|
+
after it. Timing out does not cancel the remote analysis.
|
|
108
|
+
"""
|
|
109
|
+
validate_wait_options(poll_interval, max_wait_seconds)
|
|
110
|
+
started_at = time.monotonic()
|
|
111
|
+
deadline = started_at + max_wait_seconds if max_wait_seconds is not None else None
|
|
112
|
+
headers = poll_headers(extra_headers)
|
|
113
|
+
polls = 0
|
|
114
|
+
last_status: str | None = None
|
|
115
|
+
|
|
116
|
+
while True:
|
|
117
|
+
if polls > 0 and deadline is not None and time.monotonic() >= deadline:
|
|
118
|
+
raise wait_timeout_error(id, polls, last_status, started_at)
|
|
119
|
+
|
|
120
|
+
response = self.retrieve(
|
|
121
|
+
id,
|
|
122
|
+
extra_headers=headers,
|
|
123
|
+
extra_query=extra_query,
|
|
124
|
+
extra_body=extra_body,
|
|
125
|
+
timeout=timeout,
|
|
126
|
+
)
|
|
127
|
+
polls += 1
|
|
128
|
+
finished, last_status = analysis_finished(response, id)
|
|
129
|
+
if finished:
|
|
130
|
+
return response
|
|
131
|
+
|
|
132
|
+
delay = poll_delay(poll_interval)
|
|
133
|
+
if deadline is not None:
|
|
134
|
+
remaining = deadline - time.monotonic()
|
|
135
|
+
if remaining <= 0:
|
|
136
|
+
raise wait_timeout_error(id, polls, last_status, started_at)
|
|
137
|
+
delay = min(delay, remaining)
|
|
138
|
+
self._sleep(delay)
|
|
139
|
+
|
|
82
140
|
def list(
|
|
83
141
|
self,
|
|
84
142
|
*,
|
|
@@ -220,6 +278,55 @@ class AsyncAnalysesResource(AsyncAPIResource):
|
|
|
220
278
|
cast_to=ConfigRegistryResponse,
|
|
221
279
|
)
|
|
222
280
|
|
|
281
|
+
async def wait_for_result(
|
|
282
|
+
self,
|
|
283
|
+
id: str,
|
|
284
|
+
*,
|
|
285
|
+
poll_interval: float = DEFAULT_CONFIG_REGISTRY_POLL_INTERVAL,
|
|
286
|
+
max_wait_seconds: float | None = None,
|
|
287
|
+
extra_headers: Headers | None = None,
|
|
288
|
+
extra_query: Query | None = None,
|
|
289
|
+
extra_body: Body | None = None,
|
|
290
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
291
|
+
) -> ConfigRegistryResponse:
|
|
292
|
+
"""Wait for an analysis to finish and return its complete result.
|
|
293
|
+
|
|
294
|
+
The first retrieval happens immediately. ``max_wait_seconds`` is a soft
|
|
295
|
+
polling deadline: an in-flight request and its normal retries may finish
|
|
296
|
+
after it. Timing out does not cancel the remote analysis. Cancelling the
|
|
297
|
+
calling task stops the wait without cancelling the remote analysis.
|
|
298
|
+
"""
|
|
299
|
+
validate_wait_options(poll_interval, max_wait_seconds)
|
|
300
|
+
started_at = time.monotonic()
|
|
301
|
+
deadline = started_at + max_wait_seconds if max_wait_seconds is not None else None
|
|
302
|
+
headers = poll_headers(extra_headers)
|
|
303
|
+
polls = 0
|
|
304
|
+
last_status: str | None = None
|
|
305
|
+
|
|
306
|
+
while True:
|
|
307
|
+
if polls > 0 and deadline is not None and time.monotonic() >= deadline:
|
|
308
|
+
raise wait_timeout_error(id, polls, last_status, started_at)
|
|
309
|
+
|
|
310
|
+
response = await self.retrieve(
|
|
311
|
+
id,
|
|
312
|
+
extra_headers=headers,
|
|
313
|
+
extra_query=extra_query,
|
|
314
|
+
extra_body=extra_body,
|
|
315
|
+
timeout=timeout,
|
|
316
|
+
)
|
|
317
|
+
polls += 1
|
|
318
|
+
finished, last_status = analysis_finished(response, id)
|
|
319
|
+
if finished:
|
|
320
|
+
return response
|
|
321
|
+
|
|
322
|
+
delay = poll_delay(poll_interval)
|
|
323
|
+
if deadline is not None:
|
|
324
|
+
remaining = deadline - time.monotonic()
|
|
325
|
+
if remaining <= 0:
|
|
326
|
+
raise wait_timeout_error(id, polls, last_status, started_at)
|
|
327
|
+
delay = min(delay, remaining)
|
|
328
|
+
await self._sleep(delay)
|
|
329
|
+
|
|
223
330
|
def list(
|
|
224
331
|
self,
|
|
225
332
|
*,
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
from typing import Any
|
|
5
|
+
from collections.abc import Iterator
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from kernel import Kernel, AsyncKernel
|
|
11
|
+
from kernel._exceptions import KernelError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def analysis_response(
|
|
15
|
+
status: str,
|
|
16
|
+
*,
|
|
17
|
+
analysis_id: str = "analysis-1",
|
|
18
|
+
finished_at: str | None = None,
|
|
19
|
+
) -> dict[str, Any]:
|
|
20
|
+
return {
|
|
21
|
+
"analysis": {
|
|
22
|
+
"id": analysis_id,
|
|
23
|
+
"created_at": "2026-09-16T00:00:00Z",
|
|
24
|
+
"expires_at": "2026-09-16T00:45:00Z",
|
|
25
|
+
"failure": None,
|
|
26
|
+
"finished_at": finished_at,
|
|
27
|
+
"status": status,
|
|
28
|
+
"intent": None,
|
|
29
|
+
},
|
|
30
|
+
"recommendation": None,
|
|
31
|
+
"target": {
|
|
32
|
+
"domain": "example.com",
|
|
33
|
+
"host": "example.com",
|
|
34
|
+
"normalized": "https://example.com/",
|
|
35
|
+
},
|
|
36
|
+
"working_configurations": [],
|
|
37
|
+
"guidance": None,
|
|
38
|
+
"workload_outcome": None,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def response_sequence(payloads: list[dict[str, Any]]) -> tuple[httpx.MockTransport, list[httpx.Request]]:
|
|
43
|
+
remaining: Iterator[dict[str, Any]] = iter(payloads)
|
|
44
|
+
requests: list[httpx.Request] = []
|
|
45
|
+
|
|
46
|
+
def handler(request: httpx.Request) -> httpx.Response:
|
|
47
|
+
requests.append(request)
|
|
48
|
+
return httpx.Response(200, json=next(remaining))
|
|
49
|
+
|
|
50
|
+
return httpx.MockTransport(handler), requests
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_wait_for_result_polls_unknown_unfinished_status_until_finished() -> None:
|
|
54
|
+
transport, requests = response_sequence(
|
|
55
|
+
[
|
|
56
|
+
analysis_response("running"),
|
|
57
|
+
analysis_response("queued"),
|
|
58
|
+
analysis_response("archived", finished_at="2026-09-16T00:01:00Z"),
|
|
59
|
+
]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
with httpx.Client(transport=transport) as http_client:
|
|
63
|
+
client = Kernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
64
|
+
result = client.config_registry.analyses.wait_for_result(
|
|
65
|
+
"analysis-1",
|
|
66
|
+
poll_interval=0.001,
|
|
67
|
+
extra_headers={"X-Test": "preserved", "X-Stainless-Poll-Helper": "caller"},
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
assert result.analysis is not None
|
|
71
|
+
assert result.analysis.status == "archived"
|
|
72
|
+
assert len(requests) == 3
|
|
73
|
+
assert all(request.headers["X-Test"] == "preserved" for request in requests)
|
|
74
|
+
assert all(request.headers["X-Stainless-Poll-Helper"] == "true" for request in requests)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@pytest.mark.parametrize("status", ["completed", "failed", "canceled", "expired"])
|
|
78
|
+
def test_wait_for_result_returns_known_terminal_status_without_finished_at(status: str) -> None:
|
|
79
|
+
transport, requests = response_sequence([analysis_response(status)])
|
|
80
|
+
|
|
81
|
+
with httpx.Client(transport=transport) as http_client:
|
|
82
|
+
client = Kernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
83
|
+
result = client.config_registry.analyses.wait_for_result("analysis-1")
|
|
84
|
+
|
|
85
|
+
assert result.analysis is not None
|
|
86
|
+
assert result.analysis.status == status
|
|
87
|
+
assert len(requests) == 1
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_wait_for_result_zero_max_wait_reads_once_then_times_out() -> None:
|
|
91
|
+
transport, requests = response_sequence([analysis_response("running")])
|
|
92
|
+
|
|
93
|
+
with httpx.Client(transport=transport) as http_client:
|
|
94
|
+
client = Kernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
95
|
+
with pytest.raises(TimeoutError, match="analysis-1"):
|
|
96
|
+
client.config_registry.analyses.wait_for_result("analysis-1", max_wait_seconds=0)
|
|
97
|
+
|
|
98
|
+
assert len(requests) == 1
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@pytest.mark.parametrize(
|
|
102
|
+
"payload, message",
|
|
103
|
+
[
|
|
104
|
+
({"analysis": None}, "missing an analysis"),
|
|
105
|
+
(analysis_response("running", analysis_id="analysis-2"), "analysis-2"),
|
|
106
|
+
],
|
|
107
|
+
)
|
|
108
|
+
def test_wait_for_result_rejects_invalid_analysis_response(payload: dict[str, Any], message: str) -> None:
|
|
109
|
+
transport, _ = response_sequence([payload])
|
|
110
|
+
|
|
111
|
+
with httpx.Client(transport=transport) as http_client:
|
|
112
|
+
client = Kernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
113
|
+
with pytest.raises(KernelError, match=message):
|
|
114
|
+
client.config_registry.analyses.wait_for_result("analysis-1")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_wait_for_result_rejects_missing_finished_at() -> None:
|
|
118
|
+
payload = analysis_response("running")
|
|
119
|
+
analysis = payload["analysis"]
|
|
120
|
+
assert isinstance(analysis, dict)
|
|
121
|
+
del analysis["finished_at"]
|
|
122
|
+
transport, _ = response_sequence([payload])
|
|
123
|
+
|
|
124
|
+
with httpx.Client(transport=transport) as http_client:
|
|
125
|
+
client = Kernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
126
|
+
with pytest.raises(KernelError, match="finished_at"):
|
|
127
|
+
client.config_registry.analyses.wait_for_result("analysis-1")
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@pytest.mark.parametrize(
|
|
131
|
+
"kwargs",
|
|
132
|
+
[
|
|
133
|
+
{"poll_interval": 0},
|
|
134
|
+
{"poll_interval": float("nan")},
|
|
135
|
+
{"max_wait_seconds": -1},
|
|
136
|
+
{"max_wait_seconds": float("inf")},
|
|
137
|
+
],
|
|
138
|
+
)
|
|
139
|
+
def test_wait_for_result_rejects_invalid_timing_options(kwargs: dict[str, float]) -> None:
|
|
140
|
+
client = Kernel(api_key="test", base_url="https://api.example")
|
|
141
|
+
|
|
142
|
+
with pytest.raises(ValueError):
|
|
143
|
+
client.config_registry.analyses.wait_for_result("analysis-1", **kwargs) # type: ignore[arg-type]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
async def test_async_wait_for_result_matches_sync_behavior() -> None:
|
|
147
|
+
transport, requests = response_sequence(
|
|
148
|
+
[
|
|
149
|
+
analysis_response("running"),
|
|
150
|
+
analysis_response("completed", finished_at="2026-09-16T00:01:00Z"),
|
|
151
|
+
]
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
async with httpx.AsyncClient(transport=transport) as http_client:
|
|
155
|
+
client = AsyncKernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
156
|
+
result = await client.config_registry.analyses.wait_for_result("analysis-1", poll_interval=0.001)
|
|
157
|
+
|
|
158
|
+
assert result.analysis is not None
|
|
159
|
+
assert result.analysis.status == "completed"
|
|
160
|
+
assert len(requests) == 2
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
async def test_async_wait_for_result_is_cancellable_during_poll_sleep() -> None:
|
|
164
|
+
first_request = asyncio.Event()
|
|
165
|
+
requests: list[httpx.Request] = []
|
|
166
|
+
|
|
167
|
+
def handler(request: httpx.Request) -> httpx.Response:
|
|
168
|
+
requests.append(request)
|
|
169
|
+
first_request.set()
|
|
170
|
+
return httpx.Response(200, json=analysis_response("running"))
|
|
171
|
+
|
|
172
|
+
async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as http_client:
|
|
173
|
+
client = AsyncKernel(api_key="test", base_url="https://api.example", http_client=http_client)
|
|
174
|
+
task = asyncio.create_task(client.config_registry.analyses.wait_for_result("analysis-1", poll_interval=60))
|
|
175
|
+
await first_request.wait()
|
|
176
|
+
await asyncio.sleep(0)
|
|
177
|
+
task.cancel()
|
|
178
|
+
with pytest.raises(asyncio.CancelledError):
|
|
179
|
+
await task
|
|
180
|
+
|
|
181
|
+
assert len(requests) == 1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|