runloop-api-client 1.9.0__tar.gz → 1.10.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.
- runloop_api_client-1.10.0/.release-please-manifest.json +3 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/CHANGELOG.md +8 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/PKG-INFO +1 -1
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/pyproject.toml +1 -1
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/__init__.py +8 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/_types.py +15 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_.py +63 -0
- runloop_api_client-1.10.0/src/runloop_api_client/sdk/async_mcp_config.py +95 -0
- runloop_api_client-1.10.0/src/runloop_api_client/sdk/mcp_config.py +95 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/sync.py +63 -0
- runloop_api_client-1.10.0/tests/smoketests/sdk/test_mcp_config.py +113 -0
- runloop_api_client-1.9.0/.release-please-manifest.json +0 -3
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/.gitignore +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/CONTRIBUTING.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/LICENSE +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/README-SDK.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/README.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/SECURITY.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/api.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/bin/check-release-environment +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/bin/publish-pypi +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/examples/.keep +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/release-please-config.json +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/requirements-dev.lock +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_base_client.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_models.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_types.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_compat.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_json.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/_utils/_validation.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/_ignore.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/context_loader.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/polling.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/agents.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/benchmarks.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/gateway_configs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/mcp_configs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/network_policies.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/objects.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/repositories.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/resources/secrets.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_devbox.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/devbox.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/execution.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/agent_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/agent_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/agent_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/agent_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_download_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/object_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_agents.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_benchmark_jobs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_benchmark_runs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_devboxes.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_gateway_configs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_mcp_configs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_network_policies.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_objects.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sample_file.txt +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/test_core.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/test_core.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/devbox/test_streaming.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_benchmark_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_execution.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_execution_result.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_ops.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_scenario_builder.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_scenario_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_benchmark_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_execution.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_execution_result.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_helpers.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_ops.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_scenario_builder.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_scenario_run.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/README.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/README.md +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/__init__.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/conftest.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_devbox.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_devbox.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_sdk.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/test_blueprints.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/test_devboxes.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/test_executions.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/test_snapshots.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/smoketests/utils.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_client.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_extract_files.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_files.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_models.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_polling.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_qs.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_required_args.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_response.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_streaming.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_transform.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_utils/test_context_loader.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_utils/test_json.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/tests/utils.py +0 -0
- {runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/uv.lock +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.10.0 (2026-02-26)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v1.9.0...v1.10.0](https://github.com/runloopai/api-client-python/compare/v1.9.0...v1.10.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* add MCP Hub to sdk ([#742](https://github.com/runloopai/api-client-python/issues/742)) ([e9f6756](https://github.com/runloopai/api-client-python/commit/e9f6756d5ffdd1316d8155f82ea7075d6e8daa5c))
|
|
10
|
+
|
|
3
11
|
## 1.9.0 (2026-02-25)
|
|
4
12
|
|
|
5
13
|
Full Changelog: [v1.8.0...v1.9.0](https://github.com/runloopai/api-client-python/compare/v1.8.0...v1.9.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.0
|
|
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
|
{runloop_api_client-1.9.0 → runloop_api_client-1.10.0}/src/runloop_api_client/sdk/__init__.py
RENAMED
|
@@ -14,6 +14,7 @@ from .sync import (
|
|
|
14
14
|
SnapshotOps,
|
|
15
15
|
BenchmarkOps,
|
|
16
16
|
BlueprintOps,
|
|
17
|
+
McpConfigOps,
|
|
17
18
|
GatewayConfigOps,
|
|
18
19
|
NetworkPolicyOps,
|
|
19
20
|
StorageObjectOps,
|
|
@@ -29,6 +30,7 @@ from .async_ import (
|
|
|
29
30
|
AsyncSnapshotOps,
|
|
30
31
|
AsyncBenchmarkOps,
|
|
31
32
|
AsyncBlueprintOps,
|
|
33
|
+
AsyncMcpConfigOps,
|
|
32
34
|
AsyncGatewayConfigOps,
|
|
33
35
|
AsyncNetworkPolicyOps,
|
|
34
36
|
AsyncStorageObjectOps,
|
|
@@ -40,6 +42,7 @@ from .snapshot import Snapshot
|
|
|
40
42
|
from .benchmark import Benchmark
|
|
41
43
|
from .blueprint import Blueprint
|
|
42
44
|
from .execution import Execution
|
|
45
|
+
from .mcp_config import McpConfig
|
|
43
46
|
from .async_agent import AsyncAgent
|
|
44
47
|
from .async_devbox import AsyncDevbox, AsyncNamedShell
|
|
45
48
|
from .async_scorer import AsyncScorer
|
|
@@ -53,6 +56,7 @@ from .storage_object import StorageObject
|
|
|
53
56
|
from .async_benchmark import AsyncBenchmark
|
|
54
57
|
from .async_blueprint import AsyncBlueprint
|
|
55
58
|
from .async_execution import AsyncExecution
|
|
59
|
+
from .async_mcp_config import AsyncMcpConfig
|
|
56
60
|
from .execution_result import ExecutionResult
|
|
57
61
|
from .scenario_builder import ScenarioBuilder
|
|
58
62
|
from .async_scenario_run import AsyncScenarioRun
|
|
@@ -86,6 +90,8 @@ __all__ = [
|
|
|
86
90
|
"AsyncStorageObjectOps",
|
|
87
91
|
"NetworkPolicyOps",
|
|
88
92
|
"AsyncNetworkPolicyOps",
|
|
93
|
+
"McpConfigOps",
|
|
94
|
+
"AsyncMcpConfigOps",
|
|
89
95
|
"GatewayConfigOps",
|
|
90
96
|
"AsyncGatewayConfigOps",
|
|
91
97
|
# Resource classes
|
|
@@ -118,6 +124,8 @@ __all__ = [
|
|
|
118
124
|
"AsyncStorageObject",
|
|
119
125
|
"NetworkPolicy",
|
|
120
126
|
"AsyncNetworkPolicy",
|
|
127
|
+
"McpConfig",
|
|
128
|
+
"AsyncMcpConfig",
|
|
121
129
|
"GatewayConfig",
|
|
122
130
|
"AsyncGatewayConfig",
|
|
123
131
|
"NamedShell",
|
|
@@ -13,11 +13,14 @@ from ..types import (
|
|
|
13
13
|
ScenarioListParams,
|
|
14
14
|
BenchmarkListParams,
|
|
15
15
|
BlueprintListParams,
|
|
16
|
+
McpConfigListParams,
|
|
16
17
|
ObjectDownloadParams,
|
|
17
18
|
ScenarioUpdateParams,
|
|
18
19
|
BenchmarkCreateParams,
|
|
19
20
|
BenchmarkUpdateParams,
|
|
20
21
|
BlueprintCreateParams,
|
|
22
|
+
McpConfigCreateParams,
|
|
23
|
+
McpConfigUpdateParams,
|
|
21
24
|
DevboxUploadFileParams,
|
|
22
25
|
GatewayConfigListParams,
|
|
23
26
|
NetworkPolicyListParams,
|
|
@@ -266,6 +269,18 @@ class SDKNetworkPolicyUpdateParams(NetworkPolicyUpdateParams, LongRequestOptions
|
|
|
266
269
|
pass
|
|
267
270
|
|
|
268
271
|
|
|
272
|
+
class SDKMcpConfigCreateParams(McpConfigCreateParams, LongRequestOptions):
|
|
273
|
+
pass
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class SDKMcpConfigListParams(McpConfigListParams, BaseRequestOptions):
|
|
277
|
+
pass
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class SDKMcpConfigUpdateParams(McpConfigUpdateParams, LongRequestOptions):
|
|
281
|
+
pass
|
|
282
|
+
|
|
283
|
+
|
|
269
284
|
class SDKGatewayConfigCreateParams(GatewayConfigCreateParams, LongRequestOptions):
|
|
270
285
|
pass
|
|
271
286
|
|
|
@@ -23,8 +23,10 @@ from ._types import (
|
|
|
23
23
|
SDKScorerCreateParams,
|
|
24
24
|
SDKBenchmarkListParams,
|
|
25
25
|
SDKBlueprintListParams,
|
|
26
|
+
SDKMcpConfigListParams,
|
|
26
27
|
SDKBenchmarkCreateParams,
|
|
27
28
|
SDKBlueprintCreateParams,
|
|
29
|
+
SDKMcpConfigCreateParams,
|
|
28
30
|
SDKDiskSnapshotListParams,
|
|
29
31
|
SDKGatewayConfigListParams,
|
|
30
32
|
SDKNetworkPolicyListParams,
|
|
@@ -42,6 +44,7 @@ from .async_scenario import AsyncScenario
|
|
|
42
44
|
from .async_snapshot import AsyncSnapshot
|
|
43
45
|
from .async_benchmark import AsyncBenchmark
|
|
44
46
|
from .async_blueprint import AsyncBlueprint
|
|
47
|
+
from .async_mcp_config import AsyncMcpConfig
|
|
45
48
|
from ..lib.context_loader import TarFilter, build_directory_tar
|
|
46
49
|
from .async_gateway_config import AsyncGatewayConfig
|
|
47
50
|
from .async_network_policy import AsyncNetworkPolicy
|
|
@@ -1011,6 +1014,62 @@ class AsyncGatewayConfigOps:
|
|
|
1011
1014
|
return [AsyncGatewayConfig(self._client, item.id) for item in page.gateway_configs]
|
|
1012
1015
|
|
|
1013
1016
|
|
|
1017
|
+
class AsyncMcpConfigOps:
|
|
1018
|
+
"""High-level async manager for creating and managing MCP configurations.
|
|
1019
|
+
|
|
1020
|
+
Accessed via ``runloop.mcp_config`` from :class:`AsyncRunloopSDK`, provides methods
|
|
1021
|
+
to create, retrieve, update, delete, and list MCP configs. MCP configs define
|
|
1022
|
+
how to connect to upstream MCP (Model Context Protocol) servers, specifying the
|
|
1023
|
+
target endpoint and which tools are allowed.
|
|
1024
|
+
|
|
1025
|
+
Example:
|
|
1026
|
+
>>> runloop = AsyncRunloopSDK()
|
|
1027
|
+
>>> mcp_config = await runloop.mcp_config.create(
|
|
1028
|
+
... name="my-mcp-server",
|
|
1029
|
+
... endpoint="https://mcp.example.com",
|
|
1030
|
+
... allowed_tools=["*"],
|
|
1031
|
+
... )
|
|
1032
|
+
"""
|
|
1033
|
+
|
|
1034
|
+
def __init__(self, client: AsyncRunloop) -> None:
|
|
1035
|
+
"""Initialize AsyncMcpConfigOps.
|
|
1036
|
+
|
|
1037
|
+
:param client: AsyncRunloop client instance
|
|
1038
|
+
:type client: AsyncRunloop
|
|
1039
|
+
"""
|
|
1040
|
+
self._client = client
|
|
1041
|
+
|
|
1042
|
+
async def create(self, **params: Unpack[SDKMcpConfigCreateParams]) -> AsyncMcpConfig:
|
|
1043
|
+
"""Create a new MCP config.
|
|
1044
|
+
|
|
1045
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigCreateParams` for available parameters
|
|
1046
|
+
:return: The newly created MCP config
|
|
1047
|
+
:rtype: AsyncMcpConfig
|
|
1048
|
+
"""
|
|
1049
|
+
response = await self._client.mcp_configs.create(**params)
|
|
1050
|
+
return AsyncMcpConfig(self._client, response.id)
|
|
1051
|
+
|
|
1052
|
+
def from_id(self, mcp_config_id: str) -> AsyncMcpConfig:
|
|
1053
|
+
"""Get an AsyncMcpConfig instance for an existing MCP config ID.
|
|
1054
|
+
|
|
1055
|
+
:param mcp_config_id: ID of the MCP config
|
|
1056
|
+
:type mcp_config_id: str
|
|
1057
|
+
:return: AsyncMcpConfig instance for the given ID
|
|
1058
|
+
:rtype: AsyncMcpConfig
|
|
1059
|
+
"""
|
|
1060
|
+
return AsyncMcpConfig(self._client, mcp_config_id)
|
|
1061
|
+
|
|
1062
|
+
async def list(self, **params: Unpack[SDKMcpConfigListParams]) -> list[AsyncMcpConfig]:
|
|
1063
|
+
"""List all MCP configs, optionally filtered by parameters.
|
|
1064
|
+
|
|
1065
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigListParams` for available parameters
|
|
1066
|
+
:return: List of MCP configs
|
|
1067
|
+
:rtype: list[AsyncMcpConfig]
|
|
1068
|
+
"""
|
|
1069
|
+
page = await self._client.mcp_configs.list(**params)
|
|
1070
|
+
return [AsyncMcpConfig(self._client, item.id) for item in page.mcp_configs]
|
|
1071
|
+
|
|
1072
|
+
|
|
1014
1073
|
class AsyncRunloopSDK:
|
|
1015
1074
|
"""High-level asynchronous entry point for the Runloop SDK.
|
|
1016
1075
|
|
|
@@ -1040,6 +1099,8 @@ class AsyncRunloopSDK:
|
|
|
1040
1099
|
:vartype network_policy: AsyncNetworkPolicyOps
|
|
1041
1100
|
:ivar gateway_config: High-level async interface for gateway config management
|
|
1042
1101
|
:vartype gateway_config: AsyncGatewayConfigOps
|
|
1102
|
+
:ivar mcp_config: High-level async interface for MCP config management
|
|
1103
|
+
:vartype mcp_config: AsyncMcpConfigOps
|
|
1043
1104
|
|
|
1044
1105
|
Example:
|
|
1045
1106
|
>>> runloop = AsyncRunloopSDK() # Uses RUNLOOP_API_KEY env var
|
|
@@ -1055,6 +1116,7 @@ class AsyncRunloopSDK:
|
|
|
1055
1116
|
devbox: AsyncDevboxOps
|
|
1056
1117
|
blueprint: AsyncBlueprintOps
|
|
1057
1118
|
gateway_config: AsyncGatewayConfigOps
|
|
1119
|
+
mcp_config: AsyncMcpConfigOps
|
|
1058
1120
|
network_policy: AsyncNetworkPolicyOps
|
|
1059
1121
|
scenario: AsyncScenarioOps
|
|
1060
1122
|
scorer: AsyncScorerOps
|
|
@@ -1104,6 +1166,7 @@ class AsyncRunloopSDK:
|
|
|
1104
1166
|
self.devbox = AsyncDevboxOps(self.api)
|
|
1105
1167
|
self.blueprint = AsyncBlueprintOps(self.api)
|
|
1106
1168
|
self.gateway_config = AsyncGatewayConfigOps(self.api)
|
|
1169
|
+
self.mcp_config = AsyncMcpConfigOps(self.api)
|
|
1107
1170
|
self.network_policy = AsyncNetworkPolicyOps(self.api)
|
|
1108
1171
|
self.scenario = AsyncScenarioOps(self.api)
|
|
1109
1172
|
self.scorer = AsyncScorerOps(self.api)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""McpConfig resource class for asynchronous operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Unpack, override
|
|
6
|
+
|
|
7
|
+
from ._types import BaseRequestOptions, LongRequestOptions, SDKMcpConfigUpdateParams
|
|
8
|
+
from .._client import AsyncRunloop
|
|
9
|
+
from ..types.mcp_config_view import McpConfigView
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AsyncMcpConfig:
|
|
13
|
+
"""Asynchronous wrapper around an MCP config resource.
|
|
14
|
+
|
|
15
|
+
MCP configs define how to connect to upstream MCP (Model Context Protocol) servers.
|
|
16
|
+
They specify the target endpoint and which tools are allowed. Use with devboxes to
|
|
17
|
+
securely connect to MCP servers.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
>>> runloop = AsyncRunloopSDK()
|
|
21
|
+
>>> mcp_config = await runloop.mcp_config.create(
|
|
22
|
+
... name="my-mcp-server",
|
|
23
|
+
... endpoint="https://mcp.example.com",
|
|
24
|
+
... allowed_tools=["*"],
|
|
25
|
+
... )
|
|
26
|
+
>>> info = await mcp_config.get_info()
|
|
27
|
+
>>> print(f"MCP Config: {info.name}")
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
client: AsyncRunloop,
|
|
33
|
+
mcp_config_id: str,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Initialize the wrapper.
|
|
36
|
+
|
|
37
|
+
:param client: Generated AsyncRunloop client
|
|
38
|
+
:type client: AsyncRunloop
|
|
39
|
+
:param mcp_config_id: McpConfig ID returned by the API
|
|
40
|
+
:type mcp_config_id: str
|
|
41
|
+
"""
|
|
42
|
+
self._client = client
|
|
43
|
+
self._id = mcp_config_id
|
|
44
|
+
|
|
45
|
+
@override
|
|
46
|
+
def __repr__(self) -> str:
|
|
47
|
+
return f"<AsyncMcpConfig id={self._id!r}>"
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def id(self) -> str:
|
|
51
|
+
"""Return the MCP config ID.
|
|
52
|
+
|
|
53
|
+
:return: Unique MCP config ID
|
|
54
|
+
:rtype: str
|
|
55
|
+
"""
|
|
56
|
+
return self._id
|
|
57
|
+
|
|
58
|
+
async def get_info(
|
|
59
|
+
self,
|
|
60
|
+
**options: Unpack[BaseRequestOptions],
|
|
61
|
+
) -> McpConfigView:
|
|
62
|
+
"""Retrieve the latest MCP config details.
|
|
63
|
+
|
|
64
|
+
:param options: Optional request configuration
|
|
65
|
+
:return: API response describing the MCP config
|
|
66
|
+
:rtype: McpConfigView
|
|
67
|
+
"""
|
|
68
|
+
return await self._client.mcp_configs.retrieve(
|
|
69
|
+
self._id,
|
|
70
|
+
**options,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
async def update(self, **params: Unpack[SDKMcpConfigUpdateParams]) -> McpConfigView:
|
|
74
|
+
"""Update the MCP config.
|
|
75
|
+
|
|
76
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigUpdateParams` for available parameters
|
|
77
|
+
:return: Updated MCP config view
|
|
78
|
+
:rtype: McpConfigView
|
|
79
|
+
"""
|
|
80
|
+
return await self._client.mcp_configs.update(self._id, **params)
|
|
81
|
+
|
|
82
|
+
async def delete(
|
|
83
|
+
self,
|
|
84
|
+
**options: Unpack[LongRequestOptions],
|
|
85
|
+
) -> McpConfigView:
|
|
86
|
+
"""Delete the MCP config. This action is irreversible.
|
|
87
|
+
|
|
88
|
+
:param options: Optional long-running request configuration
|
|
89
|
+
:return: API response acknowledging deletion
|
|
90
|
+
:rtype: McpConfigView
|
|
91
|
+
"""
|
|
92
|
+
return await self._client.mcp_configs.delete(
|
|
93
|
+
self._id,
|
|
94
|
+
**options,
|
|
95
|
+
)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""McpConfig resource class for synchronous operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Unpack, override
|
|
6
|
+
|
|
7
|
+
from ._types import BaseRequestOptions, LongRequestOptions, SDKMcpConfigUpdateParams
|
|
8
|
+
from .._client import Runloop
|
|
9
|
+
from ..types.mcp_config_view import McpConfigView
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class McpConfig:
|
|
13
|
+
"""Synchronous wrapper around an MCP config resource.
|
|
14
|
+
|
|
15
|
+
MCP configs define how to connect to upstream MCP (Model Context Protocol) servers.
|
|
16
|
+
They specify the target endpoint and which tools are allowed. Use with devboxes to
|
|
17
|
+
securely connect to MCP servers.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
>>> runloop = RunloopSDK()
|
|
21
|
+
>>> mcp_config = runloop.mcp_config.create(
|
|
22
|
+
... name="my-mcp-server",
|
|
23
|
+
... endpoint="https://mcp.example.com",
|
|
24
|
+
... allowed_tools=["*"],
|
|
25
|
+
... )
|
|
26
|
+
>>> info = mcp_config.get_info()
|
|
27
|
+
>>> print(f"MCP Config: {info.name}")
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
client: Runloop,
|
|
33
|
+
mcp_config_id: str,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Initialize the wrapper.
|
|
36
|
+
|
|
37
|
+
:param client: Generated Runloop client
|
|
38
|
+
:type client: Runloop
|
|
39
|
+
:param mcp_config_id: McpConfig ID returned by the API
|
|
40
|
+
:type mcp_config_id: str
|
|
41
|
+
"""
|
|
42
|
+
self._client = client
|
|
43
|
+
self._id = mcp_config_id
|
|
44
|
+
|
|
45
|
+
@override
|
|
46
|
+
def __repr__(self) -> str:
|
|
47
|
+
return f"<McpConfig id={self._id!r}>"
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def id(self) -> str:
|
|
51
|
+
"""Return the MCP config ID.
|
|
52
|
+
|
|
53
|
+
:return: Unique MCP config ID
|
|
54
|
+
:rtype: str
|
|
55
|
+
"""
|
|
56
|
+
return self._id
|
|
57
|
+
|
|
58
|
+
def get_info(
|
|
59
|
+
self,
|
|
60
|
+
**options: Unpack[BaseRequestOptions],
|
|
61
|
+
) -> McpConfigView:
|
|
62
|
+
"""Retrieve the latest MCP config details.
|
|
63
|
+
|
|
64
|
+
:param options: Optional request configuration
|
|
65
|
+
:return: API response describing the MCP config
|
|
66
|
+
:rtype: McpConfigView
|
|
67
|
+
"""
|
|
68
|
+
return self._client.mcp_configs.retrieve(
|
|
69
|
+
self._id,
|
|
70
|
+
**options,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
def update(self, **params: Unpack[SDKMcpConfigUpdateParams]) -> McpConfigView:
|
|
74
|
+
"""Update the MCP config.
|
|
75
|
+
|
|
76
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigUpdateParams` for available parameters
|
|
77
|
+
:return: Updated MCP config view
|
|
78
|
+
:rtype: McpConfigView
|
|
79
|
+
"""
|
|
80
|
+
return self._client.mcp_configs.update(self._id, **params)
|
|
81
|
+
|
|
82
|
+
def delete(
|
|
83
|
+
self,
|
|
84
|
+
**options: Unpack[LongRequestOptions],
|
|
85
|
+
) -> McpConfigView:
|
|
86
|
+
"""Delete the MCP config. This action is irreversible.
|
|
87
|
+
|
|
88
|
+
:param options: Optional long-running request configuration
|
|
89
|
+
:return: API response acknowledging deletion
|
|
90
|
+
:rtype: McpConfigView
|
|
91
|
+
"""
|
|
92
|
+
return self._client.mcp_configs.delete(
|
|
93
|
+
self._id,
|
|
94
|
+
**options,
|
|
95
|
+
)
|
|
@@ -23,8 +23,10 @@ from ._types import (
|
|
|
23
23
|
SDKScorerCreateParams,
|
|
24
24
|
SDKBenchmarkListParams,
|
|
25
25
|
SDKBlueprintListParams,
|
|
26
|
+
SDKMcpConfigListParams,
|
|
26
27
|
SDKBenchmarkCreateParams,
|
|
27
28
|
SDKBlueprintCreateParams,
|
|
29
|
+
SDKMcpConfigCreateParams,
|
|
28
30
|
SDKDiskSnapshotListParams,
|
|
29
31
|
SDKGatewayConfigListParams,
|
|
30
32
|
SDKNetworkPolicyListParams,
|
|
@@ -41,6 +43,7 @@ from .scenario import Scenario
|
|
|
41
43
|
from .snapshot import Snapshot
|
|
42
44
|
from .benchmark import Benchmark
|
|
43
45
|
from .blueprint import Blueprint
|
|
46
|
+
from .mcp_config import McpConfig
|
|
44
47
|
from .gateway_config import GatewayConfig
|
|
45
48
|
from .network_policy import NetworkPolicy
|
|
46
49
|
from .storage_object import StorageObject
|
|
@@ -1036,6 +1039,62 @@ class GatewayConfigOps:
|
|
|
1036
1039
|
return [GatewayConfig(self._client, item.id) for item in page.gateway_configs]
|
|
1037
1040
|
|
|
1038
1041
|
|
|
1042
|
+
class McpConfigOps:
|
|
1043
|
+
"""High-level manager for creating and managing MCP configurations.
|
|
1044
|
+
|
|
1045
|
+
Accessed via ``runloop.mcp_config`` from :class:`RunloopSDK`, provides methods
|
|
1046
|
+
to create, retrieve, update, delete, and list MCP configs. MCP configs define
|
|
1047
|
+
how to connect to upstream MCP (Model Context Protocol) servers, specifying the
|
|
1048
|
+
target endpoint and which tools are allowed.
|
|
1049
|
+
|
|
1050
|
+
Example:
|
|
1051
|
+
>>> runloop = RunloopSDK()
|
|
1052
|
+
>>> mcp_config = runloop.mcp_config.create(
|
|
1053
|
+
... name="my-mcp-server",
|
|
1054
|
+
... endpoint="https://mcp.example.com",
|
|
1055
|
+
... allowed_tools=["*"],
|
|
1056
|
+
... )
|
|
1057
|
+
"""
|
|
1058
|
+
|
|
1059
|
+
def __init__(self, client: Runloop) -> None:
|
|
1060
|
+
"""Initialize McpConfigOps.
|
|
1061
|
+
|
|
1062
|
+
:param client: Runloop client instance
|
|
1063
|
+
:type client: Runloop
|
|
1064
|
+
"""
|
|
1065
|
+
self._client = client
|
|
1066
|
+
|
|
1067
|
+
def create(self, **params: Unpack[SDKMcpConfigCreateParams]) -> McpConfig:
|
|
1068
|
+
"""Create a new MCP config.
|
|
1069
|
+
|
|
1070
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigCreateParams` for available parameters
|
|
1071
|
+
:return: The newly created MCP config
|
|
1072
|
+
:rtype: McpConfig
|
|
1073
|
+
"""
|
|
1074
|
+
response = self._client.mcp_configs.create(**params)
|
|
1075
|
+
return McpConfig(self._client, response.id)
|
|
1076
|
+
|
|
1077
|
+
def from_id(self, mcp_config_id: str) -> McpConfig:
|
|
1078
|
+
"""Get a McpConfig instance for an existing MCP config ID.
|
|
1079
|
+
|
|
1080
|
+
:param mcp_config_id: ID of the MCP config
|
|
1081
|
+
:type mcp_config_id: str
|
|
1082
|
+
:return: McpConfig instance for the given ID
|
|
1083
|
+
:rtype: McpConfig
|
|
1084
|
+
"""
|
|
1085
|
+
return McpConfig(self._client, mcp_config_id)
|
|
1086
|
+
|
|
1087
|
+
def list(self, **params: Unpack[SDKMcpConfigListParams]) -> list[McpConfig]:
|
|
1088
|
+
"""List all MCP configs, optionally filtered by parameters.
|
|
1089
|
+
|
|
1090
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKMcpConfigListParams` for available parameters
|
|
1091
|
+
:return: List of MCP configs
|
|
1092
|
+
:rtype: list[McpConfig]
|
|
1093
|
+
"""
|
|
1094
|
+
page = self._client.mcp_configs.list(**params)
|
|
1095
|
+
return [McpConfig(self._client, item.id) for item in page.mcp_configs]
|
|
1096
|
+
|
|
1097
|
+
|
|
1039
1098
|
class RunloopSDK:
|
|
1040
1099
|
"""High-level synchronous entry point for the Runloop SDK.
|
|
1041
1100
|
|
|
@@ -1065,6 +1124,8 @@ class RunloopSDK:
|
|
|
1065
1124
|
:vartype network_policy: NetworkPolicyOps
|
|
1066
1125
|
:ivar gateway_config: High-level interface for gateway config management
|
|
1067
1126
|
:vartype gateway_config: GatewayConfigOps
|
|
1127
|
+
:ivar mcp_config: High-level interface for MCP config management
|
|
1128
|
+
:vartype mcp_config: McpConfigOps
|
|
1068
1129
|
|
|
1069
1130
|
Example:
|
|
1070
1131
|
>>> runloop = RunloopSDK() # Uses RUNLOOP_API_KEY env var
|
|
@@ -1080,6 +1141,7 @@ class RunloopSDK:
|
|
|
1080
1141
|
devbox: DevboxOps
|
|
1081
1142
|
blueprint: BlueprintOps
|
|
1082
1143
|
gateway_config: GatewayConfigOps
|
|
1144
|
+
mcp_config: McpConfigOps
|
|
1083
1145
|
network_policy: NetworkPolicyOps
|
|
1084
1146
|
scenario: ScenarioOps
|
|
1085
1147
|
scorer: ScorerOps
|
|
@@ -1129,6 +1191,7 @@ class RunloopSDK:
|
|
|
1129
1191
|
self.devbox = DevboxOps(self.api)
|
|
1130
1192
|
self.blueprint = BlueprintOps(self.api)
|
|
1131
1193
|
self.gateway_config = GatewayConfigOps(self.api)
|
|
1194
|
+
self.mcp_config = McpConfigOps(self.api)
|
|
1132
1195
|
self.network_policy = NetworkPolicyOps(self.api)
|
|
1133
1196
|
self.scenario = ScenarioOps(self.api)
|
|
1134
1197
|
self.scorer = ScorerOps(self.api)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""Synchronous SDK smoke tests for MCP Config operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from runloop_api_client.sdk import RunloopSDK
|
|
8
|
+
from tests.smoketests.utils import unique_name
|
|
9
|
+
|
|
10
|
+
pytestmark = [pytest.mark.smoketest]
|
|
11
|
+
|
|
12
|
+
THIRTY_SECOND_TIMEOUT = 30
|
|
13
|
+
|
|
14
|
+
MCP_CONFIG_TEST_ENDPOINT = "https://mcp.example.com"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TestMcpConfigLifecycle:
|
|
18
|
+
"""Test MCP config lifecycle operations."""
|
|
19
|
+
|
|
20
|
+
@pytest.mark.timeout(THIRTY_SECOND_TIMEOUT)
|
|
21
|
+
def test_mcp_config_full_lifecycle(self, sdk_client: RunloopSDK) -> None:
|
|
22
|
+
"""Test complete MCP config lifecycle: create, get_info, update, delete."""
|
|
23
|
+
name = unique_name("sdk-mcp-config")
|
|
24
|
+
mcp_config = sdk_client.mcp_config.create(
|
|
25
|
+
name=name,
|
|
26
|
+
endpoint=MCP_CONFIG_TEST_ENDPOINT,
|
|
27
|
+
allowed_tools=["*"],
|
|
28
|
+
description="SDK smoke test MCP config",
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
assert mcp_config is not None
|
|
33
|
+
assert mcp_config.id is not None
|
|
34
|
+
assert len(mcp_config.id) > 0
|
|
35
|
+
|
|
36
|
+
# Get info
|
|
37
|
+
info = mcp_config.get_info()
|
|
38
|
+
assert info.id == mcp_config.id
|
|
39
|
+
assert info.name == name
|
|
40
|
+
assert info.endpoint == MCP_CONFIG_TEST_ENDPOINT
|
|
41
|
+
assert info.description == "SDK smoke test MCP config"
|
|
42
|
+
assert info.allowed_tools is not None
|
|
43
|
+
assert "*" in info.allowed_tools
|
|
44
|
+
assert info.create_time_ms is not None
|
|
45
|
+
assert info.create_time_ms > 0
|
|
46
|
+
|
|
47
|
+
# Update name and description
|
|
48
|
+
updated_name = unique_name("sdk-mcp-config-updated")
|
|
49
|
+
result = mcp_config.update(
|
|
50
|
+
name=updated_name,
|
|
51
|
+
description="Updated description",
|
|
52
|
+
)
|
|
53
|
+
assert result.name == updated_name
|
|
54
|
+
assert result.description == "Updated description"
|
|
55
|
+
|
|
56
|
+
# Update endpoint
|
|
57
|
+
result = mcp_config.update(
|
|
58
|
+
endpoint="https://mcp.updated-example.com",
|
|
59
|
+
)
|
|
60
|
+
assert result.endpoint == "https://mcp.updated-example.com"
|
|
61
|
+
|
|
62
|
+
# Update allowed_tools
|
|
63
|
+
result = mcp_config.update(
|
|
64
|
+
allowed_tools=["github.search_*", "github.get_*"],
|
|
65
|
+
)
|
|
66
|
+
assert "github.search_*" in result.allowed_tools
|
|
67
|
+
assert "github.get_*" in result.allowed_tools
|
|
68
|
+
assert len(result.allowed_tools) == 2
|
|
69
|
+
|
|
70
|
+
# Verify all updates persisted
|
|
71
|
+
info = mcp_config.get_info()
|
|
72
|
+
assert info.name == updated_name
|
|
73
|
+
assert info.description == "Updated description"
|
|
74
|
+
assert info.endpoint == "https://mcp.updated-example.com"
|
|
75
|
+
assert "github.search_*" in info.allowed_tools
|
|
76
|
+
assert "github.get_*" in info.allowed_tools
|
|
77
|
+
finally:
|
|
78
|
+
result = mcp_config.delete()
|
|
79
|
+
assert result is not None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class TestMcpConfigListing:
|
|
83
|
+
"""Test MCP config listing and retrieval operations."""
|
|
84
|
+
|
|
85
|
+
@pytest.mark.timeout(THIRTY_SECOND_TIMEOUT)
|
|
86
|
+
def test_mcp_config_list_and_retrieve(self, sdk_client: RunloopSDK) -> None:
|
|
87
|
+
"""Test listing MCP configs and retrieving by ID."""
|
|
88
|
+
config1 = sdk_client.mcp_config.create(
|
|
89
|
+
name=unique_name("sdk-mcp-config-list-1"),
|
|
90
|
+
endpoint=MCP_CONFIG_TEST_ENDPOINT,
|
|
91
|
+
allowed_tools=["*"],
|
|
92
|
+
)
|
|
93
|
+
config2 = sdk_client.mcp_config.create(
|
|
94
|
+
name=unique_name("sdk-mcp-config-list-2"),
|
|
95
|
+
endpoint=MCP_CONFIG_TEST_ENDPOINT,
|
|
96
|
+
allowed_tools=["github.search_*"],
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
configs = sdk_client.mcp_config.list(limit=100)
|
|
101
|
+
assert isinstance(configs, list)
|
|
102
|
+
config_ids = [c.id for c in configs]
|
|
103
|
+
assert config1.id in config_ids
|
|
104
|
+
assert config2.id in config_ids
|
|
105
|
+
|
|
106
|
+
# Retrieve by ID
|
|
107
|
+
retrieved = sdk_client.mcp_config.from_id(config1.id)
|
|
108
|
+
assert retrieved.id == config1.id
|
|
109
|
+
info = retrieved.get_info()
|
|
110
|
+
assert info.id == config1.id
|
|
111
|
+
finally:
|
|
112
|
+
config1.delete()
|
|
113
|
+
config2.delete()
|
|
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
|