runloop-api-client 1.13.1__tar.gz → 1.13.3__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 (455) hide show
  1. runloop_api_client-1.13.3/.release-please-manifest.json +3 -0
  2. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/CHANGELOG.md +22 -0
  3. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/PKG-INFO +1 -1
  4. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/README-SDK.md +111 -0
  5. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/pyproject.toml +1 -1
  6. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_version.py +1 -1
  7. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/__init__.py +4 -2
  8. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/_types.py +10 -0
  9. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_axon.py +37 -2
  10. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_devbox.py +3 -1
  11. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/axon.py +37 -2
  12. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/devbox.py +3 -1
  13. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_job_view.py +6 -3
  14. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/test_core.py +24 -0
  15. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/conftest.py +41 -0
  16. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/test_core.py +23 -0
  17. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_axon.py +37 -1
  18. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_axon.py +35 -1
  19. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_axon.py +48 -0
  20. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_axon.py +48 -0
  21. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/uv.lock +1 -1
  22. runloop_api_client-1.13.1/.release-please-manifest.json +0 -3
  23. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/.gitignore +0 -0
  24. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/CONTRIBUTING.md +0 -0
  25. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/EXAMPLES.md +0 -0
  26. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/LICENSE +0 -0
  27. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/README.md +0 -0
  28. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/SECURITY.md +0 -0
  29. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/api.md +0 -0
  30. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/bin/check-release-environment +0 -0
  31. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/bin/publish-pypi +0 -0
  32. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/__init__.py +0 -0
  33. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/_harness.py +0 -0
  34. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/blueprint_with_build_context.py +0 -0
  35. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/devbox_from_blueprint_lifecycle.py +0 -0
  36. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/devbox_snapshot_resume.py +0 -0
  37. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/devbox_tunnel.py +0 -0
  38. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/example_types.py +0 -0
  39. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/mcp_github_tools.py +0 -0
  40. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/registry.py +0 -0
  41. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/examples/secrets_with_devbox.py +0 -0
  42. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/release-please-config.json +0 -0
  43. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/requirements-dev.lock +0 -0
  44. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop/lib/.keep +0 -0
  45. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/__init__.py +0 -0
  46. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_base_client.py +0 -0
  47. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_client.py +0 -0
  48. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_compat.py +0 -0
  49. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_constants.py +0 -0
  50. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_exceptions.py +0 -0
  51. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_files.py +0 -0
  52. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_models.py +0 -0
  53. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_qs.py +0 -0
  54. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_resource.py +0 -0
  55. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_response.py +0 -0
  56. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_streaming.py +0 -0
  57. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_types.py +0 -0
  58. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/__init__.py +0 -0
  59. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_compat.py +0 -0
  60. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  61. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_json.py +0 -0
  62. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_logs.py +0 -0
  63. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_path.py +0 -0
  64. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_proxy.py +0 -0
  65. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_reflection.py +0 -0
  66. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  67. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_streams.py +0 -0
  68. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_sync.py +0 -0
  69. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_transform.py +0 -0
  70. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_typing.py +0 -0
  71. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_utils.py +0 -0
  72. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/_utils/_validation.py +0 -0
  73. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/.keep +0 -0
  74. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/__init__.py +0 -0
  75. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/_ignore.py +0 -0
  76. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/context_loader.py +0 -0
  77. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/polling.py +0 -0
  78. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/lib/polling_async.py +0 -0
  79. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/pagination.py +0 -0
  80. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/py.typed +0 -0
  81. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/__init__.py +0 -0
  82. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/agents.py +0 -0
  83. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/axons/__init__.py +0 -0
  84. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/axons/axons.py +0 -0
  85. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/axons/sql.py +0 -0
  86. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
  87. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
  88. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/benchmarks.py +0 -0
  89. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/blueprints.py +0 -0
  90. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  91. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  92. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  93. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  94. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  95. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  96. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  97. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/gateway_configs.py +0 -0
  98. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/mcp_configs.py +0 -0
  99. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/network_policies.py +0 -0
  100. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/objects.py +0 -0
  101. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/repositories.py +0 -0
  102. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  103. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  104. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  105. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  106. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/resources/secrets.py +0 -0
  107. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/_helpers.py +0 -0
  108. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/agent.py +0 -0
  109. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_.py +0 -0
  110. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_agent.py +0 -0
  111. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  112. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  113. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  114. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_execution.py +0 -0
  115. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  116. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  117. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  118. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  119. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  120. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  121. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  122. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  123. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_secret.py +0 -0
  124. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  125. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  126. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/benchmark.py +0 -0
  127. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  128. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/blueprint.py +0 -0
  129. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/execution.py +0 -0
  130. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/execution_result.py +0 -0
  131. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  132. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  133. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/network_policy.py +0 -0
  134. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/scenario.py +0 -0
  135. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  136. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  137. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/scorer.py +0 -0
  138. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/secret.py +0 -0
  139. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/snapshot.py +0 -0
  140. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/storage_object.py +0 -0
  141. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/sdk/sync.py +0 -0
  142. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/__init__.py +0 -0
  143. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/agent_create_params.py +0 -0
  144. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/agent_list_params.py +0 -0
  145. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/agent_list_view.py +0 -0
  146. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/agent_view.py +0 -0
  147. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axon_create_params.py +0 -0
  148. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axon_event_view.py +0 -0
  149. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axon_list_view.py +0 -0
  150. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axon_publish_params.py +0 -0
  151. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axon_view.py +0 -0
  152. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/__init__.py +0 -0
  153. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_batch_params.py +0 -0
  154. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_batch_result_view.py +0 -0
  155. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_column_meta_view.py +0 -0
  156. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_query_params.py +0 -0
  157. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_query_result_view.py +0 -0
  158. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_result_meta_view.py +0 -0
  159. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_statement_params.py +0 -0
  160. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_step_error_view.py +0 -0
  161. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/axons/sql_step_result_view.py +0 -0
  162. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  163. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  164. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  165. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
  166. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
  167. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  168. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  169. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
  170. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
  171. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  172. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  173. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  174. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  175. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  176. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/benchmark_view.py +0 -0
  177. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  178. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  179. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  180. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  181. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  182. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  183. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  184. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  185. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  186. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  187. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/blueprint_view.py +0 -0
  188. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  189. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  190. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  191. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  192. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  193. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  194. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  195. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  196. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  197. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  198. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  199. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  200. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  201. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  202. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  203. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  204. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  205. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  206. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  207. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  208. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  209. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  210. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  211. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_view.py +0 -0
  212. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  213. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  214. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  215. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  216. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  217. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  218. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  219. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  220. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  221. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  222. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  223. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  224. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  225. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  226. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  227. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  228. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  229. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  230. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  231. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  232. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  233. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  234. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  235. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  236. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  237. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  238. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  239. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
  240. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
  241. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  242. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  243. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/input_context.py +0 -0
  244. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/input_context_param.py +0 -0
  245. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  246. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  247. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  248. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
  249. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
  250. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  251. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  252. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  253. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
  254. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
  255. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  256. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/network_policy_view.py +0 -0
  257. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_create_params.py +0 -0
  258. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_download_params.py +0 -0
  259. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  260. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_list_params.py +0 -0
  261. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  262. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_list_view.py +0 -0
  263. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/object_view.py +0 -0
  264. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/publish_result_view.py +0 -0
  265. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  266. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  267. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_create_params.py +0 -0
  268. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
  269. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  270. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  271. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_list_params.py +0 -0
  272. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  273. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  274. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  275. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  276. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_environment.py +0 -0
  277. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  278. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  279. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  280. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  281. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  282. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  283. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  284. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenario_view.py +0 -0
  285. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  286. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  287. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  288. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  289. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  290. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  291. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  292. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  293. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  294. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_contract.py +0 -0
  295. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  296. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  297. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  298. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_function.py +0 -0
  299. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  300. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  301. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/secret_create_params.py +0 -0
  302. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/secret_list_params.py +0 -0
  303. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/secret_list_view.py +0 -0
  304. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/secret_update_params.py +0 -0
  305. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/secret_view.py +0 -0
  306. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/__init__.py +0 -0
  307. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  308. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  309. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  310. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/broker_mount.py +0 -0
  311. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  312. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  313. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/mount.py +0 -0
  314. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  315. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  316. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  317. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  318. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  319. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  320. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/broker_mount.py +0 -0
  321. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  322. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  323. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  324. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  325. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  326. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/src/runloop_api_client/types/tunnel_view.py +0 -0
  327. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/__init__.py +0 -0
  328. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/__init__.py +0 -0
  329. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/axons/__init__.py +0 -0
  330. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/axons/test_sql.py +0 -0
  331. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/__init__.py +0 -0
  332. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/test_browsers.py +0 -0
  333. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/test_computers.py +0 -0
  334. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  335. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/test_executions.py +0 -0
  336. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/devboxes/test_logs.py +0 -0
  337. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/scenarios/__init__.py +0 -0
  338. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/scenarios/test_runs.py +0 -0
  339. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/scenarios/test_scorers.py +0 -0
  340. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_agents.py +0 -0
  341. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_axons.py +0 -0
  342. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_benchmark_jobs.py +0 -0
  343. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_benchmark_runs.py +0 -0
  344. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_benchmarks.py +0 -0
  345. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_blueprints.py +0 -0
  346. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_devboxes.py +0 -0
  347. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_gateway_configs.py +0 -0
  348. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_mcp_configs.py +0 -0
  349. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_network_policies.py +0 -0
  350. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_objects.py +0 -0
  351. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_repositories.py +0 -0
  352. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_scenarios.py +0 -0
  353. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/api_resources/test_secrets.py +0 -0
  354. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/conftest.py +0 -0
  355. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sample_file.txt +0 -0
  356. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/__init__.py +0 -0
  357. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/__init__.py +0 -0
  358. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/conftest.py +0 -0
  359. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  360. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/test_interfaces.py +0 -0
  361. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/async_devbox/test_streaming.py +0 -0
  362. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/__init__.py +0 -0
  363. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/conftest.py +0 -0
  364. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/test_edge_cases.py +0 -0
  365. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/test_interfaces.py +0 -0
  366. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/devbox/test_streaming.py +0 -0
  367. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_agent.py +0 -0
  368. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_agent.py +0 -0
  369. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_benchmark.py +0 -0
  370. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_benchmark_run.py +0 -0
  371. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_blueprint.py +0 -0
  372. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_execution.py +0 -0
  373. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_execution_result.py +0 -0
  374. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_gateway_config.py +0 -0
  375. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_network_policy.py +0 -0
  376. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_ops.py +0 -0
  377. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_scenario.py +0 -0
  378. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_scenario_builder.py +0 -0
  379. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_scenario_run.py +0 -0
  380. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_scorer.py +0 -0
  381. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_snapshot.py +0 -0
  382. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_async_storage_object.py +0 -0
  383. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_benchmark.py +0 -0
  384. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_benchmark_run.py +0 -0
  385. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_blueprint.py +0 -0
  386. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_execution.py +0 -0
  387. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_execution_result.py +0 -0
  388. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_gateway_config.py +0 -0
  389. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_helpers.py +0 -0
  390. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_network_policy.py +0 -0
  391. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_ops.py +0 -0
  392. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_scenario.py +0 -0
  393. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_scenario_builder.py +0 -0
  394. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_scenario_run.py +0 -0
  395. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_scorer.py +0 -0
  396. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_snapshot.py +0 -0
  397. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/sdk/test_storage_object.py +0 -0
  398. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/README.md +0 -0
  399. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/__init__.py +0 -0
  400. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/conftest.py +0 -0
  401. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/examples/__init__.py +0 -0
  402. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/examples/test_examples.py +0 -0
  403. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/README.md +0 -0
  404. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/__init__.py +0 -0
  405. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/conftest.py +0 -0
  406. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_agent.py +0 -0
  407. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_agent.py +0 -0
  408. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  409. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  410. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_devbox.py +0 -0
  411. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  412. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  413. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  414. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  415. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  416. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_secret.py +0 -0
  417. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  418. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  419. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_benchmark.py +0 -0
  420. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_blueprint.py +0 -0
  421. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_devbox.py +0 -0
  422. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  423. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  424. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_network_policy.py +0 -0
  425. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_scenario.py +0 -0
  426. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_scorer.py +0 -0
  427. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_sdk.py +0 -0
  428. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_secret.py +0 -0
  429. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_snapshot.py +0 -0
  430. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/sdk/test_storage_object.py +0 -0
  431. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/test_blueprints.py +0 -0
  432. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/test_devboxes.py +0 -0
  433. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/test_executions.py +0 -0
  434. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  435. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/test_snapshots.py +0 -0
  436. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/smoketests/utils.py +0 -0
  437. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_client.py +0 -0
  438. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_command_id.py +0 -0
  439. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_deepcopy.py +0 -0
  440. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_extract_files.py +0 -0
  441. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_files.py +0 -0
  442. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_models.py +0 -0
  443. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_polling.py +0 -0
  444. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_qs.py +0 -0
  445. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_required_args.py +0 -0
  446. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_response.py +0 -0
  447. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_streaming.py +0 -0
  448. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_transform.py +0 -0
  449. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_context_loader.py +0 -0
  450. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_datetime_parse.py +0 -0
  451. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_json.py +0 -0
  452. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_path.py +0 -0
  453. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_proxy.py +0 -0
  454. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/test_utils/test_typing.py +0 -0
  455. {runloop_api_client-1.13.1 → runloop_api_client-1.13.3}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.13.3"
3
+ }
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.13.3 (2026-03-26)
4
+
5
+ Full Changelog: [v1.13.2...v1.13.3](https://github.com/runloopai/api-client-python/compare/v1.13.2...v1.13.3)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **api:** surface scenario setup failures instead of silently dropping them ([#8300](https://github.com/runloopai/api-client-python/issues/8300)) ([dd910d0](https://github.com/runloopai/api-client-python/commit/dd910d0e867e9964d24cb792b27dd9b56d670a98))
10
+ * **devbox:** `get_tunnel_url` now derives tunnel domain from base url ([#771](https://github.com/runloopai/api-client-python/issues/771)) ([2634c64](https://github.com/runloopai/api-client-python/commit/2634c64f91e187633d0252dcda6449d72631bc09))
11
+
12
+
13
+ ### Chores
14
+
15
+ * **axon:** add axon to sdk readme ([#769](https://github.com/runloopai/api-client-python/issues/769)) ([68afe5a](https://github.com/runloopai/api-client-python/commit/68afe5aa20120ed5c0aed061d540e287df945f6c))
16
+
17
+ ## 1.13.2 (2026-03-25)
18
+
19
+ Full Changelog: [v1.13.1...v1.13.2](https://github.com/runloopai/api-client-python/compare/v1.13.1...v1.13.2)
20
+
21
+ ### Bug Fixes
22
+
23
+ * adding axon SQL to sdk ([#767](https://github.com/runloopai/api-client-python/issues/767)) ([d683fd1](https://github.com/runloopai/api-client-python/commit/d683fd189b45120c0d2abe2963236ccb394a5eef))
24
+
3
25
  ## 1.13.1 (2026-03-25)
4
26
 
5
27
  Full Changelog: [v1.13.0...v1.13.1](https://github.com/runloopai/api-client-python/compare/v1.13.0...v1.13.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 1.13.1
3
+ Version: 1.13.3
4
4
  Summary: The official Python library for the runloop API
5
5
  Project-URL: Homepage, https://github.com/runloopai/api-client-python
6
6
  Project-URL: Repository, https://github.com/runloopai/api-client-python
@@ -25,6 +25,10 @@ The `RunloopSDK` builds on top of the underlying REST client and provides a Pyth
25
25
  - [StorageObject](#storageobject)
26
26
  - [Storage Object Upload Helpers](#storage-object-upload-helpers)
27
27
  - [Mounting Storage Objects to Devboxes](#mounting-storage-objects-to-devboxes)
28
+ - [Axon](#axon)
29
+ - [Publishing Events](#publishing-events)
30
+ - [Subscribing to Events (SSE)](#subscribing-to-events-sse)
31
+ - [SQL Operations](#sql-operations)
28
32
  - [Accessing the Underlying REST Client](#accessing-the-underlying-rest-client)
29
33
  - [Error Handling](#error-handling)
30
34
  - [Advanced Configuration](#advanced-configuration)
@@ -116,6 +120,7 @@ The SDK provides object-oriented interfaces for all major Runloop resources:
116
120
  - **`runloop.blueprint`** - Blueprint management (create, list, build blueprints)
117
121
  - **`runloop.snapshot`** - Snapshot management (list disk snapshots)
118
122
  - **`runloop.storage_object`** - Storage object management (upload, download, list objects)
123
+ - **`runloop.axon`** - [Beta] Axon management (create, publish events, subscribe to SSE streams, SQL queries)
119
124
  - **`runloop.secret`** - Secret management (create, update, list, delete encrypted key-value pairs)
120
125
  - **`runloop.api`** - Direct access to the underlying REST API client
121
126
 
@@ -679,6 +684,112 @@ result = devbox_with_archive.cmd.exec("ls -la /home/user/project/")
679
684
  print(result.stdout())
680
685
  ```
681
686
 
687
+ ### Axon
688
+
689
+ > **Beta:** Axon APIs are in beta and may change.
690
+
691
+ Object-oriented interface for working with axons — event communication channels that support
692
+ publishing events, subscribing to event streams via SSE, and executing SQL queries against an
693
+ embedded SQLite database. Created via `runloop.axon.create()` or `runloop.axon.from_id()`:
694
+
695
+ ```python
696
+ # Create a new axon
697
+ axon = runloop.axon.create(name="my-axon")
698
+
699
+ # Or get an existing one
700
+ axon = runloop.axon.from_id(axon_id="axn_123")
701
+
702
+ # List all axons
703
+ axons = runloop.axon.list()
704
+
705
+ # Get axon details
706
+ info = axon.get_info()
707
+ print(f"Axon {info.name} created at {info.created_at_ms}")
708
+ ```
709
+
710
+ #### Publishing Events
711
+
712
+ Publish structured events to an axon:
713
+
714
+ ```python
715
+ result = axon.publish(
716
+ event_type="task_completed",
717
+ origin="AGENT_EVENT", # EXTERNAL_EVENT | AGENT_EVENT | USER_EVENT
718
+ payload='{"task_id": 42, "status": "done"}',
719
+ source="my-agent",
720
+ )
721
+ print(f"Sequence: {result.sequence}, Timestamp: {result.timestamp_ms}")
722
+ ```
723
+
724
+ #### Subscribing to Events (SSE)
725
+
726
+ Subscribe to real-time events via server-sent events:
727
+
728
+ ```python
729
+ with axon.subscribe_sse() as stream:
730
+ for event in stream:
731
+ print(f"[{event.source}] {event.event_type}: {event.payload}")
732
+ # event.axon_id, event.origin, event.sequence, event.timestamp_ms also available
733
+ ```
734
+
735
+ Async:
736
+
737
+ ```python
738
+ async with await axon.subscribe_sse() as stream:
739
+ async for event in stream:
740
+ print(f"[{event.source}] {event.event_type}: {event.payload}")
741
+ ```
742
+
743
+ #### SQL Operations
744
+
745
+ Each axon has an embedded SQLite database accessible via `axon.sql`:
746
+
747
+ ```python
748
+ # Create a table
749
+ axon.sql.query(sql="CREATE TABLE tasks (id INTEGER PRIMARY KEY, name TEXT, done INTEGER)")
750
+
751
+ # Insert with parameterized queries (? placeholders)
752
+ axon.sql.query(
753
+ sql="INSERT INTO tasks (id, name, done) VALUES (?, ?, ?)",
754
+ params=[1, "Write docs", 0],
755
+ )
756
+
757
+ # Query
758
+ result = axon.sql.query(sql="SELECT * FROM tasks WHERE done = ?", params=[0])
759
+ for row in result.rows:
760
+ print(row) # e.g. [1, "Write docs", 0]
761
+ print(result.columns) # [SqlColumnMetaView(name="id", type="INTEGER"), ...]
762
+ print(result.meta) # SqlResultMetaView(changes=0, duration_ms=0.5, rows_read_limit_reached=False)
763
+ ```
764
+
765
+ Execute multiple statements atomically with `batch`:
766
+
767
+ ```python
768
+ result = axon.sql.batch(
769
+ statements=[
770
+ {"sql": "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)"},
771
+ {"sql": "INSERT INTO users (id, name) VALUES (?, ?)", "params": [1, "Alice"]},
772
+ {"sql": "INSERT INTO users (id, name) VALUES (?, ?)", "params": [2, "Bob"]},
773
+ {"sql": "SELECT * FROM users ORDER BY id"},
774
+ ],
775
+ )
776
+
777
+ # Each statement gets a result
778
+ for step in result.results:
779
+ if step.success:
780
+ print(f"Rows: {step.success.rows}, Changes: {step.success.meta.changes}")
781
+ elif step.error:
782
+ print(f"Error: {step.error}")
783
+ ```
784
+
785
+ **Key methods:**
786
+
787
+ - `axon.get_info()` – Get axon details (name, created_at_ms)
788
+ - `axon.publish()` – Publish an event (event_type, origin, payload, source)
789
+ - `axon.subscribe_sse()` – Subscribe to event stream (returns `Stream[AxonEventView]`)
790
+ - `axon.sql.query()` – Execute a single SQL statement with optional params
791
+ - `axon.sql.batch()` – Execute multiple SQL statements atomically
792
+
682
793
  ## Accessing the Underlying REST Client
683
794
 
684
795
  The SDK always exposes the underlying client through the `.api` attribute:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.13.1"
3
+ version = "1.13.3"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -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.13.1" # x-release-please-version
4
+ __version__ = "1.13.3" # x-release-please-version
@@ -5,7 +5,7 @@ Provides both sync (`RunloopSDK`) and async (`AsyncRunloopSDK`) interfaces.
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from .axon import Axon
8
+ from .axon import Axon, AxonSqlOps
9
9
  from .sync import (
10
10
  AxonOps,
11
11
  AgentOps,
@@ -48,7 +48,7 @@ from .snapshot import Snapshot
48
48
  from .benchmark import Benchmark
49
49
  from .blueprint import Blueprint
50
50
  from .execution import Execution
51
- from .async_axon import AsyncAxon
51
+ from .async_axon import AsyncAxon, AsyncAxonSqlOps
52
52
  from .mcp_config import McpConfig
53
53
  from .async_agent import AsyncAgent
54
54
  from .async_devbox import AsyncDevbox, AsyncNamedShell
@@ -111,6 +111,8 @@ __all__ = [
111
111
  "AsyncAgent",
112
112
  "Axon",
113
113
  "AsyncAxon",
114
+ "AxonSqlOps",
115
+ "AsyncAxonSqlOps",
114
116
  "AsyncSecret",
115
117
  "Benchmark",
116
118
  "AsyncBenchmark",
@@ -42,6 +42,8 @@ from ..lib.polling import PollingConfig
42
42
  from ..types.devboxes import DiskSnapshotListParams, DiskSnapshotUpdateParams
43
43
  from ..types.scenarios import ScorerListParams, ScorerCreateParams, ScorerUpdateParams
44
44
  from ..types.devbox_create_params import DevboxBaseCreateParams
45
+ from ..types.axons.sql_batch_params import SqlBatchParams
46
+ from ..types.axons.sql_query_params import SqlQueryParams
45
47
  from ..types.scenario_start_run_params import ScenarioStartRunBaseParams
46
48
  from ..types.benchmark_start_run_params import BenchmarkSelfStartRunParams
47
49
  from ..types.devbox_execute_async_params import DevboxNiceExecuteAsyncParams
@@ -196,6 +198,14 @@ class SDKAxonPublishParams(AxonPublishParams, LongRequestOptions):
196
198
  pass
197
199
 
198
200
 
201
+ class SDKAxonSqlQueryParams(SqlQueryParams, LongRequestOptions):
202
+ pass
203
+
204
+
205
+ class SDKAxonSqlBatchParams(SqlBatchParams, LongRequestOptions):
206
+ pass
207
+
208
+
199
209
  class SDKScenarioListParams(ScenarioListParams, BaseRequestOptions):
200
210
  pass
201
211
 
@@ -7,19 +7,48 @@ from typing_extensions import Unpack, override
7
7
  from ._types import (
8
8
  BaseRequestOptions,
9
9
  SDKAxonPublishParams,
10
+ SDKAxonSqlBatchParams,
11
+ SDKAxonSqlQueryParams,
10
12
  )
11
13
  from .._client import AsyncRunloop
12
14
  from .._streaming import AsyncStream
13
15
  from ..types.axon_view import AxonView
14
16
  from ..types.axon_event_view import AxonEventView
15
17
  from ..types.publish_result_view import PublishResultView
18
+ from ..types.axons.sql_batch_result_view import SqlBatchResultView
19
+ from ..types.axons.sql_query_result_view import SqlQueryResultView
20
+
21
+
22
+ class AsyncAxonSqlOps:
23
+ """[Beta] Async SQL operations for an axon's SQLite database.
24
+
25
+ Access via ``axon.sql``.
26
+
27
+ Example:
28
+ >>> axon = await runloop.axon.create()
29
+ >>> await axon.sql.query(sql="CREATE TABLE tasks (id INTEGER PRIMARY KEY, name TEXT)")
30
+ >>> result = await axon.sql.query(sql="SELECT * FROM tasks WHERE id = ?", params=[1])
31
+ """
32
+
33
+ def __init__(self, client: AsyncRunloop, axon_id: str) -> None:
34
+ self._client = client
35
+ self._axon_id = axon_id
36
+
37
+ async def query(self, **params: Unpack[SDKAxonSqlQueryParams]) -> SqlQueryResultView:
38
+ """[Beta] Execute a single parameterized SQL statement against this axon's SQLite database."""
39
+ return await self._client.axons.sql.query(self._axon_id, **params)
40
+
41
+ async def batch(self, **params: Unpack[SDKAxonSqlBatchParams]) -> SqlBatchResultView:
42
+ """[Beta] Execute multiple SQL statements atomically within a single transaction."""
43
+ return await self._client.axons.sql.batch(self._axon_id, **params)
16
44
 
17
45
 
18
46
  class AsyncAxon:
19
47
  """[Beta] Wrapper around asynchronous axon operations.
20
48
 
21
- Axons are event communication channels that support publishing events
22
- and subscribing to event streams via server-sent events (SSE).
49
+ Axons are event communication channels that support publishing events,
50
+ subscribing to event streams via server-sent events (SSE), and executing
51
+ SQL queries against an embedded SQLite database.
23
52
  Obtain instances via ``runloop.axon.create()`` or ``runloop.axon.from_id()``.
24
53
 
25
54
  Example:
@@ -29,11 +58,17 @@ class AsyncAxon:
29
58
  >>> async with await axon.subscribe_sse() as stream:
30
59
  ... async for event in stream:
31
60
  ... print(event.event_type, event.payload)
61
+ >>> await axon.sql.query(sql="CREATE TABLE tasks (id INTEGER PRIMARY KEY, name TEXT)")
32
62
  """
33
63
 
34
64
  def __init__(self, client: AsyncRunloop, axon_id: str) -> None:
35
65
  self._client = client
36
66
  self._id = axon_id
67
+ self._sql = AsyncAxonSqlOps(client, axon_id)
68
+
69
+ @property
70
+ def sql(self) -> AsyncAxonSqlOps:
71
+ return self._sql
37
72
 
38
73
  @override
39
74
  def __repr__(self) -> str:
@@ -161,7 +161,9 @@ class AsyncDevbox:
161
161
  tunnel_view = await self.get_tunnel(**options)
162
162
  if tunnel_view is None:
163
163
  return None
164
- return f"https://{port}-{tunnel_view.tunnel_key}.tunnel.runloop.ai"
164
+ api_host = self._client.base_url.host
165
+ base_domain = api_host[4:] if api_host.startswith("api.") else api_host
166
+ return f"https://{port}-{tunnel_view.tunnel_key}.tunnel.{base_domain}"
165
167
 
166
168
  async def logs(
167
169
  self,
@@ -7,19 +7,48 @@ from typing_extensions import Unpack, override
7
7
  from ._types import (
8
8
  BaseRequestOptions,
9
9
  SDKAxonPublishParams,
10
+ SDKAxonSqlBatchParams,
11
+ SDKAxonSqlQueryParams,
10
12
  )
11
13
  from .._client import Runloop
12
14
  from .._streaming import Stream
13
15
  from ..types.axon_view import AxonView
14
16
  from ..types.axon_event_view import AxonEventView
15
17
  from ..types.publish_result_view import PublishResultView
18
+ from ..types.axons.sql_batch_result_view import SqlBatchResultView
19
+ from ..types.axons.sql_query_result_view import SqlQueryResultView
20
+
21
+
22
+ class AxonSqlOps:
23
+ """[Beta] SQL operations for an axon's SQLite database.
24
+
25
+ Access via ``axon.sql``.
26
+
27
+ Example:
28
+ >>> axon = runloop.axon.create()
29
+ >>> axon.sql.query(sql="CREATE TABLE tasks (id INTEGER PRIMARY KEY, name TEXT)")
30
+ >>> result = axon.sql.query(sql="SELECT * FROM tasks WHERE id = ?", params=[1])
31
+ """
32
+
33
+ def __init__(self, client: Runloop, axon_id: str) -> None:
34
+ self._client = client
35
+ self._axon_id = axon_id
36
+
37
+ def query(self, **params: Unpack[SDKAxonSqlQueryParams]) -> SqlQueryResultView:
38
+ """[Beta] Execute a single parameterized SQL statement against this axon's SQLite database."""
39
+ return self._client.axons.sql.query(self._axon_id, **params)
40
+
41
+ def batch(self, **params: Unpack[SDKAxonSqlBatchParams]) -> SqlBatchResultView:
42
+ """[Beta] Execute multiple SQL statements atomically within a single transaction."""
43
+ return self._client.axons.sql.batch(self._axon_id, **params)
16
44
 
17
45
 
18
46
  class Axon:
19
47
  """[Beta] Wrapper around synchronous axon operations.
20
48
 
21
- Axons are event communication channels that support publishing events
22
- and subscribing to event streams via server-sent events (SSE).
49
+ Axons are event communication channels that support publishing events,
50
+ subscribing to event streams via server-sent events (SSE), and executing
51
+ SQL queries against an embedded SQLite database.
23
52
  Obtain instances via ``runloop.axon.create()`` or ``runloop.axon.from_id()``.
24
53
 
25
54
  Example:
@@ -29,11 +58,17 @@ class Axon:
29
58
  >>> with axon.subscribe_sse() as stream:
30
59
  ... for event in stream:
31
60
  ... print(event.event_type, event.payload)
61
+ >>> axon.sql.query(sql="CREATE TABLE tasks (id INTEGER PRIMARY KEY, name TEXT)")
32
62
  """
33
63
 
34
64
  def __init__(self, client: Runloop, axon_id: str) -> None:
35
65
  self._client = client
36
66
  self._id = axon_id
67
+ self._sql = AxonSqlOps(client, axon_id)
68
+
69
+ @property
70
+ def sql(self) -> AxonSqlOps:
71
+ return self._sql
37
72
 
38
73
  @override
39
74
  def __repr__(self) -> str:
@@ -160,7 +160,9 @@ class Devbox:
160
160
  tunnel_view = self.get_tunnel(**options)
161
161
  if tunnel_view is None:
162
162
  return None
163
- return f"https://{port}-{tunnel_view.tunnel_key}.tunnel.runloop.ai"
163
+ api_host = self._client.base_url.host
164
+ base_domain = api_host[4:] if api_host.startswith("api.") else api_host
165
+ return f"https://{port}-{tunnel_view.tunnel_key}.tunnel.{base_domain}"
164
166
 
165
167
  def logs(
166
168
  self,
@@ -53,9 +53,6 @@ class BenchmarkOutcomeScenarioOutcome(BaseModel):
53
53
  scenario_name: str
54
54
  """The name of the scenario."""
55
55
 
56
- scenario_run_id: str
57
- """The ID of the scenario run."""
58
-
59
56
  state: Literal["COMPLETED", "FAILED", "TIMEOUT", "CANCELED"]
60
57
  """The final state of the scenario execution."""
61
58
 
@@ -68,6 +65,12 @@ class BenchmarkOutcomeScenarioOutcome(BaseModel):
68
65
  Contains exception type and message.
69
66
  """
70
67
 
68
+ scenario_run_id: Optional[str] = None
69
+ """The ID of the scenario run.
70
+
71
+ May be absent if the scenario failed during setup before a run was created.
72
+ """
73
+
71
74
  score: Optional[float] = None
72
75
  """The score achieved for this scenario (0.0 to 1.0).
73
76
 
@@ -9,6 +9,7 @@ from __future__ import annotations
9
9
  from types import SimpleNamespace
10
10
  from unittest.mock import AsyncMock
11
11
 
12
+ import httpx
12
13
  import pytest
13
14
 
14
15
  from tests.sdk.conftest import MockDevboxView
@@ -377,6 +378,7 @@ class TestAsyncDevbox:
377
378
  tunnel=tunnel_view,
378
379
  )
379
380
  mock_async_client.devboxes.retrieve = AsyncMock(return_value=devbox_view_with_tunnel)
381
+ mock_async_client.base_url = httpx.URL("https://api.runloop.ai")
380
382
 
381
383
  devbox = AsyncDevbox(mock_async_client, "dbx_123")
382
384
  result = await devbox.get_tunnel_url(8080)
@@ -384,6 +386,28 @@ class TestAsyncDevbox:
384
386
  assert result == "https://8080-abc123xyz.tunnel.runloop.ai"
385
387
  mock_async_client.devboxes.retrieve.assert_called_once_with("dbx_123")
386
388
 
389
+ @pytest.mark.asyncio
390
+ async def test_get_tunnel_url_derives_domain_from_base_url(self, mock_async_client: AsyncMock) -> None:
391
+ """Test get_tunnel_url derives tunnel domain from client base_url."""
392
+ tunnel_view = SimpleNamespace(
393
+ tunnel_key="abc123xyz",
394
+ auth_mode="open",
395
+ create_time_ms=1234567890000,
396
+ )
397
+ devbox_view_with_tunnel = SimpleNamespace(
398
+ id="dbx_123",
399
+ status="running",
400
+ tunnel=tunnel_view,
401
+ )
402
+ mock_async_client.devboxes.retrieve = AsyncMock(return_value=devbox_view_with_tunnel)
403
+ devbox = AsyncDevbox(mock_async_client, "dbx_123")
404
+
405
+ mock_async_client.base_url = httpx.URL("https://api.runloop.pro")
406
+ assert await devbox.get_tunnel_url(8080) == "https://8080-abc123xyz.tunnel.runloop.pro"
407
+
408
+ mock_async_client.base_url = httpx.URL("http://127.0.0.1:8080")
409
+ assert await devbox.get_tunnel_url(8080) == "https://8080-abc123xyz.tunnel.127.0.0.1"
410
+
387
411
  @pytest.mark.asyncio
388
412
  async def test_get_tunnel_url_returns_none_when_no_tunnel(self, mock_async_client: AsyncMock) -> None:
389
413
  """Test get_tunnel_url returns None when no tunnel is enabled."""
@@ -133,6 +133,47 @@ class MockPublishResultView:
133
133
  timestamp_ms: int = 1234567890000
134
134
 
135
135
 
136
+ @dataclass
137
+ class MockSqlColumnMetaView:
138
+ """Mock SqlColumnMetaView for testing."""
139
+
140
+ name: str = "id"
141
+ type: str = "INTEGER"
142
+
143
+
144
+ @dataclass
145
+ class MockSqlResultMetaView:
146
+ """Mock SqlResultMetaView for testing."""
147
+
148
+ changes: int = 0
149
+ duration_ms: float = 1.5
150
+ rows_read_limit_reached: bool = False
151
+
152
+
153
+ @dataclass
154
+ class MockSqlQueryResultView:
155
+ """Mock SqlQueryResultView for testing."""
156
+
157
+ columns: list[Any] = field(default_factory=lambda: [MockSqlColumnMetaView()])
158
+ meta: Any = field(default_factory=MockSqlResultMetaView)
159
+ rows: list[Any] = field(default_factory=lambda: [[1, "hello"]])
160
+
161
+
162
+ @dataclass
163
+ class MockSqlStepResultView:
164
+ """Mock SqlStepResultView for testing."""
165
+
166
+ success: Any = field(default_factory=lambda: MockSqlQueryResultView())
167
+ error: Any = None
168
+
169
+
170
+ @dataclass
171
+ class MockSqlBatchResultView:
172
+ """Mock SqlBatchResultView for testing."""
173
+
174
+ results: list[Any] = field(default_factory=lambda: [MockSqlStepResultView()])
175
+
176
+
136
177
  @dataclass
137
178
  class MockScenarioView:
138
179
  """Mock ScenarioView for testing."""
@@ -9,6 +9,7 @@ from __future__ import annotations
9
9
  from types import SimpleNamespace
10
10
  from unittest.mock import Mock
11
11
 
12
+ import httpx
12
13
  import pytest
13
14
 
14
15
  from tests.sdk.conftest import (
@@ -373,6 +374,7 @@ class TestDevbox:
373
374
  tunnel=tunnel_view,
374
375
  )
375
376
  mock_client.devboxes.retrieve.return_value = devbox_view_with_tunnel
377
+ mock_client.base_url = httpx.URL("https://api.runloop.ai")
376
378
 
377
379
  devbox = Devbox(mock_client, "dbx_123")
378
380
  result = devbox.get_tunnel_url(8080)
@@ -380,6 +382,27 @@ class TestDevbox:
380
382
  assert result == "https://8080-abc123xyz.tunnel.runloop.ai"
381
383
  mock_client.devboxes.retrieve.assert_called_once_with("dbx_123")
382
384
 
385
+ def test_get_tunnel_url_derives_domain_from_base_url(self, mock_client: Mock) -> None:
386
+ """Test get_tunnel_url derives tunnel domain from client base_url."""
387
+ tunnel_view = SimpleNamespace(
388
+ tunnel_key="abc123xyz",
389
+ auth_mode="open",
390
+ create_time_ms=1234567890000,
391
+ )
392
+ devbox_view_with_tunnel = SimpleNamespace(
393
+ id="dbx_123",
394
+ status="running",
395
+ tunnel=tunnel_view,
396
+ )
397
+ mock_client.devboxes.retrieve.return_value = devbox_view_with_tunnel
398
+ devbox = Devbox(mock_client, "dbx_123")
399
+
400
+ mock_client.base_url = httpx.URL("https://api.runloop.pro")
401
+ assert devbox.get_tunnel_url(8080) == "https://8080-abc123xyz.tunnel.runloop.pro"
402
+
403
+ mock_client.base_url = httpx.URL("http://127.0.0.1:8080")
404
+ assert devbox.get_tunnel_url(8080) == "https://8080-abc123xyz.tunnel.127.0.0.1"
405
+
383
406
  def test_get_tunnel_url_returns_none_when_no_tunnel(self, mock_client: Mock) -> None:
384
407
  """Test get_tunnel_url returns None when no tunnel is enabled."""
385
408
  devbox_view_no_tunnel = SimpleNamespace(
@@ -6,8 +6,9 @@ from unittest.mock import AsyncMock
6
6
 
7
7
  import pytest
8
8
 
9
- from tests.sdk.conftest import MockAxonView, MockPublishResultView
9
+ from tests.sdk.conftest import MockAxonView, MockPublishResultView, MockSqlBatchResultView, MockSqlQueryResultView
10
10
  from runloop_api_client.sdk import AsyncAxon
11
+ from runloop_api_client.types.axons.sql_statement_params import SqlStatementParams
11
12
 
12
13
 
13
14
  class TestAsyncAxon:
@@ -75,3 +76,38 @@ class TestAsyncAxon:
75
76
 
76
77
  assert result == mock_stream
77
78
  mock_async_client.axons.subscribe_sse.assert_awaited_once_with("axn_123")
79
+
80
+ @pytest.mark.asyncio
81
+ async def test_sql_query(self, mock_async_client: AsyncMock) -> None:
82
+ """Test sql.query method delegates to client.axons.sql.query."""
83
+ mock_result = MockSqlQueryResultView()
84
+ mock_async_client.axons.sql.query = AsyncMock(return_value=mock_result)
85
+
86
+ axon = AsyncAxon(mock_async_client, "axn_123")
87
+ result = await axon.sql.query(sql="SELECT * FROM test WHERE id = ?", params=[1])
88
+
89
+ assert result == mock_result
90
+ mock_async_client.axons.sql.query.assert_awaited_once_with(
91
+ "axn_123",
92
+ sql="SELECT * FROM test WHERE id = ?",
93
+ params=[1],
94
+ )
95
+
96
+ @pytest.mark.asyncio
97
+ async def test_sql_batch(self, mock_async_client: AsyncMock) -> None:
98
+ """Test sql.batch method delegates to client.axons.sql.batch."""
99
+ mock_result = MockSqlBatchResultView()
100
+ mock_async_client.axons.sql.batch = AsyncMock(return_value=mock_result)
101
+
102
+ statements: list[SqlStatementParams] = [
103
+ {"sql": "CREATE TABLE t (id INTEGER PRIMARY KEY)"},
104
+ {"sql": "INSERT INTO t (id) VALUES (?)", "params": [1]},
105
+ ]
106
+ axon = AsyncAxon(mock_async_client, "axn_123")
107
+ result = await axon.sql.batch(statements=statements)
108
+
109
+ assert result == mock_result
110
+ mock_async_client.axons.sql.batch.assert_awaited_once_with(
111
+ "axn_123",
112
+ statements=statements,
113
+ )
@@ -4,8 +4,9 @@ from __future__ import annotations
4
4
 
5
5
  from unittest.mock import Mock
6
6
 
7
- from tests.sdk.conftest import MockAxonView, MockPublishResultView
7
+ from tests.sdk.conftest import MockAxonView, MockPublishResultView, MockSqlBatchResultView, MockSqlQueryResultView
8
8
  from runloop_api_client.sdk import Axon
9
+ from runloop_api_client.types.axons.sql_statement_params import SqlStatementParams
9
10
 
10
11
 
11
12
  class TestAxon:
@@ -70,3 +71,36 @@ class TestAxon:
70
71
 
71
72
  assert result == mock_stream
72
73
  mock_client.axons.subscribe_sse.assert_called_once_with("axn_123")
74
+
75
+ def test_sql_query(self, mock_client: Mock) -> None:
76
+ """Test sql.query method delegates to client.axons.sql.query."""
77
+ mock_result = MockSqlQueryResultView()
78
+ mock_client.axons.sql.query.return_value = mock_result
79
+
80
+ axon = Axon(mock_client, "axn_123")
81
+ result = axon.sql.query(sql="SELECT * FROM test WHERE id = ?", params=[1])
82
+
83
+ assert result == mock_result
84
+ mock_client.axons.sql.query.assert_called_once_with(
85
+ "axn_123",
86
+ sql="SELECT * FROM test WHERE id = ?",
87
+ params=[1],
88
+ )
89
+
90
+ def test_sql_batch(self, mock_client: Mock) -> None:
91
+ """Test sql.batch method delegates to client.axons.sql.batch."""
92
+ mock_result = MockSqlBatchResultView()
93
+ mock_client.axons.sql.batch.return_value = mock_result
94
+
95
+ statements: list[SqlStatementParams] = [
96
+ {"sql": "CREATE TABLE t (id INTEGER PRIMARY KEY)"},
97
+ {"sql": "INSERT INTO t (id) VALUES (?)", "params": [1]},
98
+ ]
99
+ axon = Axon(mock_client, "axn_123")
100
+ result = axon.sql.batch(statements=statements)
101
+
102
+ assert result == mock_result
103
+ mock_client.axons.sql.batch.assert_called_once_with(
104
+ "axn_123",
105
+ statements=statements,
106
+ )