runloop_api_client 1.20.2__tar.gz → 1.21.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 (457) hide show
  1. runloop_api_client-1.21.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/CHANGELOG.md +38 -0
  3. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/PKG-INFO +1 -1
  4. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/api.md +16 -0
  5. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/pyproject.toml +2 -2
  6. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_base_client.py +220 -20
  7. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_client.py +89 -3
  8. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_constants.py +1 -1
  9. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_files.py +1 -1
  10. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_models.py +80 -0
  11. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_qs.py +2 -6
  12. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_types.py +3 -0
  13. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_utils.py +34 -8
  14. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_version.py +1 -1
  15. runloop_api_client-1.21.0/src/runloop_api_client/lib/wait_for_status.py +99 -0
  16. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/__init__.py +14 -0
  17. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/agents.py +12 -8
  18. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/devboxes/devboxes.py +141 -94
  19. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/devboxes/executions.py +23 -50
  20. runloop_api_client-1.21.0/src/runloop_api_client/resources/pty.py +418 -0
  21. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/secrets.py +12 -10
  22. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/__init__.py +5 -0
  23. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_create_params.py +8 -3
  24. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_view.py +8 -3
  25. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_view.py +4 -1
  26. runloop_api_client-1.21.0/src/runloop_api_client/types/pty_connect_params.py +23 -0
  27. runloop_api_client-1.21.0/src/runloop_api_client/types/pty_connect_view.py +27 -0
  28. runloop_api_client-1.21.0/src/runloop_api_client/types/pty_control_params.py +17 -0
  29. runloop_api_client-1.21.0/src/runloop_api_client/types/pty_control_result_view.py +13 -0
  30. runloop_api_client-1.21.0/src/runloop_api_client/types/pty_tunnel_view.py +21 -0
  31. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_agents.py +2 -8
  32. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_devboxes.py +77 -0
  33. runloop_api_client-1.21.0/tests/api_resources/test_pty.py +216 -0
  34. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_secrets.py +76 -0
  35. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/conftest.py +10 -1
  36. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_client.py +5 -1
  37. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_extract_files.py +23 -5
  38. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_files.py +1 -1
  39. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_models.py +57 -3
  40. runloop_api_client-1.21.0/tests/test_shared_pool.py +319 -0
  41. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/uv.lock +1 -1
  42. runloop_api_client-1.20.2/.release-please-manifest.json +0 -3
  43. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/.gitignore +0 -0
  44. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/CONTRIBUTING.md +0 -0
  45. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/EXAMPLES.md +0 -0
  46. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/LICENSE +0 -0
  47. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/README-SDK.md +0 -0
  48. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/README.md +0 -0
  49. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/SECURITY.md +0 -0
  50. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/bin/check-release-environment +0 -0
  51. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/bin/publish-pypi +0 -0
  52. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/__init__.py +0 -0
  53. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/_harness.py +0 -0
  54. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/blueprint_with_build_context.py +0 -0
  55. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/devbox_from_blueprint_lifecycle.py +0 -0
  56. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/devbox_snapshot_resume.py +0 -0
  57. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/devbox_snapshots.py +0 -0
  58. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/devbox_tunnel.py +0 -0
  59. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/example_types.py +0 -0
  60. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/mcp_github_tools.py +0 -0
  61. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/registry.py +0 -0
  62. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/examples/secrets_with_devbox.py +0 -0
  63. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/release-please-config.json +0 -0
  64. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/requirements-dev.lock +0 -0
  65. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop/lib/.keep +0 -0
  66. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/__init__.py +0 -0
  67. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_compat.py +0 -0
  68. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_exceptions.py +0 -0
  69. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_resource.py +0 -0
  70. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_response.py +0 -0
  71. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_streaming.py +0 -0
  72. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  73. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  74. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  75. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_json.py +0 -0
  76. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  77. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_path.py +0 -0
  78. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  79. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  80. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  81. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  82. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  83. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  84. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  85. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/_utils/_validation.py +0 -0
  86. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/.keep +0 -0
  87. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/__init__.py +0 -0
  88. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/_ignore.py +0 -0
  89. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/context_loader.py +0 -0
  90. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/polling.py +0 -0
  91. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  92. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/pagination.py +0 -0
  93. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/py.typed +0 -0
  94. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/apikeys.py +0 -0
  95. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/axons/__init__.py +0 -0
  96. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/axons/axons.py +0 -0
  97. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/axons/events.py +0 -0
  98. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/axons/sql.py +0 -0
  99. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  100. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  101. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/benchmarks.py +0 -0
  102. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  103. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  104. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  105. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  106. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  107. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  108. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/network_policies.py +0 -0
  109. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/objects.py +0 -0
  110. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/restricted_keys.py +0 -0
  111. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  112. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  113. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  114. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  115. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/__init__.py +0 -0
  116. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
  117. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/_types.py +0 -0
  118. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/agent.py +0 -0
  119. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_.py +0 -0
  120. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
  121. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_axon.py +0 -0
  122. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  123. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  124. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  125. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_devbox.py +0 -0
  126. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
  127. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  128. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  129. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  130. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  131. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  132. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  133. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  134. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  135. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_secret.py +0 -0
  136. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  137. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  138. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/axon.py +0 -0
  139. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
  140. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  141. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
  142. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/devbox.py +0 -0
  143. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/execution.py +0 -0
  144. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
  145. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  146. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  147. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
  148. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/scenario.py +0 -0
  149. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  150. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  151. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/scorer.py +0 -0
  152. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/secret.py +0 -0
  153. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
  154. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
  155. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/sdk/sync.py +0 -0
  156. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_devbox_counts_view.py +0 -0
  157. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_list_params.py +0 -0
  158. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_list_public_params.py +0 -0
  159. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/agent_list_view.py +0 -0
  160. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/api_key_created_view.py +0 -0
  161. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/apikey_create_params.py +0 -0
  162. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_create_params.py +0 -0
  163. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_event_view.py +0 -0
  164. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_list_params.py +0 -0
  165. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_list_view.py +0 -0
  166. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_publish_params.py +0 -0
  167. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_subscribe_sse_params.py +0 -0
  168. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axon_view.py +0 -0
  169. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/__init__.py +0 -0
  170. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/axon_event_list_view.py +0 -0
  171. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/event_list_params.py +0 -0
  172. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_batch_params.py +0 -0
  173. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_batch_result_view.py +0 -0
  174. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_column_meta_view.py +0 -0
  175. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_query_params.py +0 -0
  176. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_query_result_view.py +0 -0
  177. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_result_meta_view.py +0 -0
  178. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_statement_params.py +0 -0
  179. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_step_error_view.py +0 -0
  180. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/axons/sql_step_result_view.py +0 -0
  181. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  182. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  183. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  184. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  185. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  186. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  187. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  188. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  189. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  190. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  191. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  192. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  193. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  194. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  195. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  196. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  197. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  198. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  199. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  200. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  201. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  202. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  203. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  204. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  205. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  206. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  207. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  208. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  209. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  210. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  211. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  212. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  213. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  214. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  215. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  216. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  217. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  218. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  219. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  220. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  221. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  222. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  223. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  224. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  225. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  226. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  227. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  228. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  229. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  230. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  231. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  232. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  233. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  234. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  235. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  236. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  237. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  238. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  239. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  240. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  241. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  242. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  243. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  244. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  245. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  246. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  247. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  248. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  249. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  250. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  251. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  252. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  253. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/input_context.py +0 -0
  254. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  255. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  256. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  257. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  258. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  259. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  260. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  261. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  262. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  263. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  264. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  265. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  266. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
  267. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  268. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  269. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  270. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_list_params.py +0 -0
  271. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  272. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/object_list_view.py +0 -0
  273. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/publish_result_view.py +0 -0
  274. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/restricted_key_create_params.py +0 -0
  275. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/restricted_key_created_view.py +0 -0
  276. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  277. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  278. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  279. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  280. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  281. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  282. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  283. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  284. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  285. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  286. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  287. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  288. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  289. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  290. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  291. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  292. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  293. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  294. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  295. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  296. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scope_entry_view.py +0 -0
  297. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scope_entry_view_param.py +0 -0
  298. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  299. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  300. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  301. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  302. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  303. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  304. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  305. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  306. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  307. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  308. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  309. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/secret_view.py +0 -0
  310. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  311. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  312. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  313. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  314. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/broker_mount.py +0 -0
  315. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  316. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  317. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/mount.py +0 -0
  318. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  319. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  320. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  321. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  322. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  323. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  324. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/broker_mount.py +0 -0
  325. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  326. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  327. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  328. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  329. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  330. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
  331. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/__init__.py +0 -0
  332. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/__init__.py +0 -0
  333. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/axons/__init__.py +0 -0
  334. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/axons/test_events.py +0 -0
  335. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/axons/test_sql.py +0 -0
  336. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/devboxes/__init__.py +0 -0
  337. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  338. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  339. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  340. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/scenarios/__init__.py +0 -0
  341. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  342. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  343. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_apikeys.py +0 -0
  344. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_axons.py +0 -0
  345. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_benchmark_jobs.py +0 -0
  346. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_benchmark_runs.py +0 -0
  347. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_benchmarks.py +0 -0
  348. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_blueprints.py +0 -0
  349. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_gateway_configs.py +0 -0
  350. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_mcp_configs.py +0 -0
  351. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_network_policies.py +0 -0
  352. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_objects.py +0 -0
  353. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_restricted_keys.py +0 -0
  354. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/api_resources/test_scenarios.py +0 -0
  355. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sample_file.txt +0 -0
  356. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/__init__.py +0 -0
  357. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/__init__.py +0 -0
  358. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/conftest.py +0 -0
  359. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/test_core.py +0 -0
  360. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  361. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  362. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
  363. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/conftest.py +0 -0
  364. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/__init__.py +0 -0
  365. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/conftest.py +0 -0
  366. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/test_core.py +0 -0
  367. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
  368. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/test_interfaces.py +0 -0
  369. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/devbox/test_streaming.py +0 -0
  370. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_agent.py +0 -0
  371. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_agent.py +0 -0
  372. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_axon.py +0 -0
  373. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_benchmark.py +0 -0
  374. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_benchmark_run.py +0 -0
  375. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_blueprint.py +0 -0
  376. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_execution.py +0 -0
  377. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_execution_result.py +0 -0
  378. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_gateway_config.py +0 -0
  379. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_network_policy.py +0 -0
  380. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_ops.py +0 -0
  381. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_scenario.py +0 -0
  382. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_scenario_builder.py +0 -0
  383. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_scenario_run.py +0 -0
  384. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_scorer.py +0 -0
  385. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_snapshot.py +0 -0
  386. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_async_storage_object.py +0 -0
  387. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_axon.py +0 -0
  388. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_benchmark.py +0 -0
  389. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_benchmark_run.py +0 -0
  390. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_blueprint.py +0 -0
  391. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_execution.py +0 -0
  392. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_execution_result.py +0 -0
  393. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_gateway_config.py +0 -0
  394. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_helpers.py +0 -0
  395. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_network_policy.py +0 -0
  396. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_ops.py +0 -0
  397. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_scenario.py +0 -0
  398. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_scenario_builder.py +0 -0
  399. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_scenario_run.py +0 -0
  400. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_scorer.py +0 -0
  401. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_snapshot.py +0 -0
  402. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/sdk/test_storage_object.py +0 -0
  403. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/README.md +0 -0
  404. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/__init__.py +0 -0
  405. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/conftest.py +0 -0
  406. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/examples/__init__.py +0 -0
  407. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/examples/test_examples.py +0 -0
  408. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/README.md +0 -0
  409. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/__init__.py +0 -0
  410. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/conftest.py +0 -0
  411. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_agent.py +0 -0
  412. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
  413. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_axon.py +0 -0
  414. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  415. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  416. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_devbox.py +0 -0
  417. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  418. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  419. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  420. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  421. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  422. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_secret.py +0 -0
  423. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  424. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  425. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_axon.py +0 -0
  426. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
  427. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
  428. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_devbox.py +0 -0
  429. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  430. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  431. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
  432. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_scenario.py +0 -0
  433. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_scorer.py +0 -0
  434. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_sdk.py +0 -0
  435. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_secret.py +0 -0
  436. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
  437. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
  438. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/test_blueprints.py +0 -0
  439. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/test_devboxes.py +0 -0
  440. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/test_executions.py +0 -0
  441. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  442. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/test_snapshots.py +0 -0
  443. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/smoketests/utils.py +0 -0
  444. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_command_id.py +0 -0
  445. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_polling.py +0 -0
  446. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_qs.py +0 -0
  447. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_required_args.py +0 -0
  448. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_response.py +0 -0
  449. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_streaming.py +0 -0
  450. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_transform.py +0 -0
  451. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_context_loader.py +0 -0
  452. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_datetime_parse.py +0 -0
  453. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_json.py +0 -0
  454. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_path.py +0 -0
  455. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_proxy.py +0 -0
  456. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/test_utils/test_typing.py +0 -0
  457. {runloop_api_client-1.20.2 → runloop_api_client-1.21.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.21.0"
3
+ }
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.21.0 (2026-05-13)
4
+
5
+ Full Changelog: [v1.20.3...v1.21.0](https://github.com/runloopai/api-client-python/compare/v1.20.3...v1.21.0)
6
+
7
+ ### Features
8
+
9
+ * **internal/types:** support eagerly validating pydantic iterators ([f089d05](https://github.com/runloopai/api-client-python/commit/f089d05c5e00c2ba980d0afdea79ed026242a174))
10
+ * **metadata:** add object metadata viewing, discovery, and validation ([#9124](https://github.com/runloopai/api-client-python/issues/9124)) ([ba0b5dc](https://github.com/runloopai/api-client-python/commit/ba0b5dc873a47073c453b168fe4d966754cccc0e))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **client:** add missing f-string prefix in file type error message ([930b1e2](https://github.com/runloopai/api-client-python/commit/930b1e2d169a291415007f2897fec5a410ecf993))
16
+ * update openapi.stainless.yaml for PTY server methods ([#9218](https://github.com/runloopai/api-client-python/issues/9218)) ([ac1cb22](https://github.com/runloopai/api-client-python/commit/ac1cb2264b8e39da8aa65d8fdcd4595bce55def6))
17
+ * update types for pty control, use int instead of str ([#9235](https://github.com/runloopai/api-client-python/issues/9235)) ([7ceb2bf](https://github.com/runloopai/api-client-python/commit/7ceb2bf09c3241a27892fbab2272d63ef76b1a8a))
18
+
19
+ ## 1.20.3 (2026-05-08)
20
+
21
+ Full Changelog: [v1.20.2...v1.20.3](https://github.com/runloopai/api-client-python/compare/v1.20.2...v1.20.3)
22
+
23
+ ### Features
24
+
25
+ * make agent version optional in API ([#8858](https://github.com/runloopai/api-client-python/issues/8858)) ([7e11a9d](https://github.com/runloopai/api-client-python/commit/7e11a9db85aff6c28dcc04b8d391979027f38549))
26
+ * share HTTP connection pool across SDK instances; refactor polling ([#797](https://github.com/runloopai/api-client-python/issues/797)) ([4f2fc4c](https://github.com/runloopai/api-client-python/commit/4f2fc4ca6d0b7a0b13b236dafb0e4e3148c2ed58))
27
+ * support setting headers via env ([54ead49](https://github.com/runloopai/api-client-python/commit/54ead49fd28a61f60e18197d727fa57216c785fd))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * use correct field name format for multipart file arrays ([c564da8](https://github.com/runloopai/api-client-python/commit/c564da85b7dfdbb77edf347f6b25ca4ca57e470e))
33
+
34
+
35
+ ### Chores
36
+
37
+ * add get secret to stainless ([#7833](https://github.com/runloopai/api-client-python/issues/7833)) ([ce39778](https://github.com/runloopai/api-client-python/commit/ce39778de67907365c90f11ba3b3602cbc7daa2a))
38
+ * **internal:** more robust bootstrap script ([115744e](https://github.com/runloopai/api-client-python/commit/115744e3c181822a1ec172e0526684839e278899))
39
+ * **internal:** reformat pyproject.toml ([89e8401](https://github.com/runloopai/api-client-python/commit/89e8401b518f0ec15cb1e394dde66cb876bf0578))
40
+
3
41
  ## 1.20.2 (2026-05-01)
4
42
 
5
43
  Full Changelog: [v1.20.1...v1.20.2](https://github.com/runloopai/api-client-python/compare/v1.20.1...v1.20.2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 1.20.2
3
+ Version: 1.21.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
@@ -198,6 +198,7 @@ from runloop_api_client.types import (
198
198
  DevboxSnapshotListView,
199
199
  DevboxSnapshotView,
200
200
  DevboxView,
201
+ PtyTunnelView,
201
202
  TunnelView,
202
203
  DevboxCreateSSHKeyResponse,
203
204
  DevboxReadFileContentsResponse,
@@ -211,6 +212,7 @@ Methods:
211
212
  - <code title="get /v1/devboxes/{id}">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
212
213
  - <code title="post /v1/devboxes/{id}">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
213
214
  - <code title="get /v1/devboxes">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">list</a>(\*\*<a href="src/runloop_api_client/types/devbox_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">SyncDevboxesCursorIDPage[DevboxView]</a></code>
215
+ - <code title="post /v1/devboxes/{id}/create_pty_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_pty_tunnel</a>(id) -> <a href="./src/runloop_api_client/types/pty_tunnel_view.py">PtyTunnelView</a></code>
214
216
  - <code title="post /v1/devboxes/{id}/create_ssh_key">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_ssh_key</a>(id) -> <a href="./src/runloop_api_client/types/devbox_create_ssh_key_response.py">DevboxCreateSSHKeyResponse</a></code>
215
217
  - <code title="post /v1/devboxes/disk_snapshots/{id}/delete">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">delete_disk_snapshot</a>(id) -> object</code>
216
218
  - <code title="post /v1/devboxes/{id}/download_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">download_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_download_file_params.py">params</a>) -> BinaryAPIResponse</code>
@@ -278,6 +280,19 @@ Methods:
278
280
  - <code title="get /v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">stream_stderr_updates</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/execution_update_chunk.py">ExecutionUpdateChunk</a></code>
279
281
  - <code title="get /v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">stream_stdout_updates</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/execution_update_chunk.py">ExecutionUpdateChunk</a></code>
280
282
 
283
+ # Pty
284
+
285
+ Types:
286
+
287
+ ```python
288
+ from runloop_api_client.types import PtyConnectView, PtyControlParams, PtyControlResultView
289
+ ```
290
+
291
+ Methods:
292
+
293
+ - <code title="get /pty/{session_name}">client.pty.<a href="./src/runloop_api_client/resources/pty.py">connect</a>(session_name, \*\*<a href="src/runloop_api_client/types/pty_connect_params.py">params</a>) -> <a href="./src/runloop_api_client/types/pty_connect_view.py">PtyConnectView</a></code>
294
+ - <code title="post /pty/{session_name}/control">client.pty.<a href="./src/runloop_api_client/resources/pty.py">control</a>(session_name, \*\*<a href="src/runloop_api_client/types/pty_control_params.py">params</a>) -> <a href="./src/runloop_api_client/types/pty_control_result_view.py">PtyControlResultView</a></code>
295
+
281
296
  # Scenarios
282
297
 
283
298
  Types:
@@ -381,6 +396,7 @@ from runloop_api_client.types import (
381
396
  Methods:
382
397
 
383
398
  - <code title="post /v1/secrets">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">create</a>(\*\*<a href="src/runloop_api_client/types/secret_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
399
+ - <code title="get /v1/secrets/{name}">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">retrieve</a>(name) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
384
400
  - <code title="post /v1/secrets/{name}">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">update</a>(name, \*\*<a href="src/runloop_api_client/types/secret_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
385
401
  - <code title="get /v1/secrets">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">list</a>(\*\*<a href="src/runloop_api_client/types/secret_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_list_view.py">SecretListView</a></code>
386
402
  - <code title="post /v1/secrets/{name}/delete">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">delete</a>(name) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.20.2"
3
+ version = "1.21.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -157,7 +157,7 @@ show_error_codes = true
157
157
  #
158
158
  # We also exclude our `tests` as mypy doesn't always infer
159
159
  # types correctly and Pyright will still catch any type errors.
160
- exclude = ['src/runloop_api_client/_files.py', '_dev/.*.py', 'tests/.*']
160
+ exclude = ["src/runloop_api_client/_files.py", "_dev/.*.py", "tests/.*"]
161
161
 
162
162
  strict_equality = true
163
163
  implicit_reexport = true
@@ -8,8 +8,10 @@ import email
8
8
  import asyncio
9
9
  import inspect
10
10
  import logging
11
+ import weakref
11
12
  import platform
12
13
  import warnings
14
+ import threading
13
15
  import email.utils
14
16
  from types import TracebackType
15
17
  from random import random
@@ -90,6 +92,88 @@ from ._utils._json import openapi_dumps
90
92
 
91
93
  log: logging.Logger = logging.getLogger(__name__)
92
94
 
95
+ # Shared HTTP transport state. We share transports (connection pools) rather
96
+ # than full httpx clients so each SDK instance keeps its own cookie jar and
97
+ # mutable client state. Refcounted wrappers close the real transport only
98
+ # when the last user releases it.
99
+ # The async transport is keyed by event loop because connections bind to the
100
+ # loop that created them and cannot be reused across asyncio.run() calls.
101
+ _pool_lock = threading.Lock()
102
+
103
+
104
+ class _SharedTransport(httpx.BaseTransport):
105
+ """Refcounted wrapper: delegates to a real transport, closes it when refcount hits 0."""
106
+
107
+ def __init__(self, transport: httpx.BaseTransport) -> None:
108
+ self._transport = transport
109
+ self._refcount = 1
110
+ self._lock = threading.Lock()
111
+
112
+ @property
113
+ def refcount(self) -> int:
114
+ return self._refcount
115
+
116
+ def acquire(self) -> bool:
117
+ with self._lock:
118
+ if self._refcount <= 0:
119
+ return False
120
+ self._refcount += 1
121
+ return True
122
+
123
+ @override
124
+ def handle_request(self, request: httpx.Request) -> httpx.Response:
125
+ return self._transport.handle_request(request)
126
+
127
+ @override
128
+ def close(self) -> None:
129
+ should_close = False
130
+ with self._lock:
131
+ self._refcount -= 1
132
+ if self._refcount <= 0:
133
+ should_close = True
134
+ if should_close:
135
+ self._transport.close()
136
+
137
+
138
+ class _SharedAsyncTransport(httpx.AsyncBaseTransport):
139
+ """Async refcounted wrapper: delegates to a real async transport."""
140
+
141
+ def __init__(self, transport: httpx.AsyncBaseTransport) -> None:
142
+ self._transport = transport
143
+ self._refcount = 1
144
+ self._lock = threading.Lock()
145
+
146
+ @property
147
+ def refcount(self) -> int:
148
+ return self._refcount
149
+
150
+ def acquire(self) -> bool:
151
+ with self._lock:
152
+ if self._refcount <= 0:
153
+ return False
154
+ self._refcount += 1
155
+ return True
156
+
157
+ @override
158
+ async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
159
+ return await self._transport.handle_async_request(request)
160
+
161
+ @override
162
+ async def aclose(self) -> None:
163
+ should_close = False
164
+ with self._lock:
165
+ self._refcount -= 1
166
+ if self._refcount <= 0:
167
+ should_close = True
168
+ if should_close:
169
+ await self._transport.aclose()
170
+
171
+
172
+ _shared_sync_transport: _SharedTransport | None = None
173
+ _shared_async_transports: weakref.WeakKeyDictionary[asyncio.AbstractEventLoop, _SharedAsyncTransport] = (
174
+ weakref.WeakKeyDictionary()
175
+ )
176
+
93
177
  # TODO: make base page type vars covariant
94
178
  SyncPageT = TypeVar("SyncPageT", bound="BaseSyncPage[Any]")
95
179
  AsyncPageT = TypeVar("AsyncPageT", bound="BaseAsyncPage[Any]")
@@ -816,6 +900,7 @@ class _DefaultHttpxClient(httpx.Client):
816
900
  kwargs.setdefault("timeout", DEFAULT_TIMEOUT)
817
901
  kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS)
818
902
  kwargs.setdefault("follow_redirects", True)
903
+ kwargs.setdefault("http2", True)
819
904
  super().__init__(**kwargs)
820
905
 
821
906
 
@@ -845,6 +930,8 @@ class SyncHttpxClientWrapper(DefaultHttpxClient):
845
930
  class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
846
931
  _client: httpx.Client
847
932
  _default_stream_cls: type[Stream[Any]] | None = None
933
+ _uses_shared_pool: bool
934
+ _closed: bool
848
935
 
849
936
  def __init__(
850
937
  self,
@@ -857,6 +944,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
857
944
  custom_headers: Mapping[str, str] | None = None,
858
945
  custom_query: Mapping[str, object] | None = None,
859
946
  _strict_response_validation: bool,
947
+ shared_http_pool: bool = True,
860
948
  ) -> None:
861
949
  if not is_given(timeout):
862
950
  # if the user passed in a custom http client with a non-default
@@ -886,24 +974,46 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
886
974
  custom_headers=custom_headers,
887
975
  _strict_response_validation=_strict_response_validation,
888
976
  )
889
- self._client = http_client or SyncHttpxClientWrapper(
890
- base_url=base_url,
891
- # cast to a valid type because mypy doesn't understand our type narrowing
892
- timeout=cast(Timeout, timeout),
893
- )
977
+
978
+ self._closed = False
979
+
980
+ if http_client is not None:
981
+ self._client = http_client
982
+ self._uses_shared_pool = False
983
+ elif shared_http_pool:
984
+ global _shared_sync_transport
985
+ with _pool_lock:
986
+ if _shared_sync_transport is None or not _shared_sync_transport.acquire():
987
+ _shared_sync_transport = _SharedTransport(
988
+ httpx.HTTPTransport(limits=DEFAULT_CONNECTION_LIMITS, http2=True),
989
+ )
990
+ self._client = SyncHttpxClientWrapper(
991
+ base_url=base_url,
992
+ timeout=cast(Timeout, timeout),
993
+ transport=_shared_sync_transport,
994
+ )
995
+ self._uses_shared_pool = True
996
+ else:
997
+ self._client = SyncHttpxClientWrapper(
998
+ base_url=base_url,
999
+ timeout=cast(Timeout, timeout),
1000
+ )
1001
+ self._uses_shared_pool = False
894
1002
 
895
1003
  def is_closed(self) -> bool:
896
- return self._client.is_closed
1004
+ return self._closed or self._client.is_closed
897
1005
 
898
1006
  def close(self) -> None:
899
1007
  """Close the underlying HTTPX client.
900
1008
 
901
1009
  The client will *not* be usable after this.
902
1010
  """
903
- # If an error is thrown while constructing a client, self._client
904
- # may not be present
905
- if hasattr(self, "_client"):
906
- self._client.close()
1011
+ if not hasattr(self, "_client"):
1012
+ return
1013
+ if self._closed:
1014
+ return
1015
+ self._closed = True
1016
+ self._client.close()
907
1017
 
908
1018
  def __enter__(self: _T) -> _T:
909
1019
  return self
@@ -1018,6 +1128,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1018
1128
  max_retries=max_retries,
1019
1129
  options=input_options,
1020
1130
  response=None,
1131
+ error=err,
1021
1132
  )
1022
1133
  continue
1023
1134
 
@@ -1032,6 +1143,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1032
1143
  max_retries=max_retries,
1033
1144
  options=input_options,
1034
1145
  response=None,
1146
+ error=err,
1035
1147
  )
1036
1148
  continue
1037
1149
 
@@ -1083,7 +1195,13 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1083
1195
  )
1084
1196
 
1085
1197
  def _sleep_for_retry(
1086
- self, *, retries_taken: int, max_retries: int, options: FinalRequestOptions, response: httpx.Response | None
1198
+ self,
1199
+ *,
1200
+ retries_taken: int,
1201
+ max_retries: int,
1202
+ options: FinalRequestOptions,
1203
+ response: httpx.Response | None,
1204
+ error: BaseException | None = None,
1087
1205
  ) -> None:
1088
1206
  remaining_retries = max_retries - retries_taken
1089
1207
  if remaining_retries == 1:
@@ -1092,7 +1210,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1092
1210
  log.debug("%i retries left", remaining_retries)
1093
1211
 
1094
1212
  timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None)
1095
- log.info("Retrying request to %s in %f seconds", options.url, timeout)
1213
+ if response is not None:
1214
+ log.info(
1215
+ "Retrying request to %s in %f seconds (status %d)",
1216
+ options.url,
1217
+ timeout,
1218
+ response.status_code,
1219
+ )
1220
+ elif error is not None:
1221
+ log.info(
1222
+ "Retrying request to %s in %f seconds (%s: %s)",
1223
+ options.url,
1224
+ timeout,
1225
+ type(error).__name__,
1226
+ error,
1227
+ )
1228
+ else:
1229
+ log.info("Retrying request to %s in %f seconds", options.url, timeout)
1096
1230
 
1097
1231
  time.sleep(timeout)
1098
1232
 
@@ -1428,6 +1562,8 @@ class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient):
1428
1562
  class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1429
1563
  _client: httpx.AsyncClient
1430
1564
  _default_stream_cls: type[AsyncStream[Any]] | None = None
1565
+ _uses_shared_pool: bool
1566
+ _closed: bool
1431
1567
 
1432
1568
  def __init__(
1433
1569
  self,
@@ -1440,6 +1576,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1440
1576
  http_client: httpx.AsyncClient | None = None,
1441
1577
  custom_headers: Mapping[str, str] | None = None,
1442
1578
  custom_query: Mapping[str, object] | None = None,
1579
+ shared_http_pool: bool = True,
1443
1580
  ) -> None:
1444
1581
  if not is_given(timeout):
1445
1582
  # if the user passed in a custom http client with a non-default
@@ -1469,20 +1606,59 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1469
1606
  custom_headers=custom_headers,
1470
1607
  _strict_response_validation=_strict_response_validation,
1471
1608
  )
1472
- self._client = http_client or AsyncHttpxClientWrapper(
1473
- base_url=base_url,
1474
- # cast to a valid type because mypy doesn't understand our type narrowing
1475
- timeout=cast(Timeout, timeout),
1476
- )
1609
+
1610
+ self._closed = False
1611
+
1612
+ if http_client is not None:
1613
+ self._client = http_client
1614
+ self._uses_shared_pool = False
1615
+ elif shared_http_pool:
1616
+ try:
1617
+ loop: asyncio.AbstractEventLoop | None = asyncio.get_running_loop()
1618
+ except RuntimeError:
1619
+ loop = None
1620
+ if loop is not None:
1621
+ with _pool_lock:
1622
+ existing = _shared_async_transports.get(loop)
1623
+ if existing is not None and existing.acquire():
1624
+ transport: _SharedAsyncTransport = existing
1625
+ else:
1626
+ transport = _SharedAsyncTransport(
1627
+ httpx.AsyncHTTPTransport(limits=DEFAULT_CONNECTION_LIMITS, http2=True),
1628
+ )
1629
+ _shared_async_transports[loop] = transport
1630
+ self._client = AsyncHttpxClientWrapper(
1631
+ base_url=base_url,
1632
+ timeout=cast(Timeout, timeout),
1633
+ transport=transport,
1634
+ )
1635
+ self._uses_shared_pool = True
1636
+ else:
1637
+ self._client = AsyncHttpxClientWrapper(
1638
+ base_url=base_url,
1639
+ timeout=cast(Timeout, timeout),
1640
+ )
1641
+ self._uses_shared_pool = False
1642
+ else:
1643
+ self._client = AsyncHttpxClientWrapper(
1644
+ base_url=base_url,
1645
+ timeout=cast(Timeout, timeout),
1646
+ )
1647
+ self._uses_shared_pool = False
1477
1648
 
1478
1649
  def is_closed(self) -> bool:
1479
- return self._client.is_closed
1650
+ return self._closed or self._client.is_closed
1480
1651
 
1481
1652
  async def close(self) -> None:
1482
1653
  """Close the underlying HTTPX client.
1483
1654
 
1484
1655
  The client will *not* be usable after this.
1485
1656
  """
1657
+ if not hasattr(self, "_client"):
1658
+ return
1659
+ if self._closed:
1660
+ return
1661
+ self._closed = True
1486
1662
  await self._client.aclose()
1487
1663
 
1488
1664
  async def __aenter__(self: _T) -> _T:
@@ -1603,6 +1779,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1603
1779
  max_retries=max_retries,
1604
1780
  options=input_options,
1605
1781
  response=None,
1782
+ error=err,
1606
1783
  )
1607
1784
  continue
1608
1785
 
@@ -1617,6 +1794,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1617
1794
  max_retries=max_retries,
1618
1795
  options=input_options,
1619
1796
  response=None,
1797
+ error=err,
1620
1798
  )
1621
1799
  continue
1622
1800
 
@@ -1668,7 +1846,13 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1668
1846
  )
1669
1847
 
1670
1848
  async def _sleep_for_retry(
1671
- self, *, retries_taken: int, max_retries: int, options: FinalRequestOptions, response: httpx.Response | None
1849
+ self,
1850
+ *,
1851
+ retries_taken: int,
1852
+ max_retries: int,
1853
+ options: FinalRequestOptions,
1854
+ response: httpx.Response | None,
1855
+ error: BaseException | None = None,
1672
1856
  ) -> None:
1673
1857
  remaining_retries = max_retries - retries_taken
1674
1858
  if remaining_retries == 1:
@@ -1677,7 +1861,23 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1677
1861
  log.debug("%i retries left", remaining_retries)
1678
1862
 
1679
1863
  timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None)
1680
- log.info("Retrying request to %s in %f seconds", options.url, timeout)
1864
+ if response is not None:
1865
+ log.info(
1866
+ "Retrying request to %s in %f seconds (status %d)",
1867
+ options.url,
1868
+ timeout,
1869
+ response.status_code,
1870
+ )
1871
+ elif error is not None:
1872
+ log.info(
1873
+ "Retrying request to %s in %f seconds (%s: %s)",
1874
+ options.url,
1875
+ timeout,
1876
+ type(error).__name__,
1877
+ error,
1878
+ )
1879
+ else:
1880
+ log.info("Retrying request to %s in %f seconds", options.url, timeout)
1681
1881
 
1682
1882
  await anyio.sleep(timeout)
1683
1883