hud-python 0.3.5__py3-none-any.whl → 0.4.0__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 +17 -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 +379 -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 +354 -0
  45. hud/clients/fastmcp.py +202 -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.0.dist-info/METADATA +474 -0
  126. hud_python-0.4.0.dist-info/RECORD +132 -0
  127. hud_python-0.4.0.dist-info/entry_points.txt +3 -0
  128. {hud_python-0.3.5.dist-info → hud_python-0.4.0.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.0.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.0"
@@ -0,0 +1,474 @@
1
+ Metadata-Version: 2.4
2
+ Name: hud-python
3
+ Version: 0.4.0
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, telemetry, datasets
133
+ pip install "hud-python[agent]"
134
+
135
+ # CLI utilities
136
+ uv tool install hud-python
137
+
138
+ # From source (latest)
139
+ git clone https://github.com/hud-evals/hud-python
140
+ pip install -e "hud-python[dev]"
141
+ ```
142
+
143
+ > See [docs.hud.so](https://docs.hud.so), or add docs to any MCP client:
144
+ > `claude mcp add docs-hud https://docs.hud.so/mcp`
145
+
146
+ ## Quickstart
147
+
148
+ For a tutorial that explains the agent and evaluation design, run ([see quickstart docs](https://docs.hud.so/quickstart)):
149
+
150
+ ```python
151
+ uvx hud-python quickstart
152
+ ```
153
+
154
+ Or just write your own agent loop (more [examples here](examples/)):
155
+
156
+ ```python
157
+ import asyncio, hud, os
158
+ from hud.settings import settings
159
+ from hud.clients import MCPClient
160
+ from hud.agents import ClaudeAgent
161
+ from hud.datasets import Task # See docs: https://docs.hud.so/reference/tasks
162
+
163
+ async def main() -> None:
164
+ with hud.trace("Quick Start 2048"): # All telemetry works for any MCP-based agent (see https://app.hud.so)
165
+ task = Task(
166
+ prompt="Reach 64 in 2048.",
167
+ mcp_config={
168
+ "hud": {
169
+ "url": "https://mcp.hud.so", # HUD's cloud MCP server (see https://docs.hud.so/core-concepts/architecture)
170
+ "headers": {
171
+ "Authorization": f"Bearer {os.getenv('HUD_API_KEY')}", # Get your key at https://app.hud.so
172
+ "Mcp-Image": "hudpython/hud-text-2048:v1.1" # Docker image from https://hub.docker.com/u/hudpython
173
+ }
174
+ }
175
+ },
176
+ evaluate_tool={"name": "evaluate", "arguments": {"name": "max_number", "target": 64}},
177
+ )
178
+
179
+ # 1. Define the client explicitly:
180
+ client = MCPClient(mcp_config=task.mcp_config)
181
+ agent = ClaudeAgent(
182
+ mcp_client=client,
183
+ model="claude-sonnet-4-20250514", # requires ANTHROPIC_API_KEY
184
+ )
185
+
186
+ result = await agent.run(task)
187
+
188
+ # 2. Or just:
189
+ # result = await ClaudeAgent().run(task)
190
+
191
+ print(f"Reward: {result.reward}")
192
+ await client.close()
193
+
194
+ asyncio.run(main())
195
+ ```
196
+
197
+ > Every HUD environment is MCP-based and interactable from anywhere. Requires `HUD_API_KEY` and `ANTHROPIC_API_KEY`.
198
+
199
+ ## Reinforcement Learning with GRPO
200
+
201
+ This is a Qwen-2.5-3B agent training a policy on the [`text-2048`](environments/text_2048/) environment using [Verifiers](rl/verifiers/):
202
+
203
+ ![RL curve](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/rl_2.png)
204
+
205
+ To start training, check out the [`rl/README.md`](rl/README.md) folder:
206
+
207
+ ```bash
208
+ git clone https://github.com/hud-evals/hud-python
209
+ cd hud-python
210
+ python rl/verifiers/train_2048.py
211
+ ```
212
+
213
+ Any hud MCP environment and evaluation works with our RL pipeline. Even our remote configurations!
214
+
215
+ > 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!
216
+
217
+ ## Benchmarking Agents
218
+
219
+ This is Claude Computer Use running on our proprietary financial analyst benchmark [SheetBench-50](https://huggingface.co/datasets/hud-evals/SheetBench-50):
220
+
221
+ ![Trace screenshot](https://raw.githubusercontent.com/hud-evals/hud-python/l/text-2048/docs/src/images/trace_sheet.gif)
222
+
223
+ > [See this trace on _app.hud.so_](https://app.hud.so/trace/9e212e9e-3627-4f1f-9eb5-c6d03c59070a)
224
+
225
+ This example runs the full dataset (only takes ~20 minutes) using [run_evaluation.py](examples/run_evaluation.py):
226
+
227
+ ```bash
228
+ python examples/run_evaluation.py hud-evals/SheetBench-50 --full --agent claude
229
+ ```
230
+
231
+ Or in code:
232
+
233
+ ```python
234
+ import asyncio
235
+ from hud.datasets import run_dataset
236
+ from hud.agents import ClaudeAgent
237
+
238
+ results = await run_dataset(
239
+ name="My SheetBench-50 Evaluation",
240
+ dataset="hud-evals/SheetBench-50", # <-- HuggingFace dataset
241
+ agent_class=ClaudeAgent, # <-- Your custom agent can replace this (see https://docs.hud.so/evaluate-agents/create-agents)
242
+ agent_config={"model": "claude-sonnet-4-20250514"},
243
+ max_concurrent=50,
244
+ max_steps=30,
245
+ )
246
+ print(f"Average reward: {sum(r.reward for r in results) / len(results):.2f}")
247
+ ```
248
+
249
+ > 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).
250
+
251
+ ## Building Environments (MCP)
252
+
253
+ This is how you can make any environment into an interactable one in 5 steps:
254
+
255
+ 1. Define MCP server layer using [`MCPServer`](https://docs.hud.so/reference/environments)
256
+
257
+ ```python
258
+ from hud.server import MCPServer
259
+ from hud.tools import HudComputerTool
260
+
261
+ mcp = MCPServer("My Environment")
262
+
263
+ # Add hud tools (see all tools: https://docs.hud.so/reference/tools)
264
+ mcp.add_tool(HudComputerTool())
265
+
266
+ # Or custom tools (see https://docs.hud.so/build-environments/adapting-software)
267
+ @mcp.tool("launch_app"):
268
+ def launch_app(name: str = "Gmail")
269
+ ...
270
+
271
+ if __name__ == "__main__":
272
+ mcp.run()
273
+ ```
274
+
275
+ 2. Write a simple Dockerfile that installs packages and runs:
276
+
277
+ ```python
278
+ CMD ["python", "-m", "hud_controller.server"]
279
+ ```
280
+
281
+ And build the image:
282
+
283
+ ```bash
284
+ hud build # runs docker build under the hood
285
+ ```
286
+
287
+ Or run it in interactible mode
288
+
289
+ ```bash
290
+ hud dev
291
+ ```
292
+
293
+ 3. Debug it with the CLI to see if it launches:
294
+
295
+ ```console
296
+ $ hud debug my-name/my-environment:latest
297
+
298
+ ✓ Phase 1: Docker image exists
299
+ ✓ Phase 2: MCP server responds to initialize
300
+ ✓ Phase 3: Tools are discoverable
301
+ ✓ Phase 4: Basic tool execution works
302
+ ✓ Phase 5: Parallel performance is good
303
+
304
+ Progress: [█████████████████████] 5/5 phases (100%)
305
+ ✅ All phases completed successfully!
306
+ ```
307
+
308
+ Analyze it to see if all tools appear:
309
+
310
+ ```console
311
+ $ hud analyze hudpython/hud-remote-browser:latest
312
+ ⠏ ✓ Analysis complete
313
+ ...
314
+ Tools
315
+ ├── Regular Tools
316
+ │ ├── computer
317
+ │ │ └── Control computer with mouse, keyboard, and screenshots
318
+ ...
319
+ └── Hub Tools
320
+ ├── setup
321
+ │ ├── navigate_to_url
322
+ │ ├── set_cookies
323
+ │ ├── ...
324
+ └── evaluate
325
+ ├── url_match
326
+ ├── page_contains
327
+ ├── cookie_exists
328
+ ├── ...
329
+
330
+ 📡 Telemetry Data
331
+ Live URL https://live.anchorbrowser.io?sessionId=abc123def456
332
+ ```
333
+
334
+ 4. When the tests pass, push it up to the docker registry:
335
+
336
+ ```bash
337
+ hud push # needs docker login, hud api key
338
+ ```
339
+
340
+ 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):
341
+
342
+ ```python
343
+ from hud.agents import ClaudeAgent
344
+
345
+ result = await ClaudeAgent().run({ # See all agents: https://docs.hud.so/reference/agents
346
+ "prompt": "Please explore this environment",
347
+ "mcp_config": {
348
+ "my-environment": {
349
+ "url": "https://mcp.hud.so",
350
+ "headers": {
351
+ "Authorization": f"Bearer {os.getenv('HUD_API_KEY')}",
352
+ "Mcp-Image": "my-name/my-environment:latest"
353
+ }
354
+ }
355
+ # "my-environment": { # or use hud run which wraps local and remote running
356
+ # "cmd": "hud",
357
+ # "args": [
358
+ # "run",
359
+ # "my-name/my-environment:latest",
360
+ # ]
361
+ # }
362
+ }
363
+ })
364
+
365
+ ```
366
+
367
+ > See the full environment design guide and common pitfalls in [`environments/README.md`](environments/README.md)
368
+
369
+ ## Leaderboards & benchmarks
370
+
371
+ All leaderboards are publicly available on [app.hud.so/leaderboards](https://app.hud.so/leaderboards) (see [docs](https://docs.hud.so/evaluate-agents/leaderboards))
372
+
373
+ ![Leaderboard](https://raw.githubusercontent.com/hud-evals/hud-python/l/text-2048/docs/src/images/leaderboards_2.png)
374
+
375
+ We highly suggest running 3-5 evaluations per dataset for the most consistent results across multiple jobs.
376
+
377
+ 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:
378
+
379
+ ## Architecture
380
+
381
+ ```mermaid
382
+ %%{init: {"theme": "neutral", "themeVariables": {"fontSize": "14px"}} }%%
383
+ graph LR
384
+ subgraph "Platform"
385
+ Dashboard["📊 app.hud.so"]
386
+ API["🔌 mcp.hud.so"]
387
+ end
388
+
389
+ subgraph "hud"
390
+ Agent["🤖 Agent"]
391
+ Task["📋 Task"]
392
+ SDK["📦 SDK"]
393
+ end
394
+
395
+ subgraph "Environments"
396
+ LocalEnv["🖥️ Local Docker<br/>(Development)"]
397
+ RemoteEnv["☁️ Remote Docker<br/>(100s Parallel)"]
398
+ end
399
+
400
+ subgraph "otel"
401
+ Trace["📡 Traces & Metrics"]
402
+ end
403
+
404
+ Dataset["📚 Dataset<br/>(HuggingFace)"]
405
+
406
+ AnyMCP["🔗 Any MCP Client<br/>(Cursor, Claude, Custom)"]
407
+
408
+ Agent <--> SDK
409
+ Task --> SDK
410
+ Dataset <-.-> Task
411
+ SDK <-->|"MCP"| LocalEnv
412
+ SDK <-->|"MCP"| API
413
+ API <-->|"MCP"| RemoteEnv
414
+ SDK --> Trace
415
+ Trace --> Dashboard
416
+ AnyMCP -->|"MCP"| API
417
+
418
+ style Dashboard fill:#e0e7ff,stroke:#6366f1,stroke-width:2px
419
+ style SDK fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
420
+ style RemoteEnv fill:#d1fae5,stroke:#10b981,stroke-width:2px
421
+ style AnyMCP fill:#fce7f3,stroke:#ec4899,stroke-width:2px,stroke-dasharray: 5 5
422
+ ```
423
+
424
+ ## CLI reference
425
+
426
+ | Command | Purpose | Docs |
427
+ | ----------------------- | ------------------------------------------ | ---- |
428
+ | [`hud init`](https://docs.hud.so/reference/cli/init) | Create new environment with boilerplate. | [📖](https://docs.hud.so/reference/cli/init) |
429
+ | [`hud dev`](https://docs.hud.so/reference/cli/dev) | Hot-reload development with Docker. | [📖](https://docs.hud.so/reference/cli/dev) |
430
+ | [`hud build`](https://docs.hud.so/reference/cli/build) | Build image and generate lock file. | [📖](https://docs.hud.so/reference/cli/build) |
431
+ | [`hud push`](https://docs.hud.so/reference/cli/push) | Share environment to registry. | [📖](https://docs.hud.so/reference/cli/push) |
432
+ | [`hud pull <target>`](https://docs.hud.so/reference/cli/pull) | Get environment from registry. | [📖](https://docs.hud.so/reference/cli/pull) |
433
+ | [`hud analyze <image>`](https://docs.hud.so/reference/cli/analyze) | Discover tools, resources, and metadata. | [📖](https://docs.hud.so/reference/cli/analyze) |
434
+ | [`hud debug <image>`](https://docs.hud.so/reference/cli/debug) | Five-phase health check of an environment. | [📖](https://docs.hud.so/reference/cli/debug) |
435
+ | [`hud run <image>`](https://docs.hud.so/reference/cli/run) | Run MCP server locally or remotely. | [📖](https://docs.hud.so/reference/cli/run) |
436
+
437
+ ## Roadmap
438
+
439
+ - Merging our forks in to the main `mcp`, `mcp_use`, `verifiers` repositories
440
+ - Helpers for building new environments (see [current guide](environments/README.md))
441
+ - Integrations with every major agent framework
442
+ - Evaluation environment registry
443
+ - Native RL training to hud environments (see [current RL support](rl/))
444
+ - MCP opentelemetry standard
445
+
446
+ ## Contributing
447
+
448
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
449
+
450
+ Key areas:
451
+ - [Environment examples](environments/) - Add new MCP environments
452
+ - [Agent implementations](hud/agents/) - Add support for new LLM providers
453
+ - [Tool library](hud/tools/) - Extend the built-in tool collection
454
+ - [RL training](rl/) - Improve reinforcement learning pipelines
455
+
456
+ Thanks to all our contributors!
457
+
458
+ <a href="https://github.com/hud-evals/hud-python/graphs/contributors">
459
+ <img src="https://contrib.rocks/image?repo=hud-evals/hud-python&max=50" />
460
+ </a>
461
+
462
+ ## Citation
463
+
464
+ ```bibtex
465
+ @software{hud2025agentevalplatform,
466
+ author = {HUD and Jay Ram and Lorenss Martinsons and Parth Patel and Oskars Putans and Govind Pimpale and Mayank Singamreddy and Nguyen Nhat Minh},
467
+ title = {HUD: An Evaluation Platform for Agents},
468
+ date = {2025-04},
469
+ url = {https://github.com/hud-evals/hud-python},
470
+ langid = {en}
471
+ }
472
+ ```
473
+
474
+ > **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=BB6GRVXtk_lpQD1Yd5SnD0oneYg4_D8aTGe3eNbR3Jg,111
6
+ hud/agents/__init__.py,sha256=S1hatsJF5stZymVknQlBmZCgP_WI2mc0efqSO_8PtuA,411
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=5StiFHsl_Ogo03o85XCNcHixEwz1Jj482bR4VIGY5iM,8027
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=W6fkf0EqC-p7e_QhFIM3byo7nNvpIXASC9cp7RH07ZM,14875
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=LU6LgOqhTbVwoDlzie6nPd6UeWI5mNPaDjMuugVcgVA,12668
49
+ hud/clients/fastmcp.py,sha256=vPANIBMMLklRlhNgA_Dl6HdIETNJbM8zvEPb-i93F38,8327
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=FplWmgCztUyXs1t5-MMvXwM7uO0rAV0UJnmJIcX_WNs,167
127
+ hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ hud_python-0.4.0.dist-info/METADATA,sha256=4eQM1ezjKR2OogFJBB2MDvyJK1TCkKMYV54MOSV3du8,19485
129
+ hud_python-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
130
+ hud_python-0.4.0.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
131
+ hud_python-0.4.0.dist-info/licenses/LICENSE,sha256=bskFRICmpDj1GtBpnuisjMR6mtQZtkPnRCtTz1CMMB0,1099
132
+ hud_python-0.4.0.dist-info/RECORD,,
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ hud = hud.cli:main
3
+ hud-python = hud.cli:main