runloop-api-client 0.58.0__tar.gz → 0.60.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 (320) hide show
  1. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/.gitignore +2 -0
  2. runloop_api_client-0.60.0/.release-please-manifest.json +3 -0
  3. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/CHANGELOG.md +26 -0
  4. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/PKG-INFO +1 -1
  5. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/api.md +5 -1
  6. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/pyproject.toml +58 -4
  7. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/requirements-dev.lock +2 -1
  8. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_streaming.py +189 -2
  9. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_version.py +1 -1
  10. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/blueprints.py +2 -2
  11. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/devboxes.py +279 -1
  12. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/executions.py +308 -43
  13. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/__init__.py +2 -0
  14. runloop_api_client-0.60.0/src/runloop_api_client/types/devbox_execute_params.py +28 -0
  15. runloop_api_client-0.60.0/src/runloop_api_client/types/devbox_wait_for_command_params.py +25 -0
  16. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/__init__.py +6 -1
  17. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +4 -0
  18. runloop_api_client-0.58.0/src/runloop_api_client/types/devboxes/execution_stream_updates_params.py → runloop_api_client-0.60.0/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +2 -2
  19. runloop_api_client-0.60.0/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +14 -0
  20. runloop_api_client-0.60.0/src/runloop_api_client/types/devboxes/execution_update_chunk.py +15 -0
  21. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_executions.py +179 -25
  22. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_devboxes.py +238 -0
  23. runloop_api_client-0.60.0/tests/smoketests/README.md +27 -0
  24. runloop_api_client-0.60.0/tests/smoketests/__init__.py +6 -0
  25. runloop_api_client-0.60.0/tests/smoketests/test_blueprints.py +61 -0
  26. runloop_api_client-0.60.0/tests/smoketests/test_devboxes.py +74 -0
  27. runloop_api_client-0.60.0/tests/smoketests/test_executions.py +63 -0
  28. runloop_api_client-0.60.0/tests/smoketests/test_scenarios_benchmarks.py +78 -0
  29. runloop_api_client-0.60.0/tests/smoketests/test_snapshots.py +43 -0
  30. runloop_api_client-0.60.0/tests/smoketests/utils.py +34 -0
  31. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_client.py +6 -47
  32. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/uv.lock +1 -1
  33. runloop_api_client-0.58.0/.release-please-manifest.json +0 -3
  34. runloop_api_client-0.58.0/mypy.ini +0 -50
  35. runloop_api_client-0.58.0/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -40
  36. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/CONTRIBUTING.md +0 -0
  37. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/LICENSE +0 -0
  38. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/README.md +0 -0
  39. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/SECURITY.md +0 -0
  40. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/bin/check-release-environment +0 -0
  41. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/bin/publish-pypi +0 -0
  42. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/examples/.keep +0 -0
  43. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/noxfile.py +0 -0
  44. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/release-please-config.json +0 -0
  45. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/requirements.lock +0 -0
  46. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop/lib/.keep +0 -0
  47. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/__init__.py +0 -0
  48. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_base_client.py +0 -0
  49. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_client.py +0 -0
  50. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_compat.py +0 -0
  51. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_constants.py +0 -0
  52. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_exceptions.py +0 -0
  53. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_files.py +0 -0
  54. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_models.py +0 -0
  55. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_qs.py +0 -0
  56. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_resource.py +0 -0
  57. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_response.py +0 -0
  58. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_types.py +0 -0
  59. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  60. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_compat.py +0 -0
  61. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
  62. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  63. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  64. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  65. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  66. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  67. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  68. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  69. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  70. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  71. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/lib/.keep +0 -0
  72. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/lib/polling.py +0 -0
  73. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  74. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/pagination.py +0 -0
  75. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/py.typed +0 -0
  76. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/__init__.py +0 -0
  77. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  78. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  79. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  80. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  81. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  82. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  83. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  84. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  85. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  86. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/objects.py +0 -0
  87. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/repositories.py +0 -0
  88. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  89. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  90. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  91. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  92. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/resources/secrets.py +0 -0
  93. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  94. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  95. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  96. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  97. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  98. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  99. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  100. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  101. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  102. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  103. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  104. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
  105. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  106. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  107. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  108. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  109. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  110. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
  111. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  112. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  113. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  114. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  115. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  116. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  117. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  118. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  119. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  120. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  121. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  122. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  123. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  124. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  125. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  126. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  127. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  128. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  129. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  130. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  131. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  132. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  133. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  134. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  135. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  136. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  137. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  138. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  139. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  140. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  141. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  142. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  143. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  144. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  145. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  146. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  147. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  148. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  149. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  150. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  151. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  152. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  153. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  154. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  155. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  156. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  157. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  158. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  159. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  160. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  161. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  162. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  163. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  164. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  165. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  166. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  167. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  168. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  169. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  170. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  171. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  172. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  173. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  174. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  175. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  176. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  177. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  178. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  179. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  180. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  181. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  182. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  183. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  184. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  185. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  186. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  187. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  188. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  189. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  190. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  191. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  192. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  193. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  194. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  195. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  196. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  197. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  198. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  199. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  200. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  201. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  202. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  203. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  204. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  205. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  206. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  207. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  208. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
  209. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  210. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
  211. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  212. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  213. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  214. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  215. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  216. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  217. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  218. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  219. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  220. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  221. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  222. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  223. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  224. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/input_context.py +0 -0
  225. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  226. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  227. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_create_params.py +0 -0
  228. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_download_params.py +0 -0
  229. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_download_url_view.py +0 -0
  230. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_list_params.py +0 -0
  231. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_list_public_params.py +0 -0
  232. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_list_view.py +0 -0
  233. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/object_view.py +0 -0
  234. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  235. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  236. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  237. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  238. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  239. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  240. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  241. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  242. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  243. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  244. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  245. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  246. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  247. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  248. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  249. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  250. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  251. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  252. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  253. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  254. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  255. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  256. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  257. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  258. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  259. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  260. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  261. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  262. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  263. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  264. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  265. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  266. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  267. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  268. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  269. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  270. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  271. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  272. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/secret_list_params.py +0 -0
  273. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  274. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  275. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/secret_view.py +0 -0
  276. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  277. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  278. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  279. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  280. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
  281. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  282. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  283. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  284. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  285. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
  286. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/__init__.py +0 -0
  287. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/__init__.py +0 -0
  288. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/benchmarks/__init__.py +0 -0
  289. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/benchmarks/test_runs.py +0 -0
  290. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/__init__.py +0 -0
  291. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  292. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  293. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  294. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  295. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/devboxes/test_lsp.py +0 -0
  296. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/scenarios/__init__.py +0 -0
  297. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  298. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  299. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_benchmarks.py +0 -0
  300. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_blueprints.py +0 -0
  301. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_objects.py +0 -0
  302. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_repositories.py +0 -0
  303. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_scenarios.py +0 -0
  304. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/api_resources/test_secrets.py +0 -0
  305. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/conftest.py +0 -0
  306. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/sample_file.txt +0 -0
  307. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_deepcopy.py +0 -0
  308. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_extract_files.py +0 -0
  309. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_files.py +0 -0
  310. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_models.py +0 -0
  311. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_polling.py +0 -0
  312. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_qs.py +0 -0
  313. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_required_args.py +0 -0
  314. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_response.py +0 -0
  315. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_streaming.py +0 -0
  316. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_transform.py +0 -0
  317. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_utils/test_datetime_parse.py +0 -0
  318. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_utils/test_proxy.py +0 -0
  319. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/test_utils/test_typing.py +0 -0
  320. {runloop_api_client-0.58.0 → runloop_api_client-0.60.0}/tests/utils.py +0 -0
@@ -13,3 +13,5 @@ dist
13
13
  .envrc
14
14
  codegen.log
15
15
  Brewfile.lock.json
16
+
17
+ .DS_Store
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.60.0"
3
+ }
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.60.0 (2025-09-10)
4
+
5
+ Full Changelog: [v0.59.0...v0.60.0](https://github.com/runloopai/api-client-python/compare/v0.59.0...v0.60.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([82b7001](https://github.com/runloopai/api-client-python/commit/82b700156bc034cb486225ef2889b7f3b7575c9e))
10
+ * **api:** api update ([5d1797b](https://github.com/runloopai/api-client-python/commit/5d1797b1e193ffd5b17c664fdf3894a568039c14))
11
+ * **api:** api update ([f9e63d9](https://github.com/runloopai/api-client-python/commit/f9e63d96beac3fcdfda3b1038683ebf514b421d7))
12
+
13
+ ## 0.59.0 (2025-09-08)
14
+
15
+ Full Changelog: [v0.58.0...v0.59.0](https://github.com/runloopai/api-client-python/compare/v0.58.0...v0.59.0)
16
+
17
+ ### Features
18
+
19
+ * **api:** api update ([d28f600](https://github.com/runloopai/api-client-python/commit/d28f60090e9c8c3c508812bfaf4bacbdd0b64330))
20
+ * **api:** api update ([a7b44bc](https://github.com/runloopai/api-client-python/commit/a7b44bc091060518d507dbd806694de9ba09c1f8))
21
+ * **api:** api update ([39c93bd](https://github.com/runloopai/api-client-python/commit/39c93bd7061e77c01fbb1cd913ede94ce90664c4))
22
+
23
+
24
+ ### Chores
25
+
26
+ * **internal:** codegen related update ([4ed8b7a](https://github.com/runloopai/api-client-python/commit/4ed8b7a3ab98378214f74e79202051260f8488da))
27
+ * **tests:** simplify `get_platform` test ([6b38a37](https://github.com/runloopai/api-client-python/commit/6b38a37e0e3630b360090fd4ab91b4ffc431c46c))
28
+
3
29
  ## 0.58.0 (2025-09-04)
4
30
 
5
31
  Full Changelog: [v0.57.0...v0.58.0](https://github.com/runloopai/api-client-python/compare/v0.57.0...v0.58.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.58.0
3
+ Version: 0.60.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
@@ -73,6 +73,7 @@ Types:
73
73
  from runloop_api_client.types import (
74
74
  DevboxAsyncExecutionDetailView,
75
75
  DevboxExecutionDetailView,
76
+ DevboxKillExecutionRequest,
76
77
  DevboxListView,
77
78
  DevboxSnapshotListView,
78
79
  DevboxSnapshotView,
@@ -94,6 +95,7 @@ Methods:
94
95
  - <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>
95
96
  - <code title="post /v1/devboxes/disk_snapshots/{id}/delete">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">delete_disk_snapshot</a>(id) -> object</code>
96
97
  - <code title="post /v1/devboxes/{id}/download_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">download_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_download_file_params.py">params</a>) -> BinaryAPIResponse</code>
98
+ - <code title="post /v1/devboxes/{id}/execute">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
97
99
  - <code title="post /v1/devboxes/{id}/execute_async">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute_async</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_async_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
98
100
  - <code title="post /v1/devboxes/{id}/execute_sync">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute_sync</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_sync_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
99
101
  - <code title="post /v1/devboxes/{id}/keep_alive">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">keep_alive</a>(id) -> object</code>
@@ -106,6 +108,7 @@ Methods:
106
108
  - <code title="post /v1/devboxes/{id}/snapshot_disk_async">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk_async</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_async_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
107
109
  - <code title="post /v1/devboxes/{id}/suspend">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">suspend</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
108
110
  - <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>) -> object</code>
111
+ - <code title="post /v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">wait_for_command</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devbox_wait_for_command_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
109
112
  - <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>
110
113
 
111
114
 
@@ -266,7 +269,8 @@ Methods:
266
269
  - <code title="post /v1/devboxes/{id}/execute_async">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">execute_async</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_execute_async_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
267
270
  - <code title="post /v1/devboxes/{id}/execute_sync">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">execute_sync</a>(id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_execute_sync_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
268
271
  - <code title="post /v1/devboxes/{devbox_id}/executions/{execution_id}/kill">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">kill</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_kill_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
269
- - <code title="get /v1/devboxes/{devbox_id}/executions/{execution_id}/stream_updates">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">stream_updates</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_stream_updates_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_async_execution_detail_view.py">DevboxAsyncExecutionDetailView</a></code>
272
+ - <code title="get /v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">stream_stderr_updates</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/execution_update_chunk.py">ExecutionUpdateChunk</a></code>
273
+ - <code title="get /v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates">client.devboxes.executions.<a href="./src/runloop_api_client/resources/devboxes/executions.py">stream_stdout_updates</a>(execution_id, \*, devbox_id, \*\*<a href="src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devboxes/execution_update_chunk.py">ExecutionUpdateChunk</a></code>
270
274
 
271
275
  # Scenarios
272
276
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.58.0"
3
+ version = "0.60.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -51,13 +51,13 @@ dev-dependencies = [
51
51
  "respx",
52
52
  "pytest",
53
53
  "pytest-asyncio",
54
+ "pytest-timeout",
54
55
  "ruff",
55
56
  "time-machine",
56
57
  "nox",
57
58
  "dirty-equals>=0.6.0",
58
59
  "importlib-metadata>=6.7.0",
59
60
  "rich>=13.7.1",
60
- "nest_asyncio==1.6.0",
61
61
  "pytest-xdist>=3.6.1",
62
62
  ]
63
63
 
@@ -135,7 +135,7 @@ replacement = '[\1](https://github.com/runloopai/api-client-python/tree/main/\g<
135
135
 
136
136
  [tool.pytest.ini_options]
137
137
  testpaths = ["tests"]
138
- addopts = "--tb=short -n auto"
138
+ addopts = "--tb=short -n auto --dist=loadfile -m 'not smoketest'"
139
139
  xfail_strict = true
140
140
  asyncio_mode = "auto"
141
141
  asyncio_default_fixture_loop_scope = "session"
@@ -143,7 +143,9 @@ filterwarnings = [
143
143
  "error"
144
144
  ]
145
145
  markers = [
146
- "skip_if_strict: skip test if using strict validation (for prism mock server issues)"
146
+ "skip_if_strict: skip test if using strict validation (for prism mock server issues)",
147
+ "timeout: per-test timeout provided by pytest-timeout",
148
+ "smoketest: end-to-end smoke tests against real API",
147
149
  ]
148
150
 
149
151
  [tool.pyright]
@@ -166,6 +168,58 @@ reportOverlappingOverload = false
166
168
  reportImportCycles = false
167
169
  reportPrivateUsage = false
168
170
 
171
+ [tool.mypy]
172
+ pretty = true
173
+ show_error_codes = true
174
+
175
+ # Exclude _files.py because mypy isn't smart enough to apply
176
+ # the correct type narrowing and as this is an internal module
177
+ # it's fine to just use Pyright.
178
+ #
179
+ # We also exclude our `tests` as mypy doesn't always infer
180
+ # types correctly and Pyright will still catch any type errors.
181
+ exclude = ['src/runloop_api_client/_files.py', '_dev/.*.py', 'tests/.*']
182
+
183
+ strict_equality = true
184
+ implicit_reexport = true
185
+ check_untyped_defs = true
186
+ no_implicit_optional = true
187
+
188
+ warn_return_any = true
189
+ warn_unreachable = true
190
+ warn_unused_configs = true
191
+
192
+ # Turn these options off as it could cause conflicts
193
+ # with the Pyright options.
194
+ warn_unused_ignores = false
195
+ warn_redundant_casts = false
196
+
197
+ disallow_any_generics = true
198
+ disallow_untyped_defs = true
199
+ disallow_untyped_calls = true
200
+ disallow_subclassing_any = true
201
+ disallow_incomplete_defs = true
202
+ disallow_untyped_decorators = true
203
+ cache_fine_grained = true
204
+
205
+ # By default, mypy reports an error if you assign a value to the result
206
+ # of a function call that doesn't return anything. We do this in our test
207
+ # cases:
208
+ # ```
209
+ # result = ...
210
+ # assert result is None
211
+ # ```
212
+ # Changing this codegen to make mypy happy would increase complexity
213
+ # and would not be worth it.
214
+ disable_error_code = "func-returns-value,overload-cannot-match"
215
+
216
+ # https://github.com/python/mypy/issues/12162
217
+ [[tool.mypy.overrides]]
218
+ module = "black.files.*"
219
+ ignore_errors = true
220
+ ignore_missing_imports = true
221
+
222
+
169
223
  [tool.ruff]
170
224
  line-length = 120
171
225
  output-format = "grouped"
@@ -75,7 +75,6 @@ multidict==6.4.4
75
75
  mypy==1.14.1
76
76
  mypy-extensions==1.0.0
77
77
  # via mypy
78
- nest-asyncio==1.6.0
79
78
  nodeenv==1.8.0
80
79
  # via pyright
81
80
  nox==2023.4.22
@@ -99,6 +98,8 @@ pyright==1.1.399
99
98
  pytest==8.3.3
100
99
  # via pytest-asyncio
101
100
  # via pytest-xdist
101
+ pytest-timeout==2.3.1
102
+ # via runloop-api-client (dev)
102
103
  pytest-asyncio==0.24.0
103
104
  pytest-xdist==3.7.0
104
105
  python-dateutil==2.8.2
@@ -4,12 +4,31 @@ from __future__ import annotations
4
4
  import json
5
5
  import inspect
6
6
  from types import TracebackType
7
- from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, AsyncIterator, cast
8
- from typing_extensions import Self, Protocol, TypeGuard, override, get_origin, runtime_checkable
7
+ from typing import (
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Generic,
11
+ TypeVar,
12
+ Callable,
13
+ Iterator,
14
+ Optional,
15
+ Awaitable,
16
+ AsyncIterator,
17
+ cast,
18
+ )
19
+ from typing_extensions import (
20
+ Self,
21
+ Protocol,
22
+ TypeGuard,
23
+ override,
24
+ get_origin,
25
+ runtime_checkable,
26
+ )
9
27
 
10
28
  import httpx
11
29
 
12
30
  from ._utils import extract_type_var_from_base
31
+ from ._exceptions import APIStatusError, APITimeoutError
13
32
 
14
33
  if TYPE_CHECKING:
15
34
  from ._client import Runloop, AsyncRunloop
@@ -55,6 +74,17 @@ class Stream(Generic[_T]):
55
74
  iterator = self._iter_events()
56
75
 
57
76
  for sse in iterator:
77
+ # Surface server-sent error events as API errors to allow callers to handle/retry
78
+ if sse.event == "error":
79
+ try:
80
+ error_obj = json.loads(sse.data)
81
+ status_code = int(error_obj.get("code", 500))
82
+ # Build a synthetic response to mirror normal error handling
83
+ fake_resp = httpx.Response(status_code, request=response.request, content=sse.data)
84
+ except Exception:
85
+ fake_resp = httpx.Response(500, request=response.request, content=sse.data)
86
+ raise self._client._make_status_error_from_response(fake_resp)
87
+
58
88
  yield process_data(data=sse.json(), cast_to=cast_to, response=response)
59
89
 
60
90
  # Ensure the entire stream is consumed
@@ -119,6 +149,17 @@ class AsyncStream(Generic[_T]):
119
149
  iterator = self._iter_events()
120
150
 
121
151
  async for sse in iterator:
152
+ # Surface server-sent error events as API errors to allow callers to handle/retry
153
+ if sse.event == "error":
154
+ try:
155
+ error_obj = json.loads(sse.data)
156
+ status_code = int(error_obj.get("code", 500))
157
+ # Build a synthetic response to mirror normal error handling
158
+ fake_resp = httpx.Response(status_code, request=response.request, content=sse.data)
159
+ except Exception:
160
+ fake_resp = httpx.Response(500, request=response.request, content=sse.data)
161
+ raise self._client._make_status_error_from_response(fake_resp)
162
+
122
163
  yield process_data(data=sse.json(), cast_to=cast_to, response=response)
123
164
 
124
165
  # Ensure the entire stream is consumed
@@ -331,3 +372,149 @@ def extract_stream_chunk_type(
331
372
  generic_bases=cast("tuple[type, ...]", (Stream, AsyncStream)),
332
373
  failure_message=failure_message,
333
374
  )
375
+
376
+
377
+ class ReconnectingStream(Generic[_T]):
378
+ """Wraps a Stream with automatic reconnection on timeout (HTTP 408) or read timeouts.
379
+
380
+ The reconnection uses the last observed offset from each item, as provided by
381
+ the given `get_offset` callback. The `stream_creator` will be called with the
382
+ last known offset to resume the stream.
383
+ """
384
+
385
+ def __init__(
386
+ self,
387
+ *,
388
+ current_stream: Stream[_T],
389
+ stream_creator: Callable[[Optional[str]], Stream[_T]],
390
+ get_offset: Callable[[_T], Optional[str]],
391
+ ) -> None:
392
+ self._current_stream = current_stream
393
+ self._stream_creator = stream_creator
394
+ self._get_offset = get_offset
395
+ self._last_offset: Optional[str] = None
396
+ self._iterator = self.__stream__()
397
+
398
+ @property
399
+ def response(self) -> httpx.Response:
400
+ return self._current_stream.response
401
+
402
+ def __next__(self) -> _T:
403
+ return self._iterator.__next__()
404
+
405
+ def __iter__(self) -> Iterator[_T]:
406
+ for item in self._iterator:
407
+ yield item
408
+
409
+ def __enter__(self) -> "ReconnectingStream[_T]":
410
+ return self
411
+
412
+ def __exit__(
413
+ self,
414
+ exc_type: type[BaseException] | None,
415
+ exc: BaseException | None,
416
+ exc_tb: TracebackType | None,
417
+ ) -> None:
418
+ self.close()
419
+
420
+ def close(self) -> None:
421
+ self._current_stream.close()
422
+
423
+ def __stream__(self) -> Iterator[_T]:
424
+ while True:
425
+ try:
426
+ for item in self._current_stream:
427
+ offset = self._get_offset(item)
428
+ if offset is not None:
429
+ self._last_offset = offset
430
+ yield item
431
+ return
432
+ except Exception as e:
433
+ # Reconnect on timeouts
434
+ should_reconnect = False
435
+ if isinstance(e, APITimeoutError):
436
+ should_reconnect = True
437
+ elif isinstance(e, APIStatusError) and getattr(e, "status_code", None) == 408:
438
+ should_reconnect = True
439
+ elif isinstance(e, httpx.TimeoutException):
440
+ should_reconnect = True
441
+
442
+ if should_reconnect:
443
+ # Close existing response before reconnecting
444
+ try:
445
+ self._current_stream.close()
446
+ except Exception:
447
+ pass
448
+ self._current_stream = self._stream_creator(self._last_offset)
449
+ continue
450
+ raise
451
+
452
+
453
+ class AsyncReconnectingStream(Generic[_T]):
454
+ """Async variant of ReconnectingStream supporting auto-reconnect on timeouts."""
455
+
456
+ def __init__(
457
+ self,
458
+ *,
459
+ current_stream: AsyncStream[_T],
460
+ stream_creator: Callable[[Optional[str]], Awaitable[AsyncStream[_T]]],
461
+ get_offset: Callable[[_T], Optional[str]],
462
+ ) -> None:
463
+ self._current_stream = current_stream
464
+ self._stream_creator = stream_creator
465
+ self._get_offset = get_offset
466
+ self._last_offset: Optional[str] = None
467
+ self._iterator = self.__stream__()
468
+
469
+ @property
470
+ def response(self) -> httpx.Response:
471
+ return self._current_stream.response
472
+
473
+ async def __anext__(self) -> _T:
474
+ return await self._iterator.__anext__()
475
+
476
+ async def __aiter__(self) -> AsyncIterator[_T]:
477
+ async for item in self._iterator:
478
+ yield item
479
+
480
+ async def __aenter__(self) -> "AsyncReconnectingStream[_T]":
481
+ return self
482
+
483
+ async def __aexit__(
484
+ self,
485
+ exc_type: type[BaseException] | None,
486
+ exc: BaseException | None,
487
+ exc_tb: TracebackType | None,
488
+ ) -> None:
489
+ await self.close()
490
+
491
+ async def close(self) -> None:
492
+ await self._current_stream.close()
493
+
494
+ async def __stream__(self) -> AsyncIterator[_T]:
495
+ while True:
496
+ try:
497
+ async for item in self._current_stream:
498
+ offset = self._get_offset(item)
499
+ if offset is not None:
500
+ self._last_offset = offset
501
+ yield item
502
+ return
503
+ except Exception as e:
504
+ # Reconnect on timeouts
505
+ should_reconnect = False
506
+ if isinstance(e, APITimeoutError):
507
+ should_reconnect = True
508
+ elif isinstance(e, APIStatusError) and getattr(e, "status_code", None) == 408:
509
+ should_reconnect = True
510
+ elif isinstance(e, httpx.TimeoutException):
511
+ should_reconnect = True
512
+
513
+ if should_reconnect:
514
+ try:
515
+ await self._current_stream.close()
516
+ except Exception:
517
+ pass
518
+ self._current_stream = await self._stream_creator(self._last_offset)
519
+ continue
520
+ raise
@@ -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.58.0" # x-release-please-version
4
+ __version__ = "0.60.0" # x-release-please-version
@@ -249,7 +249,7 @@ class BlueprintsResource(SyncAPIResource):
249
249
  launch_parameters: Optional[LaunchParameters] | NotGiven = NOT_GIVEN,
250
250
  polling_config: PollingConfig | None = None,
251
251
  services: Optional[Iterable[blueprint_create_params.Service]] | NotGiven = NOT_GIVEN,
252
- system_setup_commands: Optional[List[str]] | NotGiven = NOT_GIVEN,
252
+ system_setup_commands: Optional[SequenceNotStr[str]] | NotGiven = NOT_GIVEN,
253
253
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
254
254
  # The extra values given here take precedence over values defined on the client or passed to this method.
255
255
  extra_headers: Headers | None = None,
@@ -766,7 +766,7 @@ class AsyncBlueprintsResource(AsyncAPIResource):
766
766
  launch_parameters: Optional[LaunchParameters] | NotGiven = NOT_GIVEN,
767
767
  polling_config: PollingConfig | None = None,
768
768
  services: Optional[Iterable[blueprint_create_params.Service]] | NotGiven = NOT_GIVEN,
769
- system_setup_commands: Optional[List[str]] | NotGiven = NOT_GIVEN,
769
+ system_setup_commands: Optional[SequenceNotStr[str]] | NotGiven = NOT_GIVEN,
770
770
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
771
771
  # The extra values given here take precedence over values defined on the client or passed to this method.
772
772
  extra_headers: Headers | None = None,