use-computer 0.0.30__tar.gz → 0.0.32__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {use_computer-0.0.30 → use_computer-0.0.32}/PKG-INFO +11 -26
- {use_computer-0.0.30 → use_computer-0.0.32}/README.md +6 -7
- {use_computer-0.0.30 → use_computer-0.0.32}/pyproject.toml +2 -7
- {use_computer-0.0.30 → use_computer-0.0.32}/scripts/smoke_wheel.py +109 -5
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/__init__.py +2 -8
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/README.md +1 -1
- use_computer-0.0.32/use_computer/agents/debug/__init__.py +5 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/agent.py +1 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/agents.py +7 -1
- {use_computer-0.0.30 → use_computer-0.0.32}/uv.lock +5 -33
- use_computer-0.0.30/use_computer/agents/debug/__init__.py +0 -5
- {use_computer-0.0.30 → use_computer-0.0.32}/.env.example +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/.gitignore +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/.pre-commit-config.yaml +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/accessibility.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/actions.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/agent.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/artifacts.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/desktop.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/final_state.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/prompts.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/recordings.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/sandbox.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/screenshots.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/trajectory.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/core.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/actions.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/models.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/agent.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/tools.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/anthropic.txt +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/gemini.txt +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/ios.txt +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/openai.txt +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/pyautogui.txt +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/anthropic.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/gemini.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/generic.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/openai.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/types.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ax_transpile.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/client.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/display.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/errors.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/gateway.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ios.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/macos.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ubuntu.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/windows.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/setup_files.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/use_computer.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/verifier.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/apps.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/environment.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/input.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/keyboard.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/mouse.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/models.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/parsers.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/py.typed +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/recording.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/accessibility.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/display.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/recording.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/screenshot.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/retry.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/sandbox.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/screenshot.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/simulators.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/pre_command.ps1 +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/pre_command.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/task.toml +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ios.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ios_nograder.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_check.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_nograder.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_check.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_nograder.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_check.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_nograder.sh +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/windows/__init__.py +0 -0
- {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/windows/shell.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: use-computer
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.32
|
|
4
4
|
Summary: Python SDK for use.computer sandboxes across macOS, iOS simulators, Windows, and Ubuntu
|
|
5
5
|
Project-URL: Homepage, https://use.computer
|
|
6
6
|
Project-URL: Documentation, https://api.use.computer/docs
|
|
@@ -19,25 +19,11 @@ Classifier: Typing :: Typed
|
|
|
19
19
|
Requires-Python: >=3.10
|
|
20
20
|
Requires-Dist: httpx>=0.27
|
|
21
21
|
Provides-Extra: agents
|
|
22
|
+
Requires-Dist: anthropic>=0.86; extra == 'agents'
|
|
23
|
+
Requires-Dist: google-genai>=1; extra == 'agents'
|
|
24
|
+
Requires-Dist: litellm>=1; extra == 'agents'
|
|
25
|
+
Requires-Dist: openai>=1; extra == 'agents'
|
|
22
26
|
Requires-Dist: pillow>=10; extra == 'agents'
|
|
23
|
-
Provides-Extra: agents-all
|
|
24
|
-
Requires-Dist: anthropic>=0.86; extra == 'agents-all'
|
|
25
|
-
Requires-Dist: google-genai>=1; extra == 'agents-all'
|
|
26
|
-
Requires-Dist: litellm>=1; extra == 'agents-all'
|
|
27
|
-
Requires-Dist: openai>=1; extra == 'agents-all'
|
|
28
|
-
Requires-Dist: pillow>=10; extra == 'agents-all'
|
|
29
|
-
Provides-Extra: agents-anthropic
|
|
30
|
-
Requires-Dist: anthropic>=0.86; extra == 'agents-anthropic'
|
|
31
|
-
Requires-Dist: pillow>=10; extra == 'agents-anthropic'
|
|
32
|
-
Provides-Extra: agents-gemini
|
|
33
|
-
Requires-Dist: google-genai>=1; extra == 'agents-gemini'
|
|
34
|
-
Requires-Dist: pillow>=10; extra == 'agents-gemini'
|
|
35
|
-
Provides-Extra: agents-litellm
|
|
36
|
-
Requires-Dist: litellm>=1; extra == 'agents-litellm'
|
|
37
|
-
Requires-Dist: pillow>=10; extra == 'agents-litellm'
|
|
38
|
-
Provides-Extra: agents-openai
|
|
39
|
-
Requires-Dist: openai>=1; extra == 'agents-openai'
|
|
40
|
-
Requires-Dist: pillow>=10; extra == 'agents-openai'
|
|
41
27
|
Provides-Extra: harbor
|
|
42
28
|
Requires-Dist: harbor>=0.4.0; (python_version >= '3.12') and extra == 'harbor'
|
|
43
29
|
Requires-Dist: pyyaml>=6; extra == 'harbor'
|
|
@@ -56,15 +42,14 @@ export USE_COMPUTER_API_KEY=mk_live_...
|
|
|
56
42
|
Optional agent and Harbor integrations are installed explicitly:
|
|
57
43
|
|
|
58
44
|
```bash
|
|
59
|
-
pip install "use-computer[agents]"
|
|
60
|
-
pip install "use-computer[
|
|
61
|
-
pip install "use-computer[harbor]"
|
|
62
|
-
pip install "use-computer[harbor,agents-all]" # Harbor adapter plus all provider deps
|
|
45
|
+
pip install "use-computer[agents]" # computer-use agents and provider SDKs
|
|
46
|
+
pip install "use-computer[harbor]" # Harbor environment adapter (Python 3.12+)
|
|
47
|
+
pip install "use-computer[harbor,agents]" # Harbor adapter plus agents
|
|
63
48
|
```
|
|
64
49
|
|
|
65
|
-
Base installs only the SDK client and `httpx`. The `agents
|
|
66
|
-
model-provider dependencies; `harbor` installs Harbor plus
|
|
67
|
-
adapter dependencies
|
|
50
|
+
Base installs only the SDK client and `httpx`. The `agents` extra installs the
|
|
51
|
+
agent runtime plus model-provider dependencies; `harbor` installs Harbor plus
|
|
52
|
+
the environment adapter dependencies.
|
|
68
53
|
|
|
69
54
|
```python
|
|
70
55
|
from use_computer.agents import AnthropicComputerAgent
|
|
@@ -10,15 +10,14 @@ export USE_COMPUTER_API_KEY=mk_live_...
|
|
|
10
10
|
Optional agent and Harbor integrations are installed explicitly:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
pip install "use-computer[agents]"
|
|
14
|
-
pip install "use-computer[
|
|
15
|
-
pip install "use-computer[harbor]"
|
|
16
|
-
pip install "use-computer[harbor,agents-all]" # Harbor adapter plus all provider deps
|
|
13
|
+
pip install "use-computer[agents]" # computer-use agents and provider SDKs
|
|
14
|
+
pip install "use-computer[harbor]" # Harbor environment adapter (Python 3.12+)
|
|
15
|
+
pip install "use-computer[harbor,agents]" # Harbor adapter plus agents
|
|
17
16
|
```
|
|
18
17
|
|
|
19
|
-
Base installs only the SDK client and `httpx`. The `agents
|
|
20
|
-
model-provider dependencies; `harbor` installs Harbor plus
|
|
21
|
-
adapter dependencies
|
|
18
|
+
Base installs only the SDK client and `httpx`. The `agents` extra installs the
|
|
19
|
+
agent runtime plus model-provider dependencies; `harbor` installs Harbor plus
|
|
20
|
+
the environment adapter dependencies.
|
|
22
21
|
|
|
23
22
|
```python
|
|
24
23
|
from use_computer.agents import AnthropicComputerAgent
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "use-computer"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.32"
|
|
8
8
|
description = "Python SDK for use.computer sandboxes across macOS, iOS simulators, Windows, and Ubuntu"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -24,12 +24,7 @@ classifiers = [
|
|
|
24
24
|
]
|
|
25
25
|
|
|
26
26
|
[project.optional-dependencies]
|
|
27
|
-
agents = [
|
|
28
|
-
agents-openai = ["Pillow>=10", "openai>=1"]
|
|
29
|
-
agents-anthropic = ["Pillow>=10", "anthropic>=0.86"]
|
|
30
|
-
agents-litellm = ["Pillow>=10", "litellm>=1"]
|
|
31
|
-
agents-gemini = ["Pillow>=10", "google-genai>=1"]
|
|
32
|
-
agents-all = [
|
|
27
|
+
agents = [
|
|
33
28
|
"Pillow>=10",
|
|
34
29
|
"openai>=1",
|
|
35
30
|
"anthropic>=0.86",
|
|
@@ -25,12 +25,89 @@ for name in ["PIL", "openai", "anthropic", "google.genai", "litellm", "harbor",
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
AGENTS_SMOKE = r"""
|
|
28
|
+
import asyncio
|
|
28
29
|
import importlib
|
|
29
30
|
import importlib.util
|
|
31
|
+
import tempfile
|
|
32
|
+
from pathlib import Path
|
|
30
33
|
|
|
31
34
|
assert importlib.util.find_spec("PIL") is not None
|
|
35
|
+
for name in ["openai", "anthropic", "google.genai", "litellm"]:
|
|
36
|
+
assert importlib.util.find_spec(name) is not None, name
|
|
32
37
|
for path in ["use_computer.agents", "use_computer.agents.debug"]:
|
|
33
38
|
importlib.import_module(path)
|
|
39
|
+
|
|
40
|
+
from use_computer.agents import (
|
|
41
|
+
AnthropicComputerAgent,
|
|
42
|
+
GeminiComputerAgent,
|
|
43
|
+
GenericComputerAgent,
|
|
44
|
+
IOSComputerAgent,
|
|
45
|
+
OpenAIComputerAgent,
|
|
46
|
+
)
|
|
47
|
+
from use_computer.agents.debug import DebugComputerAgent
|
|
48
|
+
from use_computer.models import ExecResult
|
|
49
|
+
|
|
50
|
+
PNG_BYTES = (
|
|
51
|
+
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01"
|
|
52
|
+
b"\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDAT\x08\xd7c\xf8\xff"
|
|
53
|
+
b"\xff?\x00\x05\xfe\x02\xfeA\xe2`\\\x00\x00\x00\x00IEND\xaeB`\x82"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
class Recording:
|
|
57
|
+
async def start(self, name="trial"):
|
|
58
|
+
raise RuntimeError("recording disabled")
|
|
59
|
+
|
|
60
|
+
class Screenshot:
|
|
61
|
+
async def take_full_screen(self):
|
|
62
|
+
return PNG_BYTES
|
|
63
|
+
|
|
64
|
+
class Display:
|
|
65
|
+
async def get_windows(self):
|
|
66
|
+
return [{"role": "window", "title": "Fake"}]
|
|
67
|
+
|
|
68
|
+
class Mouse:
|
|
69
|
+
def __init__(self):
|
|
70
|
+
self.clicks = []
|
|
71
|
+
|
|
72
|
+
async def click(self, x, y, button="left", double=False):
|
|
73
|
+
self.clicks.append((x, y, button, double))
|
|
74
|
+
|
|
75
|
+
class Sandbox:
|
|
76
|
+
def __init__(self):
|
|
77
|
+
self.sandbox_id = "fake"
|
|
78
|
+
self.screenshot = Screenshot()
|
|
79
|
+
self.recording = Recording()
|
|
80
|
+
self.display = Display()
|
|
81
|
+
self.mouse = Mouse()
|
|
82
|
+
self.commands = []
|
|
83
|
+
|
|
84
|
+
async def exec_ssh(self, command, timeout=120):
|
|
85
|
+
self.commands.append(command)
|
|
86
|
+
return ExecResult(return_code=0, stdout="ok", stderr="")
|
|
87
|
+
|
|
88
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
89
|
+
root = Path(tmp)
|
|
90
|
+
sandbox = Sandbox()
|
|
91
|
+
result = asyncio.run(
|
|
92
|
+
DebugComputerAgent(max_steps=1).run(
|
|
93
|
+
"smoke",
|
|
94
|
+
sandbox=sandbox,
|
|
95
|
+
logs_dir=root / "agent",
|
|
96
|
+
task_dir=root / "task",
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
assert sandbox.mouse.clicks == [(960, 540, "left", False)]
|
|
100
|
+
assert sandbox.commands == ["echo hello world"]
|
|
101
|
+
assert result.final_message == "smoke"
|
|
102
|
+
|
|
103
|
+
for agent_cls, model_name in [
|
|
104
|
+
(AnthropicComputerAgent, "anthropic/claude-sonnet-4-6"),
|
|
105
|
+
(OpenAIComputerAgent, "openai/computer-use-preview"),
|
|
106
|
+
(GeminiComputerAgent, "gemini/gemini-2.5-computer-use-preview-10-2025"),
|
|
107
|
+
(GenericComputerAgent, "openai/gpt-4o"),
|
|
108
|
+
(IOSComputerAgent, "anthropic/claude-sonnet-4-6"),
|
|
109
|
+
]:
|
|
110
|
+
assert agent_cls(model_name=model_name, max_steps=1).max_steps == 1
|
|
34
111
|
"""
|
|
35
112
|
|
|
36
113
|
HARBOR_SMOKE = r"""
|
|
@@ -39,6 +116,13 @@ import importlib.util
|
|
|
39
116
|
|
|
40
117
|
for name in ["harbor", "yaml", "tomli"]:
|
|
41
118
|
assert importlib.util.find_spec(name) is not None, name
|
|
119
|
+
for path in ["use_computer.harbor", "use_computer.harbor.environment"]:
|
|
120
|
+
importlib.import_module(path)
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
HARBOR_AGENTS_SMOKE = r"""
|
|
124
|
+
import importlib
|
|
125
|
+
|
|
42
126
|
for path in ["use_computer.harbor.environment", "use_computer.harbor.agents"]:
|
|
43
127
|
importlib.import_module(path)
|
|
44
128
|
"""
|
|
@@ -58,6 +142,7 @@ def main() -> None:
|
|
|
58
142
|
_smoke_install(wheel, None, BASE_SMOKE)
|
|
59
143
|
_smoke_install(wheel, "agents", AGENTS_SMOKE)
|
|
60
144
|
_smoke_install(wheel, "harbor", HARBOR_SMOKE)
|
|
145
|
+
_smoke_install(wheel, "harbor,agents", HARBOR_AGENTS_SMOKE)
|
|
61
146
|
|
|
62
147
|
|
|
63
148
|
def _check_wheel_contents(wheel: Path) -> None:
|
|
@@ -92,18 +177,25 @@ def _check_metadata(wheel: Path) -> None:
|
|
|
92
177
|
|
|
93
178
|
required = [
|
|
94
179
|
"Provides-Extra: agents",
|
|
95
|
-
"Provides-Extra: agents-openai",
|
|
96
|
-
"Provides-Extra: agents-anthropic",
|
|
97
|
-
"Provides-Extra: agents-litellm",
|
|
98
|
-
"Provides-Extra: agents-gemini",
|
|
99
|
-
"Provides-Extra: agents-all",
|
|
100
180
|
"Provides-Extra: harbor",
|
|
101
181
|
"Requires-Dist: pillow>=10; extra == 'agents'",
|
|
182
|
+
"Requires-Dist: openai>=1; extra == 'agents'",
|
|
183
|
+
"Requires-Dist: anthropic>=0.86; extra == 'agents'",
|
|
184
|
+
"Requires-Dist: litellm>=1; extra == 'agents'",
|
|
185
|
+
"Requires-Dist: google-genai>=1; extra == 'agents'",
|
|
102
186
|
]
|
|
103
187
|
missing = [line for line in required if line not in metadata]
|
|
104
188
|
if missing:
|
|
105
189
|
raise SystemExit(f"wheel metadata is missing: {missing}")
|
|
106
190
|
|
|
191
|
+
forbidden = [
|
|
192
|
+
f"Provides-Extra: agents-{name}"
|
|
193
|
+
for name in ("openai", "anthropic", "litellm", "gemini", "all")
|
|
194
|
+
]
|
|
195
|
+
present = [line for line in forbidden if line in metadata]
|
|
196
|
+
if present:
|
|
197
|
+
raise SystemExit(f"wheel metadata still has provider-specific extras: {present}")
|
|
198
|
+
|
|
107
199
|
harbor_lines = [
|
|
108
200
|
line for line in metadata.splitlines() if line.startswith("Requires-Dist: harbor>=0.4.0;")
|
|
109
201
|
]
|
|
@@ -112,6 +204,18 @@ def _check_metadata(wheel: Path) -> None:
|
|
|
112
204
|
):
|
|
113
205
|
raise SystemExit("wheel metadata is missing the Python 3.12+ Harbor extra")
|
|
114
206
|
|
|
207
|
+
forbidden_harbor_deps = [
|
|
208
|
+
line
|
|
209
|
+
for line in metadata.splitlines()
|
|
210
|
+
if "extra == 'harbor'" in line
|
|
211
|
+
and any(
|
|
212
|
+
f"Requires-Dist: {name}" in line
|
|
213
|
+
for name in ("pillow", "openai", "anthropic", "litellm", "google-genai")
|
|
214
|
+
)
|
|
215
|
+
]
|
|
216
|
+
if forbidden_harbor_deps:
|
|
217
|
+
raise SystemExit(f"harbor extra should not install agent deps: {forbidden_harbor_deps}")
|
|
218
|
+
|
|
115
219
|
|
|
116
220
|
def _smoke_install(wheel: Path, extra: str | None, code: str) -> None:
|
|
117
221
|
with tempfile.TemporaryDirectory(prefix="use-computer-wheel-") as tmp:
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"""Optional computer-use agents.
|
|
2
2
|
|
|
3
|
-
Install
|
|
4
|
-
use-computer[agents-openai], use-computer[agents-anthropic],
|
|
5
|
-
use-computer[agents-litellm], use-computer[agents-gemini], or
|
|
6
|
-
use-computer[agents-all].
|
|
3
|
+
Install provider-backed agents with `use-computer[agents]`.
|
|
7
4
|
"""
|
|
8
5
|
|
|
9
6
|
from __future__ import annotations
|
|
@@ -48,10 +45,7 @@ def __getattr__(name: str) -> Any:
|
|
|
48
45
|
module = import_module(module_name)
|
|
49
46
|
except ModuleNotFoundError as exc:
|
|
50
47
|
raise ModuleNotFoundError(
|
|
51
|
-
f"{name} requires
|
|
52
|
-
"`use-computer[agents]`, `use-computer[agents-openai]`, "
|
|
53
|
-
"`use-computer[agents-anthropic]`, `use-computer[agents-litellm]`, "
|
|
54
|
-
"`use-computer[agents-gemini]`, or `use-computer[agents-all]`."
|
|
48
|
+
f"{name} requires optional agent dependencies. Install `use-computer[agents]`."
|
|
55
49
|
) from exc
|
|
56
50
|
value = getattr(module, attr)
|
|
57
51
|
globals()[name] = value
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
- `realistic: true` emits deterministic screenshot/action/exec traffic.
|
|
7
7
|
- Default mode takes a screenshot, performs one simple action, and runs one exec.
|
|
8
8
|
|
|
9
|
-
Direct SDK import path: `use_computer.agents.debug:
|
|
9
|
+
Direct SDK import path: `use_computer.agents.debug:DebugComputerAgent`.
|
|
10
10
|
Harbor wrapper import path: `use_computer.harbor.agents:DebugCUAAgent`.
|
|
@@ -32,7 +32,13 @@ class _HarborAgent(BaseAgent):
|
|
|
32
32
|
mcp_servers=mcp_servers,
|
|
33
33
|
skills_dir=skills_dir,
|
|
34
34
|
)
|
|
35
|
-
|
|
35
|
+
try:
|
|
36
|
+
cls = getattr(import_module(self.agent_module), self.agent_name)
|
|
37
|
+
except ModuleNotFoundError as exc:
|
|
38
|
+
raise ModuleNotFoundError(
|
|
39
|
+
f"{type(self).__name__} requires agent dependencies. "
|
|
40
|
+
"Install `use-computer[harbor,agents]`."
|
|
41
|
+
) from exc
|
|
36
42
|
self._agent = cls(
|
|
37
43
|
logs_dir=logs_dir,
|
|
38
44
|
model_name=model_name,
|
|
@@ -4769,28 +4769,9 @@ dependencies = [
|
|
|
4769
4769
|
|
|
4770
4770
|
[package.optional-dependencies]
|
|
4771
4771
|
agents = [
|
|
4772
|
-
{ name = "pillow" },
|
|
4773
|
-
]
|
|
4774
|
-
agents-all = [
|
|
4775
|
-
{ name = "anthropic" },
|
|
4776
|
-
{ name = "google-genai" },
|
|
4777
|
-
{ name = "litellm" },
|
|
4778
|
-
{ name = "openai" },
|
|
4779
|
-
{ name = "pillow" },
|
|
4780
|
-
]
|
|
4781
|
-
agents-anthropic = [
|
|
4782
4772
|
{ name = "anthropic" },
|
|
4783
|
-
{ name = "pillow" },
|
|
4784
|
-
]
|
|
4785
|
-
agents-gemini = [
|
|
4786
4773
|
{ name = "google-genai" },
|
|
4787
|
-
{ name = "pillow" },
|
|
4788
|
-
]
|
|
4789
|
-
agents-litellm = [
|
|
4790
4774
|
{ name = "litellm" },
|
|
4791
|
-
{ name = "pillow" },
|
|
4792
|
-
]
|
|
4793
|
-
agents-openai = [
|
|
4794
4775
|
{ name = "openai" },
|
|
4795
4776
|
{ name = "pillow" },
|
|
4796
4777
|
]
|
|
@@ -4819,26 +4800,17 @@ dev = [
|
|
|
4819
4800
|
|
|
4820
4801
|
[package.metadata]
|
|
4821
4802
|
requires-dist = [
|
|
4822
|
-
{ name = "anthropic", marker = "extra == 'agents
|
|
4823
|
-
{ name = "
|
|
4824
|
-
{ name = "google-genai", marker = "extra == 'agents-all'", specifier = ">=1" },
|
|
4825
|
-
{ name = "google-genai", marker = "extra == 'agents-gemini'", specifier = ">=1" },
|
|
4803
|
+
{ name = "anthropic", marker = "extra == 'agents'", specifier = ">=0.86" },
|
|
4804
|
+
{ name = "google-genai", marker = "extra == 'agents'", specifier = ">=1" },
|
|
4826
4805
|
{ name = "harbor", marker = "python_full_version >= '3.12' and extra == 'harbor'", specifier = ">=0.4.0" },
|
|
4827
4806
|
{ name = "httpx", specifier = ">=0.27" },
|
|
4828
|
-
{ name = "litellm", marker = "extra == 'agents
|
|
4829
|
-
{ name = "
|
|
4830
|
-
{ name = "openai", marker = "extra == 'agents-all'", specifier = ">=1" },
|
|
4831
|
-
{ name = "openai", marker = "extra == 'agents-openai'", specifier = ">=1" },
|
|
4807
|
+
{ name = "litellm", marker = "extra == 'agents'", specifier = ">=1" },
|
|
4808
|
+
{ name = "openai", marker = "extra == 'agents'", specifier = ">=1" },
|
|
4832
4809
|
{ name = "pillow", marker = "extra == 'agents'", specifier = ">=10" },
|
|
4833
|
-
{ name = "pillow", marker = "extra == 'agents-all'", specifier = ">=10" },
|
|
4834
|
-
{ name = "pillow", marker = "extra == 'agents-anthropic'", specifier = ">=10" },
|
|
4835
|
-
{ name = "pillow", marker = "extra == 'agents-gemini'", specifier = ">=10" },
|
|
4836
|
-
{ name = "pillow", marker = "extra == 'agents-litellm'", specifier = ">=10" },
|
|
4837
|
-
{ name = "pillow", marker = "extra == 'agents-openai'", specifier = ">=10" },
|
|
4838
4810
|
{ name = "pyyaml", marker = "extra == 'harbor'", specifier = ">=6" },
|
|
4839
4811
|
{ name = "tomli", marker = "extra == 'harbor'", specifier = ">=2" },
|
|
4840
4812
|
]
|
|
4841
|
-
provides-extras = ["agents", "
|
|
4813
|
+
provides-extras = ["agents", "harbor"]
|
|
4842
4814
|
|
|
4843
4815
|
[package.metadata.requires-dev]
|
|
4844
4816
|
dev = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/__init__.py
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ios.py
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/macos.py
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ubuntu.py
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/windows.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/__init__.py
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/verifier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ios_nograder.sh
RENAMED
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_check.sh
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_nograder.sh
RENAMED
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_check.sh
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_nograder.sh
RENAMED
|
File without changes
|
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_check.sh
RENAMED
|
File without changes
|
{use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_nograder.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|