hud-python 0.4.1__py3-none-any.whl → 0.4.3__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.
- hud/__init__.py +22 -22
- hud/agents/__init__.py +13 -15
- hud/agents/base.py +599 -599
- hud/agents/claude.py +373 -373
- hud/agents/langchain.py +261 -250
- hud/agents/misc/__init__.py +7 -7
- hud/agents/misc/response_agent.py +82 -80
- hud/agents/openai.py +352 -352
- hud/agents/openai_chat_generic.py +154 -154
- hud/agents/tests/__init__.py +1 -1
- hud/agents/tests/test_base.py +742 -742
- hud/agents/tests/test_claude.py +324 -324
- hud/agents/tests/test_client.py +363 -363
- hud/agents/tests/test_openai.py +237 -237
- hud/cli/__init__.py +617 -617
- hud/cli/__main__.py +8 -8
- hud/cli/analyze.py +371 -371
- hud/cli/analyze_metadata.py +230 -230
- hud/cli/build.py +498 -427
- hud/cli/clone.py +185 -185
- hud/cli/cursor.py +92 -92
- hud/cli/debug.py +392 -392
- hud/cli/docker_utils.py +83 -83
- hud/cli/init.py +280 -281
- hud/cli/interactive.py +353 -353
- hud/cli/mcp_server.py +764 -756
- hud/cli/pull.py +330 -336
- hud/cli/push.py +404 -370
- hud/cli/remote_runner.py +311 -311
- hud/cli/runner.py +160 -160
- hud/cli/tests/__init__.py +3 -3
- hud/cli/tests/test_analyze.py +284 -284
- hud/cli/tests/test_cli_init.py +265 -265
- hud/cli/tests/test_cli_main.py +27 -27
- hud/cli/tests/test_clone.py +142 -142
- hud/cli/tests/test_cursor.py +253 -253
- hud/cli/tests/test_debug.py +453 -453
- hud/cli/tests/test_mcp_server.py +139 -139
- hud/cli/tests/test_utils.py +388 -388
- hud/cli/utils.py +263 -263
- hud/clients/README.md +143 -143
- hud/clients/__init__.py +16 -16
- hud/clients/base.py +378 -379
- hud/clients/fastmcp.py +222 -222
- hud/clients/mcp_use.py +298 -278
- hud/clients/tests/__init__.py +1 -1
- hud/clients/tests/test_client_integration.py +111 -111
- hud/clients/tests/test_fastmcp.py +342 -342
- hud/clients/tests/test_protocol.py +188 -188
- hud/clients/utils/__init__.py +1 -1
- hud/clients/utils/retry_transport.py +160 -160
- hud/datasets.py +327 -322
- hud/misc/__init__.py +1 -1
- hud/misc/claude_plays_pokemon.py +292 -292
- hud/otel/__init__.py +35 -35
- hud/otel/collector.py +142 -142
- hud/otel/config.py +164 -164
- hud/otel/context.py +536 -536
- hud/otel/exporters.py +366 -366
- hud/otel/instrumentation.py +97 -97
- hud/otel/processors.py +118 -118
- hud/otel/tests/__init__.py +1 -1
- hud/otel/tests/test_processors.py +197 -197
- hud/server/__init__.py +5 -5
- hud/server/context.py +114 -114
- hud/server/helper/__init__.py +5 -5
- hud/server/low_level.py +132 -132
- hud/server/server.py +170 -166
- hud/server/tests/__init__.py +3 -3
- hud/settings.py +73 -73
- hud/shared/__init__.py +5 -5
- hud/shared/exceptions.py +180 -180
- hud/shared/requests.py +264 -264
- hud/shared/tests/test_exceptions.py +157 -157
- hud/shared/tests/test_requests.py +275 -275
- hud/telemetry/__init__.py +25 -25
- hud/telemetry/instrument.py +379 -379
- hud/telemetry/job.py +309 -309
- hud/telemetry/replay.py +74 -74
- hud/telemetry/trace.py +83 -83
- hud/tools/__init__.py +33 -33
- hud/tools/base.py +365 -365
- hud/tools/bash.py +161 -161
- hud/tools/computer/__init__.py +15 -15
- hud/tools/computer/anthropic.py +437 -437
- hud/tools/computer/hud.py +376 -376
- hud/tools/computer/openai.py +295 -295
- hud/tools/computer/settings.py +82 -82
- hud/tools/edit.py +314 -314
- hud/tools/executors/__init__.py +30 -30
- hud/tools/executors/base.py +539 -539
- hud/tools/executors/pyautogui.py +621 -621
- hud/tools/executors/tests/__init__.py +1 -1
- hud/tools/executors/tests/test_base_executor.py +338 -338
- hud/tools/executors/tests/test_pyautogui_executor.py +165 -165
- hud/tools/executors/xdo.py +511 -511
- hud/tools/playwright.py +412 -412
- hud/tools/tests/__init__.py +3 -3
- hud/tools/tests/test_base.py +282 -282
- hud/tools/tests/test_bash.py +158 -158
- hud/tools/tests/test_bash_extended.py +197 -197
- hud/tools/tests/test_computer.py +425 -425
- hud/tools/tests/test_computer_actions.py +34 -34
- hud/tools/tests/test_edit.py +259 -259
- hud/tools/tests/test_init.py +27 -27
- hud/tools/tests/test_playwright_tool.py +183 -183
- hud/tools/tests/test_tools.py +145 -145
- hud/tools/tests/test_utils.py +156 -156
- hud/tools/types.py +72 -72
- hud/tools/utils.py +50 -50
- hud/types.py +136 -136
- hud/utils/__init__.py +10 -10
- hud/utils/async_utils.py +65 -65
- hud/utils/design.py +236 -168
- hud/utils/mcp.py +55 -55
- hud/utils/progress.py +149 -149
- hud/utils/telemetry.py +66 -66
- hud/utils/tests/test_async_utils.py +173 -173
- hud/utils/tests/test_init.py +17 -17
- hud/utils/tests/test_progress.py +261 -261
- hud/utils/tests/test_telemetry.py +82 -82
- hud/utils/tests/test_version.py +8 -8
- hud/version.py +7 -7
- {hud_python-0.4.1.dist-info → hud_python-0.4.3.dist-info}/METADATA +10 -8
- hud_python-0.4.3.dist-info/RECORD +131 -0
- {hud_python-0.4.1.dist-info → hud_python-0.4.3.dist-info}/licenses/LICENSE +21 -21
- hud/agents/art.py +0 -101
- hud_python-0.4.1.dist-info/RECORD +0 -132
- {hud_python-0.4.1.dist-info → hud_python-0.4.3.dist-info}/WHEEL +0 -0
- {hud_python-0.4.1.dist-info → hud_python-0.4.3.dist-info}/entry_points.txt +0 -0
hud/clients/README.md
CHANGED
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
# HUD MCP Client Architecture
|
|
2
|
-
|
|
3
|
-
This directory contains the MCP client implementations for HUD SDK. The architecture is designed to be flexible and extensible, allowing different client implementations while maintaining a consistent interface for agents.
|
|
4
|
-
|
|
5
|
-
## Architecture Overview
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
hud/clients/
|
|
9
|
-
├── base.py # Protocol definition and base class
|
|
10
|
-
├── mcp_use.py # MCP-use based implementation (legacy)
|
|
11
|
-
├── fastmcp.py # FastMCP based implementation (modern)
|
|
12
|
-
└── __init__.py # Exports and default client
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Protocol Definition
|
|
16
|
-
|
|
17
|
-
All clients must implement the `AgentMCPClient` protocol:
|
|
18
|
-
|
|
19
|
-
```python
|
|
20
|
-
class AgentMCPClient(Protocol):
|
|
21
|
-
async def initialize(self) -> None:
|
|
22
|
-
"""Initialize the client - connect and fetch telemetry."""
|
|
23
|
-
|
|
24
|
-
async def list_tools(self) -> list[types.Tool]:
|
|
25
|
-
"""List all available tools."""
|
|
26
|
-
|
|
27
|
-
async def call_tool(name: str, arguments: dict | None = None) -> types.CallToolResult:
|
|
28
|
-
"""Execute a tool by name."""
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Available Implementations
|
|
32
|
-
|
|
33
|
-
### 1. MCPUseHUDClient
|
|
34
|
-
- Based on the `mcp_use` library
|
|
35
|
-
- Supports multiple concurrent server connections
|
|
36
|
-
- Battle-tested and stable
|
|
37
|
-
- Good for complex multi-server setups
|
|
38
|
-
|
|
39
|
-
### 2. FastMCPHUDClient (Default)
|
|
40
|
-
- Based on the `fastmcp` library
|
|
41
|
-
- Modern, clean API with better error handling
|
|
42
|
-
- Supports various transports (HTTP, WebSocket, stdio, in-memory)
|
|
43
|
-
- Better type safety and structured data support
|
|
44
|
-
|
|
45
|
-
## Usage Examples
|
|
46
|
-
|
|
47
|
-
### Basic Usage
|
|
48
|
-
|
|
49
|
-
```python
|
|
50
|
-
from hud.clients import MCPUseHUDClient, FastMCPHUDClient
|
|
51
|
-
|
|
52
|
-
# Configuration works for both clients
|
|
53
|
-
mcp_config = {
|
|
54
|
-
"server_name": {
|
|
55
|
-
"command": "python",
|
|
56
|
-
"args": ["server.py"]
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
# Option 1: MCP-use client
|
|
61
|
-
client = MCPUseHUDClient(mcp_config)
|
|
62
|
-
|
|
63
|
-
# Option 2: FastMCP client
|
|
64
|
-
client = FastMCPHUDClient(mcp_config)
|
|
65
|
-
|
|
66
|
-
# Both use the same API
|
|
67
|
-
async with client:
|
|
68
|
-
tools = await client.list_tools()
|
|
69
|
-
result = await client.call_tool("tool_name", {"arg": "value"})
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### With Agents
|
|
73
|
-
|
|
74
|
-
```python
|
|
75
|
-
from hud.agents import ClaudeAgent
|
|
76
|
-
|
|
77
|
-
# Either client works with agents
|
|
78
|
-
client = FastMCPHUDClient(mcp_config)
|
|
79
|
-
|
|
80
|
-
agent = ClaudeAgent(
|
|
81
|
-
mcp_client=client,
|
|
82
|
-
model="claude-3-7-sonnet-20250219"
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
# Agent works identically with either client
|
|
86
|
-
result = await agent.run("Your task here")
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
## Adding New Clients
|
|
91
|
-
|
|
92
|
-
To add a new client implementation:
|
|
93
|
-
|
|
94
|
-
1. Inherit from `BaseHUDClient`
|
|
95
|
-
2. Implement the required methods:
|
|
96
|
-
- `_connect()` - Establish connection
|
|
97
|
-
- `list_tools()` - List available tools
|
|
98
|
-
- `call_tool()` - Execute tools
|
|
99
|
-
- `_read_resource_internal()` - Read resources
|
|
100
|
-
|
|
101
|
-
3. The base class handles:
|
|
102
|
-
- Initialization flow
|
|
103
|
-
- Telemetry fetching
|
|
104
|
-
- Verbose logging
|
|
105
|
-
- Common HUD features
|
|
106
|
-
|
|
107
|
-
## Tool Output Validation
|
|
108
|
-
|
|
109
|
-
Both client implementations support tool output validation through the MCP protocol:
|
|
110
|
-
|
|
111
|
-
```python
|
|
112
|
-
# Enable strict validation
|
|
113
|
-
client = MCPClient(mcp_config, strict_validation=True)
|
|
114
|
-
|
|
115
|
-
# With strict validation:
|
|
116
|
-
# - Tools must return structured content if they define an output schema
|
|
117
|
-
# - Content must match the schema or an error is raised
|
|
118
|
-
# - Helps catch tool implementation issues early
|
|
119
|
-
|
|
120
|
-
# Default behavior (lenient validation):
|
|
121
|
-
client = MCPClient(mcp_config, strict_validation=False) # Default
|
|
122
|
-
|
|
123
|
-
# With lenient validation:
|
|
124
|
-
# - Schema violations are logged as warnings
|
|
125
|
-
# - Execution continues even if output doesn't match schema
|
|
126
|
-
# - Better for development and debugging
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Example with Validation
|
|
130
|
-
|
|
131
|
-
```python
|
|
132
|
-
from hud.clients import MCPClient
|
|
133
|
-
|
|
134
|
-
# Create client with strict validation
|
|
135
|
-
client = MCPClient(mcp_config, strict_validation=True)
|
|
136
|
-
|
|
137
|
-
try:
|
|
138
|
-
# If tool has output schema but returns invalid data,
|
|
139
|
-
# this will raise a RuntimeError
|
|
140
|
-
result = await client.call_tool("some_tool", {"arg": "value"})
|
|
141
|
-
except RuntimeError as e:
|
|
142
|
-
print(f"Validation error: {e}")
|
|
143
|
-
```
|
|
1
|
+
# HUD MCP Client Architecture
|
|
2
|
+
|
|
3
|
+
This directory contains the MCP client implementations for HUD SDK. The architecture is designed to be flexible and extensible, allowing different client implementations while maintaining a consistent interface for agents.
|
|
4
|
+
|
|
5
|
+
## Architecture Overview
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
hud/clients/
|
|
9
|
+
├── base.py # Protocol definition and base class
|
|
10
|
+
├── mcp_use.py # MCP-use based implementation (legacy)
|
|
11
|
+
├── fastmcp.py # FastMCP based implementation (modern)
|
|
12
|
+
└── __init__.py # Exports and default client
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Protocol Definition
|
|
16
|
+
|
|
17
|
+
All clients must implement the `AgentMCPClient` protocol:
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
class AgentMCPClient(Protocol):
|
|
21
|
+
async def initialize(self) -> None:
|
|
22
|
+
"""Initialize the client - connect and fetch telemetry."""
|
|
23
|
+
|
|
24
|
+
async def list_tools(self) -> list[types.Tool]:
|
|
25
|
+
"""List all available tools."""
|
|
26
|
+
|
|
27
|
+
async def call_tool(name: str, arguments: dict | None = None) -> types.CallToolResult:
|
|
28
|
+
"""Execute a tool by name."""
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Available Implementations
|
|
32
|
+
|
|
33
|
+
### 1. MCPUseHUDClient
|
|
34
|
+
- Based on the `mcp_use` library
|
|
35
|
+
- Supports multiple concurrent server connections
|
|
36
|
+
- Battle-tested and stable
|
|
37
|
+
- Good for complex multi-server setups
|
|
38
|
+
|
|
39
|
+
### 2. FastMCPHUDClient (Default)
|
|
40
|
+
- Based on the `fastmcp` library
|
|
41
|
+
- Modern, clean API with better error handling
|
|
42
|
+
- Supports various transports (HTTP, WebSocket, stdio, in-memory)
|
|
43
|
+
- Better type safety and structured data support
|
|
44
|
+
|
|
45
|
+
## Usage Examples
|
|
46
|
+
|
|
47
|
+
### Basic Usage
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from hud.clients import MCPUseHUDClient, FastMCPHUDClient
|
|
51
|
+
|
|
52
|
+
# Configuration works for both clients
|
|
53
|
+
mcp_config = {
|
|
54
|
+
"server_name": {
|
|
55
|
+
"command": "python",
|
|
56
|
+
"args": ["server.py"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Option 1: MCP-use client
|
|
61
|
+
client = MCPUseHUDClient(mcp_config)
|
|
62
|
+
|
|
63
|
+
# Option 2: FastMCP client
|
|
64
|
+
client = FastMCPHUDClient(mcp_config)
|
|
65
|
+
|
|
66
|
+
# Both use the same API
|
|
67
|
+
async with client:
|
|
68
|
+
tools = await client.list_tools()
|
|
69
|
+
result = await client.call_tool("tool_name", {"arg": "value"})
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### With Agents
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
from hud.agents import ClaudeAgent
|
|
76
|
+
|
|
77
|
+
# Either client works with agents
|
|
78
|
+
client = FastMCPHUDClient(mcp_config)
|
|
79
|
+
|
|
80
|
+
agent = ClaudeAgent(
|
|
81
|
+
mcp_client=client,
|
|
82
|
+
model="claude-3-7-sonnet-20250219"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Agent works identically with either client
|
|
86
|
+
result = await agent.run("Your task here")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## Adding New Clients
|
|
91
|
+
|
|
92
|
+
To add a new client implementation:
|
|
93
|
+
|
|
94
|
+
1. Inherit from `BaseHUDClient`
|
|
95
|
+
2. Implement the required methods:
|
|
96
|
+
- `_connect()` - Establish connection
|
|
97
|
+
- `list_tools()` - List available tools
|
|
98
|
+
- `call_tool()` - Execute tools
|
|
99
|
+
- `_read_resource_internal()` - Read resources
|
|
100
|
+
|
|
101
|
+
3. The base class handles:
|
|
102
|
+
- Initialization flow
|
|
103
|
+
- Telemetry fetching
|
|
104
|
+
- Verbose logging
|
|
105
|
+
- Common HUD features
|
|
106
|
+
|
|
107
|
+
## Tool Output Validation
|
|
108
|
+
|
|
109
|
+
Both client implementations support tool output validation through the MCP protocol:
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
# Enable strict validation
|
|
113
|
+
client = MCPClient(mcp_config, strict_validation=True)
|
|
114
|
+
|
|
115
|
+
# With strict validation:
|
|
116
|
+
# - Tools must return structured content if they define an output schema
|
|
117
|
+
# - Content must match the schema or an error is raised
|
|
118
|
+
# - Helps catch tool implementation issues early
|
|
119
|
+
|
|
120
|
+
# Default behavior (lenient validation):
|
|
121
|
+
client = MCPClient(mcp_config, strict_validation=False) # Default
|
|
122
|
+
|
|
123
|
+
# With lenient validation:
|
|
124
|
+
# - Schema violations are logged as warnings
|
|
125
|
+
# - Execution continues even if output doesn't match schema
|
|
126
|
+
# - Better for development and debugging
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Example with Validation
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
from hud.clients import MCPClient
|
|
133
|
+
|
|
134
|
+
# Create client with strict validation
|
|
135
|
+
client = MCPClient(mcp_config, strict_validation=True)
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
# If tool has output schema but returns invalid data,
|
|
139
|
+
# this will raise a RuntimeError
|
|
140
|
+
result = await client.call_tool("some_tool", {"arg": "value"})
|
|
141
|
+
except RuntimeError as e:
|
|
142
|
+
print(f"Validation error: {e}")
|
|
143
|
+
```
|
hud/clients/__init__.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
"""HUD MCP client implementations."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from .base import AgentMCPClient, BaseHUDClient
|
|
6
|
-
from .fastmcp import FastMCPHUDClient
|
|
7
|
-
|
|
8
|
-
# Default to FastMCP for new features
|
|
9
|
-
MCPClient = FastMCPHUDClient
|
|
10
|
-
|
|
11
|
-
__all__ = [
|
|
12
|
-
"AgentMCPClient",
|
|
13
|
-
"BaseHUDClient",
|
|
14
|
-
"FastMCPHUDClient",
|
|
15
|
-
"MCPClient",
|
|
16
|
-
]
|
|
1
|
+
"""HUD MCP client implementations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .base import AgentMCPClient, BaseHUDClient
|
|
6
|
+
from .fastmcp import FastMCPHUDClient
|
|
7
|
+
|
|
8
|
+
# Default to FastMCP for new features
|
|
9
|
+
MCPClient = FastMCPHUDClient
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"AgentMCPClient",
|
|
13
|
+
"BaseHUDClient",
|
|
14
|
+
"FastMCPHUDClient",
|
|
15
|
+
"MCPClient",
|
|
16
|
+
]
|