hud-python 0.2.10__py3-none-any.whl → 0.3.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 (64) hide show
  1. hud/__init__.py +14 -5
  2. hud/env/docker_client.py +1 -1
  3. hud/env/environment.py +10 -7
  4. hud/env/local_docker_client.py +1 -1
  5. hud/env/remote_client.py +1 -1
  6. hud/env/remote_docker_client.py +2 -2
  7. hud/exceptions.py +2 -1
  8. hud/mcp_agent/__init__.py +15 -0
  9. hud/mcp_agent/base.py +723 -0
  10. hud/mcp_agent/claude.py +316 -0
  11. hud/mcp_agent/langchain.py +231 -0
  12. hud/mcp_agent/openai.py +318 -0
  13. hud/mcp_agent/tests/__init__.py +1 -0
  14. hud/mcp_agent/tests/test_base.py +437 -0
  15. hud/settings.py +14 -2
  16. hud/task.py +4 -0
  17. hud/telemetry/__init__.py +11 -7
  18. hud/telemetry/_trace.py +82 -71
  19. hud/telemetry/context.py +9 -27
  20. hud/telemetry/exporter.py +6 -5
  21. hud/telemetry/instrumentation/mcp.py +174 -410
  22. hud/telemetry/mcp_models.py +13 -74
  23. hud/telemetry/tests/test_context.py +9 -6
  24. hud/telemetry/tests/test_trace.py +92 -61
  25. hud/tools/__init__.py +21 -0
  26. hud/tools/base.py +65 -0
  27. hud/tools/bash.py +137 -0
  28. hud/tools/computer/__init__.py +13 -0
  29. hud/tools/computer/anthropic.py +411 -0
  30. hud/tools/computer/hud.py +315 -0
  31. hud/tools/computer/openai.py +283 -0
  32. hud/tools/edit.py +290 -0
  33. hud/tools/executors/__init__.py +13 -0
  34. hud/tools/executors/base.py +331 -0
  35. hud/tools/executors/pyautogui.py +585 -0
  36. hud/tools/executors/tests/__init__.py +1 -0
  37. hud/tools/executors/tests/test_base_executor.py +338 -0
  38. hud/tools/executors/tests/test_pyautogui_executor.py +162 -0
  39. hud/tools/executors/xdo.py +503 -0
  40. hud/tools/helper/README.md +56 -0
  41. hud/tools/helper/__init__.py +9 -0
  42. hud/tools/helper/mcp_server.py +78 -0
  43. hud/tools/helper/server_initialization.py +115 -0
  44. hud/tools/helper/utils.py +58 -0
  45. hud/tools/playwright_tool.py +373 -0
  46. hud/tools/tests/__init__.py +3 -0
  47. hud/tools/tests/test_bash.py +152 -0
  48. hud/tools/tests/test_computer.py +52 -0
  49. hud/tools/tests/test_computer_actions.py +34 -0
  50. hud/tools/tests/test_edit.py +233 -0
  51. hud/tools/tests/test_init.py +27 -0
  52. hud/tools/tests/test_playwright_tool.py +183 -0
  53. hud/tools/tests/test_tools.py +154 -0
  54. hud/tools/tests/test_utils.py +156 -0
  55. hud/tools/utils.py +50 -0
  56. hud/types.py +10 -1
  57. hud/utils/tests/test_init.py +21 -0
  58. hud/utils/tests/test_version.py +1 -1
  59. hud/version.py +1 -1
  60. {hud_python-0.2.10.dist-info → hud_python-0.3.0.dist-info}/METADATA +9 -6
  61. hud_python-0.3.0.dist-info/RECORD +124 -0
  62. hud_python-0.2.10.dist-info/RECORD +0 -85
  63. {hud_python-0.2.10.dist-info → hud_python-0.3.0.dist-info}/WHEEL +0 -0
  64. {hud_python-0.2.10.dist-info → hud_python-0.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,156 @@
1
+ """Tests for tools utils."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ from unittest.mock import AsyncMock, patch
7
+
8
+ import pytest
9
+
10
+ from hud.tools.utils import maybe_truncate, run
11
+
12
+
13
+ class TestRun:
14
+ """Tests for the run function."""
15
+
16
+ @pytest.mark.asyncio
17
+ async def test_run_string_command_success(self):
18
+ """Test running a string command successfully."""
19
+ mock_proc = AsyncMock()
20
+ mock_proc.returncode = 0
21
+ mock_proc.communicate = AsyncMock(return_value=(b"output", b""))
22
+
23
+ with patch("asyncio.create_subprocess_shell", return_value=mock_proc) as mock_shell:
24
+ return_code, stdout, stderr = await run("echo test")
25
+
26
+ assert return_code == 0
27
+ assert stdout == "output"
28
+ assert stderr == ""
29
+ mock_shell.assert_called_once()
30
+
31
+ @pytest.mark.asyncio
32
+ async def test_run_list_command_success(self):
33
+ """Test running a list command successfully."""
34
+ mock_proc = AsyncMock()
35
+ mock_proc.returncode = 0
36
+ mock_proc.communicate = AsyncMock(return_value=(b"hello world", b""))
37
+
38
+ with patch("asyncio.create_subprocess_exec", return_value=mock_proc) as mock_exec:
39
+ return_code, stdout, stderr = await run(["echo", "hello", "world"])
40
+
41
+ assert return_code == 0
42
+ assert stdout == "hello world"
43
+ assert stderr == ""
44
+ mock_exec.assert_called_once_with(
45
+ "echo",
46
+ "hello",
47
+ "world",
48
+ stdin=None,
49
+ stdout=asyncio.subprocess.PIPE,
50
+ stderr=asyncio.subprocess.PIPE,
51
+ )
52
+
53
+ @pytest.mark.asyncio
54
+ async def test_run_with_input(self):
55
+ """Test running a command with input."""
56
+ mock_proc = AsyncMock()
57
+ mock_proc.returncode = 0
58
+ mock_proc.communicate = AsyncMock(return_value=(b"processed", b""))
59
+
60
+ with patch("asyncio.create_subprocess_shell", return_value=mock_proc):
61
+ return_code, stdout, stderr = await run("cat", input="test input")
62
+
63
+ assert return_code == 0
64
+ assert stdout == "processed"
65
+ mock_proc.communicate.assert_called_once_with(input=b"test input")
66
+
67
+ @pytest.mark.asyncio
68
+ async def test_run_with_error(self):
69
+ """Test running a command that returns an error."""
70
+ mock_proc = AsyncMock()
71
+ mock_proc.returncode = 1
72
+ mock_proc.communicate = AsyncMock(return_value=(b"", b"error message"))
73
+
74
+ with patch("asyncio.create_subprocess_shell", return_value=mock_proc):
75
+ return_code, stdout, stderr = await run("false")
76
+
77
+ assert return_code == 1
78
+ assert stdout == ""
79
+ assert stderr == "error message"
80
+
81
+ @pytest.mark.asyncio
82
+ async def test_run_with_timeout(self):
83
+ """Test running a command with custom timeout."""
84
+ mock_proc = AsyncMock()
85
+ mock_proc.returncode = 0
86
+ mock_proc.communicate = AsyncMock(return_value=(b"done", b""))
87
+
88
+ with (
89
+ patch("asyncio.create_subprocess_shell", return_value=mock_proc),
90
+ patch("asyncio.wait_for") as mock_wait_for,
91
+ ):
92
+ mock_wait_for.return_value = (b"done", b"")
93
+
94
+ return_code, stdout, stderr = await run("sleep 1", timeout=5.0)
95
+
96
+ # Check that wait_for was called with the correct timeout
97
+ mock_wait_for.assert_called_once()
98
+ assert mock_wait_for.call_args[1]["timeout"] == 5.0
99
+
100
+ @pytest.mark.asyncio
101
+ async def test_run_timeout_exception(self):
102
+ """Test running a command that times out."""
103
+ mock_proc = AsyncMock()
104
+
105
+ with (
106
+ patch("asyncio.create_subprocess_shell", return_value=mock_proc),
107
+ patch("asyncio.wait_for", side_effect=TimeoutError()),
108
+ pytest.raises(asyncio.TimeoutError),
109
+ ):
110
+ await run("sleep infinity", timeout=0.1)
111
+
112
+
113
+ class TestMaybeTruncate:
114
+ """Tests for the maybe_truncate function."""
115
+
116
+ def test_maybe_truncate_short_text(self):
117
+ """Test that short text is not truncated."""
118
+ text = "This is a short text"
119
+ result = maybe_truncate(text)
120
+ assert result == text
121
+
122
+ def test_maybe_truncate_long_text_default(self):
123
+ """Test that long text is truncated with default limit."""
124
+ text = "x" * 30000 # Much longer than default limit
125
+ result = maybe_truncate(text)
126
+
127
+ assert len(result) < len(text)
128
+ assert result.endswith("... (truncated)")
129
+ assert len(result) == 20480 + len("... (truncated)")
130
+
131
+ def test_maybe_truncate_custom_limit(self):
132
+ """Test truncation with custom limit."""
133
+ text = "abcdefghijklmnopqrstuvwxyz"
134
+ result = maybe_truncate(text, max_length=10)
135
+
136
+ assert result == "abcdefghij... (truncated)"
137
+
138
+ def test_maybe_truncate_exact_limit(self):
139
+ """Test text exactly at limit is not truncated."""
140
+ text = "x" * 100
141
+ result = maybe_truncate(text, max_length=100)
142
+
143
+ assert result == text
144
+
145
+ def test_maybe_truncate_empty_string(self):
146
+ """Test empty string handling."""
147
+ result = maybe_truncate("")
148
+ assert result == ""
149
+
150
+ def test_maybe_truncate_unicode(self):
151
+ """Test truncation with unicode characters."""
152
+ text = "🎉" * 5000
153
+ result = maybe_truncate(text, max_length=10)
154
+
155
+ assert len(result) > 10 # Because of "... (truncated)" suffix
156
+ assert result.endswith("... (truncated)")
hud/tools/utils.py ADDED
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+ import subprocess
5
+
6
+ # Default timeout for running commands
7
+ DEFAULT_TIMEOUT = 10.0
8
+
9
+
10
+ async def run(
11
+ command: str | list[str],
12
+ input: str | None = None,
13
+ timeout: float | None = DEFAULT_TIMEOUT, # noqa: ASYNC109
14
+ ) -> tuple[int, str, str]:
15
+ """
16
+ Run a command asynchronously and return the result.
17
+
18
+ Args:
19
+ command: Command to run (string or list of strings)
20
+ input: Optional input to send to stdin
21
+ timeout: Timeout in seconds
22
+
23
+ Returns:
24
+ Tuple of (return_code, stdout, stderr)
25
+ """
26
+ if isinstance(command, str):
27
+ proc = await asyncio.create_subprocess_shell(
28
+ command,
29
+ stdin=subprocess.PIPE if input else None,
30
+ stdout=subprocess.PIPE,
31
+ stderr=subprocess.PIPE,
32
+ )
33
+ else:
34
+ proc = await asyncio.create_subprocess_exec(
35
+ *command,
36
+ stdin=subprocess.PIPE if input else None,
37
+ stdout=subprocess.PIPE,
38
+ stderr=subprocess.PIPE,
39
+ )
40
+
41
+ stdout, stderr = await asyncio.wait_for(
42
+ proc.communicate(input=input.encode() if input else None), timeout=timeout
43
+ )
44
+
45
+ return proc.returncode or 0, stdout.decode(), stderr.decode()
46
+
47
+
48
+ def maybe_truncate(text: str, max_length: int = 2048 * 10) -> str:
49
+ """Truncate output if too long."""
50
+ return text if len(text) <= max_length else text[:max_length] + "... (truncated)"
hud/types.py CHANGED
@@ -33,6 +33,15 @@ class CustomGym(BaseModel):
33
33
  host_config: dict[str, Any] | None = None
34
34
 
35
35
 
36
+ class MCPConfig(BaseModel):
37
+ """
38
+ MCP config for the environment.
39
+ """
40
+
41
+ type: Literal["mcp"] = "mcp"
42
+ config: dict[str, Any]
43
+
44
+
36
45
  class EnvironmentStatus(str, enum.Enum):
37
46
  """
38
47
  Status of the environment.
@@ -54,7 +63,7 @@ class EnvironmentStatus(str, enum.Enum):
54
63
  ServerGym: TypeAlias = Literal["qa", "hud-browser", "OSWorld-Ubuntu", "docker"]
55
64
 
56
65
  # Gyms can be either custom or server-side
57
- Gym: TypeAlias = CustomGym | ServerGym
66
+ Gym: TypeAlias = CustomGym | MCPConfig | ServerGym
58
67
 
59
68
 
60
69
  # Metadata keys for the environment.
@@ -0,0 +1,21 @@
1
+ """Test utils package imports."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ def test_utils_imports():
7
+ """Test that utils package can be imported."""
8
+ import hud.utils
9
+
10
+ # Check that the module exists
11
+ assert hud.utils is not None
12
+
13
+ # Try importing submodules
14
+ from hud.utils import agent, common, config, misc, progress, telemetry
15
+
16
+ assert agent is not None
17
+ assert common is not None
18
+ assert config is not None
19
+ assert misc is not None
20
+ assert progress is not None
21
+ assert telemetry is not None
@@ -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.2.10"
8
+ assert hud.__version__ == "0.3.0"
hud/version.py CHANGED
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.2.10"
7
+ __version__ = "0.3.0"
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.2.10
4
- Summary: SDK for the HUD evaluation platform.
3
+ Version: 0.3.0
4
+ Summary: SDK for the HUD platform.
5
5
  Project-URL: Homepage, https://github.com/hud-evals/hud-sdk
6
6
  Project-URL: Bug Tracker, https://github.com/hud-evals/hud-sdk/issues
7
- Project-URL: Documentation, https://hud.so
7
+ Project-URL: Documentation, https://docs.hud.so
8
8
  Author-email: HUD SDK <founders@hud.so>
9
9
  License: MIT License
10
10
 
@@ -31,11 +31,10 @@ License-File: LICENSE
31
31
  Classifier: Development Status :: 4 - Beta
32
32
  Classifier: Intended Audience :: Developers
33
33
  Classifier: Programming Language :: Python :: 3
34
- Classifier: Programming Language :: Python :: 3.10
35
34
  Classifier: Programming Language :: Python :: 3.11
36
35
  Classifier: Programming Language :: Python :: 3.12
37
36
  Classifier: Programming Language :: Python :: 3.13
38
- Requires-Python: <3.14,>=3.10
37
+ Requires-Python: <3.14,>=3.11
39
38
  Requires-Dist: aiodocker>=0.24.0
40
39
  Requires-Dist: anthropic
41
40
  Requires-Dist: dotenv>=0.9.9
@@ -43,12 +42,15 @@ Requires-Dist: httpx<1,>=0.23.0
43
42
  Requires-Dist: inspect-ai>=0.3.80
44
43
  Requires-Dist: ipykernel
45
44
  Requires-Dist: langchain
45
+ Requires-Dist: langchain-anthropic
46
46
  Requires-Dist: langchain-openai
47
- Requires-Dist: mcp
47
+ Requires-Dist: mcp-use>=1.3.7
48
+ Requires-Dist: mcp==1.12.2
48
49
  Requires-Dist: numpy
49
50
  Requires-Dist: openai
50
51
  Requires-Dist: pathspec>=0.12.1
51
52
  Requires-Dist: pillow>=11.1.0
53
+ Requires-Dist: pyautogui>=0.9.54
52
54
  Requires-Dist: pydantic-settings<3,>=2
53
55
  Requires-Dist: pydantic<3,>=2
54
56
  Requires-Dist: textdistance<5,>=4.5.0
@@ -62,6 +64,7 @@ Requires-Dist: ipython<9; extra == 'dev'
62
64
  Requires-Dist: jupyter-client; extra == 'dev'
63
65
  Requires-Dist: jupyter-core; extra == 'dev'
64
66
  Requires-Dist: openai; extra == 'dev'
67
+ Requires-Dist: playwright; extra == 'dev'
65
68
  Requires-Dist: pyright==1.1.401; extra == 'dev'
66
69
  Requires-Dist: pytest-asyncio; extra == 'dev'
67
70
  Requires-Dist: pytest-cov; extra == 'dev'
@@ -0,0 +1,124 @@
1
+ hud/__init__.py,sha256=yg4CC0iQWE67NGb6tUTmlO1kV-tM3njbigTuFYyzgAI,1477
2
+ hud/exceptions.py,sha256=Xna_pdEK_ESwkcffsRmT5GXq4xSHLV5cu7Qu3MjstSE,5516
3
+ hud/gym.py,sha256=JNWlO2GXev0xIjoTI9HMEbcQgGpzc6fku7-RYoYAxHI,4996
4
+ hud/job.py,sha256=0vWbr3E5bYstVRzXS_6l-57JGUFcrZpmFrNkOSQ8Aa0,26969
5
+ hud/settings.py,sha256=rZFd_fzPUZKOklhMpTTSIJrMD1-eH9h6WrbD27SSXZ8,2014
6
+ hud/task.py,sha256=WxftOrmaHqNvEsie1ZVIXJELYpfC9ejJL7b9TPQXEDg,8913
7
+ hud/taskset.py,sha256=9IRwHeAdsk_IEibayM-hElE3gTp0mgmi-huN67h9-tc,7019
8
+ hud/trajectory.py,sha256=ctAwrGIkdULr4xI6G-1Dp2fhDol4o_PmnPcqTzAEIUc,3797
9
+ hud/types.py,sha256=h7fUowbdyGF4Fg8TUnvCFoa2fflRRPi6xx7YgpBwFis,3109
10
+ hud/version.py,sha256=RPgsYJZ_E7U1ryhfdldTxD4xSiU4nQTEdzeq7iLynA4,104
11
+ hud/adapters/__init__.py,sha256=zz24KdC_e9TJPgWo6y57_8SzevEE5ak4Cm6tXzMxwRk,266
12
+ hud/adapters/claude/__init__.py,sha256=i7QEF-29FLb9qxp1eYtXs-adIk_tG54tL-9g6d3xodk,100
13
+ hud/adapters/claude/adapter.py,sha256=vCpotJ5gzQs4PP2iCXVavIcyG8c_4m1P6fuXStwUxSo,6675
14
+ hud/adapters/claude/tests/__init__.py,sha256=9GZj0rz4tTkiPnLfxTmyBPr-s8UZc3gph6WH8fs8T34,39
15
+ hud/adapters/claude/tests/test_adapter.py,sha256=cAdHEoqLngLiV7QwlWJ0KuNgb1vNv9WZTPQMnxhMDKI,18319
16
+ hud/adapters/common/__init__.py,sha256=BjdZWJVs_AKtpFrt-tNsdQRjnz7D97DFEQirJ-r0mp8,118
17
+ hud/adapters/common/adapter.py,sha256=GETzlsEl-uYkL-U4cQHBnfLAvm1dbXec4fKC2ypR1L0,5821
18
+ hud/adapters/common/types.py,sha256=6frue7_gZlSYtOHhF2tFHqzjltzzHsTVs6-H-jQwZ4Y,9955
19
+ hud/adapters/common/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ hud/adapters/common/tests/test_adapter.py,sha256=rTD36LjvytHqMIyOLDyrn0RLIkd20s6f6dwoBEarJaw,8744
21
+ hud/adapters/operator/__init__.py,sha256=31vTRs268_TOLd-TeQRKau5bDYy78wxCNpJFhD5_l8U,104
22
+ hud/adapters/operator/adapter.py,sha256=Uz4Sr73T57B7v4RRP0uaibHI17N2hBx6Z9YYjgJCUXA,3732
23
+ hud/adapters/operator/tests/__init__.py,sha256=yTsDVusVXZBQL6DnXpLgKQCBRuOYUAVQ8Blk_k5GETk,41
24
+ hud/adapters/operator/tests/test_adapter.py,sha256=4RAXwyxAtkh-1Mlt1zJayRkcv3LWaPNEhDVTpwOZd4A,12942
25
+ hud/agent/__init__.py,sha256=_OxMG3UW1vXSuixdpo09b1jexfWcUbfK44zto8t6_LE,453
26
+ hud/agent/base.py,sha256=hC3mVUMAWo5HHF2b576ScA9UQzsAzcCfPU9S8mDWthA,4080
27
+ hud/agent/claude.py,sha256=FBSKCxICO6XXYCuIrerVL89bVJ-5JxrZJBDeZgzAdJI,9886
28
+ hud/agent/claude_plays_pokemon.py,sha256=4TPibnTFhTb24ISRKAU3pA4waIcISTfZLOdfBMIMqxE,10085
29
+ hud/agent/langchain.py,sha256=H55JNHcGkdl-LVzZEqOFRkuuFEO0D8MI1jCNz9deoko,9012
30
+ hud/agent/operator.py,sha256=kntMOsdL5tzaGVSnzbGvFD2PMLzW2DEB2wEqN_LArQw,10500
31
+ hud/agent/misc/__init__.py,sha256=-ftYH1T5r7fXKKra6d8jXYmUz9KOTmYwBrPJU-V3S7g,71
32
+ hud/agent/misc/response_agent.py,sha256=3PPsZqNAyUo2ouSV0ylGQj9fJqojfSB2roq2DadUdG0,3048
33
+ hud/agent/tests/__init__.py,sha256=HbAW7FvSvzzKPU5LpveZceU8XTcDkRe1Bmte3OGi2f0,29
34
+ hud/agent/tests/test_base.py,sha256=MAHx4QWsX4y4jXDoA1sxWw8uFvL7lIzGlXrnHfOTmkw,8511
35
+ hud/env/__init__.py,sha256=wVEesXMXM5hcNXQHt0-PN4-9RnE69DEnQENS7uJSv_Y,266
36
+ hud/env/client.py,sha256=brhfLkWGSuvxl3vqGMCQT-vXfj8rUbJMhE3zJg9WMDA,869
37
+ hud/env/docker_client.py,sha256=_EfxCbld2lk5BCBegBMMGXrYxOtxoa8N468T1wFbGrE,11234
38
+ hud/env/environment.py,sha256=wjMBwGs5qkkXsVlXR_Z2QPZi4cwXE82ckdzRgHiXPjw,17019
39
+ hud/env/local_docker_client.py,sha256=EbULGazP9KlD1tQrFKSghC0MO2-G60iNVLinEPtQ33M,11573
40
+ hud/env/remote_client.py,sha256=tP5Gn1YtYgsjdXA4vM4FibAAHnR-9OOH4GrTog97cf8,6670
41
+ hud/env/remote_docker_client.py,sha256=sBoOz3cq9HMgVvX8qCYEhRLvdswMZLG9G4Ybc60RzDo,9574
42
+ hud/evaluators/__init__.py,sha256=V5nktEAw3EDn2Y537pjia5Y1IjdLBIPrDjTs6YTCdX4,153
43
+ hud/evaluators/base.py,sha256=ALO9Rj-R_9HtHIHYp84bsQQD12De0XnCTwad78_T5-k,771
44
+ hud/evaluators/inspect.py,sha256=ZvrTXLpgibyvQ5aNXAMP4quyXISrRQHg9besDcuCx7U,692
45
+ hud/evaluators/judge.py,sha256=N3gEQGwVin9Ir80wWw6VtaL0xrlzitbmItaLm0he5gY,5962
46
+ hud/evaluators/match.py,sha256=8YVQD942myX72Jkme2JFIVlmKhFXEa3CgGTjLC8O5n4,4701
47
+ hud/evaluators/remote.py,sha256=kmD_XIU20KvX0NKgaEEKTTKHp0KVRa_3jUEgONh2nkY,2054
48
+ hud/evaluators/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ hud/evaluators/tests/test_inspect.py,sha256=8dMjgQfXOJGcS8gP6TzoBbQiG_NYuRL6IobMG7euJdU,376
50
+ hud/evaluators/tests/test_judge.py,sha256=c1GaAeq_WpBVgBlx-gQncHrOPokzKNxlbgiC8W8hxYI,7829
51
+ hud/evaluators/tests/test_match.py,sha256=C04GoluyT9i41YZ65xEjN7tKHQbENbrpNhNtUd4ivmA,3919
52
+ hud/evaluators/tests/test_remote.py,sha256=YdJpyyuRLkYP0e3jTUkD3zobS2WHQPePn8yBZtYOIN4,3243
53
+ hud/mcp_agent/__init__.py,sha256=0R8SGgg2XU25y7B4lnBRv1n33d9TV6vaPXLafoiya2Y,324
54
+ hud/mcp_agent/base.py,sha256=P92Bcj3VH8veWgG6Yrq6cnE2gOnRaVG0NhEXdI-C8CA,29142
55
+ hud/mcp_agent/claude.py,sha256=5ORCs8PecqkRy2h5pVadxCIzJkjXZPPgkfOsGwJcJR4,11691
56
+ hud/mcp_agent/langchain.py,sha256=JOD10jeFuW4ekgEu7fzKWuveBTTOV0CTIld98fNMbz0,8136
57
+ hud/mcp_agent/openai.py,sha256=7SvbuKraLzlN4aGRsSkFtAVr1YldQmZ_9R8pRTWdQU0,12579
58
+ hud/mcp_agent/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,34
59
+ hud/mcp_agent/tests/test_base.py,sha256=7j_Id__Fd-d0VDRmfqyYM_p8JtF35mTPR90I8LeUXrI,16109
60
+ hud/server/__init__.py,sha256=IPxPCqtPLguryN-nBq78Sakypw2bRiE2iHv3SXG8YRk,139
61
+ hud/server/requests.py,sha256=AnFW4ELojjvfF6xjS2no6_fg4Rph2aR2hjPzYTede0Q,8841
62
+ hud/server/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ hud/server/tests/test_requests.py,sha256=63YCbykcib5MxKxm-OgHJPLX3QC7hmgIwnWaYukVM6s,9077
64
+ hud/telemetry/__init__.py,sha256=tNRbewoND4DvZUNw2aRYpR4kjRuh4o1XoNUuis62Zes,558
65
+ hud/telemetry/_trace.py,sha256=zggA2kTqLvM59F-DyRSRGKX-in27jcdrnr_xiTRWJvA,5375
66
+ hud/telemetry/context.py,sha256=LyibWGCq4FhGzauxIws36Hzzd0S0ryMYCPqYwoot4DQ,4638
67
+ hud/telemetry/exporter.py,sha256=LaD-U8TldKVn-rQkO88l8ZBlFxhVRbOuQmVKOGMMWnU,17875
68
+ hud/telemetry/mcp_models.py,sha256=0FQZoXtKOKeUsc2L61UbANpUDC7VNL842R2YFR61UBQ,8980
69
+ hud/telemetry/instrumentation/__init__.py,sha256=vHmSqaJMMehgRNn6EN2SMoYDD12rSHkLeVmj7Uy1my0,88
70
+ hud/telemetry/instrumentation/mcp.py,sha256=RbEaqmp8QHj1XqpIzwDSE8gH2cN5UjaBTouRxiPWxmc,9339
71
+ hud/telemetry/instrumentation/registry.py,sha256=UVaSsEA693lvKYd5R3n3ve6GcAB1fwqubRwIVeZiNmo,1821
72
+ hud/telemetry/tests/__init__.py,sha256=QMN8OzfrBUDbQESwrwHCqXLdDwCjYWX8BJcpeLUJfqA,33
73
+ hud/telemetry/tests/test_context.py,sha256=RdtjYHsyvlkKoTQxk0VezaAISEoVQReYqQiqK3jgFLQ,6746
74
+ hud/telemetry/tests/test_trace.py,sha256=fZt8WXflZivhBgWHhePWmmNbTYg0qF3oF3bTKE0KXiM,12016
75
+ hud/tools/__init__.py,sha256=vDxoIGHaj7FOnqki2Q92gGmEZx3f6Vx9RGkQo-X3cJ4,577
76
+ hud/tools/base.py,sha256=lmd7N7IccIWrPpA0NZundIglFTTiLFW9VP_PJI2EXug,2069
77
+ hud/tools/bash.py,sha256=o841_HF1NJFfUWLOVUw9s0iB4BoIxhA-8vMasJOhZ70,4319
78
+ hud/tools/edit.py,sha256=9vJ2XSnWOPViujQbZZuDjLahvzxoPHyAeXxgKfpUDHo,11796
79
+ hud/tools/playwright_tool.py,sha256=tq1La66esH2CwGYBkpvBDNPuswsspHtSE1cSqGVJEjU,13295
80
+ hud/tools/utils.py,sha256=bfVyYMcBOJvr1QdptCjVb6jaHVGIL5WUxmY59kzMekQ,1447
81
+ hud/tools/computer/__init__.py,sha256=ehKY7u0_4cZ9h7YQlOQjbKPWfd5LhQq8ZQn2w2-l2mY,302
82
+ hud/tools/computer/anthropic.py,sha256=M-djQmd0vPZm95FDszaMh4wSaLFPhlcCUb-JkSuflnU,16104
83
+ hud/tools/computer/hud.py,sha256=xyFYLqVoLsps0Dbs9kAfg941kXLnMHx7SL8a2skhjHw,13351
84
+ hud/tools/computer/openai.py,sha256=pcMGfoT6O8Rh9IrW_H1Mw2cIwk-FzCswrgjW19piRU8,10538
85
+ hud/tools/executors/__init__.py,sha256=Ybc8mP48ps3Z2QHjYcc0Yrhmn2ZNqZF1WLvl-0lyQ_w,262
86
+ hud/tools/executors/base.py,sha256=4h04Byt4ktaNk_aLOOI798pkMCLiqA7pE2PoaEn_hfg,11647
87
+ hud/tools/executors/pyautogui.py,sha256=1MWWXhyaPLeFkWXIr7pR_pii_XjDJxhpXdCCHFgF-1A,20803
88
+ hud/tools/executors/xdo.py,sha256=C6ecIVPUba7c6vKpgIcNxKcc698hwelQjj4YYUxT2_4,17751
89
+ hud/tools/executors/tests/__init__.py,sha256=opFpGSH6cEqIZgt9izXd3Yt85pC7xkxiYmOZQTHf4AY,32
90
+ hud/tools/executors/tests/test_base_executor.py,sha256=dvpKHCIjrBhT6E2U3hsjAwuivCAYXplvd08EHN6cxTI,12306
91
+ hud/tools/executors/tests/test_pyautogui_executor.py,sha256=cBgTAieWVT6C9dRtdqBWtRFmayteVQEp6DNofdCYLqc,6521
92
+ hud/tools/helper/README.md,sha256=GDS-K-wMnDO3-gtWjisgk5153zBmU29XSrs2ZhlOWQY,1727
93
+ hud/tools/helper/__init__.py,sha256=VqgQkY-y9h-WnGXZRK387fSr1BzrOQoAy3975WDAs4c,209
94
+ hud/tools/helper/mcp_server.py,sha256=t8UaGq91hDKef6zO3ApnJydwcKEqgLF6RdDcJ1GmfEA,2248
95
+ hud/tools/helper/server_initialization.py,sha256=j3lymoyXf9nGX907Thf4kxDfkIQ7g4-3yiRvR1Ztqc0,4025
96
+ hud/tools/helper/utils.py,sha256=hfaJX9HX2vmytaIwk_NG-luSXHY4VhrzegELDtx7Lp8,1776
97
+ hud/tools/tests/__init__.py,sha256=eEYYkxX5Hz9woXVOBJ2H2_CQoEih0vH6nRt3sH2Z8v8,49
98
+ hud/tools/tests/test_bash.py,sha256=LV3LjijwkQqxuxIXFSepD2x3sYoY4uhdw8EBv4JOyLU,4847
99
+ hud/tools/tests/test_computer.py,sha256=HxYHxKJ0eWyZzC3abzviFBU-auc8x6Sh2ciR_uVXMXw,1595
100
+ hud/tools/tests/test_computer_actions.py,sha256=YtUNFL7anhpXrcvg8EoUY1CqIV-TAAyaNFLZO9CiJ40,1194
101
+ hud/tools/tests/test_edit.py,sha256=UpUkn-fEXyFr9dKPT7pjmZ8ASUePkPnqwVMplUHowR4,8301
102
+ hud/tools/tests/test_init.py,sha256=PD_SS6X6SPhEjStJqYxdJRtsa7RbL6cTokAGIn5bWhA,702
103
+ hud/tools/tests/test_playwright_tool.py,sha256=1qED_NF2QXUZmBRbWSmcKImMLUQ3m5CbA_9tLUiaxTQ,6696
104
+ hud/tools/tests/test_tools.py,sha256=fNZMv93VhkFiXRHKt5krXZAASU2IsiA1149erUMa2ek,4418
105
+ hud/tools/tests/test_utils.py,sha256=oYxEnLpSA5sEeYFGUTj74QRNv0AHP3AjmYYHXgIW0BY,5496
106
+ hud/utils/__init__.py,sha256=oSl_gGoS272X2VFnBYX8hLxcP2xgGoBYQXAuLhtQgw8,260
107
+ hud/utils/agent.py,sha256=CpNgjKWMaNqo-EATH_vfJHIN53rEkZngm2LXfUFlldQ,1225
108
+ hud/utils/common.py,sha256=_3HNmSOsHWyexP6iXTuU2wMx3Fafeg5hZU3VXBmv0Ag,7780
109
+ hud/utils/config.py,sha256=L_sSYtEaOap-Gnb2iLPJPQc2rteyt6mjOdJUrktmFwM,4020
110
+ hud/utils/misc.py,sha256=CfOv_ftLty1iEo3Rxyz4AD4nmaBkhCJVO_W-FlcyDgI,1481
111
+ hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
112
+ hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
113
+ hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ hud/utils/tests/test_common.py,sha256=KqDSMf7gWf1oYCiQ_BXsnvW1wUmyzbOzAT-HNoF7txs,9443
115
+ hud/utils/tests/test_config.py,sha256=dPlXYWuMrxX-NOYbf0vdJ27TJpfacKG8eiKOSGOcfDU,4079
116
+ hud/utils/tests/test_init.py,sha256=UxlNTwjlSE2q3M0R86EmMYmmXmbRvzZaC-S2av26QXI,529
117
+ hud/utils/tests/test_progress.py,sha256=QunwDgi_heQXhDgmC25zgjr-sFUu5FdJ_1aYigMKeIc,6351
118
+ hud/utils/tests/test_telemetry.py,sha256=t0An1RTBaE0dZVEpF4uwuq5k1R-PXFR5k4u71h60tx8,1224
119
+ hud/utils/tests/test_version.py,sha256=J-6wPtkqEIDGjTCmUIylXicun-t7JdEHaJ8gcuj2mlY,159
120
+ hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ hud_python-0.3.0.dist-info/METADATA,sha256=fgbwnVd2CqZ4TSYMjjj9ygmhG3Yu_UnahOlqPXMcRQ4,9876
122
+ hud_python-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
123
+ hud_python-0.3.0.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
124
+ hud_python-0.3.0.dist-info/RECORD,,
@@ -1,85 +0,0 @@
1
- hud/__init__.py,sha256=kjjq-l2msg9HcfYQ4sL8c0-StQIlsl2qLwh8Tx0nKro,1210
2
- hud/exceptions.py,sha256=pifKvSqxj9_g4NfARVyH5a-lTThhi9XW06tIXaBakQw,5526
3
- hud/gym.py,sha256=JNWlO2GXev0xIjoTI9HMEbcQgGpzc6fku7-RYoYAxHI,4996
4
- hud/job.py,sha256=0vWbr3E5bYstVRzXS_6l-57JGUFcrZpmFrNkOSQ8Aa0,26969
5
- hud/settings.py,sha256=rx2zc3abJmf9ztwMHRYf9rGqgGprdRPCRhvJstsgyzc,1674
6
- hud/task.py,sha256=vDcjKUo8la0AUTP7mwMc2nYwe0tkbnrWwM9-Kvf3Ugg,8773
7
- hud/taskset.py,sha256=9IRwHeAdsk_IEibayM-hElE3gTp0mgmi-huN67h9-tc,7019
8
- hud/trajectory.py,sha256=ctAwrGIkdULr4xI6G-1Dp2fhDol4o_PmnPcqTzAEIUc,3797
9
- hud/types.py,sha256=xqrBb4rPKVkoLVwnyGk4PUrVKayCjKcUD_--n4OrxIM,2954
10
- hud/version.py,sha256=YhtAhomBvDAwgkjwAgLcLu1MtMuTg6PaYr0RKB3ROcI,105
11
- hud/adapters/__init__.py,sha256=zz24KdC_e9TJPgWo6y57_8SzevEE5ak4Cm6tXzMxwRk,266
12
- hud/adapters/claude/__init__.py,sha256=i7QEF-29FLb9qxp1eYtXs-adIk_tG54tL-9g6d3xodk,100
13
- hud/adapters/claude/adapter.py,sha256=vCpotJ5gzQs4PP2iCXVavIcyG8c_4m1P6fuXStwUxSo,6675
14
- hud/adapters/claude/tests/__init__.py,sha256=9GZj0rz4tTkiPnLfxTmyBPr-s8UZc3gph6WH8fs8T34,39
15
- hud/adapters/claude/tests/test_adapter.py,sha256=cAdHEoqLngLiV7QwlWJ0KuNgb1vNv9WZTPQMnxhMDKI,18319
16
- hud/adapters/common/__init__.py,sha256=BjdZWJVs_AKtpFrt-tNsdQRjnz7D97DFEQirJ-r0mp8,118
17
- hud/adapters/common/adapter.py,sha256=GETzlsEl-uYkL-U4cQHBnfLAvm1dbXec4fKC2ypR1L0,5821
18
- hud/adapters/common/types.py,sha256=6frue7_gZlSYtOHhF2tFHqzjltzzHsTVs6-H-jQwZ4Y,9955
19
- hud/adapters/common/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- hud/adapters/common/tests/test_adapter.py,sha256=rTD36LjvytHqMIyOLDyrn0RLIkd20s6f6dwoBEarJaw,8744
21
- hud/adapters/operator/__init__.py,sha256=31vTRs268_TOLd-TeQRKau5bDYy78wxCNpJFhD5_l8U,104
22
- hud/adapters/operator/adapter.py,sha256=Uz4Sr73T57B7v4RRP0uaibHI17N2hBx6Z9YYjgJCUXA,3732
23
- hud/adapters/operator/tests/__init__.py,sha256=yTsDVusVXZBQL6DnXpLgKQCBRuOYUAVQ8Blk_k5GETk,41
24
- hud/adapters/operator/tests/test_adapter.py,sha256=4RAXwyxAtkh-1Mlt1zJayRkcv3LWaPNEhDVTpwOZd4A,12942
25
- hud/agent/__init__.py,sha256=_OxMG3UW1vXSuixdpo09b1jexfWcUbfK44zto8t6_LE,453
26
- hud/agent/base.py,sha256=hC3mVUMAWo5HHF2b576ScA9UQzsAzcCfPU9S8mDWthA,4080
27
- hud/agent/claude.py,sha256=FBSKCxICO6XXYCuIrerVL89bVJ-5JxrZJBDeZgzAdJI,9886
28
- hud/agent/claude_plays_pokemon.py,sha256=4TPibnTFhTb24ISRKAU3pA4waIcISTfZLOdfBMIMqxE,10085
29
- hud/agent/langchain.py,sha256=H55JNHcGkdl-LVzZEqOFRkuuFEO0D8MI1jCNz9deoko,9012
30
- hud/agent/operator.py,sha256=kntMOsdL5tzaGVSnzbGvFD2PMLzW2DEB2wEqN_LArQw,10500
31
- hud/agent/misc/__init__.py,sha256=-ftYH1T5r7fXKKra6d8jXYmUz9KOTmYwBrPJU-V3S7g,71
32
- hud/agent/misc/response_agent.py,sha256=3PPsZqNAyUo2ouSV0ylGQj9fJqojfSB2roq2DadUdG0,3048
33
- hud/agent/tests/__init__.py,sha256=HbAW7FvSvzzKPU5LpveZceU8XTcDkRe1Bmte3OGi2f0,29
34
- hud/agent/tests/test_base.py,sha256=MAHx4QWsX4y4jXDoA1sxWw8uFvL7lIzGlXrnHfOTmkw,8511
35
- hud/env/__init__.py,sha256=wVEesXMXM5hcNXQHt0-PN4-9RnE69DEnQENS7uJSv_Y,266
36
- hud/env/client.py,sha256=brhfLkWGSuvxl3vqGMCQT-vXfj8rUbJMhE3zJg9WMDA,869
37
- hud/env/docker_client.py,sha256=xKKzs_mUgv_9Ukm0tkc0YaC5UKb31fZ-6lGbVIxXdf0,11216
38
- hud/env/environment.py,sha256=kPJ3y58Ry-AJ5sTLZknuzKUzmlPA94sujG9pC6GZiM4,16847
39
- hud/env/local_docker_client.py,sha256=ewZYVDEv3cBXg3jzuouh6raj0W922rID0n6xkqc4qqE,11555
40
- hud/env/remote_client.py,sha256=afLaQRSn9hge4arTkxYeus-a-T6DfeQ_EZBlPMRb2fM,6652
41
- hud/env/remote_docker_client.py,sha256=RkuBtju_ycxma7ZSEbcN0tjwBTQvvorb4Ctggu09aio,9538
42
- hud/evaluators/__init__.py,sha256=V5nktEAw3EDn2Y537pjia5Y1IjdLBIPrDjTs6YTCdX4,153
43
- hud/evaluators/base.py,sha256=ALO9Rj-R_9HtHIHYp84bsQQD12De0XnCTwad78_T5-k,771
44
- hud/evaluators/inspect.py,sha256=ZvrTXLpgibyvQ5aNXAMP4quyXISrRQHg9besDcuCx7U,692
45
- hud/evaluators/judge.py,sha256=N3gEQGwVin9Ir80wWw6VtaL0xrlzitbmItaLm0he5gY,5962
46
- hud/evaluators/match.py,sha256=8YVQD942myX72Jkme2JFIVlmKhFXEa3CgGTjLC8O5n4,4701
47
- hud/evaluators/remote.py,sha256=kmD_XIU20KvX0NKgaEEKTTKHp0KVRa_3jUEgONh2nkY,2054
48
- hud/evaluators/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- hud/evaluators/tests/test_inspect.py,sha256=8dMjgQfXOJGcS8gP6TzoBbQiG_NYuRL6IobMG7euJdU,376
50
- hud/evaluators/tests/test_judge.py,sha256=c1GaAeq_WpBVgBlx-gQncHrOPokzKNxlbgiC8W8hxYI,7829
51
- hud/evaluators/tests/test_match.py,sha256=C04GoluyT9i41YZ65xEjN7tKHQbENbrpNhNtUd4ivmA,3919
52
- hud/evaluators/tests/test_remote.py,sha256=YdJpyyuRLkYP0e3jTUkD3zobS2WHQPePn8yBZtYOIN4,3243
53
- hud/server/__init__.py,sha256=IPxPCqtPLguryN-nBq78Sakypw2bRiE2iHv3SXG8YRk,139
54
- hud/server/requests.py,sha256=AnFW4ELojjvfF6xjS2no6_fg4Rph2aR2hjPzYTede0Q,8841
55
- hud/server/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- hud/server/tests/test_requests.py,sha256=63YCbykcib5MxKxm-OgHJPLX3QC7hmgIwnWaYukVM6s,9077
57
- hud/telemetry/__init__.py,sha256=ky48kuZD3Bt0vOf9FwZwkV_ka7O26Tvcxh7p1lMpsMk,582
58
- hud/telemetry/_trace.py,sha256=W7S6CxwtmjNl4OZbA1SQHXsaNm072J9c-fjPjQomgOY,5135
59
- hud/telemetry/context.py,sha256=PNbfrMgjeRTTg0nUKXYCflqn71I_cSjU8LXdvouUfc4,5209
60
- hud/telemetry/exporter.py,sha256=IWK7Ahj9EIlFvG3J54Gj55X3pFnBWYYNAyXv5CIWcpA,17752
61
- hud/telemetry/mcp_models.py,sha256=YIArMtCVfC4NVvaEmUYs_kxDs0GQ-xtFFmB8jEGKaag,11342
62
- hud/telemetry/instrumentation/__init__.py,sha256=vHmSqaJMMehgRNn6EN2SMoYDD12rSHkLeVmj7Uy1my0,88
63
- hud/telemetry/instrumentation/mcp.py,sha256=xGAMdhTgM1ixHiDX7xkS9Ax1NCjK3u7pLWIbIh8WZIA,21925
64
- hud/telemetry/instrumentation/registry.py,sha256=UVaSsEA693lvKYd5R3n3ve6GcAB1fwqubRwIVeZiNmo,1821
65
- hud/telemetry/tests/__init__.py,sha256=QMN8OzfrBUDbQESwrwHCqXLdDwCjYWX8BJcpeLUJfqA,33
66
- hud/telemetry/tests/test_context.py,sha256=BGRDlXXC_VbpD4cYl_o9gRQDDKb2ox1das_ZuX14NC8,6531
67
- hud/telemetry/tests/test_trace.py,sha256=JzmjNRtHdQFPqLm7hOPastENg-hMJo9p8bbxJ77iXyc,10687
68
- hud/utils/__init__.py,sha256=oSl_gGoS272X2VFnBYX8hLxcP2xgGoBYQXAuLhtQgw8,260
69
- hud/utils/agent.py,sha256=CpNgjKWMaNqo-EATH_vfJHIN53rEkZngm2LXfUFlldQ,1225
70
- hud/utils/common.py,sha256=_3HNmSOsHWyexP6iXTuU2wMx3Fafeg5hZU3VXBmv0Ag,7780
71
- hud/utils/config.py,sha256=L_sSYtEaOap-Gnb2iLPJPQc2rteyt6mjOdJUrktmFwM,4020
72
- hud/utils/misc.py,sha256=CfOv_ftLty1iEo3Rxyz4AD4nmaBkhCJVO_W-FlcyDgI,1481
73
- hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
74
- hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
75
- hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- hud/utils/tests/test_common.py,sha256=KqDSMf7gWf1oYCiQ_BXsnvW1wUmyzbOzAT-HNoF7txs,9443
77
- hud/utils/tests/test_config.py,sha256=dPlXYWuMrxX-NOYbf0vdJ27TJpfacKG8eiKOSGOcfDU,4079
78
- hud/utils/tests/test_progress.py,sha256=QunwDgi_heQXhDgmC25zgjr-sFUu5FdJ_1aYigMKeIc,6351
79
- hud/utils/tests/test_telemetry.py,sha256=t0An1RTBaE0dZVEpF4uwuq5k1R-PXFR5k4u71h60tx8,1224
80
- hud/utils/tests/test_version.py,sha256=kLWQZWqHhS5i6f1f13iGqWExEJJ4x2Dn-DjZMUxsBOg,160
81
- hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- hud_python-0.2.10.dist-info/METADATA,sha256=-NishBOrDyz-9CworEVC8ZboBW7TaIVtq8-vWT9U2NI,9786
83
- hud_python-0.2.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
84
- hud_python-0.2.10.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
85
- hud_python-0.2.10.dist-info/RECORD,,