hud-python 0.3.5__py3-none-any.whl → 0.4.1__py3-none-any.whl

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 (192) hide show
  1. hud/__init__.py +22 -89
  2. hud/agents/__init__.py +15 -0
  3. hud/agents/art.py +101 -0
  4. hud/agents/base.py +599 -0
  5. hud/{mcp → agents}/claude.py +373 -321
  6. hud/{mcp → agents}/langchain.py +250 -250
  7. hud/agents/misc/__init__.py +7 -0
  8. hud/{agent → agents}/misc/response_agent.py +80 -80
  9. hud/{mcp → agents}/openai.py +352 -334
  10. hud/agents/openai_chat_generic.py +154 -0
  11. hud/{mcp → agents}/tests/__init__.py +1 -1
  12. hud/agents/tests/test_base.py +742 -0
  13. hud/agents/tests/test_claude.py +324 -0
  14. hud/{mcp → agents}/tests/test_client.py +363 -324
  15. hud/{mcp → agents}/tests/test_openai.py +237 -238
  16. hud/cli/__init__.py +617 -0
  17. hud/cli/__main__.py +8 -0
  18. hud/cli/analyze.py +371 -0
  19. hud/cli/analyze_metadata.py +230 -0
  20. hud/cli/build.py +427 -0
  21. hud/cli/clone.py +185 -0
  22. hud/cli/cursor.py +92 -0
  23. hud/cli/debug.py +392 -0
  24. hud/cli/docker_utils.py +83 -0
  25. hud/cli/init.py +281 -0
  26. hud/cli/interactive.py +353 -0
  27. hud/cli/mcp_server.py +756 -0
  28. hud/cli/pull.py +336 -0
  29. hud/cli/push.py +370 -0
  30. hud/cli/remote_runner.py +311 -0
  31. hud/cli/runner.py +160 -0
  32. hud/cli/tests/__init__.py +3 -0
  33. hud/cli/tests/test_analyze.py +284 -0
  34. hud/cli/tests/test_cli_init.py +265 -0
  35. hud/cli/tests/test_cli_main.py +27 -0
  36. hud/cli/tests/test_clone.py +142 -0
  37. hud/cli/tests/test_cursor.py +253 -0
  38. hud/cli/tests/test_debug.py +453 -0
  39. hud/cli/tests/test_mcp_server.py +139 -0
  40. hud/cli/tests/test_utils.py +388 -0
  41. hud/cli/utils.py +263 -0
  42. hud/clients/README.md +143 -0
  43. hud/clients/__init__.py +16 -0
  44. hud/clients/base.py +379 -0
  45. hud/clients/fastmcp.py +222 -0
  46. hud/clients/mcp_use.py +278 -0
  47. hud/clients/tests/__init__.py +1 -0
  48. hud/clients/tests/test_client_integration.py +111 -0
  49. hud/clients/tests/test_fastmcp.py +342 -0
  50. hud/clients/tests/test_protocol.py +188 -0
  51. hud/clients/utils/__init__.py +1 -0
  52. hud/clients/utils/retry_transport.py +160 -0
  53. hud/datasets.py +322 -192
  54. hud/misc/__init__.py +1 -0
  55. hud/{agent → misc}/claude_plays_pokemon.py +292 -283
  56. hud/otel/__init__.py +35 -0
  57. hud/otel/collector.py +142 -0
  58. hud/otel/config.py +164 -0
  59. hud/otel/context.py +536 -0
  60. hud/otel/exporters.py +366 -0
  61. hud/otel/instrumentation.py +97 -0
  62. hud/otel/processors.py +118 -0
  63. hud/otel/tests/__init__.py +1 -0
  64. hud/otel/tests/test_processors.py +197 -0
  65. hud/server/__init__.py +5 -5
  66. hud/server/context.py +114 -0
  67. hud/server/helper/__init__.py +5 -0
  68. hud/server/low_level.py +132 -0
  69. hud/server/server.py +166 -0
  70. hud/server/tests/__init__.py +3 -0
  71. hud/settings.py +73 -79
  72. hud/shared/__init__.py +5 -0
  73. hud/{exceptions.py → shared/exceptions.py} +180 -180
  74. hud/{server → shared}/requests.py +264 -264
  75. hud/shared/tests/test_exceptions.py +157 -0
  76. hud/{server → shared}/tests/test_requests.py +275 -275
  77. hud/telemetry/__init__.py +25 -30
  78. hud/telemetry/instrument.py +379 -0
  79. hud/telemetry/job.py +309 -141
  80. hud/telemetry/replay.py +74 -0
  81. hud/telemetry/trace.py +83 -0
  82. hud/tools/__init__.py +33 -34
  83. hud/tools/base.py +365 -65
  84. hud/tools/bash.py +161 -137
  85. hud/tools/computer/__init__.py +15 -13
  86. hud/tools/computer/anthropic.py +437 -420
  87. hud/tools/computer/hud.py +376 -334
  88. hud/tools/computer/openai.py +295 -292
  89. hud/tools/computer/settings.py +82 -0
  90. hud/tools/edit.py +314 -290
  91. hud/tools/executors/__init__.py +30 -30
  92. hud/tools/executors/base.py +539 -532
  93. hud/tools/executors/pyautogui.py +621 -619
  94. hud/tools/executors/tests/__init__.py +1 -1
  95. hud/tools/executors/tests/test_base_executor.py +338 -338
  96. hud/tools/executors/tests/test_pyautogui_executor.py +165 -165
  97. hud/tools/executors/xdo.py +511 -503
  98. hud/tools/{playwright_tool.py → playwright.py} +412 -379
  99. hud/tools/tests/__init__.py +3 -3
  100. hud/tools/tests/test_base.py +282 -0
  101. hud/tools/tests/test_bash.py +158 -152
  102. hud/tools/tests/test_bash_extended.py +197 -0
  103. hud/tools/tests/test_computer.py +425 -52
  104. hud/tools/tests/test_computer_actions.py +34 -34
  105. hud/tools/tests/test_edit.py +259 -240
  106. hud/tools/tests/test_init.py +27 -27
  107. hud/tools/tests/test_playwright_tool.py +183 -183
  108. hud/tools/tests/test_tools.py +145 -157
  109. hud/tools/tests/test_utils.py +156 -156
  110. hud/tools/types.py +72 -0
  111. hud/tools/utils.py +50 -50
  112. hud/types.py +136 -89
  113. hud/utils/__init__.py +10 -16
  114. hud/utils/async_utils.py +65 -0
  115. hud/utils/design.py +168 -0
  116. hud/utils/mcp.py +55 -0
  117. hud/utils/progress.py +149 -149
  118. hud/utils/telemetry.py +66 -66
  119. hud/utils/tests/test_async_utils.py +173 -0
  120. hud/utils/tests/test_init.py +17 -21
  121. hud/utils/tests/test_progress.py +261 -225
  122. hud/utils/tests/test_telemetry.py +82 -37
  123. hud/utils/tests/test_version.py +8 -8
  124. hud/version.py +7 -7
  125. hud_python-0.4.1.dist-info/METADATA +476 -0
  126. hud_python-0.4.1.dist-info/RECORD +132 -0
  127. hud_python-0.4.1.dist-info/entry_points.txt +3 -0
  128. {hud_python-0.3.5.dist-info → hud_python-0.4.1.dist-info}/licenses/LICENSE +21 -21
  129. hud/adapters/__init__.py +0 -8
  130. hud/adapters/claude/__init__.py +0 -5
  131. hud/adapters/claude/adapter.py +0 -180
  132. hud/adapters/claude/tests/__init__.py +0 -1
  133. hud/adapters/claude/tests/test_adapter.py +0 -519
  134. hud/adapters/common/__init__.py +0 -6
  135. hud/adapters/common/adapter.py +0 -178
  136. hud/adapters/common/tests/test_adapter.py +0 -289
  137. hud/adapters/common/types.py +0 -446
  138. hud/adapters/operator/__init__.py +0 -5
  139. hud/adapters/operator/adapter.py +0 -108
  140. hud/adapters/operator/tests/__init__.py +0 -1
  141. hud/adapters/operator/tests/test_adapter.py +0 -370
  142. hud/agent/__init__.py +0 -19
  143. hud/agent/base.py +0 -126
  144. hud/agent/claude.py +0 -271
  145. hud/agent/langchain.py +0 -215
  146. hud/agent/misc/__init__.py +0 -3
  147. hud/agent/operator.py +0 -268
  148. hud/agent/tests/__init__.py +0 -1
  149. hud/agent/tests/test_base.py +0 -202
  150. hud/env/__init__.py +0 -11
  151. hud/env/client.py +0 -35
  152. hud/env/docker_client.py +0 -349
  153. hud/env/environment.py +0 -446
  154. hud/env/local_docker_client.py +0 -358
  155. hud/env/remote_client.py +0 -212
  156. hud/env/remote_docker_client.py +0 -292
  157. hud/gym.py +0 -130
  158. hud/job.py +0 -773
  159. hud/mcp/__init__.py +0 -17
  160. hud/mcp/base.py +0 -631
  161. hud/mcp/client.py +0 -312
  162. hud/mcp/tests/test_base.py +0 -512
  163. hud/mcp/tests/test_claude.py +0 -294
  164. hud/task.py +0 -149
  165. hud/taskset.py +0 -237
  166. hud/telemetry/_trace.py +0 -347
  167. hud/telemetry/context.py +0 -230
  168. hud/telemetry/exporter.py +0 -575
  169. hud/telemetry/instrumentation/__init__.py +0 -3
  170. hud/telemetry/instrumentation/mcp.py +0 -259
  171. hud/telemetry/instrumentation/registry.py +0 -59
  172. hud/telemetry/mcp_models.py +0 -270
  173. hud/telemetry/tests/__init__.py +0 -1
  174. hud/telemetry/tests/test_context.py +0 -210
  175. hud/telemetry/tests/test_trace.py +0 -312
  176. hud/tools/helper/README.md +0 -56
  177. hud/tools/helper/__init__.py +0 -9
  178. hud/tools/helper/mcp_server.py +0 -78
  179. hud/tools/helper/server_initialization.py +0 -115
  180. hud/tools/helper/utils.py +0 -58
  181. hud/trajectory.py +0 -94
  182. hud/utils/agent.py +0 -37
  183. hud/utils/common.py +0 -256
  184. hud/utils/config.py +0 -120
  185. hud/utils/deprecation.py +0 -115
  186. hud/utils/misc.py +0 -53
  187. hud/utils/tests/test_common.py +0 -277
  188. hud/utils/tests/test_config.py +0 -129
  189. hud_python-0.3.5.dist-info/METADATA +0 -284
  190. hud_python-0.3.5.dist-info/RECORD +0 -120
  191. /hud/{adapters/common → shared}/tests/__init__.py +0 -0
  192. {hud_python-0.3.5.dist-info → hud_python-0.4.1.dist-info}/WHEEL +0 -0
hud/version.py CHANGED
@@ -1,7 +1,7 @@
1
- """
2
- Version information for the HUD SDK.
3
- """
4
-
5
- from __future__ import annotations
6
-
7
- __version__ = "0.3.5"
1
+ """
2
+ Version information for the HUD SDK.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ __version__ = "0.4.1"
@@ -0,0 +1,476 @@
1
+ Metadata-Version: 2.4
2
+ Name: hud-python
3
+ Version: 0.4.1
4
+ Summary: SDK for the HUD platform.
5
+ Project-URL: Homepage, https://github.com/hud-evals/hud-python
6
+ Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
7
+ Project-URL: Documentation, https://docs.hud.so
8
+ Author-email: HUD SDK <founders@hud.so>
9
+ License: MIT License
10
+
11
+ Copyright (c) 2025 Human Union Data, Inc
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ License-File: LICENSE
31
+ Classifier: Development Status :: 4 - Beta
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: Programming Language :: Python :: 3
34
+ Classifier: Programming Language :: Python :: 3.11
35
+ Classifier: Programming Language :: Python :: 3.12
36
+ Classifier: Programming Language :: Python :: 3.13
37
+ Requires-Python: <3.14,>=3.11
38
+ Requires-Dist: fastmcp>=2.11.2
39
+ Requires-Dist: httpx<1,>=0.23.0
40
+ Requires-Dist: hud-mcp-python-sdk>=0.1.0
41
+ Requires-Dist: opentelemetry-api>=1.34.1
42
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.34.1
43
+ Requires-Dist: opentelemetry-instrumentation-mcp>=0.44.1
44
+ Requires-Dist: opentelemetry-sdk>=1.34.1
45
+ Requires-Dist: pathspec>=0.12.1
46
+ Requires-Dist: pydantic-settings<3,>=2
47
+ Requires-Dist: pydantic<3,>=2
48
+ Requires-Dist: questionary>=1.10.0
49
+ Requires-Dist: rich>=13.0.0
50
+ Requires-Dist: toml>=0.10.2
51
+ Requires-Dist: typer>=0.9.0
52
+ Requires-Dist: watchfiles>=0.21.0
53
+ Requires-Dist: wrapt>=1.14.0
54
+ Provides-Extra: agent
55
+ Requires-Dist: anthropic; extra == 'agent'
56
+ Requires-Dist: datasets>=2.14.0; extra == 'agent'
57
+ Requires-Dist: dotenv>=0.9.9; extra == 'agent'
58
+ Requires-Dist: hud-mcp-use-python-sdk>=0.1.0; extra == 'agent'
59
+ Requires-Dist: langchain; extra == 'agent'
60
+ Requires-Dist: langchain-anthropic; extra == 'agent'
61
+ Requires-Dist: langchain-openai; extra == 'agent'
62
+ Requires-Dist: numpy>=1.24.0; extra == 'agent'
63
+ Requires-Dist: openai; extra == 'agent'
64
+ Provides-Extra: dev
65
+ Requires-Dist: aiodocker>=0.24.0; extra == 'dev'
66
+ Requires-Dist: anthropic; extra == 'dev'
67
+ Requires-Dist: datasets>=2.14.0; extra == 'dev'
68
+ Requires-Dist: dotenv>=0.9.9; extra == 'dev'
69
+ Requires-Dist: hud-mcp-use-python-sdk>=0.1.0; extra == 'dev'
70
+ Requires-Dist: inspect-ai>=0.3.80; extra == 'dev'
71
+ Requires-Dist: ipykernel; extra == 'dev'
72
+ Requires-Dist: ipython<9; extra == 'dev'
73
+ Requires-Dist: jupyter-client; extra == 'dev'
74
+ Requires-Dist: jupyter-core; extra == 'dev'
75
+ Requires-Dist: langchain; extra == 'dev'
76
+ Requires-Dist: langchain-anthropic; extra == 'dev'
77
+ Requires-Dist: langchain-openai; extra == 'dev'
78
+ Requires-Dist: numpy>=1.24.0; extra == 'dev'
79
+ Requires-Dist: openai; extra == 'dev'
80
+ Requires-Dist: pillow>=11.1.0; extra == 'dev'
81
+ Requires-Dist: playwright; extra == 'dev'
82
+ Requires-Dist: pyautogui>=0.9.54; extra == 'dev'
83
+ Requires-Dist: pyright==1.1.401; extra == 'dev'
84
+ Requires-Dist: pytest-asyncio; extra == 'dev'
85
+ Requires-Dist: pytest-cov; extra == 'dev'
86
+ Requires-Dist: pytest-mock; extra == 'dev'
87
+ Requires-Dist: pytest<9,>=8.1.1; extra == 'dev'
88
+ Requires-Dist: ruff>=0.11.8; extra == 'dev'
89
+ Requires-Dist: setuptools; extra == 'dev'
90
+ Requires-Dist: textdistance<5,>=4.5.0; extra == 'dev'
91
+ Description-Content-Type: text/markdown
92
+
93
+ <div align="left">
94
+ <picture>
95
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo_dark.svg">
96
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo.svg">
97
+ <img src="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo.svg" alt="HUD" width="150" style="margin-bottom: 24px;"/>
98
+ </picture>
99
+ </div>
100
+
101
+ OSS RL environment + evals toolkit. Wrap software as environments, run benchmarks, and train with RL – locally or at scale.
102
+
103
+ [![PyPI version](https://img.shields.io/pypi/v/hud-python?style=flat-square)](https://pypi.org/project/hud-python/)
104
+ [![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)](LICENSE)
105
+ [![Add docs to Cursor](https://img.shields.io/badge/Add%20docs%20to-Cursor-black?style=flat-square)](https://cursor.com/en/install-mcp?name=docs-hud-python&config=eyJ1cmwiOiJodHRwczovL2RvY3MuaHVkLnNvL21jcCJ9)
106
+ [![Discord](https://img.shields.io/discord/1327447144772407390?label=Discord&logo=discord&style=flat-square)](https://discord.gg/wkjtmHYYjm)
107
+ [![X Follow](https://img.shields.io/twitter/follow/hud_evals?style=social)](https://x.com/intent/user?screen_name=hud_evals)
108
+ [![Shop](https://img.shields.io/badge/_-white.svg?label=shop&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAF6SURBVChTlZA9ixNhFIWf8yaTpFHRRMXCKpAZhCAYFvwoLHZhwUKw9A9YCJb+Bq0sxGbBQrTxX1j41dvIRAjGZbdwRUUGIzPMeyw2swS3WZ/ynHvP5VylafoAWAd+5Xm+wX+SpukmcMf29RDCZrD9BViz3f53+CjYngKZpD5A2/Y7SQBMJpOkKIprdV1vdzqdHzHGblmW9Ww2+5pl2TmAxWKxmM/nP8fj8cmqqtZijJ9sb0u6ABBWjh0riuIt8CqE8LGu66e2d5MkeQ8QY3xme7fb7T4ZjUbrZVl+jjFuSXoEXGxCDgIl9WzfAO5LSmzvNB771R6vzG4Bx0MIt/M8vwV8aLyDQNt70+n0G1AspaTxVln+aghQluVsKbvxVysflT9NQK/XO7R/SGiQ9Nt2aftElmWXJd1kv0kbeANQVdWl4XB4XtJouXaqNRgMHkrqS+r0+/3XwD1JXdungRfAVWBi+6WkK8D3EMJz22cl3W21WgNgx3YAzvwFd0Chdq03gKUAAAAASUVORK5CYII=&style=social)](https://shop.hud.so)
109
+
110
+
111
+ ### Are you a startup building agents?
112
+
113
+ [📅 Hop on a call](https://cal.com/jay-ram-z6st6w/demo) or [📧 founders@hud.so](mailto:founders@hud.so)
114
+
115
+ ## Highlights
116
+
117
+ - 🚀 **[MCP-native connectivity](https://docs.hud.so/core-concepts/mcp-protocol)** – any agent can call any hud environment.
118
+ - ⚡️ **[Live telemetry](https://app.hud.so)** – inspect every tool call, observation, and reward in real time.
119
+ - 🗂️ **[Public benchmarks](https://app.hud.so/leaderboards)** – OSWorld-Verified, SheetBench-50, and more.
120
+ - 🌱 **[Reinforcement learning built-in](rl/)** – Verifiers gym pipelines for GRPO training.
121
+ - 🌐 **[Cloud browsers](environments/remote_browser/)** – AnchorBrowser, Steel, BrowserBase integrations for browser automation.
122
+ - 🛠️ **[Hot-reload dev loop](environments/README.md#phase-5-hot-reload-development-with-cursor-agent)** – `hud dev` for iterating on environments without rebuilds.
123
+
124
+ > We welcome contributors and feature requests – open an issue or hop on a call to discuss improvements!
125
+
126
+ ## Installation
127
+
128
+ ```bash
129
+ # Core installation - MCP servers, telemetry, basic tools for environment design
130
+ pip install hud-python
131
+
132
+ # Agent installation - Adds AI providers, datasets
133
+ pip install "hud-python[agent]"
134
+
135
+ # CLI utilities
136
+ uv tool install hud-python
137
+ # uv tool update-shell
138
+
139
+ # From source (latest)
140
+ git clone https://github.com/hud-evals/hud-python
141
+ pip install -e "hud-python[dev]"
142
+ ```
143
+
144
+ > See [docs.hud.so](https://docs.hud.so), or add docs to any MCP client:
145
+ > `claude mcp add docs-hud https://docs.hud.so/mcp`
146
+
147
+ ## Quickstart
148
+
149
+ For a tutorial that explains the agent and evaluation design, run ([see quickstart docs](https://docs.hud.so/quickstart)):
150
+
151
+ ```python
152
+ uvx hud-python quickstart
153
+ ```
154
+
155
+ Or just write your own agent loop (more [examples here](examples/)):
156
+
157
+ ```python
158
+ import asyncio, hud, os
159
+ from hud.settings import settings
160
+ from hud.clients import MCPClient
161
+ from hud.agents import ClaudeAgent
162
+ from hud.datasets import Task # See docs: https://docs.hud.so/reference/tasks
163
+
164
+ async def main() -> None:
165
+ with hud.trace("Quick Start 2048"): # All telemetry works for any MCP-based agent (see https://app.hud.so)
166
+ task = {
167
+ "prompt": "Reach 64 in 2048.",
168
+ "mcp_config": {
169
+ "hud": {
170
+ "url": "https://mcp.hud.so/v3/mcp", # HUD's cloud MCP server (see https://docs.hud.so/core-concepts/architecture)
171
+ "headers": {
172
+ "Authorization": f"Bearer {settings.api_key}", # Get your key at https://app.hud.so
173
+ "Mcp-Image": "hudpython/hud-text-2048:v1.2" # Docker image from https://hub.docker.com/u/hudpython
174
+ }
175
+ }
176
+ },
177
+ "evaluate_tool": {"name": "evaluate", "arguments": {"name": "max_number", "arguments": {"target": 64}}},
178
+ }
179
+ task = Task(**task)
180
+
181
+ # 1. Define the client explicitly:
182
+ client = MCPClient(mcp_config=task.mcp_config)
183
+ agent = ClaudeAgent(
184
+ mcp_client=client,
185
+ model="claude-sonnet-4-20250514", # requires ANTHROPIC_API_KEY
186
+ )
187
+
188
+ result = await agent.run(task)
189
+
190
+ # 2. Or just:
191
+ # result = await ClaudeAgent().run(task)
192
+
193
+ print(f"Reward: {result.reward}")
194
+ await client.shutdown()
195
+
196
+ asyncio.run(main())
197
+ ```
198
+
199
+ > Every HUD environment is MCP-based and interactable from anywhere. Requires `HUD_API_KEY` and `ANTHROPIC_API_KEY`.
200
+
201
+ ## Reinforcement Learning with GRPO
202
+
203
+ This is a Qwen-2.5-3B agent training a policy on the [`text-2048`](environments/text_2048/) environment using [Verifiers](rl/verifiers/):
204
+
205
+ ![RL curve](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/rl_2.png)
206
+
207
+ To start training, check out the [`rl/README.md`](rl/README.md) folder:
208
+
209
+ ```bash
210
+ git clone https://github.com/hud-evals/hud-python
211
+ cd hud-python
212
+ python rl/verifiers/train_2048.py
213
+ ```
214
+
215
+ Any hud MCP environment and evaluation works with our RL pipeline. Even our remote configurations!
216
+
217
+ > The [`rl/README.md`](rl/README.md) walks you through several examples of RL training and takes less than 15 minutes to set up for your custom agent!
218
+
219
+ ## Benchmarking Agents
220
+
221
+ This is Claude Computer Use running on our proprietary financial analyst benchmark [SheetBench-50](https://huggingface.co/datasets/hud-evals/SheetBench-50):
222
+
223
+ ![Trace screenshot](https://raw.githubusercontent.com/hud-evals/hud-python/l/text-2048/docs/src/images/trace_sheet.gif)
224
+
225
+ > [See this trace on _app.hud.so_](https://app.hud.so/trace/9e212e9e-3627-4f1f-9eb5-c6d03c59070a)
226
+
227
+ This example runs the full dataset (only takes ~20 minutes) using [run_evaluation.py](examples/run_evaluation.py):
228
+
229
+ ```bash
230
+ python examples/run_evaluation.py hud-evals/SheetBench-50 --full --agent claude
231
+ ```
232
+
233
+ Or in code:
234
+
235
+ ```python
236
+ import asyncio
237
+ from hud.datasets import run_dataset
238
+ from hud.agents import ClaudeAgent
239
+
240
+ results = await run_dataset(
241
+ name="My SheetBench-50 Evaluation",
242
+ dataset="hud-evals/SheetBench-50", # <-- HuggingFace dataset
243
+ agent_class=ClaudeAgent, # <-- Your custom agent can replace this (see https://docs.hud.so/evaluate-agents/create-agents)
244
+ agent_config={"model": "claude-sonnet-4-20250514"},
245
+ max_concurrent=50,
246
+ max_steps=30,
247
+ )
248
+ print(f"Average reward: {sum(r.reward for r in results) / len(results):.2f}")
249
+ ```
250
+
251
+ > Running a dataset creates a job and streams results to the [app.hud.so](https://app.hud.so) platform for analysis and [leaderboard submission](https://docs.hud.so/evaluate-agents/leaderboards).
252
+
253
+ ## Building Environments (MCP)
254
+
255
+ This is how you can make any environment into an interactable one in 5 steps:
256
+
257
+ 1. Define MCP server layer using [`MCPServer`](https://docs.hud.so/reference/environments)
258
+
259
+ ```python
260
+ from hud.server import MCPServer
261
+ from hud.tools import HudComputerTool
262
+
263
+ mcp = MCPServer("My Environment")
264
+
265
+ # Add hud tools (see all tools: https://docs.hud.so/reference/tools)
266
+ mcp.add_tool(HudComputerTool())
267
+
268
+ # Or custom tools (see https://docs.hud.so/build-environments/adapting-software)
269
+ @mcp.tool("launch_app"):
270
+ def launch_app(name: str = "Gmail")
271
+ ...
272
+
273
+ if __name__ == "__main__":
274
+ mcp.run()
275
+ ```
276
+
277
+ 2. Write a simple Dockerfile that installs packages and runs:
278
+
279
+ ```python
280
+ CMD ["python", "-m", "hud_controller.server"]
281
+ ```
282
+
283
+ And build the image:
284
+
285
+ ```bash
286
+ hud build # runs docker build under the hood
287
+ ```
288
+
289
+ Or run it in interactible mode
290
+
291
+ ```bash
292
+ hud dev
293
+ ```
294
+
295
+ 3. Debug it with the CLI to see if it launches:
296
+
297
+ ```console
298
+ $ hud debug my-name/my-environment:latest
299
+
300
+ ✓ Phase 1: Docker image exists
301
+ ✓ Phase 2: MCP server responds to initialize
302
+ ✓ Phase 3: Tools are discoverable
303
+ ✓ Phase 4: Basic tool execution works
304
+ ✓ Phase 5: Parallel performance is good
305
+
306
+ Progress: [█████████████████████] 5/5 phases (100%)
307
+ ✅ All phases completed successfully!
308
+ ```
309
+
310
+ Analyze it to see if all tools appear:
311
+
312
+ ```console
313
+ $ hud analyze hudpython/hud-remote-browser:latest
314
+ ⠏ ✓ Analysis complete
315
+ ...
316
+ Tools
317
+ ├── Regular Tools
318
+ │ ├── computer
319
+ │ │ └── Control computer with mouse, keyboard, and screenshots
320
+ ...
321
+ └── Hub Tools
322
+ ├── setup
323
+ │ ├── navigate_to_url
324
+ │ ├── set_cookies
325
+ │ ├── ...
326
+ └── evaluate
327
+ ├── url_match
328
+ ├── page_contains
329
+ ├── cookie_exists
330
+ ├── ...
331
+
332
+ 📡 Telemetry Data
333
+ Live URL https://live.anchorbrowser.io?sessionId=abc123def456
334
+ ```
335
+
336
+ 4. When the tests pass, push it up to the docker registry:
337
+
338
+ ```bash
339
+ hud push # needs docker login, hud api key
340
+ ```
341
+
342
+ 5. Now you can use `mcp.hud.so` to launch 100s of instances of this environment in parallel with any agent, and see everything live on [app.hud.so](https://app.hud.so):
343
+
344
+ ```python
345
+ from hud.agents import ClaudeAgent
346
+
347
+ result = await ClaudeAgent().run({ # See all agents: https://docs.hud.so/reference/agents
348
+ "prompt": "Please explore this environment",
349
+ "mcp_config": {
350
+ "my-environment": {
351
+ "url": "https://mcp.hud.so/v3/mcp",
352
+ "headers": {
353
+ "Authorization": f"Bearer {os.getenv('HUD_API_KEY')}",
354
+ "Mcp-Image": "my-name/my-environment:latest"
355
+ }
356
+ }
357
+ # "my-environment": { # or use hud run which wraps local and remote running
358
+ # "cmd": "hud",
359
+ # "args": [
360
+ # "run",
361
+ # "my-name/my-environment:latest",
362
+ # ]
363
+ # }
364
+ }
365
+ })
366
+
367
+ ```
368
+
369
+ > See the full environment design guide and common pitfalls in [`environments/README.md`](environments/README.md)
370
+
371
+ ## Leaderboards & benchmarks
372
+
373
+ All leaderboards are publicly available on [app.hud.so/leaderboards](https://app.hud.so/leaderboards) (see [docs](https://docs.hud.so/evaluate-agents/leaderboards))
374
+
375
+ ![Leaderboard](https://raw.githubusercontent.com/hud-evals/hud-python/l/text-2048/docs/src/images/leaderboards_2.png)
376
+
377
+ We highly suggest running 3-5 evaluations per dataset for the most consistent results across multiple jobs.
378
+
379
+ Using the [`run_dataset`](https://docs.hud.so/reference/tasks#run_dataset) function with a HuggingFace dataset automatically assigns your job to that leaderboard page, and allows you to create a scorecard out of it:
380
+
381
+ ## Architecture
382
+
383
+ ```mermaid
384
+ %%{init: {"theme": "neutral", "themeVariables": {"fontSize": "14px"}} }%%
385
+ graph LR
386
+ subgraph "Platform"
387
+ Dashboard["📊 app.hud.so"]
388
+ API["🔌 mcp.hud.so"]
389
+ end
390
+
391
+ subgraph "hud"
392
+ Agent["🤖 Agent"]
393
+ Task["📋 Task"]
394
+ SDK["📦 SDK"]
395
+ end
396
+
397
+ subgraph "Environments"
398
+ LocalEnv["🖥️ Local Docker<br/>(Development)"]
399
+ RemoteEnv["☁️ Remote Docker<br/>(100s Parallel)"]
400
+ end
401
+
402
+ subgraph "otel"
403
+ Trace["📡 Traces & Metrics"]
404
+ end
405
+
406
+ Dataset["📚 Dataset<br/>(HuggingFace)"]
407
+
408
+ AnyMCP["🔗 Any MCP Client<br/>(Cursor, Claude, Custom)"]
409
+
410
+ Agent <--> SDK
411
+ Task --> SDK
412
+ Dataset <-.-> Task
413
+ SDK <-->|"MCP"| LocalEnv
414
+ SDK <-->|"MCP"| API
415
+ API <-->|"MCP"| RemoteEnv
416
+ SDK --> Trace
417
+ Trace --> Dashboard
418
+ AnyMCP -->|"MCP"| API
419
+
420
+ style Dashboard fill:#e0e7ff,stroke:#6366f1,stroke-width:2px
421
+ style SDK fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
422
+ style RemoteEnv fill:#d1fae5,stroke:#10b981,stroke-width:2px
423
+ style AnyMCP fill:#fce7f3,stroke:#ec4899,stroke-width:2px,stroke-dasharray: 5 5
424
+ ```
425
+
426
+ ## CLI reference
427
+
428
+ | Command | Purpose | Docs |
429
+ | ----------------------- | ------------------------------------------ | ---- |
430
+ | [`hud init`](https://docs.hud.so/reference/cli/init) | Create new environment with boilerplate. | [📖](https://docs.hud.so/reference/cli/init) |
431
+ | [`hud dev`](https://docs.hud.so/reference/cli/dev) | Hot-reload development with Docker. | [📖](https://docs.hud.so/reference/cli/dev) |
432
+ | [`hud build`](https://docs.hud.so/reference/cli/build) | Build image and generate lock file. | [📖](https://docs.hud.so/reference/cli/build) |
433
+ | [`hud push`](https://docs.hud.so/reference/cli/push) | Share environment to registry. | [📖](https://docs.hud.so/reference/cli/push) |
434
+ | [`hud pull <target>`](https://docs.hud.so/reference/cli/pull) | Get environment from registry. | [📖](https://docs.hud.so/reference/cli/pull) |
435
+ | [`hud analyze <image>`](https://docs.hud.so/reference/cli/analyze) | Discover tools, resources, and metadata. | [📖](https://docs.hud.so/reference/cli/analyze) |
436
+ | [`hud debug <image>`](https://docs.hud.so/reference/cli/debug) | Five-phase health check of an environment. | [📖](https://docs.hud.so/reference/cli/debug) |
437
+ | [`hud run <image>`](https://docs.hud.so/reference/cli/run) | Run MCP server locally or remotely. | [📖](https://docs.hud.so/reference/cli/run) |
438
+
439
+ ## Roadmap
440
+
441
+ - Merging our forks in to the main `mcp`, `mcp_use`, `verifiers` repositories
442
+ - Helpers for building new environments (see [current guide](environments/README.md))
443
+ - Integrations with every major agent framework
444
+ - Evaluation environment registry
445
+ - Native RL training to hud environments (see [current RL support](rl/))
446
+ - MCP opentelemetry standard
447
+
448
+ ## Contributing
449
+
450
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
451
+
452
+ Key areas:
453
+ - [Environment examples](environments/) - Add new MCP environments
454
+ - [Agent implementations](hud/agents/) - Add support for new LLM providers
455
+ - [Tool library](hud/tools/) - Extend the built-in tool collection
456
+ - [RL training](rl/) - Improve reinforcement learning pipelines
457
+
458
+ Thanks to all our contributors!
459
+
460
+ <a href="https://github.com/hud-evals/hud-python/graphs/contributors">
461
+ <img src="https://contrib.rocks/image?repo=hud-evals/hud-python&max=50" />
462
+ </a>
463
+
464
+ ## Citation
465
+
466
+ ```bibtex
467
+ @software{hud2025agentevalplatform,
468
+ author = {HUD and Jay Ram and Lorenss Martinsons and Parth Patel and Oskars Putans and Govind Pimpale and Mayank Singamreddy and Nguyen Nhat Minh},
469
+ title = {HUD: An Evaluation Platform for Agents},
470
+ date = {2025-04},
471
+ url = {https://github.com/hud-evals/hud-python},
472
+ langid = {en}
473
+ }
474
+ ```
475
+
476
+ > **License**: HUD is released under the MIT License – see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,132 @@
1
+ hud/__init__.py,sha256=g2ounE6q48MfCsMm-4UfoC__d0KLz1O3e_arCHFQgBk,419
2
+ hud/datasets.py,sha256=bDIWbuu2eshsxl4RvtxZkb4k28NevIBaKUsk8v6pDQk,12214
3
+ hud/settings.py,sha256=-GEBsb60PwhikCQlFgD1DiuNWgOjFmFVhqK7iTwcvac,2112
4
+ hud/types.py,sha256=li7HCCzIH8FfIGEgO2GFmAHpwCCUfBT-NbXloVVkJAY,4373
5
+ hud/version.py,sha256=JvdmARn-wCmKr0LMLqNvVkCz8MF01kl1VDUCZC2oDgw,111
6
+ hud/agents/__init__.py,sha256=2F7aXfCROLXreVTxWoJNlTZeP8MSY7eZUom1ZSITlsU,349
7
+ hud/agents/art.py,sha256=GE31q7XcnP8qo7Uu1VJCCG5RaiKVf53WIubtdqUPmIU,3574
8
+ hud/agents/base.py,sha256=CHZj73_gwcWcuUIv4fT_1PH2Ac5EnizYV4rBa10JdVE,22857
9
+ hud/agents/claude.py,sha256=2EozkHZS9M2b7Z1sMb07CFeftfnHdSO8W1aDn-rGVGE,14646
10
+ hud/agents/langchain.py,sha256=Hnm6QuGNMhHZklZG3AlqwiMJzz9a8MVaoZlMdyzXUTw,9379
11
+ hud/agents/openai.py,sha256=FK76A49cNdXfOjIETZjzXT8hz7mcjgWwrsA3wZq0D4M,14675
12
+ hud/agents/openai_chat_generic.py,sha256=0u4UYJ-e8Whfa8N2pr1FkaAOBjn3XmWwMGDfHILJg8E,5476
13
+ hud/agents/misc/__init__.py,sha256=TU61TvmQPfJmmEx_EpBGd2aS7dwwnoq1-_VLT6Lav8c,143
14
+ hud/agents/misc/response_agent.py,sha256=e1QcFa9EvnX3VqtZyg5IS2CopycgTb0yIWZIOMTooxI,3116
15
+ hud/agents/tests/__init__.py,sha256=XgsNKhAkOnpWn9cNjbRQEfUolyVVTNWRHdDZW5elbGQ,35
16
+ hud/agents/tests/test_base.py,sha256=Ey6KkgNtvRoIpL9Ihl9vRfhZE4-Er9TAZULvvk-PXPU,29712
17
+ hud/agents/tests/test_claude.py,sha256=0usXXDfSaM3YclvDuHACuUV--hzM81FvML0XVN7zRew,13393
18
+ hud/agents/tests/test_client.py,sha256=s5WPSymwbRGWJIjSwjqQRHEwIWRiqKAquZBFMnQSpTk,14271
19
+ hud/agents/tests/test_openai.py,sha256=9Wuz33TG5j2HjwmzDxxc5Hx3SCW0p2eyRwNDbzrcA4A,9263
20
+ hud/cli/__init__.py,sha256=sUEa1FEfD0MN351Pq6UezBf2oUOAxiBf2pEM1GrzC8g,22351
21
+ hud/cli/__main__.py,sha256=5GJaExX_tzkQsendVrSrBNzUz9yEFx4nkyME8A9-g1Y,151
22
+ hud/cli/analyze.py,sha256=UQV0NQ6QqbeiG4d4wcnixAaihNWGQSILpMxIGKtahgU,14787
23
+ hud/cli/analyze_metadata.py,sha256=Vdrj-tXmLa32a7v4YOhGZd6HML_gtrObHdalLaFDsbE,8492
24
+ hud/cli/build.py,sha256=_5DjYU7Z-F-Izj9N_fxmbN41PBzo6CsGc6TyxDAaTcY,14690
25
+ hud/cli/clone.py,sha256=nc10s8qm4943fvC5f4ASDHVJ7-A_J6cWkyuwiPuBPbo,6284
26
+ hud/cli/cursor.py,sha256=hyaArxYpiVENzjPYQAit7cwNjEdTDaCpftX0A1fC_zw,3101
27
+ hud/cli/debug.py,sha256=ZAHMaNjyYosi40bhid_hrCaFCw4Uu7DrTn7F6uhgN54,14005
28
+ hud/cli/docker_utils.py,sha256=FQLmSJZLLYl5fq4H0sekP0_0u6FK-53IXIbPn9zpAbI,2778
29
+ hud/cli/init.py,sha256=AgUGFYyUqSlCNNJiXd3p7Z_eOL8nJIfx3ais-9qDucs,7953
30
+ hud/cli/interactive.py,sha256=ewO-ipLNR9Q16OteAAouSa_2_FNSH3OO3vMxXBJQyQI,13216
31
+ hud/cli/mcp_server.py,sha256=E5CsIHz5mxoFyfXfZ2UQxirlsLgF9bvzdbl_nu6LATw,28873
32
+ hud/cli/pull.py,sha256=Y5XMOPPIgJ2agZyLgjHYMAJ_HDUiOE1LJka-s_5zMak,12275
33
+ hud/cli/push.py,sha256=IkuIO6g6EmTzjCOB0eZ1DB5KLN7-yu5xQ2Cb2whVkJ8,14533
34
+ hud/cli/remote_runner.py,sha256=8iH9ez11Xd9R2lsbArn517MVICogsYcyCMkXA_fe2TQ,9716
35
+ hud/cli/runner.py,sha256=5526x2hC_cd7MSvDPtMVsDIAjVPXHMpre0KO3CChkQY,5048
36
+ hud/cli/utils.py,sha256=rKnjcgJ3Fm844qardCrQPQ_PFVtad9JIXQhUEOHhl0A,9104
37
+ hud/cli/tests/__init__.py,sha256=umGvkKfARyrB1JzEDuK7WDbkMzK5PeTV1CeTZ5g4Ado,71
38
+ hud/cli/tests/test_analyze.py,sha256=XjnfHTepphZ4cSTPngeTfEv_0qrr2olagmRbOgfUw2Y,11255
39
+ hud/cli/tests/test_cli_init.py,sha256=UBMQ7T-3rCL8i01fuDJWaJlQc7Hn79xyz9ArqTcLxD4,11554
40
+ hud/cli/tests/test_cli_main.py,sha256=METXVbD9ir3QLnCODjbJTO_ph5Lk0ID48AbVy5nuJKI,724
41
+ hud/cli/tests/test_clone.py,sha256=7JBeXk-n6S_iuUiRUmayEv-L7NRypyY_2KeMs_OcksA,4600
42
+ hud/cli/tests/test_cursor.py,sha256=71Nt0TABTwLTaeW9XhAxQFikhuHKLJjZddk87JFQvxU,10068
43
+ hud/cli/tests/test_debug.py,sha256=VQlwZq_x10NPZpSf1CbvIpMs1NgaZKTXPqKfX5MCMUg,18481
44
+ hud/cli/tests/test_mcp_server.py,sha256=6v9-5_iNDTf3WLFWUevS_brv1puG7U0GDpTx4szwcGo,4517
45
+ hud/cli/tests/test_utils.py,sha256=DZfe-0xoX_VGQO-mSZr7xca0WBl6z_9Eai_7OxjzuUI,13854
46
+ hud/clients/README.md,sha256=ypuNGE97Bv-1c--DIiy7mh-yUVITsEKn-CBgDvLs4J4,3969
47
+ hud/clients/__init__.py,sha256=_mdxGF3pnuFB0tpVKpNZ9lz27iKSOa2-ck3NjHHFg_Y,344
48
+ hud/clients/base.py,sha256=tYHwoCArNSdc6tCSbGoDDdKw_IVitNIHxF2mk94FB3Y,13876
49
+ hud/clients/fastmcp.py,sha256=mF1ZZHburlpzNdZZ1ndZCaF_0jVT7-ot2sqmZXK49Vo,9389
50
+ hud/clients/mcp_use.py,sha256=38_-yfNC-zhHbqmV2HRmBpMd-fTbB22DO0PnJPd7A50,11302
51
+ hud/clients/tests/__init__.py,sha256=FSkZn2zN5p4DQTMcv6RppiboIxG-9wSUoPpB5kw06g8,34
52
+ hud/clients/tests/test_client_integration.py,sha256=he-Vtmo84G7HuNSk1harEwcBli_K5T9ttQaH2MKGgDU,4309
53
+ hud/clients/tests/test_fastmcp.py,sha256=GsjUk708KqOzPgQwphQL7WCJiimO_1xitrbq-5aD3p4,13372
54
+ hud/clients/tests/test_protocol.py,sha256=XJc8lXqypiHwFhfw_rtb2-IQ3Gr9z2PCsEi1OGgfqaQ,6828
55
+ hud/clients/utils/__init__.py,sha256=xAbMuwsQcOOAZEQhgqVBGud3MjRjZ0tOapAu6ZYR4YQ,33
56
+ hud/clients/utils/retry_transport.py,sha256=G1XURBZ7E2rSYlkpnCbUNcQ2r4GgOB1Hltn5FHQyxj8,5518
57
+ hud/misc/__init__.py,sha256=J_MuFkCEhMBQxBq17nArf5xLSEu_CJ5CZ1w7LiTtq2U,44
58
+ hud/misc/claude_plays_pokemon.py,sha256=F_UZs-R02zLXF4lwn-nrQzWq5Q1ThSXL5g3hqFEqxQE,10745
59
+ hud/otel/__init__.py,sha256=cdyHWKzbtoJ5GEzk7rd-ltcxbwMU7fXm05vkNeiPyqw,1038
60
+ hud/otel/collector.py,sha256=ciVvQWOoCTmYxN4s89Js0rlIX1mDBJ37PFlCD4wYLJU,4639
61
+ hud/otel/config.py,sha256=_e0Tv0jJLY_S2_42mB_kAmUKw0J5BIynXj8YLF1XrUI,6413
62
+ hud/otel/context.py,sha256=qv4UD3V28y-R8FdoBnTIGe5-XzW_rIShhZVtup71cR0,18310
63
+ hud/otel/exporters.py,sha256=xCeHJUa1ECp0ah7VTR3juw4fX4PXzTKb7yRC3tTUbR8,14612
64
+ hud/otel/instrumentation.py,sha256=c9hyDN8PLN8KOhIVMalVI8fUePwaYLbaKilOmHpKvzM,3672
65
+ hud/otel/processors.py,sha256=h-ls0clNuJuCnY02m42y4g8GJBWQaHV3G2RhmveimMk,4733
66
+ hud/otel/tests/__init__.py,sha256=f9huyxi7QPIKzfEb3MWK4fX7r89efj5TBkPrufjXFGI,44
67
+ hud/otel/tests/test_processors.py,sha256=382MfEGtlwTyor9A4RQt16wrjvYrB_vG7LgJxScTkl8,6975
68
+ hud/server/__init__.py,sha256=MxGejM5W1He05H3nJ43cxxOtDuzcgBjYOHqdh2rIEIc,96
69
+ hud/server/context.py,sha256=ZcL1qtyRfcJpjtuHp1vO4RyFhdHXa1LZlPbLjTT7fhw,3324
70
+ hud/server/low_level.py,sha256=_WruJbbCcNlkyy-7gr_MrDPSO1QNOrt8BbajJR_uzUM,4833
71
+ hud/server/server.py,sha256=IBOi5xSZKgPHd7f6dDR2DKDDrYKJk1_W2RfuiZmT9tA,6534
72
+ hud/server/helper/__init__.py,sha256=GCY5_s45JLSr-J5E4qU11LCgKttfXeZCGbh2ny_fwY8,121
73
+ hud/server/tests/__init__.py,sha256=x985KPu1Zpfn_trs3bpfqzMFbNy6kHMLgnqUYudnzfs,52
74
+ hud/shared/__init__.py,sha256=gHamPuurfbeoaTT2dgfADcq_uF5-1izq4t3cfM_BFYc,144
75
+ hud/shared/exceptions.py,sha256=lTMqw0JoAvGN1Pws3Dqr9h0-AjPIamrO8fmRHRBmVdc,5696
76
+ hud/shared/requests.py,sha256=ulxNvhSTqCDMoPO8F4LeZQrNyCK5rXrYbeNUGBZ9XTg,9112
77
+ hud/shared/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ hud/shared/tests/test_exceptions.py,sha256=acJ7UxoFUtsBipOLptlIZ70Jbu8cJ-nMoUuOpWhSGqQ,5472
79
+ hud/shared/tests/test_requests.py,sha256=2agIf4CHdlT2Dyg6hewaLoENP5FAP0hZZMXCUim_9Rc,9389
80
+ hud/telemetry/__init__.py,sha256=6GneOGX3LDlJxzGCweyHNuJAISqBdO0VpIXHuV8ShZc,688
81
+ hud/telemetry/instrument.py,sha256=gDy7BnNSqn4SEQLEeVE2KypY4J-apJ17tJ3-eRUgy5k,14475
82
+ hud/telemetry/job.py,sha256=7kvKnGPuIhfwbcJl2W-NV4gSaT0vgKXrJsMFsVdCFf8,10307
83
+ hud/telemetry/replay.py,sha256=Cug9SjYFbo_jKpaImFrVVhJP5CjLM3f1JLnkA72zD8E,2380
84
+ hud/telemetry/trace.py,sha256=rbSgUhBDLW8gMVXwzMobZhzhIRWhn2gEQpNySnFwDOY,2291
85
+ hud/tools/__init__.py,sha256=ddNZX6Fc_TIc29w2sqKgAFftV6QmJiVQ_umrAXUkT0U,938
86
+ hud/tools/base.py,sha256=A1Gkln2ffEz7P9ON97UhdJPqpXWqonk4EyK6LIyymsY,15349
87
+ hud/tools/bash.py,sha256=SDh4cUs21JyLpyurWkzkPmgelS-Ln6-gB245p-TJStk,5370
88
+ hud/tools/edit.py,sha256=I6XYEinmPQeHFPR4A-3NJEUqDCoUBsedULgWTe2d8iU,13059
89
+ hud/tools/playwright.py,sha256=NlXpUX2ap2aL7lVc3T1Ltz_YxJYOj10xG6kZmaWmW3o,15419
90
+ hud/tools/types.py,sha256=CrI6zRuV2Z2m9i0aHgun-XIPesjsfHZVCE8a80fbF5Y,2806
91
+ hud/tools/utils.py,sha256=j-ctal4VQIbeNo35xhNkRlVhivo728qCqhscj9so600,1497
92
+ hud/tools/computer/__init__.py,sha256=Xiq1tm8kefysfKnThPdtG4kjeymt_WhFCfznzI79YEY,382
93
+ hud/tools/computer/anthropic.py,sha256=fHR5G9fPnuEOfK9cY8vSIUh_iLMM2wiqyBLbqI_ch0o,17789
94
+ hud/tools/computer/hud.py,sha256=LFxNG8kZ5W5fpLcdIYIUevi1QgJp8HnN4BfH3Bjrvrs,16616
95
+ hud/tools/computer/openai.py,sha256=4QJd4iSMXY1st4t6GNqWFWFIxGT3gsqlCUR-7Te5BiE,11484
96
+ hud/tools/computer/settings.py,sha256=idtGZhxcS3CnjV2s15oUjBAtQJqNmL7zcvwj-v9NexU,2845
97
+ hud/tools/executors/__init__.py,sha256=kNC6SfuYhMsucG4FDPcZF0vAUe0rdm0sU3sNlLyjl2M,762
98
+ hud/tools/executors/base.py,sha256=I3xUlPJ2dmRm71hwws8cw_DjeUqmUu2ngFPu-TDFgO8,15020
99
+ hud/tools/executors/pyautogui.py,sha256=YgNQgScqRqz93rq-jVZcetVY5x_xNcq7NtekCYnp8Ro,22982
100
+ hud/tools/executors/xdo.py,sha256=4tHBszgyu8NYDaSYAnOG6apXrhjMzme00dn0SzCiqC4,18647
101
+ hud/tools/executors/tests/__init__.py,sha256=1Q_W-8SYskdnFgDbixa9acQtKIvXNapAGBtf2XaTSBU,33
102
+ hud/tools/executors/tests/test_base_executor.py,sha256=9RkuuK3Ard8xhXeFBi0f-FWN0bbWZKMliuOVZ9JFOyk,12806
103
+ hud/tools/executors/tests/test_pyautogui_executor.py,sha256=0DjSPdV0ELBBLWtNRNBt0vzFZsPNdem_ksj93pwdjR8,6805
104
+ hud/tools/tests/__init__.py,sha256=x985KPu1Zpfn_trs3bpfqzMFbNy6kHMLgnqUYudnzfs,52
105
+ hud/tools/tests/test_base.py,sha256=JGG4mVJviNQOCX4aXA4w3BvcBs_u95sWIXjNXn9d0vI,9265
106
+ hud/tools/tests/test_bash.py,sha256=V-GO9BDlteB5ajvkGFV8U0XbYgyD4CkwPIwU5M7b7ws,5271
107
+ hud/tools/tests/test_bash_extended.py,sha256=304cMWbal7P3xmMTCEK2Cf2liekuw8rMUZJ1VVbUG7o,7197
108
+ hud/tools/tests/test_computer.py,sha256=RIbqWqPHt-mR_YOPvmW-qHANm_EjqShAMmArjNh0eSI,16819
109
+ hud/tools/tests/test_computer_actions.py,sha256=gLTGPaSPUB8Lki2NJo9wHQ_sHQLH8hbVrB2siXZWj2w,1228
110
+ hud/tools/tests/test_edit.py,sha256=mM-2yUDBvxKBCbpnh-y6zuqmwYeqKJokdKnsTViNsb4,9993
111
+ hud/tools/tests/test_init.py,sha256=UnJ8JH5L_-DSeHN62UaOwPm_84wAU1SQB4S54tDUgBY,725
112
+ hud/tools/tests/test_playwright_tool.py,sha256=6fboZgV5sJnh7LlySyfrlBFuYSISloWXgppUjsbEuFg,6919
113
+ hud/tools/tests/test_tools.py,sha256=3fCd410-vzb8HAo_hwkh4mFafECNh3EFBHZTV5jFw3s,4708
114
+ hud/tools/tests/test_utils.py,sha256=THSY74_qK9KkToihgSsi49EpS8BpQ_xaW0cbtvM2sFM,5652
115
+ hud/utils/__init__.py,sha256=KwQ4kTeMXYKATJL49GpxY8QD504ZKeK4ngn46VnU8wA,174
116
+ hud/utils/async_utils.py,sha256=H6kFzadsUXrPU76kGE03OAzhr-4-S_dKG2hEF-Q3XIQ,2474
117
+ hud/utils/design.py,sha256=HD35wwgYnItxr-aOC93MAO_IEGwSIsVtE2WOfbitd58,5155
118
+ hud/utils/mcp.py,sha256=8YrJHbU8fJd6RY4O0jQjTIyv62Ofe0qlTFyVK5S7cEc,1902
119
+ hud/utils/progress.py,sha256=iJFvYxd3tPXlk0TW6hcVarXn_KEJnwFWLIchMqaZuKc,6076
120
+ hud/utils/telemetry.py,sha256=hgydhxQzsE-f_MAq1ZQRTEETts506apsyfP5yGVYiYY,1929
121
+ hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ hud/utils/tests/test_async_utils.py,sha256=Sraje4i83CcCEmMtLQQA5GKS8BKXsPZ1uPp-fkDXnFM,6118
123
+ hud/utils/tests/test_init.py,sha256=jKwlbj7tz9tOpgBe9cffFGAIsVS47KYkW7DnygcRqYA,400
124
+ hud/utils/tests/test_progress.py,sha256=8kcinr6u6vgvLSWZ4rZlNWz4vL835SUIFwmZj11Q4Qg,7655
125
+ hud/utils/tests/test_telemetry.py,sha256=DNoGqq7zs1fjKA9GsmvT1U8FlekHAVwYD4pxSJvLgYs,2863
126
+ hud/utils/tests/test_version.py,sha256=vwgyzM9FUBbH9by_fUwTmBPLEoQ0cgqZZ_jtEsH-x2E,167
127
+ hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ hud_python-0.4.1.dist-info/METADATA,sha256=Re8FIOUusD1B4-jkdb3lyTJNOwXld4L-BRDMhs8H-CY,19554
129
+ hud_python-0.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
130
+ hud_python-0.4.1.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
131
+ hud_python-0.4.1.dist-info/licenses/LICENSE,sha256=bskFRICmpDj1GtBpnuisjMR6mtQZtkPnRCtTz1CMMB0,1099
132
+ hud_python-0.4.1.dist-info/RECORD,,
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ hud = hud.cli:main
3
+ hud-python = hud.cli:main