runloop-api-client 1.12.1__tar.gz → 1.13.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 (435) hide show
  1. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/.gitignore +1 -0
  2. runloop_api_client-1.13.0/.release-please-manifest.json +3 -0
  3. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/CHANGELOG.md +32 -0
  4. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/CONTRIBUTING.md +1 -1
  5. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/EXAMPLES.md +40 -11
  6. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/PKG-INFO +1 -1
  7. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/api.md +24 -1
  8. runloop_api_client-1.13.0/examples/devbox_tunnel.py +117 -0
  9. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/registry.py +9 -1
  10. runloop_api_client-1.13.0/examples/secrets_with_devbox.py +183 -0
  11. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/pyproject.toml +1 -1
  12. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_client.py +38 -0
  13. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/__init__.py +1 -0
  14. runloop_api_client-1.13.0/src/runloop_api_client/_utils/_path.py +127 -0
  15. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_version.py +1 -1
  16. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/__init__.py +14 -0
  17. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/agents.py +13 -3
  18. runloop_api_client-1.13.0/src/runloop_api_client/resources/axons.py +532 -0
  19. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/benchmark_jobs.py +13 -3
  20. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/benchmark_runs.py +29 -9
  21. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/benchmarks.py +29 -9
  22. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/blueprints.py +27 -7
  23. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/browsers.py +3 -3
  24. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/computers.py +9 -9
  25. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/devboxes.py +83 -82
  26. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +17 -7
  27. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/executions.py +63 -19
  28. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/logs.py +3 -3
  29. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/gateway_configs.py +17 -7
  30. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/mcp_configs.py +17 -7
  31. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/network_policies.py +17 -7
  32. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/objects.py +29 -9
  33. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/repositories.py +23 -13
  34. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/scenarios/runs.py +21 -11
  35. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/scenarios/scenarios.py +27 -7
  36. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/scenarios/scorers.py +15 -5
  37. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/secrets.py +5 -5
  38. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/_types.py +1 -2
  39. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_devbox.py +1 -1
  40. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/devbox.py +1 -1
  41. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/__init__.py +6 -1
  42. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/agent_list_params.py +6 -0
  43. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/agent_list_view.py +1 -10
  44. runloop_api_client-1.13.0/src/runloop_api_client/types/axon_create_params.py +13 -0
  45. runloop_api_client-1.13.0/src/runloop_api_client/types/axon_event_view.py +30 -0
  46. runloop_api_client-1.13.0/src/runloop_api_client/types/axon_list_view.py +13 -0
  47. runloop_api_client-1.13.0/src/runloop_api_client/types/axon_publish_params.py +21 -0
  48. runloop_api_client-1.13.0/src/runloop_api_client/types/axon_view.py +18 -0
  49. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_job_list_params.py +6 -0
  50. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -2
  51. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_list_params.py +6 -0
  52. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_list_public_params.py +6 -0
  53. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_run_list_params.py +6 -0
  54. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +6 -0
  55. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -2
  56. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_list_params.py +6 -0
  57. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_list_public_params.py +6 -0
  58. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -2
  59. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +6 -0
  60. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_list_params.py +6 -0
  61. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_list_view.py +0 -2
  62. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -2
  63. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +6 -0
  64. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/gateway_config_list_params.py +6 -0
  65. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/gateway_config_list_view.py +1 -4
  66. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/mcp_config_list_params.py +6 -0
  67. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/mcp_config_list_view.py +1 -4
  68. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/network_policy_list_params.py +6 -0
  69. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/network_policy_list_view.py +1 -4
  70. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_list_params.py +6 -0
  71. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_list_public_params.py +6 -0
  72. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_list_view.py +1 -10
  73. runloop_api_client-1.13.0/src/runloop_api_client/types/publish_result_view.py +13 -0
  74. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -2
  75. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_list_params.py +6 -0
  76. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -2
  77. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_list_params.py +6 -0
  78. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_list_public_params.py +6 -0
  79. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -2
  80. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/run_list_params.py +6 -0
  81. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +6 -0
  82. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/secret_list_view.py +1 -10
  83. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/launch_parameters.py +2 -3
  84. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +2 -3
  85. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/test_disk_snapshots.py +2 -0
  86. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/scenarios/test_runs.py +2 -0
  87. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/scenarios/test_scorers.py +2 -0
  88. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_agents.py +2 -0
  89. runloop_api_client-1.13.0/tests/api_resources/test_axons.py +396 -0
  90. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_benchmark_jobs.py +2 -0
  91. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_benchmark_runs.py +4 -0
  92. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_benchmarks.py +4 -0
  93. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_blueprints.py +4 -0
  94. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_devboxes.py +38 -52
  95. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_gateway_configs.py +2 -0
  96. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_mcp_configs.py +2 -0
  97. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_network_policies.py +2 -0
  98. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_objects.py +4 -0
  99. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_repositories.py +2 -0
  100. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_scenarios.py +4 -0
  101. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/test_interfaces.py +0 -1
  102. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/test_interfaces.py +0 -2
  103. runloop_api_client-1.13.0/tests/test_utils/test_path.py +89 -0
  104. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/uv.lock +2 -2
  105. runloop_api_client-1.12.1/.release-please-manifest.json +0 -3
  106. runloop_api_client-1.12.1/examples/secrets_with_devbox.py +0 -112
  107. runloop_api_client-1.12.1/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -12
  108. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/LICENSE +0 -0
  109. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/README-SDK.md +0 -0
  110. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/README.md +0 -0
  111. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/SECURITY.md +0 -0
  112. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/bin/check-release-environment +0 -0
  113. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/bin/publish-pypi +0 -0
  114. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/__init__.py +0 -0
  115. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/_harness.py +0 -0
  116. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/blueprint_with_build_context.py +0 -0
  117. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/devbox_from_blueprint_lifecycle.py +0 -0
  118. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/devbox_snapshot_resume.py +0 -0
  119. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/example_types.py +0 -0
  120. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/examples/mcp_github_tools.py +0 -0
  121. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/release-please-config.json +0 -0
  122. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/requirements-dev.lock +0 -0
  123. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop/lib/.keep +0 -0
  124. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/__init__.py +0 -0
  125. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_base_client.py +0 -0
  126. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_compat.py +0 -0
  127. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_constants.py +0 -0
  128. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_exceptions.py +0 -0
  129. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_files.py +0 -0
  130. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_models.py +0 -0
  131. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_qs.py +0 -0
  132. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_resource.py +0 -0
  133. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_response.py +0 -0
  134. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_streaming.py +0 -0
  135. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_types.py +0 -0
  136. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  137. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  138. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_json.py +0 -0
  139. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  140. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  141. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  142. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  143. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  144. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  145. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  146. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  147. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  148. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/_utils/_validation.py +0 -0
  149. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/.keep +0 -0
  150. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/__init__.py +0 -0
  151. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/_ignore.py +0 -0
  152. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/context_loader.py +0 -0
  153. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/polling.py +0 -0
  154. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  155. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/pagination.py +0 -0
  156. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/py.typed +0 -0
  157. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  158. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  159. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/__init__.py +0 -0
  160. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
  161. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/agent.py +0 -0
  162. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_.py +0 -0
  163. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_agent.py +0 -0
  164. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
  165. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
  166. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
  167. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
  168. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
  169. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
  170. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
  171. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
  172. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
  173. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
  174. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
  175. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_scorer.py +0 -0
  176. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_secret.py +0 -0
  177. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
  178. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
  179. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/benchmark.py +0 -0
  180. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
  181. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
  182. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/execution.py +0 -0
  183. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
  184. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/gateway_config.py +0 -0
  185. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/mcp_config.py +0 -0
  186. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/network_policy.py +0 -0
  187. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/scenario.py +0 -0
  188. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
  189. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
  190. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/scorer.py +0 -0
  191. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/secret.py +0 -0
  192. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
  193. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/storage_object.py +0 -0
  194. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/sdk/sync.py +0 -0
  195. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/agent_create_params.py +0 -0
  196. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/agent_view.py +0 -0
  197. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  198. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  199. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
  200. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
  201. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  202. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  203. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  204. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
  205. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  206. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  207. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  208. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  209. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
  210. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  211. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  212. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  213. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  214. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  215. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  216. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  217. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  218. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
  219. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  220. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
  221. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  222. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  223. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  224. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  225. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
  226. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
  227. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
  228. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  229. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  230. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  231. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  232. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  233. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  234. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
  235. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  236. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  237. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  238. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  239. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  240. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  241. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  242. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  243. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  244. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  245. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  246. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  247. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  248. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  249. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  250. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  251. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  252. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
  253. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  254. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
  255. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
  256. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
  257. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
  258. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  259. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
  260. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
  261. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/gateway_config_view.py +0 -0
  262. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/input_context.py +0 -0
  263. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  264. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  265. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/inspection_source_param.py +0 -0
  266. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
  267. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
  268. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/mcp_config_view.py +0 -0
  269. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
  270. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
  271. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/network_policy_view.py +0 -0
  272. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  273. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  274. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  275. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/object_view.py +0 -0
  276. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  277. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  278. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
  279. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  280. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  281. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  282. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  283. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  284. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  285. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  286. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  287. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  288. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  289. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  290. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  291. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  292. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  293. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  294. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  295. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  296. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  297. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  298. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  299. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  300. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  301. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  302. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  303. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  304. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  305. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  306. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  307. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/secret_view.py +0 -0
  308. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  309. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  310. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
  311. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/agent_source.py +0 -0
  312. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  313. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/mount.py +0 -0
  314. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/object_mount.py +0 -0
  315. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  316. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  317. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  318. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
  319. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
  320. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  321. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/mount.py +0 -0
  322. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
  323. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  324. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/src/runloop_api_client/types/tunnel_view.py +0 -0
  325. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/__init__.py +0 -0
  326. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/__init__.py +0 -0
  327. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/__init__.py +0 -0
  328. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  329. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  330. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  331. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  332. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/scenarios/__init__.py +0 -0
  333. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/api_resources/test_secrets.py +0 -0
  334. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/conftest.py +0 -0
  335. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sample_file.txt +0 -0
  336. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/__init__.py +0 -0
  337. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/__init__.py +0 -0
  338. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/conftest.py +0 -0
  339. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/test_core.py +0 -0
  340. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
  341. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/async_devbox/test_streaming.py +0 -0
  342. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/conftest.py +0 -0
  343. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/__init__.py +0 -0
  344. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/conftest.py +0 -0
  345. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/test_core.py +0 -0
  346. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/test_edge_cases.py +0 -0
  347. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/devbox/test_streaming.py +0 -0
  348. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_agent.py +0 -0
  349. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_agent.py +0 -0
  350. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_benchmark.py +0 -0
  351. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_benchmark_run.py +0 -0
  352. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_blueprint.py +0 -0
  353. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_execution.py +0 -0
  354. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_execution_result.py +0 -0
  355. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_gateway_config.py +0 -0
  356. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_network_policy.py +0 -0
  357. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_ops.py +0 -0
  358. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_scenario.py +0 -0
  359. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_scenario_builder.py +0 -0
  360. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_scenario_run.py +0 -0
  361. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_scorer.py +0 -0
  362. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_snapshot.py +0 -0
  363. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_async_storage_object.py +0 -0
  364. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_benchmark.py +0 -0
  365. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_benchmark_run.py +0 -0
  366. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_blueprint.py +0 -0
  367. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_execution.py +0 -0
  368. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_execution_result.py +0 -0
  369. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_gateway_config.py +0 -0
  370. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_helpers.py +0 -0
  371. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_network_policy.py +0 -0
  372. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_ops.py +0 -0
  373. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_scenario.py +0 -0
  374. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_scenario_builder.py +0 -0
  375. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_scenario_run.py +0 -0
  376. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_scorer.py +0 -0
  377. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_snapshot.py +0 -0
  378. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/sdk/test_storage_object.py +0 -0
  379. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/README.md +0 -0
  380. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/__init__.py +0 -0
  381. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/conftest.py +0 -0
  382. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/examples/__init__.py +0 -0
  383. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/examples/test_examples.py +0 -0
  384. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/README.md +0 -0
  385. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/__init__.py +0 -0
  386. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/conftest.py +0 -0
  387. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_agent.py +0 -0
  388. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_agent.py +0 -0
  389. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
  390. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
  391. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_devbox.py +0 -0
  392. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
  393. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
  394. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_scenario.py +0 -0
  395. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
  396. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_sdk.py +0 -0
  397. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_secret.py +0 -0
  398. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
  399. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
  400. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_benchmark.py +0 -0
  401. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_blueprint.py +0 -0
  402. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_devbox.py +0 -0
  403. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_gateway_config.py +0 -0
  404. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_mcp_config.py +0 -0
  405. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_network_policy.py +0 -0
  406. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_scenario.py +0 -0
  407. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_scorer.py +0 -0
  408. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_sdk.py +0 -0
  409. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_secret.py +0 -0
  410. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
  411. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
  412. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/test_blueprints.py +0 -0
  413. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/test_devboxes.py +0 -0
  414. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/test_executions.py +0 -0
  415. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
  416. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/test_snapshots.py +0 -0
  417. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/smoketests/utils.py +0 -0
  418. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_client.py +0 -0
  419. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_command_id.py +0 -0
  420. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_deepcopy.py +0 -0
  421. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_extract_files.py +0 -0
  422. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_files.py +0 -0
  423. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_models.py +0 -0
  424. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_polling.py +0 -0
  425. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_qs.py +0 -0
  426. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_required_args.py +0 -0
  427. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_response.py +0 -0
  428. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_streaming.py +0 -0
  429. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_transform.py +0 -0
  430. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_utils/test_context_loader.py +0 -0
  431. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_utils/test_datetime_parse.py +0 -0
  432. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_utils/test_json.py +0 -0
  433. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_utils/test_proxy.py +0 -0
  434. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/test_utils/test_typing.py +0 -0
  435. {runloop_api_client-1.12.1 → runloop_api_client-1.13.0}/tests/utils.py +0 -0
@@ -1,4 +1,5 @@
1
1
  .prism.log
2
+ .stdy.log
2
3
  _dev
3
4
 
4
5
  __pycache__
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.13.0"
3
+ }
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.13.0 (2026-03-24)
4
+
5
+ Full Changelog: [v1.12.1...v1.13.0](https://github.com/runloopai/api-client-python/compare/v1.12.1...v1.13.0)
6
+
7
+ ### Features
8
+
9
+ * example for using tunnels ([#754](https://github.com/runloopai/api-client-python/issues/754)) ([97bcd70](https://github.com/runloopai/api-client-python/commit/97bcd701c6aac8077b8dea9cd4d0693d524de9b7))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * add AxonEventView schema to OpenAPI spec for SSE subscribe endpoint ([#8274](https://github.com/runloopai/api-client-python/issues/8274)) ([618f1bb](https://github.com/runloopai/api-client-python/commit/618f1bb48ff7757e5285cddd083f49ccbbeeed3c))
15
+ * add name to Axon ([#8277](https://github.com/runloopai/api-client-python/issues/8277)) ([7bdb527](https://github.com/runloopai/api-client-python/commit/7bdb527e9011a68f456c927f138fac22d73b3035))
16
+ * sanitize endpoint path params ([5182d36](https://github.com/runloopai/api-client-python/commit/5182d3666b20f4fe5b245201e0b992705443d024))
17
+ * sanitize endpoint path params ([0993026](https://github.com/runloopai/api-client-python/commit/0993026b7dd67b1f7a9a81036c7fc93ab638112d))
18
+ * **tunnels:** allow tunnel removal ([#8257](https://github.com/runloopai/api-client-python/issues/8257)) ([6cff97e](https://github.com/runloopai/api-client-python/commit/6cff97ee43a2f2c906833e9900841e34d478d176))
19
+
20
+
21
+ ### Chores
22
+
23
+ * **internal:** update gitignore ([96bd6fd](https://github.com/runloopai/api-client-python/commit/96bd6fdc7b767371b21f5753729f01020f9e78ec))
24
+ * remove dead port configuration code, mark deprecated / ignored in the API ([#8195](https://github.com/runloopai/api-client-python/issues/8195)) ([e565324](https://github.com/runloopai/api-client-python/commit/e5653245b65f7afd6210abe1b507ae64151da9b7))
25
+ * **tests:** bump steady to v0.19.4 ([66cb637](https://github.com/runloopai/api-client-python/commit/66cb637779eaea2cacc4b1a06ac3a33f2358b0ee))
26
+ * **tests:** bump steady to v0.19.5 ([601c93a](https://github.com/runloopai/api-client-python/commit/601c93afffb8379770ac895b89235903c8348b00))
27
+ * **tests:** bump steady to v0.19.6 ([95b2ffc](https://github.com/runloopai/api-client-python/commit/95b2ffc5d487f6595ec1dc73b6a34696c309f67d))
28
+
29
+
30
+ ### Refactors
31
+
32
+ * **tests:** switch from prism to steady ([dd8fe60](https://github.com/runloopai/api-client-python/commit/dd8fe60922808bb0f001b49a99988004195d806f))
33
+ * undeprecate total_count from pagination API, remove remaining_count ([#8084](https://github.com/runloopai/api-client-python/issues/8084)) ([4bd524f](https://github.com/runloopai/api-client-python/commit/4bd524fa32e6aad6efeeabd8a5bbef5e3c7ea742))
34
+
3
35
  ## 1.12.1 (2026-03-19)
4
36
 
5
37
  Full Changelog: [v1.12.0...v1.12.1](https://github.com/runloopai/api-client-python/compare/v1.12.0...v1.12.1)
@@ -85,7 +85,7 @@ $ pip install ./path-to-wheel-file.whl
85
85
 
86
86
  ## Running tests
87
87
 
88
- Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
88
+ Most tests require you to [set up a mock server](https://github.com/dgellow/steady) against the OpenAPI spec to run the tests.
89
89
 
90
90
  ```sh
91
91
  $ ./scripts/mock
@@ -10,8 +10,9 @@ 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 Tunnel (HTTP Server Access)](#devbox-tunnel)
13
14
  - [MCP Hub + Claude Code + GitHub](#mcp-github-tools)
14
- - [Secrets with Devbox (Create, Inject, Verify, Delete)](#secrets-with-devbox)
15
+ - [Secrets with Devbox and Agent Gateway](#secrets-with-devbox)
15
16
 
16
17
  <a id="blueprint-with-build-context"></a>
17
18
  ## Blueprint with Build Context
@@ -105,6 +106,35 @@ uv run pytest -m smoketest tests/smoketests/examples/
105
106
 
106
107
  **Source:** [`examples/devbox_snapshot_resume.py`](./examples/devbox_snapshot_resume.py)
107
108
 
109
+ <a id="devbox-tunnel"></a>
110
+ ## Devbox Tunnel (HTTP Server Access)
111
+
112
+ **Use case:** Create a devbox with a tunnel, start an HTTP server, and access the server from the local machine through the tunnel. Uses the async SDK.
113
+
114
+ **Tags:** `devbox`, `tunnel`, `networking`, `http`, `async`
115
+
116
+ ### Workflow
117
+ - Create a devbox with tunnel configuration
118
+ - Start an HTTP server inside the devbox
119
+ - Make an HTTP request from the local machine through the tunnel
120
+ - Validate the response
121
+ - Shutdown the devbox
122
+
123
+ ### Prerequisites
124
+ - `RUNLOOP_API_KEY`
125
+
126
+ ### Run
127
+ ```sh
128
+ uv run python -m examples.devbox_tunnel
129
+ ```
130
+
131
+ ### Test
132
+ ```sh
133
+ uv run pytest -m smoketest tests/smoketests/examples/
134
+ ```
135
+
136
+ **Source:** [`examples/devbox_tunnel.py`](./examples/devbox_tunnel.py)
137
+
108
138
  <a id="mcp-github-tools"></a>
109
139
  ## MCP Hub + Claude Code + GitHub
110
140
 
@@ -138,20 +168,19 @@ uv run pytest -m smoketest tests/smoketests/examples/
138
168
  **Source:** [`examples/mcp_github_tools.py`](./examples/mcp_github_tools.py)
139
169
 
140
170
  <a id="secrets-with-devbox"></a>
141
- ## Secrets with Devbox (Create, Inject, Verify, Delete)
171
+ ## Secrets with Devbox and Agent Gateway
142
172
 
143
- **Use case:** Create a secret, inject it into a devbox as an environment variable, verify access, and clean up.
173
+ **Use case:** Use a normal secret for sensitive app data in the devbox and agent gateway for upstream API credentials that should never be exposed to the agent.
144
174
 
145
- **Tags:** `secrets`, `devbox`, `environment-variables`, `cleanup`
175
+ **Tags:** `secrets`, `devbox`, `agent-gateway`, `credentials`, `environment-variables`, `cleanup`
146
176
 
147
177
  ### Workflow
148
- - Create a secret with a test value
149
- - Create a devbox with the secret mapped to an env var
150
- - Execute a command that reads the secret from the environment
151
- - Verify the value matches
152
- - Update the secret and verify
153
- - List secrets and verify the secret appears
154
- - Shutdown devbox and delete secret
178
+ - Create a secret for application data that should be available inside the devbox
179
+ - Create a separate secret for an upstream API credential
180
+ - Create an agent gateway config for an upstream API
181
+ - Launch a devbox with one secret injected directly and the credential wired through agent gateway
182
+ - Verify the devbox can read MAGIC_NUMBER while the upstream API credential is replaced with gateway values
183
+ - Shutdown the devbox and delete the gateway config and both secrets
155
184
 
156
185
  ### Prerequisites
157
186
  - `RUNLOOP_API_KEY`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 1.12.1
3
+ Version: 1.13.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
@@ -87,6 +87,29 @@ Methods:
87
87
  - <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>
88
88
  - <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>
89
89
 
90
+ # Axons
91
+
92
+ Types:
93
+
94
+ ```python
95
+ from runloop_api_client.types import (
96
+ AxonCreateParams,
97
+ AxonEventView,
98
+ AxonListView,
99
+ AxonView,
100
+ PublishParams,
101
+ PublishResultView,
102
+ )
103
+ ```
104
+
105
+ Methods:
106
+
107
+ - <code title="post /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons.py">create</a>(\*\*<a href="src/runloop_api_client/types/axon_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
108
+ - <code title="get /v1/axons/{id}">client.axons.<a href="./src/runloop_api_client/resources/axons.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/axon_view.py">AxonView</a></code>
109
+ - <code title="get /v1/axons">client.axons.<a href="./src/runloop_api_client/resources/axons.py">list</a>() -> <a href="./src/runloop_api_client/types/axon_list_view.py">AxonListView</a></code>
110
+ - <code title="post /v1/axons/{id}/publish">client.axons.<a href="./src/runloop_api_client/resources/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>
111
+ - <code title="get /v1/axons/{id}/subscribe/sse">client.axons.<a href="./src/runloop_api_client/resources/axons.py">subscribe_sse</a>(id) -> <a href="./src/runloop_api_client/types/axon_event_view.py">AxonEventView</a></code>
112
+
90
113
  # Blueprints
91
114
 
92
115
  Types:
@@ -155,7 +178,7 @@ Methods:
155
178
  - <code title="post /v1/devboxes/{id}/keep_alive">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">keep_alive</a>(id) -> object</code>
156
179
  - <code title="get /v1/devboxes/disk_snapshots">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">list_disk_snapshots</a>(\*\*<a href="src/runloop_api_client/types/devbox_list_disk_snapshots_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">SyncDiskSnapshotsCursorIDPage[DevboxSnapshotView]</a></code>
157
180
  - <code title="post /v1/devboxes/{id}/read_file_contents">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">read_file_contents</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_read_file_contents_params.py">params</a>) -> str</code>
158
- - <code title="post /v1/devboxes/{id}/remove_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">remove_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_remove_tunnel_params.py">params</a>) -> object</code>
181
+ - <code title="post /v1/devboxes/{id}/remove_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">remove_tunnel</a>(id) -> object</code>
159
182
  - <code title="post /v1/devboxes/{id}/resume">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">resume</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
160
183
  - <code title="get /v1/devboxes/{id}/usage">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">retrieve_resource_usage</a>(id) -> <a href="./src/runloop_api_client/types/devbox_resource_usage_view.py">DevboxResourceUsageView</a></code>
161
184
  - <code title="post /v1/devboxes/{id}/shutdown">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">shutdown</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_shutdown_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env -S uv run python
2
+ """
3
+ ---
4
+ title: Devbox Tunnel (HTTP Server Access)
5
+ slug: devbox-tunnel
6
+ use_case: Create a devbox with a tunnel, start an HTTP server, and access the server from the local machine through the tunnel. Uses the async SDK.
7
+ workflow:
8
+ - Create a devbox with tunnel configuration
9
+ - Start an HTTP server inside the devbox
10
+ - Make an HTTP request from the local machine through the tunnel
11
+ - Validate the response
12
+ - Shutdown the devbox
13
+ tags:
14
+ - devbox
15
+ - tunnel
16
+ - networking
17
+ - http
18
+ - async
19
+ prerequisites:
20
+ - RUNLOOP_API_KEY
21
+ run: uv run python -m examples.devbox_tunnel
22
+ test: uv run pytest -m smoketest tests/smoketests/examples/
23
+ ---
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import asyncio
29
+
30
+ import httpx
31
+
32
+ from runloop_api_client import AsyncRunloopSDK
33
+
34
+ from ._harness import run_as_cli, wrap_recipe
35
+ from .example_types import ExampleCheck, RecipeOutput, RecipeContext
36
+
37
+ HTTP_SERVER_PORT = 8080
38
+ SERVER_STARTUP_DELAY_S = 2
39
+
40
+
41
+ async def recipe(ctx: RecipeContext) -> RecipeOutput:
42
+ """Create a devbox with a tunnel, start an HTTP server, and access it from the local machine."""
43
+ cleanup = ctx.cleanup
44
+
45
+ sdk = AsyncRunloopSDK()
46
+
47
+ devbox = await sdk.devbox.create(
48
+ name="devbox-tunnel-example",
49
+ launch_parameters={
50
+ "resource_size_request": "X_SMALL",
51
+ },
52
+ tunnel={"auth_mode": "open"},
53
+ )
54
+ cleanup.add(f"devbox:{devbox.id}", devbox.shutdown)
55
+
56
+ # Start a simple HTTP server inside the devbox using Python's built-in http.server
57
+ # We use exec_async because the server runs indefinitely until stopped
58
+ server_execution = await devbox.cmd.exec_async(f"python3 -m http.server {HTTP_SERVER_PORT} --directory /tmp")
59
+
60
+ # Give the server a moment to start
61
+ await asyncio.sleep(SERVER_STARTUP_DELAY_S)
62
+
63
+ # The tunnel was created with the devbox. For authenticated tunnels, set
64
+ # tunnel={"auth_mode": "authenticated"} on create and include the auth_token
65
+ # in your requests via the Authorization header: `Authorization: Bearer {tunnel.auth_token}`
66
+ tunnel = await devbox.get_tunnel()
67
+ if tunnel is None:
68
+ raise RuntimeError("Failed to create tunnel at devbox launch time")
69
+
70
+ # Get the tunnel URL for the server port
71
+ tunnel_url = await devbox.get_tunnel_url(HTTP_SERVER_PORT)
72
+ if tunnel_url is None:
73
+ raise RuntimeError("Failed to get tunnel URL after creating tunnel")
74
+
75
+ # Make an HTTP request from the LOCAL MACHINE through the tunnel to the devbox
76
+ # This demonstrates that the tunnel allows external access to the devbox service
77
+ async with httpx.AsyncClient() as client:
78
+ response = await client.get(tunnel_url)
79
+ response_text = response.text
80
+
81
+ # Stop the HTTP server
82
+ await server_execution.kill()
83
+
84
+ return RecipeOutput(
85
+ resources_created=[f"devbox:{devbox.id}"],
86
+ checks=[
87
+ ExampleCheck(
88
+ name="tunnel was created successfully",
89
+ passed=bool(tunnel.tunnel_key),
90
+ details=f"tunnel_key={tunnel.tunnel_key}",
91
+ ),
92
+ ExampleCheck(
93
+ name="tunnel URL was constructed correctly",
94
+ passed=bool(
95
+ tunnel.tunnel_key and tunnel.tunnel_key in tunnel_url and str(HTTP_SERVER_PORT) in tunnel_url
96
+ ),
97
+ details=tunnel_url,
98
+ ),
99
+ ExampleCheck(
100
+ name="HTTP request through tunnel succeeded",
101
+ passed=response.is_success,
102
+ details=f"status={response.status_code}",
103
+ ),
104
+ ExampleCheck(
105
+ name="response contains directory listing",
106
+ passed="Directory listing" in response_text,
107
+ details=response_text[:200],
108
+ ),
109
+ ],
110
+ )
111
+
112
+
113
+ run_devbox_tunnel_example = wrap_recipe(recipe)
114
+
115
+
116
+ if __name__ == "__main__":
117
+ run_as_cli(run_devbox_tunnel_example)
@@ -7,6 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  from typing import Any, Callable, cast
9
9
 
10
+ from .devbox_tunnel import run_devbox_tunnel_example
10
11
  from .example_types import ExampleResult
11
12
  from .mcp_github_tools import run_mcp_github_tools_example
12
13
  from .secrets_with_devbox import run_secrets_with_devbox_example
@@ -38,6 +39,13 @@ example_registry: list[ExampleRegistryEntry] = [
38
39
  "required_env": ["RUNLOOP_API_KEY"],
39
40
  "run": run_devbox_snapshot_resume_example,
40
41
  },
42
+ {
43
+ "slug": "devbox-tunnel",
44
+ "title": "Devbox Tunnel (HTTP Server Access)",
45
+ "file_name": "devbox_tunnel.py",
46
+ "required_env": ["RUNLOOP_API_KEY"],
47
+ "run": run_devbox_tunnel_example,
48
+ },
41
49
  {
42
50
  "slug": "mcp-github-tools",
43
51
  "title": "MCP Hub + Claude Code + GitHub",
@@ -47,7 +55,7 @@ example_registry: list[ExampleRegistryEntry] = [
47
55
  },
48
56
  {
49
57
  "slug": "secrets-with-devbox",
50
- "title": "Secrets with Devbox (Create, Inject, Verify, Delete)",
58
+ "title": "Secrets with Devbox and Agent Gateway",
51
59
  "file_name": "secrets_with_devbox.py",
52
60
  "required_env": ["RUNLOOP_API_KEY"],
53
61
  "run": run_secrets_with_devbox_example,
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env -S uv run python
2
+ """
3
+ ---
4
+ title: Secrets with Devbox and Agent Gateway
5
+ slug: secrets-with-devbox
6
+ use_case: Use a normal secret for sensitive app data in the devbox and agent gateway for upstream API credentials that should never be exposed to the agent.
7
+ workflow:
8
+ - Create a secret for application data that should be available inside the devbox
9
+ - Create a separate secret for an upstream API credential
10
+ - Create an agent gateway config for an upstream API
11
+ - Launch a devbox with one secret injected directly and the credential wired through agent gateway
12
+ - Verify the devbox can read MAGIC_NUMBER while the upstream API credential is replaced with gateway values
13
+ - Shutdown the devbox and delete the gateway config and both secrets
14
+ tags:
15
+ - secrets
16
+ - devbox
17
+ - agent-gateway
18
+ - credentials
19
+ - environment-variables
20
+ - cleanup
21
+ prerequisites:
22
+ - RUNLOOP_API_KEY
23
+ run: uv run python -m examples.secrets_with_devbox
24
+ test: uv run pytest -m smoketest tests/smoketests/examples/
25
+ ---
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from runloop_api_client import RunloopSDK
31
+
32
+ from ._harness import run_as_cli, unique_name, wrap_recipe
33
+ from .example_types import ExampleCheck, RecipeOutput, RecipeContext
34
+
35
+ # Note: do NOT hardcode secret values in your code!
36
+ # This is example code only; use environment variables instead!
37
+ _EXAMPLE_GATEWAY_ENDPOINT = "https://api.example.com"
38
+ _UPSTREAM_CREDENTIAL_VALUE = "example-upstream-api-key"
39
+ _MAGIC_NUMBER_VALUE = "42"
40
+
41
+
42
+ def recipe(ctx: RecipeContext) -> RecipeOutput:
43
+ """Demonstrate direct secret injection for app data and agent gateway protection for upstream credentials."""
44
+ cleanup = ctx.cleanup
45
+
46
+ sdk = RunloopSDK()
47
+ resources_created: list[str] = []
48
+ checks: list[ExampleCheck] = []
49
+
50
+ magic_number_name = unique_name("magic-number-secret")
51
+ upstream_credential_name = unique_name("agent-gateway-secret")
52
+
53
+ magic_number_secret = sdk.secret.create(name=magic_number_name, value=_MAGIC_NUMBER_VALUE)
54
+ resources_created.append(f"secret:{magic_number_name}")
55
+ cleanup.add(f"secret:{magic_number_name}", magic_number_secret.delete)
56
+
57
+ magic_number_info = magic_number_secret.get_info()
58
+ checks.append(
59
+ ExampleCheck(
60
+ name="magic number secret created successfully",
61
+ passed=(magic_number_secret.name == magic_number_name and magic_number_info.id.startswith("sec_")),
62
+ details=f"name={magic_number_secret.name}, id={magic_number_info.id}",
63
+ )
64
+ )
65
+
66
+ upstream_credential_secret = sdk.secret.create(
67
+ name=upstream_credential_name,
68
+ value=_UPSTREAM_CREDENTIAL_VALUE,
69
+ )
70
+ resources_created.append(f"secret:{upstream_credential_name}")
71
+ cleanup.add(f"secret:{upstream_credential_name}", upstream_credential_secret.delete)
72
+
73
+ upstream_credential_info = upstream_credential_secret.get_info()
74
+ checks.append(
75
+ ExampleCheck(
76
+ name="upstream credential secret created successfully",
77
+ passed=(
78
+ upstream_credential_secret.name == upstream_credential_name
79
+ and upstream_credential_info.id.startswith("sec_")
80
+ ),
81
+ details=(f"name={upstream_credential_secret.name}, id={upstream_credential_info.id}"),
82
+ )
83
+ )
84
+
85
+ # Use direct secret injection when code inside the devbox legitimately needs
86
+ # the secret value at runtime. Use agent gateway for upstream credentials
87
+ # that should never be exposed to the agent.
88
+ gateway_config = sdk.gateway_config.create(
89
+ name=unique_name("agent-gateway-config"),
90
+ endpoint=_EXAMPLE_GATEWAY_ENDPOINT,
91
+ auth_mechanism={"type": "bearer"},
92
+ description="Example gateway that keeps upstream credentials off the devbox",
93
+ )
94
+ resources_created.append(f"gateway_config:{gateway_config.id}")
95
+ cleanup.add(f"gateway_config:{gateway_config.id}", gateway_config.delete)
96
+
97
+ gateway_info = gateway_config.get_info()
98
+ checks.append(
99
+ ExampleCheck(
100
+ name="gateway config created successfully",
101
+ passed=(gateway_info.id.startswith("gwc_") and gateway_info.endpoint == _EXAMPLE_GATEWAY_ENDPOINT),
102
+ details=f"id={gateway_info.id}, endpoint={gateway_info.endpoint}",
103
+ )
104
+ )
105
+
106
+ devbox = sdk.devbox.create(
107
+ name=unique_name("agent-gateway-devbox"),
108
+ secrets={
109
+ "MAGIC_NUMBER": magic_number_secret.name,
110
+ },
111
+ gateways={
112
+ "MY_API": {
113
+ "gateway": gateway_config.id,
114
+ "secret": upstream_credential_secret.name,
115
+ }
116
+ },
117
+ launch_parameters={
118
+ "resource_size_request": "X_SMALL",
119
+ "keep_alive_time_seconds": 60 * 5,
120
+ },
121
+ )
122
+ resources_created.append(f"devbox:{devbox.id}")
123
+ cleanup.add(f"devbox:{devbox.id}", devbox.shutdown)
124
+
125
+ devbox_info = devbox.get_info()
126
+ checks.append(
127
+ ExampleCheck(
128
+ name="devbox records gateway wiring",
129
+ passed=(
130
+ devbox_info.gateway_specs is not None
131
+ and devbox_info.gateway_specs.get("MY_API") is not None
132
+ and devbox_info.gateway_specs["MY_API"].gateway_config_id == gateway_config.id
133
+ ),
134
+ details=(
135
+ f"gateway_config_id={devbox_info.gateway_specs['MY_API'].gateway_config_id}"
136
+ if devbox_info.gateway_specs is not None and devbox_info.gateway_specs.get("MY_API") is not None
137
+ else "gateway spec missing"
138
+ ),
139
+ )
140
+ )
141
+
142
+ magic_number_result = devbox.cmd.exec("echo $MAGIC_NUMBER")
143
+ magic_number = magic_number_result.stdout().strip()
144
+ checks.append(
145
+ ExampleCheck(
146
+ name="devbox receives plain secret when app needs the value",
147
+ passed=(magic_number_result.exit_code == 0 and magic_number == _MAGIC_NUMBER_VALUE),
148
+ details=(f"exit_code={magic_number_result.exit_code}, MAGIC_NUMBER={magic_number}"),
149
+ )
150
+ )
151
+
152
+ url_result = devbox.cmd.exec("echo $MY_API_URL")
153
+ gateway_url = url_result.stdout().strip()
154
+ checks.append(
155
+ ExampleCheck(
156
+ name="devbox receives gateway URL",
157
+ passed=url_result.exit_code == 0 and gateway_url.startswith("http"),
158
+ details=f"exit_code={url_result.exit_code}, url={gateway_url}",
159
+ )
160
+ )
161
+
162
+ token_result = devbox.cmd.exec("echo $MY_API")
163
+ gateway_token = token_result.stdout().strip()
164
+ checks.append(
165
+ ExampleCheck(
166
+ name="devbox receives gateway token instead of raw secret",
167
+ passed=(
168
+ token_result.exit_code == 0
169
+ and gateway_token.startswith("gws_")
170
+ and gateway_token != _UPSTREAM_CREDENTIAL_VALUE
171
+ ),
172
+ details=(f"exit_code={token_result.exit_code}, token_prefix={gateway_token[:4] or 'missing'}"),
173
+ )
174
+ )
175
+
176
+ return RecipeOutput(resources_created=resources_created, checks=checks)
177
+
178
+
179
+ run_secrets_with_devbox_example = wrap_recipe(recipe)
180
+
181
+
182
+ if __name__ == "__main__":
183
+ run_as_cli(run_secrets_with_devbox_example)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "1.12.1"
3
+ version = "1.13.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -32,6 +32,7 @@ from ._base_client import (
32
32
 
33
33
  if TYPE_CHECKING:
34
34
  from .resources import (
35
+ axons,
35
36
  agents,
36
37
  objects,
37
38
  secrets,
@@ -46,6 +47,7 @@ if TYPE_CHECKING:
46
47
  gateway_configs,
47
48
  network_policies,
48
49
  )
50
+ from .resources.axons import AxonsResource, AsyncAxonsResource
49
51
  from .resources.agents import AgentsResource, AsyncAgentsResource
50
52
  from .resources.objects import ObjectsResource, AsyncObjectsResource
51
53
  from .resources.secrets import SecretsResource, AsyncSecretsResource
@@ -144,6 +146,12 @@ class Runloop(SyncAPIClient):
144
146
 
145
147
  return AgentsResource(self)
146
148
 
149
+ @cached_property
150
+ def axons(self) -> AxonsResource:
151
+ from .resources.axons import AxonsResource
152
+
153
+ return AxonsResource(self)
154
+
147
155
  @cached_property
148
156
  def blueprints(self) -> BlueprintsResource:
149
157
  from .resources.blueprints import BlueprintsResource
@@ -392,6 +400,12 @@ class AsyncRunloop(AsyncAPIClient):
392
400
 
393
401
  return AsyncAgentsResource(self)
394
402
 
403
+ @cached_property
404
+ def axons(self) -> AsyncAxonsResource:
405
+ from .resources.axons import AsyncAxonsResource
406
+
407
+ return AsyncAxonsResource(self)
408
+
395
409
  @cached_property
396
410
  def blueprints(self) -> AsyncBlueprintsResource:
397
411
  from .resources.blueprints import AsyncBlueprintsResource
@@ -589,6 +603,12 @@ class RunloopWithRawResponse:
589
603
 
590
604
  return AgentsResourceWithRawResponse(self._client.agents)
591
605
 
606
+ @cached_property
607
+ def axons(self) -> axons.AxonsResourceWithRawResponse:
608
+ from .resources.axons import AxonsResourceWithRawResponse
609
+
610
+ return AxonsResourceWithRawResponse(self._client.axons)
611
+
592
612
  @cached_property
593
613
  def blueprints(self) -> blueprints.BlueprintsResourceWithRawResponse:
594
614
  from .resources.blueprints import BlueprintsResourceWithRawResponse
@@ -674,6 +694,12 @@ class AsyncRunloopWithRawResponse:
674
694
 
675
695
  return AsyncAgentsResourceWithRawResponse(self._client.agents)
676
696
 
697
+ @cached_property
698
+ def axons(self) -> axons.AsyncAxonsResourceWithRawResponse:
699
+ from .resources.axons import AsyncAxonsResourceWithRawResponse
700
+
701
+ return AsyncAxonsResourceWithRawResponse(self._client.axons)
702
+
677
703
  @cached_property
678
704
  def blueprints(self) -> blueprints.AsyncBlueprintsResourceWithRawResponse:
679
705
  from .resources.blueprints import AsyncBlueprintsResourceWithRawResponse
@@ -759,6 +785,12 @@ class RunloopWithStreamedResponse:
759
785
 
760
786
  return AgentsResourceWithStreamingResponse(self._client.agents)
761
787
 
788
+ @cached_property
789
+ def axons(self) -> axons.AxonsResourceWithStreamingResponse:
790
+ from .resources.axons import AxonsResourceWithStreamingResponse
791
+
792
+ return AxonsResourceWithStreamingResponse(self._client.axons)
793
+
762
794
  @cached_property
763
795
  def blueprints(self) -> blueprints.BlueprintsResourceWithStreamingResponse:
764
796
  from .resources.blueprints import BlueprintsResourceWithStreamingResponse
@@ -844,6 +876,12 @@ class AsyncRunloopWithStreamedResponse:
844
876
 
845
877
  return AsyncAgentsResourceWithStreamingResponse(self._client.agents)
846
878
 
879
+ @cached_property
880
+ def axons(self) -> axons.AsyncAxonsResourceWithStreamingResponse:
881
+ from .resources.axons import AsyncAxonsResourceWithStreamingResponse
882
+
883
+ return AsyncAxonsResourceWithStreamingResponse(self._client.axons)
884
+
847
885
  @cached_property
848
886
  def blueprints(self) -> blueprints.AsyncBlueprintsResourceWithStreamingResponse:
849
887
  from .resources.blueprints import AsyncBlueprintsResourceWithStreamingResponse
@@ -1,4 +1,5 @@
1
1
  # isort: skip_file
2
+ from ._path import path_template as path_template
2
3
  from ._sync import asyncify as asyncify
3
4
  from ._proxy import LazyProxy as LazyProxy
4
5
  from ._utils import (