runloop-api-client 0.47.1__tar.gz → 0.48.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. runloop_api_client-0.48.1/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/CHANGELOG.md +18 -0
  3. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/PKG-INFO +6 -4
  4. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/README.md +4 -3
  5. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/pyproject.toml +5 -1
  6. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/requirements-dev.lock +2 -2
  7. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/requirements.lock +2 -2
  8. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_models.py +8 -5
  9. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_version.py +1 -1
  10. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/polling.py +17 -18
  11. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/devboxes.py +3 -3
  12. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/executions.py +57 -24
  13. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_executions.py +339 -0
  14. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_lsp.py +8 -0
  15. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_devboxes.py +285 -0
  16. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/conftest.py +29 -0
  17. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_models.py +45 -0
  18. runloop_api_client-0.48.1/tests/test_polling.py +262 -0
  19. runloop_api_client-0.48.1/uv.lock +1500 -0
  20. runloop_api_client-0.47.1/.release-please-manifest.json +0 -3
  21. runloop_api_client-0.47.1/uv.lock +0 -295
  22. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/.gitignore +0 -0
  23. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/CONTRIBUTING.md +0 -0
  24. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/LICENSE +0 -0
  25. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/SECURITY.md +0 -0
  26. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/api.md +0 -0
  27. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/bin/check-release-environment +0 -0
  28. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/bin/publish-pypi +0 -0
  29. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/examples/.keep +0 -0
  30. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/mypy.ini +0 -0
  31. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/noxfile.py +0 -0
  32. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/release-please-config.json +0 -0
  33. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop/lib/.keep +0 -0
  34. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/__init__.py +0 -0
  35. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_base_client.py +0 -0
  36. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_client.py +0 -0
  37. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_compat.py +0 -0
  38. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_constants.py +0 -0
  39. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_exceptions.py +0 -0
  40. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_files.py +0 -0
  41. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_qs.py +0 -0
  42. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_resource.py +0 -0
  43. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_response.py +0 -0
  44. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_streaming.py +0 -0
  45. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_types.py +0 -0
  46. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/__init__.py +0 -0
  47. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_logs.py +0 -0
  48. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
  49. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
  50. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  51. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_streams.py +0 -0
  52. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_sync.py +0 -0
  53. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_transform.py +0 -0
  54. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_typing.py +0 -0
  55. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_utils.py +0 -0
  56. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/.keep +0 -0
  57. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/polling_async.py +0 -0
  58. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/pagination.py +0 -0
  59. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/py.typed +0 -0
  60. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/__init__.py +0 -0
  61. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  62. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  63. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  64. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/blueprints.py +0 -0
  65. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  66. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  67. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  68. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  69. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  70. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  71. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/repositories.py +0 -0
  72. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  73. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  74. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  75. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  76. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/secrets.py +0 -0
  77. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/__init__.py +0 -0
  78. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  79. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  80. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  81. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  82. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  83. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  84. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  85. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  86. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
  87. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  88. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  89. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
  90. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  91. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  92. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  93. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  94. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  95. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  96. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  97. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  98. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
  99. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  100. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  101. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  102. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  103. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  104. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  105. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  106. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  107. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  108. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  109. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  110. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  111. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  112. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  113. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  114. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  115. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  116. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  117. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  118. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  119. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  120. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_view.py +0 -0
  121. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  122. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  123. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  124. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  125. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  126. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  127. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  128. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  129. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  130. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  131. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  132. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  133. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  134. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  135. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  136. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  137. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  138. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  139. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  140. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  141. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  142. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  143. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  144. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  145. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  146. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  147. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  148. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  149. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  150. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  151. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  152. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  153. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  154. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  155. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  156. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  157. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  158. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  159. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  160. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  161. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  162. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  163. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  164. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  165. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  166. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  167. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  168. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  169. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  170. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  171. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  172. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  173. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  174. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  175. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  176. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  177. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  178. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  179. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  180. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  181. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  182. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  183. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  184. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  185. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  186. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  187. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  188. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  189. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  190. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  191. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  192. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  193. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/position.py +0 -0
  194. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  195. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/range.py +0 -0
  196. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  197. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  198. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  199. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  200. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  201. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  202. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  203. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  204. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  205. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  206. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  207. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  208. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  209. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context.py +0 -0
  210. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context_param.py +0 -0
  211. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  212. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  213. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  214. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_create_params.py +0 -0
  215. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  216. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  217. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_list_params.py +0 -0
  218. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  219. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  220. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  221. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  222. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
  223. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  224. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  225. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  226. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  227. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  228. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  229. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  230. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_view.py +0 -0
  231. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  232. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  233. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  234. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  235. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  236. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  237. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  238. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  239. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  240. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  241. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  242. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
  243. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  244. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  245. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  246. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function.py +0 -0
  247. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  248. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  249. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
  250. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
  251. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
  252. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_view.py +0 -0
  253. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
  254. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  255. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  256. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  257. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  258. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  259. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  260. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  261. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/__init__.py +0 -0
  262. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/__init__.py +0 -0
  263. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/benchmarks/__init__.py +0 -0
  264. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/benchmarks/test_runs.py +0 -0
  265. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/__init__.py +0 -0
  266. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_browsers.py +0 -0
  267. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_computers.py +0 -0
  268. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  269. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_logs.py +0 -0
  270. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/__init__.py +0 -0
  271. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/test_runs.py +0 -0
  272. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
  273. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_benchmarks.py +0 -0
  274. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_blueprints.py +0 -0
  275. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_repositories.py +0 -0
  276. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_scenarios.py +0 -0
  277. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_secrets.py +0 -0
  278. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/sample_file.txt +0 -0
  279. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_client.py +0 -0
  280. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_deepcopy.py +0 -0
  281. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_extract_files.py +0 -0
  282. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_files.py +0 -0
  283. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_qs.py +0 -0
  284. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_required_args.py +0 -0
  285. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_response.py +0 -0
  286. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_streaming.py +0 -0
  287. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_transform.py +0 -0
  288. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_utils/test_proxy.py +0 -0
  289. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_utils/test_typing.py +0 -0
  290. {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.48.1"
3
+ }
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.48.1 (2025-07-10)
4
+
5
+ Full Changelog: [v0.48.0...v0.48.1](https://github.com/runloopai/api-client-python/compare/v0.48.0...v0.48.1)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **parsing:** correctly handle nested discriminated unions ([3312be9](https://github.com/runloopai/api-client-python/commit/3312be9e751dd58396884644be4ceabbaba11014))
10
+
11
+
12
+ ### Chores
13
+
14
+ * **internal:** bump pinned h11 dep ([80ff87c](https://github.com/runloopai/api-client-python/commit/80ff87cde91eedd2169bd3b3e563545291928cbd))
15
+ * **package:** mark python 3.13 as supported ([7043864](https://github.com/runloopai/api-client-python/commit/70438649e40206746ea1543fc6c29b3c9fb47bd3))
16
+
17
+ ## 0.48.0 (2025-07-09)
18
+
19
+ Full Changelog: [v0.47.1...v0.48.0](https://github.com/runloopai/api-client-python/compare/v0.47.1...v0.48.0)
20
+
3
21
  ## 0.47.1 (2025-07-08)
4
22
 
5
23
  Full Changelog: [v0.47.0...v0.47.1](https://github.com/runloopai/api-client-python/compare/v0.47.0...v0.47.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.47.1
3
+ Version: 0.48.1
4
4
  Summary: The official Python library for the runloop API
5
5
  Project-URL: Homepage, https://github.com/runloopai/api-client-python
6
6
  Project-URL: Repository, https://github.com/runloopai/api-client-python
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
21
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
23
  Classifier: Typing :: Typed
23
24
  Requires-Python: >=3.8
@@ -281,7 +282,8 @@ Error codes are as follows:
281
282
 
282
283
  Certain errors are automatically retried 5 times by default, with a short exponential backoff.
283
284
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
284
- 429 Rate Limit, and >=500 Internal errors are all retried by default.
285
+ 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
286
+ 429 errors will be retried.
285
287
 
286
288
  You can use the `max_retries` option to configure or disable retry settings:
287
289
 
@@ -290,12 +292,12 @@ from runloop_api_client import Runloop
290
292
 
291
293
  # Configure the default for all requests:
292
294
  client = Runloop(
293
- # default is 2
295
+ # default is 5
294
296
  max_retries=0,
295
297
  )
296
298
 
297
299
  # Or, configure per-request:
298
- client.with_options(max_retries=5).devboxes.create()
300
+ client.with_options(max_retries=10).devboxes.create()
299
301
  ```
300
302
 
301
303
  ### Timeouts
@@ -247,7 +247,8 @@ Error codes are as follows:
247
247
 
248
248
  Certain errors are automatically retried 5 times by default, with a short exponential backoff.
249
249
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
250
- 429 Rate Limit, and >=500 Internal errors are all retried by default.
250
+ 429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
251
+ 429 errors will be retried.
251
252
 
252
253
  You can use the `max_retries` option to configure or disable retry settings:
253
254
 
@@ -256,12 +257,12 @@ from runloop_api_client import Runloop
256
257
 
257
258
  # Configure the default for all requests:
258
259
  client = Runloop(
259
- # default is 2
260
+ # default is 5
260
261
  max_retries=0,
261
262
  )
262
263
 
263
264
  # Or, configure per-request:
264
- client.with_options(max_retries=5).devboxes.create()
265
+ client.with_options(max_retries=10).devboxes.create()
265
266
  ```
266
267
 
267
268
  ### Timeouts
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.47.1"
3
+ version = "0.48.1"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -24,6 +24,7 @@ classifiers = [
24
24
  "Programming Language :: Python :: 3.10",
25
25
  "Programming Language :: Python :: 3.11",
26
26
  "Programming Language :: Python :: 3.12",
27
+ "Programming Language :: Python :: 3.13",
27
28
  "Operating System :: OS Independent",
28
29
  "Operating System :: POSIX",
29
30
  "Operating System :: MacOS",
@@ -135,6 +136,9 @@ asyncio_default_fixture_loop_scope = "session"
135
136
  filterwarnings = [
136
137
  "error"
137
138
  ]
139
+ markers = [
140
+ "skip_if_strict: skip test if using strict validation (for prism mock server issues)"
141
+ ]
138
142
 
139
143
  [tool.pyright]
140
144
  # this enables practically every flag given by pyright.
@@ -48,9 +48,9 @@ filelock==3.12.4
48
48
  frozenlist==1.6.2
49
49
  # via aiohttp
50
50
  # via aiosignal
51
- h11==0.14.0
51
+ h11==0.16.0
52
52
  # via httpcore
53
- httpcore==1.0.2
53
+ httpcore==1.0.9
54
54
  # via httpx
55
55
  httpx==0.28.1
56
56
  # via httpx-aiohttp
@@ -36,9 +36,9 @@ exceptiongroup==1.2.2
36
36
  frozenlist==1.6.2
37
37
  # via aiohttp
38
38
  # via aiosignal
39
- h11==0.14.0
39
+ h11==0.16.0
40
40
  # via httpcore
41
- httpcore==1.0.2
41
+ httpcore==1.0.9
42
42
  # via httpx
43
43
  httpx==0.28.1
44
44
  # via httpx-aiohttp
@@ -2,9 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import inspect
5
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast
5
+ from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
6
  from datetime import date, datetime
7
7
  from typing_extensions import (
8
+ List,
8
9
  Unpack,
9
10
  Literal,
10
11
  ClassVar,
@@ -366,7 +367,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
366
367
  if type_ is None:
367
368
  raise RuntimeError(f"Unexpected field type is None for {key}")
368
369
 
369
- return construct_type(value=value, type_=type_)
370
+ return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
370
371
 
371
372
 
372
373
  def is_basemodel(type_: type) -> bool:
@@ -420,7 +421,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T:
420
421
  return cast(_T, construct_type(value=value, type_=type_))
421
422
 
422
423
 
423
- def construct_type(*, value: object, type_: object) -> object:
424
+ def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object:
424
425
  """Loose coercion to the expected type with construction of nested values.
425
426
 
426
427
  If the given value does not match the expected type then it is returned as-is.
@@ -438,8 +439,10 @@ def construct_type(*, value: object, type_: object) -> object:
438
439
  type_ = type_.__value__ # type: ignore[unreachable]
439
440
 
440
441
  # unwrap `Annotated[T, ...]` -> `T`
441
- if is_annotated_type(type_):
442
- meta: tuple[Any, ...] = get_args(type_)[1:]
442
+ if metadata is not None:
443
+ meta: tuple[Any, ...] = tuple(metadata)
444
+ elif is_annotated_type(type_):
445
+ meta = get_args(type_)[1:]
443
446
  type_ = extract_type_arg(type_, 0)
444
447
  else:
445
448
  meta = tuple()
@@ -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__ = "0.47.1" # x-release-please-version
4
+ __version__ = "0.48.1" # x-release-please-version
@@ -2,21 +2,26 @@ import time
2
2
  from typing import Any, TypeVar, Callable, Optional
3
3
  from dataclasses import dataclass
4
4
 
5
- T = TypeVar('T')
5
+ T = TypeVar("T")
6
+
6
7
 
7
8
  @dataclass
8
9
  class PollingConfig:
9
10
  """Configuration for polling behavior"""
11
+
10
12
  interval_seconds: float = 1.0
11
13
  max_attempts: int = 120
12
14
  timeout_seconds: Optional[float] = None
13
15
 
16
+
14
17
  class PollingTimeout(Exception):
15
18
  """Raised when polling exceeds max attempts or timeout"""
19
+
16
20
  def __init__(self, message: str, last_value: Any):
17
21
  self.last_value = last_value
18
22
  super().__init__(f"{message}. Last retrieved value: {last_value}")
19
23
 
24
+
20
25
  def poll_until(
21
26
  retriever: Callable[[], T],
22
27
  is_terminal: Callable[[T], bool],
@@ -25,27 +30,27 @@ def poll_until(
25
30
  ) -> T:
26
31
  """
27
32
  Poll until a condition is met or timeout/max attempts are reached.
28
-
33
+
29
34
  Args:
30
35
  retriever: Callable that returns the object to check
31
36
  is_terminal: Callable that returns True when polling should stop
32
37
  config: Optional polling configuration
33
38
  on_error: Optional error handler that can return a value to continue polling
34
39
  or re-raise the exception to stop polling
35
-
40
+
36
41
  Returns:
37
42
  The final state of the polled object
38
-
43
+
39
44
  Raises:
40
45
  PollingTimeout: When max attempts or timeout is reached
41
46
  """
42
47
  if config is None:
43
48
  config = PollingConfig()
44
-
49
+
45
50
  attempts = 0
46
51
  start_time = time.time()
47
52
  last_result = None
48
-
53
+
49
54
  while True:
50
55
  try:
51
56
  last_result = retriever()
@@ -54,23 +59,17 @@ def poll_until(
54
59
  last_result = on_error(e)
55
60
  else:
56
61
  raise
57
-
62
+
58
63
  if is_terminal(last_result):
59
64
  return last_result
60
-
65
+
61
66
  attempts += 1
62
67
  if attempts >= config.max_attempts:
63
- raise PollingTimeout(
64
- f"Exceeded maximum attempts ({config.max_attempts})",
65
- last_result
66
- )
67
-
68
+ raise PollingTimeout(f"Exceeded maximum attempts ({config.max_attempts})", last_result)
69
+
68
70
  if config.timeout_seconds is not None:
69
71
  elapsed = time.time() - start_time
70
72
  if elapsed >= config.timeout_seconds:
71
- raise PollingTimeout(
72
- f"Exceeded timeout of {config.timeout_seconds} seconds",
73
- last_result
74
- )
75
-
73
+ raise PollingTimeout(f"Exceeded timeout of {config.timeout_seconds} seconds", last_result)
74
+
76
75
  time.sleep(config.interval_seconds)
@@ -88,7 +88,7 @@ from ...pagination import (
88
88
  SyncDiskSnapshotsCursorIDPage,
89
89
  AsyncDiskSnapshotsCursorIDPage,
90
90
  )
91
- from ..._exceptions import RunloopError
91
+ from ..._exceptions import RunloopError, APIStatusError
92
92
  from ...lib.polling import PollingConfig, poll_until
93
93
  from ..._base_client import AsyncPaginator, make_request_options
94
94
  from .disk_snapshots import (
@@ -400,7 +400,7 @@ class DevboxesResource(SyncAPIResource):
400
400
 
401
401
  def handle_timeout_error(error: Exception) -> DevboxView:
402
402
  # Handle 408 timeout errors by returning current devbox state to continue polling
403
- if isinstance(error, httpx.HTTPStatusError) and error.response.status_code == 408:
403
+ if isinstance(error, APIStatusError) and error.response.status_code == 408:
404
404
  # Return a placeholder result to continue polling
405
405
  return DevboxView(
406
406
  id=id,
@@ -1710,7 +1710,7 @@ class AsyncDevboxesResource(AsyncAPIResource):
1710
1710
  ),
1711
1711
  cast_to=DevboxView,
1712
1712
  )
1713
- except httpx.HTTPStatusError as error:
1713
+ except APIStatusError as error:
1714
1714
  if error.response.status_code == 408:
1715
1715
  # Handle 408 timeout errors by returning a placeholder result to continue polling
1716
1716
  return DevboxView(
@@ -17,6 +17,7 @@ from ..._response import (
17
17
  async_to_streamed_response_wrapper,
18
18
  )
19
19
  from ..._constants import DEFAULT_TIMEOUT
20
+ from ..._exceptions import APIStatusError
20
21
  from ...lib.polling import PollingConfig, poll_until
21
22
  from ..._base_client import make_request_options
22
23
  from ...types.devboxes import execution_retrieve_params, execution_execute_sync_params, execution_execute_async_params
@@ -105,7 +106,7 @@ class ExecutionsResource(SyncAPIResource):
105
106
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
106
107
  ) -> DevboxAsyncExecutionDetailView:
107
108
  """Wait for an execution to complete.
108
-
109
+
109
110
  Args:
110
111
  execution_id: The ID of the execution to wait for
111
112
  id: The ID of the devbox
@@ -121,20 +122,37 @@ class ExecutionsResource(SyncAPIResource):
121
122
  Raises:
122
123
  PollingTimeout: If polling times out before execution completes
123
124
  """
124
- def retrieve_execution() -> DevboxAsyncExecutionDetailView:
125
- return self.retrieve(
126
- execution_id,
127
- devbox_id=devbox_id,
128
- extra_headers=extra_headers,
129
- extra_query=extra_query,
130
- extra_body=extra_body,
131
- timeout=timeout
125
+
126
+ def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
127
+ # This wait_for_status endpoint polls the execution status for 60 seconds until it reaches either completed.
128
+ return self._post(
129
+ f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
130
+ body={"statuses": ["completed"]},
131
+ options=make_request_options(
132
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
133
+ ),
134
+ cast_to=DevboxAsyncExecutionDetailView,
132
135
  )
133
136
 
137
+ def handle_timeout_error(error: Exception) -> DevboxAsyncExecutionDetailView:
138
+ # Handle 408 timeout errors by returning current execution state to continue polling
139
+ if isinstance(error, APIStatusError) and error.response.status_code == 408:
140
+ # Return a placeholder result to continue polling
141
+ return DevboxAsyncExecutionDetailView(
142
+ devbox_id=devbox_id,
143
+ execution_id=execution_id,
144
+ status="queued",
145
+ stdout="",
146
+ stderr="",
147
+ )
148
+ else:
149
+ # Re-raise other errors to stop polling
150
+ raise error
151
+
134
152
  def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
135
- return execution.status == 'completed'
153
+ return execution.status == "completed"
136
154
 
137
- return poll_until(retrieve_execution, is_done, config)
155
+ return poll_until(wait_for_execution_status, is_done, config, handle_timeout_error)
138
156
 
139
157
  def execute_async(
140
158
  self,
@@ -369,7 +387,7 @@ class AsyncExecutionsResource(AsyncAPIResource):
369
387
 
370
388
  async def await_completed(
371
389
  self,
372
- execution_id: str,
390
+ execution_id: str,
373
391
  *,
374
392
  devbox_id: str,
375
393
  polling_config: PollingConfig | None = None,
@@ -381,7 +399,7 @@ class AsyncExecutionsResource(AsyncAPIResource):
381
399
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
382
400
  ) -> DevboxAsyncExecutionDetailView:
383
401
  """Wait for an execution to complete.
384
-
402
+
385
403
  Args:
386
404
  execution_id: The ID of the execution to wait for
387
405
  id: The ID of the devbox
@@ -397,20 +415,35 @@ class AsyncExecutionsResource(AsyncAPIResource):
397
415
  Raises:
398
416
  PollingTimeout: If polling times out before execution completes
399
417
  """
400
- async def retrieve_execution() -> DevboxAsyncExecutionDetailView:
401
- return await self.retrieve(
402
- execution_id,
403
- devbox_id=devbox_id,
404
- extra_headers=extra_headers,
405
- extra_query=extra_query,
406
- extra_body=extra_body,
407
- timeout=timeout,
408
- )
418
+
419
+ async def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
420
+ try:
421
+ return await self._post(
422
+ f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
423
+ body={"statuses": ["completed"]},
424
+ options=make_request_options(
425
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
426
+ ),
427
+ cast_to=DevboxAsyncExecutionDetailView,
428
+ )
429
+ except APIStatusError as error:
430
+ if error.response.status_code == 408:
431
+ # Handle 408 timeout errors by returning current execution state to continue polling
432
+ return DevboxAsyncExecutionDetailView(
433
+ devbox_id=devbox_id,
434
+ execution_id=execution_id,
435
+ status="queued",
436
+ stdout="",
437
+ stderr="",
438
+ )
439
+ else:
440
+ # Re-raise other errors to stop polling
441
+ raise
409
442
 
410
443
  def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
411
- return execution.status == 'completed'
444
+ return execution.status == "completed"
412
445
 
413
- return await async_poll_until(retrieve_execution, is_done, polling_config)
446
+ return await async_poll_until(wait_for_execution_status, is_done, polling_config)
414
447
 
415
448
  async def execute_async(
416
449
  self,