hud-python 0.3.1__tar.gz → 0.3.2__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.

Potentially problematic release.


This version of hud-python might be problematic. Click here for more details.

Files changed (284) hide show
  1. {hud_python-0.3.1 → hud_python-0.3.2}/PKG-INFO +1 -1
  2. {hud_python-0.3.1 → hud_python-0.3.2}/environments/README.md +27 -1
  3. {hud_python-0.3.1 → hud_python-0.3.2}/environments/docker_debug.py +66 -24
  4. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/README.md +1 -1
  5. {hud_python-0.3.1 → hud_python-0.3.2}/hud/task.py +1 -0
  6. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/computer/hud.py +13 -0
  7. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_version.py +1 -1
  8. {hud_python-0.3.1 → hud_python-0.3.2}/hud/version.py +1 -1
  9. {hud_python-0.3.1 → hud_python-0.3.2}/pyproject.toml +1 -1
  10. {hud_python-0.3.1 → hud_python-0.3.2}/.env.example +0 -0
  11. {hud_python-0.3.1 → hud_python-0.3.2}/.github/workflows/ci.yml +0 -0
  12. {hud_python-0.3.1 → hud_python-0.3.2}/.github/workflows/release.yml +0 -0
  13. {hud_python-0.3.1 → hud_python-0.3.2}/.gitignore +0 -0
  14. {hud_python-0.3.1 → hud_python-0.3.2}/LICENSE +0 -0
  15. {hud_python-0.3.1 → hud_python-0.3.2}/MANIFEST.in +0 -0
  16. {hud_python-0.3.1 → hud_python-0.3.2}/README.md +0 -0
  17. {hud_python-0.3.1 → hud_python-0.3.2}/docs/advanced/cla-details.mdx +0 -0
  18. {hud_python-0.3.1 → hud_python-0.3.2}/docs/advanced/environment-control.mdx +0 -0
  19. {hud_python-0.3.1 → hud_python-0.3.2}/docs/advanced/tracing.mdx +0 -0
  20. {hud_python-0.3.1 → hud_python-0.3.2}/docs/advanced/uploading.mdx +0 -0
  21. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/adapters.mdx +0 -0
  22. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/env.mdx +0 -0
  23. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/gym.mdx +0 -0
  24. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/job.mdx +0 -0
  25. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/task.mdx +0 -0
  26. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/taskset.mdx +0 -0
  27. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/telemetry.mdx +0 -0
  28. {hud_python-0.3.1 → hud_python-0.3.2}/docs/api-reference/trajectory.mdx +0 -0
  29. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/adapter.mdx +0 -0
  30. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/agent.mdx +0 -0
  31. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/environment.mdx +0 -0
  32. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/job.mdx +0 -0
  33. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/task.mdx +0 -0
  34. {hud_python-0.3.1 → hud_python-0.3.2}/docs/concepts/trajectory.mdx +0 -0
  35. {hud_python-0.3.1 → hud_python-0.3.2}/docs/docs.json +0 -0
  36. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environment-creation.mdx +0 -0
  37. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environments/browser.mdx +0 -0
  38. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environments/custom-environments.mdx +0 -0
  39. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environments/custom.mdx +0 -0
  40. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environments/osworld-ubuntu.mdx +0 -0
  41. {hud_python-0.3.1 → hud_python-0.3.2}/docs/environments/qa.mdx +0 -0
  42. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/alignment-evaluation.mdx +0 -0
  43. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/benchmarking-agents.mdx +0 -0
  44. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/custom-os-env.mdx +0 -0
  45. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/mcp-agent-tracing.mdx +0 -0
  46. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/web-app-testing.mdx +0 -0
  47. {hud_python-0.3.1 → hud_python-0.3.2}/docs/examples/web-mocks.mdx +0 -0
  48. {hud_python-0.3.1 → hud_python-0.3.2}/docs/favicon.png +0 -0
  49. {hud_python-0.3.1 → hud_python-0.3.2}/docs/logo/hud_logo.svg +0 -0
  50. {hud_python-0.3.1 → hud_python-0.3.2}/docs/logo/hud_logo_dark.svg +0 -0
  51. {hud_python-0.3.1 → hud_python-0.3.2}/docs/quickstart.mdx +0 -0
  52. {hud_python-0.3.1 → hud_python-0.3.2}/docs/running-your-agent.mdx +0 -0
  53. {hud_python-0.3.1 → hud_python-0.3.2}/docs/task-creation.mdx +0 -0
  54. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/Dockerfile +0 -0
  55. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/pyproject.toml +0 -0
  56. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/__init__.py +0 -0
  57. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/display_adapters.py +0 -0
  58. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/emulator.py +0 -0
  59. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/evaluator.py +0 -0
  60. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/kill.py +0 -0
  61. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/main.py +0 -0
  62. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/setup.py +0 -0
  63. {hud_python-0.3.1 → hud_python-0.3.2}/environments/pokemon_controller/src/hud_controller/step.py +0 -0
  64. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/Dockerfile +0 -0
  65. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/pyproject.toml +0 -0
  66. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/__init__.py +0 -0
  67. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/evaluate/__init__.py +0 -0
  68. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/evaluate/matchers.py +0 -0
  69. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/info.py +0 -0
  70. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/setup/__init__.py +0 -0
  71. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/setup/question.py +0 -0
  72. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/step.py +0 -0
  73. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/utils/__init__.py +0 -0
  74. {hud_python-0.3.1 → hud_python-0.3.2}/environments/qa_controller/src/hud_controller/utils/state.py +0 -0
  75. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/Dockerfile +0 -0
  76. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/README.md +0 -0
  77. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/pyproject.toml +0 -0
  78. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/__init__.py +0 -0
  79. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/__main__.py +0 -0
  80. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/browser_computer_tool.py +0 -0
  81. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/__init__.py +0 -0
  82. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/context.py +0 -0
  83. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/cookie_exists.py +0 -0
  84. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/cookie_match.py +0 -0
  85. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/history_length.py +0 -0
  86. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/page_contains.py +0 -0
  87. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/raw_last_action_is.py +0 -0
  88. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/registry.py +0 -0
  89. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/selector_history.py +0 -0
  90. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/sheet_contains.py +0 -0
  91. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/sheets_cell_values.py +0 -0
  92. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/url_match.py +0 -0
  93. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/evaluators/verify_type_action.py +0 -0
  94. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/playwright_with_memory.py +0 -0
  95. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/problems/__init__.py +0 -0
  96. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/problems/navigate_and_verify.py +0 -0
  97. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/problems/registry.py +0 -0
  98. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
  99. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/__init__.py +0 -0
  100. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/anchorbrowser.py +0 -0
  101. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/base.py +0 -0
  102. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/browserbase.py +0 -0
  103. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/hyperbrowser.py +0 -0
  104. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/kernel.py +0 -0
  105. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/providers/steel.py +0 -0
  106. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/runtime.py +0 -0
  107. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/server.py +0 -0
  108. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/__init__.py +0 -0
  109. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/cookies.py +0 -0
  110. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/interact.py +0 -0
  111. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/load_html.py +0 -0
  112. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/navigate.py +0 -0
  113. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/registry.py +0 -0
  114. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/src/hud_controller/setup/sheets.py +0 -0
  115. {hud_python-0.3.1 → hud_python-0.3.2}/environments/remote_browser/test_mcp.sh +0 -0
  116. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/.dockerignore +0 -0
  117. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/.gitignore +0 -0
  118. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/Dockerfile +0 -0
  119. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/README.md +0 -0
  120. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/README.md +0 -0
  121. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/backend/main.py +0 -0
  122. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/backend/pyproject.toml +0 -0
  123. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/app/globals.css +0 -0
  124. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/app/layout.tsx +0 -0
  125. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/app/page.tsx +0 -0
  126. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/next.config.js +0 -0
  127. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/package-lock.json +0 -0
  128. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/package.json +0 -0
  129. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/postcss.config.js +0 -0
  130. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/tailwind.config.js +0 -0
  131. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/frontend/tsconfig.json +0 -0
  132. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/apps/todo/launch.py +0 -0
  133. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/docker-compose.yml +0 -0
  134. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/pyproject.toml +0 -0
  135. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/README.md +0 -0
  136. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/__init__.py +0 -0
  137. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/__main__.py +0 -0
  138. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/evaluators/__init__.py +0 -0
  139. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/evaluators/context.py +0 -0
  140. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/evaluators/registry.py +0 -0
  141. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/evaluators/todo.py +0 -0
  142. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/problems/__init__.py +0 -0
  143. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/problems/registry.py +0 -0
  144. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/problems/todo.py +0 -0
  145. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/runtime.py +0 -0
  146. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/server.py +0 -0
  147. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/services.py +0 -0
  148. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/setup/__init__.py +0 -0
  149. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/setup/registry.py +0 -0
  150. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/src/hud_controller/setup/todo.py +0 -0
  151. {hud_python-0.3.1 → hud_python-0.3.2}/environments/simple_browser/start.sh +0 -0
  152. {hud_python-0.3.1 → hud_python-0.3.2}/examples/README.md +0 -0
  153. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/browser_use.ipynb +0 -0
  154. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/mcp_claude_agent.py +0 -0
  155. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/mcp_openai_agent.py +0 -0
  156. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/mcp_test.ipynb +0 -0
  157. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/mcp_use_agent.py +0 -0
  158. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/sensitive_data.ipynb +0 -0
  159. {hud_python-0.3.1 → hud_python-0.3.2}/examples/agents_tools/simple_task_example.py +0 -0
  160. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/gmail_local.py +0 -0
  161. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/gmail_remote.py +0 -0
  162. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/pokemon_local.ipynb +0 -0
  163. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/pokemon_remote.ipynb +0 -0
  164. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/remote.ipynb +0 -0
  165. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/resources_example.py +0 -0
  166. {hud_python-0.3.1 → hud_python-0.3.2}/examples/environments/simple_browser_example.py +0 -0
  167. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/eval.py +0 -0
  168. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/osworld.ipynb +0 -0
  169. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/sheetbench_direct_example.ipynb +0 -0
  170. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/tasks.ipynb +0 -0
  171. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/telemetry_and_datasets.ipynb +0 -0
  172. {hud_python-0.3.1 → hud_python-0.3.2}/examples/evaluations/wordle_example.ipynb +0 -0
  173. {hud_python-0.3.1 → hud_python-0.3.2}/examples/sheets_bench_cua_example.ipynb +0 -0
  174. {hud_python-0.3.1 → hud_python-0.3.2}/hud/__init__.py +0 -0
  175. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/__init__.py +0 -0
  176. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/claude/__init__.py +0 -0
  177. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/claude/adapter.py +0 -0
  178. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/claude/tests/__init__.py +0 -0
  179. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/claude/tests/test_adapter.py +0 -0
  180. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/common/__init__.py +0 -0
  181. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/common/adapter.py +0 -0
  182. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/common/tests/__init__.py +0 -0
  183. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/common/tests/test_adapter.py +0 -0
  184. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/common/types.py +0 -0
  185. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/operator/__init__.py +0 -0
  186. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/operator/adapter.py +0 -0
  187. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/operator/tests/__init__.py +0 -0
  188. {hud_python-0.3.1 → hud_python-0.3.2}/hud/adapters/operator/tests/test_adapter.py +0 -0
  189. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/__init__.py +0 -0
  190. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/base.py +0 -0
  191. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/claude.py +0 -0
  192. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/claude_plays_pokemon.py +0 -0
  193. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/langchain.py +0 -0
  194. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/misc/__init__.py +0 -0
  195. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/misc/response_agent.py +0 -0
  196. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/operator.py +0 -0
  197. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/tests/__init__.py +0 -0
  198. {hud_python-0.3.1 → hud_python-0.3.2}/hud/agent/tests/test_base.py +0 -0
  199. {hud_python-0.3.1 → hud_python-0.3.2}/hud/datasets.py +0 -0
  200. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/__init__.py +0 -0
  201. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/client.py +0 -0
  202. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/docker_client.py +0 -0
  203. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/environment.py +0 -0
  204. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/local_docker_client.py +0 -0
  205. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/remote_client.py +0 -0
  206. {hud_python-0.3.1 → hud_python-0.3.2}/hud/env/remote_docker_client.py +0 -0
  207. {hud_python-0.3.1 → hud_python-0.3.2}/hud/exceptions.py +0 -0
  208. {hud_python-0.3.1 → hud_python-0.3.2}/hud/gym.py +0 -0
  209. {hud_python-0.3.1 → hud_python-0.3.2}/hud/job.py +0 -0
  210. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/__init__.py +0 -0
  211. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/base.py +0 -0
  212. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/claude.py +0 -0
  213. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/client.py +0 -0
  214. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/langchain.py +0 -0
  215. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/openai.py +0 -0
  216. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/tests/__init__.py +0 -0
  217. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/tests/test_base.py +0 -0
  218. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/tests/test_claude.py +0 -0
  219. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/tests/test_client.py +0 -0
  220. {hud_python-0.3.1 → hud_python-0.3.2}/hud/mcp/tests/test_openai.py +0 -0
  221. {hud_python-0.3.1 → hud_python-0.3.2}/hud/py.typed +0 -0
  222. {hud_python-0.3.1 → hud_python-0.3.2}/hud/server/__init__.py +0 -0
  223. {hud_python-0.3.1 → hud_python-0.3.2}/hud/server/requests.py +0 -0
  224. {hud_python-0.3.1 → hud_python-0.3.2}/hud/server/tests/__init__.py +0 -0
  225. {hud_python-0.3.1 → hud_python-0.3.2}/hud/server/tests/test_requests.py +0 -0
  226. {hud_python-0.3.1 → hud_python-0.3.2}/hud/settings.py +0 -0
  227. {hud_python-0.3.1 → hud_python-0.3.2}/hud/taskset.py +0 -0
  228. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/__init__.py +0 -0
  229. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/_trace.py +0 -0
  230. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/context.py +0 -0
  231. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/exporter.py +0 -0
  232. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/instrumentation/__init__.py +0 -0
  233. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/instrumentation/mcp.py +0 -0
  234. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/instrumentation/registry.py +0 -0
  235. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/job.py +0 -0
  236. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/mcp_models.py +0 -0
  237. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/tests/__init__.py +0 -0
  238. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/tests/test_context.py +0 -0
  239. {hud_python-0.3.1 → hud_python-0.3.2}/hud/telemetry/tests/test_trace.py +0 -0
  240. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/__init__.py +0 -0
  241. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/base.py +0 -0
  242. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/bash.py +0 -0
  243. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/computer/__init__.py +0 -0
  244. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/computer/anthropic.py +0 -0
  245. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/computer/openai.py +0 -0
  246. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/edit.py +0 -0
  247. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/__init__.py +0 -0
  248. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/base.py +0 -0
  249. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/pyautogui.py +0 -0
  250. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/tests/__init__.py +0 -0
  251. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/tests/test_base_executor.py +0 -0
  252. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
  253. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/executors/xdo.py +0 -0
  254. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/helper/README.md +0 -0
  255. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/helper/__init__.py +0 -0
  256. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/helper/mcp_server.py +0 -0
  257. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/helper/server_initialization.py +0 -0
  258. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/helper/utils.py +0 -0
  259. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/playwright_tool.py +0 -0
  260. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/__init__.py +0 -0
  261. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_bash.py +0 -0
  262. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_computer.py +0 -0
  263. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_computer_actions.py +0 -0
  264. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_edit.py +0 -0
  265. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_init.py +0 -0
  266. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_playwright_tool.py +0 -0
  267. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_tools.py +0 -0
  268. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/tests/test_utils.py +0 -0
  269. {hud_python-0.3.1 → hud_python-0.3.2}/hud/tools/utils.py +0 -0
  270. {hud_python-0.3.1 → hud_python-0.3.2}/hud/trajectory.py +0 -0
  271. {hud_python-0.3.1 → hud_python-0.3.2}/hud/types.py +0 -0
  272. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/__init__.py +0 -0
  273. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/agent.py +0 -0
  274. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/common.py +0 -0
  275. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/config.py +0 -0
  276. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/misc.py +0 -0
  277. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/progress.py +0 -0
  278. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/telemetry.py +0 -0
  279. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/__init__.py +0 -0
  280. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_common.py +0 -0
  281. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_config.py +0 -0
  282. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_init.py +0 -0
  283. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_progress.py +0 -0
  284. {hud_python-0.3.1 → hud_python-0.3.2}/hud/utils/tests/test_telemetry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: SDK for the HUD platform.
5
5
  Project-URL: Homepage, https://github.com/hud-evals/hud-python
6
6
  Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
@@ -19,6 +19,26 @@ The official MCP lifecycle specification is an excellent companion reference –
19
19
 
20
20
  Take the phases one at a time; do **not** jump ahead. Each stage’s checkpoint is the foundation for the next.
21
21
 
22
+ ### One-command sanity check (`docker_debug.py`)
23
+
24
+ While you move through the phases it’s handy to run the **interactive checker** to make sure nothing broke:
25
+
26
+ ```bash
27
+ python environments/docker_debug.py my-environment:latest
28
+ ```
29
+
30
+ The script walks the *same* checklist and prints coloured, human-friendly hints whenever something fails.
31
+
32
+ | What it validates | Phase |
33
+ |-------------------|-------|
34
+ | Container starts & logs to **stderr** | 1 |
35
+ | MCP server responds to an `initialize` request | 2 |
36
+ | Discovers `setup`, `evaluate`, and interaction tools | 3 |
37
+ | Calls `setup` / `evaluate`, checks telemetry & startup time | 4 |
38
+ | Spawns three concurrent clients to stress-test resources | 5 |
39
+
40
+ 💡 **Run it after finishing each phase.** If the checker exits with a red ❌, scroll up for the gold-coloured *hint* block – it usually points directly to the root cause.
41
+
22
42
  ---
23
43
 
24
44
  ## Phase 1 – Write a *Simple* Dockerfile
@@ -32,7 +52,8 @@ Why stderr? In Phase 2 the MCP server will reserve **stdout** for JSON-RPC traf
32
52
  ```dockerfile
33
53
  FROM python:3.11-slim
34
54
 
35
- WORKDIR /app
55
+ WORKDIR /apphello
56
+
36
57
  COPY . .
37
58
 
38
59
  # Optional: install requirements
@@ -58,6 +79,8 @@ docker run --rm -it my-environment # look for the log line on stderr
58
79
 
59
80
  Checkpoint reached? Congratulations – move on.
60
81
 
82
+ 👉 Quick sanity check: `python environments/docker_debug.py my-environment:latest` (verifies Phase 1 automatically)
83
+
61
84
  Need inspiration? Skim the real Dockerfiles used in the example browser environments:
62
85
  • [`simple_browser/Dockerfile`](./simple_browser/Dockerfile)
63
86
  • [`remote_browser/Dockerfile`](./remote_browser/Dockerfile)
@@ -129,6 +152,7 @@ CMD ["uv", "pip", "run", "python", "-m", "your_module_name"] # Replace 'your_mo
129
152
  | 1 | **Direct stdio test** – pipe the JSON below into your script | Proves the Python code handles `initialize` without any client or Docker noise |
130
153
  | 2 | **MCP Inspector** – `npx @modelcontextprotocol/inspector python -m my_package.server` | Lets you click around: view capabilities, tools, resources |
131
154
  | 3 | **Inside Docker** – rebuild the image and run it | This is *exactly* how HUD will execute the server |
155
+ | 4 | **Run `docker_debug.py`** – `python environments/docker_debug.py my-environment:latest` | Combines the above checks & points out common mistakes |
132
156
 
133
157
  #### JSON for step 1
134
158
 
@@ -154,6 +178,8 @@ If all three validations succeed, you have a real MCP server – time to make it
154
178
 
155
179
  **Goal →** tools are discoverable in the Inspector *and* callable from the HUD SDK.
156
180
 
181
+ 👉 After wiring in the tools, confirm with `python environments/docker_debug.py my-environment:latest` – it now checks for their presence and basic execution.
182
+
157
183
  1. Write **`setup`** and **`evaluate`** tools first – they are *lifecycle* tools and never shown to the LLM.
158
184
  2. Register at least one **interaction** tool (`computer`, `playwright`, or your own).
159
185
 
@@ -400,7 +400,7 @@ async def debug_mcp_docker(image: str) -> None:
400
400
  cmd = ["docker"] + mcp_config["test"]["args"]
401
401
  log_command(cmd)
402
402
 
403
- log_info("Creating MCP client with auto-initialization...")
403
+ log_info("Creating MCP client via hud...")
404
404
  client = MCPClient(mcp_config=mcp_config, verbose=False)
405
405
 
406
406
  await client.initialize()
@@ -473,7 +473,8 @@ async def debug_mcp_docker(image: str) -> None:
473
473
  show_progress_bar(phases_completed, total_phases)
474
474
  return
475
475
 
476
- await client.close()
476
+ # Keep client open for Phase 4
477
+ # await client.close()
477
478
 
478
479
  except Exception as e:
479
480
  log_error(f"Tool discovery failed: {e}")
@@ -503,14 +504,21 @@ async def debug_mcp_docker(image: str) -> None:
503
504
  setup_success = False
504
505
  if "setup" in [t.name for t in tools]:
505
506
  try:
506
- log_info("Calling setup tool with test configuration...")
507
- setup_result = await client.call_tool("setup", {"config": {}})
507
+ log_info("Calling setup tool (no params to test existence)...")
508
+ setup_result = await client.call_tool("setup", {})
508
509
 
509
- if isinstance(setup_result, dict) and "status" in setup_result:
510
+ # Even if it errors, if we get a response it means the tool exists
511
+ if hasattr(setup_result, "isError") and setup_result.isError:
512
+ log_info(
513
+ f"Setup tool exists but returned error (expected): {setup_result.content[0].text if setup_result.content else 'Unknown error'}"
514
+ )
515
+ setup_success = True # Tool exists, that's what we're checking
516
+ elif isinstance(setup_result, dict) and "status" in setup_result:
510
517
  log_success(f"Setup tool returned: {setup_result}")
511
518
  setup_success = setup_result.get("status") == "success"
512
519
  else:
513
- log_error(f"Setup tool returned unexpected format: {setup_result}")
520
+ log_success(f"Setup tool exists and returned: {type(setup_result)}")
521
+ setup_success = True
514
522
  except Exception as e:
515
523
  log_error(f"Setup tool failed: {e}")
516
524
 
@@ -518,10 +526,16 @@ async def debug_mcp_docker(image: str) -> None:
518
526
  evaluate_success = False
519
527
  if "evaluate" in [t.name for t in tools]:
520
528
  try:
521
- log_info("Calling evaluate tool...")
522
- eval_result = await client.call_tool("evaluate", {"config": {}})
529
+ log_info("Calling evaluate tool (no params to test existence)...")
530
+ eval_result = await client.call_tool("evaluate", {})
523
531
 
524
- if (
532
+ # Even if it errors, if we get a response it means the tool exists
533
+ if hasattr(eval_result, "isError") and eval_result.isError:
534
+ log_info(
535
+ f"Evaluate tool exists but returned error (expected): {eval_result.content[0].text if eval_result.content else 'Unknown error'}"
536
+ )
537
+ evaluate_success = True # Tool exists, that's what we're checking
538
+ elif (
525
539
  isinstance(eval_result, dict)
526
540
  and "reward" in eval_result
527
541
  and "done" in eval_result
@@ -531,7 +545,8 @@ async def debug_mcp_docker(image: str) -> None:
531
545
  )
532
546
  evaluate_success = True
533
547
  else:
534
- log_error(f"Evaluate tool returned unexpected format: {eval_result}")
548
+ log_success(f"Evaluate tool exists and returned: {type(eval_result)}")
549
+ evaluate_success = True
535
550
  except Exception as e:
536
551
  log_error(f"Evaluate tool failed: {e}")
537
552
 
@@ -540,16 +555,20 @@ async def debug_mcp_docker(image: str) -> None:
540
555
  resources_found = []
541
556
  try:
542
557
  session = client._sessions.get("test")
543
- if session:
544
- resources = await session.list_resources()
545
- for res in resources:
558
+ if session and hasattr(session, "connector"):
559
+ resources = await session.connector.list_resources()
560
+ for res in resources.resources:
546
561
  resources_found.append(res.uri)
547
562
  if "telemetry://live" in res.uri:
548
563
  log_info(f"Found telemetry resource: {res.uri}")
549
564
  elif "registry" in res.uri:
550
565
  log_info(f"Found registry resource: {res.uri}")
566
+ if not resources_found:
567
+ log_info("No resources exposed by this environment")
568
+ else:
569
+ log_info("Session connector not available for resource listing")
551
570
  except Exception as e:
552
- log_error(f"Resource check failed: {e}")
571
+ log_info(f"Resource check skipped: {e}")
553
572
 
554
573
  # Performance check
555
574
  log_info("Checking initialization performance...")
@@ -569,11 +588,19 @@ async def debug_mcp_docker(image: str) -> None:
569
588
  log_success("Remote deployment readiness checks passed")
570
589
  else:
571
590
  log_error("Missing or failing lifecycle tools")
591
+ await client.close()
572
592
  show_progress_bar(phases_completed, total_phases)
573
593
  return
574
594
 
595
+ # Close client from Phase 3/4
596
+ await client.close()
597
+
575
598
  except Exception as e:
576
599
  log_error(f"Phase 4 failed: {e}")
600
+ try:
601
+ await client.close()
602
+ except:
603
+ pass
577
604
  show_progress_bar(phases_completed, total_phases)
578
605
  return
579
606
 
@@ -583,7 +610,6 @@ async def debug_mcp_docker(image: str) -> None:
583
610
  concurrent_clients = []
584
611
  try:
585
612
  import psutil
586
- import asyncio
587
613
 
588
614
  # Get baseline resource usage
589
615
  process = psutil.Process()
@@ -635,15 +661,24 @@ async def debug_mcp_docker(image: str) -> None:
635
661
  # Test clean shutdown
636
662
  log_info("Testing clean shutdown of all clients...")
637
663
  for i, client in enumerate(concurrent_clients):
638
- await client.close()
639
- log_info(f"Client {i + 1} disconnected")
664
+ try:
665
+ await client.close()
666
+ log_info(f"Client {i + 1} disconnected")
667
+ except Exception as e:
668
+ log_info(f"Client {i + 1} close error: {e}")
640
669
 
641
- # Verify cleanup
642
- await asyncio.sleep(1)
643
- final_memory = process.memory_info().rss / 1024 / 1024
644
- memory_freed = current_memory - final_memory
670
+ # Small delay to allow cleanup
671
+ try:
672
+ await asyncio.sleep(0.5)
673
+ except asyncio.CancelledError:
674
+ pass
645
675
 
646
- log_info(f"After cleanup: Memory={final_memory:.1f}MB (freed {memory_freed:.1f}MB)")
676
+ try:
677
+ final_memory = process.memory_info().rss / 1024 / 1024
678
+ memory_freed = current_memory - final_memory
679
+ log_info(f"After cleanup: Memory={final_memory:.1f}MB (freed {memory_freed:.1f}MB)")
680
+ except:
681
+ pass
647
682
 
648
683
  phases_completed = 5
649
684
  log_success("Concurrent client testing completed")
@@ -681,9 +716,16 @@ async def debug_mcp_docker(image: str) -> None:
681
716
 
682
717
  finally:
683
718
  # Ensure all clients are closed
684
- for client in concurrent_clients:
719
+ if concurrent_clients:
720
+ log_info("Final cleanup of any remaining clients...")
721
+ for client in concurrent_clients:
722
+ try:
723
+ await client.close()
724
+ except:
725
+ pass
726
+ # Small delay for cleanup
685
727
  try:
686
- await client.close()
728
+ await asyncio.sleep(0.2)
687
729
  except:
688
730
  pass
689
731
 
@@ -44,7 +44,7 @@ import hud
44
44
  from mcp_use import MCPClient
45
45
  from hud.mcp import ClaudeMCPAgent
46
46
 
47
- BASE_URL = "https://orchestrator-v3.up.railway.app"
47
+ BASE_URL = "https://mcp.hud.so"
48
48
  HUD_API_KEY = os.getenv("HUD_API_KEY")
49
49
 
50
50
  async def main():
@@ -62,6 +62,7 @@ class Task(BaseModel):
62
62
  # Description of the task, for extra information about its purpose and context
63
63
  description: str | None = None
64
64
 
65
+ # Gold file url for the task
65
66
  gold_file_url: str | None = None
66
67
 
67
68
  @classmethod
@@ -31,6 +31,7 @@ class HudComputerTool:
31
31
  height: int | None = None,
32
32
  display_num: int | None = None,
33
33
  platform_type: Literal["auto", "xdo", "pyautogui"] = "auto",
34
+ executor: BaseExecutor | None = None,
34
35
  rescale_images: bool = False,
35
36
  ) -> None:
36
37
  """
@@ -44,6 +45,7 @@ class HudComputerTool:
44
45
  - "auto": Automatically detect based on platform
45
46
  - "xdo": Use XDOExecutor (Linux/X11 only)
46
47
  - "pyautogui": Use PyAutoGUIExecutor (cross-platform)
48
+ executor: The executor to use. If None, will be auto-detected based on platform_type.
47
49
  rescale_images: If True, rescale screenshots. If False, only rescale action coordinates
48
50
  """
49
51
  # Use provided dimensions or defaults
@@ -70,6 +72,17 @@ class HudComputerTool:
70
72
  # Check if we need to scale
71
73
  self.needs_scaling = self.scale != 1.0
72
74
 
75
+ if executor is None:
76
+ self._choose_executor(platform_type, display_num)
77
+ else:
78
+ self.executor = executor
79
+
80
+ def _choose_executor(
81
+ self,
82
+ platform_type: Literal["auto", "xdo", "pyautogui"],
83
+ display_num: int | None,
84
+ ) -> None:
85
+ """Choose executor based on platform_type."""
73
86
  # Choose executor based on platform_type
74
87
  if platform_type == "auto":
75
88
  # Auto-detect based on platform
@@ -5,4 +5,4 @@ def test_import():
5
5
  """Test that the package can be imported."""
6
6
  import hud
7
7
 
8
- assert hud.__version__ == "0.3.1"
8
+ assert hud.__version__ == "0.3.2"
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.3.1"
7
+ __version__ = "0.3.2"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hud-python"
3
- version = "0.3.1"
3
+ version = "0.3.2"
4
4
  description = "SDK for the HUD platform."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11, <3.14"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes