runloop_api_client 1.17.0__tar.gz → 1.19.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 (449) hide show
  1. runloop_api_client-1.19.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/CHANGELOG.md +37 -0
  3. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/EXAMPLES.md +32 -0
  4. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/PKG-INFO +2 -2
  5. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/README.md +1 -1
  6. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/api.md +49 -1
  7. runloop_api_client-1.19.0/examples/devbox_snapshots.py +172 -0
  8. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/registry.py +8 -0
  9. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/pyproject.toml +2 -1
  10. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_client.py +76 -0
  11. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_utils.py +3 -2
  12. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_version.py +1 -1
  13. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/__init__.py +28 -0
  14. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/agents.py +296 -1
  15. runloop_api_client-1.19.0/src/runloop_api_client/resources/apikeys.py +197 -0
  16. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/axons/__init__.py +14 -0
  17. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/axons/axons.py +32 -0
  18. runloop_api_client-1.19.0/src/runloop_api_client/resources/axons/events.py +207 -0
  19. runloop_api_client-1.19.0/src/runloop_api_client/resources/restricted_keys.py +202 -0
  20. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/__init__.py +8 -0
  21. runloop_api_client-1.19.0/src/runloop_api_client/types/agent_devbox_counts_view.py +24 -0
  22. runloop_api_client-1.19.0/src/runloop_api_client/types/agent_list_public_params.py +30 -0
  23. runloop_api_client-1.19.0/src/runloop_api_client/types/api_key_created_view.py +17 -0
  24. runloop_api_client-1.19.0/src/runloop_api_client/types/apikey_create_params.py +14 -0
  25. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/__init__.py +2 -0
  26. runloop_api_client-1.19.0/src/runloop_api_client/types/axons/axon_event_list_view.py +17 -0
  27. runloop_api_client-1.19.0/src/runloop_api_client/types/axons/event_list_params.py +21 -0
  28. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_view.py +3 -1
  29. runloop_api_client-1.19.0/src/runloop_api_client/types/restricted_key_create_params.py +18 -0
  30. runloop_api_client-1.19.0/src/runloop_api_client/types/restricted_key_created_view.py +20 -0
  31. runloop_api_client-1.19.0/src/runloop_api_client/types/scope_entry_view.py +26 -0
  32. runloop_api_client-1.19.0/src/runloop_api_client/types/scope_entry_view_param.py +23 -0
  33. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +1 -1
  34. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/launch_parameters.py +3 -0
  35. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/mount.py +1 -1
  36. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +1 -1
  37. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +3 -0
  38. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/mount.py +1 -1
  39. runloop_api_client-1.19.0/tests/api_resources/axons/test_events.py +120 -0
  40. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_agents.py +204 -1
  41. runloop_api_client-1.19.0/tests/api_resources/test_apikeys.py +90 -0
  42. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_benchmarks.py +8 -2
  43. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_blueprints.py +24 -6
  44. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_devboxes.py +8 -2
  45. runloop_api_client-1.19.0/tests/api_resources/test_restricted_keys.py +102 -0
  46. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_scenarios.py +24 -6
  47. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_extract_files.py +9 -0
  48. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/uv.lock +3 -1
  49. runloop_api_client-1.17.0/.release-please-manifest.json +0 -3
  50. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/.gitignore +0 -0
  51. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/CONTRIBUTING.md +0 -0
  52. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/LICENSE +0 -0
  53. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/README-SDK.md +0 -0
  54. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/SECURITY.md +0 -0
  55. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/bin/check-release-environment +0 -0
  56. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/bin/publish-pypi +0 -0
  57. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/__init__.py +0 -0
  58. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/_harness.py +0 -0
  59. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/blueprint_with_build_context.py +0 -0
  60. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/devbox_from_blueprint_lifecycle.py +0 -0
  61. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/devbox_snapshot_resume.py +0 -0
  62. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/devbox_tunnel.py +0 -0
  63. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/example_types.py +0 -0
  64. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/mcp_github_tools.py +0 -0
  65. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/examples/secrets_with_devbox.py +0 -0
  66. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/release-please-config.json +0 -0
  67. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/requirements-dev.lock +0 -0
  68. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop/lib/.keep +0 -0
  69. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/__init__.py +0 -0
  70. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_base_client.py +0 -0
  71. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_compat.py +0 -0
  72. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_constants.py +0 -0
  73. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_exceptions.py +0 -0
  74. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_files.py +0 -0
  75. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_models.py +0 -0
  76. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_qs.py +0 -0
  77. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_resource.py +0 -0
  78. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_response.py +0 -0
  79. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_streaming.py +0 -0
  80. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_types.py +0 -0
  81. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  82. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  83. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  84. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_json.py +0 -0
  85. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  86. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_path.py +0 -0
  87. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  88. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  89. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  90. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  91. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  92. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  93. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  94. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/_utils/_validation.py +0 -0
  95. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/.keep +0 -0
  96. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/__init__.py +0 -0
  97. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/_ignore.py +0 -0
  98. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/context_loader.py +0 -0
  99. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/polling.py +0 -0
  100. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  101. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/pagination.py +0 -0
  102. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/py.typed +0 -0
  103. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/axons/sql.py +0 -0
  104. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  105. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  106. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/benchmarks.py +0 -0
  107. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  108. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  109. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  110. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  111. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  112. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  113. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  114. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  115. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/network_policies.py +0 -0
  116. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/objects.py +0 -0
  117. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  118. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  119. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  120. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  121. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/resources/secrets.py +0 -0
  122. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/__init__.py +0 -0
  123. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
  124. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/_types.py +0 -0
  125. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/agent.py +0 -0
  126. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_.py +0 -0
  127. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
  128. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_axon.py +0 -0
  129. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  130. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  131. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  132. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_devbox.py +0 -0
  133. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
  134. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  135. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  136. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  137. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  138. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  139. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  140. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  141. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  142. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_secret.py +0 -0
  143. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  144. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  145. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/axon.py +0 -0
  146. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
  147. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  148. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
  149. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/devbox.py +0 -0
  150. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/execution.py +0 -0
  151. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
  152. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  153. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  154. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
  155. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/scenario.py +0 -0
  156. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  157. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  158. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/scorer.py +0 -0
  159. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/secret.py +0 -0
  160. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
  161. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
  162. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/sdk/sync.py +0 -0
  163. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/agent_create_params.py +0 -0
  164. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/agent_list_params.py +0 -0
  165. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/agent_list_view.py +0 -0
  166. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/agent_view.py +0 -0
  167. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_create_params.py +0 -0
  168. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_event_view.py +0 -0
  169. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_list_params.py +0 -0
  170. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_list_view.py +0 -0
  171. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_publish_params.py +0 -0
  172. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_subscribe_sse_params.py +0 -0
  173. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axon_view.py +0 -0
  174. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_batch_params.py +0 -0
  175. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_batch_result_view.py +0 -0
  176. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_column_meta_view.py +0 -0
  177. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_query_params.py +0 -0
  178. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_query_result_view.py +0 -0
  179. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_result_meta_view.py +0 -0
  180. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_statement_params.py +0 -0
  181. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_step_error_view.py +0 -0
  182. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/axons/sql_step_result_view.py +0 -0
  183. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  184. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  185. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  186. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  187. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  188. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  189. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  190. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  191. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  192. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  193. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  194. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  195. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  196. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  197. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  198. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  199. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  200. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  201. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  202. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  203. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  204. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  205. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  206. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  207. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  208. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  209. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  210. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  211. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  212. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  213. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  214. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  215. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  216. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  217. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  218. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  219. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  220. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  221. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  222. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  223. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  224. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  225. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  226. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  227. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  228. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  229. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  230. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  231. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  232. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  233. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  234. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  235. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  236. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  237. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  238. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  239. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  240. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  241. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  242. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  243. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  244. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  245. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  246. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  247. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  248. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  249. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  250. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  251. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  252. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  253. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  254. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/input_context.py +0 -0
  255. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  256. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  257. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  258. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  259. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  260. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  261. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  262. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  263. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  264. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  265. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  266. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  267. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
  268. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  269. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  270. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  271. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_list_params.py +0 -0
  272. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  273. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_list_view.py +0 -0
  274. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/object_view.py +0 -0
  275. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/publish_result_view.py +0 -0
  276. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  277. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  278. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  279. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  280. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  281. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  282. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  283. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  284. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  285. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  286. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  287. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  288. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  289. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  290. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  291. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  292. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  293. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  294. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  295. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  296. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  297. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  298. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  299. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  300. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  301. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  302. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  303. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  304. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  305. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  306. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  307. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/secret_view.py +0 -0
  308. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  309. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  310. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  311. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  312. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/broker_mount.py +0 -0
  313. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  314. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  315. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  316. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  317. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  318. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  319. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/broker_mount.py +0 -0
  320. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  321. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  322. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
  323. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/__init__.py +0 -0
  324. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/__init__.py +0 -0
  325. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/axons/__init__.py +0 -0
  326. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/axons/test_sql.py +0 -0
  327. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/devboxes/__init__.py +0 -0
  328. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  329. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  330. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  331. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/scenarios/__init__.py +0 -0
  332. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  333. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  334. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_axons.py +0 -0
  335. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_benchmark_jobs.py +0 -0
  336. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_benchmark_runs.py +0 -0
  337. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_gateway_configs.py +0 -0
  338. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_mcp_configs.py +0 -0
  339. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_network_policies.py +0 -0
  340. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_objects.py +0 -0
  341. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/api_resources/test_secrets.py +0 -0
  342. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/conftest.py +0 -0
  343. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sample_file.txt +0 -0
  344. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/__init__.py +0 -0
  345. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/__init__.py +0 -0
  346. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/conftest.py +0 -0
  347. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/test_core.py +0 -0
  348. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  349. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  350. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
  351. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/conftest.py +0 -0
  352. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/__init__.py +0 -0
  353. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/conftest.py +0 -0
  354. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/test_core.py +0 -0
  355. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
  356. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/test_interfaces.py +0 -0
  357. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/devbox/test_streaming.py +0 -0
  358. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_agent.py +0 -0
  359. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_agent.py +0 -0
  360. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_axon.py +0 -0
  361. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_benchmark.py +0 -0
  362. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_benchmark_run.py +0 -0
  363. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_blueprint.py +0 -0
  364. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_execution.py +0 -0
  365. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_execution_result.py +0 -0
  366. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_gateway_config.py +0 -0
  367. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_network_policy.py +0 -0
  368. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_ops.py +0 -0
  369. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_scenario.py +0 -0
  370. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_scenario_builder.py +0 -0
  371. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_scenario_run.py +0 -0
  372. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_scorer.py +0 -0
  373. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_snapshot.py +0 -0
  374. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_async_storage_object.py +0 -0
  375. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_axon.py +0 -0
  376. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_benchmark.py +0 -0
  377. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_benchmark_run.py +0 -0
  378. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_blueprint.py +0 -0
  379. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_execution.py +0 -0
  380. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_execution_result.py +0 -0
  381. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_gateway_config.py +0 -0
  382. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_helpers.py +0 -0
  383. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_network_policy.py +0 -0
  384. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_ops.py +0 -0
  385. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_scenario.py +0 -0
  386. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_scenario_builder.py +0 -0
  387. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_scenario_run.py +0 -0
  388. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_scorer.py +0 -0
  389. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_snapshot.py +0 -0
  390. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/sdk/test_storage_object.py +0 -0
  391. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/README.md +0 -0
  392. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/__init__.py +0 -0
  393. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/conftest.py +0 -0
  394. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/examples/__init__.py +0 -0
  395. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/examples/test_examples.py +0 -0
  396. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/README.md +0 -0
  397. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/__init__.py +0 -0
  398. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/conftest.py +0 -0
  399. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_agent.py +0 -0
  400. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
  401. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_axon.py +0 -0
  402. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  403. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  404. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_devbox.py +0 -0
  405. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  406. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  407. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  408. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  409. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  410. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_secret.py +0 -0
  411. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  412. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  413. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_axon.py +0 -0
  414. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
  415. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
  416. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_devbox.py +0 -0
  417. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  418. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  419. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
  420. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_scenario.py +0 -0
  421. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_scorer.py +0 -0
  422. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_sdk.py +0 -0
  423. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_secret.py +0 -0
  424. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
  425. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
  426. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/test_blueprints.py +0 -0
  427. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/test_devboxes.py +0 -0
  428. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/test_executions.py +0 -0
  429. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  430. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/test_snapshots.py +0 -0
  431. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/smoketests/utils.py +0 -0
  432. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_client.py +0 -0
  433. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_command_id.py +0 -0
  434. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_deepcopy.py +0 -0
  435. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_files.py +0 -0
  436. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_models.py +0 -0
  437. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_polling.py +0 -0
  438. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_qs.py +0 -0
  439. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_required_args.py +0 -0
  440. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_response.py +0 -0
  441. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_streaming.py +0 -0
  442. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_transform.py +0 -0
  443. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_context_loader.py +0 -0
  444. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_datetime_parse.py +0 -0
  445. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_json.py +0 -0
  446. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_path.py +0 -0
  447. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_proxy.py +0 -0
  448. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/test_utils/test_typing.py +0 -0
  449. {runloop_api_client-1.17.0 → runloop_api_client-1.19.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.19.0"
3
+ }
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.19.0 (2026-04-13)
4
+
5
+ Full Changelog: [v1.18.1...v1.19.0](https://github.com/runloopai/api-client-python/compare/v1.18.1...v1.19.0)
6
+
7
+ ### Features
8
+
9
+ * Add wake on axon event as an API primitive ([#8681](https://github.com/runloopai/api-client-python/issues/8681)) ([255099a](https://github.com/runloopai/api-client-python/commit/255099a940a7892f3c66e6534517e3545d7daccb))
10
+ * Allow API keys to create API and restricted keys ([#8663](https://github.com/runloopai/api-client-python/issues/8663)) ([2e03b55](https://github.com/runloopai/api-client-python/commit/2e03b55638a83a8354481f47a30910e94ff57fc3))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * add missing agent API paths to stainless config ([#8699](https://github.com/runloopai/api-client-python/issues/8699)) ([4f6fe60](https://github.com/runloopai/api-client-python/commit/4f6fe60a63fd31c049e54febb81801031dce2325))
16
+ * ensure file data are only sent as 1 parameter ([f7ca2cc](https://github.com/runloopai/api-client-python/commit/f7ca2cc280f1e7a4ab73f331be8fe3e33ae1c611))
17
+
18
+
19
+ ### Documentation
20
+
21
+ * add snapshot, suspend & resume example ([#764](https://github.com/runloopai/api-client-python/issues/764)) ([f4b942b](https://github.com/runloopai/api-client-python/commit/f4b942b3329e98a4ea5182c04d6db90fd0b70308))
22
+ * added Async vs Sync tabs, removed top-level class descriptions ([#783](https://github.com/runloopai/api-client-python/issues/783)) ([6a99c56](https://github.com/runloopai/api-client-python/commit/6a99c569914d93e07087ed5003ee7c77f2ab88ff))
23
+ * restructure sphinx docs with async-first API reference and full type coverage ([#782](https://github.com/runloopai/api-client-python/issues/782)) ([514cf93](https://github.com/runloopai/api-client-python/commit/514cf93e8ff8b97bfde171a83cf9abf211193e7f))
24
+ * show full field descriptions for SDK parameter types ([#784](https://github.com/runloopai/api-client-python/issues/784)) ([f04a506](https://github.com/runloopai/api-client-python/commit/f04a5069c33fceb7a4d3db634bfd77ab789314dc))
25
+
26
+ ## 1.18.1 (2026-04-10)
27
+
28
+ Full Changelog: [v1.17.0...v1.18.1](https://github.com/runloopai/api-client-python/compare/v1.17.0...v1.18.1)
29
+
30
+ ### Bug Fixes
31
+
32
+ * add list events to axon ([#8648](https://github.com/runloopai/api-client-python/issues/8648)) ([1203b57](https://github.com/runloopai/api-client-python/commit/1203b577b105dc0c7cd94eae644a609a525b7c32))
33
+ * TTL shutdown showed non-standard reason in devbox logs ([#8636](https://github.com/runloopai/api-client-python/issues/8636)) ([8ac5cc5](https://github.com/runloopai/api-client-python/commit/8ac5cc5116b771316d28b426bfa13fd6af5cedd2))
34
+
35
+
36
+ ### Documentation
37
+
38
+ * clarify that we don't support git commit SHA in git agents/blueprint builds ([#8638](https://github.com/runloopai/api-client-python/issues/8638)) ([66b0895](https://github.com/runloopai/api-client-python/commit/66b0895865737ac3dd7f84be74785504fc7bede5))
39
+
3
40
  ## 1.17.0 (2026-04-09)
4
41
 
5
42
  Full Changelog: [v1.16.0...v1.17.0](https://github.com/runloopai/api-client-python/compare/v1.16.0...v1.17.0)
@@ -10,6 +10,7 @@ Runnable examples live in [`examples/`](./examples).
10
10
  - [Blueprint with Build Context](#blueprint-with-build-context)
11
11
  - [Devbox From Blueprint (Run Command, Shutdown)](#devbox-from-blueprint-lifecycle)
12
12
  - [Devbox Snapshot and Resume](#devbox-snapshot-resume)
13
+ - [Devbox Snapshots (Suspend, Resume, Restore, Delete)](#devbox-snapshots)
13
14
  - [Devbox Tunnel (HTTP Server Access)](#devbox-tunnel)
14
15
  - [MCP Hub + Claude Code + GitHub](#mcp-github-tools)
15
16
  - [Secrets with Devbox and Agent Gateway](#secrets-with-devbox)
@@ -106,6 +107,37 @@ uv run pytest -m smoketest tests/smoketests/examples/
106
107
 
107
108
  **Source:** [`examples/devbox_snapshot_resume.py`](./examples/devbox_snapshot_resume.py)
108
109
 
110
+ <a id="devbox-snapshots"></a>
111
+ ## Devbox Snapshots (Suspend, Resume, Restore, Delete)
112
+
113
+ **Use case:** Upload a file to a devbox, preserve it across suspend and resume, create a disk snapshot, restore multiple devboxes from that snapshot, mutate each copy independently, and delete the snapshot when finished.
114
+
115
+ **Tags:** `devbox`, `snapshot`, `suspend`, `resume`, `files`, `cleanup`
116
+
117
+ ### Workflow
118
+ - Create a source devbox
119
+ - Upload a file and mutate it into a shared baseline
120
+ - Suspend and resume the source devbox
121
+ - Create a disk snapshot from the resumed devbox
122
+ - Restore two additional devboxes from the same snapshot baseline
123
+ - Mutate the same file differently in each devbox to prove isolation
124
+ - Shutdown the devboxes and delete the snapshot
125
+
126
+ ### Prerequisites
127
+ - `RUNLOOP_API_KEY`
128
+
129
+ ### Run
130
+ ```sh
131
+ uv run python -m examples.devbox_snapshots
132
+ ```
133
+
134
+ ### Test
135
+ ```sh
136
+ uv run pytest -m smoketest tests/smoketests/examples/
137
+ ```
138
+
139
+ **Source:** [`examples/devbox_snapshots.py`](./examples/devbox_snapshots.py)
140
+
109
141
  <a id="devbox-tunnel"></a>
110
142
  ## Devbox Tunnel (HTTP Server Access)
111
143
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 1.17.0
3
+ Version: 1.19.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
@@ -325,7 +325,7 @@ Error codes are as follows:
325
325
 
326
326
  Certain errors are automatically retried 5 times by default, with a short exponential backoff.
327
327
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
328
- 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
328
+ 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
329
329
  429 errors will be retried.
330
330
 
331
331
  You can use the `max_retries` option to configure or disable retry settings:
@@ -288,7 +288,7 @@ Error codes are as follows:
288
288
 
289
289
  Certain errors are automatically retried 5 times by default, with a short exponential backoff.
290
290
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
291
- 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
291
+ 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
292
292
  429 errors will be retried.
293
293
 
294
294
  You can use the `max_retries` option to configure or disable retry settings:
@@ -79,7 +79,12 @@ Methods:
79
79
  Types:
80
80
 
81
81
  ```python
82
- from runloop_api_client.types import AgentCreateParameters, AgentListView, AgentView
82
+ from runloop_api_client.types import (
83
+ AgentCreateParameters,
84
+ AgentDevboxCountsView,
85
+ AgentListView,
86
+ AgentView,
87
+ )
83
88
  ```
84
89
 
85
90
  Methods:
@@ -87,6 +92,9 @@ Methods:
87
92
  - <code title="post /v1/agents">client.agents.<a href="./src/runloop_api_client/resources/agents.py">create</a>(\*\*<a href="src/runloop_api_client/types/agent_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">AgentView</a></code>
88
93
  - <code title="get /v1/agents/{id}">client.agents.<a href="./src/runloop_api_client/resources/agents.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/agent_view.py">AgentView</a></code>
89
94
  - <code title="get /v1/agents">client.agents.<a href="./src/runloop_api_client/resources/agents.py">list</a>(\*\*<a href="src/runloop_api_client/types/agent_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">SyncAgentsCursorIDPage[AgentView]</a></code>
95
+ - <code title="post /v1/agents/{id}/delete">client.agents.<a href="./src/runloop_api_client/resources/agents.py">delete</a>(id) -> object</code>
96
+ - <code title="get /v1/agents/devbox_counts">client.agents.<a href="./src/runloop_api_client/resources/agents.py">devbox_counts</a>() -> <a href="./src/runloop_api_client/types/agent_devbox_counts_view.py">AgentDevboxCountsView</a></code>
97
+ - <code title="get /v1/agents/list_public">client.agents.<a href="./src/runloop_api_client/resources/agents.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/agent_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/agent_view.py">SyncAgentsCursorIDPage[AgentView]</a></code>
90
98
 
91
99
  # Axons
92
100
 
@@ -111,6 +119,18 @@ Methods:
111
119
  - <code title="post /v1/axons/{id}/publish">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">publish</a>(id, \*\*<a href="src/runloop_api_client/types/axon_publish_params.py">params</a>) -> <a href="./src/runloop_api_client/types/publish_result_view.py">PublishResultView</a></code>
112
120
  - <code title="get /v1/axons/{id}/subscribe/sse">client.axons.<a href="./src/runloop_api_client/resources/axons/axons.py">subscribe_sse</a>(id, \*\*<a href="src/runloop_api_client/types/axon_subscribe_sse_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axon_event_view.py">AxonEventView</a></code>
113
121
 
122
+ ## Events
123
+
124
+ Types:
125
+
126
+ ```python
127
+ from runloop_api_client.types.axons import AxonEventListView
128
+ ```
129
+
130
+ Methods:
131
+
132
+ - <code title="get /v1/axons/{id}/events">client.axons.events.<a href="./src/runloop_api_client/resources/axons/events.py">list</a>(id, \*\*<a href="src/runloop_api_client/types/axons/event_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axons/axon_event_list_view.py">AxonEventListView</a></code>
133
+
114
134
  ## Sql
115
135
 
116
136
  Types:
@@ -427,3 +447,31 @@ Methods:
427
447
  - <code title="post /v1/mcp-configs/{id}">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/mcp_config_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">McpConfigView</a></code>
428
448
  - <code title="get /v1/mcp-configs">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">list</a>(\*\*<a href="src/runloop_api_client/types/mcp_config_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">SyncMcpConfigsCursorIDPage[McpConfigView]</a></code>
429
449
  - <code title="post /v1/mcp-configs/{id}/delete">client.mcp_configs.<a href="./src/runloop_api_client/resources/mcp_configs.py">delete</a>(id) -> <a href="./src/runloop_api_client/types/mcp_config_view.py">McpConfigView</a></code>
450
+
451
+ # Apikeys
452
+
453
+ Types:
454
+
455
+ ```python
456
+ from runloop_api_client.types import APIKeyCreatedView, APIKeyCreateParameters
457
+ ```
458
+
459
+ Methods:
460
+
461
+ - <code title="post /v1/apikeys">client.apikeys.<a href="./src/runloop_api_client/resources/apikeys.py">create</a>(\*\*<a href="src/runloop_api_client/types/apikey_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/api_key_created_view.py">APIKeyCreatedView</a></code>
462
+
463
+ # RestrictedKeys
464
+
465
+ Types:
466
+
467
+ ```python
468
+ from runloop_api_client.types import (
469
+ RestrictedKeyCreatedView,
470
+ RestrictedKeyCreateParameters,
471
+ ScopeEntryView,
472
+ )
473
+ ```
474
+
475
+ Methods:
476
+
477
+ - <code title="post /v1/restricted_keys">client.restricted_keys.<a href="./src/runloop_api_client/resources/restricted_keys.py">create</a>(\*\*<a href="src/runloop_api_client/types/restricted_key_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/restricted_key_created_view.py">RestrictedKeyCreatedView</a></code>
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env -S uv run python
2
+ """
3
+ ---
4
+ title: Devbox Snapshots (Suspend, Resume, Restore, Delete)
5
+ slug: devbox-snapshots
6
+ use_case: Upload a file to a devbox, preserve it across suspend and resume, create a disk snapshot, restore multiple devboxes from that snapshot, mutate each copy independently, and delete the snapshot when finished.
7
+ workflow:
8
+ - Create a source devbox
9
+ - Upload a file and mutate it into a shared baseline
10
+ - Suspend and resume the source devbox
11
+ - Create a disk snapshot from the resumed devbox
12
+ - Restore two additional devboxes from the same snapshot baseline
13
+ - Mutate the same file differently in each devbox to prove isolation
14
+ - Shutdown the devboxes and delete the snapshot
15
+ tags:
16
+ - devbox
17
+ - snapshot
18
+ - suspend
19
+ - resume
20
+ - files
21
+ - cleanup
22
+ prerequisites:
23
+ - RUNLOOP_API_KEY
24
+ run: uv run python -m examples.devbox_snapshots
25
+ test: uv run pytest -m smoketest tests/smoketests/examples/
26
+ ---
27
+ """
28
+
29
+ from __future__ import annotations
30
+
31
+ import tempfile
32
+ from pathlib import Path
33
+
34
+ from runloop_api_client import AsyncRunloopSDK
35
+ from runloop_api_client.lib.polling import PollingConfig
36
+
37
+ from ._harness import run_as_cli, unique_name, wrap_recipe
38
+ from .example_types import ExampleCheck, RecipeOutput, RecipeContext
39
+
40
+ FILE_PATH = "/tmp/snapshot-demo.txt"
41
+ POLLING_CONFIG = PollingConfig(timeout_seconds=120.0, interval_seconds=5.0)
42
+
43
+
44
+ async def recipe(ctx: RecipeContext) -> RecipeOutput:
45
+ """Demonstrate suspend/resume and shared snapshot restoration with isolated mutations."""
46
+ cleanup = ctx.cleanup
47
+ sdk = AsyncRunloopSDK()
48
+
49
+ resources_created: list[str] = []
50
+
51
+ uploaded_contents = "uploaded-from-local-file"
52
+ baseline_contents = "baseline-after-upload-and-mutation"
53
+ source_contents = "source-devbox-after-isolated-mutation"
54
+ clone_a_contents = "clone-a-after-isolated-mutation"
55
+ clone_b_contents = "clone-b-after-isolated-mutation"
56
+
57
+ with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".txt") as tmp_file:
58
+ tmp_file.write(uploaded_contents)
59
+ local_file_path = Path(tmp_file.name)
60
+ cleanup.add("local-file:snapshot-demo", lambda: local_file_path.unlink(missing_ok=True))
61
+
62
+ source_devbox = await sdk.devbox.create(
63
+ name=unique_name("snapshot-source"),
64
+ launch_parameters={
65
+ "resource_size_request": "X_SMALL",
66
+ "keep_alive_time_seconds": 60 * 5,
67
+ },
68
+ )
69
+ cleanup.add(f"devbox:{source_devbox.id}", source_devbox.shutdown)
70
+ resources_created.append(f"devbox:{source_devbox.id}")
71
+
72
+ await source_devbox.file.upload(path=FILE_PATH, file=local_file_path)
73
+ uploaded_readback = await source_devbox.file.read(file_path=FILE_PATH)
74
+
75
+ await source_devbox.file.write(file_path=FILE_PATH, contents=baseline_contents)
76
+
77
+ await source_devbox.suspend()
78
+ suspended_info = await source_devbox.await_suspended(polling_config=POLLING_CONFIG)
79
+
80
+ resumed_info = await source_devbox.resume(polling_config=POLLING_CONFIG)
81
+ resumed_readback = await source_devbox.file.read(file_path=FILE_PATH)
82
+
83
+ snapshot = await source_devbox.snapshot_disk(
84
+ name=unique_name("snapshot-baseline"),
85
+ commit_message="Capture the shared baseline after suspend and resume.",
86
+ polling_config=POLLING_CONFIG,
87
+ )
88
+ cleanup.add(f"snapshot:{snapshot.id}", snapshot.delete)
89
+ resources_created.append(f"snapshot:{snapshot.id}")
90
+
91
+ clone_a = await snapshot.create_devbox(
92
+ name=unique_name("snapshot-clone-a"),
93
+ launch_parameters={
94
+ "resource_size_request": "X_SMALL",
95
+ "keep_alive_time_seconds": 60 * 5,
96
+ },
97
+ )
98
+ cleanup.add(f"devbox:{clone_a.id}", clone_a.shutdown)
99
+ resources_created.append(f"devbox:{clone_a.id}")
100
+
101
+ # clone_a used snapshot.create_devbox(); clone_b uses sdk.devbox.create_from_snapshot()
102
+ # to demonstrate both entry points for restoring a devbox from a snapshot.
103
+ clone_b = await sdk.devbox.create_from_snapshot(
104
+ snapshot.id,
105
+ name=unique_name("snapshot-clone-b"),
106
+ launch_parameters={
107
+ "resource_size_request": "X_SMALL",
108
+ "keep_alive_time_seconds": 60 * 5,
109
+ },
110
+ )
111
+ cleanup.add(f"devbox:{clone_b.id}", clone_b.shutdown)
112
+ resources_created.append(f"devbox:{clone_b.id}")
113
+
114
+ clone_a_baseline_readback = await clone_a.file.read(file_path=FILE_PATH)
115
+ clone_b_baseline_readback = await clone_b.file.read(file_path=FILE_PATH)
116
+
117
+ await source_devbox.file.write(file_path=FILE_PATH, contents=source_contents)
118
+ await clone_a.file.write(file_path=FILE_PATH, contents=clone_a_contents)
119
+ await clone_b.file.write(file_path=FILE_PATH, contents=clone_b_contents)
120
+
121
+ source_isolated_readback = await source_devbox.file.read(file_path=FILE_PATH)
122
+ clone_a_isolated_readback = await clone_a.file.read(file_path=FILE_PATH)
123
+ clone_b_isolated_readback = await clone_b.file.read(file_path=FILE_PATH)
124
+
125
+ return RecipeOutput(
126
+ resources_created=resources_created,
127
+ checks=[
128
+ ExampleCheck(
129
+ name="uploaded file is readable on the source devbox",
130
+ passed=uploaded_readback == uploaded_contents,
131
+ details=uploaded_readback,
132
+ ),
133
+ ExampleCheck(
134
+ name="suspend reaches the suspended state",
135
+ passed=suspended_info.status == "suspended",
136
+ details=f"status={suspended_info.status}",
137
+ ),
138
+ ExampleCheck(
139
+ name="resume preserves the baseline file contents",
140
+ passed=resumed_info.status == "running" and resumed_readback == baseline_contents,
141
+ details=f"status={resumed_info.status}, contents={resumed_readback}",
142
+ ),
143
+ ExampleCheck(
144
+ name="multiple devboxes can use the same snapshot baseline",
145
+ passed=(
146
+ clone_a_baseline_readback == baseline_contents and clone_b_baseline_readback == baseline_contents
147
+ ),
148
+ details=(f"clone_a={clone_a_baseline_readback}, clone_b={clone_b_baseline_readback}"),
149
+ ),
150
+ ExampleCheck(
151
+ name="devboxes diverge after isolated mutations",
152
+ passed=(
153
+ source_isolated_readback == source_contents
154
+ and clone_a_isolated_readback == clone_a_contents
155
+ and clone_b_isolated_readback == clone_b_contents
156
+ ),
157
+ details=(
158
+ "source="
159
+ f"{source_isolated_readback}, "
160
+ f"clone_a={clone_a_isolated_readback}, "
161
+ f"clone_b={clone_b_isolated_readback}"
162
+ ),
163
+ ),
164
+ ],
165
+ )
166
+
167
+
168
+ run_devbox_snapshots_example = wrap_recipe(recipe)
169
+
170
+
171
+ if __name__ == "__main__":
172
+ run_as_cli(run_devbox_snapshots_example)
@@ -9,6 +9,7 @@ from typing import Any, Callable, cast
9
9
 
10
10
  from .devbox_tunnel import run_devbox_tunnel_example
11
11
  from .example_types import ExampleResult
12
+ from .devbox_snapshots import run_devbox_snapshots_example
12
13
  from .mcp_github_tools import run_mcp_github_tools_example
13
14
  from .secrets_with_devbox import run_secrets_with_devbox_example
14
15
  from .devbox_snapshot_resume import run_devbox_snapshot_resume_example
@@ -39,6 +40,13 @@ example_registry: list[ExampleRegistryEntry] = [
39
40
  "required_env": ["RUNLOOP_API_KEY"],
40
41
  "run": run_devbox_snapshot_resume_example,
41
42
  },
43
+ {
44
+ "slug": "devbox-snapshots",
45
+ "title": "Devbox Snapshots (Suspend, Resume, Restore, Delete)",
46
+ "file_name": "devbox_snapshots.py",
47
+ "required_env": ["RUNLOOP_API_KEY"],
48
+ "run": run_devbox_snapshots_example,
49
+ },
42
50
  {
43
51
  "slug": "devbox-tunnel",
44
52
  "title": "Devbox Tunnel (HTTP Server Access)",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.17.0"
3
+ version = "1.19.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -72,6 +72,7 @@ docs = [
72
72
  "furo>=2025.9.25",
73
73
  "sphinx>=7.4.7",
74
74
  "sphinx-autodoc-typehints>=2.3.0",
75
+ "sphinx-tabs>=3.4.0",
75
76
  "sphinx-toolbox>=4.0.0",
76
77
  ]
77
78
 
@@ -34,6 +34,7 @@ if TYPE_CHECKING:
34
34
  from .resources import (
35
35
  axons,
36
36
  agents,
37
+ apikeys,
37
38
  objects,
38
39
  secrets,
39
40
  devboxes,
@@ -44,9 +45,11 @@ if TYPE_CHECKING:
44
45
  benchmark_jobs,
45
46
  benchmark_runs,
46
47
  gateway_configs,
48
+ restricted_keys,
47
49
  network_policies,
48
50
  )
49
51
  from .resources.agents import AgentsResource, AsyncAgentsResource
52
+ from .resources.apikeys import ApikeysResource, AsyncApikeysResource
50
53
  from .resources.objects import ObjectsResource, AsyncObjectsResource
51
54
  from .resources.secrets import SecretsResource, AsyncSecretsResource
52
55
  from .resources.benchmarks import BenchmarksResource, AsyncBenchmarksResource
@@ -56,6 +59,7 @@ if TYPE_CHECKING:
56
59
  from .resources.benchmark_jobs import BenchmarkJobsResource, AsyncBenchmarkJobsResource
57
60
  from .resources.benchmark_runs import BenchmarkRunsResource, AsyncBenchmarkRunsResource
58
61
  from .resources.gateway_configs import GatewayConfigsResource, AsyncGatewayConfigsResource
62
+ from .resources.restricted_keys import RestrictedKeysResource, AsyncRestrictedKeysResource
59
63
  from .resources.network_policies import NetworkPoliciesResource, AsyncNetworkPoliciesResource
60
64
  from .resources.devboxes.devboxes import DevboxesResource, AsyncDevboxesResource
61
65
  from .resources.scenarios.scenarios import ScenariosResource, AsyncScenariosResource
@@ -198,6 +202,18 @@ class Runloop(SyncAPIClient):
198
202
 
199
203
  return McpConfigsResource(self)
200
204
 
205
+ @cached_property
206
+ def apikeys(self) -> ApikeysResource:
207
+ from .resources.apikeys import ApikeysResource
208
+
209
+ return ApikeysResource(self)
210
+
211
+ @cached_property
212
+ def restricted_keys(self) -> RestrictedKeysResource:
213
+ from .resources.restricted_keys import RestrictedKeysResource
214
+
215
+ return RestrictedKeysResource(self)
216
+
201
217
  @cached_property
202
218
  def with_raw_response(self) -> RunloopWithRawResponse:
203
219
  return RunloopWithRawResponse(self)
@@ -446,6 +462,18 @@ class AsyncRunloop(AsyncAPIClient):
446
462
 
447
463
  return AsyncMcpConfigsResource(self)
448
464
 
465
+ @cached_property
466
+ def apikeys(self) -> AsyncApikeysResource:
467
+ from .resources.apikeys import AsyncApikeysResource
468
+
469
+ return AsyncApikeysResource(self)
470
+
471
+ @cached_property
472
+ def restricted_keys(self) -> AsyncRestrictedKeysResource:
473
+ from .resources.restricted_keys import AsyncRestrictedKeysResource
474
+
475
+ return AsyncRestrictedKeysResource(self)
476
+
449
477
  @cached_property
450
478
  def with_raw_response(self) -> AsyncRunloopWithRawResponse:
451
479
  return AsyncRunloopWithRawResponse(self)
@@ -643,6 +671,18 @@ class RunloopWithRawResponse:
643
671
 
644
672
  return McpConfigsResourceWithRawResponse(self._client.mcp_configs)
645
673
 
674
+ @cached_property
675
+ def apikeys(self) -> apikeys.ApikeysResourceWithRawResponse:
676
+ from .resources.apikeys import ApikeysResourceWithRawResponse
677
+
678
+ return ApikeysResourceWithRawResponse(self._client.apikeys)
679
+
680
+ @cached_property
681
+ def restricted_keys(self) -> restricted_keys.RestrictedKeysResourceWithRawResponse:
682
+ from .resources.restricted_keys import RestrictedKeysResourceWithRawResponse
683
+
684
+ return RestrictedKeysResourceWithRawResponse(self._client.restricted_keys)
685
+
646
686
 
647
687
  class AsyncRunloopWithRawResponse:
648
688
  _client: AsyncRunloop
@@ -728,6 +768,18 @@ class AsyncRunloopWithRawResponse:
728
768
 
729
769
  return AsyncMcpConfigsResourceWithRawResponse(self._client.mcp_configs)
730
770
 
771
+ @cached_property
772
+ def apikeys(self) -> apikeys.AsyncApikeysResourceWithRawResponse:
773
+ from .resources.apikeys import AsyncApikeysResourceWithRawResponse
774
+
775
+ return AsyncApikeysResourceWithRawResponse(self._client.apikeys)
776
+
777
+ @cached_property
778
+ def restricted_keys(self) -> restricted_keys.AsyncRestrictedKeysResourceWithRawResponse:
779
+ from .resources.restricted_keys import AsyncRestrictedKeysResourceWithRawResponse
780
+
781
+ return AsyncRestrictedKeysResourceWithRawResponse(self._client.restricted_keys)
782
+
731
783
 
732
784
  class RunloopWithStreamedResponse:
733
785
  _client: Runloop
@@ -813,6 +865,18 @@ class RunloopWithStreamedResponse:
813
865
 
814
866
  return McpConfigsResourceWithStreamingResponse(self._client.mcp_configs)
815
867
 
868
+ @cached_property
869
+ def apikeys(self) -> apikeys.ApikeysResourceWithStreamingResponse:
870
+ from .resources.apikeys import ApikeysResourceWithStreamingResponse
871
+
872
+ return ApikeysResourceWithStreamingResponse(self._client.apikeys)
873
+
874
+ @cached_property
875
+ def restricted_keys(self) -> restricted_keys.RestrictedKeysResourceWithStreamingResponse:
876
+ from .resources.restricted_keys import RestrictedKeysResourceWithStreamingResponse
877
+
878
+ return RestrictedKeysResourceWithStreamingResponse(self._client.restricted_keys)
879
+
816
880
 
817
881
  class AsyncRunloopWithStreamedResponse:
818
882
  _client: AsyncRunloop
@@ -898,6 +962,18 @@ class AsyncRunloopWithStreamedResponse:
898
962
 
899
963
  return AsyncMcpConfigsResourceWithStreamingResponse(self._client.mcp_configs)
900
964
 
965
+ @cached_property
966
+ def apikeys(self) -> apikeys.AsyncApikeysResourceWithStreamingResponse:
967
+ from .resources.apikeys import AsyncApikeysResourceWithStreamingResponse
968
+
969
+ return AsyncApikeysResourceWithStreamingResponse(self._client.apikeys)
970
+
971
+ @cached_property
972
+ def restricted_keys(self) -> restricted_keys.AsyncRestrictedKeysResourceWithStreamingResponse:
973
+ from .resources.restricted_keys import AsyncRestrictedKeysResourceWithStreamingResponse
974
+
975
+ return AsyncRestrictedKeysResourceWithStreamingResponse(self._client.restricted_keys)
976
+
901
977
 
902
978
  Client = Runloop
903
979
 
@@ -86,8 +86,9 @@ def _extract_items(
86
86
  index += 1
87
87
  if is_dict(obj):
88
88
  try:
89
- # We are at the last entry in the path so we must remove the field
90
- if (len(path)) == index:
89
+ # Remove the field if there are no more dict keys in the path,
90
+ # only "<array>" traversal markers or end.
91
+ if all(p == "<array>" for p in path[index:]):
91
92
  item = obj.pop(key)
92
93
  else:
93
94
  item = obj[key]
@@ -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.17.0" # x-release-please-version
4
+ __version__ = "1.19.0" # x-release-please-version
@@ -16,6 +16,14 @@ from .agents import (
16
16
  AgentsResourceWithStreamingResponse,
17
17
  AsyncAgentsResourceWithStreamingResponse,
18
18
  )
19
+ from .apikeys import (
20
+ ApikeysResource,
21
+ AsyncApikeysResource,
22
+ ApikeysResourceWithRawResponse,
23
+ AsyncApikeysResourceWithRawResponse,
24
+ ApikeysResourceWithStreamingResponse,
25
+ AsyncApikeysResourceWithStreamingResponse,
26
+ )
19
27
  from .objects import (
20
28
  ObjectsResource,
21
29
  AsyncObjectsResource,
@@ -96,6 +104,14 @@ from .gateway_configs import (
96
104
  GatewayConfigsResourceWithStreamingResponse,
97
105
  AsyncGatewayConfigsResourceWithStreamingResponse,
98
106
  )
107
+ from .restricted_keys import (
108
+ RestrictedKeysResource,
109
+ AsyncRestrictedKeysResource,
110
+ RestrictedKeysResourceWithRawResponse,
111
+ AsyncRestrictedKeysResourceWithRawResponse,
112
+ RestrictedKeysResourceWithStreamingResponse,
113
+ AsyncRestrictedKeysResourceWithStreamingResponse,
114
+ )
99
115
  from .network_policies import (
100
116
  NetworkPoliciesResource,
101
117
  AsyncNetworkPoliciesResource,
@@ -184,4 +200,16 @@ __all__ = [
184
200
  "AsyncMcpConfigsResourceWithRawResponse",
185
201
  "McpConfigsResourceWithStreamingResponse",
186
202
  "AsyncMcpConfigsResourceWithStreamingResponse",
203
+ "ApikeysResource",
204
+ "AsyncApikeysResource",
205
+ "ApikeysResourceWithRawResponse",
206
+ "AsyncApikeysResourceWithRawResponse",
207
+ "ApikeysResourceWithStreamingResponse",
208
+ "AsyncApikeysResourceWithStreamingResponse",
209
+ "RestrictedKeysResource",
210
+ "AsyncRestrictedKeysResource",
211
+ "RestrictedKeysResourceWithRawResponse",
212
+ "AsyncRestrictedKeysResourceWithRawResponse",
213
+ "RestrictedKeysResourceWithStreamingResponse",
214
+ "AsyncRestrictedKeysResourceWithStreamingResponse",
187
215
  ]