runloop_api_client 1.19.0__tar.gz → 1.20.1__tar.gz

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