runloop-api-client 1.11.0__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 (425) hide show
  1. runloop_api_client-1.12.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/CHANGELOG.md +20 -0
  3. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/EXAMPLES.md +32 -0
  4. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/PKG-INFO +11 -2
  5. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/README-SDK.md +1 -0
  6. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/README.md +9 -0
  7. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/mcp_github_tools.py +2 -2
  8. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/registry.py +8 -0
  9. runloop_api_client-1.12.0/examples/secrets_with_devbox.py +112 -0
  10. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/pyproject.toml +2 -2
  11. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_compat.py +9 -2
  12. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_version.py +1 -1
  13. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/secrets.py +78 -0
  14. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/__init__.py +9 -0
  15. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_.py +128 -0
  16. runloop_api_client-1.12.0/src/runloop_api_client/sdk/async_secret.py +130 -0
  17. runloop_api_client-1.12.0/src/runloop_api_client/sdk/secret.py +130 -0
  18. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/sync.py +128 -0
  19. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_devbox.py +0 -29
  20. runloop_api_client-1.12.0/tests/smoketests/sdk/test_async_secret.py +128 -0
  21. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_devbox.py +0 -29
  22. runloop_api_client-1.12.0/tests/smoketests/sdk/test_secret.py +145 -0
  23. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/uv.lock +204 -151
  24. runloop_api_client-1.11.0/.release-please-manifest.json +0 -3
  25. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/.gitignore +0 -0
  26. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/CONTRIBUTING.md +0 -0
  27. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/LICENSE +0 -0
  28. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/SECURITY.md +0 -0
  29. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/api.md +0 -0
  30. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/bin/check-release-environment +0 -0
  31. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/bin/publish-pypi +0 -0
  32. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/__init__.py +0 -0
  33. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/_harness.py +0 -0
  34. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/blueprint_with_build_context.py +0 -0
  35. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/devbox_from_blueprint_lifecycle.py +0 -0
  36. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/devbox_snapshot_resume.py +0 -0
  37. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/examples/example_types.py +0 -0
  38. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/release-please-config.json +0 -0
  39. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/requirements-dev.lock +0 -0
  40. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop/lib/.keep +0 -0
  41. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/__init__.py +0 -0
  42. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_base_client.py +0 -0
  43. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_client.py +0 -0
  44. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_constants.py +0 -0
  45. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_exceptions.py +0 -0
  46. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_files.py +0 -0
  47. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_models.py +0 -0
  48. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_qs.py +0 -0
  49. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_resource.py +0 -0
  50. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_response.py +0 -0
  51. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_streaming.py +0 -0
  52. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_types.py +0 -0
  53. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  54. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  55. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  56. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_json.py +0 -0
  57. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  58. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  59. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  60. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  61. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  62. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  63. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  64. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  65. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  66. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/_utils/_validation.py +0 -0
  67. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/.keep +0 -0
  68. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/__init__.py +0 -0
  69. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/_ignore.py +0 -0
  70. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/context_loader.py +0 -0
  71. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/polling.py +0 -0
  72. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  73. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/pagination.py +0 -0
  74. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/py.typed +0 -0
  75. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/__init__.py +0 -0
  76. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/agents.py +0 -0
  77. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  78. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  79. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/benchmarks.py +0 -0
  80. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  81. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  82. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  83. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  84. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  85. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  86. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  87. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  88. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  89. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  90. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/network_policies.py +0 -0
  91. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/objects.py +0 -0
  92. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/repositories.py +0 -0
  93. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  94. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  95. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  96. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  97. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
  98. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/_types.py +0 -0
  99. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/agent.py +0 -0
  100. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
  101. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  102. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  103. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  104. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_devbox.py +0 -0
  105. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
  106. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  107. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  108. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  109. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  110. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  111. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  112. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  113. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  114. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  115. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  116. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
  117. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  118. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
  119. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/devbox.py +0 -0
  120. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/execution.py +0 -0
  121. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
  122. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  123. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  124. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
  125. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario.py +0 -0
  126. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  127. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  128. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/scorer.py +0 -0
  129. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
  130. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
  131. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/__init__.py +0 -0
  132. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_create_params.py +0 -0
  133. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_list_params.py +0 -0
  134. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_list_view.py +0 -0
  135. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/agent_view.py +0 -0
  136. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  137. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  138. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  139. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  140. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  141. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  142. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  143. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  144. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  145. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  146. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  147. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  148. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  149. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  150. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  151. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  152. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  153. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  154. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  155. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  156. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  157. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  158. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  159. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  160. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  161. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  162. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  163. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  164. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  165. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  166. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  167. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  168. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  169. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  170. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  171. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  172. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  173. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  174. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  175. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  176. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  177. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  178. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  179. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  180. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  181. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  182. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  183. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  184. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  185. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  186. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  187. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  188. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  189. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  190. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  191. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  192. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  193. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  194. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  195. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  196. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  197. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  198. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  199. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  200. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  201. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  202. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  203. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  204. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  205. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  206. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  207. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  208. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  209. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  210. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  211. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  212. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  213. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  214. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  215. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  216. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  217. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  218. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  219. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  220. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  221. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context.py +0 -0
  222. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  223. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  224. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  225. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  226. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  227. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  228. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  229. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  230. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  231. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  232. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  233. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  234. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
  235. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  236. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  237. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  238. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_params.py +0 -0
  239. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  240. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_list_view.py +0 -0
  241. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/object_view.py +0 -0
  242. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  243. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  244. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  245. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
  246. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  247. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  248. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  249. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  250. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  251. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  252. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  253. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  254. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  255. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  256. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  257. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  258. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  259. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  260. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  261. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  262. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  263. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  264. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  265. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  266. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  267. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  268. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  269. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  270. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  271. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  272. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  273. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  274. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  275. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  276. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  277. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  278. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  279. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  280. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  281. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  282. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/secret_view.py +0 -0
  283. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  284. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  285. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  286. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  287. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  288. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  289. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/mount.py +0 -0
  290. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  291. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  292. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  293. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  294. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  295. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  296. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  297. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  298. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  299. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  300. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  301. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
  302. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/__init__.py +0 -0
  303. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/__init__.py +0 -0
  304. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/__init__.py +0 -0
  305. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  306. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  307. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  308. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  309. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  310. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/__init__.py +0 -0
  311. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  312. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  313. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_agents.py +0 -0
  314. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmark_jobs.py +0 -0
  315. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmark_runs.py +0 -0
  316. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_benchmarks.py +0 -0
  317. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_blueprints.py +0 -0
  318. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_devboxes.py +0 -0
  319. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_gateway_configs.py +0 -0
  320. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_mcp_configs.py +0 -0
  321. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_network_policies.py +0 -0
  322. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_objects.py +0 -0
  323. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_repositories.py +0 -0
  324. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_scenarios.py +0 -0
  325. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/api_resources/test_secrets.py +0 -0
  326. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/conftest.py +0 -0
  327. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sample_file.txt +0 -0
  328. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/__init__.py +0 -0
  329. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/__init__.py +0 -0
  330. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/conftest.py +0 -0
  331. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_core.py +0 -0
  332. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  333. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  334. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
  335. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/conftest.py +0 -0
  336. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/__init__.py +0 -0
  337. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/conftest.py +0 -0
  338. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_core.py +0 -0
  339. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
  340. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_interfaces.py +0 -0
  341. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/devbox/test_streaming.py +0 -0
  342. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_agent.py +0 -0
  343. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_agent.py +0 -0
  344. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_benchmark.py +0 -0
  345. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_benchmark_run.py +0 -0
  346. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_blueprint.py +0 -0
  347. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_execution.py +0 -0
  348. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_execution_result.py +0 -0
  349. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_gateway_config.py +0 -0
  350. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_network_policy.py +0 -0
  351. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_ops.py +0 -0
  352. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario.py +0 -0
  353. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario_builder.py +0 -0
  354. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_scenario_run.py +0 -0
  355. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_scorer.py +0 -0
  356. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_snapshot.py +0 -0
  357. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_async_storage_object.py +0 -0
  358. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_benchmark.py +0 -0
  359. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_benchmark_run.py +0 -0
  360. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_blueprint.py +0 -0
  361. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_execution.py +0 -0
  362. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_execution_result.py +0 -0
  363. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_gateway_config.py +0 -0
  364. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_helpers.py +0 -0
  365. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_network_policy.py +0 -0
  366. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_ops.py +0 -0
  367. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_scenario.py +0 -0
  368. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_scenario_builder.py +0 -0
  369. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_scenario_run.py +0 -0
  370. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_scorer.py +0 -0
  371. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_snapshot.py +0 -0
  372. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/sdk/test_storage_object.py +0 -0
  373. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/README.md +0 -0
  374. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/__init__.py +0 -0
  375. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/conftest.py +0 -0
  376. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/examples/__init__.py +0 -0
  377. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/examples/test_examples.py +0 -0
  378. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/README.md +0 -0
  379. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/__init__.py +0 -0
  380. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/conftest.py +0 -0
  381. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_agent.py +0 -0
  382. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
  383. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  384. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  385. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  386. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  387. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  388. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  389. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  390. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  391. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  392. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
  393. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
  394. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  395. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  396. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
  397. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_scenario.py +0 -0
  398. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_scorer.py +0 -0
  399. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_sdk.py +0 -0
  400. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
  401. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
  402. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/test_blueprints.py +0 -0
  403. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/test_devboxes.py +0 -0
  404. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/test_executions.py +0 -0
  405. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  406. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/test_snapshots.py +0 -0
  407. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/smoketests/utils.py +0 -0
  408. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_client.py +0 -0
  409. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_command_id.py +0 -0
  410. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_deepcopy.py +0 -0
  411. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_extract_files.py +0 -0
  412. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_files.py +0 -0
  413. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_models.py +0 -0
  414. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_polling.py +0 -0
  415. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_qs.py +0 -0
  416. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_required_args.py +0 -0
  417. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_response.py +0 -0
  418. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_streaming.py +0 -0
  419. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_transform.py +0 -0
  420. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_utils/test_context_loader.py +0 -0
  421. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_utils/test_datetime_parse.py +0 -0
  422. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_utils/test_json.py +0 -0
  423. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_utils/test_proxy.py +0 -0
  424. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/test_utils/test_typing.py +0 -0
  425. {runloop_api_client-1.11.0 → runloop_api_client-1.12.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.12.0"
3
+ }
@@ -1,5 +1,25 @@
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
+
3
23
  ## 1.11.0 (2026-03-10)
4
24
 
5
25
  Full Changelog: [v1.10.3...v1.11.0](https://github.com/runloopai/api-client-python/compare/v1.10.3...v1.11.0)
@@ -11,6 +11,7 @@ Runnable examples live in [`examples/`](./examples).
11
11
  - [Devbox From Blueprint (Run Command, Shutdown)](#devbox-from-blueprint-lifecycle)
12
12
  - [Devbox Snapshot and Resume](#devbox-snapshot-resume)
13
13
  - [MCP Hub + Claude Code + GitHub](#mcp-github-tools)
14
+ - [Secrets with Devbox (Create, Inject, Verify, Delete)](#secrets-with-devbox)
14
15
 
15
16
  <a id="blueprint-with-build-context"></a>
16
17
  ## Blueprint with Build Context
@@ -135,3 +136,34 @@ uv run pytest -m smoketest tests/smoketests/examples/
135
136
  ```
136
137
 
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.11.0
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
@@ -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
@@ -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
@@ -80,9 +80,9 @@ def recipe(ctx: RecipeContext, options: McpExampleOptions) -> RecipeOutput: # n
80
80
 
81
81
  # Store the GitHub PAT as a Runloop secret
82
82
  secret_name = unique_name("example-github-mcp")
83
- sdk.api.secrets.create(name=secret_name, value=github_token)
83
+ secret = sdk.secret.create(name=secret_name, value=github_token)
84
84
  resources_created.append(f"secret:{secret_name}")
85
- cleanup.add(f"secret:{secret_name}", lambda: sdk.api.secrets.delete(secret_name))
85
+ cleanup.add(f"secret:{secret_name}", secret.delete)
86
86
 
87
87
  # Launch a devbox with MCP Hub wiring
88
88
  devbox = sdk.devbox.create(
@@ -9,6 +9,7 @@ from typing import Any, Callable, cast
9
9
 
10
10
  from .example_types import ExampleResult
11
11
  from .mcp_github_tools import run_mcp_github_tools_example
12
+ from .secrets_with_devbox import run_secrets_with_devbox_example
12
13
  from .devbox_snapshot_resume import run_devbox_snapshot_resume_example
13
14
  from .blueprint_with_build_context import run_blueprint_with_build_context_example
14
15
  from .devbox_from_blueprint_lifecycle import run_devbox_from_blueprint_lifecycle_example
@@ -44,6 +45,13 @@ example_registry: list[ExampleRegistryEntry] = [
44
45
  "required_env": ["RUNLOOP_API_KEY", "GITHUB_TOKEN", "ANTHROPIC_API_KEY"],
45
46
  "run": run_mcp_github_tools_example,
46
47
  },
48
+ {
49
+ "slug": "secrets-with-devbox",
50
+ "title": "Secrets with Devbox (Create, Inject, Verify, Delete)",
51
+ "file_name": "secrets_with_devbox.py",
52
+ "required_env": ["RUNLOOP_API_KEY"],
53
+ "run": run_secrets_with_devbox_example,
54
+ },
47
55
  ]
48
56
 
49
57
 
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env -S uv run python
2
+ """
3
+ ---
4
+ title: Secrets with Devbox (Create, Inject, Verify, Delete)
5
+ slug: secrets-with-devbox
6
+ use_case: Create a secret, inject it into a devbox as an environment variable, verify access, and clean up.
7
+ workflow:
8
+ - Create a secret with a test value
9
+ - Create a devbox with the secret mapped to an env var
10
+ - Execute a command that reads the secret from the environment
11
+ - Verify the value matches
12
+ - Update the secret and verify
13
+ - List secrets and verify the secret appears
14
+ - Shutdown devbox and delete secret
15
+ tags:
16
+ - secrets
17
+ - devbox
18
+ - environment-variables
19
+ - cleanup
20
+ prerequisites:
21
+ - RUNLOOP_API_KEY
22
+ run: uv run python -m examples.secrets_with_devbox
23
+ test: uv run pytest -m smoketest tests/smoketests/examples/
24
+ ---
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ from runloop_api_client import RunloopSDK
30
+
31
+ from ._harness import run_as_cli, unique_name, wrap_recipe
32
+ from .example_types import ExampleCheck, RecipeOutput, RecipeContext
33
+
34
+ # Note: do NOT hardcode secret values in your code!
35
+ # This is example code only; use environment variables instead!
36
+ _EXAMPLE_SECRET_VALUE = "my-secret-value"
37
+ _UPDATED_SECRET_VALUE = "updated-secret-value"
38
+
39
+
40
+ def recipe(ctx: RecipeContext) -> RecipeOutput:
41
+ """Create a secret, inject it into a devbox, and verify it is accessible."""
42
+ cleanup = ctx.cleanup
43
+
44
+ sdk = RunloopSDK()
45
+ resources_created: list[str] = []
46
+ checks: list[ExampleCheck] = []
47
+
48
+ secret_name = unique_name("RUNLOOP_SDK_EXAMPLE").upper().replace("-", "_")
49
+
50
+ secret = sdk.secret.create(name=secret_name, value=_EXAMPLE_SECRET_VALUE)
51
+ resources_created.append(f"secret:{secret_name}")
52
+ cleanup.add(f"secret:{secret_name}", lambda: secret.delete())
53
+
54
+ secret_info = secret.get_info()
55
+ checks.append(
56
+ ExampleCheck(
57
+ name="secret created successfully",
58
+ passed=secret.name == secret_name and secret_info.id.startswith("sec_"),
59
+ details=f"name={secret.name}, id={secret_info.id}",
60
+ )
61
+ )
62
+
63
+ devbox = sdk.devbox.create(
64
+ name=unique_name("secrets-example-devbox"),
65
+ secrets={
66
+ "MY_SECRET_ENV": secret.name,
67
+ },
68
+ launch_parameters={
69
+ "resource_size_request": "X_SMALL",
70
+ "keep_alive_time_seconds": 60 * 5,
71
+ },
72
+ )
73
+ resources_created.append(f"devbox:{devbox.id}")
74
+ cleanup.add(f"devbox:{devbox.id}", devbox.shutdown)
75
+
76
+ result = devbox.cmd.exec("echo $MY_SECRET_ENV")
77
+ stdout = result.stdout().strip()
78
+ checks.append(
79
+ ExampleCheck(
80
+ name="devbox can read secret as env var",
81
+ passed=result.exit_code == 0 and stdout == _EXAMPLE_SECRET_VALUE,
82
+ details=f'exit_code={result.exit_code}, stdout="{stdout}"',
83
+ )
84
+ )
85
+
86
+ updated_info = sdk.secret.update(secret, _UPDATED_SECRET_VALUE).get_info()
87
+ checks.append(
88
+ ExampleCheck(
89
+ name="secret updated successfully",
90
+ passed=updated_info.name == secret_name,
91
+ details=f"update_time_ms={updated_info.update_time_ms}",
92
+ )
93
+ )
94
+
95
+ secrets = sdk.secret.list()
96
+ found = next((s for s in secrets if s.name == secret_name), None)
97
+ checks.append(
98
+ ExampleCheck(
99
+ name="secret appears in list",
100
+ passed=found is not None,
101
+ details=f"found name={found.name}" if found else "not found",
102
+ )
103
+ )
104
+
105
+ return RecipeOutput(resources_created=resources_created, checks=checks)
106
+
107
+
108
+ run_secrets_with_devbox_example = wrap_recipe(recipe)
109
+
110
+
111
+ if __name__ == "__main__":
112
+ run_as_cli(run_secrets_with_devbox_example)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.11.0"
3
+ version = "1.12.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -11,7 +11,7 @@ authors = [
11
11
  dependencies = [
12
12
  "httpx>=0.23.0, <1",
13
13
  "pydantic>=2.0, <3",
14
- "typing-extensions>=4.10, <5",
14
+ "typing-extensions>=4.14, <5",
15
15
  "anyio>=3.5.0, <5",
16
16
  "distro>=1.7.0, <2",
17
17
  "sniffio",
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload
4
4
  from datetime import date, datetime
5
- from typing_extensions import Self, Literal
5
+ from typing_extensions import Self, Literal, TypedDict
6
6
 
7
7
  import pydantic
8
8
  from pydantic.fields import FieldInfo
@@ -131,6 +131,10 @@ def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str:
131
131
  return model.model_dump_json(indent=indent)
132
132
 
133
133
 
134
+ class _ModelDumpKwargs(TypedDict, total=False):
135
+ by_alias: bool
136
+
137
+
134
138
  def model_dump(
135
139
  model: pydantic.BaseModel,
136
140
  *,
@@ -142,6 +146,9 @@ def model_dump(
142
146
  by_alias: bool | None = None,
143
147
  ) -> dict[str, Any]:
144
148
  if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
149
+ kwargs: _ModelDumpKwargs = {}
150
+ if by_alias is not None:
151
+ kwargs["by_alias"] = by_alias
145
152
  return model.model_dump(
146
153
  mode=mode,
147
154
  exclude=exclude,
@@ -149,7 +156,7 @@ def model_dump(
149
156
  exclude_defaults=exclude_defaults,
150
157
  # warnings are not supported in Pydantic v1
151
158
  warnings=True if PYDANTIC_V1 else warnings,
152
- by_alias=by_alias,
159
+ **kwargs,
153
160
  )
154
161
  return cast(
155
162
  "dict[str, Any]",
@@ -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.11.0" # x-release-please-version
4
+ __version__ = "1.12.0" # x-release-please-version
@@ -96,6 +96,39 @@ class SecretsResource(SyncAPIResource):
96
96
  cast_to=SecretView,
97
97
  )
98
98
 
99
+ def retrieve(
100
+ self,
101
+ name: str,
102
+ *,
103
+ extra_headers: Headers | None = None,
104
+ extra_query: Query | None = None,
105
+ extra_body: Body | None = None,
106
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
107
+ ) -> SecretView:
108
+ """Retrieve a Secret by name.
109
+
110
+ Args:
111
+ extra_headers: Send extra headers
112
+
113
+ extra_query: Add additional query parameters to the request
114
+
115
+ extra_body: Add additional JSON properties to the request
116
+
117
+ timeout: Override the client-level default timeout for this request, in seconds
118
+ """
119
+ if not name:
120
+ raise ValueError(f"Expected a non-empty value for `name` but received {name!r}")
121
+ return self._get(
122
+ f"/v1/secrets/{name}",
123
+ options=make_request_options(
124
+ extra_headers=extra_headers,
125
+ extra_query=extra_query,
126
+ extra_body=extra_body,
127
+ timeout=timeout,
128
+ ),
129
+ cast_to=SecretView,
130
+ )
131
+
99
132
  def update(
100
133
  self,
101
134
  name: str,
@@ -299,6 +332,39 @@ class AsyncSecretsResource(AsyncAPIResource):
299
332
  cast_to=SecretView,
300
333
  )
301
334
 
335
+ async def retrieve(
336
+ self,
337
+ name: str,
338
+ *,
339
+ extra_headers: Headers | None = None,
340
+ extra_query: Query | None = None,
341
+ extra_body: Body | None = None,
342
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
343
+ ) -> SecretView:
344
+ """Retrieve a Secret by name.
345
+
346
+ Args:
347
+ extra_headers: Send extra headers
348
+
349
+ extra_query: Add additional query parameters to the request
350
+
351
+ extra_body: Add additional JSON properties to the request
352
+
353
+ timeout: Override the client-level default timeout for this request, in seconds
354
+ """
355
+ if not name:
356
+ raise ValueError(f"Expected a non-empty value for `name` but received {name!r}")
357
+ return await self._get(
358
+ f"/v1/secrets/{name}",
359
+ options=make_request_options(
360
+ extra_headers=extra_headers,
361
+ extra_query=extra_query,
362
+ extra_body=extra_body,
363
+ timeout=timeout,
364
+ ),
365
+ cast_to=SecretView,
366
+ )
367
+
302
368
  async def update(
303
369
  self,
304
370
  name: str,
@@ -435,6 +501,9 @@ class SecretsResourceWithRawResponse:
435
501
  self.create = to_raw_response_wrapper(
436
502
  secrets.create,
437
503
  )
504
+ self.retrieve = to_raw_response_wrapper(
505
+ secrets.retrieve,
506
+ )
438
507
  self.update = to_raw_response_wrapper(
439
508
  secrets.update,
440
509
  )
@@ -453,6 +522,9 @@ class AsyncSecretsResourceWithRawResponse:
453
522
  self.create = async_to_raw_response_wrapper(
454
523
  secrets.create,
455
524
  )
525
+ self.retrieve = async_to_raw_response_wrapper(
526
+ secrets.retrieve,
527
+ )
456
528
  self.update = async_to_raw_response_wrapper(
457
529
  secrets.update,
458
530
  )
@@ -471,6 +543,9 @@ class SecretsResourceWithStreamingResponse:
471
543
  self.create = to_streamed_response_wrapper(
472
544
  secrets.create,
473
545
  )
546
+ self.retrieve = to_streamed_response_wrapper(
547
+ secrets.retrieve,
548
+ )
474
549
  self.update = to_streamed_response_wrapper(
475
550
  secrets.update,
476
551
  )
@@ -489,6 +564,9 @@ class AsyncSecretsResourceWithStreamingResponse:
489
564
  self.create = async_to_streamed_response_wrapper(
490
565
  secrets.create,
491
566
  )
567
+ self.retrieve = async_to_streamed_response_wrapper(
568
+ secrets.retrieve,
569
+ )
492
570
  self.update = async_to_streamed_response_wrapper(
493
571
  secrets.update,
494
572
  )
@@ -9,6 +9,7 @@ from .sync import (
9
9
  AgentOps,
10
10
  DevboxOps,
11
11
  ScorerOps,
12
+ SecretOps,
12
13
  RunloopSDK,
13
14
  ScenarioOps,
14
15
  SnapshotOps,
@@ -25,6 +26,7 @@ from .async_ import (
25
26
  AsyncAgentOps,
26
27
  AsyncDevboxOps,
27
28
  AsyncScorerOps,
29
+ AsyncSecretOps,
28
30
  AsyncRunloopSDK,
29
31
  AsyncScenarioOps,
30
32
  AsyncSnapshotOps,
@@ -37,6 +39,7 @@ from .async_ import (
37
39
  )
38
40
  from .devbox import Devbox, NamedShell
39
41
  from .scorer import Scorer
42
+ from .secret import Secret
40
43
  from .scenario import Scenario
41
44
  from .snapshot import Snapshot
42
45
  from .benchmark import Benchmark
@@ -46,6 +49,7 @@ from .mcp_config import McpConfig
46
49
  from .async_agent import AsyncAgent
47
50
  from .async_devbox import AsyncDevbox, AsyncNamedShell
48
51
  from .async_scorer import AsyncScorer
52
+ from .async_secret import AsyncSecret
49
53
  from .scenario_run import ScenarioRun
50
54
  from .benchmark_run import BenchmarkRun
51
55
  from .async_scenario import AsyncScenario
@@ -82,6 +86,8 @@ __all__ = [
82
86
  "AsyncBlueprintOps",
83
87
  "ScenarioOps",
84
88
  "AsyncScenarioOps",
89
+ "SecretOps",
90
+ "AsyncSecretOps",
85
91
  "ScorerOps",
86
92
  "AsyncScorerOps",
87
93
  "SnapshotOps",
@@ -97,6 +103,7 @@ __all__ = [
97
103
  # Resource classes
98
104
  "Agent",
99
105
  "AsyncAgent",
106
+ "AsyncSecret",
100
107
  "Benchmark",
101
108
  "AsyncBenchmark",
102
109
  "BenchmarkRun",
@@ -116,6 +123,8 @@ __all__ = [
116
123
  "ScenarioBuilder",
117
124
  "AsyncScenarioBuilder",
118
125
  "ScenarioPreview",
126
+ "Secret",
127
+ "AsyncSecret",
119
128
  "Scorer",
120
129
  "AsyncScorer",
121
130
  "Snapshot",