runloop-api-client 0.22.0__tar.gz → 0.23.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 (271) hide show
  1. runloop_api_client-0.23.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/CHANGELOG.md +21 -0
  3. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/PKG-INFO +2 -2
  4. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/README.md +1 -1
  5. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/api.md +17 -0
  6. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/pyproject.toml +1 -1
  7. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_base_client.py +9 -2
  8. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_constants.py +3 -3
  9. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_models.py +7 -1
  10. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_transform.py +11 -1
  11. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_version.py +1 -1
  12. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/pagination.py +144 -0
  13. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/__init__.py +14 -0
  14. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/browsers.py +78 -0
  15. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/computers.py +78 -0
  16. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/devboxes.py +155 -2
  17. runloop_api_client-0.23.0/src/runloop_api_client/resources/devboxes/disk_snapshots.py +421 -0
  18. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/scenarios/scorers.py +12 -12
  19. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/__init__.py +1 -0
  20. runloop_api_client-0.23.0/src/runloop_api_client/types/devbox_update_params.py +16 -0
  21. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/__init__.py +2 -0
  22. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/browser_view.py +3 -1
  23. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_view.py +6 -1
  24. runloop_api_client-0.23.0/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +18 -0
  25. runloop_api_client-0.23.0/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +16 -0
  26. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +2 -2
  27. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +2 -2
  28. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +2 -2
  29. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +2 -2
  30. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +2 -2
  31. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +2 -2
  32. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_function.py +9 -0
  33. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_function_param.py +9 -0
  34. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/test_browsers.py +76 -0
  35. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/test_computers.py +76 -0
  36. runloop_api_client-0.23.0/tests/api_resources/devboxes/test_disk_snapshots.py +261 -0
  37. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/scenarios/test_scorers.py +14 -14
  38. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/test_devboxes.py +94 -0
  39. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/test_scenarios.py +10 -0
  40. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_client.py +28 -28
  41. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_transform.py +10 -1
  42. runloop_api_client-0.22.0/.release-please-manifest.json +0 -3
  43. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/.gitignore +0 -0
  44. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/CONTRIBUTING.md +0 -0
  45. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/LICENSE +0 -0
  46. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/SECURITY.md +0 -0
  47. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/bin/check-release-environment +0 -0
  48. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/bin/publish-pypi +0 -0
  49. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/examples/.keep +0 -0
  50. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/mypy.ini +0 -0
  51. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/noxfile.py +0 -0
  52. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/release-please-config.json +0 -0
  53. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/requirements-dev.lock +0 -0
  54. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/requirements.lock +0 -0
  55. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop/lib/.keep +0 -0
  56. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/__init__.py +0 -0
  57. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_client.py +0 -0
  58. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_compat.py +0 -0
  59. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_exceptions.py +0 -0
  60. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_files.py +0 -0
  61. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_qs.py +0 -0
  62. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_resource.py +0 -0
  63. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_response.py +0 -0
  64. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_streaming.py +0 -0
  65. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_types.py +0 -0
  66. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  67. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  68. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  69. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  70. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  71. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  72. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  73. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  74. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/lib/.keep +0 -0
  75. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/lib/polling.py +0 -0
  76. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  77. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/py.typed +0 -0
  78. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/__init__.py +0 -0
  79. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  80. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  81. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  82. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  83. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  84. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  85. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  86. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/repositories.py +0 -0
  87. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  88. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  89. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  90. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  91. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  92. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  93. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_list_view.py +0 -0
  94. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  95. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  96. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  97. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  98. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  99. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  100. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  101. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  102. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  103. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  104. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  105. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  106. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  107. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  108. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  109. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  110. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  111. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  112. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  113. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  114. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  115. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  116. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  117. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  118. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  119. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  120. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  121. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  122. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  123. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  124. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  125. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  126. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  127. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  128. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  129. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  130. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  131. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  132. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  133. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  134. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  135. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  136. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  137. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  138. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  139. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  140. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  141. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  142. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  143. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  144. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  145. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  146. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  147. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  148. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  149. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  150. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  151. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  152. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  153. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  154. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  155. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  156. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  157. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  158. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  159. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  160. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  161. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  162. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  163. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  164. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  165. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  166. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  167. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  168. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  169. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  170. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  171. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  172. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  173. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  174. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  175. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  176. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  177. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  178. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  179. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  180. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  181. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  182. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  183. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  184. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  185. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  186. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  187. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  188. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  189. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  190. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  191. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  192. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  193. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  194. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  195. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
  196. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  197. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
  198. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  199. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  200. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  201. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  202. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  203. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  204. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  205. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  206. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  207. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  208. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  209. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  210. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  211. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/input_context.py +0 -0
  212. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  213. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  214. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  215. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  216. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  217. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_version_details.py +0 -0
  218. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/repository_version_list_view.py +0 -0
  219. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  220. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  221. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  222. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  223. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  224. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_list_view.py +0 -0
  225. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  226. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  227. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  228. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  229. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  230. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  231. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  232. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  233. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  234. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  235. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  236. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  237. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  238. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  239. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  240. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  241. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  242. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  243. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  244. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  245. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  246. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/__init__.py +0 -0
  247. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/__init__.py +0 -0
  248. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/benchmarks/__init__.py +0 -0
  249. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/benchmarks/test_runs.py +0 -0
  250. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/__init__.py +0 -0
  251. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  252. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  253. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/devboxes/test_lsp.py +0 -0
  254. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/scenarios/__init__.py +0 -0
  255. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  256. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/test_benchmarks.py +0 -0
  257. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/test_blueprints.py +0 -0
  258. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/api_resources/test_repositories.py +0 -0
  259. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/conftest.py +0 -0
  260. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/sample_file.txt +0 -0
  261. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_deepcopy.py +0 -0
  262. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_extract_files.py +0 -0
  263. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_files.py +0 -0
  264. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_models.py +0 -0
  265. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_qs.py +0 -0
  266. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_required_args.py +0 -0
  267. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_response.py +0 -0
  268. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_streaming.py +0 -0
  269. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_utils/test_proxy.py +0 -0
  270. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/test_utils/test_typing.py +0 -0
  271. {runloop_api_client-0.22.0 → runloop_api_client-0.23.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.23.0"
3
+ }
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.23.0 (2025-02-11)
4
+
5
+ Full Changelog: [v0.22.0...v0.23.0](https://github.com/runloopai/api-client-python/compare/v0.22.0...v0.23.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([#540](https://github.com/runloopai/api-client-python/issues/540)) ([0f1ce28](https://github.com/runloopai/api-client-python/commit/0f1ce28e9137b52265666131ee0c7561e92cefd9))
10
+ * **client:** send `X-Stainless-Read-Timeout` header ([#536](https://github.com/runloopai/api-client-python/issues/536)) ([996da95](https://github.com/runloopai/api-client-python/commit/996da9596984be3962a3f1f81753c0617676988b))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **api:** remove recursive model for now ([#534](https://github.com/runloopai/api-client-python/issues/534)) ([748bd3d](https://github.com/runloopai/api-client-python/commit/748bd3d1c63587094c0c7ead108d670740052a0b))
16
+
17
+
18
+ ### Chores
19
+
20
+ * **internal:** codegen related update ([#538](https://github.com/runloopai/api-client-python/issues/538)) ([b538d7c](https://github.com/runloopai/api-client-python/commit/b538d7c842fa8f2ebf5bcb61b9184d9171283c36))
21
+ * **internal:** fix type traversing dictionary params ([#537](https://github.com/runloopai/api-client-python/issues/537)) ([d6afc80](https://github.com/runloopai/api-client-python/commit/d6afc8051e30d19b2f011f3bcad85676d96c4a48))
22
+ * **internal:** minor type handling changes ([#539](https://github.com/runloopai/api-client-python/issues/539)) ([ecd4acd](https://github.com/runloopai/api-client-python/commit/ecd4acd4ac7e950ad5757a4f6adc08971135f7d3))
23
+
3
24
  ## 0.22.0 (2025-02-04)
4
25
 
5
26
  Full Changelog: [v0.21.0...v0.22.0](https://github.com/runloopai/api-client-python/compare/v0.21.0...v0.22.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runloop_api_client
3
- Version: 0.22.0
3
+ Version: 0.23.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
@@ -211,7 +211,7 @@ Error codes are as follows:
211
211
 
212
212
  ### Retries
213
213
 
214
- Certain errors are automatically retried 2 times by default, with a short exponential backoff.
214
+ Certain errors are automatically retried 0 times by default, with a short exponential backoff.
215
215
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
216
216
  429 Rate Limit, and >=500 Internal errors are all retried by default.
217
217
 
@@ -179,7 +179,7 @@ Error codes are as follows:
179
179
 
180
180
  ### Retries
181
181
 
182
- Certain errors are automatically retried 2 times by default, with a short exponential backoff.
182
+ Certain errors are automatically retried 0 times by default, with a short exponential backoff.
183
183
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
184
184
  429 Rate Limit, and >=500 Internal errors are all retried by default.
185
185
 
@@ -83,6 +83,7 @@ Methods:
83
83
 
84
84
  - <code title="post /v1/devboxes">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create</a>(\*\*<a href="src/runloop_api_client/types/devbox_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
85
85
  - <code title="get /v1/devboxes/{id}">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
86
+ - <code title="post /v1/devboxes/{id}">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
86
87
  - <code title="get /v1/devboxes">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">list</a>(\*\*<a href="src/runloop_api_client/types/devbox_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">SyncDevboxesCursorIDPage[DevboxView]</a></code>
87
88
  - <code title="post /v1/devboxes/{id}/create_ssh_key">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_ssh_key</a>(id) -> <a href="./src/runloop_api_client/types/devbox_create_ssh_key_response.py">DevboxCreateSSHKeyResponse</a></code>
88
89
  - <code title="post /v1/devboxes/{id}/create_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_create_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_tunnel_view.py">DevboxTunnelView</a></code>
@@ -101,6 +102,20 @@ Methods:
101
102
  - <code title="post /v1/devboxes/{id}/upload_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">upload_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_upload_file_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_upload_file_response.py">object</a></code>
102
103
  - <code title="post /v1/devboxes/{id}/write_file_contents">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">write_file_contents</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_write_file_contents_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
103
104
 
105
+ ## DiskSnapshots
106
+
107
+ Types:
108
+
109
+ ```python
110
+ from runloop_api_client.types.devboxes import DiskSnapshotDeleteResponse
111
+ ```
112
+
113
+ Methods:
114
+
115
+ - <code title="post /v1/devboxes/disk_snapshots/{id}">client.devboxes.disk_snapshots.<a href="./src/runloop_api_client/resources/devboxes/disk_snapshots.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
116
+ - <code title="get /v1/devboxes/disk_snapshots">client.devboxes.disk_snapshots.<a href="./src/runloop_api_client/resources/devboxes/disk_snapshots.py">list</a>(\*\*<a href="src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">SyncDiskSnapshotsCursorIDPage[DevboxSnapshotView]</a></code>
117
+ - <code title="post /v1/devboxes/disk_snapshots/{id}/delete">client.devboxes.disk_snapshots.<a href="./src/runloop_api_client/resources/devboxes/disk_snapshots.py">delete</a>(id) -> <a href="./src/runloop_api_client/types/devboxes/disk_snapshot_delete_response.py">object</a></code>
118
+
104
119
  ## Browsers
105
120
 
106
121
  Types:
@@ -112,6 +127,7 @@ from runloop_api_client.types.devboxes import BrowserView
112
127
  Methods:
113
128
 
114
129
  - <code title="post /v1/devboxes/browsers">client.devboxes.browsers.<a href="./src/runloop_api_client/resources/devboxes/browsers.py">create</a>(\*\*<a href="src/runloop_api_client/types/devboxes/browser_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/browser_view.py">BrowserView</a></code>
130
+ - <code title="get /v1/devboxes/browsers/{id}">client.devboxes.browsers.<a href="./src/runloop_api_client/resources/devboxes/browsers.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/devboxes/browser_view.py">BrowserView</a></code>
115
131
 
116
132
  ## Computers
117
133
 
@@ -129,6 +145,7 @@ from runloop_api_client.types.devboxes import (
129
145
  Methods:
130
146
 
131
147
  - <code title="post /v1/devboxes/computers">client.devboxes.computers.<a href="./src/runloop_api_client/resources/devboxes/computers.py">create</a>(\*\*<a href="src/runloop_api_client/types/devboxes/computer_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/computer_view.py">ComputerView</a></code>
148
+ - <code title="get /v1/devboxes/computers/{id}">client.devboxes.computers.<a href="./src/runloop_api_client/resources/devboxes/computers.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/devboxes/computer_view.py">ComputerView</a></code>
132
149
  - <code title="post /v1/devboxes/computers/{id}/keyboard_interaction">client.devboxes.computers.<a href="./src/runloop_api_client/resources/devboxes/computers.py">keyboard_interaction</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py">ComputerKeyboardInteractionResponse</a></code>
133
150
  - <code title="post /v1/devboxes/computers/{id}/mouse_interaction">client.devboxes.computers.<a href="./src/runloop_api_client/resources/devboxes/computers.py">mouse_interaction</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py">ComputerMouseInteractionResponse</a></code>
134
151
  - <code title="post /v1/devboxes/computers/{id}/screen_interaction">client.devboxes.computers.<a href="./src/runloop_api_client/resources/devboxes/computers.py">screen_interaction</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py">ComputerScreenInteractionResponse</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.22.0"
3
+ version = "0.23.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -418,10 +418,17 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
418
418
  if idempotency_header and options.method.lower() != "get" and idempotency_header not in headers:
419
419
  headers[idempotency_header] = options.idempotency_key or self._idempotency_key()
420
420
 
421
- # Don't set the retry count header if it was already set or removed by the caller. We check
421
+ # Don't set these headers if they were already set or removed by the caller. We check
422
422
  # `custom_headers`, which can contain `Omit()`, instead of `headers` to account for the removal case.
423
- if "x-stainless-retry-count" not in (header.lower() for header in custom_headers):
423
+ lower_custom_headers = [header.lower() for header in custom_headers]
424
+ if "x-stainless-retry-count" not in lower_custom_headers:
424
425
  headers["x-stainless-retry-count"] = str(retries_taken)
426
+ if "x-stainless-read-timeout" not in lower_custom_headers:
427
+ timeout = self.timeout if isinstance(options.timeout, NotGiven) else options.timeout
428
+ if isinstance(timeout, Timeout):
429
+ timeout = timeout.read
430
+ if timeout is not None:
431
+ headers["x-stainless-read-timeout"] = str(timeout)
425
432
 
426
433
  return headers
427
434
 
@@ -7,8 +7,8 @@ OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
7
7
 
8
8
  # default timeout is 1 minute
9
9
  DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0)
10
- DEFAULT_MAX_RETRIES = 2
10
+ DEFAULT_MAX_RETRIES = 0
11
11
  DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=100, max_keepalive_connections=20)
12
12
 
13
- INITIAL_RETRY_DELAY = 0.5
14
- MAX_RETRY_DELAY = 8.0
13
+ INITIAL_RETRY_DELAY = 1.0
14
+ MAX_RETRY_DELAY = 10.0
@@ -426,10 +426,16 @@ def construct_type(*, value: object, type_: object) -> object:
426
426
 
427
427
  If the given value does not match the expected type then it is returned as-is.
428
428
  """
429
+
430
+ # store a reference to the original type we were given before we extract any inner
431
+ # types so that we can properly resolve forward references in `TypeAliasType` annotations
432
+ original_type = None
433
+
429
434
  # we allow `object` as the input type because otherwise, passing things like
430
435
  # `Literal['value']` will be reported as a type error by type checkers
431
436
  type_ = cast("type[object]", type_)
432
437
  if is_type_alias_type(type_):
438
+ original_type = type_ # type: ignore[unreachable]
433
439
  type_ = type_.__value__ # type: ignore[unreachable]
434
440
 
435
441
  # unwrap `Annotated[T, ...]` -> `T`
@@ -446,7 +452,7 @@ def construct_type(*, value: object, type_: object) -> object:
446
452
 
447
453
  if is_union(origin):
448
454
  try:
449
- return validate_type(type_=cast("type[object]", type_), value=value)
455
+ return validate_type(type_=cast("type[object]", original_type or type_), value=value)
450
456
  except Exception:
451
457
  pass
452
458
 
@@ -25,7 +25,7 @@ from ._typing import (
25
25
  is_annotated_type,
26
26
  strip_annotated_type,
27
27
  )
28
- from .._compat import model_dump, is_typeddict
28
+ from .._compat import get_origin, model_dump, is_typeddict
29
29
 
30
30
  _T = TypeVar("_T")
31
31
 
@@ -164,9 +164,14 @@ def _transform_recursive(
164
164
  inner_type = annotation
165
165
 
166
166
  stripped_type = strip_annotated_type(inner_type)
167
+ origin = get_origin(stripped_type) or stripped_type
167
168
  if is_typeddict(stripped_type) and is_mapping(data):
168
169
  return _transform_typeddict(data, stripped_type)
169
170
 
171
+ if origin == dict and is_mapping(data):
172
+ items_type = get_args(stripped_type)[1]
173
+ return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()}
174
+
170
175
  if (
171
176
  # List[T]
172
177
  (is_list_type(stripped_type) and is_list(data))
@@ -307,9 +312,14 @@ async def _async_transform_recursive(
307
312
  inner_type = annotation
308
313
 
309
314
  stripped_type = strip_annotated_type(inner_type)
315
+ origin = get_origin(stripped_type) or stripped_type
310
316
  if is_typeddict(stripped_type) and is_mapping(data):
311
317
  return await _async_transform_typeddict(data, stripped_type)
312
318
 
319
+ if origin == dict and is_mapping(data):
320
+ items_type = get_args(stripped_type)[1]
321
+ return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()}
322
+
313
323
  if (
314
324
  # List[T]
315
325
  (is_list_type(stripped_type) and is_list(data))
@@ -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.22.0" # x-release-please-version
4
+ __version__ = "0.23.0" # x-release-please-version
@@ -86,6 +86,14 @@ class SyncBlueprintsCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
86
86
  return []
87
87
  return blueprints
88
88
 
89
+ @override
90
+ def has_next_page(self) -> bool:
91
+ has_more = self.has_more
92
+ if has_more is not None and has_more is False:
93
+ return False
94
+
95
+ return super().has_next_page()
96
+
89
97
  @override
90
98
  def next_page_info(self) -> Optional[PageInfo]:
91
99
  blueprints = self.blueprints
@@ -112,6 +120,14 @@ class AsyncBlueprintsCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
112
120
  return []
113
121
  return blueprints
114
122
 
123
+ @override
124
+ def has_next_page(self) -> bool:
125
+ has_more = self.has_more
126
+ if has_more is not None and has_more is False:
127
+ return False
128
+
129
+ return super().has_next_page()
130
+
115
131
  @override
116
132
  def next_page_info(self) -> Optional[PageInfo]:
117
133
  blueprints = self.blueprints
@@ -138,6 +154,14 @@ class SyncDevboxesCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
138
154
  return []
139
155
  return devboxes
140
156
 
157
+ @override
158
+ def has_next_page(self) -> bool:
159
+ has_more = self.has_more
160
+ if has_more is not None and has_more is False:
161
+ return False
162
+
163
+ return super().has_next_page()
164
+
141
165
  @override
142
166
  def next_page_info(self) -> Optional[PageInfo]:
143
167
  devboxes = self.devboxes
@@ -164,6 +188,14 @@ class AsyncDevboxesCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
164
188
  return []
165
189
  return devboxes
166
190
 
191
+ @override
192
+ def has_next_page(self) -> bool:
193
+ has_more = self.has_more
194
+ if has_more is not None and has_more is False:
195
+ return False
196
+
197
+ return super().has_next_page()
198
+
167
199
  @override
168
200
  def next_page_info(self) -> Optional[PageInfo]:
169
201
  devboxes = self.devboxes
@@ -190,6 +222,14 @@ class SyncRepositoriesCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
190
222
  return []
191
223
  return repositories
192
224
 
225
+ @override
226
+ def has_next_page(self) -> bool:
227
+ has_more = self.has_more
228
+ if has_more is not None and has_more is False:
229
+ return False
230
+
231
+ return super().has_next_page()
232
+
193
233
  @override
194
234
  def next_page_info(self) -> Optional[PageInfo]:
195
235
  repositories = self.repositories
@@ -216,6 +256,14 @@ class AsyncRepositoriesCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]
216
256
  return []
217
257
  return repositories
218
258
 
259
+ @override
260
+ def has_next_page(self) -> bool:
261
+ has_more = self.has_more
262
+ if has_more is not None and has_more is False:
263
+ return False
264
+
265
+ return super().has_next_page()
266
+
219
267
  @override
220
268
  def next_page_info(self) -> Optional[PageInfo]:
221
269
  repositories = self.repositories
@@ -242,6 +290,14 @@ class SyncDiskSnapshotsCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T])
242
290
  return []
243
291
  return snapshots
244
292
 
293
+ @override
294
+ def has_next_page(self) -> bool:
295
+ has_more = self.has_more
296
+ if has_more is not None and has_more is False:
297
+ return False
298
+
299
+ return super().has_next_page()
300
+
245
301
  @override
246
302
  def next_page_info(self) -> Optional[PageInfo]:
247
303
  snapshots = self.snapshots
@@ -268,6 +324,14 @@ class AsyncDiskSnapshotsCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T
268
324
  return []
269
325
  return snapshots
270
326
 
327
+ @override
328
+ def has_next_page(self) -> bool:
329
+ has_more = self.has_more
330
+ if has_more is not None and has_more is False:
331
+ return False
332
+
333
+ return super().has_next_page()
334
+
271
335
  @override
272
336
  def next_page_info(self) -> Optional[PageInfo]:
273
337
  snapshots = self.snapshots
@@ -294,6 +358,14 @@ class SyncBenchmarksCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
294
358
  return []
295
359
  return benchmarks
296
360
 
361
+ @override
362
+ def has_next_page(self) -> bool:
363
+ has_more = self.has_more
364
+ if has_more is not None and has_more is False:
365
+ return False
366
+
367
+ return super().has_next_page()
368
+
297
369
  @override
298
370
  def next_page_info(self) -> Optional[PageInfo]:
299
371
  benchmarks = self.benchmarks
@@ -320,6 +392,14 @@ class AsyncBenchmarksCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
320
392
  return []
321
393
  return benchmarks
322
394
 
395
+ @override
396
+ def has_next_page(self) -> bool:
397
+ has_more = self.has_more
398
+ if has_more is not None and has_more is False:
399
+ return False
400
+
401
+ return super().has_next_page()
402
+
323
403
  @override
324
404
  def next_page_info(self) -> Optional[PageInfo]:
325
405
  benchmarks = self.benchmarks
@@ -346,6 +426,14 @@ class SyncBenchmarkRunsCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T])
346
426
  return []
347
427
  return runs
348
428
 
429
+ @override
430
+ def has_next_page(self) -> bool:
431
+ has_more = self.has_more
432
+ if has_more is not None and has_more is False:
433
+ return False
434
+
435
+ return super().has_next_page()
436
+
349
437
  @override
350
438
  def next_page_info(self) -> Optional[PageInfo]:
351
439
  runs = self.runs
@@ -372,6 +460,14 @@ class AsyncBenchmarkRunsCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T
372
460
  return []
373
461
  return runs
374
462
 
463
+ @override
464
+ def has_next_page(self) -> bool:
465
+ has_more = self.has_more
466
+ if has_more is not None and has_more is False:
467
+ return False
468
+
469
+ return super().has_next_page()
470
+
375
471
  @override
376
472
  def next_page_info(self) -> Optional[PageInfo]:
377
473
  runs = self.runs
@@ -398,6 +494,14 @@ class SyncScenariosCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
398
494
  return []
399
495
  return scenarios
400
496
 
497
+ @override
498
+ def has_next_page(self) -> bool:
499
+ has_more = self.has_more
500
+ if has_more is not None and has_more is False:
501
+ return False
502
+
503
+ return super().has_next_page()
504
+
401
505
  @override
402
506
  def next_page_info(self) -> Optional[PageInfo]:
403
507
  scenarios = self.scenarios
@@ -424,6 +528,14 @@ class AsyncScenariosCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
424
528
  return []
425
529
  return scenarios
426
530
 
531
+ @override
532
+ def has_next_page(self) -> bool:
533
+ has_more = self.has_more
534
+ if has_more is not None and has_more is False:
535
+ return False
536
+
537
+ return super().has_next_page()
538
+
427
539
  @override
428
540
  def next_page_info(self) -> Optional[PageInfo]:
429
541
  scenarios = self.scenarios
@@ -450,6 +562,14 @@ class SyncScenarioRunsCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
450
562
  return []
451
563
  return runs
452
564
 
565
+ @override
566
+ def has_next_page(self) -> bool:
567
+ has_more = self.has_more
568
+ if has_more is not None and has_more is False:
569
+ return False
570
+
571
+ return super().has_next_page()
572
+
453
573
  @override
454
574
  def next_page_info(self) -> Optional[PageInfo]:
455
575
  runs = self.runs
@@ -476,6 +596,14 @@ class AsyncScenarioRunsCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]
476
596
  return []
477
597
  return runs
478
598
 
599
+ @override
600
+ def has_next_page(self) -> bool:
601
+ has_more = self.has_more
602
+ if has_more is not None and has_more is False:
603
+ return False
604
+
605
+ return super().has_next_page()
606
+
479
607
  @override
480
608
  def next_page_info(self) -> Optional[PageInfo]:
481
609
  runs = self.runs
@@ -502,6 +630,14 @@ class SyncScenarioScorersCursorIDPage(BaseSyncPage[_T], BasePage[_T], Generic[_T
502
630
  return []
503
631
  return scorers
504
632
 
633
+ @override
634
+ def has_next_page(self) -> bool:
635
+ has_more = self.has_more
636
+ if has_more is not None and has_more is False:
637
+ return False
638
+
639
+ return super().has_next_page()
640
+
505
641
  @override
506
642
  def next_page_info(self) -> Optional[PageInfo]:
507
643
  scorers = self.scorers
@@ -528,6 +664,14 @@ class AsyncScenarioScorersCursorIDPage(BaseAsyncPage[_T], BasePage[_T], Generic[
528
664
  return []
529
665
  return scorers
530
666
 
667
+ @override
668
+ def has_next_page(self) -> bool:
669
+ has_more = self.has_more
670
+ if has_more is not None and has_more is False:
671
+ return False
672
+
673
+ return super().has_next_page()
674
+
531
675
  @override
532
676
  def next_page_info(self) -> Optional[PageInfo]:
533
677
  scorers = self.scorers
@@ -48,8 +48,22 @@ from .executions import (
48
48
  ExecutionsResourceWithStreamingResponse,
49
49
  AsyncExecutionsResourceWithStreamingResponse,
50
50
  )
51
+ from .disk_snapshots import (
52
+ DiskSnapshotsResource,
53
+ AsyncDiskSnapshotsResource,
54
+ DiskSnapshotsResourceWithRawResponse,
55
+ AsyncDiskSnapshotsResourceWithRawResponse,
56
+ DiskSnapshotsResourceWithStreamingResponse,
57
+ AsyncDiskSnapshotsResourceWithStreamingResponse,
58
+ )
51
59
 
52
60
  __all__ = [
61
+ "DiskSnapshotsResource",
62
+ "AsyncDiskSnapshotsResource",
63
+ "DiskSnapshotsResourceWithRawResponse",
64
+ "AsyncDiskSnapshotsResourceWithRawResponse",
65
+ "DiskSnapshotsResourceWithStreamingResponse",
66
+ "AsyncDiskSnapshotsResourceWithStreamingResponse",
53
67
  "BrowsersResource",
54
68
  "AsyncBrowsersResource",
55
69
  "BrowsersResourceWithRawResponse",
@@ -90,6 +90,39 @@ class BrowsersResource(SyncAPIResource):
90
90
  cast_to=BrowserView,
91
91
  )
92
92
 
93
+ def retrieve(
94
+ self,
95
+ id: str,
96
+ *,
97
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
98
+ # The extra values given here take precedence over values defined on the client or passed to this method.
99
+ extra_headers: Headers | None = None,
100
+ extra_query: Query | None = None,
101
+ extra_body: Body | None = None,
102
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
103
+ ) -> BrowserView:
104
+ """
105
+ Get Browser Details.
106
+
107
+ Args:
108
+ extra_headers: Send extra headers
109
+
110
+ extra_query: Add additional query parameters to the request
111
+
112
+ extra_body: Add additional JSON properties to the request
113
+
114
+ timeout: Override the client-level default timeout for this request, in seconds
115
+ """
116
+ if not id:
117
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
118
+ return self._get(
119
+ f"/v1/devboxes/browsers/{id}",
120
+ options=make_request_options(
121
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
122
+ ),
123
+ cast_to=BrowserView,
124
+ )
125
+
93
126
 
94
127
  class AsyncBrowsersResource(AsyncAPIResource):
95
128
  @cached_property
@@ -155,6 +188,39 @@ class AsyncBrowsersResource(AsyncAPIResource):
155
188
  cast_to=BrowserView,
156
189
  )
157
190
 
191
+ async def retrieve(
192
+ self,
193
+ id: str,
194
+ *,
195
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
196
+ # The extra values given here take precedence over values defined on the client or passed to this method.
197
+ extra_headers: Headers | None = None,
198
+ extra_query: Query | None = None,
199
+ extra_body: Body | None = None,
200
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
201
+ ) -> BrowserView:
202
+ """
203
+ Get Browser Details.
204
+
205
+ Args:
206
+ extra_headers: Send extra headers
207
+
208
+ extra_query: Add additional query parameters to the request
209
+
210
+ extra_body: Add additional JSON properties to the request
211
+
212
+ timeout: Override the client-level default timeout for this request, in seconds
213
+ """
214
+ if not id:
215
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
216
+ return await self._get(
217
+ f"/v1/devboxes/browsers/{id}",
218
+ options=make_request_options(
219
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
220
+ ),
221
+ cast_to=BrowserView,
222
+ )
223
+
158
224
 
159
225
  class BrowsersResourceWithRawResponse:
160
226
  def __init__(self, browsers: BrowsersResource) -> None:
@@ -163,6 +229,9 @@ class BrowsersResourceWithRawResponse:
163
229
  self.create = to_raw_response_wrapper(
164
230
  browsers.create,
165
231
  )
232
+ self.retrieve = to_raw_response_wrapper(
233
+ browsers.retrieve,
234
+ )
166
235
 
167
236
 
168
237
  class AsyncBrowsersResourceWithRawResponse:
@@ -172,6 +241,9 @@ class AsyncBrowsersResourceWithRawResponse:
172
241
  self.create = async_to_raw_response_wrapper(
173
242
  browsers.create,
174
243
  )
244
+ self.retrieve = async_to_raw_response_wrapper(
245
+ browsers.retrieve,
246
+ )
175
247
 
176
248
 
177
249
  class BrowsersResourceWithStreamingResponse:
@@ -181,6 +253,9 @@ class BrowsersResourceWithStreamingResponse:
181
253
  self.create = to_streamed_response_wrapper(
182
254
  browsers.create,
183
255
  )
256
+ self.retrieve = to_streamed_response_wrapper(
257
+ browsers.retrieve,
258
+ )
184
259
 
185
260
 
186
261
  class AsyncBrowsersResourceWithStreamingResponse:
@@ -190,3 +265,6 @@ class AsyncBrowsersResourceWithStreamingResponse:
190
265
  self.create = async_to_streamed_response_wrapper(
191
266
  browsers.create,
192
267
  )
268
+ self.retrieve = async_to_streamed_response_wrapper(
269
+ browsers.retrieve,
270
+ )