runloop-api-client 1.10.3__tar.gz → 1.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. runloop_api_client-1.12.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/CHANGELOG.md +42 -0
  3. runloop_api_client-1.12.0/EXAMPLES.md +169 -0
  4. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/PKG-INFO +39 -2
  5. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/README-SDK.md +22 -2
  6. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/README.md +37 -0
  7. runloop_api_client-1.12.0/examples/__init__.py +1 -0
  8. runloop_api_client-1.12.0/examples/_harness.py +172 -0
  9. runloop_api_client-1.12.0/examples/blueprint_with_build_context.py +130 -0
  10. runloop_api_client-1.12.0/examples/devbox_from_blueprint_lifecycle.py +101 -0
  11. runloop_api_client-1.12.0/examples/devbox_snapshot_resume.py +134 -0
  12. runloop_api_client-1.12.0/examples/example_types.py +64 -0
  13. runloop_api_client-1.12.0/examples/mcp_github_tools.py +184 -0
  14. runloop_api_client-1.12.0/examples/registry.py +63 -0
  15. runloop_api_client-1.12.0/examples/secrets_with_devbox.py +112 -0
  16. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/pyproject.toml +3 -2
  17. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_compat.py +9 -2
  18. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_version.py +1 -1
  19. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/devboxes.py +16 -8
  20. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/secrets.py +78 -0
  21. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/__init__.py +9 -0
  22. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_.py +128 -0
  23. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_devbox.py +34 -0
  24. runloop_api_client-1.12.0/src/runloop_api_client/sdk/async_secret.py +130 -0
  25. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/devbox.py +34 -0
  26. runloop_api_client-1.12.0/src/runloop_api_client/sdk/secret.py +130 -0
  27. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/sync.py +128 -0
  28. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_devboxes.py +2 -2
  29. runloop_api_client-1.12.0/tests/smoketests/examples/__init__.py +1 -0
  30. runloop_api_client-1.12.0/tests/smoketests/examples/test_examples.py +107 -0
  31. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_devbox.py +52 -23
  32. runloop_api_client-1.12.0/tests/smoketests/sdk/test_async_secret.py +128 -0
  33. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_devbox.py +52 -23
  34. runloop_api_client-1.12.0/tests/smoketests/sdk/test_secret.py +145 -0
  35. runloop_api_client-1.12.0/tests/test_command_id.py +94 -0
  36. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/uv.lock +291 -151
  37. runloop_api_client-1.10.3/.release-please-manifest.json +0 -3
  38. runloop_api_client-1.10.3/examples/.keep +0 -4
  39. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/.gitignore +0 -0
  40. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/CONTRIBUTING.md +0 -0
  41. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/LICENSE +0 -0
  42. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/SECURITY.md +0 -0
  43. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/api.md +0 -0
  44. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/bin/check-release-environment +0 -0
  45. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/bin/publish-pypi +0 -0
  46. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/release-please-config.json +0 -0
  47. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/requirements-dev.lock +0 -0
  48. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop/lib/.keep +0 -0
  49. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/__init__.py +0 -0
  50. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_base_client.py +0 -0
  51. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_client.py +0 -0
  52. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_constants.py +0 -0
  53. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_exceptions.py +0 -0
  54. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_files.py +0 -0
  55. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_models.py +0 -0
  56. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_qs.py +0 -0
  57. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_resource.py +0 -0
  58. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_response.py +0 -0
  59. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_streaming.py +0 -0
  60. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_types.py +0 -0
  61. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  62. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  63. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  64. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_json.py +0 -0
  65. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  66. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  67. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  68. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  69. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  70. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  71. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  72. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  73. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  74. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_validation.py +0 -0
  75. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/.keep +0 -0
  76. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/__init__.py +0 -0
  77. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/_ignore.py +0 -0
  78. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/context_loader.py +0 -0
  79. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/polling.py +0 -0
  80. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  81. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/pagination.py +0 -0
  82. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/py.typed +0 -0
  83. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/__init__.py +0 -0
  84. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/agents.py +0 -0
  85. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  86. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  87. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmarks.py +0 -0
  88. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  89. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  90. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  91. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  92. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  93. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  94. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  95. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  96. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  97. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/network_policies.py +0 -0
  98. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/objects.py +0 -0
  99. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/repositories.py +0 -0
  100. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  101. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  102. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  103. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  104. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
  105. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/_types.py +0 -0
  106. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/agent.py +0 -0
  107. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
  108. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  109. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  110. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  111. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
  112. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  113. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  114. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  115. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  116. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  117. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  118. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  119. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  120. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  121. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  122. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
  123. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  124. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
  125. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/execution.py +0 -0
  126. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
  127. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  128. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  129. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
  130. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario.py +0 -0
  131. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  132. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  133. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scorer.py +0 -0
  134. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
  135. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
  136. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/__init__.py +0 -0
  137. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_create_params.py +0 -0
  138. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_list_params.py +0 -0
  139. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_list_view.py +0 -0
  140. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_view.py +0 -0
  141. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  142. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  143. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  144. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  145. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  146. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  147. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  148. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  149. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  150. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  151. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  152. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  153. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  154. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  155. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  156. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  157. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  158. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  159. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  160. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  161. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  162. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  163. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  164. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  165. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  166. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  167. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  168. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  169. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  170. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  171. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  172. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  173. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  174. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  175. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  176. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  177. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  178. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  179. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  180. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  181. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  182. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  183. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  184. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  185. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  186. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  187. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  188. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  189. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  190. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  191. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  192. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  193. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  194. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  195. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  196. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  197. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  198. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  199. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  200. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  201. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  202. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  203. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  204. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  205. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  206. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  207. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  208. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  209. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  210. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  211. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  212. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  213. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  214. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  215. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  216. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  217. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  218. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  219. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  220. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  221. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  222. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  223. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  224. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  225. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  226. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context.py +0 -0
  227. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  228. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  229. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  230. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  231. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  232. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  233. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  234. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  235. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  236. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  237. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  238. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  239. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
  240. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  241. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  242. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  243. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_params.py +0 -0
  244. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  245. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_view.py +0 -0
  246. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_view.py +0 -0
  247. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  248. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  249. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  250. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
  251. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  252. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  253. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  254. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  255. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  256. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  257. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  258. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  259. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  260. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  261. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  262. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  263. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  264. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  265. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  266. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  267. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  268. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  269. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  270. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  271. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  272. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  273. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  274. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  275. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  276. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  277. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  278. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  279. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  280. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  281. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  282. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  283. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  284. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  285. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  286. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  287. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_view.py +0 -0
  288. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  289. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  290. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  291. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  292. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  293. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  294. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/mount.py +0 -0
  295. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  296. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  297. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  298. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  299. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  300. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  301. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  302. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  303. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  304. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  305. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  306. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
  307. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/__init__.py +0 -0
  308. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/__init__.py +0 -0
  309. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/__init__.py +0 -0
  310. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  311. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  312. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  313. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  314. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  315. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/__init__.py +0 -0
  316. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  317. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  318. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_agents.py +0 -0
  319. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmark_jobs.py +0 -0
  320. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmark_runs.py +0 -0
  321. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmarks.py +0 -0
  322. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_blueprints.py +0 -0
  323. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_gateway_configs.py +0 -0
  324. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_mcp_configs.py +0 -0
  325. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_network_policies.py +0 -0
  326. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_objects.py +0 -0
  327. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_repositories.py +0 -0
  328. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_scenarios.py +0 -0
  329. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/api_resources/test_secrets.py +0 -0
  330. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/conftest.py +0 -0
  331. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sample_file.txt +0 -0
  332. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/__init__.py +0 -0
  333. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/__init__.py +0 -0
  334. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/conftest.py +0 -0
  335. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_core.py +0 -0
  336. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  337. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  338. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
  339. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/conftest.py +0 -0
  340. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/__init__.py +0 -0
  341. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/conftest.py +0 -0
  342. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_core.py +0 -0
  343. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
  344. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_interfaces.py +0 -0
  345. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_streaming.py +0 -0
  346. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_agent.py +0 -0
  347. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_agent.py +0 -0
  348. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_benchmark.py +0 -0
  349. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_benchmark_run.py +0 -0
  350. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_blueprint.py +0 -0
  351. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_execution.py +0 -0
  352. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_execution_result.py +0 -0
  353. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_gateway_config.py +0 -0
  354. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_network_policy.py +0 -0
  355. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_ops.py +0 -0
  356. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario.py +0 -0
  357. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario_builder.py +0 -0
  358. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario_run.py +0 -0
  359. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_scorer.py +0 -0
  360. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_snapshot.py +0 -0
  361. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_async_storage_object.py +0 -0
  362. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_benchmark.py +0 -0
  363. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_benchmark_run.py +0 -0
  364. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_blueprint.py +0 -0
  365. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_execution.py +0 -0
  366. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_execution_result.py +0 -0
  367. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_gateway_config.py +0 -0
  368. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_helpers.py +0 -0
  369. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_network_policy.py +0 -0
  370. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_ops.py +0 -0
  371. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_scenario.py +0 -0
  372. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_scenario_builder.py +0 -0
  373. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_scenario_run.py +0 -0
  374. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_scorer.py +0 -0
  375. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_snapshot.py +0 -0
  376. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/sdk/test_storage_object.py +0 -0
  377. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/README.md +0 -0
  378. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/__init__.py +0 -0
  379. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/conftest.py +0 -0
  380. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/README.md +0 -0
  381. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/__init__.py +0 -0
  382. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/conftest.py +0 -0
  383. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_agent.py +0 -0
  384. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
  385. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  386. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  387. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  388. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  389. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  390. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  391. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  392. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  393. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  394. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
  395. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
  396. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  397. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  398. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
  399. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_scenario.py +0 -0
  400. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_scorer.py +0 -0
  401. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_sdk.py +0 -0
  402. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
  403. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
  404. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/test_blueprints.py +0 -0
  405. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/test_devboxes.py +0 -0
  406. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/test_executions.py +0 -0
  407. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  408. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/test_snapshots.py +0 -0
  409. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/smoketests/utils.py +0 -0
  410. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_client.py +0 -0
  411. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_deepcopy.py +0 -0
  412. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_extract_files.py +0 -0
  413. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_files.py +0 -0
  414. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_models.py +0 -0
  415. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_polling.py +0 -0
  416. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_qs.py +0 -0
  417. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_required_args.py +0 -0
  418. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_response.py +0 -0
  419. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_streaming.py +0 -0
  420. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_transform.py +0 -0
  421. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_utils/test_context_loader.py +0 -0
  422. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_utils/test_datetime_parse.py +0 -0
  423. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_utils/test_json.py +0 -0
  424. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_utils/test_proxy.py +0 -0
  425. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/test_utils/test_typing.py +0 -0
  426. {runloop_api_client-1.10.3 → runloop_api_client-1.12.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.12.0"
3
+ }
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.12.0 (2026-03-18)
4
+
5
+ Full Changelog: [v1.11.0...v1.12.0](https://github.com/runloopai/api-client-python/compare/v1.11.0...v1.12.0)
6
+
7
+ ### Features
8
+
9
+ * add secrets to oo-sdk ([#756](https://github.com/runloopai/api-client-python/issues/756)) ([09c4997](https://github.com/runloopai/api-client-python/commit/09c4997908ca7ec2ab9a45173d4d0bcf33ad2ca2))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **deps:** bump minimum typing-extensions version ([a873aad](https://github.com/runloopai/api-client-python/commit/a873aada5cbf8d29600374039f4d65bd321fa6bb))
15
+ * **pydantic:** do not pass `by_alias` unless set ([baf3a9a](https://github.com/runloopai/api-client-python/commit/baf3a9a8fe64e14f92f31387781f95dc6c7753de))
16
+
17
+
18
+ ### Chores
19
+
20
+ * configure new SDK language ([13d3ada](https://github.com/runloopai/api-client-python/commit/13d3adaa20a78b6d02db41369505f28aed92e1f5))
21
+ * **internal:** tweak CI branches ([b374486](https://github.com/runloopai/api-client-python/commit/b374486156c36b01c55135e4a0c1871b78360176))
22
+
23
+ ## 1.11.0 (2026-03-10)
24
+
25
+ Full Changelog: [v1.10.3...v1.11.0](https://github.com/runloopai/api-client-python/compare/v1.10.3...v1.11.0)
26
+
27
+ ### Features
28
+
29
+ * add snapshots example ([#753](https://github.com/runloopai/api-client-python/issues/753)) ([f13916a](https://github.com/runloopai/api-client-python/commit/f13916a570fe708aef56c6fbfd5c06b9e0dc158e))
30
+ * **documentation:** added llms.txt, examples and referenced these artifacts via README ([#748](https://github.com/runloopai/api-client-python/issues/748)) ([bceb953](https://github.com/runloopai/api-client-python/commit/bceb953c8486bec6bbe5bca1276ed54d625eda5d))
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * add logs to devboxes, smoke tests & examples ([#755](https://github.com/runloopai/api-client-python/issues/755)) ([da5faa4](https://github.com/runloopai/api-client-python/commit/da5faa4e69348dd6f034a538046ab9ff2ff4831b))
36
+
37
+
38
+ ### Chores
39
+
40
+ * **ci:** skip uploading artifacts on stainless-internal branches ([6874252](https://github.com/runloopai/api-client-python/commit/6874252fe355ac8a44be6bc57cd6bb15a3f035be))
41
+ * **documentation:** correct exec advice ([#752](https://github.com/runloopai/api-client-python/issues/752)) ([fa16c1d](https://github.com/runloopai/api-client-python/commit/fa16c1d602ec301200e82a48fe23c2218ae82a08))
42
+ * **test:** do not count install time for mock server timeout ([f6fde05](https://github.com/runloopai/api-client-python/commit/f6fde050a5f4b985c01003cd7593c1619ede028f))
43
+ * update placeholder string ([5dfcd93](https://github.com/runloopai/api-client-python/commit/5dfcd93bb05cda783901377ee7fc03a6acffe0ae))
44
+
3
45
  ## 1.10.3 (2026-02-27)
4
46
 
5
47
  Full Changelog: [v1.10.2...v1.10.3](https://github.com/runloopai/api-client-python/compare/v1.10.2...v1.10.3)
@@ -0,0 +1,169 @@
1
+ # Examples
2
+
3
+ > This file is auto-generated from metadata in `examples/*.py`.
4
+ > Do not edit this file manually. Run `uv run python scripts/generate_examples_md.py` instead.
5
+
6
+ Runnable examples live in [`examples/`](./examples).
7
+
8
+ ## Table of Contents
9
+
10
+ - [Blueprint with Build Context](#blueprint-with-build-context)
11
+ - [Devbox From Blueprint (Run Command, Shutdown)](#devbox-from-blueprint-lifecycle)
12
+ - [Devbox Snapshot and Resume](#devbox-snapshot-resume)
13
+ - [MCP Hub + Claude Code + GitHub](#mcp-github-tools)
14
+ - [Secrets with Devbox (Create, Inject, Verify, Delete)](#secrets-with-devbox)
15
+
16
+ <a id="blueprint-with-build-context"></a>
17
+ ## Blueprint with Build Context
18
+
19
+ **Use case:** Create a blueprint using the object store to provide docker build context files, then verify files are copied into the image. Uses the async SDK.
20
+
21
+ **Tags:** `blueprint`, `object-store`, `build-context`, `devbox`, `cleanup`, `async`
22
+
23
+ ### Workflow
24
+ - Create a temporary directory with sample application files
25
+ - Upload the directory to object storage as build context
26
+ - Create a blueprint with a Dockerfile that copies the context files
27
+ - Create a devbox from the blueprint
28
+ - Verify the files were copied into the image
29
+ - Shutdown devbox and delete blueprint and storage object
30
+
31
+ ### Prerequisites
32
+ - `RUNLOOP_API_KEY`
33
+
34
+ ### Run
35
+ ```sh
36
+ uv run python -m examples.blueprint_with_build_context
37
+ ```
38
+
39
+ ### Test
40
+ ```sh
41
+ uv run pytest -m smoketest tests/smoketests/examples/
42
+ ```
43
+
44
+ **Source:** [`examples/blueprint_with_build_context.py`](./examples/blueprint_with_build_context.py)
45
+
46
+ <a id="devbox-from-blueprint-lifecycle"></a>
47
+ ## Devbox From Blueprint (Run Command, Shutdown)
48
+
49
+ **Use case:** Create a devbox from a blueprint, run a command, fetch logs, validate output, and cleanly tear everything down.
50
+
51
+ **Tags:** `devbox`, `blueprint`, `commands`, `logs`, `cleanup`
52
+
53
+ ### Workflow
54
+ - Create a blueprint
55
+ - Fetch blueprint build logs
56
+ - Create a devbox from the blueprint
57
+ - Execute a command in the devbox
58
+ - Fetch devbox logs
59
+ - Validate exit code, stdout, and logs
60
+ - Shutdown devbox and delete blueprint
61
+
62
+ ### Prerequisites
63
+ - `RUNLOOP_API_KEY`
64
+
65
+ ### Run
66
+ ```sh
67
+ uv run python -m examples.devbox_from_blueprint_lifecycle
68
+ ```
69
+
70
+ ### Test
71
+ ```sh
72
+ uv run pytest -m smoketest tests/smoketests/examples/
73
+ ```
74
+
75
+ **Source:** [`examples/devbox_from_blueprint_lifecycle.py`](./examples/devbox_from_blueprint_lifecycle.py)
76
+
77
+ <a id="devbox-snapshot-resume"></a>
78
+ ## Devbox Snapshot and Resume
79
+
80
+ **Use case:** Create a devbox, snapshot its disk, resume from the snapshot, and demonstrate that changes in the original devbox do not affect the clone. Uses the async SDK.
81
+
82
+ **Tags:** `devbox`, `snapshot`, `resume`, `cleanup`, `async`
83
+
84
+ ### Workflow
85
+ - Create a devbox
86
+ - Write a file to the devbox
87
+ - Create a disk snapshot
88
+ - Create a new devbox from the snapshot
89
+ - Modify the file on the original devbox
90
+ - Verify the clone has the original content
91
+ - Shutdown both devboxes and delete the snapshot
92
+
93
+ ### Prerequisites
94
+ - `RUNLOOP_API_KEY`
95
+
96
+ ### Run
97
+ ```sh
98
+ uv run python -m examples.devbox_snapshot_resume
99
+ ```
100
+
101
+ ### Test
102
+ ```sh
103
+ uv run pytest -m smoketest tests/smoketests/examples/
104
+ ```
105
+
106
+ **Source:** [`examples/devbox_snapshot_resume.py`](./examples/devbox_snapshot_resume.py)
107
+
108
+ <a id="mcp-github-tools"></a>
109
+ ## MCP Hub + Claude Code + GitHub
110
+
111
+ **Use case:** Connect Claude Code running in a devbox to GitHub tools through MCP Hub without exposing raw GitHub credentials to the devbox.
112
+
113
+ **Tags:** `mcp`, `devbox`, `github`, `commands`, `cleanup`
114
+
115
+ ### Workflow
116
+ - Create an MCP config for GitHub
117
+ - Store GitHub token as a Runloop secret
118
+ - Launch a devbox with MCP Hub wiring
119
+ - Install Claude Code and register MCP endpoint
120
+ - Run a Claude prompt through MCP tools
121
+ - Shutdown devbox and clean up cloud resources
122
+
123
+ ### Prerequisites
124
+ - `RUNLOOP_API_KEY`
125
+ - `GITHUB_TOKEN (GitHub PAT with repo scope)`
126
+ - `ANTHROPIC_API_KEY`
127
+
128
+ ### Run
129
+ ```sh
130
+ GITHUB_TOKEN=ghp_xxx ANTHROPIC_API_KEY=sk-ant-xxx uv run python -m examples.mcp_github_tools
131
+ ```
132
+
133
+ ### Test
134
+ ```sh
135
+ uv run pytest -m smoketest tests/smoketests/examples/
136
+ ```
137
+
138
+ **Source:** [`examples/mcp_github_tools.py`](./examples/mcp_github_tools.py)
139
+
140
+ <a id="secrets-with-devbox"></a>
141
+ ## Secrets with Devbox (Create, Inject, Verify, Delete)
142
+
143
+ **Use case:** Create a secret, inject it into a devbox as an environment variable, verify access, and clean up.
144
+
145
+ **Tags:** `secrets`, `devbox`, `environment-variables`, `cleanup`
146
+
147
+ ### Workflow
148
+ - Create a secret with a test value
149
+ - Create a devbox with the secret mapped to an env var
150
+ - Execute a command that reads the secret from the environment
151
+ - Verify the value matches
152
+ - Update the secret and verify
153
+ - List secrets and verify the secret appears
154
+ - Shutdown devbox and delete secret
155
+
156
+ ### Prerequisites
157
+ - `RUNLOOP_API_KEY`
158
+
159
+ ### Run
160
+ ```sh
161
+ uv run python -m examples.secrets_with_devbox
162
+ ```
163
+
164
+ ### Test
165
+ ```sh
166
+ uv run pytest -m smoketest tests/smoketests/examples/
167
+ ```
168
+
169
+ **Source:** [`examples/secrets_with_devbox.py`](./examples/secrets_with_devbox.py)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 1.10.3
3
+ Version: 1.12.0
4
4
  Summary: The official Python library for the runloop API
5
5
  Project-URL: Homepage, https://github.com/runloopai/api-client-python
6
6
  Project-URL: Repository, https://github.com/runloopai/api-client-python
@@ -28,7 +28,7 @@ Requires-Dist: distro<2,>=1.7.0
28
28
  Requires-Dist: httpx<1,>=0.23.0
29
29
  Requires-Dist: pydantic<3,>=2.0
30
30
  Requires-Dist: sniffio
31
- Requires-Dist: typing-extensions<5,>=4.10
31
+ Requires-Dist: typing-extensions<5,>=4.14
32
32
  Requires-Dist: uuid-utils>=0.11.0
33
33
  Provides-Extra: aiohttp
34
34
  Requires-Dist: aiohttp; extra == 'aiohttp'
@@ -46,6 +46,15 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://
46
46
 
47
47
  It is generated with [Stainless](https://www.stainless.com/).
48
48
 
49
+ ## MCP Server
50
+
51
+ Use the Runloop MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
52
+
53
+ [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40runloop%2Fapi-client-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBydW5sb29wL2FwaS1jbGllbnQtbWNwIl0sImVudiI6eyJSVU5MT09QX0FQSV9LRVkiOiJNeSBCZWFyZXIgVG9rZW4ifX0)
54
+ [![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40runloop%2Fapi-client-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40runloop%2Fapi-client-mcp%22%5D%2C%22env%22%3A%7B%22RUNLOOP_API_KEY%22%3A%22My%20Bearer%20Token%22%7D%7D)
55
+
56
+ > Note: You may need to set environment variables in your MCP client.
57
+
49
58
  ## Documentation
50
59
 
51
60
  The REST API documentation can be found on
@@ -125,6 +134,23 @@ asyncio.run(main())
125
134
 
126
135
  Functionality between the synchronous and asynchronous clients is otherwise identical.
127
136
 
137
+ ## Examples
138
+
139
+ Workflow-oriented runnable examples are documented in [`EXAMPLES.md`](./EXAMPLES.md).
140
+
141
+ `EXAMPLES.md` is generated from metadata in `examples/*.py` and should not be edited manually.
142
+ Regenerate it with:
143
+
144
+ ```sh
145
+ uv run python scripts/generate_examples_md.py
146
+ ```
147
+
148
+ ## Agent Guidance
149
+
150
+ Detailed agent-specific instructions for developing using this package live in [`llms.txt`](./llms.txt). Consolidated recipes for frequent tasks are in [`EXAMPLES.md`](./EXAMPLES.md).
151
+
152
+ After completing any modifications to this project, ensure `llms.txt` and `README.md` are kept in sync.
153
+
128
154
  ### With aiohttp
129
155
 
130
156
  By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
@@ -517,6 +543,17 @@ print(runloop_api_client.__version__)
517
543
 
518
544
  Python 3.9 or higher.
519
545
 
546
+ ## Development
547
+
548
+ After cloning the repository, run the bootstrap script and install git hooks:
549
+
550
+ ```sh
551
+ ./scripts/bootstrap
552
+ ./scripts/install-hooks
553
+ ```
554
+
555
+ This installs pre-push hooks that run linting and verify generated files are up to date.
556
+
520
557
  ## Contributing
521
558
 
522
559
  See [the contributing documentation](./CONTRIBUTING.md).
@@ -116,6 +116,7 @@ The SDK provides object-oriented interfaces for all major Runloop resources:
116
116
  - **`runloop.blueprint`** - Blueprint management (create, list, build blueprints)
117
117
  - **`runloop.snapshot`** - Snapshot management (list disk snapshots)
118
118
  - **`runloop.storage_object`** - Storage object management (upload, download, list objects)
119
+ - **`runloop.secret`** - Secret management (create, update, list, delete encrypted key-value pairs)
119
120
  - **`runloop.api`** - Direct access to the underlying REST API client
120
121
 
121
122
  ### Devbox
@@ -160,13 +161,13 @@ print(f"Devbox {info.name} is {info.status}")
160
161
  Execute commands synchronously or asynchronously:
161
162
 
162
163
  ```python
163
- # Synchronous command execution (waits for completion)
164
+ # exec blocks until completion - use for commands that return immediately
164
165
  result = devbox.cmd.exec("ls -la")
165
166
  print("Output:", result.stdout())
166
167
  print("Exit code:", result.exit_code)
167
168
  print("Success:", result.success)
168
169
 
169
- # Asynchronous command execution (returns immediately)
170
+ # exec_async returns immediately - use for long-running processes
170
171
  execution = devbox.cmd.exec_async("npm run dev")
171
172
 
172
173
  # Check execution status
@@ -393,11 +394,30 @@ async with await runloop.devbox.create(name="temp-devbox") as devbox:
393
394
  # devbox is automatically shutdown when exiting the context
394
395
  ```
395
396
 
397
+ #### Devbox Logs
398
+
399
+ Retrieve logs from a devbox, optionally filtered by execution ID or shell name:
400
+
401
+ ```python
402
+ # Get all devbox logs
403
+ logs = devbox.logs()
404
+ for log in logs.logs:
405
+ print(f"[{log.level}] {log.message}")
406
+
407
+ # Filter logs by execution ID
408
+ result = devbox.cmd.exec('echo "hello"')
409
+ exec_logs = devbox.logs(execution_id=result.execution_id)
410
+
411
+ # Filter logs by shell name
412
+ shell_logs = devbox.logs(shell_name="my-shell")
413
+ ```
414
+
396
415
  **Key methods:**
397
416
 
398
417
  - `devbox.get_info()` - Get devbox details and status
399
418
  - `devbox.cmd.exec()` - Execute commands synchronously
400
419
  - `devbox.cmd.exec_async()` - Execute commands asynchronously
420
+ - `devbox.logs()` - Retrieve devbox logs (optionally filter by execution_id or shell_name)
401
421
  - `devbox.file.read()` - Read file contents
402
422
  - `devbox.file.write()` - Write file contents
403
423
  - `devbox.file.upload()` - Upload files
@@ -9,6 +9,15 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://
9
9
 
10
10
  It is generated with [Stainless](https://www.stainless.com/).
11
11
 
12
+ ## MCP Server
13
+
14
+ Use the Runloop MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
15
+
16
+ [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40runloop%2Fapi-client-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBydW5sb29wL2FwaS1jbGllbnQtbWNwIl0sImVudiI6eyJSVU5MT09QX0FQSV9LRVkiOiJNeSBCZWFyZXIgVG9rZW4ifX0)
17
+ [![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40runloop%2Fapi-client-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40runloop%2Fapi-client-mcp%22%5D%2C%22env%22%3A%7B%22RUNLOOP_API_KEY%22%3A%22My%20Bearer%20Token%22%7D%7D)
18
+
19
+ > Note: You may need to set environment variables in your MCP client.
20
+
12
21
  ## Documentation
13
22
 
14
23
  The REST API documentation can be found on
@@ -88,6 +97,23 @@ asyncio.run(main())
88
97
 
89
98
  Functionality between the synchronous and asynchronous clients is otherwise identical.
90
99
 
100
+ ## Examples
101
+
102
+ Workflow-oriented runnable examples are documented in [`EXAMPLES.md`](./EXAMPLES.md).
103
+
104
+ `EXAMPLES.md` is generated from metadata in `examples/*.py` and should not be edited manually.
105
+ Regenerate it with:
106
+
107
+ ```sh
108
+ uv run python scripts/generate_examples_md.py
109
+ ```
110
+
111
+ ## Agent Guidance
112
+
113
+ Detailed agent-specific instructions for developing using this package live in [`llms.txt`](./llms.txt). Consolidated recipes for frequent tasks are in [`EXAMPLES.md`](./EXAMPLES.md).
114
+
115
+ After completing any modifications to this project, ensure `llms.txt` and `README.md` are kept in sync.
116
+
91
117
  ### With aiohttp
92
118
 
93
119
  By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
@@ -480,6 +506,17 @@ print(runloop_api_client.__version__)
480
506
 
481
507
  Python 3.9 or higher.
482
508
 
509
+ ## Development
510
+
511
+ After cloning the repository, run the bootstrap script and install git hooks:
512
+
513
+ ```sh
514
+ ./scripts/bootstrap
515
+ ./scripts/install-hooks
516
+ ```
517
+
518
+ This installs pre-push hooks that run linting and verify generated files are up to date.
519
+
483
520
  ## Contributing
484
521
 
485
522
  See [the contributing documentation](./CONTRIBUTING.md).
@@ -0,0 +1 @@
1
+ # Examples package for Runloop Python SDK
@@ -0,0 +1,172 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+ import json
5
+ import time
6
+ import asyncio
7
+ from typing import Any, TypeVar, Callable, Awaitable
8
+ from dataclasses import asdict
9
+
10
+ from .example_types import (
11
+ ExampleCheck,
12
+ RecipeOutput,
13
+ ExampleResult,
14
+ RecipeContext,
15
+ ExampleCleanupStatus,
16
+ ExampleCleanupFailure,
17
+ )
18
+
19
+ T = TypeVar("T")
20
+
21
+
22
+ def unique_name(prefix: str) -> str:
23
+ """Generate a unique name with timestamp and random suffix."""
24
+ return f"{prefix}-{int(time.time())}-{hex(int(time.time() * 1000) % 0xFFFFFF)[2:]}"
25
+
26
+
27
+ class _CleanupTracker:
28
+ """Tracks cleanup actions and executes them in LIFO order."""
29
+
30
+ def __init__(self, status: ExampleCleanupStatus) -> None:
31
+ self._status = status
32
+ self._actions: list[tuple[str, Callable[[], Any]]] = []
33
+
34
+ def add(self, resource: str, action: Callable[[], Any]) -> None:
35
+ """Register a cleanup action for a resource."""
36
+ self._actions.append((resource, action))
37
+
38
+ async def run(self) -> None:
39
+ """Execute all cleanup actions in reverse order."""
40
+ while self._actions:
41
+ resource, action = self._actions.pop()
42
+ self._status.attempted.append(resource)
43
+ try:
44
+ result = action()
45
+ if asyncio.iscoroutine(result):
46
+ await result
47
+ self._status.succeeded.append(resource)
48
+ except Exception as e:
49
+ self._status.failed.append(ExampleCleanupFailure(resource, str(e)))
50
+
51
+ if self._status.attempted:
52
+ if not self._status.failed:
53
+ print("Cleanup completed.") # noqa: T201
54
+ else:
55
+ print("Cleanup finished with errors.") # noqa: T201
56
+
57
+
58
+ def _should_fail_process(result: ExampleResult) -> bool:
59
+ """Determine if the process should exit with failure."""
60
+ has_failed_checks = any(not check.passed for check in result.checks)
61
+ return result.skipped or has_failed_checks or len(result.cleanup_status.failed) > 0
62
+
63
+
64
+ def _run_recipe_impl(
65
+ recipe_call: Callable[[], RecipeOutput | Awaitable[RecipeOutput]],
66
+ cleanup: _CleanupTracker,
67
+ cleanup_status: ExampleCleanupStatus,
68
+ ) -> ExampleResult:
69
+ """Shared implementation for running recipes with cleanup."""
70
+
71
+ async def _run_async() -> RecipeOutput:
72
+ try:
73
+ result = recipe_call()
74
+ if asyncio.iscoroutine(result):
75
+ output: RecipeOutput = await result
76
+ return output
77
+ return result # type: ignore[return-value]
78
+ finally:
79
+ await cleanup.run()
80
+
81
+ loop = asyncio.new_event_loop()
82
+ try:
83
+ output = loop.run_until_complete(_run_async())
84
+ return ExampleResult(
85
+ resources_created=output.resources_created,
86
+ checks=output.checks,
87
+ cleanup_status=cleanup_status,
88
+ )
89
+ finally:
90
+ loop.close()
91
+
92
+
93
+ def wrap_recipe(
94
+ recipe: Callable[[RecipeContext], RecipeOutput] | Callable[[RecipeContext], Awaitable[RecipeOutput]],
95
+ validate_env: Callable[[], tuple[bool, list[ExampleCheck]]] | None = None,
96
+ ) -> Callable[[], ExampleResult]:
97
+ """Wrap a recipe function with cleanup tracking and result handling.
98
+
99
+ Args:
100
+ recipe: The recipe function to wrap. Can be sync or async.
101
+ validate_env: Optional function to validate environment before running.
102
+ Returns (skip, checks) tuple.
103
+
104
+ Returns:
105
+ A callable that runs the recipe and returns ExampleResult.
106
+ """
107
+
108
+ def run() -> ExampleResult:
109
+ cleanup_status = ExampleCleanupStatus()
110
+ cleanup = _CleanupTracker(cleanup_status)
111
+
112
+ if validate_env is not None:
113
+ skip, checks = validate_env()
114
+ if skip:
115
+ return ExampleResult(
116
+ resources_created=[],
117
+ checks=checks,
118
+ cleanup_status=cleanup_status,
119
+ skipped=True,
120
+ )
121
+
122
+ ctx = RecipeContext(cleanup=cleanup)
123
+ return _run_recipe_impl(lambda: recipe(ctx), cleanup, cleanup_status)
124
+
125
+ return run
126
+
127
+
128
+ def wrap_recipe_with_options(
129
+ recipe: Callable[[RecipeContext, T], RecipeOutput] | Callable[[RecipeContext, T], Awaitable[RecipeOutput]],
130
+ validate_env: Callable[[T], tuple[bool, list[ExampleCheck]]] | None = None,
131
+ ) -> Callable[[T], ExampleResult]:
132
+ """Wrap a recipe function that takes options with cleanup tracking.
133
+
134
+ Args:
135
+ recipe: The recipe function to wrap. Can be sync or async. Takes options parameter.
136
+ validate_env: Optional function to validate environment before running.
137
+ Takes options and returns (skip, checks) tuple.
138
+
139
+ Returns:
140
+ A callable that runs the recipe with options and returns ExampleResult.
141
+ """
142
+
143
+ def run(options: T) -> ExampleResult:
144
+ cleanup_status = ExampleCleanupStatus()
145
+ cleanup = _CleanupTracker(cleanup_status)
146
+
147
+ if validate_env is not None:
148
+ skip, checks = validate_env(options)
149
+ if skip:
150
+ return ExampleResult(
151
+ resources_created=[],
152
+ checks=checks,
153
+ cleanup_status=cleanup_status,
154
+ skipped=True,
155
+ )
156
+
157
+ ctx = RecipeContext(cleanup=cleanup)
158
+ return _run_recipe_impl(lambda: recipe(ctx, options), cleanup, cleanup_status)
159
+
160
+ return run
161
+
162
+
163
+ def run_as_cli(run: Callable[[], ExampleResult]) -> None:
164
+ """Run an example and exit with appropriate status code."""
165
+ try:
166
+ result = run()
167
+ print(json.dumps(asdict(result), indent=2)) # noqa: T201
168
+ if _should_fail_process(result):
169
+ sys.exit(1)
170
+ except Exception as e:
171
+ print(f"Error: {e}") # noqa: T201
172
+ sys.exit(1)