runloop-api-client 1.9.0__tar.gz → 1.10.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.
Files changed (409) hide show
  1. runloop_api_client-1.10.1/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/CHANGELOG.md +16 -0
  3. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/PKG-INFO +1 -1
  4. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/pyproject.toml +1 -1
  5. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_version.py +1 -1
  6. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/__init__.py +8 -0
  7. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/_types.py +15 -0
  8. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_.py +63 -0
  9. runloop_api_client-1.10.1/src/runloop_api_client/sdk/async_mcp_config.py +95 -0
  10. runloop_api_client-1.10.1/src/runloop_api_client/sdk/mcp_config.py +95 -0
  11. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/sync.py +63 -0
  12. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_view.py +16 -1
  13. runloop_api_client-1.10.1/tests/smoketests/sdk/test_mcp_config.py +113 -0
  14. runloop_api_client-1.9.0/.release-please-manifest.json +0 -3
  15. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/.gitignore +0 -0
  16. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/CONTRIBUTING.md +0 -0
  17. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/LICENSE +0 -0
  18. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/README-SDK.md +0 -0
  19. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/README.md +0 -0
  20. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/SECURITY.md +0 -0
  21. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/api.md +0 -0
  22. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/bin/check-release-environment +0 -0
  23. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/bin/publish-pypi +0 -0
  24. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/examples/.keep +0 -0
  25. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/release-please-config.json +0 -0
  26. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/requirements-dev.lock +0 -0
  27. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop/lib/.keep +0 -0
  28. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/__init__.py +0 -0
  29. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_base_client.py +0 -0
  30. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_client.py +0 -0
  31. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_compat.py +0 -0
  32. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_constants.py +0 -0
  33. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_exceptions.py +0 -0
  34. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_files.py +0 -0
  35. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_models.py +0 -0
  36. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_qs.py +0 -0
  37. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_resource.py +0 -0
  38. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_response.py +0 -0
  39. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_streaming.py +0 -0
  40. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_types.py +0 -0
  41. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/__init__.py +0 -0
  42. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_compat.py +0 -0
  43. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  44. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_json.py +0 -0
  45. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_logs.py +0 -0
  46. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
  47. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
  48. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  49. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_streams.py +0 -0
  50. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_sync.py +0 -0
  51. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_transform.py +0 -0
  52. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_typing.py +0 -0
  53. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_utils.py +0 -0
  54. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/_utils/_validation.py +0 -0
  55. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/.keep +0 -0
  56. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/__init__.py +0 -0
  57. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/_ignore.py +0 -0
  58. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/context_loader.py +0 -0
  59. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/polling.py +0 -0
  60. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/lib/polling_async.py +0 -0
  61. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/pagination.py +0 -0
  62. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/py.typed +0 -0
  63. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/__init__.py +0 -0
  64. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/agents.py +0 -0
  65. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  66. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  67. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/benchmarks.py +0 -0
  68. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/blueprints.py +0 -0
  69. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  70. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  71. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  72. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  73. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  74. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  75. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  76. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  77. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  78. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/network_policies.py +0 -0
  79. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/objects.py +0 -0
  80. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/repositories.py +0 -0
  81. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  82. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  83. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  84. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  85. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/resources/secrets.py +0 -0
  86. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/_helpers.py +0 -0
  87. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/agent.py +0 -0
  88. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_agent.py +0 -0
  89. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  90. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  91. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  92. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_devbox.py +0 -0
  93. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_execution.py +0 -0
  94. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  95. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  96. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  97. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  98. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  99. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  100. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  101. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  102. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  103. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/benchmark.py +0 -0
  104. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  105. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/blueprint.py +0 -0
  106. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/devbox.py +0 -0
  107. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/execution.py +0 -0
  108. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/execution_result.py +0 -0
  109. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  110. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/network_policy.py +0 -0
  111. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/scenario.py +0 -0
  112. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  113. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  114. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/scorer.py +0 -0
  115. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/snapshot.py +0 -0
  116. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/sdk/storage_object.py +0 -0
  117. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/__init__.py +0 -0
  118. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/agent_create_params.py +0 -0
  119. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/agent_list_params.py +0 -0
  120. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/agent_list_view.py +0 -0
  121. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/agent_view.py +0 -0
  122. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  123. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  124. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  125. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  126. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  127. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  128. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  129. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  130. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  131. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  132. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  133. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  134. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  135. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  136. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  137. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
  138. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  139. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  140. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  141. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  142. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  143. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  144. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  145. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  146. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  147. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  148. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
  149. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  150. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  151. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  152. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  153. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  154. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  155. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  156. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  157. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  158. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  159. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  160. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  161. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  162. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  163. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  164. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  165. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  166. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  167. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  168. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  169. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  170. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  171. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  172. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  173. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  174. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  175. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  176. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  177. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  178. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  179. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  180. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  181. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  182. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  183. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  184. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  185. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  186. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  187. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  188. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  189. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  190. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  191. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  192. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  193. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  194. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  195. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  196. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  197. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  198. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  199. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  200. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  201. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  202. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  203. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  204. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  205. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  206. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/input_context.py +0 -0
  207. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/input_context_param.py +0 -0
  208. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  209. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  210. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  211. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  212. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  213. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  214. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  215. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  216. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  217. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  218. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  219. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/network_policy_view.py +0 -0
  220. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_create_params.py +0 -0
  221. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_download_params.py +0 -0
  222. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  223. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_list_params.py +0 -0
  224. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  225. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_list_view.py +0 -0
  226. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/object_view.py +0 -0
  227. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  228. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  229. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_create_params.py +0 -0
  230. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
  231. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  232. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  233. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_list_params.py +0 -0
  234. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  235. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  236. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  237. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  238. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
  239. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  240. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  241. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  242. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  243. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  244. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  245. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  246. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenario_view.py +0 -0
  247. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  248. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  249. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  250. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  251. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  252. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  253. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  254. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  255. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  256. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
  257. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  258. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  259. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  260. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_function.py +0 -0
  261. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  262. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  263. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
  264. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/secret_list_params.py +0 -0
  265. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
  266. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
  267. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/secret_view.py +0 -0
  268. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
  269. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  270. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  271. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  272. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  273. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  274. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/mount.py +0 -0
  275. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  276. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  277. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  278. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  279. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  280. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  281. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  282. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  283. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  284. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  285. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  286. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/src/runloop_api_client/types/tunnel_view.py +0 -0
  287. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/__init__.py +0 -0
  288. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/__init__.py +0 -0
  289. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/__init__.py +0 -0
  290. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/test_browsers.py +0 -0
  291. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/test_computers.py +0 -0
  292. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  293. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/test_executions.py +0 -0
  294. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/devboxes/test_logs.py +0 -0
  295. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/scenarios/__init__.py +0 -0
  296. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/scenarios/test_runs.py +0 -0
  297. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
  298. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_agents.py +0 -0
  299. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_benchmark_jobs.py +0 -0
  300. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_benchmark_runs.py +0 -0
  301. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_benchmarks.py +0 -0
  302. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_blueprints.py +0 -0
  303. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_devboxes.py +0 -0
  304. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_gateway_configs.py +0 -0
  305. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_mcp_configs.py +0 -0
  306. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_network_policies.py +0 -0
  307. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_objects.py +0 -0
  308. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_repositories.py +0 -0
  309. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_scenarios.py +0 -0
  310. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/api_resources/test_secrets.py +0 -0
  311. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/conftest.py +0 -0
  312. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sample_file.txt +0 -0
  313. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/__init__.py +0 -0
  314. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/__init__.py +0 -0
  315. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/conftest.py +0 -0
  316. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/test_core.py +0 -0
  317. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  318. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  319. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/async_devbox/test_streaming.py +0 -0
  320. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/conftest.py +0 -0
  321. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/__init__.py +0 -0
  322. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/conftest.py +0 -0
  323. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/test_core.py +0 -0
  324. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/test_edge_cases.py +0 -0
  325. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/test_interfaces.py +0 -0
  326. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/devbox/test_streaming.py +0 -0
  327. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_agent.py +0 -0
  328. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_agent.py +0 -0
  329. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_benchmark.py +0 -0
  330. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_benchmark_run.py +0 -0
  331. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_blueprint.py +0 -0
  332. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_execution.py +0 -0
  333. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_execution_result.py +0 -0
  334. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_gateway_config.py +0 -0
  335. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_network_policy.py +0 -0
  336. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_ops.py +0 -0
  337. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_scenario.py +0 -0
  338. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_scenario_builder.py +0 -0
  339. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_scenario_run.py +0 -0
  340. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_scorer.py +0 -0
  341. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_snapshot.py +0 -0
  342. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_async_storage_object.py +0 -0
  343. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_benchmark.py +0 -0
  344. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_benchmark_run.py +0 -0
  345. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_blueprint.py +0 -0
  346. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_execution.py +0 -0
  347. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_execution_result.py +0 -0
  348. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_gateway_config.py +0 -0
  349. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_helpers.py +0 -0
  350. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_network_policy.py +0 -0
  351. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_ops.py +0 -0
  352. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_scenario.py +0 -0
  353. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_scenario_builder.py +0 -0
  354. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_scenario_run.py +0 -0
  355. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_scorer.py +0 -0
  356. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_snapshot.py +0 -0
  357. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/sdk/test_storage_object.py +0 -0
  358. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/README.md +0 -0
  359. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/__init__.py +0 -0
  360. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/conftest.py +0 -0
  361. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/README.md +0 -0
  362. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/__init__.py +0 -0
  363. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/conftest.py +0 -0
  364. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_agent.py +0 -0
  365. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_agent.py +0 -0
  366. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  367. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  368. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_devbox.py +0 -0
  369. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  370. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  371. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  372. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  373. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  374. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  375. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  376. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_benchmark.py +0 -0
  377. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_blueprint.py +0 -0
  378. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_devbox.py +0 -0
  379. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  380. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_network_policy.py +0 -0
  381. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_scenario.py +0 -0
  382. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_scorer.py +0 -0
  383. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_sdk.py +0 -0
  384. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_snapshot.py +0 -0
  385. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/sdk/test_storage_object.py +0 -0
  386. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/test_blueprints.py +0 -0
  387. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/test_devboxes.py +0 -0
  388. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/test_executions.py +0 -0
  389. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  390. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/test_snapshots.py +0 -0
  391. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/smoketests/utils.py +0 -0
  392. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_client.py +0 -0
  393. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_deepcopy.py +0 -0
  394. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_extract_files.py +0 -0
  395. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_files.py +0 -0
  396. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_models.py +0 -0
  397. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_polling.py +0 -0
  398. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_qs.py +0 -0
  399. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_required_args.py +0 -0
  400. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_response.py +0 -0
  401. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_streaming.py +0 -0
  402. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_transform.py +0 -0
  403. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_utils/test_context_loader.py +0 -0
  404. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_utils/test_datetime_parse.py +0 -0
  405. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_utils/test_json.py +0 -0
  406. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_utils/test_proxy.py +0 -0
  407. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/test_utils/test_typing.py +0 -0
  408. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/tests/utils.py +0 -0
  409. {runloop_api_client-1.9.0 → runloop_api_client-1.10.1}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.10.1"
3
+ }
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.1 (2026-02-26)
4
+
5
+ Full Changelog: [v1.10.0...v1.10.1](https://github.com/runloopai/api-client-python/compare/v1.10.0...v1.10.1)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **devbox:** add mcp configs to DevboxView ([#7680](https://github.com/runloopai/api-client-python/issues/7680)) ([ad62b28](https://github.com/runloopai/api-client-python/commit/ad62b28582cc03385c5f0bd964dee04aefadfea9))
10
+
11
+ ## 1.10.0 (2026-02-26)
12
+
13
+ Full Changelog: [v1.9.0...v1.10.0](https://github.com/runloopai/api-client-python/compare/v1.9.0...v1.10.0)
14
+
15
+ ### Features
16
+
17
+ * 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))
18
+
3
19
  ## 1.9.0 (2026-02-25)
4
20
 
5
21
  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.9.0
3
+ Version: 1.10.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.9.0"
3
+ version = "1.10.1"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "runloop_api_client"
4
- __version__ = "1.9.0" # x-release-please-version
4
+ __version__ = "1.10.1" # x-release-please-version
@@ -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)
@@ -7,7 +7,7 @@ from .._models import BaseModel
7
7
  from .tunnel_view import TunnelView
8
8
  from .shared.launch_parameters import LaunchParameters
9
9
 
10
- __all__ = ["DevboxView", "StateTransition", "GatewaySpecs"]
10
+ __all__ = ["DevboxView", "StateTransition", "GatewaySpecs", "McpSpec"]
11
11
 
12
12
 
13
13
  class StateTransition(BaseModel):
@@ -39,6 +39,14 @@ class GatewaySpecs(BaseModel):
39
39
  """The ID of the secret containing the credential."""
40
40
 
41
41
 
42
+ class McpSpec(BaseModel):
43
+ mcp_config_id: str
44
+ """The ID of the MCP config (e.g., mcp_123abc)."""
45
+
46
+ secret_id: str
47
+ """The ID of the secret containing the credential."""
48
+
49
+
42
50
  class DevboxView(BaseModel):
43
51
  """A Devbox represents a virtual development environment.
44
52
 
@@ -99,6 +107,13 @@ class DevboxView(BaseModel):
99
107
  initiator_type: Optional[Literal["unknown", "api", "scenario", "scoring_validation"]] = None
100
108
  """The type of initiator that created the Devbox."""
101
109
 
110
+ mcp_specs: Optional[List[McpSpec]] = None
111
+ """[Beta] MCP specifications configured for this devbox.
112
+
113
+ Each spec links an MCP config to a secret for MCP server access through the MCP
114
+ hub.
115
+ """
116
+
102
117
  name: Optional[str] = None
103
118
  """The name of the Devbox."""
104
119
 
@@ -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()