runloop_api_client 1.4.0__tar.gz → 1.5.1__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.
- runloop_api_client-1.5.1/.release-please-manifest.json +3 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/CHANGELOG.md +16 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/PKG-INFO +1 -1
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/api.md +2 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/pyproject.toml +1 -1
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/devboxes.py +114 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/_types.py +5 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_devbox.py +29 -1
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/devbox.py +29 -1
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/__init__.py +2 -0
- runloop_api_client-1.5.1/src/runloop_api_client/types/devbox_enable_tunnel_params.py +13 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_view.py +3 -26
- runloop_api_client-1.5.1/src/runloop_api_client/types/tunnel_view.py +34 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_devboxes.py +93 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_devbox.py +47 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_devbox.py +45 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/uv.lock +1 -1
- runloop_api_client-1.4.0/.release-please-manifest.json +0 -3
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/.gitignore +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/CONTRIBUTING.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/LICENSE +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/README-SDK.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/README.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/SECURITY.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/bin/check-release-environment +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/bin/publish-pypi +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/examples/.keep +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/release-please-config.json +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/requirements-dev.lock +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_base_client.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_models.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_types.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_compat.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_json.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/_utils/_validation.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/_ignore.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/context_loader.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/polling.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/agents.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/benchmarks.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/gateway_configs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/network_policies.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/objects.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/repositories.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/resources/secrets.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/_helpers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_execution.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/execution.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/execution_result.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/scenario_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/sync.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/agent_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/agent_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/agent_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/agent_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/gateway_config_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/inspection_source_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/network_policy_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_download_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_download_url_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_list_public_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/object_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_connection_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/secret_list_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/agent_source.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/object_mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared/run_profile.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_agents.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_benchmark_jobs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_benchmark_runs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_gateway_configs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_network_policies.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_objects.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sample_file.txt +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/test_core.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/async_devbox/test_streaming.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/test_core.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/devbox/test_streaming.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_benchmark_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_execution.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_execution_result.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_ops.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_scenario_builder.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_scenario_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_benchmark_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_execution.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_execution_result.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_helpers.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_ops.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_scenario_builder.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_scenario_run.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/README.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/README.md +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/__init__.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/conftest.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_sdk.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_sdk.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/test_blueprints.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/test_devboxes.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/test_executions.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/test_snapshots.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/utils.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_client.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_extract_files.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_files.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_models.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_polling.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_qs.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_required_args.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_response.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_streaming.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_transform.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_utils/test_context_loader.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_utils/test_json.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.5.1 (2026-01-30)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v1.5.0...v1.5.1](https://github.com/runloopai/api-client-python/compare/v1.5.0...v1.5.1)
|
|
6
|
+
|
|
7
|
+
### Chores
|
|
8
|
+
|
|
9
|
+
* **devbox:** rename tunnel auth enum ([#7239](https://github.com/runloopai/api-client-python/issues/7239)) ([7a9b7a4](https://github.com/runloopai/api-client-python/commit/7a9b7a449ce648ad4f220af83b35f800727ea28d))
|
|
10
|
+
|
|
11
|
+
## 1.5.0 (2026-01-30)
|
|
12
|
+
|
|
13
|
+
Full Changelog: [v1.4.0...v1.5.0](https://github.com/runloopai/api-client-python/compare/v1.4.0...v1.5.0)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **devbox:** add enable_tunnel API ([#7236](https://github.com/runloopai/api-client-python/issues/7236)) ([bb58bfc](https://github.com/runloopai/api-client-python/commit/bb58bfc40c93c5832634ddb82c255ada7214c7f4))
|
|
18
|
+
|
|
3
19
|
## 1.4.0 (2026-01-30)
|
|
4
20
|
|
|
5
21
|
Full Changelog: [v1.3.2...v1.4.0](https://github.com/runloopai/api-client-python/compare/v1.3.2...v1.4.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: The official Python library for the runloop API
|
|
5
5
|
Project-URL: Homepage, https://github.com/runloopai/api-client-python
|
|
6
6
|
Project-URL: Repository, https://github.com/runloopai/api-client-python
|
|
@@ -132,6 +132,7 @@ from runloop_api_client.types import (
|
|
|
132
132
|
DevboxSnapshotView,
|
|
133
133
|
DevboxTunnelView,
|
|
134
134
|
DevboxView,
|
|
135
|
+
TunnelView,
|
|
135
136
|
DevboxCreateSSHKeyResponse,
|
|
136
137
|
DevboxReadFileContentsResponse,
|
|
137
138
|
)
|
|
@@ -148,6 +149,7 @@ Methods:
|
|
|
148
149
|
- <code title="post /v1/devboxes/{id}/create_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_create_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_tunnel_view.py">DevboxTunnelView</a></code>
|
|
149
150
|
- <code title="post /v1/devboxes/disk_snapshots/{id}/delete">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">delete_disk_snapshot</a>(id) -> object</code>
|
|
150
151
|
- <code title="post /v1/devboxes/{id}/download_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">download_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_download_file_params.py">params</a>) -> BinaryAPIResponse</code>
|
|
152
|
+
- <code title="post /v1/devboxes/{id}/enable_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">enable_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_enable_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/tunnel_view.py">TunnelView</a></code>
|
|
151
153
|
- <code title="post /v1/devboxes/{id}/execute">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
|
|
152
154
|
- <code title="post /v1/devboxes/{id}/execute_async">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute_async</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_async_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
|
|
153
155
|
- <code title="post /v1/devboxes/{id}/execute_sync">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute_sync</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_sync_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
|
|
@@ -28,6 +28,7 @@ from ...types import (
|
|
|
28
28
|
devbox_execute_sync_params,
|
|
29
29
|
devbox_create_tunnel_params,
|
|
30
30
|
devbox_download_file_params,
|
|
31
|
+
devbox_enable_tunnel_params,
|
|
31
32
|
devbox_execute_async_params,
|
|
32
33
|
devbox_remove_tunnel_params,
|
|
33
34
|
devbox_snapshot_disk_params,
|
|
@@ -99,6 +100,7 @@ from .disk_snapshots import (
|
|
|
99
100
|
)
|
|
100
101
|
from ...lib.polling_async import async_poll_until
|
|
101
102
|
from ...types.devbox_view import DevboxView
|
|
103
|
+
from ...types.tunnel_view import TunnelView
|
|
102
104
|
from ...types.devbox_tunnel_view import DevboxTunnelView
|
|
103
105
|
from ...types.shared_params.mount import Mount
|
|
104
106
|
from ...types.devbox_snapshot_view import DevboxSnapshotView
|
|
@@ -787,6 +789,55 @@ class DevboxesResource(SyncAPIResource):
|
|
|
787
789
|
cast_to=BinaryAPIResponse,
|
|
788
790
|
)
|
|
789
791
|
|
|
792
|
+
def enable_tunnel(
|
|
793
|
+
self,
|
|
794
|
+
id: str,
|
|
795
|
+
*,
|
|
796
|
+
auth_mode: Optional[Literal["open", "authenticated"]] | Omit = omit,
|
|
797
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
798
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
799
|
+
extra_headers: Headers | None = None,
|
|
800
|
+
extra_query: Query | None = None,
|
|
801
|
+
extra_body: Body | None = None,
|
|
802
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
803
|
+
idempotency_key: str | None = None,
|
|
804
|
+
) -> TunnelView:
|
|
805
|
+
"""Create a V2 tunnel for an existing running Devbox.
|
|
806
|
+
|
|
807
|
+
Tunnels provide encrypted
|
|
808
|
+
URL-based access to the Devbox without exposing internal IDs. The tunnel URL
|
|
809
|
+
format is: https://{port}-{tunnel_key}.tunnel.runloop.ai
|
|
810
|
+
|
|
811
|
+
Each Devbox can have one tunnel.
|
|
812
|
+
|
|
813
|
+
Args:
|
|
814
|
+
auth_mode: Authentication mode for the tunnel. Defaults to 'public' if not specified.
|
|
815
|
+
|
|
816
|
+
extra_headers: Send extra headers
|
|
817
|
+
|
|
818
|
+
extra_query: Add additional query parameters to the request
|
|
819
|
+
|
|
820
|
+
extra_body: Add additional JSON properties to the request
|
|
821
|
+
|
|
822
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
823
|
+
|
|
824
|
+
idempotency_key: Specify a custom idempotency key for this request
|
|
825
|
+
"""
|
|
826
|
+
if not id:
|
|
827
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
828
|
+
return self._post(
|
|
829
|
+
f"/v1/devboxes/{id}/enable_tunnel",
|
|
830
|
+
body=maybe_transform({"auth_mode": auth_mode}, devbox_enable_tunnel_params.DevboxEnableTunnelParams),
|
|
831
|
+
options=make_request_options(
|
|
832
|
+
extra_headers=extra_headers,
|
|
833
|
+
extra_query=extra_query,
|
|
834
|
+
extra_body=extra_body,
|
|
835
|
+
timeout=timeout,
|
|
836
|
+
idempotency_key=idempotency_key,
|
|
837
|
+
),
|
|
838
|
+
cast_to=TunnelView,
|
|
839
|
+
)
|
|
840
|
+
|
|
790
841
|
def execute(
|
|
791
842
|
self,
|
|
792
843
|
id: str,
|
|
@@ -2347,6 +2398,57 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
2347
2398
|
cast_to=AsyncBinaryAPIResponse,
|
|
2348
2399
|
)
|
|
2349
2400
|
|
|
2401
|
+
async def enable_tunnel(
|
|
2402
|
+
self,
|
|
2403
|
+
id: str,
|
|
2404
|
+
*,
|
|
2405
|
+
auth_mode: Optional[Literal["open", "authenticated"]] | Omit = omit,
|
|
2406
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
2407
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
2408
|
+
extra_headers: Headers | None = None,
|
|
2409
|
+
extra_query: Query | None = None,
|
|
2410
|
+
extra_body: Body | None = None,
|
|
2411
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
2412
|
+
idempotency_key: str | None = None,
|
|
2413
|
+
) -> TunnelView:
|
|
2414
|
+
"""Create a V2 tunnel for an existing running Devbox.
|
|
2415
|
+
|
|
2416
|
+
Tunnels provide encrypted
|
|
2417
|
+
URL-based access to the Devbox without exposing internal IDs. The tunnel URL
|
|
2418
|
+
format is: https://{port}-{tunnel_key}.tunnel.runloop.ai
|
|
2419
|
+
|
|
2420
|
+
Each Devbox can have one tunnel.
|
|
2421
|
+
|
|
2422
|
+
Args:
|
|
2423
|
+
auth_mode: Authentication mode for the tunnel. Defaults to 'public' if not specified.
|
|
2424
|
+
|
|
2425
|
+
extra_headers: Send extra headers
|
|
2426
|
+
|
|
2427
|
+
extra_query: Add additional query parameters to the request
|
|
2428
|
+
|
|
2429
|
+
extra_body: Add additional JSON properties to the request
|
|
2430
|
+
|
|
2431
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
2432
|
+
|
|
2433
|
+
idempotency_key: Specify a custom idempotency key for this request
|
|
2434
|
+
"""
|
|
2435
|
+
if not id:
|
|
2436
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
2437
|
+
return await self._post(
|
|
2438
|
+
f"/v1/devboxes/{id}/enable_tunnel",
|
|
2439
|
+
body=await async_maybe_transform(
|
|
2440
|
+
{"auth_mode": auth_mode}, devbox_enable_tunnel_params.DevboxEnableTunnelParams
|
|
2441
|
+
),
|
|
2442
|
+
options=make_request_options(
|
|
2443
|
+
extra_headers=extra_headers,
|
|
2444
|
+
extra_query=extra_query,
|
|
2445
|
+
extra_body=extra_body,
|
|
2446
|
+
timeout=timeout,
|
|
2447
|
+
idempotency_key=idempotency_key,
|
|
2448
|
+
),
|
|
2449
|
+
cast_to=TunnelView,
|
|
2450
|
+
)
|
|
2451
|
+
|
|
2350
2452
|
async def execute(
|
|
2351
2453
|
self,
|
|
2352
2454
|
id: str,
|
|
@@ -3293,6 +3395,9 @@ class DevboxesResourceWithRawResponse:
|
|
|
3293
3395
|
devboxes.download_file,
|
|
3294
3396
|
BinaryAPIResponse,
|
|
3295
3397
|
)
|
|
3398
|
+
self.enable_tunnel = to_raw_response_wrapper(
|
|
3399
|
+
devboxes.enable_tunnel,
|
|
3400
|
+
)
|
|
3296
3401
|
self.execute = to_raw_response_wrapper(
|
|
3297
3402
|
devboxes.execute,
|
|
3298
3403
|
)
|
|
@@ -3395,6 +3500,9 @@ class AsyncDevboxesResourceWithRawResponse:
|
|
|
3395
3500
|
devboxes.download_file,
|
|
3396
3501
|
AsyncBinaryAPIResponse,
|
|
3397
3502
|
)
|
|
3503
|
+
self.enable_tunnel = async_to_raw_response_wrapper(
|
|
3504
|
+
devboxes.enable_tunnel,
|
|
3505
|
+
)
|
|
3398
3506
|
self.execute = async_to_raw_response_wrapper(
|
|
3399
3507
|
devboxes.execute,
|
|
3400
3508
|
)
|
|
@@ -3497,6 +3605,9 @@ class DevboxesResourceWithStreamingResponse:
|
|
|
3497
3605
|
devboxes.download_file,
|
|
3498
3606
|
StreamedBinaryAPIResponse,
|
|
3499
3607
|
)
|
|
3608
|
+
self.enable_tunnel = to_streamed_response_wrapper(
|
|
3609
|
+
devboxes.enable_tunnel,
|
|
3610
|
+
)
|
|
3500
3611
|
self.execute = to_streamed_response_wrapper(
|
|
3501
3612
|
devboxes.execute,
|
|
3502
3613
|
)
|
|
@@ -3599,6 +3710,9 @@ class AsyncDevboxesResourceWithStreamingResponse:
|
|
|
3599
3710
|
devboxes.download_file,
|
|
3600
3711
|
AsyncStreamedBinaryAPIResponse,
|
|
3601
3712
|
)
|
|
3713
|
+
self.enable_tunnel = async_to_streamed_response_wrapper(
|
|
3714
|
+
devboxes.enable_tunnel,
|
|
3715
|
+
)
|
|
3602
3716
|
self.execute = async_to_streamed_response_wrapper(
|
|
3603
3717
|
devboxes.execute,
|
|
3604
3718
|
)
|
|
@@ -22,6 +22,7 @@ from ..types import (
|
|
|
22
22
|
NetworkPolicyListParams,
|
|
23
23
|
DevboxCreateTunnelParams,
|
|
24
24
|
DevboxDownloadFileParams,
|
|
25
|
+
DevboxEnableTunnelParams,
|
|
25
26
|
DevboxRemoveTunnelParams,
|
|
26
27
|
DevboxSnapshotDiskParams,
|
|
27
28
|
NetworkPolicyCreateParams,
|
|
@@ -121,6 +122,10 @@ class SDKDevboxCreateTunnelParams(DevboxCreateTunnelParams, LongRequestOptions):
|
|
|
121
122
|
pass
|
|
122
123
|
|
|
123
124
|
|
|
125
|
+
class SDKDevboxEnableTunnelParams(DevboxEnableTunnelParams, LongRequestOptions):
|
|
126
|
+
pass
|
|
127
|
+
|
|
128
|
+
|
|
124
129
|
class SDKDevboxRemoveTunnelParams(DevboxRemoveTunnelParams, LongRequestOptions):
|
|
125
130
|
pass
|
|
126
131
|
|
{runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/sdk/async_devbox.py
RENAMED
|
@@ -10,6 +10,7 @@ from typing_extensions import Unpack, override
|
|
|
10
10
|
|
|
11
11
|
from ..types import (
|
|
12
12
|
DevboxView,
|
|
13
|
+
TunnelView,
|
|
13
14
|
DevboxTunnelView,
|
|
14
15
|
DevboxExecutionDetailView,
|
|
15
16
|
DevboxCreateSSHKeyResponse,
|
|
@@ -24,6 +25,7 @@ from ._types import (
|
|
|
24
25
|
SDKDevboxUploadFileParams,
|
|
25
26
|
SDKDevboxCreateTunnelParams,
|
|
26
27
|
SDKDevboxDownloadFileParams,
|
|
28
|
+
SDKDevboxEnableTunnelParams,
|
|
27
29
|
SDKDevboxExecuteAsyncParams,
|
|
28
30
|
SDKDevboxRemoveTunnelParams,
|
|
29
31
|
SDKDevboxSnapshotDiskParams,
|
|
@@ -731,7 +733,9 @@ class AsyncNetworkInterface:
|
|
|
731
733
|
self,
|
|
732
734
|
**params: Unpack[SDKDevboxCreateTunnelParams],
|
|
733
735
|
) -> DevboxTunnelView:
|
|
734
|
-
"""Create a
|
|
736
|
+
"""[Deprecated] Create a legacy tunnel to expose a devbox port publicly.
|
|
737
|
+
|
|
738
|
+
Use :meth:`enable_tunnel` instead for the V2 tunnel API.
|
|
735
739
|
|
|
736
740
|
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateTunnelParams` for available parameters
|
|
737
741
|
:return: Details about the public endpoint
|
|
@@ -748,6 +752,30 @@ class AsyncNetworkInterface:
|
|
|
748
752
|
**params,
|
|
749
753
|
)
|
|
750
754
|
|
|
755
|
+
async def enable_tunnel(
|
|
756
|
+
self,
|
|
757
|
+
**params: Unpack[SDKDevboxEnableTunnelParams],
|
|
758
|
+
) -> TunnelView:
|
|
759
|
+
"""Enable a V2 tunnel for secure HTTP access to the devbox.
|
|
760
|
+
|
|
761
|
+
V2 tunnels provide encrypted URL-based access without exposing internal IDs.
|
|
762
|
+
Each devbox can have one tunnel. The tunnel URL format is:
|
|
763
|
+
``https://{port}-{tunnel_key}.tunnel.runloop.ai``
|
|
764
|
+
|
|
765
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxEnableTunnelParams` for available parameters
|
|
766
|
+
:return: Tunnel details including the tunnel key for constructing URLs
|
|
767
|
+
:rtype: TunnelView
|
|
768
|
+
|
|
769
|
+
Example:
|
|
770
|
+
>>> tunnel = await devbox.net.enable_tunnel(auth_mode="open")
|
|
771
|
+
>>> print(f"Tunnel key: {tunnel.tunnel_key}")
|
|
772
|
+
>>> # Access via: https://8080-{tunnel.tunnel_key}.tunnel.runloop.ai
|
|
773
|
+
"""
|
|
774
|
+
return await self._devbox._client.devboxes.enable_tunnel(
|
|
775
|
+
self._devbox.id,
|
|
776
|
+
**params,
|
|
777
|
+
)
|
|
778
|
+
|
|
751
779
|
async def remove_tunnel(
|
|
752
780
|
self,
|
|
753
781
|
**params: Unpack[SDKDevboxRemoveTunnelParams],
|
|
@@ -10,6 +10,7 @@ from typing_extensions import Unpack, override
|
|
|
10
10
|
|
|
11
11
|
from ..types import (
|
|
12
12
|
DevboxView,
|
|
13
|
+
TunnelView,
|
|
13
14
|
DevboxTunnelView,
|
|
14
15
|
DevboxExecutionDetailView,
|
|
15
16
|
DevboxCreateSSHKeyResponse,
|
|
@@ -25,6 +26,7 @@ from ._types import (
|
|
|
25
26
|
SDKDevboxUploadFileParams,
|
|
26
27
|
SDKDevboxCreateTunnelParams,
|
|
27
28
|
SDKDevboxDownloadFileParams,
|
|
29
|
+
SDKDevboxEnableTunnelParams,
|
|
28
30
|
SDKDevboxExecuteAsyncParams,
|
|
29
31
|
SDKDevboxRemoveTunnelParams,
|
|
30
32
|
SDKDevboxSnapshotDiskParams,
|
|
@@ -734,7 +736,9 @@ class NetworkInterface:
|
|
|
734
736
|
self,
|
|
735
737
|
**params: Unpack[SDKDevboxCreateTunnelParams],
|
|
736
738
|
) -> DevboxTunnelView:
|
|
737
|
-
"""Create a
|
|
739
|
+
"""[Deprecated] Create a legacy tunnel to expose a devbox port publicly.
|
|
740
|
+
|
|
741
|
+
Use :meth:`enable_tunnel` instead for the V2 tunnel API.
|
|
738
742
|
|
|
739
743
|
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateTunnelParams` for available parameters
|
|
740
744
|
:return: Details about the public endpoint
|
|
@@ -751,6 +755,30 @@ class NetworkInterface:
|
|
|
751
755
|
**params,
|
|
752
756
|
)
|
|
753
757
|
|
|
758
|
+
def enable_tunnel(
|
|
759
|
+
self,
|
|
760
|
+
**params: Unpack[SDKDevboxEnableTunnelParams],
|
|
761
|
+
) -> TunnelView:
|
|
762
|
+
"""Enable a V2 tunnel for secure HTTP access to the devbox.
|
|
763
|
+
|
|
764
|
+
V2 tunnels provide encrypted URL-based access without exposing internal IDs.
|
|
765
|
+
Each devbox can have one tunnel. The tunnel URL format is:
|
|
766
|
+
``https://{port}-{tunnel_key}.tunnel.runloop.ai``
|
|
767
|
+
|
|
768
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxEnableTunnelParams` for available parameters
|
|
769
|
+
:return: Tunnel details including the tunnel key for constructing URLs
|
|
770
|
+
:rtype: :class:`~runloop_api_client.types.tunnel_view.TunnelView`
|
|
771
|
+
|
|
772
|
+
Example:
|
|
773
|
+
>>> tunnel = devbox.net.enable_tunnel(auth_mode="open")
|
|
774
|
+
>>> print(f"Tunnel key: {tunnel.tunnel_key}")
|
|
775
|
+
>>> # Access via: https://8080-{tunnel.tunnel_key}.tunnel.runloop.ai
|
|
776
|
+
"""
|
|
777
|
+
return self._devbox._client.devboxes.enable_tunnel(
|
|
778
|
+
self._devbox.id,
|
|
779
|
+
**params,
|
|
780
|
+
)
|
|
781
|
+
|
|
754
782
|
def remove_tunnel(
|
|
755
783
|
self,
|
|
756
784
|
**params: Unpack[SDKDevboxRemoveTunnelParams],
|
{runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/__init__.py
RENAMED
|
@@ -16,6 +16,7 @@ from .agent_view import AgentView as AgentView
|
|
|
16
16
|
from .devbox_view import DevboxView as DevboxView
|
|
17
17
|
from .object_view import ObjectView as ObjectView
|
|
18
18
|
from .secret_view import SecretView as SecretView
|
|
19
|
+
from .tunnel_view import TunnelView as TunnelView
|
|
19
20
|
from .input_context import InputContext as InputContext
|
|
20
21
|
from .scenario_view import ScenarioView as ScenarioView
|
|
21
22
|
from .benchmark_view import BenchmarkView as BenchmarkView
|
|
@@ -91,6 +92,7 @@ from .scenario_environment_param import ScenarioEnvironmentParam as ScenarioEnvi
|
|
|
91
92
|
from .benchmark_job_create_params import BenchmarkJobCreateParams as BenchmarkJobCreateParams
|
|
92
93
|
from .devbox_create_tunnel_params import DevboxCreateTunnelParams as DevboxCreateTunnelParams
|
|
93
94
|
from .devbox_download_file_params import DevboxDownloadFileParams as DevboxDownloadFileParams
|
|
95
|
+
from .devbox_enable_tunnel_params import DevboxEnableTunnelParams as DevboxEnableTunnelParams
|
|
94
96
|
from .devbox_execute_async_params import DevboxExecuteAsyncParams as DevboxExecuteAsyncParams
|
|
95
97
|
from .devbox_remove_tunnel_params import DevboxRemoveTunnelParams as DevboxRemoveTunnelParams
|
|
96
98
|
from .devbox_snapshot_disk_params import DevboxSnapshotDiskParams as DevboxSnapshotDiskParams
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Optional
|
|
6
|
+
from typing_extensions import Literal, TypedDict
|
|
7
|
+
|
|
8
|
+
__all__ = ["DevboxEnableTunnelParams"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class DevboxEnableTunnelParams(TypedDict, total=False):
|
|
12
|
+
auth_mode: Optional[Literal["open", "authenticated"]]
|
|
13
|
+
"""Authentication mode for the tunnel. Defaults to 'public' if not specified."""
|
{runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/src/runloop_api_client/types/devbox_view.py
RENAMED
|
@@ -4,9 +4,10 @@ from typing import Dict, List, Optional
|
|
|
4
4
|
from typing_extensions import Literal
|
|
5
5
|
|
|
6
6
|
from .._models import BaseModel
|
|
7
|
+
from .tunnel_view import TunnelView
|
|
7
8
|
from .shared.launch_parameters import LaunchParameters
|
|
8
9
|
|
|
9
|
-
__all__ = ["DevboxView", "StateTransition", "GatewaySpecs"
|
|
10
|
+
__all__ = ["DevboxView", "StateTransition", "GatewaySpecs"]
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class StateTransition(BaseModel):
|
|
@@ -38,30 +39,6 @@ class GatewaySpecs(BaseModel):
|
|
|
38
39
|
"""The ID of the secret containing the credential."""
|
|
39
40
|
|
|
40
41
|
|
|
41
|
-
class Tunnel(BaseModel):
|
|
42
|
-
"""
|
|
43
|
-
V2 tunnel information if a tunnel was created at launch time or via the createTunnel API.
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
auth_mode: Literal["public_", "authenticated"]
|
|
47
|
-
"""The authentication mode for the tunnel."""
|
|
48
|
-
|
|
49
|
-
create_time_ms: int
|
|
50
|
-
"""Creation time of the tunnel (Unix timestamp milliseconds)."""
|
|
51
|
-
|
|
52
|
-
tunnel_key: str
|
|
53
|
-
"""The encrypted tunnel key used to construct the tunnel URL.
|
|
54
|
-
|
|
55
|
-
URL format: https://{port}-{tunnel_key}.tunnel.runloop.{domain}
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
auth_token: Optional[str] = None
|
|
59
|
-
"""Bearer token for tunnel authentication.
|
|
60
|
-
|
|
61
|
-
Only present when auth_mode is 'authenticated'.
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
|
|
65
42
|
class DevboxView(BaseModel):
|
|
66
43
|
"""A Devbox represents a virtual development environment.
|
|
67
44
|
|
|
@@ -137,7 +114,7 @@ class DevboxView(BaseModel):
|
|
|
137
114
|
Snapshot.
|
|
138
115
|
"""
|
|
139
116
|
|
|
140
|
-
tunnel: Optional[
|
|
117
|
+
tunnel: Optional[TunnelView] = None
|
|
141
118
|
"""
|
|
142
119
|
V2 tunnel information if a tunnel was created at launch time or via the
|
|
143
120
|
createTunnel API.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from typing_extensions import Literal
|
|
5
|
+
|
|
6
|
+
from .._models import BaseModel
|
|
7
|
+
|
|
8
|
+
__all__ = ["TunnelView"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TunnelView(BaseModel):
|
|
12
|
+
"""A V2 tunnel provides secure HTTP access to services running on a Devbox.
|
|
13
|
+
|
|
14
|
+
Tunnels allow external clients to reach web servers, APIs, or other HTTP services running inside a Devbox without requiring direct network access. Each tunnel is uniquely identified by an encrypted tunnel_key and can be configured for either open (public) or authenticated access.
|
|
15
|
+
Usage: https://{port}-{tunnel_key}.tunnel.runloop.ai
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
auth_mode: Literal["open", "authenticated"]
|
|
19
|
+
"""The authentication mode for the tunnel."""
|
|
20
|
+
|
|
21
|
+
create_time_ms: int
|
|
22
|
+
"""Creation time of the tunnel (Unix timestamp milliseconds)."""
|
|
23
|
+
|
|
24
|
+
tunnel_key: str
|
|
25
|
+
"""The encrypted tunnel key used to construct the tunnel URL.
|
|
26
|
+
|
|
27
|
+
URL format: https://{port}-{tunnel_key}.tunnel.runloop.{domain}
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
auth_token: Optional[str] = None
|
|
31
|
+
"""Bearer token for tunnel authentication.
|
|
32
|
+
|
|
33
|
+
Only present when auth_mode is 'authenticated'.
|
|
34
|
+
"""
|
|
@@ -14,6 +14,7 @@ from tests.utils import assert_matches_type
|
|
|
14
14
|
from runloop_api_client import Runloop, AsyncRunloop
|
|
15
15
|
from runloop_api_client.types import (
|
|
16
16
|
DevboxView,
|
|
17
|
+
TunnelView,
|
|
17
18
|
DevboxTunnelView,
|
|
18
19
|
DevboxSnapshotView,
|
|
19
20
|
DevboxExecutionDetailView,
|
|
@@ -427,6 +428,52 @@ class TestDevboxes:
|
|
|
427
428
|
path="path",
|
|
428
429
|
)
|
|
429
430
|
|
|
431
|
+
@parametrize
|
|
432
|
+
def test_method_enable_tunnel(self, client: Runloop) -> None:
|
|
433
|
+
devbox = client.devboxes.enable_tunnel(
|
|
434
|
+
id="id",
|
|
435
|
+
)
|
|
436
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
437
|
+
|
|
438
|
+
@parametrize
|
|
439
|
+
def test_method_enable_tunnel_with_all_params(self, client: Runloop) -> None:
|
|
440
|
+
devbox = client.devboxes.enable_tunnel(
|
|
441
|
+
id="id",
|
|
442
|
+
auth_mode="open",
|
|
443
|
+
)
|
|
444
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
445
|
+
|
|
446
|
+
@parametrize
|
|
447
|
+
def test_raw_response_enable_tunnel(self, client: Runloop) -> None:
|
|
448
|
+
response = client.devboxes.with_raw_response.enable_tunnel(
|
|
449
|
+
id="id",
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
assert response.is_closed is True
|
|
453
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
454
|
+
devbox = response.parse()
|
|
455
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
456
|
+
|
|
457
|
+
@parametrize
|
|
458
|
+
def test_streaming_response_enable_tunnel(self, client: Runloop) -> None:
|
|
459
|
+
with client.devboxes.with_streaming_response.enable_tunnel(
|
|
460
|
+
id="id",
|
|
461
|
+
) as response:
|
|
462
|
+
assert not response.is_closed
|
|
463
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
464
|
+
|
|
465
|
+
devbox = response.parse()
|
|
466
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
467
|
+
|
|
468
|
+
assert cast(Any, response.is_closed) is True
|
|
469
|
+
|
|
470
|
+
@parametrize
|
|
471
|
+
def test_path_params_enable_tunnel(self, client: Runloop) -> None:
|
|
472
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
473
|
+
client.devboxes.with_raw_response.enable_tunnel(
|
|
474
|
+
id="",
|
|
475
|
+
)
|
|
476
|
+
|
|
430
477
|
@parametrize
|
|
431
478
|
def test_method_execute(self, client: Runloop) -> None:
|
|
432
479
|
devbox = client.devboxes.execute(
|
|
@@ -1993,6 +2040,52 @@ class TestAsyncDevboxes:
|
|
|
1993
2040
|
path="path",
|
|
1994
2041
|
)
|
|
1995
2042
|
|
|
2043
|
+
@parametrize
|
|
2044
|
+
async def test_method_enable_tunnel(self, async_client: AsyncRunloop) -> None:
|
|
2045
|
+
devbox = await async_client.devboxes.enable_tunnel(
|
|
2046
|
+
id="id",
|
|
2047
|
+
)
|
|
2048
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
2049
|
+
|
|
2050
|
+
@parametrize
|
|
2051
|
+
async def test_method_enable_tunnel_with_all_params(self, async_client: AsyncRunloop) -> None:
|
|
2052
|
+
devbox = await async_client.devboxes.enable_tunnel(
|
|
2053
|
+
id="id",
|
|
2054
|
+
auth_mode="open",
|
|
2055
|
+
)
|
|
2056
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
2057
|
+
|
|
2058
|
+
@parametrize
|
|
2059
|
+
async def test_raw_response_enable_tunnel(self, async_client: AsyncRunloop) -> None:
|
|
2060
|
+
response = await async_client.devboxes.with_raw_response.enable_tunnel(
|
|
2061
|
+
id="id",
|
|
2062
|
+
)
|
|
2063
|
+
|
|
2064
|
+
assert response.is_closed is True
|
|
2065
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
2066
|
+
devbox = await response.parse()
|
|
2067
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
2068
|
+
|
|
2069
|
+
@parametrize
|
|
2070
|
+
async def test_streaming_response_enable_tunnel(self, async_client: AsyncRunloop) -> None:
|
|
2071
|
+
async with async_client.devboxes.with_streaming_response.enable_tunnel(
|
|
2072
|
+
id="id",
|
|
2073
|
+
) as response:
|
|
2074
|
+
assert not response.is_closed
|
|
2075
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
2076
|
+
|
|
2077
|
+
devbox = await response.parse()
|
|
2078
|
+
assert_matches_type(TunnelView, devbox, path=["response"])
|
|
2079
|
+
|
|
2080
|
+
assert cast(Any, response.is_closed) is True
|
|
2081
|
+
|
|
2082
|
+
@parametrize
|
|
2083
|
+
async def test_path_params_enable_tunnel(self, async_client: AsyncRunloop) -> None:
|
|
2084
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
2085
|
+
await async_client.devboxes.with_raw_response.enable_tunnel(
|
|
2086
|
+
id="",
|
|
2087
|
+
)
|
|
2088
|
+
|
|
1996
2089
|
@parametrize
|
|
1997
2090
|
async def test_method_execute(self, async_client: AsyncRunloop) -> None:
|
|
1998
2091
|
devbox = await async_client.devboxes.execute(
|
{runloop_api_client-1.4.0 → runloop_api_client-1.5.1}/tests/smoketests/sdk/test_async_devbox.py
RENAMED
|
@@ -458,6 +458,53 @@ class TestAsyncDevboxNetworking:
|
|
|
458
458
|
finally:
|
|
459
459
|
await devbox.shutdown()
|
|
460
460
|
|
|
461
|
+
@pytest.mark.timeout(TWO_MINUTE_TIMEOUT)
|
|
462
|
+
async def test_create_with_tunnel_param(self, async_sdk_client: AsyncRunloopSDK) -> None:
|
|
463
|
+
"""Test creating a devbox with tunnel configuration in create params."""
|
|
464
|
+
devbox = await async_sdk_client.devbox.create(
|
|
465
|
+
name=unique_name("sdk-async-devbox-tunnel-param"),
|
|
466
|
+
launch_parameters={"resource_size_request": "SMALL", "keep_alive_time_seconds": 60 * 5},
|
|
467
|
+
tunnel={"auth_mode": "open"},
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
try:
|
|
471
|
+
# Verify devbox is running
|
|
472
|
+
info = await devbox.get_info()
|
|
473
|
+
assert info.status == "running"
|
|
474
|
+
|
|
475
|
+
# Verify tunnel was created at launch
|
|
476
|
+
assert info.tunnel is not None
|
|
477
|
+
assert info.tunnel.tunnel_key is not None
|
|
478
|
+
assert info.tunnel.auth_mode is not None
|
|
479
|
+
finally:
|
|
480
|
+
await devbox.shutdown()
|
|
481
|
+
|
|
482
|
+
@pytest.mark.timeout(TWO_MINUTE_TIMEOUT)
|
|
483
|
+
async def test_enable_tunnel(self, async_sdk_client: AsyncRunloopSDK) -> None:
|
|
484
|
+
"""Test enabling a V2 tunnel on an existing devbox."""
|
|
485
|
+
devbox = await async_sdk_client.devbox.create(
|
|
486
|
+
name=unique_name("sdk-async-devbox-enable-tunnel"),
|
|
487
|
+
launch_parameters={"resource_size_request": "SMALL", "keep_alive_time_seconds": 60 * 5},
|
|
488
|
+
)
|
|
489
|
+
|
|
490
|
+
try:
|
|
491
|
+
# Verify no tunnel exists initially
|
|
492
|
+
info = await devbox.get_info()
|
|
493
|
+
assert info.tunnel is None
|
|
494
|
+
|
|
495
|
+
# Enable tunnel using the V2 API via SDK
|
|
496
|
+
tunnel = await devbox.net.enable_tunnel(auth_mode="open")
|
|
497
|
+
assert tunnel is not None
|
|
498
|
+
assert tunnel.tunnel_key is not None
|
|
499
|
+
assert tunnel.auth_mode is not None
|
|
500
|
+
|
|
501
|
+
# Verify tunnel is now present in devbox info
|
|
502
|
+
info = await devbox.get_info()
|
|
503
|
+
assert info.tunnel is not None
|
|
504
|
+
assert info.tunnel.tunnel_key == tunnel.tunnel_key
|
|
505
|
+
finally:
|
|
506
|
+
await devbox.shutdown()
|
|
507
|
+
|
|
461
508
|
|
|
462
509
|
class TestAsyncDevboxCreationMethods:
|
|
463
510
|
"""Test various async devbox creation methods."""
|