runloop_api_client 1.19.0__tar.gz → 1.20.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.20.1/.release-please-manifest.json +3 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/CHANGELOG.md +27 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/PKG-INFO +2 -2
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/README-SDK.md +7 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/pyproject.toml +2 -2
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_base_client.py +1 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_files.py +53 -3
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/__init__.py +0 -1
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_utils.py +0 -15
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/polling_async.py +43 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/devboxes/devboxes.py +25 -11
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/_types.py +5 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/agent.py +16 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_.py +32 -1
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_agent.py +16 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/sync.py +32 -1
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/broker_mount.py +6 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/broker_mount.py +6 -0
- runloop_api_client-1.20.1/tests/test_files.py +148 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/uv.lock +39 -3
- runloop_api_client-1.19.0/.release-please-manifest.json +0 -3
- runloop_api_client-1.19.0/tests/test_deepcopy.py +0 -58
- runloop_api_client-1.19.0/tests/test_files.py +0 -51
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/.gitignore +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/CONTRIBUTING.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/EXAMPLES.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/LICENSE +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/README.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/SECURITY.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/api.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/bin/check-release-environment +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/bin/publish-pypi +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/_harness.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/blueprint_with_build_context.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/devbox_from_blueprint_lifecycle.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/devbox_snapshot_resume.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/devbox_snapshots.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/devbox_tunnel.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/example_types.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/mcp_github_tools.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/registry.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/examples/secrets_with_devbox.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/release-please-config.json +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/requirements-dev.lock +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_models.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_types.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_compat.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_json.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_path.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_validation.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/_ignore.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/context_loader.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/polling.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/agents.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/apikeys.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/axons/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/axons/axons.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/axons/events.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/axons/sql.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/benchmarks.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/gateway_configs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/mcp_configs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/network_policies.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/objects.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/restricted_keys.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/resources/secrets.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/_helpers.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_devbox.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_execution.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_secret.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/devbox.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/execution.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/execution_result.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/mcp_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/scenario_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/secret.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_devbox_counts_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_list_public_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/agent_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/api_key_created_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/apikey_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_event_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_publish_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_subscribe_sse_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axon_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/axon_event_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/event_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_batch_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_batch_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_column_meta_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_query_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_query_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_result_meta_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_statement_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_step_error_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/axons/sql_step_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/gateway_config_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/inspection_source_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/mcp_config_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/network_policy_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_download_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_download_url_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_list_public_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/object_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/publish_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/restricted_key_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/restricted_key_created_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scope_entry_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scope_entry_view_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/secret_list_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/agent_source.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/object_mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared/run_profile.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/types/tunnel_view.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/axons/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/axons/test_events.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/axons/test_sql.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_agents.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_apikeys.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_axons.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_benchmark_jobs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_benchmark_runs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_devboxes.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_gateway_configs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_mcp_configs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_network_policies.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_objects.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_restricted_keys.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sample_file.txt +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/test_core.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/async_devbox/test_streaming.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/test_core.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/devbox/test_streaming.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_benchmark_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_execution.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_execution_result.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_ops.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_scenario_builder.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_scenario_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_benchmark_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_execution.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_execution_result.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_helpers.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_ops.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_scenario_builder.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_scenario_run.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/README.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/examples/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/examples/test_examples.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/README.md +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/__init__.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/conftest.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_devbox.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_sdk.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_secret.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_axon.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_devbox.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_mcp_config.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_sdk.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_secret.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/test_blueprints.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/test_devboxes.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/test_executions.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/test_snapshots.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/smoketests/utils.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_client.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_command_id.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_extract_files.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_models.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_polling.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_qs.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_required_args.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_response.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_streaming.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_transform.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_context_loader.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_json.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_path.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.20.1 (2026-05-01)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v1.20.0...v1.20.1](https://github.com/runloopai/api-client-python/compare/v1.20.0...v1.20.1)
|
|
6
|
+
|
|
7
|
+
### Documentation
|
|
8
|
+
|
|
9
|
+
* add missing SDK operations to README-SDK ([#791](https://github.com/runloopai/api-client-python/issues/791)) ([98a746a](https://github.com/runloopai/api-client-python/commit/98a746a32075adcad2439edf751bcb2921cddfb5))
|
|
10
|
+
|
|
11
|
+
## 1.20.0 (2026-04-21)
|
|
12
|
+
|
|
13
|
+
Full Changelog: [v1.19.0...v1.20.0](https://github.com/runloopai/api-client-python/compare/v1.19.0...v1.20.0)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* add OO SDK support for new Agent API calls ([#786](https://github.com/runloopai/api-client-python/issues/786)) ([6197567](https://github.com/runloopai/api-client-python/commit/6197567bee84193beca7699b8616b46479607510))
|
|
18
|
+
* **axon:** add working directory / directory to launch agent ([#8689](https://github.com/runloopai/api-client-python/issues/8689)) ([2097995](https://github.com/runloopai/api-client-python/commit/2097995f63b3e4334c6e6edb7d1c915f5447a9c9))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Performance Improvements
|
|
22
|
+
|
|
23
|
+
* **client:** optimize file structure copying in multipart requests ([64f27ad](https://github.com/runloopai/api-client-python/commit/64f27adfc44ef5242b19637377c50073c8240538))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Chores
|
|
27
|
+
|
|
28
|
+
* **tests:** bump steady to v0.22.1 ([c72f34d](https://github.com/runloopai/api-client-python/commit/c72f34dca3653010eb76a762a68519c996e74860))
|
|
29
|
+
|
|
3
30
|
## 1.19.0 (2026-04-13)
|
|
4
31
|
|
|
5
32
|
Full Changelog: [v1.18.1...v1.19.0](https://github.com/runloopai/api-client-python/compare/v1.18.1...v1.19.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.20.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
|
|
@@ -25,7 +25,7 @@ Classifier: Typing :: Typed
|
|
|
25
25
|
Requires-Python: >=3.9
|
|
26
26
|
Requires-Dist: anyio<5,>=3.5.0
|
|
27
27
|
Requires-Dist: distro<2,>=1.7.0
|
|
28
|
-
Requires-Dist: httpx<1,>=0.23.0
|
|
28
|
+
Requires-Dist: httpx[http2]<1,>=0.23.0
|
|
29
29
|
Requires-Dist: pydantic<3,>=2.0
|
|
30
30
|
Requires-Dist: sniffio
|
|
31
31
|
Requires-Dist: typing-extensions<5,>=4.14
|
|
@@ -120,7 +120,14 @@ The SDK provides object-oriented interfaces for all major Runloop resources:
|
|
|
120
120
|
- **`runloop.blueprint`** - Blueprint management (create, list, build blueprints)
|
|
121
121
|
- **`runloop.snapshot`** - Snapshot management (list disk snapshots)
|
|
122
122
|
- **`runloop.storage_object`** - Storage object management (upload, download, list objects)
|
|
123
|
+
- **`runloop.agent`** - Agent management (create, list agents from npm/pip/git)
|
|
123
124
|
- **`runloop.axon`** - [Beta] Axon management (create, publish events, subscribe to SSE streams, SQL queries)
|
|
125
|
+
- **`runloop.scenario`** - Scenario management (list scenarios, start runs)
|
|
126
|
+
- **`runloop.scorer`** - Scorer management (create, list, update)
|
|
127
|
+
- **`runloop.benchmark`** - Benchmark management (create, list, run benchmarks)
|
|
128
|
+
- **`runloop.network_policy`** - Network policy management (create, list, update egress rules)
|
|
129
|
+
- **`runloop.gateway_config`** - Gateway config management (create, list API proxy configurations)
|
|
130
|
+
- **`runloop.mcp_config`** - MCP config management (create, list MCP server configurations)
|
|
124
131
|
- **`runloop.secret`** - Secret management (create, update, list, delete encrypted key-value pairs)
|
|
125
132
|
- **`runloop.api`** - Direct access to the underlying REST API client
|
|
126
133
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "runloop_api_client"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.20.1"
|
|
4
4
|
description = "The official Python library for the runloop API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "MIT"
|
|
@@ -9,7 +9,7 @@ authors = [
|
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
dependencies = [
|
|
12
|
-
"httpx>=0.23.0, <1",
|
|
12
|
+
"httpx[http2]>=0.23.0, <1",
|
|
13
13
|
"pydantic>=2.0, <3",
|
|
14
14
|
"typing-extensions>=4.14, <5",
|
|
15
15
|
"anyio>=3.5.0, <5",
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_base_client.py
RENAMED
|
@@ -1375,6 +1375,7 @@ class _DefaultAsyncHttpxClient(httpx.AsyncClient):
|
|
|
1375
1375
|
kwargs.setdefault("timeout", DEFAULT_TIMEOUT)
|
|
1376
1376
|
kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS)
|
|
1377
1377
|
kwargs.setdefault("follow_redirects", True)
|
|
1378
|
+
kwargs.setdefault("http2", True)
|
|
1378
1379
|
super().__init__(**kwargs)
|
|
1379
1380
|
|
|
1380
1381
|
|
|
@@ -3,8 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
import io
|
|
4
4
|
import os
|
|
5
5
|
import pathlib
|
|
6
|
-
from typing import overload
|
|
7
|
-
from typing_extensions import TypeGuard
|
|
6
|
+
from typing import Sequence, cast, overload
|
|
7
|
+
from typing_extensions import TypeVar, TypeGuard
|
|
8
8
|
|
|
9
9
|
import anyio
|
|
10
10
|
|
|
@@ -17,7 +17,9 @@ from ._types import (
|
|
|
17
17
|
HttpxFileContent,
|
|
18
18
|
HttpxRequestFiles,
|
|
19
19
|
)
|
|
20
|
-
from ._utils import is_tuple_t, is_mapping_t, is_sequence_t
|
|
20
|
+
from ._utils import is_list, is_mapping, is_tuple_t, is_mapping_t, is_sequence_t
|
|
21
|
+
|
|
22
|
+
_T = TypeVar("_T")
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
def is_base64_file_input(obj: object) -> TypeGuard[Base64FileInput]:
|
|
@@ -121,3 +123,51 @@ async def async_read_file_content(file: FileContent) -> HttpxFileContent:
|
|
|
121
123
|
return await anyio.Path(file).read_bytes()
|
|
122
124
|
|
|
123
125
|
return file
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def deepcopy_with_paths(item: _T, paths: Sequence[Sequence[str]]) -> _T:
|
|
129
|
+
"""Copy only the containers along the given paths.
|
|
130
|
+
|
|
131
|
+
Used to guard against mutation by extract_files without copying the entire structure.
|
|
132
|
+
Only dicts and lists that lie on a path are copied; everything else
|
|
133
|
+
is returned by reference.
|
|
134
|
+
|
|
135
|
+
For example, given paths=[["foo", "files", "file"]] and the structure:
|
|
136
|
+
{
|
|
137
|
+
"foo": {
|
|
138
|
+
"bar": {"baz": {}},
|
|
139
|
+
"files": {"file": <content>}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
The root dict, "foo", and "files" are copied (they lie on the path).
|
|
143
|
+
"bar" and "baz" are returned by reference (off the path).
|
|
144
|
+
"""
|
|
145
|
+
return _deepcopy_with_paths(item, paths, 0)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def _deepcopy_with_paths(item: _T, paths: Sequence[Sequence[str]], index: int) -> _T:
|
|
149
|
+
if not paths:
|
|
150
|
+
return item
|
|
151
|
+
if is_mapping(item):
|
|
152
|
+
key_to_paths: dict[str, list[Sequence[str]]] = {}
|
|
153
|
+
for path in paths:
|
|
154
|
+
if index < len(path):
|
|
155
|
+
key_to_paths.setdefault(path[index], []).append(path)
|
|
156
|
+
|
|
157
|
+
# if no path continues through this mapping, it won't be mutated and copying it is redundant
|
|
158
|
+
if not key_to_paths:
|
|
159
|
+
return item
|
|
160
|
+
|
|
161
|
+
result = dict(item)
|
|
162
|
+
for key, subpaths in key_to_paths.items():
|
|
163
|
+
if key in result:
|
|
164
|
+
result[key] = _deepcopy_with_paths(result[key], subpaths, index + 1)
|
|
165
|
+
return cast(_T, result)
|
|
166
|
+
if is_list(item):
|
|
167
|
+
array_paths = [path for path in paths if index < len(path) and path[index] == "<array>"]
|
|
168
|
+
|
|
169
|
+
# if no path expects a list here, nothing will be mutated inside it - return by reference
|
|
170
|
+
if not array_paths:
|
|
171
|
+
return cast(_T, item)
|
|
172
|
+
return cast(_T, [_deepcopy_with_paths(entry, array_paths, index + 1) for entry in item])
|
|
173
|
+
return item
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/__init__.py
RENAMED
|
@@ -25,7 +25,6 @@ from ._utils import (
|
|
|
25
25
|
coerce_integer as coerce_integer,
|
|
26
26
|
file_from_path as file_from_path,
|
|
27
27
|
strip_not_given as strip_not_given,
|
|
28
|
-
deepcopy_minimal as deepcopy_minimal,
|
|
29
28
|
get_async_library as get_async_library,
|
|
30
29
|
maybe_coerce_float as maybe_coerce_float,
|
|
31
30
|
get_required_header as get_required_header,
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/_utils/_utils.py
RENAMED
|
@@ -177,21 +177,6 @@ def is_iterable(obj: object) -> TypeGuard[Iterable[object]]:
|
|
|
177
177
|
return isinstance(obj, Iterable)
|
|
178
178
|
|
|
179
179
|
|
|
180
|
-
def deepcopy_minimal(item: _T) -> _T:
|
|
181
|
-
"""Minimal reimplementation of copy.deepcopy() that will only copy certain object types:
|
|
182
|
-
|
|
183
|
-
- mappings, e.g. `dict`
|
|
184
|
-
- list
|
|
185
|
-
|
|
186
|
-
This is done for performance reasons.
|
|
187
|
-
"""
|
|
188
|
-
if is_mapping(item):
|
|
189
|
-
return cast(_T, {k: deepcopy_minimal(v) for k, v in item.items()})
|
|
190
|
-
if is_list(item):
|
|
191
|
-
return cast(_T, [deepcopy_minimal(entry) for entry in item])
|
|
192
|
-
return item
|
|
193
|
-
|
|
194
|
-
|
|
195
180
|
# copied from https://github.com/Rapptz/RoboDanny
|
|
196
181
|
def human_join(seq: Sequence[str], *, delim: str = ", ", final: str = "or") -> str:
|
|
197
182
|
size = len(seq)
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/lib/polling_async.py
RENAMED
|
@@ -58,3 +58,46 @@ async def async_poll_until(
|
|
|
58
58
|
raise PollingTimeout(f"Exceeded timeout of {config.timeout_seconds} seconds", last_result)
|
|
59
59
|
|
|
60
60
|
await asyncio.sleep(config.interval_seconds)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async def retry_server_poll_until(
|
|
64
|
+
retriever: Callable[[float], Awaitable[T]],
|
|
65
|
+
is_terminal: Callable[[T], bool],
|
|
66
|
+
timeout_seconds: float = 30.0,
|
|
67
|
+
on_error: Optional[Callable[[Exception], T]] = None,
|
|
68
|
+
) -> T:
|
|
69
|
+
"""
|
|
70
|
+
Retry a server-side long-poll until a condition is met or max timeout is reached.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
retriever: Async callable that takes the remaining timeout (seconds) and
|
|
74
|
+
returns the object to check.
|
|
75
|
+
is_terminal: Callable that returns True when polling should stop
|
|
76
|
+
timeout_seconds: Total time to wait. Must be > 0
|
|
77
|
+
on_error: Optional error handler that can return a value to continue polling
|
|
78
|
+
or re-raise the exception to stop polling
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
The final state of the polled object
|
|
82
|
+
|
|
83
|
+
Raises:
|
|
84
|
+
PollingTimeout: When max attempts or timeout is reached
|
|
85
|
+
"""
|
|
86
|
+
last_result: Union[T, None] = None
|
|
87
|
+
start_time = time.time()
|
|
88
|
+
|
|
89
|
+
while True:
|
|
90
|
+
remaining_time = timeout_seconds - (time.time() - start_time)
|
|
91
|
+
if remaining_time <= 0:
|
|
92
|
+
raise PollingTimeout(f"Exceeded timeout of {timeout_seconds} seconds", last_result)
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
last_result = await retriever(remaining_time)
|
|
96
|
+
except Exception as e:
|
|
97
|
+
if on_error is not None:
|
|
98
|
+
last_result = on_error(e)
|
|
99
|
+
else:
|
|
100
|
+
raise
|
|
101
|
+
|
|
102
|
+
if is_terminal(last_result):
|
|
103
|
+
return last_result
|
|
@@ -37,8 +37,9 @@ from ...types import (
|
|
|
37
37
|
devbox_snapshot_disk_async_params,
|
|
38
38
|
devbox_write_file_contents_params,
|
|
39
39
|
)
|
|
40
|
+
from ..._files import deepcopy_with_paths
|
|
40
41
|
from ..._types import Body, Omit, Query, Headers, NotGiven, FileTypes, omit, not_given
|
|
41
|
-
from ..._utils import is_given, extract_files, path_template, maybe_transform,
|
|
42
|
+
from ..._utils import is_given, extract_files, path_template, maybe_transform, async_maybe_transform
|
|
42
43
|
from ..._compat import cached_property
|
|
43
44
|
from .executions import (
|
|
44
45
|
ExecutionsResource,
|
|
@@ -81,7 +82,7 @@ from .disk_snapshots import (
|
|
|
81
82
|
DiskSnapshotsResourceWithStreamingResponse,
|
|
82
83
|
AsyncDiskSnapshotsResourceWithStreamingResponse,
|
|
83
84
|
)
|
|
84
|
-
from ...lib.polling_async import async_poll_until
|
|
85
|
+
from ...lib.polling_async import async_poll_until, retry_server_poll_until
|
|
85
86
|
from ...types.devbox_view import DevboxView
|
|
86
87
|
from ...types.tunnel_view import TunnelView
|
|
87
88
|
from ...types.shared_params.mount import Mount
|
|
@@ -1607,11 +1608,12 @@ class DevboxesResource(SyncAPIResource):
|
|
|
1607
1608
|
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
1608
1609
|
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
|
|
1609
1610
|
timeout = 600
|
|
1610
|
-
body =
|
|
1611
|
+
body = deepcopy_with_paths(
|
|
1611
1612
|
{
|
|
1612
1613
|
"path": path,
|
|
1613
1614
|
"file": file,
|
|
1614
|
-
}
|
|
1615
|
+
},
|
|
1616
|
+
[["file"]],
|
|
1615
1617
|
)
|
|
1616
1618
|
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
|
1617
1619
|
# It should be noted that the actual Content-Type header that will be
|
|
@@ -2040,11 +2042,10 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
2040
2042
|
|
|
2041
2043
|
Args:
|
|
2042
2044
|
id: The ID of the devbox to wait for
|
|
2043
|
-
|
|
2045
|
+
polling_config: Optional polling configuration
|
|
2044
2046
|
extra_headers: Send extra headers
|
|
2045
2047
|
extra_query: Add additional query parameters to the request
|
|
2046
2048
|
extra_body: Add additional JSON properties to the request
|
|
2047
|
-
timeout: Override the client-level default timeout for this request, in seconds
|
|
2048
2049
|
|
|
2049
2050
|
Returns:
|
|
2050
2051
|
The devbox in running state
|
|
@@ -2054,13 +2055,13 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
2054
2055
|
RunloopError: If devbox enters a non-running terminal state
|
|
2055
2056
|
"""
|
|
2056
2057
|
|
|
2057
|
-
async def wait_for_devbox_status() -> DevboxView:
|
|
2058
|
+
async def wait_for_devbox_status(remaining_timeout_seconds: float) -> DevboxView:
|
|
2058
2059
|
# This wait_for_status endpoint polls the devbox status for 10 seconds until it reaches either running or failure.
|
|
2059
2060
|
# If it's neither, it will throw an error.
|
|
2060
2061
|
try:
|
|
2061
2062
|
return await self._post(
|
|
2062
2063
|
f"/v1/devboxes/{id}/wait_for_status",
|
|
2063
|
-
body={"statuses": ["running", "failure", "shutdown"]},
|
|
2064
|
+
body={"statuses": ["running", "failure", "shutdown"], "timeout_seconds": remaining_timeout_seconds},
|
|
2064
2065
|
cast_to=DevboxView,
|
|
2065
2066
|
)
|
|
2066
2067
|
except (APITimeoutError, APIStatusError) as error:
|
|
@@ -2075,7 +2076,19 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
2075
2076
|
def is_done_booting(devbox: DevboxView) -> bool:
|
|
2076
2077
|
return devbox.status not in DEVBOX_BOOTING_STATES
|
|
2077
2078
|
|
|
2078
|
-
|
|
2079
|
+
# calculate the timeout to use. The PollingConfig doesn't
|
|
2080
|
+
# match the semantics for server-side polling well, so we
|
|
2081
|
+
# instead convert interval*attempts to a total time, and take
|
|
2082
|
+
# the minimum total.
|
|
2083
|
+
config = polling_config
|
|
2084
|
+
if not config:
|
|
2085
|
+
config = PollingConfig() # use defaults
|
|
2086
|
+
|
|
2087
|
+
timeout = config.interval_seconds * config.max_attempts
|
|
2088
|
+
if config.timeout_seconds is not None and config.timeout_seconds > 0:
|
|
2089
|
+
timeout = min(config.timeout_seconds, timeout)
|
|
2090
|
+
|
|
2091
|
+
devbox = await retry_server_poll_until(wait_for_devbox_status, is_done_booting, timeout)
|
|
2079
2092
|
|
|
2080
2093
|
if devbox.status != "running":
|
|
2081
2094
|
raise RunloopError(f"Devbox entered non-running terminal state: {devbox.status}")
|
|
@@ -3241,11 +3254,12 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
3241
3254
|
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
3242
3255
|
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
|
|
3243
3256
|
timeout = 600
|
|
3244
|
-
body =
|
|
3257
|
+
body = deepcopy_with_paths(
|
|
3245
3258
|
{
|
|
3246
3259
|
"path": path,
|
|
3247
3260
|
"file": file,
|
|
3248
|
-
}
|
|
3261
|
+
},
|
|
3262
|
+
[["file"]],
|
|
3249
3263
|
)
|
|
3250
3264
|
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
|
3251
3265
|
# It should be noted that the actual Content-Type header that will be
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/_types.py
RENAMED
|
@@ -19,6 +19,7 @@ from ..types import (
|
|
|
19
19
|
McpConfigListParams,
|
|
20
20
|
ObjectDownloadParams,
|
|
21
21
|
ScenarioUpdateParams,
|
|
22
|
+
AgentListPublicParams,
|
|
22
23
|
BenchmarkCreateParams,
|
|
23
24
|
BenchmarkUpdateParams,
|
|
24
25
|
BlueprintCreateParams,
|
|
@@ -191,6 +192,10 @@ class SDKAgentListParams(AgentListParams, BaseRequestOptions):
|
|
|
191
192
|
pass
|
|
192
193
|
|
|
193
194
|
|
|
195
|
+
class SDKAgentListPublicParams(AgentListPublicParams, BaseRequestOptions):
|
|
196
|
+
pass
|
|
197
|
+
|
|
198
|
+
|
|
194
199
|
class SDKAxonListParams(AxonListParams, BaseRequestOptions):
|
|
195
200
|
pass
|
|
196
201
|
|
|
@@ -7,6 +7,7 @@ from typing_extensions import Unpack, override
|
|
|
7
7
|
|
|
8
8
|
from ._types import (
|
|
9
9
|
BaseRequestOptions,
|
|
10
|
+
LongRequestOptions,
|
|
10
11
|
)
|
|
11
12
|
from .._client import Runloop
|
|
12
13
|
from ..types.agent_view import AgentView
|
|
@@ -68,3 +69,18 @@ class Agent:
|
|
|
68
69
|
self._id,
|
|
69
70
|
**options,
|
|
70
71
|
)
|
|
72
|
+
|
|
73
|
+
def delete(
|
|
74
|
+
self,
|
|
75
|
+
**options: Unpack[LongRequestOptions],
|
|
76
|
+
) -> object:
|
|
77
|
+
"""Delete this agent. This action is irreversible.
|
|
78
|
+
|
|
79
|
+
:param options: Optional request configuration
|
|
80
|
+
:return: API response acknowledging deletion
|
|
81
|
+
:rtype: object
|
|
82
|
+
"""
|
|
83
|
+
return self._client.agents.delete(
|
|
84
|
+
self._id,
|
|
85
|
+
**options,
|
|
86
|
+
)
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_.py
RENAMED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
-
from typing import Dict, Mapping, Optional
|
|
6
|
+
from typing import Dict, List, Mapping, Optional
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from datetime import timedelta
|
|
9
9
|
from typing_extensions import Unpack
|
|
@@ -27,6 +27,7 @@ from ._types import (
|
|
|
27
27
|
SDKBenchmarkListParams,
|
|
28
28
|
SDKBlueprintListParams,
|
|
29
29
|
SDKMcpConfigListParams,
|
|
30
|
+
SDKAgentListPublicParams,
|
|
30
31
|
SDKBenchmarkCreateParams,
|
|
31
32
|
SDKBlueprintCreateParams,
|
|
32
33
|
SDKMcpConfigCreateParams,
|
|
@@ -57,6 +58,7 @@ from .async_network_policy import AsyncNetworkPolicy
|
|
|
57
58
|
from .async_storage_object import AsyncStorageObject
|
|
58
59
|
from .async_scenario_builder import AsyncScenarioBuilder
|
|
59
60
|
from ..types.object_create_params import ContentType
|
|
61
|
+
from ..types.agent_devbox_counts_view import AgentDevboxCountsView
|
|
60
62
|
from ..types.shared_params.agent_source import Git, Npm, Pip, Object
|
|
61
63
|
|
|
62
64
|
|
|
@@ -805,6 +807,35 @@ class AsyncAgentOps:
|
|
|
805
807
|
)
|
|
806
808
|
return [AsyncAgent(self._client, item.id, item) for item in page.agents]
|
|
807
809
|
|
|
810
|
+
async def list_public(
|
|
811
|
+
self,
|
|
812
|
+
**params: Unpack[SDKAgentListPublicParams],
|
|
813
|
+
) -> List[AsyncAgent]:
|
|
814
|
+
"""List public agents.
|
|
815
|
+
|
|
816
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKAgentListPublicParams` for available parameters
|
|
817
|
+
:return: Collection of public agent wrappers
|
|
818
|
+
:rtype: list[AsyncAgent]
|
|
819
|
+
"""
|
|
820
|
+
page = await self._client.agents.list_public(
|
|
821
|
+
**params,
|
|
822
|
+
)
|
|
823
|
+
return [AsyncAgent(self._client, item.id, item) for item in page.agents]
|
|
824
|
+
|
|
825
|
+
async def devbox_counts(
|
|
826
|
+
self,
|
|
827
|
+
**options: Unpack[BaseRequestOptions],
|
|
828
|
+
) -> AgentDevboxCountsView:
|
|
829
|
+
"""Get devbox counts grouped by agent name.
|
|
830
|
+
|
|
831
|
+
:param options: Optional request configuration
|
|
832
|
+
:return: Devbox counts per agent name and total
|
|
833
|
+
:rtype: AgentDevboxCountsView
|
|
834
|
+
"""
|
|
835
|
+
return await self._client.agents.devbox_counts(
|
|
836
|
+
**options,
|
|
837
|
+
)
|
|
838
|
+
|
|
808
839
|
|
|
809
840
|
class AsyncScenarioOps:
|
|
810
841
|
"""Manage scenarios (async). Access via ``runloop.scenario``.
|
{runloop_api_client-1.19.0 → runloop_api_client-1.20.1}/src/runloop_api_client/sdk/async_agent.py
RENAMED
|
@@ -7,6 +7,7 @@ from typing_extensions import Unpack, override
|
|
|
7
7
|
|
|
8
8
|
from ._types import (
|
|
9
9
|
BaseRequestOptions,
|
|
10
|
+
LongRequestOptions,
|
|
10
11
|
)
|
|
11
12
|
from .._client import AsyncRunloop
|
|
12
13
|
from ..types.agent_view import AgentView
|
|
@@ -68,3 +69,18 @@ class AsyncAgent:
|
|
|
68
69
|
self._id,
|
|
69
70
|
**options,
|
|
70
71
|
)
|
|
72
|
+
|
|
73
|
+
async def delete(
|
|
74
|
+
self,
|
|
75
|
+
**options: Unpack[LongRequestOptions],
|
|
76
|
+
) -> object:
|
|
77
|
+
"""Delete this agent. This action is irreversible.
|
|
78
|
+
|
|
79
|
+
:param options: Optional request configuration
|
|
80
|
+
:return: API response acknowledging deletion
|
|
81
|
+
:rtype: object
|
|
82
|
+
"""
|
|
83
|
+
return await self._client.agents.delete(
|
|
84
|
+
self._id,
|
|
85
|
+
**options,
|
|
86
|
+
)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Dict, Mapping, Optional
|
|
5
|
+
from typing import Dict, List, Mapping, Optional
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from datetime import timedelta
|
|
8
8
|
from typing_extensions import Unpack
|
|
@@ -28,6 +28,7 @@ from ._types import (
|
|
|
28
28
|
SDKBenchmarkListParams,
|
|
29
29
|
SDKBlueprintListParams,
|
|
30
30
|
SDKMcpConfigListParams,
|
|
31
|
+
SDKAgentListPublicParams,
|
|
31
32
|
SDKBenchmarkCreateParams,
|
|
32
33
|
SDKBlueprintCreateParams,
|
|
33
34
|
SDKMcpConfigCreateParams,
|
|
@@ -56,6 +57,7 @@ from .scenario_builder import ScenarioBuilder
|
|
|
56
57
|
from ..types.secret_view import SecretView
|
|
57
58
|
from ..lib.context_loader import TarFilter, build_directory_tar
|
|
58
59
|
from ..types.object_create_params import ContentType
|
|
60
|
+
from ..types.agent_devbox_counts_view import AgentDevboxCountsView
|
|
59
61
|
from ..types.shared_params.agent_source import Git, Npm, Pip, Object
|
|
60
62
|
|
|
61
63
|
|
|
@@ -830,6 +832,35 @@ class AgentOps:
|
|
|
830
832
|
)
|
|
831
833
|
return [Agent(self._client, item.id, item) for item in page.agents]
|
|
832
834
|
|
|
835
|
+
def list_public(
|
|
836
|
+
self,
|
|
837
|
+
**params: Unpack[SDKAgentListPublicParams],
|
|
838
|
+
) -> List[Agent]:
|
|
839
|
+
"""List public agents.
|
|
840
|
+
|
|
841
|
+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKAgentListPublicParams` for available parameters
|
|
842
|
+
:return: Collection of public agent wrappers
|
|
843
|
+
:rtype: list[Agent]
|
|
844
|
+
"""
|
|
845
|
+
page = self._client.agents.list_public(
|
|
846
|
+
**params,
|
|
847
|
+
)
|
|
848
|
+
return [Agent(self._client, item.id, item) for item in page.agents]
|
|
849
|
+
|
|
850
|
+
def devbox_counts(
|
|
851
|
+
self,
|
|
852
|
+
**options: Unpack[BaseRequestOptions],
|
|
853
|
+
) -> AgentDevboxCountsView:
|
|
854
|
+
"""Get devbox counts grouped by agent name.
|
|
855
|
+
|
|
856
|
+
:param options: Optional request configuration
|
|
857
|
+
:return: Devbox counts per agent name and total
|
|
858
|
+
:rtype: AgentDevboxCountsView
|
|
859
|
+
"""
|
|
860
|
+
return self._client.agents.devbox_counts(
|
|
861
|
+
**options,
|
|
862
|
+
)
|
|
863
|
+
|
|
833
864
|
|
|
834
865
|
class ScenarioOps:
|
|
835
866
|
"""Manage scenarios. Access via ``runloop.scenario``.
|
|
@@ -28,3 +28,9 @@ class BrokerMount(BaseModel):
|
|
|
28
28
|
|
|
29
29
|
protocol: Optional[Literal["acp", "claude_json"]] = None
|
|
30
30
|
"""The protocol used by the broker to deliver events to the agent."""
|
|
31
|
+
|
|
32
|
+
working_directory: Optional[str] = None
|
|
33
|
+
"""Working directory in which to launch the agent binary.
|
|
34
|
+
|
|
35
|
+
Defaults to the home directory if not specified.
|
|
36
|
+
"""
|
|
@@ -30,3 +30,9 @@ class BrokerMount(TypedDict, total=False):
|
|
|
30
30
|
|
|
31
31
|
protocol: Optional[Literal["acp", "claude_json"]]
|
|
32
32
|
"""The protocol used by the broker to deliver events to the agent."""
|
|
33
|
+
|
|
34
|
+
working_directory: Optional[str]
|
|
35
|
+
"""Working directory in which to launch the agent binary.
|
|
36
|
+
|
|
37
|
+
Defaults to the home directory if not specified.
|
|
38
|
+
"""
|